summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/lwarp
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/lwarp
Initial commit
Diffstat (limited to 'macros/latex/contrib/lwarp')
-rw-r--r--macros/latex/contrib/lwarp/README.txt47
-rw-r--r--macros/latex/contrib/lwarp/lwarp.dtx70907
-rw-r--r--macros/latex/contrib/lwarp/lwarp.ins484
-rw-r--r--macros/latex/contrib/lwarp/lwarp.pdfbin0 -> 2456196 bytes
-rw-r--r--macros/latex/contrib/lwarp/lwarp_baseline_marker.eps32
-rw-r--r--macros/latex/contrib/lwarp/lwarp_baseline_marker.pngbin0 -> 89 bytes
-rw-r--r--macros/latex/contrib/lwarp/lwarp_tutorial.txt95
-rwxr-xr-xmacros/latex/contrib/lwarp/lwarpmk.lua862
8 files changed, 72427 insertions, 0 deletions
diff --git a/macros/latex/contrib/lwarp/README.txt b/macros/latex/contrib/lwarp/README.txt
new file mode 100644
index 0000000000..8096e91183
--- /dev/null
+++ b/macros/latex/contrib/lwarp/README.txt
@@ -0,0 +1,47 @@
+
+LaTeX lwarp package v0.73 README.txt
+
+Files included are:
+
+lwarp.dtx: The documented source code.
+lwarp.ins: The documentation driver.
+lwarp.pdf: The documentation.
+lwarp_tutorial.txt: More documentation. A sample tutorial.
+lwarpmk.lua: A utility program which compiles print or HTML versions.
+lwarp_mathjax.txt: A script inserted when MathJax is used.
+lwarp_baseline_marker.png: A tiny transparent image used to
+ improve SVG math width and baselines, to be located in
+ tex/latex/lwarp and thus be found by kpsewhich.
+
+Derived by compiling lwarp.ins:
+lwarp.sty: The lwarp package.
+lwarp-*.sty: Numerous compatibility files for other packages.
+
+
+NOTE FOR TEX DISTRIBUTION MAINTAINERS:
+For a TeX distribution, an executable called "lwarpmk" should
+be created in each bin directory, which is a link to or which
+calls the "lwarpmk.lua" script found in the scripts directory.
+See the installation instructions in the documentation.
+
+
+The documentation includes a file listing "tutorial.tex" which may be
+copied/pasted from the documentation into an editor, or it may
+be copied from the file lwarp_tutorial.tex, which is found in the
+documentation directory.
+
+
+License:
+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.
+
+
+Copyright 2016-2019 Brian Dunn
+
+Homepage: http://BDTechConcepts.com
+Email: bd@BDTechConcepts.com
diff --git a/macros/latex/contrib/lwarp/lwarp.dtx b/macros/latex/contrib/lwarp/lwarp.dtx
new file mode 100644
index 0000000000..1fb0b0536c
--- /dev/null
+++ b/macros/latex/contrib/lwarp/lwarp.dtx
@@ -0,0 +1,70907 @@
+%
+% \iffalse meta-comment
+%
+% Copyright 2016-2019 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.
+%
+% \fi
+%
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{lwarp}
+%<package> [2019/07/11 v0.73 Allows LaTeX to directly produce HTML5 output.]
+%
+%<*driver>
+\documentclass{ltxdoc}
+
+\usepackage{lmodern}
+% \usepackage{libertine}
+\usepackage[space]{erewhon}
+\usepackage[varqu,varl]{inconsolata} % typewriter
+% \usepackage{roboto}% conflicts with \textsc inside a float
+% \usepackage{sourcesanspro}
+\usepackage{cabin}
+% \usepackage[tabular,semibold]{sourcesanspro}
+
+%
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+
+\usepackage{textcomp} % provides \degree, \textquotesingle, \textmu
+
+\usepackage{newunicodechar}
+\newunicodechar{ff}{ff}
+\newunicodechar{fi}{fi}
+\newunicodechar{fl}{fl}
+\newunicodechar{ffi}{ffi}
+\newunicodechar{ffl}{ffl}
+% \newunicodechar{°}{\degree}
+\newunicodechar{ρ}{\ensuremath{\rho}}
+\newunicodechar{⨯}{\texttimes}
+\newunicodechar{⁄}{\textfractionsolidus}
+% \newunicodechar{®}{\textregistered}
+% \newunicodechar{©}{\textcopyright}
+\newunicodechar{—}{---}
+\newunicodechar{–}{--}
+% \newunicodechar{”}{''}
+% \newunicodechar{“}{``}
+% \newunicodechar{§}{\S}
+% \newunicodechar{¶}{\P}
+% \newunicodechar{†}{\dag}
+\newunicodechar{‡}{\ddag}
+\newunicodechar{Á}{\'{A}}
+\newunicodechar{è}{\`{e}}
+\newunicodechar{ø}{\o{}}
+\newunicodechar{Æ}{\AE{}}
+\newunicodechar{â}{\^{a}}
+\newunicodechar{ô}{\^{o}}
+\newunicodechar{Ô}{\^{O}}
+\newunicodechar{ê}{\^{e}}
+\newunicodechar{Ω}{\textohm}
+\newunicodechar{μ}{\textmu}
+\newunicodechar{⁅}{\textlquill}
+\newunicodechar{⁆}{\textrquill}
+\newunicodechar{℗}{\textcircledP}
+\newunicodechar{—}{\texttwelveudash}% emdash
+\newunicodechar{—}{\textthreequartersemdash}% emdash
+\newunicodechar{℧}{\textmho}
+\newunicodechar{₦}{\textnaira}
+\newunicodechar{₱}{\textpeso}
+\newunicodechar{℞}{\textrecipe}
+\newunicodechar{‽}{\textinterrobang}
+\newunicodechar{⸘}{\textinterrobangdown}
+\newunicodechar{‰}{\textperthousand}
+\newunicodechar{‱}{\textpertenthousand}
+\newunicodechar{฿}{\textbaht}
+\newunicodechar{℠}{\textservicemark}
+
+\usepackage[log-declarations=false]{xparse}
+
+
+
+\usepackage[lwarpmk]{lwarp}
+
+\usepackage[erewhon]{newtxmath}
+
+
+
+\usepackage{titlesec}
+% \usepackage[nobottomtitles*]{titlesec}
+% \renewcommand{\bottomtitlespace}{.\textheight}
+
+\titleformat{\part}[hang]
+ {\LARGE\ttfamily\bfseries}{}{0pt}{}[\marginpar{\hfill{}File\,\thepart}]
+
+\titlespacing*{\part}{0pt}{*5}{0ex}
+
+% redefine \part to modify \@currentlabelname:
+\makeatletter
+\LetLtxMacro\LWR@titlesec@part\part
+\RenewDocumentCommand{\part}{s o m}{%
+\def\@currentlabelname{#3}%
+\IfBooleanTF{#1}{% star
+ \IfValueTF{#2}{% star opt
+ \LWR@titlesec@part*[#2]{#3}%
+ }{% star noopt
+ \LWR@titlesec@part*{#3}%
+ }%
+}{% no star
+ \IfValueTF{#2}{% opt
+ \LWR@titlesec@part[#2]{#3}%
+ }{% noopt
+ \LWR@titlesec@part{#3}%
+ }%
+}%
+}
+\makeatother
+
+
+\usepackage{needspace}
+
+
+\usepackage[svgnames]{xcolor}
+\definecolor{myurlcolor}{rgb}{0,0,.7}
+\definecolor{mylinkcolor}{rgb}{.7,0,0}
+\definecolor{codecolor}{rgb}{0,.4,.2}
+\definecolor{overviewcolor}{rgb}{0,.2,.4}
+
+\usepackage[
+ left=2in,
+ right=1.5in,
+ top=1.5in,
+ bottom=1in
+]{geometry}
+
+\usepackage{graphicx}
+\graphicspath{{images/}}
+
+
+\usepackage{metalogo}
+
+\makeatletter
+\@ifpackageloaded{erewhon}{
+% for erewhon:
+\setlogokern{Te}{-.08em}
+\setlogokern{eX}{-0.04em}
+\setlogokern{La}{-.25em}
+\setlogokern{aT}{-.10em}
+\setlogokern{Xe}{-.04em}
+\setlogokern{eL}{-.06em}
+\setlogodrop{0.27ex}
+}{}
+\makeatother
+
+
+\usepackage{enumitem}
+
+\usepackage{array}
+\usepackage{longtable}
+\usepackage{booktabs}
+\usepackage{threeparttable}
+\usepackage{multirow}
+\usepackage{bigdelim}
+
+\usepackage[normalem]{ulem}
+
+\usepackage{fancyvrb}
+
+\usepackage{capt-of}
+
+\usepackage{comment}
+
+% ^^A tocloft had issues with \textsc
+% \usepackage{tocloft}
+% \renewcommand{\cftpartfont}{\Large\bfseries}
+% \setlength{\cftsecnumwidth}{2.5em}
+% \setlength{\cftsubsecnumwidth}{3em}
+% \setlength{\cftsubsubsecindent}{2.8em}
+% \setlength{\cftsubsubsecnumwidth}{4em}
+
+\usepackage{titletoc}
+\dottedcontents{part}[0em]{\large\bfseries}{3.5em}{1pc}
+\dottedcontents{section}[2em]{\bfseries}{3.5em}{1pc}
+\dottedcontents{subsection}[4em]{}{3.5em}{1pc}
+\dottedcontents{subsubsection}[6em]{}{4em}{1pc}
+
+\usepackage[notbib,notindex,nottoc]{tocbibind}
+
+\usepackage{titleps}
+
+\newpagestyle{pageheadfoot}{
+ \headrule
+ \sethead{\pkg{lwarp}}{}{\thepage}
+% \renewcommand{\makefootrule}{\rule[2.5ex]{\linewidth}{.4pt}}
+ \setfoot{}{}{}
+}
+
+\pagestyle{pageheadfoot}
+
+
+\usepackage{dtxdescribe}[2019/07/16]
+
+
+\usepackage{splitidx}
+
+\newindex[Index of Objects]{idx}
+\newindex[General Index]{gen}
+\newindex[Troubleshooting Index]{trb}
+\newindex[Index of Indexes]{meta}
+
+\makeindex
+
+\newcommand*{\gindex}[1]{\sindex[gen]{#1}\ignorespaces}
+
+
+
+\usepackage{microtype}
+
+\usepackage[all,defaultlines=2]{nowidow}
+
+
+
+\usepackage[pdftex,bookmarks=true,hidelinks,%
+colorlinks,linkcolor=mylinkcolor,urlcolor=myurlcolor,%
+pageanchor=true,hyperindex=true,hyperfootnotes=false%
+]{hyperref}
+
+\hypersetup{%
+pdfinfo={%
+Title={LaTeX lwarp package},%
+Author={Brian Dunn},%
+Subject={LaTeX to HTML conversion},%
+Keywords={LaTeX, HTML, conversion}%
+}}
+
+
+
+\usepackage{cleveref}
+
+
+\renewcommand{\partname}{Package}
+\renewcommand*{\thepart}{\arabic{part}}
+
+\renewenvironment{abstract}
+ {
+ \addvspace{\bigskipamount}
+ \begin{center}
+ \textbf{\abstractname}
+ \end{center}
+% \small
+ \setlength{\parindent}{2em}
+ \setlength{\parskip}{0ex}
+ }
+ {
+ \addvspace{\bigskipamount}
+ }
+
+\makeatletter
+\newcommand*{\rulebreak}{%
+ \bigskip\hfill\rule[.7ex]{.3\linewidth}{.4pt}\hspace*{\fill}\bigskip\@afterheading%
+}
+\makeatother
+
+\newcommand*{\goesto}{$\Rightarrow$}
+
+\newcommand*{\AV}{\acro{A}\Slash\acro{V}}
+
+\makeatletter
+\@ifpackageloaded{erewhon}{\renewcommand*{\HTMLfive}{\acro{HTML}\textosf{5}}}{}
+\makeatother
+
+\newcommand{\credits}[1]{{\footnotesize(\textit{Emulates or patches code by} \textsc{#1}.)}}
+
+\newcommand*{\codehtml}{\leavevmode\marginpar{\footnotesize\raggedleft\textcolor{codecolor}{\textbf{for HTML output:~}}}\vspace{-5.25ex}}
+\newcommand*{\codeprint}{\leavevmode\marginpar{\footnotesize\raggedleft\textcolor{codecolor}{\textbf{for PRINT output:~}}}\vspace{-5.25ex}}
+\newcommand*{\codeall}{\leavevmode\marginpar{\footnotesize\raggedleft\textcolor{codecolor}{\textbf{for HTML \& PRINT:~}}}\vspace{-5.25ex}}
+\newcommand*{\codeconfig}{\leavevmode\marginpar{\footnotesize\raggedleft\textcolor{codecolor}{\textbf{Config file:~}}}\vspace{-5.25ex}}
+
+\newcommand*{\testthis}{\textcolor{blue}{Please send bug reports!}\watchout[Not fully tested!]}
+
+\newcommand{\textred}[1]{\textcolor{red}{#1}}
+\newcommand{\textgreen}[1]{\textcolor{green!50!black}{#1}}
+\newcommand{\textcyan}[1]{\textcolor{cyan!70!black}{#1}}
+\newcommand{\textblue}[1]{\textcolor{blue!70!black}{#1}}
+\newcommand{\textgray}[1]{\textcolor{white!30!black}{#1}}
+
+
+% \newcommand{\spkg}[1]{\textcolor{green!30!gray}{\pkg{#1}}}% package supported as-is
+% \newcommand{\mpkg}[1]{\textcolor{cyan!30!gray}{\pkg{#1}}}% package modified for HTML
+% \newcommand{\epkg}[1]{\textcolor{blue!30!gray}{\pkg{#1}}}% package emulated for HTML
+% \newcommand{\ipkg}[1]{\textcolor{magenta!30!gray}{\pkg{#1}}}% package ignored
+% \newcommand{\wpkg}[1]{\textcolor{red!30!gray}{\pkg{#1}}}% package warning special case
+
+% green/blue/magenta/gray
+\newcommand{\spkg}[1]{\textcolor[Hsb]{120,1,.4}{\pkg{#1}}}% package supported as-is
+\newcommand{\mpkg}[1]{\textcolor[Hsb]{240,1,.4}{\pkg{#1}}}% package modified for HTML
+\newcommand{\epkg}[1]{\textcolor[Hsb]{300,1,.5}{\pkg{#1}}}% package emulated for HTML
+\newcommand{\ipkg}[1]{\textcolor[Hsb]{0,0,.5}{\pkg{#1}}}% package ignored
+\newcommand{\wpkg}[1]{\textcolor[Hsb]{0,1,.5}{\pkg{#1}}}% package warning special case
+
+% green/cyan/blue/magenta
+% \newcommand{\spkg}[1]{\textcolor[Hsb]{120,1,.4}{\pkg{#1}}}% package supported as-is
+% \newcommand{\mpkg}[1]{\textcolor[Hsb]{180,1,.4}{\pkg{#1}}}% package modified for HTML
+% \newcommand{\epkg}[1]{\textcolor[Hsb]{240,1,.5}{\pkg{#1}}}% package emulated for HTML
+% \newcommand{\ipkg}[1]{\textcolor[Hsb]{300,1,.5}{\pkg{#1}}}% package ignored
+% \newcommand{\wpkg}[1]{\textcolor[Hsb]{0,1,.5}{\pkg{#1}}}% package warning special case
+
+
+
+\newcommand{\pdflatexonly}{
+\textred{Only pre-loaded if \prog{pdflatex} is being used.}
+\marginpar{\raggedleft\textblue{\prog{pdflatex} only:}}
+}
+
+
+% \trouble[watchout phrase]{index entry}
+\newcommand*{\trouble}[2][]{%
+\ifblank{#1}{}{%
+ \watchout[#1]%
+}%
+\sindex[trb]{#2}%
+\ignorespaces%
+}
+
+
+% The following text is used in multiple places in the documentation:
+
+\newcommand{\needhelp}{
+\begin{minipage}{\linewidth}
+\hrule\smallskip
+\small
+See the \nameref{sec:indexgen} for ``how-to'', and
+the \nameref{sec:indextrb} if something doesn't work.
+The \nameref{sec:indexidx} contains automated entries for each package, macro, environment,
+counter, boolean, and other objects; individually and also sorted by category.
+A \nameref{sec:troubleshooting} section is also available.
+\smallskip
+\hrule
+\end{minipage}\margintag{Need help?}
+}
+
+\newcommand{\usedbykomascript}{
+This package may be loaded standalone, but
+is also loaded automatically if \pkg{koma-script} classes are in use.
+\cs{DeclareDocumentCommand} is used to overwrite the \pkg{koma-script} definitions.
+}
+
+\newcommand{\documentationnotes}{
+The following sections document the actual implementation of the \pkg{lwarp} package.
+
+The small numbers at the left end of a line refer to line numbers
+\margintag{line numbers}
+in the \texttt{lwarp.sty} file.
+
+Blue-colored tags in the left margin
+\margintag{subjects}
+aid in quickly identifying the subject of each paragraph.
+
+Black-colored tags in the left marign are used to
+\margintag{objects}
+identify programming objects such as files, packages,
+environments, booleans, and counters.
+Items without a tag are command macros.
+Each of these also appears in the index as
+\margintag{index entries}
+individual entries, and are also listed together under ``files'', ``packages'', ``environments'',
+``booleans'', and ``counters''.
+
+Special warnings are marked with a warning icon.
+\watchout[warnings]
+
+\codehtml\vspace*{5.25ex}\ignorespaces
+\codeprint\vspace*{5.25ex}\ignorespaces
+\codeall\vspace*{5.25ex}\ignorespaces
+Green-colored tags in the left margin show which sections of source
+code apply to the generation of \HTML, print, or both forms of output.
+}
+
+
+\newcommand{\describemathimagename}{%
+When creating an \SVG\ math image, its \attribute{alt} tag may be set
+to the math expression, which may be hashed for image reuse.
+In the case of \cs{ensuremath} or after \cs{inlinemathother},
+where the contents require a unique image for each instance of the same expression,
+the \attribute{alt} tag is set to \cs{mathimagename}, and the image is not reused.
+
+This expression is visible in the browser if images are not loaded,
+and appears when the text is copied and pasted.
+The default is ``math image'', and it may be changed according to the document's language.
+This may be set in the preamble, or changed as necessary inside the document,
+where it will affect the following \SVG\ math images.
+}
+
+\newcommand{\describepackagediagramname}{%
+For many packages, the output is placed inside a \env{lateximage} with an
+\HTML\ \attribute{alt} tag set to the package name followed by \cs{packagediagramname}.
+For example:
+\begin{sourcedisplay}
+(-xy- diagram)
+\end{sourcedisplay}
+This expression is visible in the browser if images are not loaded,
+and appears when the text is copied and pasted.
+The default is ``diagram'', and may it be changed according to the document's language.
+This may be set in the preamble, or changed as necessary inside the document,
+where it will affect the following \env{lateximage}s.
+}
+
+\newcommand{\limitscpageref}{%
+\pkg{cleveref} and \pkg{varioref} are supported,
+\trouble[\pkg{cleveref} page numbers]{page numbers}
+\trouble{reference>page number}
+but printed page numbers do not map to \HTML,
+so a section name or a text phrase
+are used for \cs{cpageref} and \cs{cpagerefrange}.
+This phrase includes \cs{cpagerefFor}, which defaults to ``for''.
+
+\needspace{3\baselineskip}
+Ex:
+\begin{sourcedisplay}
+ \cs{cpageref}\{tab:first,tab:second\} \\
+ \hspace*{-2em} in \HTML\ becomes:\\
+ \rmfamily
+ ``pages \textbf{for} table \textred{4.1} and
+ \textbf{for} table \textred{4.2}''
+\end{sourcedisplay}
+See \cs{cpagerefFor} at \cpageref{sec:cpagereffor}
+to redefine the message which is printed for page number references.
+}
+
+\newcommand{\limitshyperlinks}{%
+\pkg{lwarp} emulates \pkg{hyperref}, including the creation of active hyperlinks,
+but does not require that \pkg{hyperref} be loaded by the document.
+
+Do not place a comment with a \texttt{\%} character between arguments
+\trouble[comments between arguments]{hyperref=\pkg{hyperref}>comments between arguments}
+for \cs{hyperref}, etc., as it is neutralized for inclusion in \HTML\ \URL{}s.
+
+\pkg{lwarp} can also load \pkg{url}, but \pkg{url} should not be used at the
+same time as \pkg{hyperref}, since they both define the \cs{url} command.
+\pkg{lwarp} does not (yet) attempt to convert \pkg{url} links into hyperlinks
+during \HTML\ output, nor does the print version of \pkg{url}
+create hyperlinks.
+
+When generating \HTML, \pkg{lwarp}'s emulation of \pkg{hyperref} does not
+\trouble[\pkg{backref}]{hyperref=\pkg{hyperref}>backref=\pkg{backref}}
+\trouble{backref=\pkg{backref}}
+automatically load \pkg{backref}, so \pkg{backref} must be loaded explicitly.
+}
+
+\newcommand{\limitsabstract}{%
+If using the \optn{number} option with file splits,
+\trouble[missing \TOC]{abstract>missing \TOC}
+be sure to place the table of contents before the abstract.
+The \optn{number} option causes a section break which
+may cause a file split, which would put a table of contents out
+of the home page if it is after the abstract.
+}
+
+\newcommand{\limitstitlepage}{%
+\pkg{lwarp} supports the native \LaTeX\ titling commands, and also
+\margintag{package support}
+supports the packages \pkg{authblk} and \pkg{titling}. If both are
+\trouble[load order]{authblk=\pkg{authblk}>titling=\pkg{titling}}
+\trouble{titling=\pkg{titling}>authblk=\pkg{authblk}}
+used, \pkg{authblk} should be loaded before \pkg{titling}.
+
+If using the \pkg{titling} package, additional titlepage fields
+\margintag{\cs{published} and \cs{subtitle}}
+for \cs{published} and \cs{subtitle} may be added by using
+\cs{AddSubtitlePublished} in the preamble.
+See \cref{sec:publishedsubtitle}.
+}
+
+\newcommand{\limitsappendix}{%
+During \HTML\ conversion, the option \optn{toc} without
+\trouble[incorrect \TOC\ link]{appendix>incorrect \TOC\ link}
+the option \optn{page} results in a \TOC\ link to
+whichever section was before the \texttt{appendices} environment.
+It is recommended to use both \texttt{toc} and also \texttt{page} at the same time.
+}
+
+\newcommand{\limitspdftotextenc}{%
+The option
+\DescribeOption{pdftotextEnc}
+\DescribeDefault{UTF-8}
+\optn{pdftotextEnc} sets the encoding used by \prog{pdftotext}.
+This is passed to \prog{pdftotext} using its \optn{-enc} option, and is
+used when converting \LaTeX\ \PDF\ output with \HTML\ tags into
+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:
+\begin{sourcedisplay}
+bibtex <projectname>\textred{\_html}.gls
+\end{sourcedisplay}
+}
+
+\newcommand{\limitsglossaries}{%
+\margintag{processing glossaries}
+\DescribeOption{GlossaryCmd}\DescribeDefault{makeglossaries}
+\DescribeOption[lwarpmk]{printglossary}
+\DescribeOption[lwarpmk]{htmlglossary}
+\prog{lwarpmk} has the commands \texttt{lwarpmk printglossary} and
+\texttt{lwarpmk htmlglossary}, which process the glossaries created by the
+\pkg{glossaries} package using that package's \prog{makeglossaries} program.
+
+The shell command to execute is set by the \pkg{lwarp} option \optn{GlossaryCmd},
+which defaults to \cmds{makeglossaries}.
+The print or \HTML\ glossary filename is appended to this command.
+
+In some situations it may be required to modify the default command,
+\trouble[\prog{makeglossaries} not found]{makeglossaries=\prog{makeglossaries}>not found}
+\trouble{glossaries=\pkg{glossaries}>makeglossaries=\prog{makeglossaries} not found}
+such as to add the \cmds{perl} command in front:
+\begin{sourcedisplay}
+\cs{usepackage}[ \\
+\fquad\ GlossaryCmd=\{\textred{perl} makeglossaries\}, \\
+] \{lwarp\}
+\end{sourcedisplay}
+
+To set the language to use for processing glossaries with \prog{xindy}:
+\margintag{\prog{xindy} language}
+\begin{sourcedisplay}
+\cs{usepackage}[ \\
+\fquad\ GlossaryCmd=\{makeglossaries \textred{-L english}\}, \\
+] \{lwarp\}
+\end{sourcedisplay}
+Other options for \prog{makeglossaries} may be set as well.
+
+The glossaries may be placed in a numbered or unnumbered section, given
+\margintag{placement and \TOC\ options}
+a \TOC\ entry, and placed inline or on their own \HTML\ page:
+\begin{description}
+
+\item [Numbered section, on its own \HTML\ page:]
+ \begin{sourcedisplay}
+ \cs{usepackage}[xindy,toc,numberedsection=nolabel]\{glossaries\} \\
+ \dots \\
+ \cs{printglossaries}
+ \end{sourcedisplay}
+
+\item [Unnumbered section, inline with the current \HTML\ page:]
+ \begin{sourcedisplay}
+ \cs{usepackage}[xindy,toc]\{glossaries\} \\
+ \dots \\
+ \cs{printglossaries}
+ \end{sourcedisplay}
+
+\item [Unnumbered section, on its own \HTML\ page:]
+ \begin{sourcedisplay}
+ \cs{usepackage}[xindy,toc]\{glossaries\} \\
+ \dots \\
+ \cs{ForceHTMLPage} \\
+ \cs{printglossaries}
+ \end{sourcedisplay}
+\end{description}
+
+The default \optn{style=item} option for \pkg{glossaries} conflicts
+\trouble[glossary style]{glossaries=\pkg{glossaries}>style}
+with \pkg{lwarp}, so the style is forced to \texttt{index} instead.
+
+The page number list in the printed form would become \cs{nameref}s in \HTML,
+\trouble[number list]{glossaries=\pkg{glossaries}>page numbers}
+which could become a very long string if many items are referenced.
+For now, the number list is simply turned off.
+
+The print and \HTML\ versions of the glossary differ
+\margintag{print/\HTML\ versions}
+in their internal page numbers.
+Separate commands for generating print and \HTML\ glossaries are used, even
+though the page number is currently ignored.
+}
+
+\newcommand{\limitsnomencl}{%
+To process the \HTML\ nomenclature:
+\begin{sourcedisplay}
+makeindex <project>\textred{\_html}.nlo -s nomencl.ist -o <project>\textred{\_html}.nls
+\end{sourcedisplay}
+}
+
+\newcommand{\limitstocbibind}{%
+An index may be placed inline with other \HTML\ text, or on its own \HTML\ page:
+\margintag{placement and \TOC\ options}
+\gindex{index>placement and \TOC\ options}
+\gindex{index>table of contents}
+
+\begin{description}
+
+\item [Inline, with a manual \TOC\ entry:] \
+\DescribePackage{makeidx}
+
+ A commonly-used method to introduce an index in a \LaTeX\ document:
+ \begin{sourcedisplay}
+ \cs{cleardoublepage} \\
+ \cs{phantomsection} \\
+ \cs{addcontentsline}\{toc\}\{section\}\{\cs{indexname}\}\% or chapter \\
+ \cs{printindex}
+ \end{sourcedisplay}
+
+\needspace{3\baselineskip}
+\item [On its own \HTML\ page, with a manual \TOC\ entry:] \
+\DescribePackage{makeidx}
+ \begin{sourcedisplay}
+ \cs{begin}\{warpprint\} \\
+ \cs{cleardoublepage} \\
+ \cs{phantomsection} \\
+ \cs{addcontentsline}\{toc\}\{section\}\{\cs{indexname}\}\% or chapter \\
+ \cs{end}\{warpprint\} \\
+ \cs{ForceHTMLPage} \\
+ \cs{ForceHTMLTOC} \\
+ \cs{printindex}
+ \end{sourcedisplay}
+
+\item [Inline, with an automatic \TOC\ entry:] \
+ \DescribePackage{tocbibind}
+
+ The \pkg{tocbibind}
+ package may be used to automatically place an entry in the \TOC.
+ \begin{sourcedisplay}
+ \cs{usepackage}[nottoc]\{tocbibind\} \\
+ \dots \\
+ \cs{cleardoublepage} \\
+ \cs{phantomsection} \% to fix print-version index link \\
+ \cs{printindex}
+ \end{sourcedisplay}
+
+\item [On its own \HTML\ page, with an automatic \TOC\ entry:] \
+ \DescribePackage{tocbibind}
+ \begin{sourcedisplay}
+ \cs{usepackage}[nottoc]\{tocbibind\} \\
+ \dots \\
+ \cs{cleardoublepage} \\
+ \cs{phantomsection} \% to fix print-version index link \\
+ \cs{ForceHTMLPage} \\
+ \cs{printindex}
+ \end{sourcedisplay}
+\end{description}
+
+Use the \pkg{tocbibind} \optn{numindex} option to generate a numbered index.
+\DescribeOption[tocbibind]{numindex}
+Without this option, the index heading has no number.
+\margintag{numbered index section}
+
+Other packages, such as \pkg{imakeidx}, may also have options for including
+the index in the Table of Contents.
+}
+
+\newcommand*{\limitssplitidx}{%
+If the \optn{latexmk} option is selected for \pkg{lwarp},
+\prog{latexmk} will compile the document but will \emph{not} compile the indexes.
+\cmds{lwarpmk printindex} and \cmds{lwarpmk htmlindex} will still be required.
+
+When using \cs{AtWriteToIndex} or \cs{AtNextWriteToIndex}, the user must not
+\trouble[\cs{thepage}]{splitidx=\pkg{splitidx}>\cs{thepage} and \cs{AtWriteToIndex}}
+refer to \cs{thepage} during \HTML\ output, as the concept of a page number is
+meaningless. Instead, do
+\begin{sourcedisplay}
+ \cs{addtocounter}\{LWR@autoindex\}\{1\} \\
+ \cs{LWR@new@label}\{LWRindex-\cs{arabic}\{LWR@autoindex\}\} \\
+\end{sourcedisplay}
+where the \cs{index}-like action occurs,
+and then refer to \texttt{\cs{arabic}\{LWR@autoindex\}} instead of \cs{thepage}
+where the reference should occur.
+
+See \cref{sec:specialindex} in the \pkg{lwarp-patch-memoir} package
+for the \cs{@@wrspindexhyp} macro as an example.
+}
+
+\newcommand{\limitsimakeidx}{%
+When using \prog{makeindex}, to match the print and \HTML\ output's
+\margintag{letter headings}
+\gindex{index>letter headings}
+display of index letter headings, specify the \filenm{lwarp.ist} style:
+\begin{sourcedisplay}
+\cs{makeindex}[options=\{-s lwarp.ist\}]
+\end{sourcedisplay}
+(For \HTML\ the \filenm{lwarp.ist} style is used automatically,
+which displays letter headings.
+When using \prog{xindy} the default style also displays letter headings.)
+
+See \cref{sec:indexingimakeidx} for how to setup \prog{lwarpmk}
+\margintag{index setup}
+to process the indexes with \pkg{imakeidx}, both with and without shell escape.
+}
+
+\newcommand{\limitstocloft}{%
+If using \pkg{tocloft} with \pkg{tocbibind}, \pkg{anonchap},
+\DescribePackage{tocloft}
+\trouble[\pkg{tocloft} \& other packages]{tocloft=\pkg{tocloft}>chapter titles}
+\pkg{fncychap}, or other packages which change chapter title formatting,
+load \pkg{tocloft} with its \optn{titles} option, which
+tells \pkg{tocloft} to use standard \LaTeX\ commands to create the titles,
+allowing other packages to work with it.
+}
+
+\newcommand*{\limitspagenote}{%
+\pkg{pagenote} works as-is, but the \optn{page} option is disabled.
+}
+
+\newcommand*{\limitsendnotes}{%
+To place the endnotes in the \TOC, use:
+\margintag{table of contents}
+\begin{sourcedisplay}
+\cs{usepackage}\{endnotes\} \\
+\cs{appto}\cs{enoteheading}\{\cs{addcontentsline}\{toc\}\{section\}\{\cs{notesname}\}\}
+\cs{renewcommand*}\{\cs{notesname}\}\{Endnotes\} \% optional \\
+\end{sourcedisplay}
+
+To additionally have the endnotes on their own \HTML\ page,
+\margintag{\HTML\ page}
+if \texttt{FileDepth} allows:
+\begin{sourcedisplay}
+\cs{ForceHTMLPage} \\
+\cs{theendnotes}
+\end{sourcedisplay}
+}
+
+
+\newcommand{\limitstext}{%
+\cs{textbf}, etc.\ are supported,
+\trouble[\cs{bfseries}, etc.]{text>\cs{bfseries} etc.}
+\trouble{formatting>\cs{bfseries} etc.}
+but \cs{bfseries}, etc.\ work only in some situations.
+
+\texttt{\&}, \texttt{\textless}, and \texttt{\textgreater}
+\trouble[HTML special chars]{HTML>entities}
+\trouble{HTML>\&, \textless, \textgreater}
+\trouble{text>\&, \textless, \textgreater}
+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
+if these special characters occur unescaped in program listings
+or other verbatim text.
+
+For program listings, the \pkg{listings} package is supported,
+\margintag{program listings}
+and its \optn{literate} option is used to 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}
+so care must be taken to avoid accidentally including valid \HTML\ code inside
+these environments. Adding a space on either side may be sufficient.
+}
+
+\newcommand{\limitshspace}{%
+\DescribeMacro{\hspace}%
+\gindex{space>horizontal}%
+\gindex{horizontal space}%
+\cs{hspace} is converted to an inline \HTML\ span of the given width,
+except that \texttt{0} width is ignored,
+a width of \texttt{.16667em} is converted to
+an \HTML\ thin breakable space (\texttt{U+2009}),
+and a \cs{fill} is converted to a \cs{qquad}.
+
+\gindex{\texttt{\textasciitilde}}%
+\gindex{\cs{,}}%
+\DescribeMacro{\,}%
+\texttt{\~} and \cs{,} are converted to \HTML\ entities.
+
+\DescribeMacro{\kern}%
+\DescribeMacro{\hskip}%
+\cs{kern} and \cs{hskip} are entered into the \HTML\ \PDF\ output as-is,
+then interpreted by \prog{pdftotext}, and thus usually appear as a single space.
+}
+
+\newcommand{\limitstextcomp}{%
+Some \pkg{textcomp} symbols do not have Unicode equivalents, and thus
+are not supported.
+
+Many \pkg{textcomp} symbols are not supported by many system \Slash browser fonts.
+\trouble[missing symbols]{textcomp=\pkg{textcomp}>missing symbols}
+\trouble{font>missing symbols}
+In the \CSS\ try referencing fonts which are more complete, but expect to see gaps in coverage.
+}
+
+\newcommand{\limitsaccents}{%
+Native \LaTeX\ accents such as \cs{"} will work, but many more kinds of
+accents are available when using Unicode-aware \XeLaTeX\ and \LuaLaTeX.
+}
+
+\newcommand{\limitsrelsize}{%
+For \HTML, only the inline macros are supported: \cs{textlarger}, \cs{textsmaller}, and
+\cs{textscale}. Each becomes an inline span of a modified \attribute{font-size}.
+
+\cs{relsize}, \cs{larger}, \cs{smaller}, and \cs{relscale} are ignored.
+
+While creating \SVG\ math for \HTML, the original definitions are temporarilty restored,
+and so should work as expected.
+
+The \HTML\ browser's setting for minumum font size
+\watchout[not small]
+may limit how small the output will be displayed.
+}
+
+\newcommand{\limitsreferences}{%
+Labels with special characters may be a problem.
+\margintag{labels}
+\trouble[label characters]{label>characters}
+\trouble{reference>label characters}
+It is best to stick with alpha-numeric, hyphen, underscore, and perhaps the colon (if not French).
+
+\cs{nameref} refers to the most recently-used section where the \cs{label}
+\margintag{\cs{nameref}}
+was defined.
+If no section has been defined before the \cs{label},
+\trouble[empty link]{label>\cs{nameref} empty}
+the link will be empty.
+Index entries also use \cs{nameref} and have the same limitation.
+\trouble{index>empty link}
+\trouble{reference>empty link}
+}
+
+\newcommand{\limitspfnote}{
+While emulating \pkg{pfnote},
+\margintag{\pkg{pfnote}}
+\pkg{lwarp} is not able to reset \HTML\ footnote
+\trouble[\pkg{pfnote} numbers]{pfnote=\pkg{pfnote}>numbering}
+numbers per page number to match the printed version,
+as \HTML\ has no concept of page numbers.
+\pkg{lwarp} therefore uses continuous footnote numbering even for \pkg{pfnote}.
+}
+
+\newcommand{\limitsperpage}{
+To have footnote numbers reset each time footnotes are printed:
+\margintag{footnote numbering}
+\begin{sourcedisplay}
+\cs{setcounter}\{footnoteReset\}\{1\}
+\end{sourcedisplay}
+
+For \pkg{bigfoot}, \pkg{manyfoot}, or \pkg{perpage}:
+\begin{sourcedisplay}
+\cs{MakePerPage}\{footnoteX\} \\
+\textrm{--- or ---} \\
+\cs{MakeSortedPerPage}\{footnoteX\}
+\end{sourcedisplay}
+The footnotes are reset when they are printed, according to section level
+as set by \ctr{FootnoteDepth}, which is not necessarily by \HTML\ page.
+This is recommended for \cs{alph}, \cs{Alph}, or \cs{fnsymbol} footnotes,
+due to the limited number of symbols which are available.
+}
+
+\newcommand{\limitsfootnotes}{
+\pkg{lwarp} uses native \LaTeX\ footnote code, although with its own
+\cs{box} to avoid the \LaTeX\ output routine. The usual functions mostly work as-is.
+
+\limitsperpage
+
+The \pkg{footmisc} \optn{stable} option is emulated by \pkg{lwarp}.
+\margintag{\pkg{footmisc}}
+
+When using footnotes in sectioning commands,
+\trouble[sectioning commands]{footnote>sectioning, \pkg{footmisc}}
+\trouble{footmisc=\pkg{footmisc}}
+to generate consistent results between print and \HTML, use
+the \pkg{footmisc} package with the \optn{stable} option,
+provide a short \TOC\ entry, and \cs{protect} the \cs{footnote}:
+\begin{sourcedisplay}
+\cs{usepackage}[\textred{stable}]\{footmisc\}\\
+\dots\\
+\cs{subsection}\textred{[Subsection Name]}\\
+\fqquad\{Subsection Name\textred{\cs{protect}}\cs{footnote}\{A footnote.\}\}
+\end{sourcedisplay}
+
+If using \pkg{memoir} class,
+\margintag{\pkg{memoir} with \pkg{footmisc}}
+with which \pkg{lwarp} preloads \pkg{footmisc}, the
+\optn{stable} option must be declared before \pkg{lwarp} is loaded:
+\trouble[\pkg{memoir}]{footnote>memoir=\pkg{memoir}}
+\trouble{memoir=\pkg{memoir}>footmisc=\pkg{footmisc}}
+\begin{sourcedisplay}
+\cs{PassOptionsToPackage}\{\textred{stable}\}\{footmisc\} \\
+\cs{usepackage}\{lwarp\} \\
+\dots
+\end{sourcedisplay}
+
+Do not use a starred sectioning command. As an alternative, it may be possible to
+adjust \cs{secnumdepth} instead.
+% Attempting to use \cs{footnotemark} instead
+% of \cs{footnote} may result in misnumbered footnotes in the print document.
+}
+
+\newcommand{\limitsverbatimfootnotes}{%
+If using \pkg{fancybox} or \pkg{fancyvrb} with \cs{VerbatimFootnotes},
+\margintag{\pkg{fancybox}, \pkg{fancyvrb}}
+\trouble[\cs{VerbatimFootnotes}]{footnote>VerbatimFootnotes=\cs{VerbatimFootnotes}}
+and using footnotes in a sectioning command or display math,
+\trouble[sectioning or displaymath]{footnote>sectioning, verbatim}
+\trouble{footnote>displaymath}
+\trouble{VerbatimFootnotes}
+\trouble{fancybox=\pkg{fancybox}>VerbatimFootnotes=\cs{VerbatimFootnotes}}
+\trouble{fancyvrb=\pkg{fancyvrb}>VerbatimFootnotes=\cs{VerbatimFootnotes}}
+\trouble{footnote>paragraph tags}
+use \cs{footnotemark} and \cs{footnotetext}:
+\begin{sourcedisplay}
+\cs{subsection}[Subsection Name]\\
+\fqquad\{Subsection Name\cs{protect}\textred{\cs{footnotemark}}\} \\
+\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}{%
+Verbatim footnotes are not yet supported.
+\margintag{\pkg{bigfoot}, \pkg{manyfoot}}
+\watchout[verbatim]
+
+If using the \pkg{bigfoot} package, and possibly also \pkg{manyfoot},
+\trouble{bigfoot=\pkg{bigfoot}}
+\trouble{manyfoot=\pkg{manyfoot}}
+problems may occur with counter allocation because \pkg{lwarp} uses many counters,
+and there is a difference in how counters numbered 256 and up are handled in pdf\LaTeX.
+With \pkg{bigfoot} this has been known to show up as an error
+related to one footnote insert being forbidden inside another. Another problem
+showed up as a input stack error, and which of these problems occurred depended on how
+many counters were allocated.
+
+As a possible solution, try creating several new counters before defining
+\pkg{bigfoot} or \pkg{manyfoot} footnotes,
+hoping to shift the problematic counter above the 256 threshold.
+It may instead be necessary to use \XeLaTeX\ or \LuaLaTeX\
+instead of pdf\LaTeX.
+}
+
+\newcommand{\limitskomascript}{
+Many features are ignored during the \HTML\ conversion.
+The goal is source-level compatibility.
+
+\cs{titlehead}, \cs{subject},
+\cs{captionformat}, \cs{figureformat}, and \cs{tableformat} are not yet emulated.
+
+\testthis
+
+Some features have not yet been tested.
+Please contact the author with any bug reports.
+}
+
+\newcommand{\limitsmemoir}{
+While emulating \pkg{memoir}, \pkg{lwarp} pre-loads
+a number of packages (\cref{sec:patch-memoir-packages}).
+This can cause an options clash when the user's document later loads the same
+\trouble[options clash]{memoir=\pkg{memoir}>options clash}
+\trouble{options clash>memoir=\pkg{memoir}}
+packages with options. To fix this problem, specify the options before
+loading \pkg{lwarp}:
+\begin{sourcedisplay}
+\cs{documentclass}\{memoir\} \\
+\dots \\
+\cs{PassOptionsToPackage}\{options\_list\}\{package\_name\} \\
+\dots \\
+\cs{usepackage\{lwarp\}} \\
+\dots \\
+\cs{usepackage\{package\_name\}}
+\end{sourcedisplay}
+
+\pkg{memoir} emulates a number of packages, and declares a version date for each
+\trouble[version numbers]{memoir=\pkg{memoir}>version clash}
+\trouble{package>version numbers with \pkg{memoir}}
+\trouble{version numbers>with \pkg{memoir}}
+which often does not match the date of the corresponding freestanding package.
+This can cause warnings about incorrect version numbers.
+Since \pkg{lwarp} is intended to support the freestanding packages,
+which are often newer than the date declared by \pkg{memoir}, it is hoped that
+\pkg{memoir} will update and change its emulated version numbers to match.
+
+\cs{verbfootnote} is not supported.
+
+\cs{newfootnoteseries}, etc. are not supported.
+
+\pkg{lwarp} loads \pkg{pagenote} to perform \pkg{memoir}'s pagenote functions,
+but there are minor differences in \cs{pagenotesubhead} and related macros.
+
+Poem numbering is not supported.
+
+The \env{verbatim} environment does not yet support the \pkg{memoir} enhancements.
+It is currently recommended to load and use \pkg{fancyvrb} instead.
+
+The \pkg{memoir} glossary system is not yet supported by \prog{lwarpmk}.
+The \pkg{glossaries} package may be used instead,
+but does require the glossary entries be
+changed from the \pkg{memoir} syntax to the \pkg{glossaries} syntax.
+}
+
+\newcommand{\limitsverse}{%
+When using \pkg{verse} or \pkg{memoir}, always place a
+\texttt{\textbackslash\textbackslash} after each line.
+
+\DescribeMacro{\attrib}
+The documentation for the \pkg{verse} and \pkg{memoir} packages suggest
+defining an \cs{attrib} command, which may already exist in current documents,
+but it will only work for print output.
+\pkg{lwarp} provides \cs{attribution}, which
+works for both print and \HTML\ output. To combine the two so that
+\cs{attrib} is used for print and \cs{attribution} is used for \HTML:
+\begin{sourcedisplay}
+\cs{begin}\{warpHTML\} \\
+\cs{let}\cs{attrib}\cs{attribution} \\
+\cs{end}\{warpHTML\}
+\end{sourcedisplay}
+
+\DescribeLength{\vleftskip}
+\DescribeLength{\vleftmargini}
+These lengths are used by \pkg{verse} and \pkg{memoir} to control the left margin,
+and they may already be set by the user for print output. New lengths
+ \DescribeLength{\HTMLvleftskip}\DescribeLength{\HTMLleftmargini}
+\cs{HTMLvleftskip} and \cs{HTMLleftmargini} are provided to control the
+margins in \HTML\ output. These new lengths may be set by the user
+before any \env{verse} environment, and persist until they are manually changed again.
+One reason to change \cs{HTMLleftmargini} is if there is a wide
+\cs{flagverse} in use, such as the word ``Chorus'', in which case the value of
+\cs{HTMLleftmargini} should be set to a wide enough length to contain ``Chorus''.
+The default is wide enough for a stanza number.
+
+Horizontal spacing relies on \prog{pdftotext}'s ability to discern the layout
+\trouble[spacing]{verse>spacing}
+(\optn{-layout} option) of the
+text in the \HTML-tagged \PDF\ output. For some settings of
+\cs{HTMLleftmargini} or \cs{HTMLleftskip} the horizontal alignment may not work out
+exactly, in which case a label may be shifted by one space.
+}
+
+
+\newcommand{\limitslateximagefontsize}{%
+For the \env{lateximage} environment,
+the size of the math and text used
+\margintag{SVG image font size}
+in the \SVG\ image may be adjusted
+\gindex{font>size>lateximage}%
+\gindex{font>size>math, SVG}%
+\gindex{math>font size --- SVG}%
+\gindex{lateximage>font size}%
+by setting \cs{LateximageFontSizeName} to a font size name \Dash \emph{without the backslash},
+which defaults to:
+\begin{sourcedisplay}
+\cs{renewcommand}\{\cs{LateximageFontSizeName}\}\{\textred{normalsize}\}
+\end{sourcedisplay}
+
+For inline \SVG\ math, font size is instead controlled by \cs{LateximageFontScale},
+which defaults to:
+\begin{sourcedisplay}
+\cs{newcommand}*\{\cs{LateximageFontScale}\}\{\textred{.75}\}
+\end{sourcedisplay}
+}
+
+
+
+\newcommand{\limitsmath}{%
+
+\subsubsection{Math in section names}
+\limitsmathinsectionnames
+
+\subsubsection{Rendering tradeoffs}
+
+Math may be rendered
+\margintag{Math rendering}
+as \SVG\ graphics or using the \brand{MathJax} JavaScript display engine.
+\gindex{JavaScript=\brand{JavaScript}>MathJax=\brand{MathJax}}
+
+Rendering math as images creates a new \SVG\ file for each expression, \margintag{SVG files}
+except that an MD5 hash is used to combine identical duplicates of the same
+inline math expression into a single file, which must be converted to \SVG\ only once.
+Display math is still handled as individual files, since it may contain labels
+or references which are likely to change.
+
+The \SVG\ images are currently stored separately, \margintag{SVG inline}
+but they could be encoded in-line directly into the \HTML\ document.
+This may reduce the number of files and potentially speed loading the images,
+but slows the display of the rest of the document before the images are loaded.
+
+Others \LaTeX-to-\HTML\ converters have used \PNG\ files,
+\margintag{PNG files}
+sometimes pre-scaled for print resolution but displayed
+on-screen at a scaled down size. This allows high-quality print output at the expense
+of larger files, but \SVG\ files are the preferred approach for scalable graphics.
+
+Conversion to \MathML\ might be a better approach,
+\margintag{MathML}
+among other things allowing a more compact representation of math than \SVG\ drawings.
+Problems with \MathML\ include limited browser support and some
+issues with the fine control of the appearance of the result.
+Also see \cref{sec:epub} regarding \EPUB\ output with \brand{MathJax}.
+
+\subsubsection{\SVG\ option}
+
+For \SVG\ math,
+\margintag{SVG math option}
+math is rendered as usual by \LaTeX{} into the initial \PDF\ file using the
+\gindex{math>SVG summary}%
+\gindex{SVG>math summary}%
+current font\footnote{See \cref{sec:xfrac} regarding fonts and fractions.},
+then is captured from the \PDF\ and converted to \SVG\ graphics
+via a number of utility programs.
+The \SVG\ format is a scalable-vector web format, so math may be typeset by \LaTeX{}
+with its fine control and precision, then displayed or printed at any size,
+depending on (sometimes broken) browser support.
+An \HTML\ \attribute{alt} attribute carries the \LaTeX{} code which generated the
+math, allowing copy/paste of the \LaTeX{} math expression into other documents.
+
+\limitslateximagefontsize
+
+For \SVG\ math, text copy/paste from the \HTML\ \element{alt} tags lists the
+\margintag{SVG math copy/paste}
+equation number or tag for single equations, along with the \LaTeX\ code
+for the math expression.
+For \AmS\ environments with multiple numbers in the same environment,
+only the first and last is copy/pasted, as a range.
+No tags are listed inside a starred \AmS\ environment, although the \cs{tag}
+macro will still appear inside the \LaTeX\ math expression.
+
+SVG math does not work inside \TeX\ boxes, since a \cs{newpage} is required
+\trouble[SVG math in \TeX\ boxes]{math>in \TeX\ boxes}
+before and after each image.
+
+\subsubsection{\brand{MathJax} option}
+
+The popular \brand{MathJax} alternative (\url{mathjax.org}) may be used to display math.
+\margintag{\brand{MathJax} math option}
+\DescribeProgram{MathJax}
+\gindex{math>MathJax=\brand{MathJax} summary}
+\gindex{MathJax=\brand{MathJax}>summary}
+
+When \brand{MathJax} is enabled, math is rendered twice:
+\begin{enumerate}
+\item As regular \LaTeX\ \PDF\ output placed inside an \HTML\ comment, allowing
+equation numbering and cross referencing to be almost entirely under the control of \LaTeX, and
+\item As detokenized printed \LaTeX{} commands placed directly into the \HTML\ output
+for interpretation by the \brand{MathJax} display scripts. An additional script is used to
+pre-set the equation number format and value according to the current \LaTeX\ values,
+and the \brand{MathJax} cross-referencing system is ignored in favor of the \LaTeX\ internal system,
+seamlessly integrating with the rest of the \LaTeX\ code.
+\end{enumerate}
+
+\subsubsection{Customizing \brand{MathJax}}
+\gindex{MathJax=\brand{MathJax}>custom functions}
+\gindex{math>MathJax=\brand{MathJax} custom functions}
+\limitscustomizemathjax
+
+\subsubsection{\brand{MathJax} limitations}
+Limitations when using \brand{MathJax} include:
+\margintag{\brand{MathJax} limitations}
+\DescribeProgram{MathJax}
+\begin{itemize}
+\item \brand{MathJax} itself does not support subequations.
+ \margintag{subequations}
+\trouble{MathJax=\brand{MathJax}>subequations}%
+\trouble{math>subequations}%
+ This may be improved by parsing the \LaTeX{}
+ math expression to manually insert tags, but this has not yet been done.
+\item Footnotes inside equations are not yet supported while using \brand{MathJax}.
+ \margintag{footnotes in math}
+\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 \brand{MathJax} is used in the rest of the document.
+\item Usage of \pkg{siunitx} inside a math equation
+ \margintag{siunitx}
+ is supported via a third-party \brand{MathJax} extension.
+ While inside a math expression, do not use \cs{SI} or \cs{si} inside \cs{text},
+ where it will be rendered as normal text.
+ \trouble[siunitx inside an equation]{siunitx=\pkg{siunitx}>MathJax=\brand{MathJax}}
+ \trouble{MathJax=\brand{MathJax}>siunitx=\pkg{siunitx}}
+
+ \href{https://github.com/burnpanck/MathJax-siunitx}
+ {\texttt{https://github.com/burnpanck/MathJax-siunitx}}
+
+ Also see \cref{sec:limitssiunitx}.
+
+\item A \env{tabbing} environment is emulated
+ using an \HTML\ \element{pre}.\margintag{tabbing}
+ While \brand{MathJax} is enabled inside \env{tabbing}, the browser may not correctly
+ render the horizontal alignment of the math and text following after on the same line.
+
+\item Other math-related macros and packages are not supported by \brand{MathJax},
+ \trouble[other macros and packages]{MathJax=\brand{MathJax}>unsupported packages}
+ including \cs{ensuremath} and \pkg{bigdelim},
+ along with occasionally-used macros such as \cs{relax}.
+ \pkg{lwarp} emulates footnotes, \pkg{units}, and \pkg{nicefrac} for MathJax.
+\end{itemize}
+}
+
+\newcommand{\limitsmathcatcode}{
+The math shift character \texttt{\$} is not set for \HTML\ output until
+\margintag{preamble macros with math}
+after the preamble. Macros defined in the preamble which contain \texttt{\$}
+must be enclosed between \cs{StartDefiningMath} and \cs{StopDefiningMath}
+to temporarily change to the \HTML\ meaning of \texttt{\$}:
+\begin{sourcedisplay}
+\textred{\cs{StartDefiningMath}} \\
+\cs{newcommand}\{\dots\} \\
+\textred{\cs{StopDefiningMath}}
+\end{sourcedisplay}
+
+As an alternative, use \cs{(} and \cs{)} instead of \texttt{\$}, in which
+case \cs{StartDefiningMath} and \cs{StopDefiningMath} are not necessary.
+
+If a package defines macros using \texttt{\$}, it may be nessary to use
+\cs{StartDefiningMath} and \cs{StopDefiningMath} before and after loading the
+package.
+}
+
+\newcommand{\limitsmathinline}{
+\DescribeMacro{\inlinemathnormal}
+\DescribeMacro{\inlinemathother}
+An inline math expression is usually converted to a reusable hashed \SVG\ math
+image, or a MathJax expression. The hash or expression depends on the contents
+of the math expression. In most cases this math expression is static, such as \texttt{\$x+1\$},
+so the image can be reused for multiples instances of the same expression.
+In some cases,
+\margintag{changing contents}
+the math expression includes a counter or other object which may
+change between uses.
+Another problem is complicated contents
+\margintag{complicated \attribute{alt} tag}
+which do not expand well in an \attribute{alt} tag.
+The macro \cs{inlinemathother} may be used before a dynamic
+math expression, and \cs{inlinemathnormal} after. Doing so tells \pkg{lwarp} to
+use an unhashed \SVG\ math image, even if MathJax is in use.
+See \cref{sec:localizingdynamicmath}.
+}
+
+\newcommand*{\limitsmathdisplay}{
+\DescribeMacro{\displaymathnormal}
+By default, or when selecting \cs{displaymathnormal},
+\brand{Mathjax} math display environments print their contents
+as text into \HTML,
+and \SVG\ display math environments render their contents as \SVG\ images
+and use their contents as the \attribute{alt} tag of \HTML\ output.
+To do so, the contents are loaded into a macro for reuse.
+In some cases, such as complicated \tikz\ pictures, compilation will fail.
+
+\DescribeMacro{\displaymathother}
+When selecting \cs{displaymathother},
+it is assumed that the contents are more complicated than ``pure''
+math.
+An example is an elaborate \tikz\ picture,
+\margintag{MathJax unsupported}
+which will not render in \brand{MathJax} and
+will not make sense as an \HTML\ \attribute{alt} tag.
+\margintag{complicated \attribute{alt} tag}
+In this mode, \brand{MathJax} is turned off,
+math display environments become \SVG\ images, even if \brand{MathJax} is selected,
+and the \HTML\ \attribute{alt} tags become simple messages.
+The contents are internally processed as an environment instead of a macro argument,
+so complicated objects such as \tikz\ pictures are more likely to compile successfully.
+}
+
+
+\newcommand{\limitscustomizemathjax}{%
+\brand{MathJax} does not have preexisting support every possible math function.
+Additional \brand{MathJax} function definitions may be
+defined. These will be declared at the start of each \HTML\ page,
+and thus will have a global effect.
+
+Examples:
+\begin{sourcedisplay}
+\cs{CustomizeMathJax}\{ \\
+ \fqquad\cs{newcommand}\{\cs{expval}\}[1]\{\cs{langle}\#1\cs{rangle}\} \\
+ \fqquad\cs{newcommand}\{\cs{abs}\}[1]\{\cs{lvert}\#1\cs{rvert}\} \\
+\} \\
+\cs{CustomizeMathJax}\{\cs{newcommand}\{\cs{arsinh}\}\{\cs{text}\{arsinh\}\}\} \\
+\cs{CustomizeMathJax}\{\cs{newcommand}\{\cs{arcosh}\}\{\cs{text}\{arcosh\}\}\}
+\cs{CustomizeMathJax}\{\cs{newcommand}\{\cs{NN}\}\{\cs{mathbb}\{N\}\}\}
+\end{sourcedisplay}
+}
+
+%\newcommand{\limitscustomizeKaTeX}{%
+%Ka\TeX\ does not have preexisting support every possible math function.
+%Additional Ka\TeX\ function definitions may be
+%defined. These will be declared at the start of each \HTML\ page,
+%and thus will have a global effect.
+
+%Examples:
+%\begin{sourcedisplay}
+%\cs{CustomizeKaTeX}\{ \\
+ %\fqquad\cs{gdef}\cs{expval}\#1\{\cs{langle}\#1\cs{rangle}\} \\
+ %\fqquad\cs{gdef}\cs{abs}\#1]\{\cs{lvert}\#1\cs{rvert}\} \\
+%\} \\
+%\cs{CustomizeKaTeX}\{\cs{gdef}\cs{arsinh}\{\cs{text}\{arsinh\}\}\} \\
+%\cs{CustomizeKaTeX}\{\cs{gdef}\cs{arcosh}\{\cs{text}\{arcosh\}\}\}
+%\cs{CustomizeKaTeX}\{\cs{gdef}\cs{NN}\{\cs{mathbb}\{N\}\}\}
+%\end{sourcedisplay}
+%}
+
+\newcommand*{\limitsmathinsectionnames}{
+If using named \HTML\ files,
+in section names use paren math \texttt{\textbackslash(x+y\textbackslash)}
+\trouble[math in section names]{filename>math in}
+\trouble{sectioning>math in name}
+\trouble{math>section name}
+\trouble{math>file name}
+instead of dollar math \texttt{\$x+y\$}.
+(Dollar math works, but appears in the filename.)
+Or, use a short name for the \TOC\ entry without the math, or use \cs{texorpdfstring}:
+\begin{sourcedisplay}
+\cs{section}\{A name with math \\
+ \fqquad \cs{texorpdfstring}\{\$1+2=3\$\}\{text description\}\}
+\end{sourcedisplay}
+}
+
+\newcommand{\limitschemfig}{%
+If using \cs{polymerdelim} to add delimiters to a \cs{chemfig},
+wrap both inside a single \env{lateximage}:
+\begin{sourcedisplay}
+\cs{begin}\{lateximage\}[(-chemfig-\textasciitilde\cs{packagediagramname})] \\
+\cs{chemfig}\{\dots\} \\
+\cs{polymerdelim}[\dots]\{\dots\} \\
+\cs{end}\{lateximage\}
+\end{sourcedisplay}
+}
+
+\newcommand{\limitschemformula}{%
+\pkg{chemformula} works best without \brand{MathJax}.
+\trouble[\pkg{chemformula} with \brand{MathJax}]{MathJax=\brand{MathJax}>chemformula=\pkg{chemformula}}
+\trouble{chemformula=\pkg{chemformula}>MathJax=\brand{MathJax}}
+If \brand{MathJax} is used,
+\cs{displaymathother} must be used before \env{array}, and then
+\cs{displaymathnormal} may be used after.
+(The \pkg{chemformula} package adapts to \env{array},
+but does not know about \brand{Mathjax}, and
+\brand{MathJax} does not know about \pkg{chemformula}.)
+
+While using \brand{Mathjax}, \cs{displaymathother} may also be used
+for other forms of display and inline math which contain \pkg{chemformula} expressions.
+}
+
+\newcommand{\limitsntheorem}{%
+This conversion is not total.
+\trouble[Font control]{ntheorem=\pkg{ntheorem}>font}
+Font control is via \CSS, and the custom \LaTeX\ font settings
+are ignored.
+
+\limitsntheoremnumbering
+}
+
+\newcommand{\limitsntheoremnumbering}{%
+\pkg{ntheorem} has a bug with equation numbering in \AmS\ environments%
+\trouble[Equation numbering]{ntheorem=\pkg{ntheorem}>numbering}
+\trouble{math>equation numbering>ntheorem=\pkg{ntheorem}}
+\trouble{AMSmath>ntheorem=\pkg{ntheorem}>numbering}
+when the option \optn{thref} is used. \pkg{lwarp} does not share
+this bug, so equations with \cs{split}, etc, are numbered correctly
+with \pkg{lwarp}'s \HTML\ output, but not with the print output.
+It is recommended to use \pkg{cleveref} instead of \pkg{ntheorem}'s
+\optn{thref} option.
+}
+
+\newcommand{\limitsgraphics}{%
+\limitsincludegraphicsscale
+
+For \cs{includegraphics} with \filenm{.pdf} or \filenm{.eps} files,
+\gindex{graphics>formats}
+\gindex{includegraphics=\cs{includegraphics}>using}
+\gindex{PDF image>using}
+\gindex{EPS image>using}
+\gindex{image>PDF or EPS>using}
+\margintag{\cs{includegraphics} file formats}
+the user must provide a \filenm{.pdf} or \filenm{.eps} image file for use
+in print mode, and also a \filenm{.svg}, \filenm{.png}, or \filenm{.jpg} version
+of the same image for use in \HTML.
+\begin{sourcedisplay}
+\cs{includegraphics}\{filename\} \% print:.pdf/.eps HTML:.svg, etc.
+\end{sourcedisplay}
+For print output, \pkg{lwarp} will automatically choose the \filenm{.pdf} or \filenm{.eps}
+format if available, or some other format otherwise.
+For \HTML, one of the other formats is used instead.
+
+If a \filenm{.pdf} or \filenm{.eps} image is referred to with its file extension,
+the extension will be changed to \filenm{.svg} for \HTML:
+\begin{sourcedisplay}
+\cs{includegraphics}\{filename.pdf\} \% uses .svg in \HTML \\
+\cs{includegraphics}\{filename.eps\} \% uses .svg in \HTML \\
+\end{sourcedisplay}
+
+\DescribeProgram{pdftocairo}
+\margintag{PDF to SVG}
+To convert a \PDF\ image to \SVG, use the utility \prog{pdftocairo}:
+\userentry{pdftocairo -svg filename.pdf}
+For a large number of images, use \prog{lwarpmk}:
+\DescribeProgram{lwarpmk pdftosvg}
+\userentry{lwarpmk pdftosvg *.pdf \qquad \textrm{(or a list of filenames)}}
+
+\DescribeProgram{lwarpmk epstopdf}
+\DescribeProgram{epstopdf}
+\margintag{\pkg{epstopdf} package}
+For \EPS\ images converted to \PDF\ using the package \pkg{epstopdf},
+use \userentry{lwarpmk pdftosvg *.PDF} to convert to \SVG\ images.
+
+When using \DVI\ \prog{latex},
+\margintag{DVI latex}
+it is necessary to convert \EPS\ to \PDF\ and then to \SVG:
+\gindex{image>PDF or EPS>converting}
+\userentry{lwarpmk epstopdf *.eps\qquad \textrm{(or a list of filenames)}}
+\userentry{lwarpmk pdftosvg *.pdf\qquad \textrm{(or a list of filenames)}}
+
+For \PNG\ or \JPG
+\margintag{PNG and JPG}
+\gindex{image>PNG and JPG}
+\gindex{PNG images}
+\gindex{JPG images}
+while using \prog{pdflatex}, \prog{lualatex}, or \prog{xelatex},
+the same file may be used in both print or \HTML\ versions, and may be used with a file extension,
+but will also be used without the file extension if it is the only file of
+its base name.
+
+GIF files may be used for \HTML,
+\margintag{GIF}
+\gindex{image>GIF}
+\gindex{GIF images}
+but another format must also be provided for print output.
+
+If a file extension is not used,
+\margintag{file extension priorities}
+\trouble{image>format priorities}
+\trouble{graphics>image format priorities}
+for \HTML\ the file extension priorities
+are: \SVG, \GIF, \PNG, then \JPG.
+
+If using the older \pkg{graphics} syntax, use both optional arguments
+\trouble[\pkg{graphics} vs. \pkg{graphicx}]{graphics>optional arguments}
+\trouble{includegraphics=\cs{includegraphics}>optional arguments}
+for \cs{includegraphics}.
+A single optional parameter is interpreted as the newer \pkg{graphicx} syntax.
+Note that viewports are not supported by \pkg{lwarp} \Dash
+\trouble[viewport]{graphics>viewport}
+\trouble[viewport]{image>viewport}
+\trouble{viewport}
+the entire image will be shown.
+
+For \cs{includegraphics}, avoid \texttt{px} and \% units for width and height, or
+\margintag{units}
+enclose them inside \env{warpHTML} environments.
+For font-proportional image sizes, use \texttt{ex} or \texttt{em}.
+For fixed-sized images, use
+\texttt{cm}, \texttt{mm}, \texttt{in}, \texttt{pt}, or \texttt{pc}.
+Use the keys \optn{width=.5\cs{linewidth}},
+or similar for \cs{textwidth} or \cs{textheight}
+to give fixed-sized images proportional to a 6 by 9 inch text area.
+Do not use the \optn{scale} option, since it is not well supported by \HTML\ browsers.
+
+\cs{includegraphics} accepts \optn{width} and \optn{height},
+\margintag{options}
+\optn{origin}, \optn{rotate} and \optn{scale},
+plus new \optn{class} and \optn{alt} keys.
+
+With \HTML\ output, \cs{includegraphics} accepts an optional
+\margintag{\HTML\ class}
+\optn{class=xyz} keyval combination, and if this is given then
+the \HTML\ output will include that class for the image.
+The class is ignored for print output.
+
+Likewise, the \cs{includegraphics} \optn{alt} key adds an \HTML\ \attribute{alt} tag to
+\margintag{\HTML\ \attribute{alt} tags}
+an image, and is ignored for print output. If not assigned, each
+image is given an \attribute{alt} tag of ``\optn{(image)}''.
+
+\cs{rotatebox} accepts the optional \optn{origin} key.
+\margintag{\cs{rotatebox}}
+
+\cs{rotatebox}, \cs{scalebox}, and \cs{reflectbox} depend
+\trouble[browser support]{graphics>\cs{rotatebox}, \cs{scalebox}, \cs{reflectbox}}
+on modern browser support.
+The \CSSthree\ standard declares that when an object is transformed
+the whitespace which they occupied is preserved,
+unlike \LaTeX{}, so expect some
+ugly results for scaling and rotating.
+}
+
+\newcommand*{\limitsincludegraphicsscale}{
+Avoid using the \cs{includegraphics} \optn{scale} option. Change:
+\trouble[\optn{scale}]{scale=\optn{scale} (\cs{includegraphics} option)}
+\trouble{includegraphics=\cs{includegraphics}>scale=\optn{scale}}
+\trouble{graphics>scale=\optn{scale} option}
+\begin{sourcedisplay}
+\cs{includegraphics}[scale=<xx>]\{\,\dots\}
+\end{sourcedisplay} to:
+\begin{sourcedisplay}
+\cs{includegraphics}[width=<yy>\textbackslash{linewidth}]\{\,\dots\}
+\end{sourcedisplay}
+}
+
+\newcommand{\limitssvgimages}{%
+When a math expression, \env{picture}, or \tikz\ environment is added or
+\trouble[adding/removing]{SVG image>out of order}
+\trouble{graphics>images out of order}
+removed, the \SVG\ images must be re-created by entering \cmds{lwarpmk limages}
+to maintain the proper image-file associations.
+Inline \SVG\ math may be hashed and thus not need to be recreated, but
+display math and objects such as \tikz\ may move to new image numbers when
+the document is changed.
+
+Before attempting to create the \SVG\ image files,
+\margintag{recompile first}
+\prog{lwarpmk} verifies that the \HTML\ version of the document exists and
+has correct internal image references.\footnote{This becomes important
+when dealing with a document containing thousands of images.}
+If it is necessary to recompile the document's \HTML\ version one more time,
+\prog{lwarpmk} usually will inform the user with an error message,
+but there are some conditions which cannot be detected, so the user
+should watch for the \LaTeX\ recompile warnings.
+
+If \HTML\ appears where an \SVG\ image should be, %
+\trouble[\HTML\ instead of images]{image>appears as \HTML\ code}%
+\trouble{math>appears as \HTML\ code}%
+\trouble{SVG image>appears as \HTML\ code}%
+\trouble{image>appears as \HTML\ code}%
+\trouble{HTML>image appear as \HTML\ code}
+ recompile the document one more
+time to get the page numbers back in sync, then remake the images one more time.
+
+Incorrect \SVG\ images will also occur if the document
+changes the \progcode{page} counter:
+\trouble[page counter]{page counter>SVG images}
+\trouble{SVG image>incorrect}
+\trouble{math>incorrect}
+\trouble{image>incorrect}
+\begin{sourcedisplay}
+\cs{setcounter}\{page\}\{<value>\}
+\end{sourcedisplay}
+The \texttt{page} counter must \emph{not} be adjusted by the user.
+
+Expressing math as \SVG\ images has the advantage of representing
+the math exactly as \LaTeX\ would, but has the disadvantage of requiring
+an individual file for each math expression.
+\watchout[Lots of files!]
+For inline math, and some other objects, \pkg{lwarp} uses an MD5 hash
+on its \LaTeX\ source to combine multiple instances of identical inline expressions
+into a single image file,
+but display math and other environments such as \env{picture} and \tikz\ require
+one image file each.
+For a document with a large amount of math,
+see \cref{sec:tutorialmathjax} to use \brand{MathJax} instead.
+}
+
+\newcommand{\limitstikz}{%
+If using display math with \env{tikzpicture} or \cs{tikz}, along
+\trouble[displaymath and matrices]{tikz>matrices, \&}
+with matrices with the \texttt{\&} character, the document must be modified as follows:
+\begin{sourcedisplay}
+\cs{usepackage}\{tikz\} \\
+\cs{tikzset}\{every picture/.style=\{ampersand replacement=\textbackslash\&\}\} \\
+\end{sourcedisplay}
+and each instance of \texttt{\&} in the \pkg{tikz} expression must be
+replaced with \texttt{\textbackslash\&}.\
+}
+
+\newcommand{\limitsgrffile}{%
+\pkg{grffile} is supported as-is.
+File types known to the browser are displayed, and unknown file types are given a link.
+Each \PDF\ image for print mode should be accompanied
+\trouble[matching \PDF\ and \SVG]{grffile=\pkg{grffile}}
+by an \SVG, \PNG, or \JPG\ version for \HTML.
+}
+
+\newcommand{\limitscolor}{%
+\pkg{color} is superceded by \pkg{xcolor}, and
+\pkg{lwarp} requires several of the features of \pkg{xcolor}.
+When \pkg{color} is requested, \pkg{xcolor} is loaded as well.
+}
+
+\newcommand{\limitsxcolor}{%
+\cs{colorboxBlock} and \cs{fcolorboxBlock} are provided for
+\margintag{\cs{colorboxBlock} and \cs{fcolorboxBlock}}
+increased \HTML\ compatibility, and they are identical to
+\cs{colorbox} and \cs{fcolorbox} in print mode. In \HTML\ mode
+they place their contents into a \element{div} instead of a \element{span}.
+These \element{div}s are set to \attribute{display:~inline-block} so
+adjacent \cs{colorboxBlock}s appear side-by-side in \HTML, although
+text is placed before or after each.
+
+Print-mode definitions for \cs{colorboxBlock} and \cs{fcolorboxBlock}
+are created by \pkg{lwarp}'s core if \pkg{xcolor} is loaded.
+
+\cs{fcolorbox} and \cs{fcolorboxBlock} allow a background color of \optn{none},
+\margintag{background: \optn{none}}
+in which case only the frame is drawn, which can be useful for \HTML.
+
+Color definitions, models, and mixing are fully supported
+\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}
+
+\cs{color} and \cs{pagecolor} are ignored.
+Use \CSS\ or \cs{textcolor} where possible.
+\margintag{\cs{color} and \cs{pagecolor}}
+}
+
+\newcommand{\limitsepstopdf}{%
+Images with an \filenm{.eps} extension will be converted to \filenm{.pdf}.
+The \HTML\ output uses the \filenm{.svg} version, so
+\trouble[convert to \filenm{.svg}]{epstopdf=\pkg{epstopdf}}
+use \userentry{lwarpmk pdftosvg <listofPDFfiles>} to generate \filenm{.svg} versions.
+}
+
+\newcommand{\limitspstricks}{%
+All \pkg{pstricks} content should be
+\trouble[use \env{pspicture}]{pstricks=\pkg{pstricks}}
+contained inside a \env{pspicture} environment.
+}
+
+\newcommand{\limitspdftricks}{%
+The \pkg{pdftricks} image files \filenm{<jobname>-fig*.pdf} must be converted
+\trouble[convert image files]{pdftricks=\pkg{pdftricks}}
+to \filenm{.svg}, or else a missing file error will occur.
+The image files must also be converted again whenever they change.
+To convert the images:\userentry{lwarpmk pdftosvg <jobname>-fig*.pdf}
+}
+
+\newcommand{\limitspsfrag}{%
+The \env{psfrags} environment is modified to use \env{lateximage} to encapsulate
+\watchout[use \env{psfrags}]
+the image.
+Always use a \env{psfrags} environment to contain any local \cs{psfrag} macros and
+the associated \cs{includegraphics} or \cs{epsfig} calls.
+Outside of a \env{psfrags} environment, \pkg{psfrags} adjustments will not be seen
+by \pkg{lwarp}.
+
+Tip: Use a mono-spaced font for the tags in the \EPS\ file.
+\watchout
+}
+
+\newcommand{\limitspstool}{%
+\cs{graphicspath} is ignored, and the file directory must be stated.
+
+The filename must not have a file extension.
+\trouble[path and filename]{pstool=\pkg{pstool}}
+
+Use \userentry{lwarpmk html} followed by \userentry{lwarpmk limages}.
+}
+
+\newcommand{\limitsasymptote}{%
+To compile:
+\begin{sourcedisplay}
+pdflatex project.tex \\
+asy project-*.asy \\
+pdflatex project.tex \\ [\baselineskip]
+lwarpmk print \\
+asy project-*.asy \\
+lwarpmk print1 \\
+lwarpmk print1 \\[\baselineskip]
+lwarpmk html \\
+asy project\textred{\_html}-*.asy \\
+lwarpmk html1 \\
+lwarpmk html1 \\
+\textred{lwarpmk limages} \\
+\end{sourcedisplay}
+}
+
+\newcommand{\limitsoverpic}{%
+The macros \cs{overpicfontsize} and \cs{overpicfontskip} are used during
+\trouble[scaling]{overpic=\pkg{overpic}}
+\HTML\ generation. These are sent to \cs{fontsize} to adjust the font
+size for scaling differences between the print and \HTML\ versions of the
+document. Renew these macros before using the \env{overpic} and \env{Overpic}
+environments.
+}
+
+\newcommand*{\limitsmultimedia}{%
+The packages \pkg{multimedia}, \pkg{movie15}, and \pkg{media9} are supported.
+
+\HTMLfive\ \element{audio} and \element{video} objects are created for
+\filenm{.mp3} and \filenm{.mp4} files.
+
+\HTMLfive\ \element{embed} objects are created for \filenm{http} and \filenm{ftp} links.
+
+\cs{href} links are created for other media types.
+(Unfortunately, there is not much overlap between the file types supported for print
+output and the file types supported by \HTMLfive.)
+
+For \pkg{media9}, a multimedia object is inserted for each \optn{addresource=},
+as well as each \optn{flashvars} \optn{source=} and \optn{src=}.
+This may result in duplicate objects.
+
+Undesired objects may be nullified by placing them inside \cs{warpprintonly}
+or the \env{warpprint} environment.
+
+Each \HTML\ multimedia object includes the poster text, except for \element{embed} objects.
+For \pkg{movie15}, the \optn{text} option is supported to specify the poster text.
+
+The \optn{width}, \optn{height}, and \optn{totalheight} options are supported.
+The \HTML\ object is scaled according to the display width, correctly compensating
+for either tall or wide viewports.
+
+Other options are ignored.
+
+\pkg{media9} \cs{addmediapath} is supported. It is assumed that the same path
+structure will exist for the \HTML\ document.
+
+\HTMLfive\ media controls are always specified for each \element{audio}
+and \element{video} object.
+
+\pkg{media9} slideshows are not supported.
+
+\cs{hyperlinkmovie}, \cs{movieref}, and \cs{mediabutton} are not supported.
+
+3D objects are not supported.
+
+If using a \brand{YouTube}\texttrademark\ video, use an ``embedded'' \URL\ with \dots\texttt{/embed/}\dots\
+instead of \dots\texttt{/v/}\dots
+}
+
+\newcommand{\limitstabbing}{%
+The \env{tabbing} environment works, except that \SVG\ math and \env{lateximage}s
+do not yet work inside the environment.
+
+If math is used inside \env{tabbing},
+\trouble[math in \env{tabbing}]{tabbing=\env{tabbing}>math}
+\trouble{math>tabbing=\env{tabbing}}
+place \env{tabbing} inside
+a \env{lateximage} environment, which will render the entire environment as
+a single \SVG\ image.
+}
+
+\newcommand{\limitstabular}{%
+Tabular mostly works as expected, but pay special attention to the
+following, especially if working with environments, macros inside tabulars,
+multirows, \pkg{siunitx} \texttt{S} columns,
+or the packages \pkg{multirow}, \pkg{longtable}, \pkg{supertabular}, or \pkg{xtab}.
+\begin{description}
+\item [Defining macros and environments:] \
+ \begin{itemize}
+ \item When defining environments or macros which include \env{tabular} and
+ \trouble[Misplaced alignment tab character \&]%
+ {Misplaced alignment tab character \&>tabular>macros}
+ \trouble{tabular>Misplaced alignment tab character \&>macros}
+ instances of the \texttt{\&} character, it may be
+ necessary to make \texttt{\&} active before the environment or macro is defined,
+ then restore \texttt{\&} to its default catcode after, using the following commands.
+ These are are ignored in print mode.
+ \begin{sourcedisplay}
+ \textred{\cs{StartDefiningTabulars}} \\
+ <define macros or environments using \env{tabular} and \texttt{\&} here> \\
+ \textred{\cs{StopDefiningTabulars}}
+ \end{sourcedisplay}
+ This includes before and after defining any macro
+ \trouble[floatrow]{floatrow=\pkg{floatrow}>ttabbox=\cs{ttabbox}}
+ which used \cs{ttabbox} from \pkg{floatrow}.
+ \item \limitsresumetabular
+ \end{itemize}
+
+\item [Cell contents:] \
+ \begin{itemize}
+ \item Using a custom macro inside a tabular data cell
+ \trouble[macro in a table]{tabular>macro inside}
+ \trouble{tabular>row corruption}
+ \gindex{tabular>macros inside}
+ may result in an extra \HTML\ data cell tag, corrupting the \HTML\ table.
+ To avoid this, use \cs{TabularMacro} just before the macro.
+ This is ignored in print mode.
+ \begin{sourcedisplay}
+ \textred{\cs{TabularMacro}}\cs{somemacro} \&
+ more row contents \textbackslash\textbackslash
+ \end{sourcedisplay}
+ \end {itemize}
+
+\item [Column specifiers:] \
+ \begin{itemize}
+ \item Only one each of \texttt{@} and \texttt{!}
+ \margintag{\texttt{@} and \texttt{!}}
+ is used at each column, and they are used in that order.
+
+ \item In \cs{multirow} cells, the print version may have extra
+ \margintag{\cs{multirow}}
+ instances of \texttt{\textless}, \texttt{\textgreater}, \texttt{@},
+ and \texttt{!} cells on the second and later rows in the \cs{multirow}
+ which do not appear in the \HTML\ version.
+
+ \item \cs{newcolumntype} is ignored; unknown column types are set to \texttt{l}.
+ \trouble[\cs{newcolumntype}]{tabular>newcolumntype=\cs{newcolumntype}}
+ \end{itemize}
+
+\item [Rules:] \
+ \begin{itemize}
+ \item Doubled \cs{hline}s, \cs{midrule}s, and vertical rules are supported.
+
+ \item Vertical rules next to either side of an \texttt{@} or \texttt{!} column
+ \margintag{vertical rules}
+ are displayed on both sides of the column.
+
+ \item Width options are honored. Trim options are converted to
+ \margintag{width and trim}
+ rounded top corners.
+ Trim corners are not rounded with \texttt{@} or \texttt{!} columns,
+ and full-width rules ignore trim.
+
+ \item \cs{toprule}, \cs{midrule}, \cs{bottomrule}, and \cs{hline}
+ \margintag{full-width rules}
+ ignore trim. When given an optional width, each cell is styled
+ to create the custom border. Without an optional width, the entire
+ row is given a class to assign the standard border.
+
+ \item If you wish to use \cs{cmidrule} followed by \cs{bottomrule},
+ \margintag{combined rules}
+ it may be necessary to use:
+ \begin{sourcedisplay}
+ \cs{cmidrule}\{2-3\} \textbackslash\textbackslash[-2ex] \\
+ \cs{bottomrule}
+ \end{sourcedisplay}
+ The optional \texttt{-2ex} is ignored in \HTML, but improves the
+ visual formatting in the print output.
+
+ \item For \cs{toprule} and \cs{bottomrule},
+ \trouble[\cs{warpprintonly}]{Misplaced \cs{noalign}>tabular>rules}
+ \trouble{tabular>rules}
+ when combined with a \env{warpprint} or \env{warpHTML} environment,
+ \trouble[Misplaced \cs{noalign}]{tabular>Misplaced \protect\cs{noalign}}%
+ if a ``Misplaced \cs{noalign}'' error occurs,
+ change
+ \begin{sourcedisplay}
+ This \& That \cs{endhead}
+ \end{sourcedisplay}
+ to
+ \begin{sourcedisplay}
+ \textred{\cs{warpprintonly}\{}This \& That \cs{endhead}\textred{\}}
+ \end{sourcedisplay}
+ and likewise with the other \cs{end} headings.
+ Keep the \cs{endfirsthead} row unchanged, as it is still relevent to \HTML\ output.
+ \end{itemize}
+
+\needspace{3\baselineskip}
+\item[Other:] \
+ \begin{itemize}
+ \item \pkg{tabularx} ignores the width, but \texttt{X} columns do produce paragraph
+ columns or multicolumns.
+ \item For \pkg{longtable}, place headings and footings which
+ \margintag{\env{longtable} headings}
+ do not apply to \HTML\ inside \cs{warpprintonly\{\}}.
+ \item For S columns (from the \pkg{siunitx} package),
+ \trouble[S columns]{siunitx=\pkg{siunitx}>S column}
+ \trouble{tabular>S column}
+ while producing print output,
+ anything non-numeric must be placed
+ inside \{ \} braces, including commands such as \cs{multirow}.
+ While producing \HTML\ output, though, anything placed inside
+ braces is not seen by \pkg{lwarp}'s tabular handling algorithm.
+ To resolve this problem, make a copy of the row, with one version
+ for print output, containing the extra braces, and another version
+ for \HTML\ output, without the extra braces, such as: \\
+ \hspace*{.375in} \cs{warpprintonly}\{\texttt{1 \& 2 \& \textred{\{}\cs{multirow}\{2\}\{2cm\}\{Text\}\textred{\}} \& 3 \textbackslash\textbackslash\}} \\
+ \hspace*{.375in} \cs{warpHTMLonly}\{\texttt{1 \& 2 \& \cs{multirow}\{2\}\{2cm\}\{Text\} \& 3 \textbackslash\textbackslash\}}
+ \item In \LaTeX, a \env{tabular} may be placed inside a \env{minipage},
+ \watchout[\env{tabular} inside a \element{span}]
+ but in \HTML\ a \element{table} may not be inside a \element{span}.
+ If this situation is detected, a warning is printed instructing the user
+ to isolate the \element{span} using \cs{warpprintonly} or the \env{warpprint}
+ environment.
+ \end{itemize}
+\end{description}
+}
+
+\newcommand*{\limitsmultirow}{%
+\begin{itemize}
+ \item Note that recent versions of \pkg{multirow} include a new optional
+ \margintag{\optn{vposn}}
+ \optn{vposn} argument.
+ \item For \pkg{multirow}, insert \cs{mrowcell} into any empty multi-row cells.
+ \margintag{multirow cells}
+ This will be a null function for the print output, and is a placeholder for
+ parsing the table for \HTML\ output. An error is generated if this is missed.
+ \begin{sourcedisplay}
+ \small
+ \begin{tabular}{lll}
+ \dots\ \& & \cs{multirow}\{2\}\{.5in\}\{text\} & \&\ \dots \\
+ \dots\ \& & \textred{\cs{mrowcell}} & \&\ \dots \\
+ \end{tabular}
+ \end{sourcedisplay}
+ \item The \pkg{multirow} documentation regarding colored cells recommends using
+ \margintag{colored cells}
+ a negative number of rows. This will not work with \pkg{lwarp}, so
+ \cs{warpprintonly} and \cs{warpHTMLonly} must be used to make versions for
+ print and \HTML.
+ \item
+ See \cref{sec:multicolumnmultirow} for \cs{multicolumrow}.
+ \margintag{with \cs{multicolumn}}
+
+ \pkg{lwarp} does not support
+ \trouble[\cs{multicolumn} \& \cs{multirow}]{multirow=\cs{multirow} and \cs{multicolumn}}
+ directly combining \cs{multicolumn} and \cs{multirow}.
+ Use \cs{multicolumnrow} instead.
+ To create a 2 column, 3 row cell:
+ \begin{sourcedisplay}
+ \cs{multicolumnrow}%
+ \textcolor{blue}{\{2\}\{c\}}%
+ \textgreen{[c]\{3\}[0]\{1in\}[0pt]}\{Text\}
+ \end{sourcedisplay}
+ The two arguments for \cs{multicolumn} come first, followed by
+ the five arguments for \cs{multirow}, many of which are optional,
+ followed by the contents.
+
+ As per \cs{multirow},
+ \watchout[skipped cells]
+ skipped cells to the right of the \cs{multicolumnrow}
+ statement are not included in the source code on the same line.
+ On the following lines, \cs{mcolrowcell} must be used for each cell
+ \watchout[empty cells]
+ of each column and each row to be skipped.
+ An error is generated if this is missed.
+ \begin{sourcedisplay}
+ \small
+ \begin{tabular}{lll}
+ \dots\ \& & \cs{multicolumnrow}\{2\}\{c\}[c]\{3\}[0]\{1in\}[0pt]\{Text\} & \&\ \dots \\
+ \dots\ \& & \textred{\cs{mcolrowcell}} \hfill \& \hfill \textred{\cs{mcolrowcell}} & \&\ \dots \\
+ \dots\ \& & \textred{\cs{mcolrowcell}} \hfill \& \hfill \textred{\cs{mcolrowcell}} & \&\ \dots \\
+ \end{tabular}
+ \end{sourcedisplay}
+\end{itemize}
+}
+
+
+\newcommand{\limitsresumetabular}{%
+When creating a new environment
+\trouble[\env{tabular} inside another environment]{tabular>inside an environment}
+\trouble{tabular>corrupt rows}
+which contains a \env{tabular} environment,
+\pkg{lwarp}'s emulation of the tabular does not automatically resume
+when the containing enviroment ends, resulting in corrupted \HTML\ rows.
+To fix this, use \cs{ResumeTabular} as follows.
+This is ignored in print mode.
+\begin{sourcedisplay}
+\textred{\cs{StartDefiningTabulars}} \% because \& is used in a definition \\
+\cs{newenvironment}\{outerenvironment\} \\
+\{ \\
+\cs{tabular}\{cc\} \\
+left \& right \textbackslash\textbackslash \\
+\} \\
+\{ \\
+\textred{\cs{TabularMacro}\cs{ResumeTabular}} \\
+left \& right \textbackslash\textbackslash \\
+\cs{endtabular} \\
+\} \\
+\textred{\cs{StopDefiningTabulars}} \\
+\end{sourcedisplay}
+}
+
+\newcommand{\limitslongtable}{%
+Use one of either \cs{endhead} or \cs{endfirsthead} for both print and \HTML,
+and use a \cs{warpprintonly} macro to disable the other head phrase,
+and also the \cs{endfoot} and \cs{endfirstfoot} phrases.
+(See \cref{sec:limitsthreeparttablex} if using \pkg{threeparttablex}.)
+\trouble{tabular>endhead=\cs{endhead}, \cs{endfoot}, \cs{endlastfoot}}
+\begin{sourcedisplay}
+\cs{begin}\{longtable\}\{ [column specifiers] \} \\
+{[} \dots ] \cs{endfirsthead} \quad \textgreen{\% or \cs{endhead}, for print and HTML} \\
+\textred{\cs{warpprintonly}\{} \qquad\qquad \textgreen{\% not used in HTML} \\
+\fquad [ \dots ] \cs{endhead} \qquad \textgreen{\% or \cs{endfirsthead}} \\
+\fquad [ \dots ] \cs{endfoot} \\
+\fquad [ <lastfoot macros> ] \cs{endlastfoot} \\
+\textred{\}} \\
+\dots\ \textblue{table contents} \dots \\
+\textred{\cs{warpHTMLonly}\{} \\
+\fquad {[} <lastfoot macros> ] \quad \textgreen{\% HTML last footer, without \cs{endfoot} \\
+\hspace*{\fill} \% or \cs{endlastfoot}.} \\
+\textred{\}} \\
+\cs{end}\{longtable\}
+\end{sourcedisplay}
+
+Use the \cs{warpprintonly} macro instead of the \env{warpprint} environment.
+\trouble[Misplaced \cs{noalign}]{Misplaced \cs{noalign}}
+Doing so helps avoid ``Misplaced \cs{noalign}.'' when using \cs{begin}\{warpprint\}.
+
+\cs{kill} is ignored, place a \cs{kill} line inside
+\trouble[\cs{kill}]{tabular>kill=\cs{kill}}
+ \begin{sourcedisplay}
+ \cs{begin}\{warpprint\} \ldots\ \cs{end}\{warpprint\}
+ \end{sourcedisplay}
+or place it inside \cs{warpprintonly}.
+
+\pkg{longtable} is not supported inside a \env{lateximage}.%
+\watchout[lateximage]
+}
+
+\newcommand{\limitsthreeparttablex}{%
+\pkg{threeparttablex} is used with \pkg{longtable} and \pkg{booktabs} as follows:
+\begin{sourcedisplay}
+\cs{begin}\{longtable\}\{ [column specifiers] \} \\
+{[} \dots ] \cs{endfirsthead} \quad \textgreen{\% or \cs{endhead}, for print and HTML} \\
+\textred{\cs{warpprintonly}\{} \qquad\qquad \textgreen{\% not used in HTML} \\
+\fquad [ \dots ] \cs{endhead} \qquad \textgreen{\% or \cs{endfirsthead}} \\
+\fquad [ \dots ] \cs{endfoot} \\
+\fquad \textblue{\cs{bottomrule} \cs{insertTableNotes} \cs{endlastfoot}} \\
+\textred{\}} \\
+\dots\ \textblue{table contents} \dots \\
+\textred{\cs{warpHTMLonly}\{} \quad \textgreen{\% HTML last footer} \\
+\fquad \textblue{\cs{bottomrule}} \\
+\fquad \textblue{\cs{UseMinipageWidths}} \qquad \textgreen{\% optional} \\
+\fquad \textblue{\cs{insertTableNotes}} \\
+\fquad \textblue{\cs{endlastfoot}} \\
+\textred{\}} \\
+\cs{end}\{longtable\}
+\end{sourcedisplay}
+
+The table notes are created using a \cs{multicolumn}.
+\margintag{table width}
+By default the width is not specified to the browser, so long table notes
+can cause the table to be spread out horizontally.
+For \HTML\ output, \pkg{lwarp} guesses the width of the table depending on
+the number of columns, then restricts its guess to a min/max range.
+To use this guess for the width of the table notes, use \cs{UseMinipageWidths} before
+\cs{insertTableNotes}. The width is then specified, and in many cases the result is
+an improvement in overall table layout.
+}
+
+\newcommand{\limitssupertabular}{%
+For \cs{tablefirsthead}, etc., enclose them as follows:
+\trouble[Misplaced alignment tab character \&]%
+ {Misplaced alignment tab character \&>supertabular=\pkg{supertabular}}
+\begin{sourcedisplay}
+\textred{\cs{StartDefiningTabulars}} \\
+\cs{tablefirsthead} \\
+\dots \\
+\textred{\cs{StopDefiningTabulars}}
+\end{sourcedisplay}
+See \cref{sec:limitstabular}.
+
+\pkg{supertabular} and \pkg{xtab} are not supported
+inside a \env{lateximage}.\watchout[lateximage]
+}
+
+\newcommand{\limitsbigdelim}{%
+\cs{ldelim} and \cs{rdelim} use \cs{multirow}, so
+\trouble[use \cs{mrowcell}]{bigdelim=\pkg{bigdelim}}
+\cs{mrowcell} must be used in the proper number of empty cells in the
+same column below \cs{ldelim} or \cs{rdelim}, but not in cells which
+are above or below the delimiter:
+\begin{sourcedisplay}
+\hrule\smallskip
+\cs{begin}\{tabular\}\{lll\} \\
+\textgreen{<empty>} \& a \& b \textbackslash\textbackslash \\
+\cs{ldelim}\{\textbackslash\{\}\{3\}\{.25in\}[left ] \& c \& d \textbackslash\textbackslash \\
+\textred{\cs{mrowcell}} \& e \& f \textbackslash\textbackslash \\
+\textred{\cs{mrowcell}} \& g \& h \textbackslash\textbackslash \\
+\textgreen{<empty>} \& i \& j \textbackslash\textbackslash \\
+\cs{end}\{tabular\}
+\smallskip\hrule
+\begin{tabular}{lll}
+\textgreen{<->} & a & b \\
+\ldelim{\{}{3}{.25in}[left ] & c & d \\
+\mrowcell & e & f \\
+\mrowcell & g & h \\
+\textgreen{<->} & i & j \\
+\end{tabular}
+\hrule
+\end{sourcedisplay}
+}
+
+\newcommand{\limitscolortbl}{%
+Only use \cs{rowcolor} and \cs{cellcolor} at the start of a row,
+in that order.
+\trouble[row/cell color]{colortbl=\pkg{colortbl}}
+
+\pkg{colortbl} ignores the overhang arguments.
+}
+
+\newcommand{\limitsctable}{%
+Use \cs{StartDefiningTabulars} before one or more \cs{ctable}s,
+\trouble[Misplaced alignment tab character \&]%
+ {Misplaced alignment tab character \&>ctable=\pkg{ctable}}
+and \cs{StopDefiningTabulars} after. These change the meaning of the
+ampersand \texttt{\&} character.
+}
+
+
+\newcommand{\limitsmakelabel}{%
+While inside a list environment, \pkg{lwarp} nullifies a number of
+\TeX\ horizontal skip and fill commands, allowing the user to define
+\cs{makelabel} for print mode while \HTML\ mode ignores those commands.
+
+When defining \cs{makelabel} in a \env{list} environment, use
+\trouble[label font]{lists>label formatting}
+\trouble{makelabel=\cs{makelabel}}
+\cs{textbf} etc. instead of \cs{bfseries}.
+}
+
+\newcommand{\limitslists}{%
+}
+
+\newcommand{\limitsmarginpars}{%
+\DescribeMacro{\marginpar} \oarg{left} \marg{right}
+\qquad
+\trouble{marginpar=\cs{marginpar}}
+\cs{marginpar} may contains paragraphs, but in order to remain inline with
+the surrounding text \pkg{lwarp} nullifies block-related macros inside the
+\cs{marginpar}. Paragraph breaks are converted to \element{br /} tags.
+
+\DescribeMacro{\marginparBlock} \oarg{left} \marg{right}
+\qquad
+To include block-related macros, use \cs{marginparBlock}, which takes the
+same arguments but creates a \element{div} instead of a \element{span}.
+A line break will occur in the text where the \cs{marginBlock} occurs.
+}
+
+\newcommand{\limitssaveboxes}{%
+\trouble{boxes}
+\trouble{HTML>corrupted}
+\trouble{savebox=\cs{savebox}}
+\trouble{sbox=\cs{sbox}}
+\trouble{lrbox=\env{lrbox}}
+\trouble{usebox=\cs{usebox}}
+\TeX\ boxes are placed inline and do not allow line breaks, so boxes
+\watchout[boxes]
+with long contents may overflow the line during \HTML\ conversion.
+\pkg{lwarp} uses methods which help avoid this problem.
+
+\cs{savebox} and related do not (yet) support \env{minipage} or \cs{parbox}.
+\watchout[\env{minipage}, \cs{parbox}]
+}
+
+\newcommand{\limitsminipage}{%
+A line of text with an inline \env{minipage}
+\trouble[inline]{minipage>inline}
+or \cs{parbox} will have the \env{minipage} or \cs{parbox} placed onto its own line,
+because a paragraph is a block element and cannot be made \attribute{inline-block}.
+
+\env{minipage}s and \cs{parbox}es will be placed side-by-side in \HTML\
+\margintag{placement}
+unless you place a \cs{newline} between them.
+
+Side-by-side \env{minipage}s may be separated by \cs{quad}, \cs{qquad}, \cs{enskip},
+\margintag{side-by-side}
+\cs{hspace}, \cs{hfill}, or a \cs{rule}.
+When inside a \env{center} environment, the result is
+similar in print and \HTML. Paragraph tags are suppressed between
+side-by-side \env{minipage}s and these spacing commands, but not at the start or end
+of the paragraph.
+
+There is limited support for \env{minipage}s inside an \HTML\ \element{span}.
+\trouble[minipage in a span]{minipage>in a span}
+An \HTML\ \element{div} cannot appear inside a \element{span}.
+While in a \element{span}, \env{minipage}s, and \cs{parbox}es, and any enclosed lists
+have limited \HTML\ tags, resulting in an ``inline'' format, without markup
+except for \HTML\ breaks.
+Use \cs{newline} or \cs{par} for an \HTML\ break.
+
+When using \cs{linewidth}, \cs{textwidth}, and \cs{textheight},
+\trouble[minipage size]{minipage>size}
+widths and heights in \HTML\ are scaled proportionally to a 6\texttimes{}9 inch text area,
+and inside a \env{multicols} \cs{linewidth} is divided by the specified number
+of columns.
+
+If a \env{minipage} or \cs{parbox} is assigned a width of exactly \cs{linewidth},
+\margintag{if width is \cs{linewidth}}
+in \HTML\ it is automatically given no \HTML\ width,
+thus allowed to fill the line as needed, similar to how it appears in print output.
+
+A new macro \cs{minipagefullwidth} requests
+\margintag{full-width if \HTML}
+that, during \HTML\ output, the next single \env{minipage} or \cs{parbox} be generated
+without an \HTML\ \attribute{width} attribute, allowing it to be the full width of
+the display rather than the declared print-output width. This may be useful where
+the printed version's width makes no sense in \HTML.
+
+Inside a \env{tabular} or \env{multicols} environment,
+\trouble[\env{tabular}, \env{multicols}]{minipage>tabular=\env{tabular}, width in}
+\trouble{minipage>multicols=\env{multicols}, width in}
+where the width depends on the browser window,
+\cs{minipagefullwidth} is effectively used by default for
+every \env{minipage} or \cs{parbox} inside the environment.
+\DescribeMacro{\UseMinipageWidths}
+\DescribeMacro{\IgnoreMinipageWidths}
+\cs{UseMinipageWidths} may be used to tell \pkg{lwarp} to honor the specified
+widths of all following \env{minipage}s and \cs{parboxes} until the end
+of the local scope, and \cs{IgnoreMinipageWidths} may be used to tell \pkg{lwarp} to
+ignore the specified widths.
+
+Nested \env{minipage}s adopt their parent's text alignment in \HTML,
+\trouble[text alignment]{minipage>alignment}
+whereas in regular \LaTeX{} \PDF\ output they do not.
+Use a \env{flushleft} or similar environment in the child \env{minipage}
+to force a text alignment.
+}
+
+\newcommand{\limitsfancybox}{%
+\pkg{fancybox}'s documentation has an example \env{FramedEqn} environment
+\margintag{framed equation example}
+which combines math, \cs{Sbox}, a \env{minipage}, and an \cs{fbox}.
+This combination requires that the entire
+environment be enclosed inside a \env{lateximage}, which is done by
+adding \cs{lateximage} at the very start of \env{FramedEqn}'s beginning code, and
+\cs{endlateximage} at the very end of the ending code.
+Unfortunately, the \HTML\ \attribute{alt} attribute is not used here.
+\begin{sourcedisplay}
+\cs{newenvironment}{FramedEqn} \\
+\{ \\
+\cs{lateximage}\% NEW \\
+\cs{setlength}\{\cs{fboxsep}\}\{15pt\} \\
+\dots\}\{\dots\\
+\cs{[}\cs{fbox}\{\cs{TheSbox}\}\cs{]} \\
+\cs{endlateximage}\% NEW \\
+\}
+\end{sourcedisplay}
+
+\cs{fbox} works with \pkg{fancybox}.
+\margintag{framing alternatives}
+Also see \pkg{lwarp}'s \cs{fboxBlock} macro and \env{fminipage} environment for
+alternatives to \cs{fbox} for framing environments.
+
+The \pkg{fancybox} documentation's example framed table
+\margintag{framed table example}
+using an \cs{fbox} containing a \env{tabular}
+does not work with \pkg{lwarp}, but the \env{FramedTable} environment does work if
+\cs{fbox} is replaced by \cs{fboxBlock}. This method loses \HTML\ formatting.
+A better method is to enclose the table's contents inside a \env{fminipage} environment.
+The caption may be placed either inside or outside the \env{fminipage}:
+\begin{sourcedisplay}
+\cs{begin}\{table\}\\
+\cs{begin}\{fminipage\}\{\cs{linewidth}\}\\
+\cs{begin}\{tabular\}\{lr\}\\
+\dots \\
+\cs{end}\{tabular\}\\
+\cs{end}\{fminipage\}\\
+\cs{end}\{table\}\\
+\end{sourcedisplay}
+
+\pkg{lwarp} does not support the \env{verbatim} environment inside a span, box,
+\trouble[framed verbatim]{verbatim>framed}
+or \pkg{fancybox}'s \cs{Sbox}, but a \env{verbatim} may be placed inside
+a \env{fminipage}. The \pkg{fancybox} documentation's example \env{FramedVerb}
+may be defined as:
+\begin{sourcedisplay}
+\cs{newenvironment}\{FramedVerb\}[1] \% width\\
+\{\\
+\fquad\cs{VerbatimEnvironment}\\
+\fquad\cs{fminipage}\{\#1\}\\
+\fquad\cs{begin}{Verbatim}\\
+\}\{\\
+\fquad\cs{end}{Verbatim}\\
+\fquad\cs{endfminipage}\\
+\}
+\end{sourcedisplay}
+
+
+\pkg{fancybox}'s \cs{VerbBox} may be used inside \cs{fbox}.
+\margintag{framed \cs{VerbBox}}
+
+\env{LVerbatim}, \cs{LVerbatimInput}, and \cs{LUseVerbatim} indent with horizontal
+\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.
+}
+
+\newcommand{\limitsmdframed}{%
+Most basic functionality is supported, including
+\margintag{support}
+frame background colors and single-border colors and thickness,
+title and subtitle background colors and borders and thickness,
+border radius, and shadow.
+CSS classes are created for \pkg{mdframed} environments and frame titles.
+
+When used, \pkg{lwarp} loads \pkg{mdframed} in \HTML\ with \optn{framemethod=none}.
+\watchout[loading]
+
+For title font, use
+\margintag{font}%
+\begin{sourcedisplay}
+frametitlefont=\cs{textbf},
+\end{sourcedisplay}
+instead of
+\begin{sourcedisplay}
+frametitlefont=\cs{bfseries},
+\end{sourcedisplay}
+where \cs{textbf} must appear just before the comma and will receive the
+following text as its argument (since the text happens to be between braces
+in the \pkg{mdframed} source).
+Since \pkg{lwarp} does not support \cs{bfseries} and friends,
+only one font selection may be made at a time.
+
+\optn{theoremtitlefont} is not supported, since the following text is not
+\margintag{theoremtitlefont}
+in braces in the \pkg{mdframed} source.
+
+\optn{userdefinedwidth} and \optn{align} are currently ignored.
+\margintag{ignored options}
+
+Environments created or encapsulated by \pkg{mdframed} are enclosed in a
+\margintag{\CSS\ classes}
+\element{div} of class \attribute{mdframed}, and also
+class \attribute{md<environmentname>} for new environments.
+
+Frame titles are placed in a \element{div} of class |mdframedtitle|.
+Subtitles are in a \element{div} of class |mdframedsubtitle|,
+and likewise for subsubtitles.
+}
+
+\newcommand{\limitscaption}{%
+To pass options to caption, select the options before loading \pkg{lwarp}:
+\trouble[options]{caption=\pkg{caption}>options}
+\begin{sourcedisplay}
+\cs{documentclass}\{article\} \\
+\dots \\
+\cs{PassOptionsToPackage}\{options\_list\}\{caption\} \\
+\dots \\
+\cs{usepackage\{lwarp\}} \\
+\dots \\
+\cs{usepackage\{caption\}}
+\end{sourcedisplay}
+
+To ensure proper float numbering, set caption positions
+such as:
+\trouble[numbering]{caption=\pkg{caption}>numbering}
+\trouble{subcaption=\pkg{subcaption}>numbering}
+\begin{sourcedisplay}
+\cs{captionsetup}[figure]\{position=bottom\} \\
+\cs{captionsetup}[subfigure]\{position=bottom\} \\
+\cs{captionsetup}[table]\{position=top\} \\
+\cs{captionsetup}[subtable]\{position=top\}
+\end{sourcedisplay}
+Similarly for \pkg{longtable}.
+These positions depend on where the user places the \cs{caption} command
+inside each float.
+}
+
+\newcommand{\limitscombiningfloats}{%
+If using \cs{newfloat}, \pkg{trivfloat}, and/or
+\pkg{algorithmicx} together, see \cref{sec:combiningfloats}.
+\watchout[package conflicts]
+}
+
+\newcommand{\limitssubfig}{%
+% At present, subfigures before the enclosing figure/table's \cs{caption}
+% \margintag{LOF/LOT}
+% would appear in the List of Figures/Tables before the enclosing figure/table,
+% therefore \pkg{lwarp} does not place subfigures in the LOF/LOT.
+
+At present, the package options for \optn{lofdepth} and \optn{lotdepth}
+\trouble[\optn{lof/lotdepth}]{subfig=\pkg{subfig}>options}
+are not working. These counters must be set separately after the
+package has been loaded.
+
+In the document source, use \cs{hfill} and \cs{hspace*}
+\trouble{horizontal spacing}{subfig>inline}
+between subfigures to spread them
+apart horizontally. The use of other forms of whitespace may
+cause paragraph tags to be generated, resulting in subfigures
+appearing on the following lines instead of all on a single line.
+}
+
+\newcommand{\limitsfloatalignment}{%
+\cs{centering}, etc. are honored in a \env{figure} or \env{table} if
+\trouble[\env{figure} \& \env{table} alignment]{float>alignment}
+they are the first command inside the float:
+\begin{sourcedisplay}
+\cs{begin}\{table*\} \\
+\cs{centering} \\
+\cs{caption}\{A Table\} \\
+\dots
+\end{sourcedisplay}
+}
+
+\newcommand{\limitsfloatrow}{%
+Use \cs{StartDefiningTabulars} and \cs{StopDefiningTabulars} before and after
+\trouble[Misplaced alignment tab character \&]%
+ {Misplaced alignment tab character \&>floatrow=\pkg{floatrow}}
+defining macros using \cs{ttabbox} with a tabular inside.
+See \cref{sec:limitstabular}.
+
+When combined with the \pkg{subfig} package,
+\trouble[\pkg{subfig} package]{floatrow>with \pkg{subfig}}
+\trouble{subfig=\pkg{subfig}>with \pkg{floatrow}}
+while inside a \env{subfloatrow} \cs{ffigbox} and \cs{ttabbox}
+must have the caption in the first of the two of the mandatory arguments.
+
+The emulation of \pkg{floatrow} does not support \cs{FBwidth} or \cs{FBheight}.
+These values are pre-set to \texttt{.3\cs{linewidth}} and \texttt{2in}.
+\trouble[\cs{FBwidth}, \cs{FBheight}]{floatrow>\cs{FBwidth} and \cs{FBheight}}
+Possible solutions include:
+\begin{itemize}
+\item Use fixed lengths. \pkg{lwarp} will scale the \HTML\ lengths appropriately.
+\item Use \env{warpprint} and \env{warpHTML} environments to select appropriate
+ values for each case.
+\item Inside a \env{warpHTML} environment, manually change
+ \cs{FBwidth} or \cs{FBheight} before the \cs{ffigbox} or \cs{ttabbox}.
+ Use \cs{FBwidth} or \cs{FBheight} normally afterwards; it will be used as
+ expected in print output, and will use your custom-selected value in \HTML\
+ output. This custom value will be used repeatedly,
+ until it is manually changed to a new value.
+\end{itemize}
+}
+
+\newcommand{\limitskeyfloat}{%
+\trouble{keyfloat=\pkg{keyfloat}}
+If placing a \cs{keyfig}\optn{[H]} inside a \env{keywrap},
+\watchout[\env{keywrap}]
+use an absolute width for
+\cs{keyfig}, instead of \optn{lw}-proportional widths.
+(The \optn{[H]} option forces the use of a minipage, which internally adjusts for
+a virtual 6-inch wide minipage, which then corrupts the \optn{lw} option.)
+}
+
+\newcommand{\limitssiunitx}{%
+Due to \prog{pdftotext} limitations, fraction output is replaced by symbol
+\margintag{fractions}
+output for \optn{per-mode} and \optn{quotient-mode}.
+
+Some units will require that the expression be placed inside math mode.
+\trouble[math mode required]{siunitx=\pkg{siunitx}}
+
+\trouble{siunitx>MathJax=\brand{MathJax}}
+\trouble{MathJax=\brand{MathJax}>siunitx=\pkg{siunitx}}
+\textred{NOTE: As of this writing, the \pkg{siunitx} extension
+for \brand{MathJax} is not currently hosted at any public CDN,
+thus \pkg{siunitx} is not usable with \brand{MathJax} unless a local copy
+of this extension is created first.
+See \cs{MathJaxFilename} to select a custom MathJax script.}
+
+Tabular \texttt{S} columns are rendered as simple \texttt{c} columns,
+\trouble[\env{tabular}]{siunitx=\pkg{siunitx}>tabular S and s columns}
+and tabular \texttt{s} columns are not supported.
+These may be replaced by \texttt{c} columns with each cell contained in
+\cs{num} or \cs{si}.
+}
+
+\newcommand{\limitsnicefrac}{%
+\trouble{nicefrac=\pkg{nicefrac}}
+\trouble{units=\pkg{units}}
+\pkg{units} and \pkg{nicefrac} work with \pkg{lwarp}, but
+\brand{MathJax} does not have an extension for \pkg{units} or \pkg{nicefrac}.
+These packages do work with \pkg{lwarp}'s option \optn{svgmath}.
+}
+
+
+% \newcommand{\limitsbabelone}{%
+% If using \pkg{babel} with French, use
+% \watchout[French]%
+% \begin{sourcedisplay}
+% \cs{frenchbsetup\{StandardLists=true\}}
+% \end{sourcedisplay}
+% to preserve the special \HTML\ and list handling.
+% }
+
+\newcommand{\limitsbabeltwo}{%
+When French is used, the caption separator is
+\trouble[\cs{CaptionSeparator}]{babel=\pkg{babel}>French}
+changed to a dash. The following may be used to restore it to a colon:
+\begin{sourcedisplay}
+\cs{renewcommand}*\{\cs{CaptionSeparator}\}\{:\textasciitilde\}
+\end{sourcedisplay}
+
+Also when French is used,
+\margintag{punctuation spaces}
+\pkg{lwarp} creates fixed-width space around punctuation by patching
+\cs{FBcolonspace}, \cs{FBthinspace},
+\cs{FBguillspace}, \cs{FBmedkern}, \cs{FBthickkern}, \cs{FBtextellipsis},
+and the tilde.
+If the user's document also changes these parameters,
+\watchout[customized spacing]
+the user's changes
+should be placed inside a \env{warpprint} environment so that the user's
+changes do not affect the \HTML\ output.
+}
+
+\newcommand{\limitspolyglossia}{%
+\trouble{Undefined control sequence>polyglossia=\pkg{polyglossia}}
+\trouble{polyglossia=\pkg{polyglossia}>Undefined control sequence}
+\pkg{lwarp} uses \pkg{cleveref}, which has some limitations when using
+\pkg{polyglossia}, possibly resulting in the error
+\begin{sourcedisplay}
+!~Undefined control sequence. \dots\ \cs{@begindocumenthook}
+\end{sourcedisplay}
+
+To test compatibility, add
+\begin{sourcedisplay}
+\cs{usepackage}\{cleveref\}
+\end{sourcedisplay}
+near the end of the preamble (as the last package to be loaded),
+and try to compile the print version.
+It may be necessary to set
+\begin{sourcedisplay}
+\cs{setdefaultlanguage}\{english\}
+\end{sourcedisplay}
+or some other language supported by \pkg{cleveref}, then select
+other languages using \cs{setotherlanguages}.
+
+Once the print version works with \pkg{cleveref} and \pkg{polyglossia},
+the \HTML\ version should work as well using \pkg{lwarp}.
+}
+
+\newcommand{\limitsnewclude}{%
+\pkg{newclude} modifies \cs{label} in a non-adaptive way, so
+\pkg{newclude} must be loaded before \pkg{lwarp} is loaded:
+\trouble[loading]{newclude=\pkg{newclude}}
+\begin{sourcedisplay}
+\raggedright
+\cs{documentclass\{article\}} \\
+\ldots <font setup> \\
+\cs{usepackage\{newclude\}} \\
+\cs{usepackage[warpHTML]\{lwarp\}} \\
+\ldots
+\end{sourcedisplay}
+}
+
+\newcommand{\limitstodonotes}{%
+\trouble{todonotes=\pkg{todonotes}}
+The documentation for \pkg{todonotes} and \pkg{luatodonotes} have an
+example with a todo inside a caption. If this example does not work
+it will be necessary to move the todo outside of the caption.
+}
+
+\newcommand{\limitsfixme}{%
+External layouts (\cs{fxloadlayouts}) are not supported.
+\trouble[external layouts]{fixme=\pkg{fixme}}
+
+User control is provided for setting the \HTML\ styling of the ``faces''.
+The defaults are as follows, and may be changed in the preamble after
+\pkg{fixme} is loaded:
+\begin{sourcedisplay}
+\cs{def}\cs{FXFaceInlineHTMLStyle}\{font-weight:bold\} \\
+\cs{def}\cs{FXFaceEnvHTMLStyle}\{font-weight:bold\} \\
+\cs{def}\cs{FXFaceSignatureHTMLStyle}\{font-style:italic\} \\
+\cs{def}\cs{FXFaceTargetHTMLStyle}\{font-style:italic\}
+\end{sourcedisplay}
+\bigskip
+}
+
+\newcommand{\limitsxparse}{%
+\trouble{xparse=\pkg{xparse}}
+To remove from the log any warnings about redeclaring objects,
+place the following before \pkg{lwarp} is loaded:
+\begin{sourcedisplay}
+\cs{usepackage}[log-declarations=false]\{xparse\}
+\end{sourcedisplay}
+}
+
+\newcommand{\limitsnewtxmath}{%
+The proper load order is:
+\trouble[loading sequence]{newtxmath=\pkg{newtxmath}}
+\begin{sourcedisplay}
+\textrm{\dots} \\
+\cs{usepackage}\{lwarp\} \\
+\textrm{\dots} \\
+\cs{usepackage}\{amsthm\} \\
+\cs{usepackage}\{newtxmath\} \\
+\textrm{\dots} \\
+\end{sourcedisplay}
+}
+
+
+% For use in the documentation update section:
+\newcommand*{\newlwarpmkconf}{
+Due to changes in \prog{lwarpmk},
+\watchout[Reset the configuration]
+\textred{recompile any existing project a single time}
+using \cmds{pdflatex filename.tex} or similar, after which
+\prog{lwarpmk} may then be used with the new configuration files.
+}
+
+
+\newcommand*{\describehashing}{%
+If starred, a hashed filename is used.\margintag{image filename hashing}
+\gindex{hash>SVG image filename}
+\gindex{filename>hashed}
+\gindex{image>hashed filename}
+\gindex{MD5 hash>SVG image filename}
+If so, the hash is based on the \attribute{alt} tag and also the additional hashing argument.
+
+This may be used to provide an expression with a simple \attribute{alt} tag
+but also enough additional information to provide a unique hash.
+
+An example is when the expression is a complicated \TeX\ expression, which would not
+copy/paste well. A simplified tag may be used, while the complicated expression is
+duplicated in the additional hashing argument.
+
+Another example is when the expression is simple, but the image depends
+on options. These options may be decoded into text form and
+included in the additional hashing argument in order to make the hash
+unique according to the set of options, even if the simple \attribute{alt} tag
+is still the same.
+}
+
+
+\newcommand{\osportabilityusage}{%
+\trouble{operating system}
+\trouble{Mac OS=\brand{Mac OS}}
+\trouble{Linux=\brand{Linux}}
+\trouble{Unix=\brand{Unix}}
+\pkg{lwarp} tries to detect which operating system is being used.
+\DescribeProgram{Unix}\DescribeProgram{Mac OS}\DescribeProgram{Linux}
+\brand{Unix}~/ \brand{Mac~OS}~/ \brand{Linux} is the default
+(collectively referred to as ``\brand{Unix}'' in the configuration files),
+and \brand{MS-Windows} is supported as well.
+
+\trouble{MS-Windows=\brand{MS-Windows}}
+\trouble{Windows=\brand{Windows}}
+If \brand{MS-Windows} is not correctly detected,
+\DescribeProgram{MS-Windows} \DescribeProgram{Windows}
+use the \pkg{lwarp} option \optn{OSWindows}.
+\DescribeOption{OSWindows}
+
+When detected or specified, the operating-system path separator used by \pkg{lwarp}
+is modified, and the boolean \texttt{usingOSWindows} is set \texttt{true}.
+This boolean may be tested by the user for later use.
+}
+
+
+\setlength{\marginparsep}{1em}
+\setlength{\marginparpush}{.7ex}
+\setlength{\IndexMin}{40ex}
+
+\setcounter{IndexColumns}{2}
+
+\DisableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{lwarp.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+%
+% \iffalse
+%<*package>
+% \fi
+%
+% \CheckSum{33109}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+
+%
+% \changes{v0.10}{2016/03/08}{\ 2016/03/08 Initial version}
+% \changes{v0.11}{2016/03/11}{\ 2016/03/11}
+% \changes{v0.11}{2016/03/10}{Test Suite: limages and index in README.txt}
+% \changes{v0.11}{2016/03/11}{Test Suite: \brand{MS-Windows} in README.txt}
+% \changes{v0.12}{2016/03/14}{\ 2016/03/14}
+% \changes{v0.12}{2016/03/14}{Global: Uses \textbackslash{}p@(type) in float captions.}
+% \changes{v0.12}{2016/03/14}{Test Suite: Sub-figures}
+% \changes{v0.13}{2016/03/24}{\ 2016/03/24}
+% \changes{v0.13}{2016/03/23}{Test Suite: Ordinals, Subcaption}
+% \changes{v0.13}{2016/03/24}{Removed package: subfig}
+% \changes{v0.14}{2016/03/31}{\ 2016/03/31}
+% \changes{v0.14}{2016/03/29}{Test Suite: Assigned cleveref name for Test Float.}
+% \changes{v0.14}{2016/03/31}{Test Suite: Floatrow}
+% \changes{v0.15}{2016/04/06}{\ 2016/04/06}
+% \changes{v0.15}{2016/03/31}{Files: lwarp\_formal.css added.}
+% \changes{v0.15}{2016/03/31}{Test Suite: test\_suite\_formal.css file added.}
+% \changes{v0.16}{2016/04/11}{\ 2016/04/11}
+% \changes{v0.16}{2016/04/07}{Test Suite: Supports XeLaTeX, LuaLaTeX.}
+% \changes{v0.16}{2016/04/08}{Test Suite: Lwarp no longer selects fonts.}
+% \changes{v0.16}{2016/04/08}{Removed package: suffix}
+% \changes{v0.17}{2016/04/14}{\ 2016/04/14}
+% \changes{v0.17}{2016/04/14}{Test Suite: Mdframed}
+% \changes{v0.17}{2016/04/14}{Test Suite: Fix: Print-version front-matter page numbers.}
+% \changes{v0.18}{2016/05/19}{\ 2016/05/19}
+% \changes{v0.18}{2016/04/23}{Files: lwarp.css and lwarp\_formal.css: Improved responsive design.}
+% \changes{v0.18}{2016/04/23}{File: lwarp.css: Improved \TOC\ outline display.}
+% \changes{v0.18}{2016/05/13}{Test Suite: Verse package}
+% \changes{v0.19}{2016/06/08}{\ 2016/06/08}
+% \changes{v0.19}{2016/05/25}{File: \filenm{lwarp_mathjax.txt} added.}
+% \changes{v0.19}{2016/06/01}{File: \filenm{lwarp.css}: \attribute{tnoteitemheader} added.}
+% \changes{v0.20}{2017/02/09}{\ 2017/02/09}
+% \changes{v0.20}{2016/06/27}{Test Suite: \HTML\ meta descriptions.}
+% \changes{v0.20}{2016/09/19}{File: lwarp.css: Minor fixes for validation.}
+% \changes{v0.20}{2016/12/08}{Docs: Improved index.}
+% \changes{v0.20}{2016/12/17}{File: lwarpmk used to compile print, \HTML, indexes, and lateximages.}
+% \changes{v0.20}{2016/12/17}{Removed reliance on make, grep, gawk.}
+% \changes{v0.20}{2016/12/17}{Parallel versions of aux files for print/HTML.}
+% \changes{v0.20}{2017/01/03}{Moved sidebar and example code to test suite.}
+% \changes{v0.20}{2017/01/25}{\pkg{caption} and \pkg{subcaption} supported.}
+% \changes{v0.21}{2017/02/23}{\ 2017/02/23}
+% \changes{v0.22}{2017/03/02}{\ 2017/03/02}
+% \changes{v0.23}{2017/03/02}{\ 2017/03/02}
+% \changes{v0.24}{2017/03/15}{\ 2017/03/15}
+% \changes{v0.25}{2017/03/22}{\ 2016/03/22}
+% \changes{v0.25}{2017/03/16}{Docs: Adds credits for patched code.}
+% \changes{v0.26}{2017/03/31}{\ 2017/03/31}
+% \changes{v0.27}{2017/04/04}{\ 2017/04/04}
+% \changes{v0.28}{2017/04/14}{\ 2017/04/14}
+% \changes{v0.29}{2017/04/15}{\ 2017/04/15}
+% \changes{v0.30}{2017/04/29}{\ 2017/04/29}
+% \changes{v0.31}{2017/05/15}{\ 2017/05/15}
+% \changes{v0.32}{2017/06/09}{\ 2016/06/09}
+% \changes{v0.33}{2017/07/10}{\ 2017/07/10}
+% \changes{v0.34}{2017/08/08}{\ 2017/08/08}
+% \changes{v0.34}{2017/07/25}{File: \filenm{README.txt}: updated.}
+% \changes{v0.34}{2017/07/25}{Docs: Horizontal space limitations.}
+% \changes{v0.35}{2017/08/08}{\ 2017/08/08}
+% \changes{v0.36}{2017/08/15}{Source: Improved formatting.}
+% \changes{v0.36}{2017/08/17}{\ 2017/08/17}
+% \changes{v0.37}{2017/08/19}{\ 2017/08/19}
+% \changes{v0.38}{2017/08/27}{\ 2017/08/27}
+% \changes{v0.39}{2017/09/05}{\ 2017/09/05}
+% \changes{v0.40}{2017/09/25}{\ 2017/09/25}
+% \changes{v0.41}{2017/10/07}{\ 2017/10/07}
+% \changes{v0.42}{2017/10/30}{\ 2017/10/30}
+% \changes{v0.43}{2017/11/08}{\ 2017/11/08}
+% \changes{v0.44}{2017/11/22}{\ 2017/11/22}
+% \changes{v0.45}{2018/01/14}{\ 2018/01/14}
+% \changes{v0.46}{2018/01/23}{\ 2018/01/23}
+% \changes{v0.47}{2018/01/30}{\ 2018/01/30}
+% \changes{v0.48}{2018/02/14}{\ 2018/02/14}
+% \changes{v0.49}{2018/02/19}{\ 2018/02/19}
+% \changes{v0.50}{2018/03/03}{\ 2018/03/03}
+% \changes{v0.51}{2018/03/24}{\ 2018/03/24}
+% \changes{v0.52}{2018/04/01}{\ 2018/04/01}
+% \changes{v0.53}{2018/04/01}{\ 2018/04/01}
+% \changes{v0.54}{2018/04/22}{\ 2018/04/22}
+% \changes{v0.55}{2018/04/26}{\ 2018/04/26}
+% \changes{v0.56}{2018/05/12}{\ 2018/05/12}
+% \changes{v0.57}{2018/06/06}{\ 2018/06/06}
+% \changes{v0.58}{2018/07/07}{\ 2018/07/07}
+% \changes{v0.58}{2018/06/07}{Replaced each \cs{csuse} with \cs{@nameuse} to force error if undefined.}
+% \changes{v0.59}{2018/09/07}{\ 2018/09/07}
+% \changes{v0.60}{2018/09/19}{\ 2018/09/19}
+% \changes{v0.61}{2018/10/13}{\ 2018/10/13}
+% \changes{v0.62}{2018/11/19}{\ 2018/11/19}
+% \changes{v0.63}{2018/12/03}{\ 2018/12/03}
+% \changes{v0.64}{2018/12/08}{\ 2018/12/08}
+% \changes{v0.65}{2018/12/22}{\ 2018/12/22}
+% \changes{v0.66}{2019/02/08}{\ 2019/02/08}
+% \changes{v0.67}{2019/02/23}{\ 2019/02/23}
+% \changes{v0.68}{2019/03/05}{\ 2019/03/05}
+% \changes{v0.69}{2019/03/21}{\ 2019/03/21}
+% \changes{v0.70}{2019/04/03}{\ 2019/04/03}
+% \changes{v0.71}{2019/04/29}{\ 2019/04/29}
+% \changes{v0.72}{2019/06/08}{\ 2019/06/08}
+% \changes{v0.73}{2019/07/11}{\ 2019/07/11}
+
+
+
+% \GetFileInfo{lwarp.sty}
+%
+% \DoNotIndex{\newcommand,\renewcommand,\addtocounter,\begin,\end,\begingroup,\endgroup}
+% \DoNotIndex{\global,\ifbool,\ifthenelse,\isequivalentto,\let}
+% \DoNotIndex{\booltrue,\boolfalse}
+% \expandafter\DoNotIndex\expandafter{\detokenize{\(,\),\,,\\,\#,\$,\%,\^,\_,\~,\ ,\&,\{,\}}}
+%
+%
+% \thispagestyle{empty}
+% \newgeometry{margin=1in}
+%
+% \begin{center}
+% \includegraphics[width=.3\linewidth]{lwarp_logo.pdf}
+%
+% {\Huge The \pkg{lwarp} package}
+%
+% {\Large \LaTeX\ to \HTML}
+%
+% \fileversion{} \Dash \filedate
+%
+% {\small\textcopyright{} 2016--2019} Brian Dunn\\ \small \texttt{bd@BDTechConcepts.com}
+%
+% \end{center}
+%
+% \begin{abstract}
+% \noindent
+% The \pkg{lwarp} package converts \LaTeX\ to \HTML\ by using \LaTeX\ to process the
+% user's document and directly generate \HTML\ tags. External utility programs are only
+% used for the final conversion of text and images. Math may be represented
+% by \SVG\ images or MathJax. Hundreds of \LaTeX\ packages are supported.
+%
+% Documents may be produced by \DVI\ or \PDF\ \LaTeX, Lua\LaTeX, \XeLaTeX;
+% by several CJK engines, classes, and packages;
+% or by customized systems such as \pkg{perltex} and \pkg{pythontex}.
+% A \prog{texlua} script automates compilation, index,
+% glossary, and batch image processing, and also supports \prog{latexmk}.
+% Configuration is semi-automatic at the first manual compile. Support files
+% are self-generated. Print and \HTML\ versions of each document may coexist.
+%
+% Assistance is provided for \HTML\ import into \EPUB\ conversion software and
+% word processors.
+%
+% Requirements include the commonly-available \brand{Poppler} utilities
+% (included with \brand{MiKTeX}) and \brand{Perl}.
+% Detailed installation instructions are included for each of the
+% major operating systems and \TeX\ distributions.
+%
+% A quick-start tutorial is provided, as well as extensive documentation
+% for special cases, a general index, and a troubleshooting index.
+% Automatic error testing is provided for configuration files, package load order,
+% and image generation.
+%
+% \SVG\ math and many other generated images
+% include \LaTeX\ expressions in the \attribute{alt} tags.
+% \brand{MathJax} may be used with advanced equation numbering
+% under the direct control of \pkg{lwarp}.
+%
+% Complicated tables are supported, which copy/paste well into \brand{LibreOffice Writer}.
+%
+% Supported classes and packages include \pkg{memoir} and \pkg{koma-script},
+% \pkg{cleveref}, \pkg{caption}, \pkg{mdframed}, \pkg{siunitx},
+% and many popular packages for tabulars, floats, graphics, theorems, the title page,
+% bibliography, indexing, footnotes, and editorial work.
+%
+% \TeX\ is a self-modifying tokenized macro-expansion language.
+% Since \pkg{lwarp} is written directly in \LaTeX, it is able to interpret the document's
+% meaning at a deeper level than external conversions which merely approximate \TeX.
+% \HTML5 and \CSS3 are leveraged to provide advanced features such as
+% \pkg{booktabs} trim, multicolumns, side-by-side minipages, and
+% \brand{JavaScript}-free navigation.
+%
+% ^^A The \pkg{lwarp} package allows \LaTeX\ to directly produce \HTMLfive\ output,
+% ^^A using external utility programs only for the final conversion of text and images.
+% ^^A Math may be represented by \SVG\ files or \brand{MathJax}.
+%
+% ^^A Documents may be produced by pdf\LaTeX, \LuaLaTeX, or \XeLaTeX.
+% ^^A A \prog{texlua} script removes the need for system utilities such as \prog{make} and \prog{gawk},
+% ^^A and also supports \prog{xindy} and \prog{latexmk}. Configuration is automatic at the
+% ^^A first manual compile.
+%
+% ^^A Print and \HTML\ versions of each document may coexist, each with its own
+% ^^A set of auxiliary files. Support files are self-generated on request.
+% ^^A Assistance is provided for import into \EPUB\ conversion software and word processors.
+%
+% ^^A A modular package-loading system uses the \pkg{lwarp} version of a package for
+% ^^A \HTML\ when available.
+% ^^A More than 300 \LaTeX\ packages are supported with these
+% ^^A high-level source-compatibility replacements, and many others work as-is.
+%
+% ^^A A tutorial is provided to quickly introduce the user to the major components
+% ^^A of the package.
+%
+% \end{abstract}
+%
+% \begin{center}
+% \setlength{\parskip}{1ex}
+% \color{blue}
+% For a list of supported features, see \cref{tab:supported}: \nameref{tab:supported}.
+%
+% To update existing projects, see \cref{sec:updates}: \nameref{sec:updates}.
+%
+% \color{red!30!black}\bfseries
+% \pkg{Lwarp} is still in development. Changes are likely.
+%
+% \end{center}
+%
+% \begin{description}
+% \footnotesize
+% \item[License:] \
+%
+% 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.
+% \end{description}
+%
+%
+%
+% \clearpage
+% \phantomsection
+%
+% \restoregeometry
+%
+% \section*{Support \protect\TeX\ development}
+% \addcontentsline{toc}{section}{Support \protect\TeX\ development}
+
+% \label{sec:supportinglatex}
+% \changes{v0.42}{2017/10/30}{Docs: Added support page.}
+%
+% \begingroup
+% \setlength{\parindent}{0em}
+% \setlength{\parskip}{2ex}
+%
+% \TeX\ and related projects:
+% \begin{itemize}[nosep]
+% \item are mostly open-sourced and a volunteer effort;
+% \item benefit students, academics, scientists, engineers, and businesses;
+% \item help drive education, public and private research, and commercial activity;
+% \item are used in the fields of mathematics, science, engineering, and humanities;
+% \item are international in reach;
+% \item span decades of development;
+% \item are enduring \Dash many older packages are still actively used and maintained;
+% \item are largely backwards compatible;
+% \item are portable across all the major computing platforms;
+% \item are usable even on older computers and away from internet access;
+% \item are continuing to maintain relevance with modern improvements;
+% \item require no yearly subscription fees;
+% \item and are supported by an active community of knowledgeable volunteers.
+% \end{itemize}
+%
+% Please consider helping by joining and/or contributing to the \TeX\ Users Group,
+% a United States 501(c)(3) tax-exempt charitable organization.
+% Contributions are accepted by credit card, check, or Pay Pal, via the United Way,
+% or by USA or European bank transfer.
+% Membership in TUG supports the development of \TeX{}Live, the major \TeX\ distribution.
+%
+% Donations may be directed towards individual projects:
+% \begin{description}[nosep]
+% \item[TUG Bursary Fund:] Assistance for attending annual TUG meetings.
+% \item[CTAN:] The Comprehensive \TeX\ Archive Network \Dash Central storage for \TeX.
+% \item[TeX Development Fund:] Support for specific projects.
+% \item[EduTeX:] Teaching and using \TeX\ in schools and universities.
+% \item[GUST e-foundry fonts:] Enhanced for math and additional language groups.
+% \item[LaTeX Project:] Modernizing the \LaTeX\ core.
+% \item[Libre Font Fund:] Fonts, tools (FontForge), and distribution (the Open Font Library).
+% \item[LuaTeX:] Combining the pdf\TeX\ engine and the Lua language.
+% \item[MetaPost:] Postscript graphics.
+% \item[MacTeX:] \TeX\ for Mac.
+% \item[PDF Accessibility:] Modern \PDF\ standards.
+% \item[Other:] Additional projects may be specified.
+% \end{description}
+%
+% To make a contribution: \hfill
+% \href{https://www.tug.org/donate.html}{\texttt{https://www.tug.org/donate.html}}
+%
+% For country-specific \TeX\ users groups: \hfill
+% \href{http://tug.org/usergroups.html}{\texttt{http://tug.org/usergroups.html}}
+%
+% For users of MiK\TeX: \hfill
+% \href{https://miktex.org/donations.html}{\texttt{https://miktex.org/donations.html}}
+%
+% \endgroup
+%
+% \clearpage
+%
+%
+% \tableofcontents
+%
+% \clearpage
+% \phantomsection
+%
+%
+% \listoffigures
+% \listoftables
+%
+%
+% \thispagestyle{pageheadfoot}
+%
+% \clearpage
+%
+% \section{Updates}
+% \label{sec:updates}
+%
+% ^^A *updates
+%
+% The following is a summary of updates to \pkg{lwarp},
+% highlighting new features and any special changes which must be made due
+% to improvements or modifications in \pkg{lwarp} itself.
+%
+% For a detailed list of the most recent changes,
+% see the end of the Change History on page \pageref{sec:changesend}.
+%
+% \begin{description}
+% \needspace{2\baselineskip}
+% \item[v0.73:] \cs{include}, \pkg{memoir}, \pkg{koma-script}, \pkg{caption},
+% \pkg{xy}, \pkg{datatool}, music scores.
+% \begin{itemize}
+% \item Fix for \cs{include}.
+% \item Warning for a \env{tabular} inside a \element{span}.
+% \item \cs{color}: Added \HTML\ support for rules and frames,
+% but not inline text. Use \cs{textcolor} if possible.
+% \item Improved many \HTML\ tags, reducing \prog{tidy} warnings. See Change History.
+% \item \pkg{memoir}: Fixes for \cs{frontmatter*} and \cs{mainmatter*}.
+% Added \cs{book}.
+% \margintag{packages}
+% \item \pkg{koma-script}: Fix for starred captions in the \TOC.
+% \item \pkg{caption}: Fix for starred captions.
+% \item \pkg{datatool}: Added pie, bar, and plot charts.
+% \item \pkg{threeparttable}: Added \env{measuredfigure}.
+% \item \pkg{intopdf}: Updated to v0.2.1.
+% \item \pkg{tocdata}: Updated to v2.03.
+% \item \pkg{quotchap}: Updated to v1.2.
+% \item \pkg{versonotes}: Updated to v0.4.
+% \item \pkg{backnaur}: Now uses \SVG\ images. Updated to v3.1.
+% \item \pkg{xy}: Fix for \cs{xybox}, improved \env{xy}, also now compatible with \pkg{qcircuit}.
+% \item \pkg{fancyvrb}: Fix for label \HTML\ tags.
+% \item Added \pkg{stackengine}.
+% \item Added \pkg{lyluatex}. (Music scores.)
+% \margintag{music}
+% \item \pkg{musicography}: Updated to 2019/05/28.
+% Added support for \env{lateximage}s.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.72:] Font control, \cs{multicolumn}, \pkg{xr} and \pkg{xr-hyper}.
+% \begin{itemize}
+% \item Due to internal changes, images for inline \SVG\ math and \env{lateximage}s
+% \watchout[images]
+% will have new hash values, and will have to be regenerated using
+% \userentry{lwarpmk cleanlimages} and
+% \userentry{lwarpmk limages}
+% \item Docs: Color-codes package names in the table of supported packages
+% and features, \cref{tab:supported}, according to each package's level
+% of support by \pkg{lwarp}.
+% \item \cs{multicolumn}: Fix for paragraph columns.
+% \item \pkg{xr}, \pkg{xr-hyper}: Fixes for references, \cs{externaldocument}.
+% \margintag{packages}
+% \item \pkg{soulutf8}: Fix: Loads \pkg{soul} for emulation.
+% \item \pkg{boxedminipage2e}: Added support for \env{lateximage}s.
+% \item \pkg{zhlineskip}: Updated to v1.0e.
+% \item Added \pkg{fontaxes}, \pkg{slantsc}, \pkg{tabfigures}.
+% \item Added \pkg{nfssext-cfr}, thus supporting \pkg{cfr-lm} and
+% several other font packages.
+% \item Added \pkg{backnaur}, \pkg{hypbmsec}, \pkg{minibox}, \pkg{pdfcrypt},
+% \pkg{shapepar}.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.71:] Error handling, multimedia, \env{tabular}.
+% \begin{itemize}
+% \item \env{tabular}: Added support for `\texttt{*}' columns.
+% Fix for paragraph tags.
+% \item \env{quotation}: Fix for \HTML\ tag.
+% \item Docs: Added a section about error conditions tested by \pkg{lwarp}.
+% See \cref{sec:errortestingmessages}.
+% \item \prog{lwarpmk}: If file \filenm{lwarpmk.conf} is an older version,
+% or the incorrect operating system,
+% displays the print command to use to recompile.
+% \item \pkg{chemfig}: Updated for v1.4.
+% \margintag{packages}
+% \item \pkg{endfloat}: Updated for v2.7.
+% \item \pkg{textpos}: Updated for v1.9.1.
+% \item Added \pkg{media9}, \pkg{movie15}, \pkg{multimedia}.
+% \margintag{multimedia}
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.70:] Error handling, \brand{MathJax}, \pkg{mathtools}.
+% \begin{itemize}
+% \item Error handling for ``Label(s) changed.''
+% Refuses to \cmds{lwarpmk limages} until recompile first.
+% \item Fix: If Computer Modern font is used, ensures \pkg{cm-super} or \pkg{lmodern}
+% is used.
+% \item Fixes for \cs{makebox}.
+% \item Fixes for \cs{parbox} inside a \element{span}.
+% \item MathJax: Updated to v2.7.5. Loads the \filenm{autoload-all.js} extension.
+% Added \cs{MathJaxFilename} to select custom scripts.
+% \item \pkg{textcomp}, \pkg{xunicode}: Fix for \cs{textinterrobang}.
+% \margintag{packages}
+% \item \pkg{mhchem}: Works with \brand{MathJax}. See \cref{sec:mhchem}.
+% \item \pkg{changes}: Updated to v3.1.2.
+% \item Added \pkg{autonum}, \pkg{changelayout}, \pkg{inputtrc}, \pkg{mathtools}, \pkg{metalogox}.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.69:] Error handling, many fixes, improved \pkg{keyfloat} \Slash \pkg{tocdata}.
+% \begin{itemize}
+% \item Fix for \HTML\ corruption of \env{lateximage} displays.
+% \item \cs{makebox}, \cs{framebox}: Fix for \parg{width,height} arguments.
+% \item \env{fminipage}: Honors \cs{minipagefullwidth}.
+% \item \pkg{array}, \pkg{longtable}: Fix for \cs{tabularnewline}.
+% \margintag{packages}
+% \item \pkg{tabularx}, \pkg{tabulary}: Fix to require the \pkg{array} package.
+% \item \pkg{supertabular}, \pkg{xtab}: Fix to clear caption after use.
+% \item \pkg{graphics}: Added a warning if used the \cs{includegraphics}
+% \optn{scale} option.
+% \item \pkg{multirow}: Added an error if didn't use
+% \cs{mrowcell} or \cs{mcolrowcell} when using \cs{multirow} or
+% \cs{multicolumnrow}.
+% \item \pkg{keyfloat}: Updated for v2.00, additional improvements.
+% \item Added \pkg{ctable}, \pkg{eqlist}, \pkg{eqparbox}, \pkg{ftcap},
+% \pkg{listliketab}, \pkg{minitoc}, \pkg{tocdata}, \pkg{topcapt}.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.68:] Error handling, tabulars, footnotes.
+% \begin{itemize}
+% \item \prog{lwarpmk}: Improved error handling for image generation if
+% \margintag{\prog{lwarpmk}}
+% compile was incomplete.
+% \item \env{tabular}: Fix for \cs{warpprintonly}.
+% \item \pkg{longtable}: Improved flexibility for \cs{endhead}, etc.
+% \margintag{packages}
+% Improved error reporting if \cs{endhead}, etc. incorrect for \pkg{lwarp}.
+% \item \pkg{threeparttable}: Fix for caption type.
+% \item \pkg{hyperref}: Fix for options with braces.
+% \item \pkg{morefloats}: Fix to be loaded early for print output.
+% \item \pkg{listings}: Updated for v1.7.
+% \item Added \pkg{bigfoot}, \pkg{fnpara}, \pkg{footnotebackref}, \pkg{manyfoot},
+% \pkg{tablefootnote}, \pkg{threeparttablex}.
+% \item Added \pkg{layouts}, \pkg{niceframe},
+% \pkg{perpage}, \pkg{showtags}.
+% \item Prevented \pkg{alg}, \pkg{algorithmic}, \pkg{pdfcprot}, \pkg{fncylab}.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.67:] Filename generation, symbol fonts.
+% \begin{itemize}
+% \item Documentation fix for \filenm{<project>-images}, \filenm{<project>-images.txt}.
+% \margintag{docs}
+% \item Added discussion regarding section names. See \cref{sec:limitssectionnames}.
+% \item Added \cs{FilenameNullify} and \cs{FilenameSimplify} for filename
+% \margintag{filenames}
+% generation. See \cref{sec:limitssectionnames}.
+% \item Core, \pkg{textcomp}, \pkg{xunicode}: Nullified additional
+% symbols during filename generation.
+% \item \pkg{color}: Fix for version number warnings.
+% \margintag{packages}
+% \item Added \pkg{academicons}, \pkg{bbding}, \pkg{dingbat}, \pkg{eurosym},
+% \pkg{fontawesome}, \pkg{fontawesome5}, \pkg{marvosym}, \pkg{pifont},
+% \pkg{typicons}.
+% \item Added \pkg{changes},
+% \pkg{easyReview}, \pkg{fitbox}, \pkg{foreign}, \pkg{gloss},
+% \pkg{karnaugh-map}, \pkg{multicap}, \pkg{nomencl}, \pkg{notes},
+% \pkg{struktex}, \pkg{umoline}, \pkg{xfakebold}.
+% \item Tested to work as-is with \pkg{askmaps}, \pkg{curves}, \pkg{euro},
+% \pkg{karnaughmap}, \pkg{tikz-karnaugh}.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.66:] \pkg{xr}, multiple projects, image names/directory, \HTML\ formatting
+% \begin{itemize}
+% \item \newlwarpmkconf
+% \item Adds options \optn{ImagesDirectory} and \optn{ImagesName}
+% \margintag{\env{lateximage}}
+% to assign directory and name prefixes for \env{lateximage} images.
+% The new defaults include the jobname, allowing the image directories for
+% multiple projects to coexist.
+% \item To reuse existing \filenm{lateximage} directories, add \pkg{lwarp} options
+% \watchout[existing projects]
+% \begin{sourceverb}
+% \usepackage[
+% ImagesDirectory={lateximages},
+% ImagesName={lateximage-}
+% ]{lwarp}
+% \end{sourceverb}
+% If not reused, the existing \filenm{lateximages} directory and
+% \filenm{lateximages.txt} file may be removed.
+% \item Added \cs{FilenameLimit} to control the maximum length of the
+% \margintag{filenames}
+% filenames generated by \pkg{lwarp}.
+% \item Improved filename generation
+% \watchout[Possible filename changes]
+% when special characters or macros are used in section names.
+% \item Fix for \cmds{lwarpmk cleanlimages} with \brand{Windows}.
+% \margintag{\brand{Windows}}
+% \item Fixes for floats in the home page.
+% \margintag{floats}
+% \item Improved \CSS\ for definition lists, table notes.
+% \margintag{lists, table notes}
+% \item \env{tabular}: Fixes for \cs{par} in column specifier,
+% minipage inside \env{tabular}.
+% \margintag{\env{tabular}}
+% \item Indexing: Fix for a long line of multiple entries.
+% \margintag{indexing}
+% \item \cs{minipagefullwidth}: Fix for global changes.
+% \margintag{\env{minipage}}
+% \item Added \cs{UseMinipageWidths} and \cs{IgnoreMinipageWidths}.
+% See \cref{sec:minipages}.
+% \item Improved \cs{fbox}, \cs{fboxBlock}, \cs{fminipage} to use current text color.
+% \margintag{colors}
+% \item Improved \HTML\ output formatting.
+% \margintag{\HTML}
+% \item Added discussion regarding invalid \HTML. See \cref{sec:invalidhtml}.
+% \margintag{docs}
+% \item Added discussion regarding math in section names,
+% \cs{imagegraphics} \optn{scale} option. See \cref{sec:convertexisting}.
+% \item Added discussion regarding international languages in section names.
+% See \cref{sec:international}.
+% \item \pkg{caption}: Fix for options clash.
+% \margintag{packages}
+% \item \pkg{xr}, \pkg{xr-hyper}: Now compatible.
+% \item \pkg{subcaption}: Improved horizontal spacing.
+% \item \pkg{multicol}: Fix for minipage inside \env{multicols}.
+% \item \pkg{multicolrule}: Updated for v1.2.
+% \item \pkg{tocbasic}: Minor update.
+% \item \pkg{acronym}: Fix for acronym in float caption.
+% \item \pkg{kotexutf}: Patch with \prog{pdflatex} and new
+% \pkg{lwarp} labels.
+% \item \pkg{extramarks}, \pkg{fancyhdr}: Updated for v3.10.
+% \item \pkg{memoir}: Added docs regarding version numbers. See \cref{sec:limitsmemoir}.
+% \item \pkg{zref}: No longer required.
+% \item Added \pkg{ar}, \pkg{ed}, \pkg{indentfirst}, \pkg{nameauth}, \pkg{truncate}.
+% \item Verified to work as-is with \pkg{changelog}.
+% \item Prevented \pkg{colortab}, \pkg{epsf}, \pkg{hyper},
+% \pkg{picinpar}, \pkg{picins},
+% \pkg{sistyle}, \pkg{ucs}.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.65:] \CSS\ layout, \attribute{alt} tags, Japanese.
+% \begin{itemize}
+% \item Moved the side\TOC\ to the left side,
+% \margintag{page layout}
+% allowing improved \CSS\ for margin notes.
+% \item Improved page layout \CSS.
+% \item \pkg{graphicx} \cs{includegraphics}: Added the \optn{alt} key
+% \margintag{image \attribute{alt} tags}
+% to assign an \attribute{alt} tag to an image. Default is ``\optn{(image)}'',
+% assigned to pass validation.
+% \item Detects and causes an error
+% \margintag{duplicate \HTML\ files}
+% if duplicate \HTML\ file names are generated,
+% caused by identical or similar sectioning names.
+% \item Fix for \env{tabular*}.
+% \margintag{fixes}
+% \item Fix for tabular border colors.
+% \item Fixes \cs{quad}, \cs{enskip}, and figure captions to pass validation.
+% \item Added \pkg{ltj*} classes,
+% \margintag{Japanese}
+% \pkg{bounddvi}, \pkg{gentombow}, \pkg{lltjext}, \pkg{plarydshln},
+% \pkg{plext}, \pkg{plextarydshln},
+% \pkg{plextcolortbl}, \pkg{pxatbegshi},
+% \pkg{pxeveryshi}, \pkg{pxftnright}, \pkg{pxjahyper}, \pkg{tascmac}.
+% \item Verified to work with \pkg{plarray}, \pkg{plautopatch},
+% \pkg{plextarray}, \pkg{plextdelarray}, \pkg{pxgentombow},
+% \pkg{plsiunitx}, \pkg{pxpdfpages}, \pkg{pxpgfrcs}, \pkg{pxpgfmark}.
+% \item Added support for \pkg{fontspec} \cs{textsi} and \cs{sishape}.
+% \margintag{packages}
+% \item Added \pkg{multicol}'s \cs{docolaction}.
+% \item Added \pkg{embrac}, \pkg{footnoterange}, \pkg{multicolrule}, \pkg{versonotes}.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.64:] Koma-Script, Japanese, Chinese.
+% \begin{itemize}
+% \item Added \pkg{utarticle} and related classes.
+% \margintag{Japanese}
+% \item Improved \pkg{ujarticle} and related classes.
+% \item Fix for \pkg{biblatex} with C\TeX\ and other classes.
+% \margintag{Chinese}
+% \item Fixes for \pkg{scrlayer}, \pkg{scrlayer-scrpage}.
+% \margintag{Koma-Script}
+% \item \pkg{addlines}: Updated to v0.3.
+% \margintag{packages}
+% \item Added \pkg{bsheaders},
+% \pkg{gmeometric}, \pkg{marginal},
+% \pkg{rmpage}, \pkg{scrpage2}.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.63:] \pkg{mdframed}, Chinese, Japanese, Korean
+% \begin{itemize}
+% \item Added \cs{linkhomename}: A user-definable name for the \UI{Home} link.
+% \margintag{localization}
+% \item Documented \cs{sidetocname}: A user-definable name for the side\TOC.
+% \item Fix: \cs{LinkHome} for print output.
+% \margintag{fixes}
+% \item Moved package load checks to the \pkg{lwarp} core
+% \margintag{optimizations}
+% to reduce the number of \filenm{lwarp-*} files.
+% \item \pkg{mdframed}: Fix with \pkg{amsthm}, improved titles and font control.
+% \margintag{packages}
+% Improved rule widths.
+% \item Fixes for \pkg{xeCJK}.
+% \margintag{Chinese}
+% \item Added \pkg{xpinyin}, \pkg{zhlineskip}.
+% \item Verified to work with \pkg{cjkpunct}, \pkg{upzhkinsoku}, \pkg{zhspacing}.
+% \item Verified to work with \pkg{zxjatype}, \pkg{luatexja}, \pkg{luatexja-fontspec}.
+% \margintag{Japanese}
+% \item Added \pkg{bxjsarticle} and related classes.
+% \item Added \pkg{ltjsarticle} and related classes.
+% \item Added p\LaTeX, up\LaTeX, \pkg{ujarticle} and related classes.
+% \item Prevented \pkg{utarticle} and related classes.
+% \item Prevented \pkg{bxcjkatype}.
+% \item Verified to work with \pkg{kotex}, \pkg{xetexko}, \pkg{luatexko}.
+% \margintag{Korean}
+% \end{itemize}
+%
+% \needspace{2\baselineskip}
+% \item[v0.62:] MiK\TeX\ docs, \HTML\ title, C\TeX, \pkg{xeCJK}, \pkg{bitpattern}.
+% \begin{itemize}
+% \item Docs: Setting a \UTF-8 locale. See \cref{sec:utf8locale}.
+% \margintag{docs}
+% \item MiK\TeX: Docs for \prog{MiKTeX Console} and \pkg{miktex-poppler-bin}.
+% \margintag{MiK\TeX}
+% \item \HTML\ subpage titles: Added \cs{HTMLTitleBeforeSection} and
+% \margintag{\HTML\ \element{title}}
+% \cs{HTMLTitleAfterSection} to select whether
+% the \HTML\ \element{title} displays the website name before or
+% after the section name.
+% See \cref{sec:htmlsettings}.
+% \item Fix for package options handling.
+% \margintag{fixes}
+% \item Fixes for horizontal white space between \env{fminipage}, \env{fcolorminipage},
+% \env{colorboxBlock}, \env{fcolorboxBlock}.
+% \item Logos: Fix for \XeTeX\ logo, improved \CSS, made robust,
+% improved search-engine optimization.
+% \item |\\[$1]|: Additional \HTML\ \element{br} if $\$1 > 0\,\textrm{pt}$.
+% \item Fixes for \cs{includgraphics} filename, and with \bool{FormatWP}.
+% \item Fix: \CSS\ for \cs{textup}.
+% \item Fix: Added \cs{slshape}.
+% \item Added \pkg{ctex} package and related classes, \pkg{xeCJK}.
+% \margintag{Chinese}
+% \item Prevented \pkg{CJK}, \pkg{CJKutf8} unless \pkg{xeCJK}, \pkg{ctex} are used.
+% \item \pkg{chemfig}: Docs for new macro \cs{polymerdelim}.
+% \margintag{packages}
+% \item \pkg{asymptote}: Docs for compilation.
+% \item \pkg{chngpage}: Fix to load \pkg{lwarp-changepage}.
+% \item \pkg{algorithm2e}: Fix with non-\pkg{book} classes.
+% \item \pkg{register}: Updated to v1.8.
+% \item \pkg{nicefrac}: Improved font control and \CSS, honors \optn{nice} and \optn{ugly}.
+% \item \pkg{units}: Improved font control and \CSS, honors \optn{tight} and \optn{loose}.
+% \item \pkg{xfrac}: Improved \CSS.
+% \item \pkg{textcomp} and \pkg{xunicode}: Fix conflicts with \cs{textcircled}.
+% \item \pkg{ulem}: Improved compatibility with \pkg{CJKulem}, \env{lateximage}.
+% \item MathJax and \pkg{siunitx}: Removed inoperable extension.
+% \item Added \pkg{bitpattern}, \pkg{pdfcomment},
+% \pkg{pdfmarginpar}, \pkg{tram}, \pkg{unitsdef}, \pkg{xechangebar}.
+% \item Added \pkg{musicography}, \pkg{octave}, \pkg{semantic-markup}.
+% \item Added \pkg{2in1}, \pkg{flippdf}, \pkg{notespages}, \pkg{rviewport}, \pkg{twoup}.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.61:] Custom compilation, \EPS-related packages, documentation, indexes.
+% \begin{itemize}
+% \item Split index into multiple indexes. See \cpageref{sec:indexmeta}.
+% \margintag{docs}
+% \item Improved documentation regarding font selection. See \cref{sec:fonts}.
+% \item Added documentation regarding debugging options.
+% See \cref{sec:debuggingmessages}.
+% \item Added documentation regarding \HTML\ entities inside program listings.
+% See \cref{sec:avoidtextformatting}.
+% \item Added options to specify the shell commands to execute for
+% \margintag{custom compiling}
+% \cmds{lwarpmk print} and \cmds{lwarpmk html}, allowing
+% the use of \pkg{lwarp} with \pkg{perltex}, \pkg{pythontex}, etc.
+% If not specified, these are set automatically depending on the \LaTeX\ engine,
+% \optn{-\/-shell-escape}, and \pkg{lwarp} options.
+% See \cref{sec:customcompiling}.
+% \item Changed macro names to match
+% \watchout[changed names]
+% \cs{displaymathother}, \cs{displaymathnormal}: \\
+% \begin{tabular}{cc}
+% \toprule
+% Old & New \\
+% \midrule
+% \cs{StartDynamicMath} & \cs{inlinemathother} \\
+% \cs{StopDynamicMath} & \cs{inlinemathnormal} \\
+% \bottomrule
+% \end{tabular}
+% \item Fix: Paragraph tags in a \env{tabular}.
+% \margintag{fixes}
+% \item Fix: \pkg{supertabular} and \pkg{xtab} captions.
+% \item Fix: \DVI\ \LaTeX\ \cs{includegraphics} \EPS\ images.
+% \item Fix: \pkg{newfloat} lists.
+% \item Fix: \CSS\ footnotes text align, minipage tabular and footnote margins.
+% \item Added \pkg{epsfig}, \pkg{psfrag}, \pkg{psfragx}, \pkg{pstool}.
+% \margintag{packages}
+% \item Added \pkg{copyrightbox}, \pkg{pdfprivacy}, \pkg{thinsp},
+% \pkg{threadcol}, \pkg{uspace}.
+% \item Added \pkg{chkfloat}, \pkg{cmdtrack}, \pkg{dprogress},
+% \pkg{lua-visual-debug}, \pkg{refcheck},
+% \pkg{srcltx}, \pkg{srctex}, \pkg{vpe}, \pkg{xbmks}.
+% \end{itemize}
+% \item[v0.60:] Fixes for \pkg{longtable}, \pkg{listings}.
+% \begin{itemize}
+% \item \pkg{longtable}, etc.: Fixes for slowdown and memory management for very long tables.
+% \margintag{fixes}
+% \item \pkg{listings}: Fix for \HTML\ entities, and also when used inside a list.
+% \item \pkg{diagbox}: Fix for incorrect \HTML\ par tags.
+% \item Added \pkg{2up}, \pkg{booklet}.
+% \margintag{packages}
+% \item Added \pkg{bophook}, \pkg{draftfigure}, \pkg{fullminipage},
+% \pkg{grid-system}, \pkg{layaureo}.
+% \item Added \pkg{leading}, \pkg{widows-and-orphans}.
+% \item Added \pkg{fancytabs}, \pkg{thumb}, \pkg{thumbs}.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.59:] \DVI\ \prog{latex}, \brand{MathJax}, \pkg{asymptote},
+% \pkg{pdftricks} and \pkg{pstricks}, \pkg{epstopdf}, \pkg{brqen}.
+% \begin{itemize}
+% \item \newlwarpmkconf
+% \item Added an error if \filenm{lwarpmk.conf}'s format has changed and
+% \margintag{\prog{lwarpmk}}
+% the document must be recompiled.
+% \item Added a warning if the \filenm{lwarpmk.conf} configuration file appears
+% to be for the wrong operating system, in case files are transferred between
+% systems.
+% \item Added
+% \begin{sourcedisplay}
+% lwarpmk epstopdf <list-of-EPS-files>
+% \end{sourcedisplay}
+% to quickly convert a document's \EPS\ images to \PDF\ or \SVG.
+% See \cref{sec:limitsgraphics}.
+% \item Added support for \DVI\ \prog{latex}. See \cref{sec:loading}.
+% \margintag{\DVI\ \prog{latex}}
+% \item Fix for \optn{-\/-shell-escape} with \prog{latexmk}.
+% \margintag{\prog{latexmk}}
+% \item Updated MathJax script to v2.7.4.
+% \margintag{math}
+% \item Fix: Mathjax chapter number removed from non-numeric tagged equations.
+% \item Added MathJax support for \pkg{nicefrac}, \pkg{units}.
+% \item Fix for \cs{[} and \cs{]} with \cs{displaymathnormal}.
+% \item Fix for \cs{includegraphics} filename expansion.
+% \margintag{images}
+% \item \cs{includegraphics} now works with
+% \filenm{.pdf} and \filenm{.eps} filename extensions.
+% \item Moved \pkg{amsmath} out of the \pkg{lwarp} core.
+% \margintag{packages}
+% \item Fix for \pkg{chemformula} \cs{NMR}.
+% \item Added \pkg{asymptote}, \pkg{pdftricks}, \pkg{pstricks}, \pkg{pst-eps}.
+% \item Added \pkg{breqn}, \pkg{SIunits}.
+% \item Added \pkg{bxpapersize}, \pkg{canoniclayout}, \pkg{draftcopy},
+% \pkg{fnbreak}, \pkg{nccfancyhdr}.
+% \item Added \pkg{accsupp}, \pkg{axessibility}.
+% \item Added \pkg{xunicode}.
+% \item Improved and now supports \pkg{epstopdf}.
+% \item Tested to work as-is: \pkg{eepic}, \pkg{sepfootnotes}.
+% \item Added information about setting up a development version of \pkg{lwarp}.
+% \margintag{docs}
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.58:] Extensive improvements in indexing, glossaries.
+% Adds \PDF-inclusion packages.
+% \begin{itemize}
+% \item \newlwarpmkconf
+% \item \prog{lwarpmk}: Added the |-p| option to specify the project name.
+% \margintag{\prog{lwarpmk}}
+% \item \prog{lwarpmk}: Now uses \prog{makeglossaries} for glossary generation,
+% \margintag{\pkg{glossaries}}
+% allowing the processing of multiple glossaries at once.
+% \item Added \pkg{lwarp} option \optn{GlossaryCmd}
+% to specify the shell command used by \cmds{lwarpmk printglossary} and
+% \cmds{lwarpmk htmlglossary}. Defaults to \cmds{makeglossaries}.
+% \item Docs: Extra indexing options. See \cref{sec:indexingoverview}.
+% \margintag{index and glossary}
+% \item Added support for \prog{makeindex}. (Previously supported only \prog{xindy}.)
+% Also added indexing packages listed below.
+% \item Added \pkg{lwarp} options \optn{PrintIndexCmd}, \optn{HTMLIndexCmd},
+% and \optn{LatexmkIndexCmd}
+% to specify shell commands used by \cmds{lwarpmk printindex},
+% \cmds{lwarpmk htmlindex}, and \prog{latexmk}. May be preset with the
+% \optn{makeindex} or \optn{xindy} \pkg{lwarp} options. See \cref{sec:loading}.
+% \item Added \pkg{lwarp} options \optn{makeindex} and \optn{xindy} to
+% set \optn{PrintIndexCmd}, \optn{HTMLIndexCmd}, and \optn{LatexmkIndexCmd}
+% to sensible values for a typical single index. See \cref{sec:loading}.
+% \item Added \pkg{lwarp} option \optn{makeindexStyle} to tell \prog{lwarpmk} to
+% use a custom style instead of \filenm{lwarp.ist}.
+% See \cref{sec:modifymakeindex}.
+% \item Fix for index entries with \cs{see}, \cs{seealso}, \cs{emph}, \cs{textbf}, etc.
+% \item Replaced each \cs{csuse} with \cs{@nameuse} for improved error detection.
+% \margintag{misc. fixes}
+% \item Additional internal print/\HTML\ macro selection improvements.
+% \item Fix: \cs{printindex} finishes pending \cs{index} writes first.
+% \item Fixes for \pkg{memoir}: \pkg{makeidx}, \pkg{ccaption}, multiple indexes, \cs{specialindex}.
+% \margintag{packages}
+% \item Fixes for \pkg{komascript}: Indexing improvements.
+% \item Added \pkg{imakeidx}, \pkg{index}, \pkg{repeatindex}, \pkg{splitidx}.
+% \item Added \pkg{attachfile}, \pkg{attachfile2}, \pkg{intopdf},
+% \pkg{pdfpages}, \pkg{pdfx}.
+% \item Added \pkg{cases}.
+% \item Tested to work as-is: \pkg{notes2bib}, \pkg{hvindex}.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.57:] \pkg{algorithm2e}, \pkg{float} styles, tabular packages, internal improvements.
+% \begin{itemize}
+% \item Added support for MathJax equations with \cs{footnote}, \cs{footnotemark}.
+% \margintag{MathJax}
+% \item Added \cs{StartDefiningMath} and \cs{StopDefiningMath} for
+% \margintag{math macros}
+% use when defining macros in the preamble which contain \$.
+% See \cref{sec:mathcatcode}.
+% \item Added \cs{inlinemathother} and \cs{inlinemathnormal} to
+% \margintag{dynamic math}
+% delimit math expressions which depend on a variable condition
+% such as a counter. Such expressions will not be hashed for reuse,
+% and will be converted to \SVG\ math images even when MathJax is enabled.
+% See \cref{sec:mathdynamic}.
+% \item Renamed \cs{EndDefiningTabulars} to \cs{StopDefiningTabulars}.
+% \watchout[new name]
+% \item Improved localization for \env{lateximage} \HTML\ \attribute{alt} tags.
+% \margintag{\env{lateximage} \attribute{alt} tags}
+% For \SVG\ math images, the \attribute{alt} tag under some conditions
+% will be set to \cs{mathimagename}, which defaults to ``math image''.
+% For packages, the \attribute{alt} tag is set using the package name followed by
+% \cs{packagediagramname}, which defaults to ``diagram''. Ex:
+% \begin{sourcedisplay}
+% (-xy- diagram)
+% \end{sourcedisplay}
+% See \cref{sec:packagediagramname}.
+% \item Fix: Improved print/\HTML\ macro selection.
+% \item Fix: \cs{href} text catcodes.
+% \margintag{misc. fixes}
+% \item Fix: \cs{subref} text.
+% \item Fixes: Colored \cs{rule} and \cs{boxframe}.
+% \item \pkg{float}, \pkg{rotfloat}: Adds support for float styles |ruled| and |boxed|.
+% \margintag{packages}
+% \item \pkg{float}: Fix: Do not create \cs{l@<type>} until \cs{listof} is used.
+% \item \pkg{marginnote}: Fix: Long optional argument.
+% \item \pkg{ellipsis}: Adds \cs{midwordellipsis}.
+% \item \pkg{breakurl}: Fix for text catcodes.
+% \item Added \pkg{algorithm2e}, \pkg{register}, \pkg{ltablex}, \pkg{xltabular},
+% \pkg{xellipsis}, \pkg{trimclip}, \pkg{errata}, \pkg{vowel}, \pkg{xpiano}.
+% \item Prevents \pkg{glossary}.
+% \item Tested to work as-is with \pkg{gauss}, \pkg{phonrule}, \pkg{piano},
+% \pkg{SIunits}, \pkg{tikzcodeblocks}.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.56:] Shell escape, tabular packages.
+% \begin{itemize}
+% \item Added
+% \margintag{\prog{lwarpmk}}
+% \begin{sourcedisplay}
+% lwarpmk pdftosvg <list-of-PDF-files>
+% \end{sourcedisplay}
+% to quickly convert a document's \PDF\ images to \SVG, for use with \HTML.
+% See \cref{sec:limitsgraphics}.
+% \item Added support for \optn{-\/-shell-escape}. See \cref{sec:shellescape}.
+% \item Added support for \pkg{array} |w| and |W| columns.
+% \margintag{\env{tabular}}
+% \item Fix: \cs{multicolumn} parameter handling.
+% \item Added support for double \cs{hline}s, \cs{midrule}s, and vertical rules.
+% \item Added support for \pkg{arydshln} dashed lines
+% with \HTML\ \env{tabular}, but
+% reverts to plain rules for \env{lateximage}
+% and \SVG\ math \env{array}.
+% \item Fix: \cs{thinspace}.
+% \margintag{misc. fixes}
+% \item Fix: \pkg{paralist} compact environments.
+% \item Added \pkg{parnotes}, \pkg{quoting}, \pkg{lua-check-hyphen},
+% \pkg{tocenter}, \pkg{underscore}.
+% \margintag{packages}
+% \item Added \pkg{bibunits}.
+% \item Tested to work as-is with \pkg{babelbib}, \pkg{bodegraph},
+% \pkg{fast-diagram}, \pkg{nicematrix}, \pkg{structmech}.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.55:] Various fixes.
+% \begin{itemize}
+% \item Fix: Extraneous space in file links, which also
+% \margintag{misc fixes}
+% prevented \prog{Calibre} \EPUB\ conversions.
+% \item Fix: Float optional argument regression.
+% \item Fix: \cs{ForceHTMLTOC} with \cs{phantomsection}.
+% \item Fix: Overfull boxes in \env{lateximage}s.
+% \item Fix: QED symbols in \env{lateximage}.
+% \item \pkg{koma-script}: Fix: Figure with \cs{centering}, etc.
+% \margintag{packages}
+% \item Added \pkg{clrdblpg}.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.54:] Float \cs{centering}, improved image checks.
+% \begin{itemize}
+% \item \newlwarpmkconf
+% \item \progcode{lwarpmk limages} checks for the presence of the \HTML\ version
+% \margintag{\prog{lwarpmk}}
+% of the document and valid image references before attempting
+% to create the \env{lateximage}s.
+% \item \prog{lwarpmk}: Improved error message if configuration file
+% does not exist.
+% \item Added documentation for avoiding error with BibTeX and \cs{etalchar}.
+% \margintag{\BibTeX}
+% See \cref{sec:limitsbibtex}.
+% \item Added documentation regarding \pkg{polyglossia}.
+% \margintag{\pkg{polyglossia}}
+% See \cref{sec:limitspolyglossia}.
+% \item Added documentation regarding the use of macros in section names.
+% \margintag{macros in section names}
+% See \cref{sec:thingstoavoid}.
+% \item Renamed and added package options:
+% \margintag{document encoding}
+% \watchout[New and revised encoding options]
+% \begin{center}
+% \begin{tabular}{>{\ttfamily}c>{\ttfamily}c}
+% \toprule
+% \textrm{Old Package Option} & \textrm{New Package Option} \\
+% \midrule
+% xdyFilename & xindyStyle \\
+% IndexLanguage & xindyLanguage \\
+% \midrule
+% --- & xindyCodepage \\
+% --- & pdftotextEnc \\
+% \bottomrule
+% \end{tabular}
+% \end{center}
+% Use these options along with \pkg{inputenc} or \pkg{inputenx}
+% to process documents in an encoding other than UTF-8.
+% See \cref{sec:fonts}.
+%
+% \item Floats now honor \cs{centering}, \cs{raggedright}, \cs{raggedleft},
+% \margintag{floats with \cs{centering}, etc.}
+% and their \pkg{ragged2e} equivalents,
+% when placed directly after:
+% \begin{sourceverb}
+% \begin{floattype}
+% \centering
+% \end{sourceverb}
+% \item \pkg{tikz}: \cs{pgfpicture}, fit, align, font.
+% \margintag{misc. fixes}
+% \item \pkg{ragged2e}: \cs{centering} etc.
+% \item \pkg{hyperref}: \cs{hypertarget} was creating duplicate of \cs{label}.
+% \item \pkg{hyperref}: Active chars inside \cs{hyperref}, \cs{hyperlink}.
+% \item \pkg{hyperref}: \cs{ref} inside \cs{hyperlink} caused a nested \HTML\ link.
+% \item \pkg{glossaries}: Fix when not using \pkg{babel} or \pkg{polyglossia}.
+% \item \pkg{textcomp}: \cs{textperthousand}.
+% \item \LaTeX\ core \env{verse} environment: line spacing.
+% \item Removed \cs{citetitle}, adjusted \cs{attribution}. \watchout
+% \item \pkg{memoir}: Minor update for v3.7g.
+% \margintag{packages}
+% \item Added \pkg{inputenx}, \pkg{bibunits}, \pkg{chngpage},
+% \pkg{forest}, \pkg{magaz}, \pkg{gridset}.
+% \item Prevents loading \pkg{ae}, \pkg{aecc}, \pkg{t1enc}, and \pkg{wasysym}.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.53:] Improved image checks.
+% \begin{itemize}
+% \item \prog{lwarpmk}: Added a warning about corrupted images due to the
+% \margintag{\prog{lwarpmk}}
+% need to recompile the document one more time.
+% \item \prog{lwarpmk}: Added the \cmds{lwarpmk cleanlimages} command.
+% \item Added documentation for \cmds{lwarpmk cleanlimages} and
+% \cmds{lwarpmk pdftohtml}.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.52:] Improved footnotes, \SVG\ math.
+% \begin{itemize}
+% \item Improved install instructions regarding \filenm{lwarp_baseline_marker.png}.
+% \margintag{documentation}
+% \item Added documentation regarding footnotes in section headings,
+% and footnotes with \cs{VerbatimFootnotes}
+% from \pkg{fancybox}, \pkg{fancyvrb}. See \cref{sec:limitsfootnotes}.
+% \item Added documentation regarding font selection when using
+% \XeLaTeX\ or \LuaLaTeX\ with \pkg{fontspec} and traditional font packages.
+% See \cref{sec:fonts}.
+% \item Fix: Limit the number of background tasks
+% \margintag{SVG math}
+% when generating \env{lateximage}s.
+% \item Added user-adjustable \SVG\ math font scaling. See \cref{sec:mathfontscale}.
+% \item Added warnings if \filenm{lwarp_baseline_marker.png} is not present, or
+% if \pkg{graphicx} or \pkg{graphics} is not loaded.
+% \item Improved \cs{ensuremath} hashing expansion.
+% \item Fix: \env{equation*} with \env{split}.
+% \item \env{tabbing} now works inside a \env{lateximage}. Use for math in \env{tabbing}.
+% \item Fix: MathJax script was not executing in some conditions.
+% \margintag{MathJax}
+% \item Added \cs{CustomizeMathJax} to add custom functions.
+% See \cref{sec:limitsmath}.
+% \item Fix: Footnote numbering when using \progcode{HTMLDebugComments}.
+% \margintag{footnotes}
+% \item Fix: Footnote paragraph tags.
+% \item Fix: \progcode{FootnoteDepth} defaults to \cs{subsubsection}.
+% \item Fix: \cs{kill} in a \env{lateximage}. \margintag{misc. fixes}
+% \item Fix: \cs{FileDepth}, misc. others, when input encoding is not \optn{utf8}.
+% \item Fix: \cs{texorpdfstring} in a section name.
+% \item \pkg{hyperref} emulation: Fix for \progcode{\#}, \progcode{\%}, \margintag{packages}
+% \progcode{\&}, \progcode{\~}, \progcode{\_} characters in \URL{}s.
+% \item \pkg{fancybox}, \pkg{fancyvrb}: Initial support for \cs{VerbatimFootnotes}.
+% \item \pkg{nicefrac}: Added with fix for \cs{ensuremath}.
+% \item \pkg{graphicx}: Fix for option defaults. Added v1.1a/b options.
+% \item \pkg{endfloat}: Updated for v2.6.
+% \item \pkg{url}: Fixes for active characters.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.51:] Improved \SVG\ math, added numerous chemistry packages.
+% \begin{itemize}
+% \item Docs: Added \nameref{sec:thingstoavoid}.
+% \margintag{documentation}
+% \item Docs: Added to \nameref{sec:convertexisting}.
+% \item Docs: Multiple authors and affiliations with custom classes.
+% See \cref{sec:authorsaffils}.
+% \item Docs: \pkg{tikz} with matrices. See \cref{sec:limitstikz}.
+% \item Improved \SVG\ math baseline.\margintag{SVG math}
+% \item Improved \SVG\ math font and color.
+% \item Faster \SVG\ math rendering.
+% \item Improved support for display math containing complicated math objects,
+% such as \pkg{tikz-cd}. See \cref{sec:displaymathother}.
+% \item Fix: \cs{addcontentsline} inside \SVG\ math.
+% \item Fix: SVG math containing an embedded \env{lateximage}.
+% \item MathJax now handles \cs{ensuremath} in expressions.\margintag{MathJax}
+% \item Fix: Added \env{alignat} environment. \margintag{misc. fixes}
+% \item Fix: \pkg{afterpackage} no longer required, which conflicted with \pkg{scrlfile}.
+% \item Fix: \pkg{titling} \cs{thanks} mark.
+% \item Fix: \pkg{fancybox} improvements.
+% \item Fix: \pkg{tikz} \cs{tikz} macro. (Previously only the \env{tikzpicture} environment worked.)
+% \item Fix: \pkg{tikz} with optional argument.
+% \item Added \pkg{mhchem}, \margintag{packages}
+% \pkg{chemfig}, \pkg{chemformula}, \pkg{chemmacros}, \pkg{chemnum}, \pkg{chemgreek},
+% \pkg{epstopdf-base}, \pkg{grid}, \pkg{ltxgrid}.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.50:] Improved \SVG\ math.
+% \begin{itemize}
+% \item \SVG\ math and other \env{lateximage}s now are
+% converted to \SVG\ using \margintag{\SVG\ math}
+% parallel background tasks, utilizing all available \acro{CPU} cores.
+% \item Inline \SVG\ math image file names now are MD5 hashes made from
+% their source \LaTeX\ code.
+% Identical inline math expressions, such as multiple instance of \$x\$,
+% now share a single image file.
+% This reduces the number of images to store, transmit, process, and display.
+% Each image file is only converted to \SVG\ a single time, and reused if it
+% already exists.
+% Display math and other forms of \SVG\ image such as \env{picture} and
+% \tikz\ still use individual image files which are recreated each time
+% \cmds{lwarpmk limages} is run.
+% \item Fixes: SVG math and/or \cs{underline} in a sectioning file name.
+% \item Improved \SVG\ display math and tags.
+% \item Improved \SVG\ math and \pkg{siunitx} \attribute{alt} tags.
+% \item Improved \pkg{siunitx} units.
+% \item Fix: \cs{ensuremath} with MathJax now creates a \env{lateximage}.
+% \item Fix: \cs{centering}, etc. in \SVG\ math, \env{lateximage}, \tikz.
+% \item Fix: Made various macros robust,
+% additionally fixing \pkg{authblk}.\margintag{misc. fixes}
+% \item Fix: \pkg{ntheorem} if neither \optn{standard} nor \optn{amsthm} selected.
+% \item Fix: \pkg{listings}: Improved column alignment.
+% \item Fix: Load \pkg{fontspec} if necessary.
+% \item Added \pkg{xy}, \pkg{epstopdf}, \pkg{diagbox}, \pkg{pbox}, \margintag{packages}
+% \pkg{bytefield}, \pkg{axodraw2}, \pkg{phfqit},
+% \pkg{schemata},
+% \pkg{dblfloatfix}, \pkg{nonfloat}, \pkg{morefloats}.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.49:] \
+% \begin{itemize}
+% \item Added \pkg{xcolor} \cs{rowcolors}.\margintag{tabular}
+% \item Fix: \cs{noalign} inside a \env{tabular}.
+% \item Fix: \cs{eqref} in a caption.\margintag{math}
+% \item Fix: Incorrect \PDF\ font size changes
+% caused occasional \HTML\ corruption.\margintag{misc fixes}
+% \item Fix: \pkg{printlen} changes are now grouped for \HTML\ output.
+% \item Added \pkg{vwcol}, \pkg{vertbars}, \pkg{hyphenat}, \margintag{packages}
+% \pkg{lineno}, \pkg{fnlineno}, \pkg{figsize}, \pkg{hypdestopt}, \pkg{pagegrid},
+% \pkg{pdfrender}, \pkg{luacolor}, \pkg{resizegather}.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.48:] \
+% \begin{itemize}
+% \item Added some documentation
+% \margintag{documentation}
+% regarding converting an existing document. See \cref{sec:convertexisting}.
+% \item Updated compatibility for new \pkg{cleveref} v0.21.\margintag{\pkg{cleveref}}
+% \item Fix: Ignores optional tabular column arguments.\margintag{tabular}
+% \item Added \cs{leftline}, \cs{centerline},
+% \cs{rightline}.\margintag{minor updates}
+% \item Lists have improved font control via \cs{makelabel}.
+% \item Print-mode \env{lateximage} now boxed to the natural width of its
+% multiline contents.
+% \item \env{abstract} now allows an optional name, as required by some classes.
+% \item Fix: Improved spacing, \cs{mbox}, and font sizes
+% with \SVG\ math, \tikz.\margintag{math}
+% \item \pkg{siunitx}: Improved \SVG\ math, fraction compatibility, color output.
+% \item Fix: LOF/LOT links.\margintag{misc. fixes}
+% \item Fix: Virtual page size grouping caused excessive \PDF\ page breaks.
+% \item Fix: Parsing similar package names in a
+% single \cs{usepackage}.
+% \item Fix: Adapts to classes without \cs{part}.
+% \item Fix: \cs{newline} in \cs{title} was causing |<br>| in window title.
+% \item Fix: \cs{maketitle} with \cs{cr}, \cs{crcr}, \cs{noalign},
+% for \pkg{IEEEtran} class.
+% \item Fix: \pkg{xfrac} neutralized \env{BlockClass} and others.
+% \item Fix: \pkg{todonotes} and \pkg{luatodonotes}: Improved \cs{todototoc}.
+% \item Added \pkg{colortbl}, \margintag{packages}
+% \pkg{chapterbib}, \pkg{acro}, \pkg{acronym},
+% \pkg{hypernat}, \pkg{hypcap}, \pkg{stfloats},
+% \pkg{vmargin}, \pkg{fancyheadings}.
+% \item \pkg{fancyref}: Now directly supported.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.47:] \
+% \begin{itemize}
+% \item Improved \SVG\ math baseline and sizing.\margintag{math}
+% \item Fixes: \SVG math in captions, subcaptions, \cs{nameref}.
+% \item Fixes: Line wrap at hyphen in \HTML\ output.
+% \item Added \pkg{endheads}, \pkg{multitoc}, \pkg{sectionbreak},
+% \pkg{blowup}, \pkg{xurl}.\margintag{packages}
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.46:] \
+% \begin{itemize}
+% \item \cs{PrintStack} changed to \cs{LWRPrintStack}.\watchout[name change]
+% \item Fix: Empty lines between \env{tabular} rows.\margintag{misc. fixes}
+% \item Fix: Stack unnesting.
+% \item Fix: SVG math and \env{lateximage}s in numerous situations.
+% \item Fix: Spaces in \cs{usepackage}.
+% \item Fix: Now allows \brand{MathJax} inside \env{verse}.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.45:] \
+% \begin{itemize}
+% \item Improved \prog{MiKTeX} install instructions.
+% \margintag{documentation}
+% \item Improved graphics and \pkg{epstopdf} instructions.
+% \item Updates to the \nameref{sec:introduction}.
+% \item Added \pkg{memoir}, \pkg{memhfixc}.
+% See \cref{sec:limitsmemoir}.\margintag{memoir}
+% \item Fix: Now allows underscores in labels.\margintag{cross-references}
+% \item Fix: \cs{\_} and |\<blank>| in section/file names.
+% \item Fix: Now allows \brand{MathJax} inside \env{tabbing}.\margintag{math}
+% \item Fix: Bibliography \cs{em} names.\margintag{bibliography}
+% \item Added \pkg{cite}, \pkg{natbib}, \pkg{backref}.
+% (Also works as-is with \pkg{biblatex}.)
+% \item Fix: Empty lines between \env{tabular} rows.\margintag{misc. fixes}
+% \item Fix: ``Improper \cs{prevdepth}'' with minipages, lists.
+% \item Fix: Incorrect \SVG\ math and |lateximage|s with \pkg{subfig}.
+% \item Fix: Lateximages from incorrect pages with Mathjax.
+% \item Fix: Missing sidetoc if using \pkg{listings}.
+% \item Fix: Added an \pkg{array} emulation package.
+% \item Added
+% \pkg{subfigure}, \pkg{prettyref}, \margintag{packages}
+% \pkg{hanging}, \pkg{midpage},
+% \pkg{flafter}, \pkg{fltrace}, \pkg{changebar}, \pkg{endfloat},
+% \pkg{continue}, \pkg{fwlw}, \pkg{turnthepage}, \pkg{footnpag},
+% \pkg{pagesel}, \pkg{textfit}, \pkg{titleref}.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.44:] \
+% \begin{itemize}
+% \item Added \pkg{koma-script} classes (except \pkg{scrlttr2}, \pkg{scrjura}).
+% \margintag{\pkg{koma-script}}
+% \item Added \pkg{scrextend},
+% \pkg{scrlayer}, \pkg{scrlayer-notecolumn}, \pkg{scrlayer-scrpage},
+% \pkg{scrhack}, \pkg{tocstyle}, \pkg{tocbasic}.
+% \item Added \cs{HTMLTitle}.
+% \margintag{\HTML\ title and author}
+% Fixed web page title if \cs{HTMLTitle} empty and no \cs{title} given and
+% not using \pkg{titling} package.
+% \item Fixed web page author if \cs{HTMLauthor} is empty and \cs{author} is not given.
+% \item If using \prog{pdflatex}, automatically loads T1 and \UTF-8 encodings.
+% \margintag{encodings}
+% (Additional \pkg{fontenc} encodings may be loaded after \pkg{lwarp}.)
+% \item Added \env{list} and \env{trivlist} environments, \pkg{hang}.\margintag{lists}
+% \item Fix: \cs{multicolumn} alignment if formatting for a word processor.
+% \margintag{tabular}
+% \item Added \pkg{ltxtable}.
+% \item Fix: \brand{MathJax} combined with \env{lateximage}s.\margintag{math}
+% \item \pkg{algorithmicx}: Improved comment symbol and floating.
+% \item Completed \pkg{todonotes} and \pkg{luatodonotes}.
+% \margintag{\pkg{packages}}
+% \item Added \pkg{todo}, \pkg{easy-todo}, \pkg{fixmetodonotes}, \pkg{fixme}.
+% \item Added \pkg{soulutf8}, \pkg{soulpos}, \pkg{cancel}.
+% \item Added \pkg{section}, \pkg{fancyref}, \pkg{ifoddpage}.
+% \item Added \pkg{preview}, \pkg{atbegshi}, \pkg{watermark}.
+% \item Improved \pkg{tocloft} \cs{newlistof} and \cs{newlistentry}.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.43:] \
+% \begin{itemize}
+% \item Docs: Reorganized \HTML\ customization, added an \HTML\ settings table.
+% See \cref{sec:htmlsettings}.
+% \item Added \progcode{FootnoteDepth} to control the placement
+% \margintag{footnotes}
+% of pending footnotes before section breaks.
+% By default, pending footnotes are printed before
+% each \cs{subparagraph} or higher.
+% \item Fix: Expansion in section name. \margintag{sectioning}
+% \item Fix: Ignore spaces in tabular column specification.
+% \margintag{\env{tabular}}
+% \item Fix: Tabular rules at bottom or when finishing incomplete rows.
+% \item Fix: \cs{multicolumn} at/bang/before/after specifications, trim,
+% and vertical rules.
+% \item Fix: \pkg{supertabular} and \pkg{xtab} column misalignment.
+% \item Fix: \env{equation*}.
+% \margintag{math}
+% \item Fix: \SVG\ math in a section name.
+% \item Fix: \cs{ref} and \cs{eqref} in \SVG\ math.
+% \item Added \pkg{todonotes} and \pkg{luatodonotes} (but only |disabled|).
+% \margintag{packages}
+% \item Added \pkg{breakurl}.
+% \item \pkg{hyperref}: Fix: Several macros were made robust, \cs{Gauge} added.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.42:] \
+% \begin{itemize}
+% \item Added \TeX\ development support page.
+% (See page \pageref{sec:supportinglatex}.)
+% \margintag{Support \TeX!}
+% \item Improved assitance for word-processor conversions when
+% \margintag{word-processor conversion}
+% boolean |FormatWP| is set |true|.
+% See \cref{sec:wordprocessorconversion}.
+% \begin{itemize}
+% \item \textred{The} \watchout[name change]
+% \textred{boolean |FormatWordProcessor| has
+% been renamed |FormatWP|.}
+% \item \textred{The} \watchout[name change]
+% \textred{boolean |HTMLMarkFloats| has
+% been renamed |WPMarkFloats|.}
+% \item New booleans control whether to place additional
+% marks around minipages, at the table of contents,
+% at the \LOF\ and \LOT, and whether to
+% print math as \LaTeX\ source for copy/paste into the
+% \prog{LibreOffice Writer TeXMaths} extension.
+% \item Improved formatting for numerous objects.
+% See \cref{sec:wordprocessorconversion}.
+% \end{itemize}
+% \item Add: \env{tabbing} environment.
+% \margintag{\env{tabbing}}
+% \item Add: \pkg{overpic} package. See \cref{sec:overpic}.
+% \margintag{\pkg{overpic}}
+% \item Fix: Text copy/paste of \AmS\ math environment numbers and names.
+% \margintag{math}
+% \item Improved \cs{ensuremath}.
+% \item \brand{MathJax} with \pkg{siunitx}: Updated script and documentation.
+% \item \pkg{textcomp}: Improved \cs{textinterrobangdown}.
+% \margintag{symbols}
+% \item \pkg{realscripts}: Fix for subscripts in a \env{lateximage}.
+% \item \pkg{morewrites}: Enforces loading before \pkg{lwarp}.
+% \margintag{load order}
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.41:] \
+% \begin{itemize}
+% \item Added tabular vertical rules, subject to some limitations.
+% \margintag{\env{tabular}}
+% See the rules section of \cref{sec:limitstabular}.
+% \item Improved \pkg{booktabs}: Width and trim are honored.
+% \item Added \cs{mcolrowcell} for empty cells inside a \cs{multicolumnrow}.
+% \watchout[new syntax]
+% \textred{Use \cs{mcolrowcell} instead of \cs{mrowcell} for two-dimensional
+% cells created by \cs{multicolumnrow}.}
+% Continue to use \cs{mrowcell} for empty cells in a \cs{multirow}.
+% See \cref{sec:multicolumnmultirow} on \cpageref{sec:multicolumnmultirow}.
+% \item Fix: Unfinished tabular rows are automatically filled.
+% \item Fix for tabular column specifiers while using \pkg{babel-french}.
+% (\cs{NoAutoSpacing} is activated then nullified inside the tabular,
+% due to a conflict with the tabular column parsing code.)
+% \end{itemize}
+% \item[v0.40:] \
+% \begin{itemize}
+% \item \pkg{graphics} and \pkg{graphicx} have been moved from the
+% \margintag{\pkg{graphics}, \pkg{graphicx}}
+% \pkg{lwarp} core, and are only loaded if requested with \cs{usepackage}.
+% \item Improved \pkg{graphics} \cs{graphicspath} support.
+% \margintag{\cs{includegraphics} path}
+% Multiple image directories may now be used.
+% \textred{Refer to |.pdf| files without a file extension}
+% \watchout[image file extensions]
+% to allow the \HTML\ version
+% to use a |.svg|, |.png|, |.jpg|, or |.gif| version instead.
+% See \cref{sec:limitsgraphics}.
+% \item \pkg{grffile} is now directly supported instead of emulated.
+% \item Fix for \pkg{bigdelim}, and improved documentation.
+% \margintag{\pkg{bigdelim}}
+% See \cref{sec:bigdelim}.
+% \item Improved \LaTeX\ and \pkg{textcomp} symbols.\margintag{\pkg{symbols}}
+% \item Fix for \LaTeX\ logos and \cs{InlineClass}, etc. inside a \env{lateximage}.
+% \margintag{\pkg{fixes}}
+% \item Fix for \pkg{xltxtra} with \XeLaTeX.
+% \item Fixes for \pkg{tocbibind} with \cs{simplechapter}, etc.
+% \item Fixes for \cs{multicolumnrow} and \cs{nullfonts} with older versions
+% of \pkg{multirow} and \pkg{xparse}.
+% \item Added \cs{underline}.
+% \item Added \pkg{adjmulticol}.\margintag{margins}
+% \item Added \pkg{cuted}, \pkg{midfloat}.\margintag{columns}
+% \item Added \pkg{pfnote}, \pkg{fnpos}, \pkg{dblfnote}.\margintag{footnotes}
+% \item Added \pkg{stabular}, \pkg{tabls}.\margintag{tabular}
+% \item Added \pkg{sectsty}, \pkg{anonchap}, \pkg{quotchap}.\margintag{sectioning}
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.39:] \
+% \begin{itemize}
+% \item Improved the titlepage \HTML\ code, \cs{thanks} notes,
+% \margintag{title pages}
+% and \cs{maketitle}.
+% \pkg{titling} is no longer required, but is still supported.
+% The \cs{published} and \cs{subtitle} fields are no longer provided,
+% \watchout[\cs{published} and \cs{subtitle}]
+% but \cs{AddSubtitlePublished} replicates them using \pkg{titling}.
+% See \cref{sec:publishedsubtitle}.
+% \pkg{authblk} is added, and should be loaded before \pkg{titling}.
+% \watchout[load order]
+% See \cref{sec:titles}.
+% \item \cs{multirow} now supports the new optional |vpos| argument.
+% \margintag{tabular}
+% \item Added \cs{multicolumnrow} for combined
+% \margintag{multi column/row cell}
+% \cs{multicolumn} and \cs{multirow}.
+% See \cref{sec:multicolumnmultirow}.
+% \item Tabular special cases:
+% \begin{itemize}
+% \item Added \cs{TabularMacro} to mark custom macros
+% \watchout[macros inside tabular]
+% inside tabular data cells, avoiding row corruption.
+% See \cref{sec:limitstabular}.
+% \item Added \cs{ResumeTabular} for use when a \env{tabular} environment
+% \watchout[tabular defined inside another environment]
+% is defined inside another environment.
+% See \cref{sec:limitstabular}.
+% \end{itemize}
+% \item Added \pkg{supertabular}, \pkg{xtab}, \pkg{bigstrut}, \pkg{bigdelim}.
+% \margintag{tabular}
+% \item Added \pkg{fullwidth}.\margintag{margins}
+% \item Added \pkg{addlines}, \pkg{anysize}, \pkg{a4}, \pkg{a4wide}, \pkg{a5comb},
+% \margintag{page layout}
+% \pkg{textarea}, \pkg{zwpagelayout}, \pkg{typearea}, \pkg{ebook}.
+% \end{itemize}
+% \item[v0.38:] \
+% \begin{itemize}
+% \item Added \cmds{lwarpmk print1} and \cmds{lwarpmk html1} actions to
+% \margintag{forced single-pass compile}
+% force a compile of the project a single time.
+% Useful when multiple passes are not needed,
+% or changes were not detected.
+% \item Added \cs{ForceHTMLPage} and \cs{ForceHTMLTOC} to force
+% \margintag{starred sections}
+% a starred sectional unit onto its own \HTML\ page
+% and with its own \TOC\ entry.
+% See \cref{sec:forcesectionstar}.
+% \item Modified the tutorial to use the new \cs{ForceHTMLPage}
+% \margintag{updated tutorial}
+% and \cs{ForceHTMLTOC} macros.
+% \item Added \pkg{appendix}, \pkg{tocbibind}, \pkg{fncychap}, \pkg{fix2col}.
+% \margintag{packages}
+% \item Added \pkg{relsize}, \pkg{scalefnt}.\margintag{font size}
+% \item Added \pkg{realscripts}, \pkg{metalogo}, \pkg{xltxtra}.
+% \item Added \pkg{grffile}, \pkg{romanbar}.
+% \item Added \pkg{arabicfront}, \pkg{chappg}, \pkg{nonumonpart}, \pkg{nopageno},
+% \margintag{page numbering}
+% \pkg{romanbarpagenumber}.
+% \item Docs: Improved description of the use of front/back matter.
+% \margintag{front \& back matter}
+% See \cref{sec:frontbackmatter}.
+% \item Fix: \pkg{color} requests \pkg{xcolor}.
+% \item Fix: \cs{part} for \pkg{article} class.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.37:] \
+% \begin{itemize}
+% \item \cs{include} now maintains independent |.aux| files
+% \margintag{\cs{include} for \HTML}
+% for \HTML\ versions.
+% \item \pkg{comment}, used by \pkg{lwarp}, now maintains
+% \margintag{\prog{latexmk}}
+% independent cut files for print and \HTML\ versions, helping \prog{latexmk} to
+% better know whether to recompile.
+% \item Improved support for \LaTeX\ accents,
+% \margintag{accents and symbols}
+% \pkg{textcomp}, \pkg{siunitx} symbols.
+% \item Improved \pkg{babel-french} handling for
+% \margintag{\pkg{babel-french}}
+% load order and \textasciitilde\ tilde.
+% \end{itemize}
+% \item[v0.36:] \
+% \begin{itemize}
+% \item Recorganized the documentation section regarding special cases and limitations.
+% (\Cref{sec:limitations})
+% \item Improved source formatting.
+% \item \cs{fbox} and related now use \cs{fboxsep} and \cs{fboxrule}.
+% \margintag{boxes and frames}
+% \item \cs{makebox} and \cs{framebox} now use width and position.
+% \item \cs{fcolorbox} and related now work inside a \env{lateximage}.
+% \item \pkg{babel-french}: Improvements for French variants, load order,
+% \margintag{\pkg{babel-french}}
+% footnotes, ellipses.
+% \item Improved footnote numbering.
+% \margintag{footnotes}
+% \env{lateximage} footnotes now appear as regular footnotes to match
+% the numbering of the print version.
+% Also fixed a regression with \brand{MathJax}.
+% \item Improved \pkg{siunitx} units.
+% \margintag{\pkg{siunitx}}
+% \item Fix for filenames while using \brand{MathJax}.
+% \item Fix for \cs{rule} when \pkg{xcolor} is not loaded.
+% \item Added \pkg{transparent}, \pkg{upref}.
+% \end{itemize}
+% \item[v0.35:] Fix: \cs{textbf} and related.
+% \item[v0.34:] \
+% \begin{itemize}
+% \item \env{BlockClass}'s optional argument has been moved
+% \watchout[Optional arguments]
+% in front of the mandatory argument:
+% \begin{sourcedisplay}
+% |BlockClass[style]{class}| \quad \textrm{(NEW)}
+% \end{sourcedisplay}
+% instead of:
+% \begin{sourcedisplay}
+% |BlockClass{class}[style]| \quad \textrm{(OLD)}
+% \end{sourcedisplay}
+% This change makes it more consistent with \LaTeX\ standards,
+% and avoids problems with space between arguments.
+% \item Likewise, \cs{InlineClass}'s optional argument now
+% \watchout[Optional arguments]
+% comes before the mandatory arguments:
+% \begin{sourcedisplay}
+% |\InlineClass[style]{class}{text}|
+% \end{sourcedisplay}
+% \item Improved compatibility between spans, minipages, lists,
+% \margintag{spans with minipages}
+% frames, and math.
+% Handles minipages and lists inside an \HTML\ span,
+% such as an \cs{fbox} containing a minipage,
+% although with minimal \HTML\ fomatting.
+% See \cref{sec:minipages}.
+% \cs{fboxBlock} is added to frame minipages, tables,
+% \margintag{framing minipages}
+% and lists with full \HTML\ formatting
+% but no longer inline, and behaves as \cs{fbox} for print output.
+% The \env{fminipage} environment is added for framed minipages,
+% as an environment with full \HTML\ formatting,
+% and draws a framed minipage in print output.
+% See \cref{sec:framedminipages}.
+% \cs{fbox} and minipages now often work in \SVG\ math and \env{lateximage}s.
+% \brand{MathJax} supports \cs{fbox}, but not \cs{fboxBlock} nor \env{fminipage}.
+% \item Improved compatibility between \env{lateximage} and
+% \margintag{\env{lateximage}, \SVG\ math, \env{tabular}}
+% \env{minipage}, \cs{parbox}, \cs{makebox}, \cs{fbox}, \cs{framebox},
+% \cs{raisebox}, \cs{scalebox}, \cs{reflectbox}, \env{tabular}, \pkg{booktabs}.
+% \item Improved font control for \env{lateximage}es and \SVG\ math.
+% \item Added the \env{eqnarray} environments.\margintag{\env{eqnarray}}
+% \item \pkg{fancyvrb} is no longer required (preloaded),
+% \margintag{verbatim packages}
+% but is still supported.
+% \item Added \pkg{verbatim} and \pkg{moreverb}.
+% \item Added \pkg{fancybox}, \pkg{boxedminipage2e} and \pkg{shadow}.
+% \margintag{framing packages}
+% \item \pkg{enumitem} is no longer required, but is still supported.
+% \margintag{list packages}
+% \item Added \pkg{enumerate} and \pkg{paralist}.
+% \item \pkg{titleps} is no longer required, but is still supported.
+% \item Added \pkg{crop}.
+% \item Added \pkg{rotfloat}, \pkg{marginfit},
+% and several minor packages; see the change log.
+% \item Adds fixed-width \HTML\ spaces around punctuation
+% \margintag{\pkg{babel-french}}
+% when using \pkg{babel-french}.
+% \LuaTeX\ does not yet use the extra punctuation spacing.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.33:] \
+% \begin{itemize}
+% \item Tabular |@| and |!| columns now havetheir own \HTML\ columns.
+% \item |&| catcode changes are localized, perhaps causing errors
+% about the tab alignment character |&|,
+% so any definitions of macros or environments
+% which themselves contain \env{tabular} and |&| must be enclosed within \cs{StartDefiningTabulars}
+% and \cs{StopDefiningTabulars} (previously called \cs{EndDefiningTabulars}.
+% See \cref{sec:localizingcatcodes}.
+% This change is not required for the routine use of tables,
+% but only when a table is defined inside another macro or environment,
+% and while also using the |&| character inside the definition.
+% This may include the use inside conditional expressions.
+% \item Several math environments were incorrectly placed inline.
+% Also, for \pkg{amsmath} with \SVG\ math, the \optn{fleqn} option has been removed,
+% resulting in improved spacing for aligned equations.
+% \item Bug fixes; see the changelog.
+% \end{itemize}
+% \item[v0.32:] Bug fixes; no source changes needed:
+% \begin{itemize}
+% \item \prog{lwarpmk} has been adjusted to work with the latest \prog{luatex}.
+% \item Spaces in the \cs{usepackage} and \cs{RequirePackage} package lists are now accepted and ignored.
+% \item Fix for the \pkg{glossaries} package and \cs{glo@name}.
+% \end{itemize}
+% \item[v0.31:] Bug fix; no source changes needed:
+% \begin{itemize}
+% \item Improved compatibility with \pkg{keyfloat},
+% including the new \env{keywrap} environment.
+% \end{itemize}
+% \needspace{2\baselineskip}
+% \item[v0.30:] \
+% \begin{itemize}
+% \item \pkg{lwarp-newproject} has been removed, and its functions
+% \watchout[\pkg{lwarp-newproject}]
+% have been combined with \pkg{lwarp}.
+%
+% To modify existing documents, remove from the document source:
+% \begin{sourceverb}
+% \usepackage{lwarp-newproject}
+% \end{sourceverb}
+%
+% The \pkg{lwarp} package now produces the configuration files during
+% print output, and also accepts the option \optn{lwarpmk} if desired.
+%
+% \item A number of macros
+% \watchout[HTML setup changes.]
+% related to \HTML\ settings have been converted to options, and
+% other macros and options have been renamed to create a consistent syntax:
+% \begin{center}
+% \begin{tabular}{cc}
+% \toprule
+% Old Macro & New Package Option \\ \midrule
+% \cs{HomeHTMLFileName} & |HomeHTMLFilename| \\
+% \cs{HTMLFileName} & |HTMLFilename| \\
+% \cs{useLatexmk} & |latexmk| \\
+% \cs{warpOSwindows} & |OSWindows| \\[2.5ex] \toprule
+% Old Package Option & New Package Option \\ \midrule
+% \optn{lwarpmklang} & \optn{xindyLanguage} \\
+% (new) & \optn{xindyStyle} \\[2.5ex] \toprule
+% Old Macro & New Macro \\ \midrule
+% \cs{MetaLanguage} & \cs{HTMLLanguage} \\
+% \cs{HTMLauthor} & \cs{HTMLAuthor} \\
+% \cs{NewHTMLdescription} & \cs{HTMLDescription} \\
+% \cs{SetFirstPageTop} & \cs{HTMLFirstPageTop} \\
+% \cs{SetPageTop} & \cs{HTMLPageTop} \\
+% \cs{SetPageBottom} & \cs{HTMLPageBottom} \\
+% \cs{NewCSS} & \cs{CSSFilename} \\
+% \bottomrule
+% \end{tabular}
+% \end{center}
+%
+% \needspace{2\baselineskip}
+% \item Per the above changes, in existing documents,
+% modify the package load of \pkg{lwarp}, such as:
+% \begin{sourceverb}
+% \usepackage[
+% HomeHTMLFilename=index,
+% HTMLFilename={},
+% xindyLanguage=english
+% ]{lwarp}
+% \end{sourceverb}
+%
+% \item The file |lwarp_html.xdy| has been renamed |lwarp.xdy|.
+% To update each document's project:
+% \begin{enumerate}
+% \item Make the changes shown above.
+% \item Recompile the document in print mode.
+% This updates the project's configuration files, and also generates the
+% new file |lwarp.xdy|.
+% \item The old file |lwarp_html.xdy| may be deleted.
+% \end{enumerate}
+%
+% \item The new \pkg{lwarp} package option \optn{xindyStyle} may be used to tell
+% \prog{lwarpmk} to use a custom |.xdy| file instead of |lwarp.xdy|.
+% See \cref{sec:modifyxindy}.
+%
+% \item Improvements in index processing:
+% \begin{itemize}
+% \item \prog{xindy}'s language is now used for index processing
+% as well as glossary.
+% \item Print mode without \prog{latexmk} now uses \prog{xindy} instead of \prog{makeindex}.
+% \item \prog{texindy}/\prog{xindy} usage depends on \prog{pdflatex} vs \prog{xelatex}, \prog{lualatex}.
+% \item For \prog{pdflatex} and \prog{texindy}, the \optn{-C utf8} option is used. This is
+% supported in modern distributions, but a customized \filenm{lwarpmk.lua} may
+% need to be created for use with older distributions.
+% \end{itemize}
+%
+% \end{itemize}
+%
+% \needspace{2\baselineskip}
+%
+% \item[v0.29:] \
+% \begin{itemize}
+% \item Add: \optn{lwarpmklang} option for \pkg{lwarp-newproject} and \pkg{lwarp}.
+% Sets the language to use while processing the glossary.
+% (As of v0.30, this has been changed to the \optn{IndexLanguage} option.)
+% (As of v0.54, this has been changed to the \optn{xindyLanguage} option.)
+% \item Fix: \cs{includegraphics} when no optional arguments.
+% \end{itemize}
+% \item[v0.28:] \
+% \begin{itemize}
+% \item \cs{HTMLAuthor} \marg{name} assigns \HTML\ meta author if non-empty.
+% Defaults to \cs{theauthor}.
+% \item Booean |HTMLDebugComments| controls whether \HTML\ comments are
+% added for closing \element{div}s, opening and closing sections, etc.
+% \item Boolean |FormatEPUB| changes \HTML\ output for easy \EPUB\ conversion
+% via an external program.
+% Removes per-file headers, footers, and nav. Adds footnotes per chapter/section.
+% \item Boolean |FormatWordProcessor| changes \HTML\ output for easier conversion
+% by a word processor. Removes headers and nav, prints footnotes per section,
+% and also forces single-file output and turns off \HTML\ debug comments.
+% Name changed to |FormatWP| as of v0.42.
+% \item Boolean |HTMLMarkFloats| adds text marks around floats only if the boolean
+% |FormatWordProcessor| is |true|.
+% These make it easier to identify float boundaries,
+% which are to be manually converted to word-processor frames.
+% Name changed to |WPMarkFloats| as of v0.42.
+% \item Updated for the new \brand{MathJax} \acro{CDN} repository.
+% \item Adds \pkg{tabulary}.
+% \item Supports the options syntax for \pkg{graphics}.
+% \item Improved index references, now pointing exactly to their target.
+% \item Adds \pkg{glossaries}.
+% \prog{lwarpmk} is modified to add |printglosssary| and |htmlglossary| actions.
+% \end{itemize}
+%
+% ^^A \needspace{2\baselineskip}
+% ^^A \item[v0.27:] \
+% ^^A \begin{itemize}
+% ^^A \item Improved documentation for \brand{MacOS} install.
+% ^^A \item Fix for \pkg{microtype} with \XeLaTeX\ and \LuaLaTeX.
+% ^^A \item Fix for table footnote paragraph tags.
+% ^^A \item Adds \pkg{lettrine}, \pkg{ulem}, and \pkg{soul}.
+% ^^A \end{itemize}
+% ^^A \needspace{2\baselineskip}
+% ^^A \item[v0.26:] \
+% ^^A \begin{itemize}
+% ^^A \item Improved installation instructions for MiK\TeX\ regarding generating
+% ^^A the \prog{lwarpmk} executable.
+% ^^A \item Footnotes are now supported by \LaTeX\ boxes instead of pagenotes.
+% ^^A \pkg{pagenote} now works as per the print version.
+% ^^A \pkg{footnote}, \pkg{footnotehyper}, \pkg{footmisc}, \pkg{endnotes},
+% ^^A \pkg{marginnote}, and \pkg{sidenotes} are also supported.
+% ^^A \item \LaTeX\ labels now are used to track the page numbers of |lateximage|s.
+% ^^A This allows the correct inclusion of |lateximage|s in footnotes, pagenotes, and endnotes.
+% ^^A \item \pkg{cutwin} and \pkg{floatflt} are also supported.
+% ^^A \end{itemize}
+% ^^A \needspace{2\baselineskip}
+% ^^A \item[v0.25:] \
+% ^^A \begin{itemize}
+% ^^A \item Fix: Allows \pkg{graphicx} and \pkg{graphicx} before \pkg{lwarp} because
+% ^^A \XeLaTeX\ and \LuaLaTeX\ use \pkg{xunicode} which uses \pkg{graphics}.
+% ^^A \item Package support for \pkg{framed}, several theorem packages, and ellipses.
+% ^^A \end{itemize}
+% ^^A \needspace{2\baselineskip}
+% ^^A \item[v0.24:] \
+% ^^A \begin{itemize}
+% ^^A \item \pkg{tikz}'s |babel| library is load automatically as needed.
+% ^^A \item \pkg{subfig} has been added, along with |lofdepth| and |lotdepth|.
+% ^^A \item \env{picture} and \env{tikzpicture} now may be inline.
+% ^^A \end{itemize}
+% ^^A \needspace{2\baselineskip}
+% ^^A \item[v0.22:] \
+% ^^A \begin{itemize}
+% ^^A \item Support has been added for tabular column types |D|, |!|, and |X|.
+% ^^A Unknown column types are converted to |l|.
+% ^^A \item Additional packages are supported, including \pkg{abstract},
+% ^^A \pkg{dcolumn}, \pkg{tabularx}, and \pkg{varioref}.
+% ^^A \end{itemize}
+% ^^A \item[v0.21:] \
+% ^^A \begin{itemize}
+% ^^A \item Documentation for installing on \brand{Windows} has been updated and improved.
+% ^^A \item For \brand{Windows} compatibility, the |lateximages| shell script
+% ^^A has been replaced with a |lateximages.txt| file, which is parsed
+% ^^A by \prog{lwarpmk} to generate lateximages.
+% ^^A This does not require any changes in the user's code.
+% ^^A \item \brand{Windows} \cmds{lwarpmk again} now functions.
+% ^^A \item For improved error handling, \pkg{lwarp} now verifies the
+% ^^A order in which packages are loaded, and signals an error for misplaced packages.
+% ^^A \pkg{inputenc}, \pkg{fontenc}, \pkg{newunicode}, and \pkg{fontspec}
+% ^^A must be loaded before \pkg{lwarp}, and the other packages which
+% ^^A \pkg{lwarp} knows about must be loaded after.
+% ^^A \item \pkg{lwarp} no longer requires a \cs{title} be assigned.
+% ^^A \end{itemize}
+% ^^A \item[v0.20:] \
+% ^^A \begin{itemize}
+% ^^A \item The |makefile| and related infrastructure
+% ^^A has been replaced by the \prog{lwarpmk} utility.
+% ^^A This provides increased portability, reduced dependencies,
+% ^^A and much simpler installation and setup.
+% ^^A \item The |lwarp-newproject| package is now used to locally create
+% ^^A support files.
+% ^^A \item The print and \HTML\ versions of a document may co-exist with their
+% ^^A own sets of auxiliary files.
+% ^^A \item Package handling is now controlled by a modular system which
+% ^^A looks for and loads an |lwarp-<package>| version if available.
+% ^^A \item High-level source compatibility is provided for all supported
+% ^^A packages, almost totally eliminating the need
+% ^^A for |warpprint| and |warpHTML| environments.
+% ^^A \item A large number of additional packages are supported.
+% ^^A \item A new tutorial is included in the documentation, and
+% ^^A many obsolete sections have been removed.
+% ^^A \item \cs{NewHTMLdescription} sets the \HTML\ meta description tag for each file.
+% ^^A See \cref{sec:htmldescription}. (v0.30 changes this to \cs{HTMLDescription}.)
+% ^^A \item \cs{HTMLFilename} may now be empty, allowing filenames without a prefix.
+% ^^A Lwarp no longer automatically appends a |-| character.
+% ^^A \watchout
+% ^^A For existing projects, add a |-| to the end of \cs{HTMLFilename}.
+% ^^A \item \cs{HomeHTMLFilename} and \cs{HTMLFilename} no longer use
+% ^^A escaped underscore\watchout\
+% ^^A characters. Underscores may be used in filenames as-is.
+% ^^A (Version 0.30 changes these to package options |HomeHTMLFilename| and
+% ^^A |HTMLFilename|.)
+% ^^A \item \pkg{lwarp} now tries to auto-detect the operating system,
+% ^^A and \cs{warpOSwindows} is only needed if the auto-detection
+% ^^A fails to detect \brand{Windows}. (As of v0.30, \cs{warpOSwindows} has been converted to
+% ^^A the \optn{OSWindows} option.)
+% ^^A \item Tabular column types |@|, |>|, and |<| are now supported.
+% ^^A \item |BlockClass| and \cs{InlineClass} add an optional style.
+% ^^A \item The |sidebar| and |example| environments have been moved to the
+% ^^A test suite, and are no longer included in \pkg{lwarp}.
+% ^^A \end{itemize}
+% ^^A \needspace{2\baselineskip}
+% ^^A \item[v0.19:] \
+% ^^A \begin{itemize}
+% ^^A \item \brand{MathJax} now may be used to display math via the \optn{mathjax} option.
+% ^^A See \cref{sec:loading,sec:limitsmath}.
+% ^^A To use \brand{MathJax} with a pre-existing project,
+% ^^A \watchout
+% ^^A copy or link the file |lwarp_mathjax.txt| to the project's directory.
+% ^^A \item \cs{rule} added, supporting width, height, raise, \cs{textcolor}.
+% ^^A \item \cs{LateximageFontSizeName} provides user-adjustable font size for math
+% ^^A and \env{lateximage}s.
+% ^^A \item \cs{minipagefullwidth} requests that the next minipage be
+% ^^A full-width in \HTML, but still the assigned width in print.
+% ^^A \item \env{minipage} improved side-by-side rendering.
+% ^^A \item \CSS\ class |tablenotes| is provided for table note items.
+% ^^A \item \cs{warpprintonly} replaces \cs{rowprintedonly},
+% ^^A and \cs{warpHTMLonly} is added. These behave like the \env{warpprint}
+% ^^A \watchout
+% ^^A and \env{warpHTML} environments, and are generally useful, so they replace
+% ^^A the previously table-specific syntax.
+% ^^A \item \pkg{cleveref} is loaded \cs{AtEndPreamble} for improved reliability.
+% ^^A See \cref{sec:cleveref}.
+% ^^A \item \cs{xfracHTMLfontsize} controls \pkg{xfrac} font size in \HTML.
+% ^^A \item \tikz\ improved catcode handling.
+% ^^A \end{itemize}
+% ^^A \item[v0.18:] \
+% ^^A \begin{itemize}
+% ^^A \item The \pkg{verse} package and the verse-related commands from
+% ^^A the \pkg{memoir} package are now supported.
+% ^^A \item Responsive web design has been improved for the side\TOC.
+% ^^A \item \cs{includegraphics} now maintains relative sized for em, ex, and \%.
+% ^^A \end{itemize}
+% ^^A \item[v0.17:] \
+% ^^A \begin{itemize}
+% ^^A \item \pkg{mdframed} package is supported.
+% ^^A \end{itemize}
+% ^^A \item[v0.16:] \
+% ^^A \begin{itemize}
+% ^^A \item Font and input encoding are now controlled by the user, and
+% ^^A \pkg{lwarp} is loaded after fonts have been selected.
+% ^^A \item Support for \XeLaTeX{} and \LuaLaTeX. See \cref{sec:fonts}.
+% ^^A \end{itemize}
+% \end{description}
+%
+% \clearpage
+%
+% \section{Introduction}
+% \label{sec:introduction}
+% \changes{v0.19}{2016/05/25}{Introduction: \brand{MathJax} support mentioned.}
+%
+% The \pkg{lwarp} project aims to allow a rich \LaTeX{} document
+% to be converted to a reasonable \HTMLfive\
+% interpretation, with only minor intervention on the user's part.
+% No attempt has been made to force \LaTeX{} to provide for every
+% \HTML-related possibility, and \HTML\ cannot exactly render every possible \LaTeX{} concept.
+% Where compromise is necessary, it is desirable to allow the print output to remain
+% typographically rich, and compromise only in the \HTML\ conversion.
+%
+% Several ``modern'' features of \HTMLfive, \CSSthree, and \SVG\
+% are employed to allow a fairly feature-rich document
+% without relying on the use of \brand{Javascript}.
+% Limited testing on older browsers shows that these new features
+% degrade gracefully.
+%
+% \rulebreak
+%
+% \pkg{lwarp} is a native \LaTeX\ package, and operates by either patching or
+% emulating various functions. Source-level compatibility is a major goal, but
+% occasional user intervention is required in certain cases.
+%
+% As a package running directly in \LaTeX, \pkg{lwarp} has some advantages over
+% other methods of \HTML\ conversion. \TeX\ itself is still used, allowing a
+% wider range of \TeX\ trickery to be understood.
+% Lua expressions are still available with \LuaTeX.
+% Entire categories of
+% \LaTeX\ packages work as-is when used with \pkg{lwarp}:
+% definitions, file handling, utilities, internal data structures and calculations,
+% specialized math-mode typesetting for various fields of science and engineering,
+% and anything generating plain-text output.
+% Blocks of \PDF\ output may be automatically converted to \SVG\ images
+% while using the same font and spacing as the original print document,
+% directly supporting \tikz\ and \env{picture}.
+% Numerous packages are easily adapted for \HTML\ versions, either
+% by loading and patching the originals, or by creating nullified or emulated
+% replacements, and all without resorting to external programming.
+% As a result, several hundred packages have already been adapted (\cref{tab:supported}), and
+% an uncounted number more work as-is.
+%
+% Packages have been selected according to several criteria: perceived importance,
+% popularity lists, recent CTAN updates, CTAN topics, mention in other packages,
+% support by other \HTML\ conversion methods,
+% and from sample documents taken from public archives.
+% These include some ``obsolete'' packages as well.\footnote{An amazing number of
+% decades-old packages are still in use today.}
+%
+% \rulebreak
+%
+% Assistance is also provided for modifying the \HTML\ output to suit the creation
+% of \EPUB\ documents, and for modifying the \HTML\ output to ease import into
+% a word processor.
+%
+% \rulebreak
+%
+% \prog{pdflatex}, \prog{xelatex}, or \prog{lualatex} may be used,
+% allowing \pkg{lwarp} to process the usual image formats.
+% While generating \HTML\ output, \SVG\ files are used in place of \PDF.
+% Other formats such as \PNG\ and \JPG\ are used as-is.
+%
+% SVG images may be used for math,
+% and are also used for \env{picture}, \tikz, and similar environments.
+% The \SVG\ format has better browser and e-book support
+% than \MathML\ (as of this writing),
+% while still allowing for high-quality display and printing of images
+% (again, subject to potentially
+% bug-ridden\footnote{\brand{Firefox} has had an on-again/off-again bug
+% for quite some time regareding printing \SVG{}s at high resolution.} browser
+% support).
+%
+% Furthermore, \SVG\ images allow math to be presented with
+% the same precise formatting as in the print version.
+% Math is accompanied by \element{alt} tags holding the \LaTeX{} source for the expression, allowing it to be
+% copy/pasted into other documents.\footnote{There seems to be some debate as to whether
+% \MathML\ is actually an improvement over \LaTeX{} for sharing math. The author has no
+% particular opinion on the matter, except to say that in this case \LaTeX{} is much easier to implement!}
+% Custom \LaTeX{} macros may be used as-is in math expressions, since the math is evaluated
+% entirely inside \LaTeX.
+% An MD5 hash is used to combine multiple instances of the same inline math expression
+% into a single image file, which then needs to be converted to \SVG\ only a single time.
+%
+% The \brand{MathJax} JavaScript display engine may be selected
+% for math display instead of using \SVG\ images.
+% Subject to browser support and Internet access,
+% \brand{MathJax} allows an \HTML\ page to display
+% math without relying on a large number of
+% external image files.\footnote{One \SVG\ image
+% file per math expression, except that duplicate inline math expressions are combined
+% into a single file according to the MD5 hash function of its contents.
+% A common scientific paper can easily include several thousand files,
+% and in one case the MD5 hash cut the number of files in half and the rendering
+% time by 30\%.}
+% \pkg{lwarp} maintains \LaTeX\ control for cross-referencing
+% and equation numbering, and attempts to force \brand{MathJax} to tag equations accordingly.
+%
+% \rulebreak
+%
+% A \prog{texlua} program called \prog{lwarpmk} is used to process either the print or \HTML\
+% version of the document. A few external utility programs are used to finish
+% the conversion from a \LaTeX{}-generated \PDF\ file which happens to have \HTMLfive\ tags,
+% to a number of \HTMLfive\ plain-text files and accompanying images.
+%
+% \pkg{lwarp} automatically generates the extra files necessary for
+% the \HTML\ conversion, such as \CSS\ and |.xdy| files, and configuration files
+% for the utility \prog{lwarpmk}.
+% Also included is a parallel version of the user's source document,
+% |<sourcename>-html.tex|, which selects \HTML\ output and then inputs the user's own source.
+% This process allows both the printed and \HTML\ versions to co-exist side-by-side,
+% each with their own auxiliary files.
+%
+% When requesting packages during \HTML\ conversion,
+% \pkg{lwarp} first looks to see if it has its own modified version
+% to use instead of the standard \LaTeX\ version.
+% These |lwarp-packagename.sty| files contain
+% code used to emulate or replace functions for \HTML\ output.
+%
+%
+% \clearpage
+%
+% \subsection{Typesetting conventions}
+%
+% Font weight, family, and style are used to indicate various objects:
+%
+% \begin{table}[hbp]
+% \caption{Typesetting conventions}
+% \centering
+% \begin{tabular}{lp{3in}}
+% \toprule
+% \pkg{package} & \LaTeX\ package. \\
+% \prog{program} & Program's executable name. \\
+% \optn{option} & Program or package option. \\
+% \midrule
+% \filenm{filename} & File name in the operating system. \\
+% \brand{Brand Name} & Proper name for a program, operating system, etc. \\
+% \midrule
+% \cmds{commands} & Commands to be entered by the user. \\
+% \progcode{code} & Program code. \\
+% \cs{macroname} & \LaTeX\ macro. \\
+% \env{environment} & \LaTeX\ environment. \\
+% \ctr{counter} & \LaTeX\ counter. \\
+% \bool{boolean} & \LaTeX\ boolean. \\
+% \midrule
+% \element{element} & \HTML\ element. \\
+% \attribute{attribute} & \HTML\ attribute. \\
+% \midrule
+% \UI{User Interface} & A user-interface item. \\
+% \acro{ACRO} & Acronym. \\
+% \bottomrule
+% \end{tabular}
+% \end{table}
+%
+% \clearpage
+%
+% \subsection{Supported packages and features}
+%
+% \changes{v0.15}{2016/04/05}{Docs: Moved the supported features table to the introduction.}
+% \changes{v0.38}{2017/08/22}{Docs: Enhanced \protect\textit{Supported Features} table.}
+%
+% \Cref{tab:supported} lists some of the various \LaTeX{} features and packages
+% which may be used.
+%
+% Package names are colored according to their support level:
+% \begin{description}
+% \item[\spkg{name}:] Supported as-is.
+% \item[\mpkg{name}:] Modifed to work with \HTML\ output, and also
+% as print output in \SVG\ math or \env{lateximage} environments.
+% \item[\epkg{name}:] Emulated for \HTML\ output.
+% \item[\ipkg{name}:] Ignored for \HTML\ output, but provides source-level compatibility.
+% \end{description}
+%
+% \renewcommand{\arraystretch}{1.5}
+%
+% \begingroup
+% \setlength{\parindent}{0em}
+% \setlength{\parskip}{2ex}
+%
+% ^^A *supported features
+%
+% \begin{longtable}{>{\raggedright}p{.3\linewidth}p{.6\linewidth}}
+% \caption{\LaTeX\ \pkg{lwarp} package --- Supported features\label{tab:supported}} \endfirsthead
+% \warpprintonly{\multicolumn{2}{c}{\pkg{lwarp} Supported Functions --- continued} \\
+% Category & Status \\ \toprule \endhead}
+%
+% \toprule
+%
+% Category & Status and supported features. \\
+%
+% \midrule
+%
+% Engines: & \DVI\ \LaTeX, pdf\LaTeX, \XeLaTeX, \LuaLaTeX, up\LaTeX \\
+%
+% Compiling: & \prog{latexmk}, \prog{perltex}, \prog{pythontex}, \prog{make}, etc. \\
+%
+% \midrule
+%
+% Classes: & \pkg{article}, \pkg{book}, \pkg{report},
+% \pkg{scrartcl}, \pkg{scrbook}, \pkg{scrreprt}, \pkg{memoir},
+% CJK-related as listed below. \\
+%
+% Koma-script: & \epkg{scrextend}, \ipkg{scrhack}, \epkg{scrlayer}.
+% Others as listed below. \\
+%
+% Memoir: & \ipkg{memhfixc} \\
+%
+% \midrule
+%
+% Languages: & \spkg{babel}, \spkg{polyglossia}.
+% \spkg{cjkpunct}, \spkg{xeCJK}.\\
+%
+% Chinese: & C\TeX, \spkg{ctex},
+% \spkg{upzhkinsoku},
+% \mpkg{xpinyin}, \ipkg{zhlineskip}, \spkg{zhspacing}. \\
+%
+% Japanese: & up\LaTeX, Lua\TeX-ja, \ipkg{gentombow}, \mpkg{lltjext},
+% \spkg{plarray}, \epkg{plarydshln}, \spkg{plautopatch},
+% \mpkg{plext}, \spkg{plextarray}, \epkg{plextarydshln},
+% \epkg{plextcolortbl}, \spkg{plextdelarray}, \ipkg{pxatbegshi},
+% \ipkg{pxeveryshi}, \ipkg{pxftnright}, \spkg{pxgentombow},
+% \ipkg{pxjahyper}, \spkg{pxpdfpages}, \spkg{pxpgfrcs}, \spkg{pxpgfmark},
+% \epkg{tascmac}, \spkg{zxjatype}.
+% \spkg{bxjsarticle} and related,
+% \spkg{ltjsarticle} and related,
+% \spkg{luatexja}, \spkg{luatexja-fontspec},
+% \spkg{ujarticle} and related,
+% \spkg{utarticle} and related. \\
+%
+% Korean: & \spkg{kotex}, \spkg{luatexko}, \spkg{xetexko}. \\
+%
+% \midrule
+%
+% Page layout: & \ipkg{2in1}, \ipkg{2up}, \ipkg{a4}, \ipkg{a4wide}, \ipkg{a5comb},
+% \ipkg{addlines}, \ipkg{anysize}, \mpkg{atbegshi},
+% \ipkg{blowup}, \ipkg{booklet}, \ipkg{bophook}, \ipkg{bounddvi}, \ipkg{bxpapersize},
+% \ipkg{canoniclayout}, \mpkg{changelayout},
+% \epkg{changepage}, \ipkg{chngpage}, \ipkg{clrdblpg},
+% \ipkg{continue}, \ipkg{draftcopy}, \ipkg{draftfigure}, \ipkg{draftwatermark},
+% \ipkg{ebook}, \ipkg{everyshi},
+% \mpkg{fancyhdr}, \ipkg{fancytabs}, \ipkg{flippdf},
+% \ipkg{fullminipage}, \ipkg{fullpage},
+% \ipkg{fwlw}, \ipkg{geometry}, \ipkg{gmeometric},
+% \ipkg{grid}, \mpkg{grid-system}, \ipkg{gridset},
+% \ipkg{layaureo}, \ipkg{layout}, \ipkg{layouts}, \ipkg{leading},
+% \ipkg{ltxgrid}, \ipkg{nccfancyhdr}, \ipkg{notespages}, \ipkg{nowidow},
+% \ipkg{pagegrid}, \ipkg{pagesel}, \ipkg{pdfcrypt}, \ipkg{pdfprivacy},
+% \ipkg{preview}, \epkg{ragged2e}, \ipkg{rmpage},
+% \epkg{scrlayer-scrpage}, \epkg{scrpage2}, \epkg{setspace},
+% \ipkg{textarea}, \ipkg{threadcol},
+% \ipkg{thumb}, \ipkg{thumbs}, \ipkg{titleps}, \ipkg{tocenter},
+% \ipkg{turnthepage}, \ipkg{twoup}, \ipkg{typearea},
+% \ipkg{underlin}, \ipkg{vmargin},
+% \ipkg{watermark}, \ipkg{widows-and-orphans}, \ipkg{zwpagelayout}.
+% \\
+%
+% \midrule
+%
+% Sectioning: & Adds \progcode{FileDepth} for splitting the \HTML\ output.
+% Files may be numbered sequentially or named according to section name.
+% Common short words and punctuation are removed from the filenames.
+% \epkg{anonchap}, \ipkg{bsheaders}, \ipkg{fncychap}, \epkg{hypbmsec},
+% \epkg{indentfirst}, \epkg{quotchap},
+% \ipkg{section}, \mpkg{sectionbreak}, \spkg{secdot}, \ipkg{sectsty}, \ipkg{titlesec}.
+% \\
+%
+% Table of contents, figures, tables: & Supported, with hyperlinks.
+% \ipkg{minitoc}, \ipkg{multitoc}, \spkg{shorttoc}, \ipkg{titletoc},
+% \ipkg{tocbasic}, \mpkg{tocbibind}, \mpkg{tocdata},
+% \ipkg{tocloft}, \ipkg{tocstyle}. \\
+%
+% Title page: & \cs{maketitle}, \env{titlepage}, \mpkg{authblk}, \mpkg{titling}. \\
+%
+% Front \&\ back matter: & \mpkg{abstract}, \mpkg{appendix}. \\
+%
+% Indexing: & \prog{makeindex} and \prog{xindy} are supported, with hyperlinks.
+%
+% \spkg{hvindex}, \epkg{idxlayout}, \mpkg{imakeidx}, \epkg{index}, \mpkg{makeidx},
+% \epkg{repeatindex}, \mpkg{splitidx}.
+% \\
+%
+% Glossary: & \mpkg{gloss}, \mpkg{glossaries} and \prog{xindy}, \mpkg{nomencl}.\\
+%
+% Bibliography: & \spkg{babelbib}, \mpkg{backref}, \mpkg{biblatex}, \mpkg{bibunits},
+% \mpkg{chapterbib}, \mpkg{cite}, \ipkg{hypernat}, \mpkg{natbib},
+% \spkg{notes2bib}, \ipkg{showtags}.
+%
+% \\
+%
+% \midrule
+%
+% Cross-references: &
+% \ipkg{bookmark}, \epkg{breakurl}, \spkg{cleveref}, \epkg{fancyref},
+% \ipkg{hypdestopt}, \epkg{hyperref}, \epkg{perpage}, \mpkg{prettyref},
+% \epkg{titleref}, \mpkg{url}, \spkg{varioref}, \mpkg{xr}, \mpkg{xr-hyper},
+% \ipkg{xurl}. \\
+%
+% \midrule
+%
+% Margin notes: & \ipkg{marginal}, \ipkg{marginfit}, \ipkg{marginfix},
+% \epkg{scrlayer-notecolumn}, \epkg{versonotes}. \\
+%
+% Footnotes: & Adds \progcode{FootnoteDepth} to print footnotes at section breaks.
+% \epkg{bigfoot}, \ipkg{dblfnote},
+% \ipkg{endheads}, \mpkg{endnotes}, \spkg{fixfoot},
+% \ipkg{fnbreak}, \ipkg{fnpara}, \ipkg{fnpos},
+% \epkg{footmisc}, \mpkg{footnote}, \ipkg{footnotebackref},
+% \mpkg{footnoterange}, \ipkg{footnpag}, \epkg{manyfoot},
+% \epkg{marginnote}, \spkg{nccfoots}, \spkg{pagenote},
+% \mpkg{parnotes}, \ipkg{pfnote}, \spkg{sepfootnotes},
+% \mpkg{sidenotes}, \ipkg{tablefootnote}.
+% \\
+%
+% \midrule
+%
+% Math: & Converted to \SVG\ images with \HTML\ \element{alt} tags containing the
+% \LaTeX\ source for the math expression.
+% \brand{MathJax} supported as an alternative.
+% \mpkg{amsmath}: \AmS\ environments are supported.
+% User-defined macros are available during converson,
+% due to native \LaTeX\ processing.\\
+%
+% Theorems: & Native \LaTeX\ theorems,
+% \mpkg{amsthm}, \mpkg{ntheorem}, \mpkg{theorem}. \\
+%
+% Additional math: & Math fonts via \SVG\ images,
+% \spkg{amscd}, \ipkg{autonum}, \mpkg{backnaur}, \spkg{bm}, \spkg{braket},
+% \mpkg{breqn}, \mpkg{cases}, \spkg{delarray}, \spkg{guass}, \spkg{jkmath},
+% \mpkg{mathtools}, \spkg{nicematrix}, \spkg{pb-diagram}, \ipkg{resizegather},
+% \mpkg{xfakebold}, \mpkg{xy}.
+% Many others work as-is. \\
+%
+% Display math with \cs{displaymathother}: & %
+% Complicated math objects in display math, such as \spkg{tikz-cd}, etc. \\
+%
+% \midrule
+%
+% Units and fractions: &
+% \mpkg{nicefrac}, \mpkg{SIunits}, \mpkg{siunitx},
+% \mpkg{units}, \mpkg{unitsdef}, \mpkg{xfrac}. \\
+%
+% \midrule
+%
+% Floats: & Appear where declared.
+% \spkg{capt-of}, \mpkg{caption}, \epkg{cutwin},
+% \ipkg{dblfloatfix}, \ipkg{endfloat}, \ipkg{fix2col}, \ipkg{flafter},
+% \epkg{float}, \epkg{floatflt}, \epkg{floatrow}, \ipkg{fltrace}, \ipkg{ftcap},
+% \ipkg{hypcap}, \mpkg{keyfloat}, \ipkg{morefloats}, \ipkg{multicap}, \spkg{newfloat},
+% \epkg{nonfloat}, \ipkg{placeins}, \epkg{rotfloat}, \ipkg{stfloats},
+% \mpkg{subcaption}, \mpkg{subfig}, \epkg{subfigure}, \spkg{subfloat},
+% \epkg{topcapt}, \epkg{trivfloat}, \epkg{wrapfig}. \\
+%
+% \midrule
+%
+% Tabular: &
+% \env{tabular} environment, \mpkg{array}, \epkg{arydshln},
+% \mpkg{bigdelim}, \mpkg{booktabs},
+% \mpkg{colortbl}, \mpkg{ctable}, \mpkg{diagbox}, \epkg{longtable},
+% \epkg{ltablex}, \epkg{ltxtable},
+% \mpkg{multirow}, \epkg{supertabular}, \epkg{tabularx}, \epkg{tabulary},
+% \epkg{threeparttable}, \mpkg{threeparttablex}, \epkg{xltabular}, \epkg{xtab}. \\
+%
+% \midrule
+%
+% Graphics: & \mpkg{graphics} and \epkg{graphicx}.
+% \cs{includegraphics} supports \optn{width}, \optn{height},
+% \optn{origin}, \optn{angle}, and \optn{scale} tags, and adds \optn{class}.
+% References to \PDF\ files are changed to \SVG, other image types
+% are accepted as well.
+% \cs{rotatebox} and \cs{scalebox} are supported as well as \HTML\ can handle.
+% \epkg{rotating} is emulated but all objects are unrotated.
+% \env{picture}, \mpkg{tikz}, and \mpkg{xy} are converted to an \SVG\ image.
+%
+% \mpkg{asymptote}, \spkg{curves}, \spkg{datatool},
+% \spkg{eepic}, \epkg{epsfig}, \spkg{epstopdf},
+% \epkg{figsize}, \ipkg{fitbox},
+% \spkg{grffile}, \epkg{media9}, \epkg{movie15}, \epkg{multimedia}, \mpkg{overpic},
+% \mpkg{psfrag}, \mpkg{psfragx}, \mpkg{pst-eps}, \mpkg{pstool}, \mpkg{pstricks},
+% \spkg{rviewport}, \spkg{tikz-3dplot}. \\
+%
+% \midrule
+%
+% \mpkg{xcolor}: & \textcolor{DarkGreen}{Full package color names}, any color models,
+% and \textcolor{Goldenrod}{mixing}.
+% \textcolor{Maroon}{\cs{textcolor}},
+% \colorbox{LightSteelBlue}{\cs{colorbox}},
+% \fcolorbox{red}{NavajoWhite}{\cs{fcolorbox}}.
+% Enhanced for \HTML\ compatibility. \\
+%
+% \midrule
+%
+% Lists: & Standard \LaTeX\ environments,
+% \spkg{enumerate}, \mpkg{enumitem}, \epkg{eqlist}, \epkg{hang},
+% \ipkg{listliketab}, \mpkg{paralist}.\\
+%
+% \midrule
+%
+% Environments: & Standard \LaTeX{} environments. \\
+%
+% \env{minipage}, \cs{parbox}: & Some \HTMLfive-imposed limitations.
+% Nested minipages are supported. \mpkg{eqparbox}, \mpkg{minibox}, \epkg{pbox},
+% \ipkg{shapepar}. \\
+%
+% Quotations: & \epkg{copyrightbox}, \spkg{csquotes}, \epkg{epigraph},
+% \mpkg{quoting}, \mpkg{verse}. \\
+%
+% Verbatim: &
+% \mpkg{fancyvrb}, \mpkg{moreverb}, \spkg{shortvrb}, \mpkg{verbatim}. \\
+%
+% Frames: & \mpkg{boxedminipage2e}, \mpkg{fancybox}, \mpkg{framed}, \mpkg{mdframed},
+% \epkg{niceframe}, \epkg{shadow}, \epkg{vertbars}. \\
+%
+% Multi-columns: & \epkg{adjmulticol}, \epkg{multicol},
+% \ipkg{multicolrule}, \mpkg{vwcol}. \\
+%
+% Margins: & \epkg{fullwidth}, \epkg{hanging}, \epkg{midpage}. \\
+%
+% Line numbering: & \ipkg{fnlineno}, \ipkg{lineno}. \\
+%
+% \midrule
+%
+% Direct formatting: & \cs{emph}, \cs{textsuperscript},
+% \cs{textbf}, etc are supported.
+% \cs{bfseries}, etc.\ are only supported in some cases.
+% \mpkg{cancel}, \epkg{ellipsis}, \mpkg{embrac}, \spkg{enparen},
+% \ipkg{hyphenat}, \epkg{lettrine}, \epkg{lips},
+% \ipkg{lua-check-hyphen}, \ipkg{luacolor},
+% \epkg{magaz}, \ipkg{pdfrender}, \epkg{realscripts}, \mpkg{relsize},
+% \ipkg{scalefnt}, \epkg{soul}, \epkg{soulpos}, \epkg{soulutf8}, \mpkg{stackengine},
+% \epkg{textfit}, \epkg{thinsp}, \ipkg{trimclip}, \ipkg{truncate},
+% \mpkg{ulem}, \mpkg{umoline}, \ipkg{underscore}, \ipkg{uspace},
+% \mpkg{xellipsis}. \\
+%
+% Acronyms: & \mpkg{acro}, \mpkg{acronym}. \\
+%
+% Ordinals: & \spkg{engord}, \spkg{fmtcount}, \spkg{nth}. \\
+%
+% Text ligatures: & Ligatures for symbols are supported.
+% Ligatures for f, q, t are intentionally turned off
+% because many simpler browsers do not display them correctly.
+% Modern full-featured browsers re-create these ligatures on-the-fly.\\
+%
+% Horizontal space: &
+% \HTML\ output for thin-unbreakable, unbreakable,
+% \cs{enskip}, \cs{quad}, \cs{qquad}, \cs{hspace}. \\
+%
+% Rules: & \cs{rule} with width, height, raise, text color. \\
+%
+% \HTML\ reserved characters: & \cs{\&}, \cs{textless}, and
+% \cs{textgreater} are converted to \HTML\ entities. \\
+%
+% \midrule
+%
+% Fonts: & Used as-is.
+% Appear in \SVG\ math expressions or embedded image environments.
+% \mpkg{fontaxes}, \mpkg{nfssext-cfr}, \mpkg{slantsc}, \ipkg{tabfigures}.
+%
+% Tested to work as-is: Special font macros in \spkg{cfr-lm} and others
+% which use \spkg{nfssext-cfr}. \\
+%
+% Symbols: & Native \LaTeX\ diacriticals, \mpkg{academicons}, \mpkg{bbding},
+% \mpkg{chemgreek}, \mpkg{dingbat}, \spkg{euro}, \mpkg{eurosym},
+% \mpkg{fontawesome}, \mpkg{fontawesome5}, \spkg{gensymb}, \mpkg{marvosym},
+% \mpkg{metalogo}, \mpkg{metalogox},
+% \mpkg{pifont}, \spkg{textalpha},
+% \mpkg{textcomp}, \spkg{textgreek}, \mpkg{typicons}, \mpkg{xunicode}.
+% \\
+%
+% \midrule
+%
+% Files: &
+% \mpkg{attachfile}, \mpkg{attachfile2}, \ipkg{hyperxmp},
+% \mpkg{inputtrc}, \epkg{intopdf},
+% \mpkg{pdfpages}, \ipkg{pdfx}, \ipkg{xmpincl}. \\
+%
+% \midrule
+%
+% Science and engineering: &
+% \mpkg{algorithm2e}, \mpkg{algorithmicx}, \mpkg{ar}, \spkg{askmaps},
+% \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{elements}, \spkg{engtlc}, \spkg{fast-diagram},
+% \spkg{hepnicenames}, \spkg{heppennames}, \spkg{karnaughmap}, \mpkg{karnaugh-map},
+% \mpkg{listings}, \spkg{linop}, \mpkg{mhchem}, \spkg{pgfgantt},
+% \mpkg{phfqit}, \spkg{physics}, \spkg{qcircuit}, \mpkg{register}, \spkg{simpler-wick},
+% \spkg{slashed}, \spkg{structmech}, \mpkg{struktex}.
+% \spkg{tikz-karnaugh}, \spkg{tikzcodeblocks} \\
+%
+% \midrule
+%
+% Arts and humanities: & \mpkg{foreign}, \mpkg{forest},
+% \mpkg{lyluatex}, \mpkg{musicography},
+% \mpkg{nameauth}, \mpkg{octave}, \spkg{phonrule}, \spkg{piano},
+% \mpkg{schemata}, \mpkg{semantic-markup}, \spkg{tikz-dependency},
+% \mpkg{vowel}, \mpkg{xpiano} \\
+%
+% \midrule
+%
+% Admonitions: & \epkg{notes}. \\
+%
+% Editorial: & \ipkg{changebar}, \spkg{changelog}, \mpkg{changes},
+% \mpkg{easy-todo}, \spkg{easyReview}, \mpkg{ed}, \mpkg{errata}, \mpkg{fixme},
+% \mpkg{fixmetodonotes},
+% \ipkg{pdfcomment}, \ipkg{pdfmarginpar},
+% \mpkg{todo}, \mpkg{todonotes}, \epkg{tram}, \ipkg{xechangebar}.
+% \\
+%
+% \midrule
+%
+% Accessibility: & \ipkg{accsupp}, \ipkg{axessibility}. \\
+%
+% \midrule
+%
+% Debug: & \ipkg{chkfloat}, \ipkg{cmdtrack}, \ipkg{dprogress},
+% \ipkg{lua-visual-debug}, \ipkg{refcheck},
+% \ipkg{srcltx}, \ipkg{srctex}, \ipkg{vpe}, \ipkg{xbmks}. \\
+%
+% \midrule
+%
+% Working as-is: &
+% Various utility, calculation, file, and text-only packages, such as
+% \spkg{calc},
+% \spkg{fileerr},
+% \spkg{somedefs},
+% \spkg{trace},
+% \spkg{xspace}.
+% Also, most math-only packages, including specialized typesetting for
+% various fields of science and engineering. \\
+%
+% \bottomrule
+%
+% \end{longtable}
+%
+% \endgroup
+%
+%
+%
+% \clearpage
+%
+% \section{Alternatives}
+%
+% Summarized below are several other ways to convert a \LaTeX{} or other document to \HTML.
+% Where an existing \LaTeX{} document is to be converted to \HTML, \pkg{lwarp} may be
+% a good choice. For new projects with a large number of documents, it may be worth
+% investigating the alternatives before decided which path to take.
+%
+% \subsection{\pkg{internet} class}
+%
+% \changes{v0.21}{2017/02/15}{Docs: Added \pkg{internet} class.}
+%
+% The closest to \pkg{lwarp} in design principle is the
+% \DescribeClass{internet}
+% \verb+internet+ class by Andrew Stacey \Dash
+% an interesting project which directly produces several versions
+% of markdown, and also \HTML\ and \EPUB.
+% \url{https://github.com/loopspace/latex-to-internet}
+%
+%
+%
+% \subsection{\brand{TeX4ht}}
+%
+% \url{http://tug.org/tex4ht/}\DescribeProgram{TeX4ht}\DescribeProgram{htlatex}
+%
+% \bigskip\noindent
+% This system uses native \LaTeX{} processing to produce a \DVI\ file containing special commands,
+% and then uses additional post-processing for the \HTML\ conversion by way of numerous configuration
+% files.
+% In some cases \pkg{lwarp} provides a better \HTML\ conversion, and it supports
+% a different set of packages.
+% TeX4ht produces several other forms of output beyond \HTML, including \ODT\ and
+% a direct path to \EPUB, and is still being developed.
+%
+% \subsection{Translators}
+%
+% \changes{v0.21}{2017/02/14}{Docs: Added TeX2page, GladTeX.}
+%
+% These systems use external programs to translate a subset of \LaTeX{} syntax into \HTML.
+% Search for each on \CTAN\ (\url{http:\\ctan.org}).
+% \begin{description}
+% \item [H\textsuperscript{E}v\textsuperscript{E}a:] \url{http://hevea.inria.fr/}
+% \DescribeProgram{Hevea} {\footnotesize(not on \CTAN)}
+% \item [T\textsubscript{T}H:] \url{http://hutchinson.belmont.ma.us/tth/}
+% \DescribeProgram{TtH}
+% \item [GELLMU:] \url{http://www.albany.edu/~hammond/gellmu/}
+% \DescribeProgram{GELLMU}
+% \item [\LaTeX{}ML:] \url{http://dlmf.nist.gov/LaTeXML/}
+% \DescribeProgram{LaTeXML}
+% \item [PlasTeX:] \url{https://github.com/tiarno/plastex}
+% \DescribeProgram{Plastex}
+% \item [\LaTeX2HTML:] \url{http://www.latex2html.org/}
+% \DescribeProgram{LaTeX2HTML} \\
+% and \url{http://ctan.org/pkg/latex2html}.
+% \item [\TeX2page:] \url{http://ds26gte.github.io/tex2page/index.html} \DescribeProgram{TeX2page}
+% \end{description}
+% Finally, Glad\TeX\ may used to directly insert \LaTeX\ math into \HTML:
+% \begin{description}
+% \item [Glad\TeX:] \url{http://humenda.github.io/GladTeX/} \DescribeProgram{GladTeX}
+% \end{description}
+%
+% \subsection{\brand{AsciiDoc} and \brand{Asciidoctor}}
+%
+% AsciiDoc is one of the most capable markup languages, providing enough features to produce
+% the typical technical-writing document with cross-references,
+% and it writes \LaTeX{} and \HTML.
+% \begin{description}
+% \item [Asciidoctor:] \url{http://asciidoctor.org/} (More active.)\DescribeProgram{AsciiDoc}
+% \item [AsciiDoc:] \url{http://asciidoc.org/} (The original project.)\DescribeProgram{AsciiDoctor}
+% \end{description}
+%
+% \subsubsection{\brand{Asciidoctor-\LaTeX}}
+% The Asciidoctor-LaTeX project is developing additional \LaTeX{}-related features.
+% \begin{description}
+% \item [Asciidoctor-LateX:] ~ \\
+% \url{http://www.noteshare.io/book/asciidoctor-latex-manual} \\
+% \url{https://github.com/asciidoctor/asciidoctor-latex}
+% \DescribeProgram{Asciidoctor-LaTeX}
+% \end{description}
+%
+% \subsection{\brand{Pandoc}}
+% \DescribeProgram{Pandoc}
+% A markup system which also reads and writes \LaTeX{} and \HTML.
+% \begin{description}
+% \item [Pandoc:] \url{http://pandoc.org/}
+% \end{description}
+%
+% (Watch for improvements in cross-references to figures and tables.)
+%
+% \subsection{Word processors}
+%
+% It should be noted that the popular word processors
+% \DescribeProgram{Word}\DescribeProgram{LibreOffice}\DescribeProgram{OpenOffice}
+% have advanced through the years in their abilities
+% to represent math with a \LaTeX-ish input syntax, unicode math fonts,
+% and high-quality output, and also generate \HTML\ with varying success.
+% See recent developments in \brand{Microsoft}\,\supregistered\ \prog{Word}\,\supregistered{}
+% and \brand{LibreOffice}\,\texttrademark\ \prog{Writer}.
+%
+% \subsection{Commercial systems}
+%
+% Likewise, several professional systems exist whose
+% \DescribeProgram{Adobe} \DescribeProgram{FrameMaker}
+% \DescribeProgram{InDesign} \DescribeProgram{Flare} \DescribeProgram{Madcap}
+% abilities have been advancing in the areas of typesetting, cross-referencing, and \HTML\ generation.
+% See \brand{Adobe}\,\supregistered{} \prog{FrameMaker}\,\supregistered{},
+% \brand{Adobe} \prog{InDesign}\,\supregistered,
+% and \brand{Madcap} \prog{Flare}\,\texttrademark.
+%
+% \subsection{Comparisons}
+% \gindex{markup languages}
+%
+% AsciiDoc, Pandoc, and various other markup languages typically have a syntax which tries to be
+% natural and human-readable, but the use of advanced features tends to require
+% many combinations of special characters, resulting in a complicated mess of syntax.
+% By contrast, \LaTeX{} spells things out in readable words but takes longer to type, although
+% integrated editors exist which can provide faster entry and a graphic user interface.
+% For those functions which are covered by the typical markup language
+% it is arguable that \LaTeX{} is comparably easy to learn, while \LaTeX{} provides many more advanced
+% features where needed, along with a large number of pre-existing packages which provide solutions
+% to numerous common tasks.
+%
+% Text-based document-markup systems share some of the advantages of \LaTeX{} vs.\ a typical word
+% processor. Documents formats are stable. The documents themselves are portable,
+% work well with revision control,
+% do not crash or become corrupted, and are easily generated under program control.
+% Formatting commands are visible,
+% cross-referencing is automatic, and editing is responsive.
+% Search/replace with regular expressions provides a powerful tool for
+% the manipulation of both document contents and structure.
+% Markup systems and some commercial systems allow printed output
+% through a \LaTeX{} back end, yielding high-quality results especially when the \LaTeX{}
+% template is adjusted, but they lose the ability to use \LaTeX{} macros and
+% other \LaTeX{} source-document features.
+%
+% The effort required to customize the output of each markup system varies.
+% For print output, \LaTeX{} configuration
+% files are usually used. For \HTML\ output, a \CSS\ file will be available, but additional
+% configuration may require editing some form of control file with a different syntax, such as XML.
+% In the case of \pkg{lwarp}, \CSS\ is used, and much \HTML\ output is adjusted
+% through the usual \LaTeX\ optional macro parameters,
+% but further customization may require patching \LaTeX{} code.
+%
+% The popular word processors and professional document systems each has a large
+% base of after-market support including pre-designed styles and templates, and often include
+% content-management systems for topic reuse.
+%
+%
+%
+%
+% \clearpage
+%
+% \setlength{\parindent}{0em}
+% \setlength{\parskip}{2ex}
+%
+% \section{Installation}
+%
+% \Cref{tab:utility} shows the tools which are used for
+% the \LaTeX\ to \HTML\ conversion.
+% In most cases, these will be available via the
+% standard package-installation tools.
+%
+% Detailed installation instructions follow.
+%
+% \gindex{utility>programs}
+% \gindex{programs>utility}
+%
+% \begin{table}[hbp]
+% \changes{v0.45}{2017/11/30}{Docs: Moved table so doesn't interfere with install docs.}
+% \caption{Required software programs\label{tab:utility}}
+% \hrule
+% \begin{description}
+%
+% \item[Provided by your \LaTeX\ distribution:] \
+%
+% From \TeX{}Live: \url{http://tug.org/texlive/}.
+%
+% \begin{description}
+%
+% \item[\LaTeX:] \prog{pdflatex}, \prog{xelatex}, or \prog{lualatex}.
+% \DescribeProgram[requirement]{pdfLaTeX}
+% \DescribeProgram[requirement]{XeLaTeX}
+% \DescribeProgram[requirement]{LuaLaTeX}
+%
+% \item[The \pkg{lwarp} package:] This package.
+%
+% \item[The \prog{lwarpmk} utility:] Provided along with this package. This
+% should be an operating-system executable in the same way that
+% \prog{pdflatex} or \prog{latexmk} is. It is possible to have the
+% \pkg{lwarp} package generate a local copy of \prog{lwarpmk}
+% called \filenm{lwarpmk.lua}.
+% See \cref{sec:genlatexmk}.
+%
+% \item[\prog{luatex}:] Used by the \prog{lwarpmk} program to simplify and automate document generation.
+%
+% \item [\prog{xindy}:] The \prog{xindy} program is used by \pkg{lwarp} to create
+% indexes. On a MiK\TeX\ system this may have to be acquired separately,
+% but it is part of the regular installer as of mid 2015.
+%
+% \item[\prog{latexmk}:] Optionally used by \prog{lwarpmk} to compile \LaTeX\ code.
+% On a MiK\TeX\ system, \prog{Perl} may need to be installed first.
+%
+% \item[\prog{pdfcrop}:] Used to pull images out of the \LaTeX{} \PDF.
+% \DescribeProgram[requirement]{pdfcrop}
+%
+% \end{description}
+%
+% \item[\brand{Poppler} \PDF\ utilities:] \
+%
+% \begin{description}
+%
+% \item[\prog{pdftotext}:] Used to convert \PDF\ to text.
+% \DescribeProgram[requirement]{pdftotext}\gindex{Poppler=\brand{Poppler}}
+%
+% \item[\prog{pdfseparate}:] Used to pull images out of the \LaTeX{} \PDF.
+% \DescribeProgram[requirement]{pdfseparate}
+%
+% \item[\prog{pdftocairo}:] Used to convert images to \SVG.
+% \DescribeProgram[requirement]{pdftocairo}
+%
+% \end{description}
+%
+% These might be provided by your operating-system package manager,
+% and MiK\TeX\ provides \pkg{miktex-poppler-bin-*} packages.
+%
+% From \brand{Poppler}: \url{poppler.freedesktop.org}.
+%
+% For \brand{MacOS}\supregistered, see
+% \url{https://brew.sh/}, install \prog{Homebrew}, then
+% \userentry{brew install poppler}
+%
+% For \brand{Windows}, see Mik\TeX\ \pkg{miktex-poppler-bin-*}, or: \\
+% \url{https://sourceforge.net/projects/poppler-win32/} \quad and: \\
+% \url{http://blog.alivate.com.au/poppler-windows/}
+%
+% \item[\prog{Perl}:] \
+%
+% This may be provided by your operating-system package manager, and may be
+% required for some of the \brand{Poppler} \PDF\ utilities.
+%
+% \url{strawberryperl.com} (recommended), \url{perl.org}
+%
+% \item[Automatically downloaded from the internet as required:] \
+% \begin{description}
+%
+% \item[\brand{MathJax}:] Optionally used to display math.
+% From: \url{mathjax.org}
+% \DescribeProgram[requirement]{MathJax}
+%
+% \end{description}
+% \end{description}
+%
+% \hrule
+% \end{table}
+% \clearpage
+%
+% \subsection{Installing the \pkg{lwarp} package}
+%
+% There are several ways to install \pkg{lwarp}. These are listed here
+% with the preferred methods listed first:
+%
+% \begin{description}
+% \raggedright
+%
+% \item [Pre-installed:] Try entering into a command line:
+% \userentry{kpsewhich lwarp.sty}
+%
+% If a path to |lwarp.sty| is shown, then \pkg{lwarp} is already installed and
+% you may skip to the next section.
+%
+% \item [\TeX\ Live:] If using a \TeX\ Live distribution,
+% try installing via \prog{tlmgr}:
+% \userentry{tlmgr install lwarp}
+%
+% \item [MiK\TeX:] \
+% \begin{enumerate}
+% \item For newer versions of MiK\TeX, install or update \pkg{lwarp}
+% using the \prog{MiKTeX Console} program.
+% \changes{v0.62}{2018/11/03}{Docs: \prog{MiKTeX Console}}
+% \item For older versions of MiK\TeX,
+% to install \pkg{lwarp} the first time,
+% use the \prog{MiKTeX Package Manager (Admin)}.
+% To update \pkg{lwarp}, use \prog{MiKTeX Update (Admin)}.
+% \item Either way, also update the package \pkg{miktex-misc}, which will install and
+% update the \prog{lwarpmk} executable.
+% \end{enumerate}
+% \changes{v0.26}{2017/03/23}{Docs: Improved MiK\TeX\ install instructions.}
+% \changes{v0.45}{2017/11/30}{Docs: Improved MiK\TeX\ install instructions.}
+% \changes{v0.62}{2018/11/03}{Docs: Improved MiK\TeX\ install instructions.}
+%
+% \item [Operating-system package:] The operating-system package manager may
+% already have \pkg{lwarp}, perhaps as part of a set of \TeX-related packages.
+%
+% \item [CTAN TDS archive:] \pkg{lwarp} may be downloaded from the Comprehensive \TeX\ Archive:
+% \begin{enumerate}
+% \item See \url{http://ctan.org/pkg/lwarp} for the \pkg{lwarp} package.
+% \item Download the \TDS\ archive: |lwarp.tds.zip|
+% \item Find the \TeX\ |local| directory:
+% \begin{description}
+% \item[\TeX\ Live:] \
+%
+% \userentry{kpsewhich -var-value TEXMFLOCAL}
+% \item[MiK\TeX:] \
+%
+% In the \UI{Settings} window, \UI{Roots} tab, look for a local \TDS\ root.
+% \end{description}
+% This should be something like:
+% \begin{sourceverb}
+% /usr/local/texlive/texmf-local/
+% \end{sourceverb}
+% \item Unpack the archive in the \TDS\ local directory.
+% \item Renew the cache:
+% \userentry{mktexlsr} \quad —\,or\,—
+% \userentry{texhash}
+%
+% Or, for \brand{Windows} MiK\TeX, start the program called \prog{MiKTeX Settings (Admin)}
+% and click on the button called \UI{Refresh FNDB}.
+% \end{enumerate}
+%
+% \item[CTAN \filenm{.dtx} and \filenm{.ins} files:] Another form of \TeX\ package
+% is |.dtx| and |.ins| source files. These files are used to create
+% the documentation and |.sty| files.
+%
+% \begin{enumerate}
+% \item See \url{http://ctan.org/pkg/lwarp} for the \pkg{lwarp} package.
+% \item Download the zip archive \filenm{lwarp.zip} into your own \filenm{lwarp} directory.
+% \item Unpack \filenm{lwarp.zip}.
+% \item Locate the contents \filenm{lwarp.dtx} and \filenm{lwarp.ins}
+% \item Create the |.sty| files: \userentry{pdflatex lwarp.ins}
+% \item Create the documentation:
+% \begin{Verbatim}[gobble=2,obeytabs,tabsize=4,frame=lines]
+% pdflatex lwarp.dtx (several times)
+% makeindex -s gglo.ist -o lwarp.gls lwarp.glo
+% makeindex -s gind.ist lwarp.idx
+% pdflatex lwarp.dtx (several times)
+% \end{Verbatim}
+% \item Copy the |.sty| files somewhere such as the \TeX\ Live local tree
+% found in the previous \CTAN\ \TDS\ section, under the subdirectory:
+% \begin{sourceverb}
+% <texlocal>/tex/latex/local/lwarp
+% \end{sourceverb}
+% \item Copy \filenm{lwarp_baseline_marker.png} and \filenm{lwarp_baseline_marker.eps}
+% to the same place as the \filenm{.sty} files.
+% \changes{v0.52}{2018/03/24}{Docs: Improved install instructions.}
+% \item Copy the documentation \filenm{lwarp.pdf} to a \filenm{source} directory in the local tree,
+% such as:
+% \begin{sourceverb}
+% <texlocal>/doc/local/lwarp
+% \end{sourceverb}
+% \item Renew the cache:
+% \userentry{mktexlsr} \quad —\,or\,—
+% \userentry{texhash}
+%
+% Or, for \brand{Windows} MiK\TeX, start the program called \prog{MiKTeX Settings (Admin)}
+% and click on the button called \UI{Refresh FNDB}.
+%
+% \item See \cref{sec:locallwarpmk} to generate your local copy of \prog{lwarpmk}.
+% \item Once the local version of \filenm{lwarpmk.lua} is installed, it may be made
+% available system-wide as per \cref{sec:installlwarpmk}.
+% \end{enumerate}
+% \item[Project-local \CTAN\ \filenm{.dtx} and \filenm{.ins} files:] The
+% |.dtx| and |.ins| files may be downloaded to a project
+% directory, then compiled right there, alongside the
+% document source files. The resultant |*.sty| and \filenm{lwarpmk.lua} files
+% may be used as-is, so long as they are in the same directory
+% as the document source.
+% The files \filenm{lwarp_baseline_marker.png} and
+% \filenm{lwarp_baseline_marker.eps} must also be copied as well.
+% \changes{v0.52}{2018/03/24}{Docs: Improved install instructions.}
+% This approach is especially useful if
+% you would like to temporarily test\margintag{Just testing!}\
+% \pkg{lwarp} before deciding whether to permanently install it.
+% \end{description}
+%
+% \subsection{Installing the \prog{lwarpmk} utility}
+% \label{sec:installlwarpmk}
+%
+% \changes{v0.21}{2017/02/22}{Docs: Installing on \brand{Windows}.}
+%
+% {\small
+% (Note: If \prog{lwarpmk} is not already installed,
+% it is easiest to use a local copy instead of installing it system-wide.
+% See \cref{sec:locallwarpmk}.)
+% }
+%
+% After the \pkg{lwarp} package is installed,
+% you may need to setup the \prog{lwarpmk} utility:
+% \begin{enumerate}
+% \item At a command line, try executing \cmds{lwarpmk}.
+% If the \prog{lwarpmk} help message appears, then \prog{lwarpmk} is already set up.
+% If not, it is easiest to generate and use a local copy.
+% See \cref{sec:locallwarpmk}.
+%
+% \item For MiK\TeX, try updating the \pkg{miktex-misc} package. This may install
+% the \prog{lwarpmk} executable for you.
+% \changes{v0.26}{2017/03/23}{Docs: Improved MiK\TeX\ install instructions.}
+%
+% Otherwise, continue with the following:
+%
+% \item Locate the file \filenm{lwarpmk.lua}, which should be in the |scripts| directory
+% of the \TDS\ tree. On a \TeX\ Live or MiK\TeX\ system you may use
+% \userentry{kpsewhich lwarpmk.lua}
+%
+% (If the file is not found, you may also generate a local copy and use it instead.
+% See \cref{sec:locallwarpmk}.)
+%
+% \item Create \prog{lwarpmk}:
+% \begin{description}
+% \item [Unix:] Create a symbolic link and make it executable:
+% \begin{enumerate}
+% \item Locate the \TeX\ Live binaries:
+% \userentry{kpsewhich -var-value TEXMFROOT}
+% This will be something like:
+% \begin{sourceverb}
+% /usr/local/texlive/<year>
+% \end{sourceverb}
+% The binaries are then located in the |bin/<arch>| directory
+% under the root:
+% \begin{sourceverb}
+% /usr/local/texlive/<year>/bin/<architecture>/
+% \end{sourceverb}
+% In this directory you will find programs
+% such as \prog{pdflatex} and \prog{makeindex}.
+% \item In the binaries directory,
+% create a new symbolic link from the binaries directory to \filenm{lwarpmk.lua}:
+% \userentry{ln -s <pathtolwarpmk.lua> lwarpmk}
+% \item Make the link executable:
+% \userentry{chmod 0755 lwarpmk}
+% \end{enumerate}
+% \item [\brand{Windows} \TeX\ Live:] Create a new |lwarpmk.exe| file:
+% \begin{enumerate}
+% \item Locate the \TeX\ Live binaries as shown above for \brand{Unix}.
+% \item In the binaries directory, make a \emph{copy} of |runscript.exe|
+% and call it |lwarpmk.exe|
+% This will call the copy of \filenm{lwarpmk.lua}
+% which is in the |scripts| directory of the distribution.
+% \end{enumerate}
+% \item [\brand{Windows} MiK\TeX:] Create a new |lwarpmk.bat| file:
+% \begin{enumerate}
+% \item Locate the MiK\TeX\ binaries. These will be in a directory such as:
+% \begin{sourceverb}
+% C:\Program Files\MiKTeX 2.9\miktex\bin\x64
+% \end{sourceverb}
+% In this directory you will find programs
+% such as |pdflatex.exe| and |makeindex.exe|.
+% \item Create a new file named |lwarpmk.bat| containing:
+% \begin{sourceverb}
+% texlua "C:\Program Files\MiKTeX 2.9\scripts\lwarp\lwarp.texlua" %*
+% \end{sourceverb}
+% This will call the copy of \filenm{lwarpmk.lua}
+% which is in the |scripts| directory of the distribution.
+% \end{enumerate}
+% \end{description}
+% \end{enumerate}
+%
+% \subsubsection{Using a local copy of \prog{lwarpmk}}
+% \label{sec:locallwarpmk}
+% It is also possible to use a local version of \prog{lwarpmk}:
+% \begin{enumerate}
+% \item When compiling the tutorial in \cref{sec:tutorial},
+% use the \optn{lwarpmk} option for the \pkg{lwarp} package:
+% \begin{sourceverb}
+% \usepackage[lwarpmk]{lwarp}
+% \end{sourceverb}
+% \item When the tutorial is compiled with \prog{pdflatex}, the file \filenm{lwarpmk.lua}
+% will be generated along with the other configuration files.
+% \item \filenm{lwarpmk.lua} may be used for this project:
+% \begin{description}
+% \item[Unix:] \
+% \begin{enumerate}
+% \item Make \filenm{lwarpmk.lua} executable: \userentry{chmod 0755 lwarpmk.lua}
+% \item Compile documents with
+% \userentry{./lwarpmk.lua html}
+% \userentry{./lwarpmk.lua print} \quad etc.
+% \item It may be useful to rename or link to a version without the |.lua| suffix.
+% \end{enumerate}
+% \item[\brand{Windows}:] \
+%
+% Compile documents with either of the following, depending
+% on which command shell is being used:
+% \userentry{texlua lwarpmk.lua html}
+% \userentry{texlua lwarpmk.lua print} \quad etc.
+%
+% Or:
+%
+% \userentry{lwarpmk html}
+% \userentry{lwarpmk print} \quad etc.
+% \end{description}
+% \end{enumerate}
+%
+%
+% \subsection{Installing additional utilities}
+%
+% \changes{v0.27}{2017/04/02}{Docs: Installing utilities for \brand{MacOS}.}
+%
+% \begin{description}
+% \item [To test for the existence of the additional utilities:] \
+%
+% Enter the following in a command line. If each programs' version is
+% displayed, then that utility is already installed.
+% See \cref{tab:utility} on page \pageref{tab:utility}.
+%
+% \userentry{luatex -{}-version}
+% \userentry{xindy -{}-version}
+% \userentry{latexmk -{}-version}
+% \userentry{perl -{}-version}
+% \userentry{pdfcrop -{}-version}
+% \userentry{pdftotext -v}
+% \userentry{pdfseparate -{}-version}
+% \userentry{pdftocairo -v}
+% \changes{v0.45}{2017/11/30}{Docs: Fix for double hyphens.}
+%
+% \item [To install \prog{xindy}, \prog{latexmk}, and \prog{pdfcrop}:] \
+%
+% The \TeX\ utilities \prog{xindy}, \prog{latexmk}, and \prog{pdfcrop} may be installed
+% in \prog{TexLive} with \prog{tlmgr}, installed by \prog{MiKTeX}, provided by
+% your operating system's package manager, or downloaded from the \prog{CTAN} archive:
+% \changes{v0.45}{2017/11/30}{Docs: Improved install instructions.}
+% \begin{sourcedisplay}
+% \url{http://ctan.org/pkg/xindy} \\
+% \url{http://ctan.org/pkg/latexmk} \\
+% \url{http://ctan.org/pkg/pdfcrop}
+% \end{sourcedisplay}
+%
+%
+% \item [To install the \brand{Poppler} utilities to a \brand{Unix}/\brand{Linux} system:] \
+% \DescribeProgram[requirement]{pdftotext}\gindex{Poppler=\brand{Poppler}}
+% \DescribeProgram[requirement]{pdfseparate}
+% \DescribeProgram[requirement]{pdftocairo}
+%
+% The tools from the \brand{Poppler} project should be provided by your
+% operating system's package manager.
+%
+%
+% \item [To install the \brand{Poppler} utilities to a \brand{MacOS} machine:] \
+% \begin{enumerate}
+% \item Install \prog{Homebrew} from \url{https://brew.sh/}:
+% \userentry{\small~ \\ \hspace*{-2in}/usr/bin/ruby -e "\$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"}
+% \item Install the \brand{Poppler} utilities:
+% \userentry{brew install poppler}
+% \end{enumerate}
+%
+%
+% \item [To install the \brand{Poppler} utilities to a \brand{Windows} machine:] \
+%
+% If using Mik\TeX, install a \pkg{miktex-poppler-bin-*} package.
+% \changes{v0.62}{2018/11/03}{Docs: \pkg{miktex-poppler-bin-*}}
+% Otherwise:
+% \begin{enumerate}
+% \item See \cref{tab:utility} on \cpageref{tab:utility}.
+% \item Download and extract the \brand{Poppler} utilities \prog{pdftotext}, \prog{pdfseparate},
+% and \prog{pdfseparate} to a directory, such as |Poppler|.
+% \item In the \UI{Start} window, type "Path" to search for results
+% related to Path. Or, open the control panel and search for "Path".
+% \item Choose \UI{Edit the system environment variables} in the control panel.
+% \item Choose the \UI{Environment Variables} button.
+% \item Choose the \UI{Path} variable, then the \UI{Edit} button.
+% \item Choose the \UI{New} button to make an additional entry.
+% \item Enter the |bin| directory of the \brand{Poppler} utilities, such as:
+% \begin{sourcedisplay}
+% |C:\Users\<myname>\Desktop\Poppler\poppler-0.5_x86\poppler-0.5\bin|
+% \end{sourcedisplay}
+%
+% Be sure to include |\bin|.
+% \item Click \UI{Ok} when done.
+% \end{enumerate}
+%
+% \needspace{2\baselineskip}
+% \item [To install \brand{Perl} to a \brand{Windows} machine:] \
+% \DescribeProgram[requirement]{perl}\gindex{Perl=\brand{Perl}}
+% \begin{enumerate}
+% \item Download and install a version of \brand{Perl}, such as \brand{Straweberry Perl},
+% to a directory without a space in its name, such as |C:\Strawberry|.
+% \item Edit the \UI{Path} as seen above for the \brand{Poppler} utilities.
+% \item Enter the |bin| directory of the \prog{perl} utility, such as:
+% \begin{sourcedisplay}
+% |C:\Strawberry\perl\bin|
+% \end{sourcedisplay}
+%
+% Be sure to include |\bin|.
+% \item Click \UI{Ok} when done.
+% \end{enumerate}
+%
+% \end{description}
+%
+% \vfill
+% \textred{\textbf{Any utilities installed by hand must be added to the |PATH|.}}
+% \vfill
+%
+%
+%
+% \clearpage
+%
+% \section{Tutorial}
+% \label{sec:tutorial}
+%
+% This section shows an example of how to create an \pkg{lwarp} document.
+%
+% \needhelp
+%
+% \subsection{Starting a new project}
+%
+% \changes{v0.21}{2017/02/23}{File: \filenm{lwarp_tutorial.txt} added.}
+%
+% \begin{enumerate}
+%
+% \item Create a new project directory called |tutorial|.
+%
+% \item Inside the |tutorial| directory,
+% \DescribeFile{tutorial.tex}
+% create a new file called |tutorial.tex|.
+% This may be done several ways:
+% \begin{description}
+% \item [Copy from the documentation PDF:] \
+%
+% A listing is in \cref{fig:tutorial},
+% which may be copied/pasted from the figure directly into your own editor,
+% depending on the quality of the \PDF\ viewer and editor, or:
+%
+% \item [Copy from the \pkg{lwarp} documentation directory:] \
+%
+% Another copy may be found by entering into a command line:
+% \DescribeFile{lwarp_tutorial.txt}
+% \watchout[Note: |.txt| suffix!]
+% \userentry{texdoc -l lwarp\_tutorial.txt}
+%
+% This should be in the |doc/latex/lwarp/| directory along
+% with this \PDF\ documentation.
+% Copy |lwarp_tutorial.txt| directly into your |tutorial| directory,
+% renamed as |tutorial.tex|.
+% \end{description}
+%
+% \emph{When using \brand{Windows}, use an editor other than \brand{Notepad},
+% \watchout[Bad formatting!]
+% since \brand{Notepad} does not accept the end-of-line from a \brand{Unix} text file.}
+%
+% \item Compile the project: \userentry{pdflatex tutorial.tex}
+% \quad (several times)
+%
+% (\prog{xelatex} or \prog{lualatex} may be used as well.
+% \pkg{lwarp} also supports \DVI\ \prog{latex} for use with \filenm{.eps} images.)
+%
+% \item View the resulting |tutorial.pdf| with a \PDF\ viewer.
+%
+% \end{enumerate}
+%
+%
+% A number of new files are created when |tutorial.tex| is compiled, as
+% shown in \cref{fig:newprojectfiles}. These files are created by
+% the |lwarp| package.
+%
+% (Two of the new files are configuration files for the helper program \prog{lwarpmk}.
+% Whenever a print version of the document is created,
+% the configuration files for \prog{lwarpmk} are updated to
+% record the operating system, \LaTeX\ engine (\prog{latex}, \prog{pdflatex}, \prog{xelatex}, or \prog{lualatex}),
+% the filenames of the source code and \HTML\ output, and whether
+% the additional helper program \prog{latexmk} will be used to compile the document.)
+%
+%
+% \clearpage
+%
+% \begingroup
+% \captionof{figure}{tutorial.tex listing}
+% \label{fig:tutorial}
+%
+% \begin{center}
+% \footnotesize
+% \textred{Note: There are two pages!}
+% \end{center}
+%
+% \small
+%
+% \VerbatimInput{lwarp_tutorial.txt}
+%
+% ^^A so they don't copy/paste the header:
+% \thispagestyle{empty}
+%
+% ^^A **************************************************************************
+% ^^A NOTE: lwarp_tutorial.txt is located in the TDS doc directory!
+% ^^A Copy it to the source directory if you wish to recompile lwarp.dtx!
+% ^^A (It is stored in the doc directory so that texdoc can find it and
+% ^^A the user can copy it.)
+% ^^A **************************************************************************
+%
+% \endgroup
+%
+%
+% \begin{table}
+% \caption{Configuration files created by print version\label{fig:newprojectfiles}}
+% \begin{description}
+%
+% \item [|tutorial.pdf|:] The \PDF\ output from \LaTeX.
+% The print version of the document.
+%
+% \item [|tutorial\_html.tex|:] A small |.tex| file used to create
+% a parallel \HTML\ version of the document, which co-exists with usual
+% the \PDF\ version, and which will have its
+% own auxiliary files. In this way, both \PDF\ and \HTML\
+% documents may co-exist side-by-side.
+%
+% \item [Auxiliary files:] The usual \LaTeX\ files |.aux|, |.log|, |.out|, |.toc|, |.lof|, |.idx|.
+% When an \HTML\ version of the document is created, |_html| versions
+% of the auxiliary files will also be generated.
+%
+% \item [|lwarpmk.conf|:] A configuration file for \prog{lwarpmk},
+% which is used to automate the compilation of \PDF\ or \HTML\
+% versions of the document.
+%
+% \item [|tutorial.lwarpmkconf|:] Another configuration file used by \prog{lwarpmk},
+% which is only useful if you wish to have several projects
+% residing in the same directory.
+%
+% \item [|.css files|:] |lwarp.css|, |lwarp_formal.css|, |lwarp_sagebrush.css|
+% These files are standard for \pkg{lwarp}, and are not meant to be modified
+% by the user.
+%
+% \item [|sample\_project.css|:] An example of a user-customized \CSS\ file,
+% which may be used for project-specific changes to the \pkg{lwarp} defaults.
+%
+% \item [|lwarp.ist|:] Used by \pkg{lwarp} while creating an index using \prog{makeindex}.
+% This file should not be modified by the user.
+% A custom file may be used instead, if necessary.
+%
+% \item [|lwarp.xdy|:] Used by \pkg{lwarp} while creating an index using \prog{xindy}.
+% This file should not be modified by the user.
+% A custom file may be used instead, if necessary.
+%
+% \item [|lwarp\_one\_limage.txt|:] For \brand{Windows} only.
+% Used to process \SVG\ images in the background. Copied to
+% |lwarp_one_limage.cmd| when images are generated.
+%
+% \item [|lwarp\_mathjax.txt|:] Inserted into the \HTML\ files when
+% \brand{MathJax} is used to display math.
+% This file should not be modified by the user.
+%
+% \item [|comment.cut|:] A temporary file used by \pkg{lwarp} to
+% conditionally process blocks of text. This file may be ignored.
+% \end{description}
+%
+% \hrule \medskip
+% \label{sec:genlatexmk}
+% When the \optn{lwarpmk} option is given to the \pkg{lwarp} package:
+% \begin{description}
+% \item [\filenm{lwarpmk.lua}:] A local copy of the \prog{lwarpmk} utility.
+%
+% On \brand{Unix}-related operating systems this file must be made executable:
+% \begin{sourcedisplay}
+% |chmod u+x lwarpmk.lua|
+% \end{sourcedisplay}
+%
+% This may be useful to have to archive with a project for future use.
+% \end{description}
+% \end{table}
+%
+%
+%
+% \clearpage
+%
+% \subsection{Compiling the print version with \prog{lwarpmk}}
+%
+% The \prog{lwarpmk} utility program is used to compile either the printed or
+% the \HTML\ version of the document.
+%
+% |lwarpmk print| is used to recompile a printed version of the document.
+%
+% \begin{enumerate}
+%
+% \item Re-compile the print version: \userentry{lwarpmk print}
+%
+% \prog{lwarpmk} prints an introduction then checks to see if the document
+% must be recompiled. If it seems that the files are up-to-date, then
+% \prog{lwarpmk} informs you of that fact and then exits.
+%
+% \item Make a small change in the original document,
+% such as adding a space character.
+%
+% \item Recompile again. \userentry{lwarpmk print}
+%
+% The document is recompiled when a change is seen in the source.
+% Several compilations may be necessary to resolve cross-references.
+%
+% \item Force a recompile to occur.
+% \userentry{lwarpmk again}
+% \userentry{lwarpmk print}
+%
+% |lwarpmk again| updates the date code for the file,
+% triggering a recompile the next time the document is made.\footnote{
+% Although, when using the utility \prog{latexmk} (introduced later), the changed date is
+% ignored and an actual change in contents must occur to cause a recompile.}
+%
+% \item Process the index.\gindex{index>processing}%
+% \footnote{The command \cmds{lwarpmk printglossary} is also
+% available to process a glossary produced with the \textsf{glossaries} package.
+% See \cref{sec:glossaries}.}%
+% \footnote{Also see \cref{sec:indexsetup} for index options.}
+% \userentry{lwarpmk printindex}
+%
+% \item Recompile again to include the index.
+% \userentry{lwarpmk print}
+%
+% \item To force a single recompile when needed, even if no changes were detected:
+% \userentry{lwarpmk print1}
+%
+% \end{enumerate}
+%
+% Note that the \HTML\ customization commands are ignored while making the
+% print version.
+%
+%
+% \clearpage
+%
+% \subsection{Compiling the \HTML\ version with \prog{lwarpmk}}
+%
+% |lwarpmk html| is used to recompile an \HTML\ version of the document.
+%
+% \begin{enumerate}
+% \item Compile the \HTML\ version:
+% \userentry{lwarpmk html}
+%
+% \begin{enumerate}
+% \item \prog{lwarpmk} uses \LaTeX\ to process |tutorial_html.tex|
+% to create \\
+% |tutorial_html.pdf|.
+% \item \prog{pdftotext} is then used to convert to the file |tutorial_html.html|.
+% This file is a plain-text file containing \HTML\ tags and
+% content for the entire document.
+% \item \prog{lwarpmk} manually splits |tutorial_html.html| into
+% individual \HTML\ files according to the \HTML\ settings.
+% For this tutorial, the result is |tutorial.html| (the home page),
+% along with |First-chapter.html|\footnote{
+% \texttt{First-chapter.html}
+% also contains the first section, even though the second
+% section is its own \HTML\ page. This behavior is
+% controlled by the boolean \texttt{CombineHigherDepths}.},
+% |Some-math.html|, and the document's
+% index in |_Index.html|.\footnote{\texttt{index.html} is commonly
+% used as a homepage, so the document index is in \texttt{\_Index.html}.}
+% \end{enumerate}
+%
+% \item View the \HTML\ page in a web browser.
+%
+% \qquad Open the file |tutorial.html| in a web browser.
+%
+% Note that math is still displayed as its \attribute{alt} tag, which is
+% \margintag{math}
+% the plain-text \LaTeX\ source,
+% until the
+% images of the math expressions have been generated. Math may be
+% displayed as \SVG\ images or by a \brand{MathJax} script, as seen in
+% \cref{sec:tutorialsvgmath,sec:tutorialmathjax}.
+%
+% \item Force a recompile:
+% \userentry{lwarpmk again}
+% \userentry{lwarpmk html}
+% \userentry{lwarpmk print}
+%
+% \item Process the \HTML\ index and recompile:\gindex{index>processing}
+% \footnote{The command \cmds{lwarpmk htmlglossary} is also
+% available to process a glossary produced with the \textsf{glossaries} package.
+% See \cref{sec:glossaries}.}\footnote{Also see \cref{sec:indexsetup} for index options.}
+% \userentry{lwarpmk htmlindex}
+% \userentry{lwarpmk html}
+%
+% |_Index.html| is updated for the new \LaTeX\ index.
+%
+% \item Reload the web page to see the added index.
+%
+% \item To force a single recompile when needed, even if no changes were detected:
+% \userentry{lwarpmk html1}
+%
+% \end{enumerate}
+%
+%
+%
+% \clearpage
+%
+% \subsection{Generating the \SVG\ images}
+% \label{sec:tutorialsvgmath}
+%
+% By default \pkg{lwarp} represents math as \SVG\ images, with
+% \margintag{math as \SVG\ images}
+% the \LaTeX\ source included in \attribute{alt} attributes. In this way,
+% the math is displayed as it was drawn by \LaTeX, and the \LaTeX\ source
+% may be copied and pasted into other documents.
+%
+% \pkg{lwarp} uses the same mechanism for \env{picture} and \tikz\ environments.
+% \margintag{\env{picture} and \tikz}
+%
+% \begin{enumerate}
+% \item Create the \SVG\ images:
+% \userentry{lwarpmk limages}
+% \userentry{lwarpmk html}
+%
+% \item Move to the tutorial's \HTML\ math page and reload the document in the browser.
+%
+% \item The math images are displayed using the same font and formatting
+% as the printed version.
+%
+% \item Copy/paste a math expression into a text editor to see the \LaTeX\ source.
+% \end{enumerate}
+%
+% \limitssvgimages
+%
+% \clearpage
+%
+% \subsection{Using \brand{MathJax} for math}
+% \label{sec:tutorialmathjax}
+%
+% Math may also be represented using the \brand{MathJax} \brand{Javascript} project.
+% \margintag{math with \brand{MathJax}}
+%
+% \begin{enumerate}
+% \item In the tutorial's source code, uncomment the \optn{mathjax} package option for \pkg{lwarp}:
+% \begin{sourcedisplay}
+% mathjax, \% Use MathJax to display math.
+% \end{sourcedisplay}
+%
+% \item Recompile \userentry{lwarpmk html}
+%
+% \item Reload the math page.
+% \end{enumerate}
+%
+% \brand{MathJax} requires web access unless a local copy of \brand{MathJax} is available,
+% \watchout[\brand{MathJax} requirements]
+% and it also requires that \brand{Javascript} is enabled for the web page.
+% The math is rendered by \brand{MathJax}. Right-click on math to see several
+% options for rendering, and for copying the \LaTeX\ source.
+%
+% While using \brand{MathJax} has many advantages, it may not be able to represent
+% complex expressions or spacing adjustments as well as \LaTeX, and it
+% may not support some math-related packages.
+%
+%
+% \clearpage
+% \subsection{Changing the \CSS\ style}
+%
+% For a formal \CSS\ style, add to the preamble:
+% \begin{sourcedisplay}
+% \cs{usepackage}\{lwarp\} \\
+% \dots \\
+% \textred{\cs{CSSFilename}\{lwarp\_formal.css\}} \\
+% \dots \\
+% \cs{begin}\{document\} \\
+% \end{sourcedisplay}
+%
+% For a modern \CSS\ style, |lwarp_sagebrush.css| is also provided:
+% \begin{sourcedisplay}
+% \cs{CSSFilename}\{lwarp\_sagebrush.css\}
+% \end{sourcedisplay}
+%
+% See \cref{sec:csscustomization} for more information about modifying the \CSS\ styling
+% of the document.
+%
+%
+%
+% \subsection{Customizing the \HTML\ output}
+%
+% A number of settings may be made to control the \HTML\ output, including
+% filename generation, automatic compilation, math output, document splitting,
+% meta data, and page headers and footers.
+%
+% See \cref{sec:htmlsettings} for more information.
+%
+%
+% \clearpage
+%
+% \subsection{Using \prog{latexmk}}
+%
+% \prog{latexmk} is a \LaTeX\ utility used to monitor changes in source files
+% and recompile as needed.
+%
+% \begin{enumerate}
+% \item In the tutorial's source code uncomment the \optn{latexmk} option for the
+% \pkg{lwarp} package:
+% \begin{sourcedisplay}
+% latexmk, \% Use latexmk to compile.
+% \end{sourcedisplay}
+%
+% \item Recompile the printed version of the document.
+% \userentry{lwarpmk print}
+%
+% \begin{sloppy}
+% \pkg{lwarp} updates its own configuration files (|lwarpmk.conf| and \newline
+% |tutorial.lwarpmkconf|) whenever the printed version of the document
+% is compiled. These configuration files remember that \prog{lwarpmk} should
+% use \prog{latexmk} to compile the document.
+% \end{sloppy}
+%
+% \item Recompile the document.
+% \userentry{lwarpmk print} \quad and/or
+% \userentry{lwarpmk html}
+% \end{enumerate}
+%
+% Changes are detected by comparing checksums
+% rather than modification times, so |lwarpmk again| will not trigger a
+% recompile, but \prog{latexmk} has a much better awareness of changes than
+% the \prog{lwarpmk} utility does and it is likely to correctly know when to
+% recompile. A recompile may be forced by making a small change to the source,
+% and a single recompile may be forced with:
+% \margintag{forced single-pass recompile}
+% \userentry{lwarpmk print1} \quad and/or
+% \userentry{lwarpmk html1}
+%
+%
+% \clearpage
+%
+% \subsection{Using \XeLaTeX\ or \LuaLaTeX}
+%
+% \XeLaTeX\ or \LuaLaTeX\ may be used instead of \LaTeX.
+%
+% \begin{enumerate}
+%
+% \item Remove the auxiliary files for the project:
+% \userentry{lwarpmk cleanall}
+%
+% \item Use \prog{xelatex} or \prog{lualatex} to compile the printed version
+% a single time.
+% \userentry{xelatex tutorial.tex} \quad -or-
+% \userentry{lualatex tutorial.tex}
+%
+% When the compile occurs,
+% the configuration files for \prog{lwarpmk} are modified to remember
+% which \TeX\ engine was used. \XeLaTeX\ or \LuaLaTeX\ will be used for
+% future runs of \prog{lwarpmk}.
+%
+% \item To recompile the document:
+% \userentry{lwarpmk print} \quad -and-
+% \userentry{lwarpmk html}
+%
+% \item Also remember to update the indexes and recompile again:
+% \userentry{lwarpmk htmlindex}
+% \userentry{lwarpmk html}
+% \userentry{lwarpmk printindex}
+% \userentry{lwarpmk print}
+% \end{enumerate}
+%
+%
+% \subsection{Using \DVI\ \LaTeX}
+%
+% \gindex{DVI \LaTeX}
+%
+% Traditional \DVI\ LaTeX may also be used along with \filenm{.eps} image files.
+% An \SVG\ version of each image must also be provided.
+% \prog{lwarpmk} may be used to convert image formats.
+%
+% To convert \EPS\ files to \PDF:
+% \userentry{lwarpmk epstopdf *.eps \qquad \textrm{(or a list of files)}}
+%
+% To convert \PDF\ files to \SVG:
+% \userentry{lwarpmk pdftosvg *.pdf \qquad \textrm{(or a list of files)}}
+%
+% See \cref{sec:fonts} regarding font selection
+% \watchout[bitmapped fonts]
+% to avoid the use of bitmapped fonts.
+%
+%
+% \clearpage
+%
+% \subsection{Using a glossary}
+%
+% \changes{v0.29}{2017/04/15}{Docs: Using a glossary}
+%
+% \pkg{lwarp} supports the \pkg{gloss} and \pkg{glossaries} packages,
+% although this tutorial does not supply an example.
+%
+% \subsubsection{\pkg{gloss} package}
+%
+% See \cref{sec:gloss}.
+%
+% \subsubsection{\pkg{glossaries} package}
+% \gindex{glossaries=\pkg{glossaries}>processing}
+% To process the glossary for the print version:
+% \userentry{lwarpmk printglossary}
+%
+% \fquad (If \cmds{makeglossaries} is not found, see \cref{sec:glossaries}.)\watchout
+%
+% To process the glossary for the \HTML\ version:
+% \userentry{lwarpmk htmlglossary}
+%
+% In each case, the document will have to be recompiled afterwards:
+% \userentry{lwarpmk html1}
+% \userentry{lwarpmk html}
+% \userentry{lwarpmk print1}
+% \userentry{lwarpmk print}
+%
+% See \cref{sec:glossaries} to set options for processing glossaries.
+%
+%
+% \clearpage
+%
+% \subsection{Cleaning auxiliary files}
+%
+% To remove the auxiliary files |.aux|, |.toc|, |.lof|, |.lot|, |.idx|, |.ind|, |.log|,
+% and |.gl*|:
+% \userentry{lwarpmk clean}
+%
+%
+% \subsection{Cleaning auxiliary and output files}
+%
+% To remove the auxiliary files, and also remove the |.pdf| and |.html| files:
+% \userentry{lwarpmk cleanall}
+%
+%
+% \subsection{Cleaning the images from the \filenm{<project>-images} directory}
+% \changes{v0.53}{2018/04/01}{Docs: \cmds{lwarpmk cleanlimages}.}
+%
+% The \filenm{<project>-images} directory contains \SVG\ images
+% automatically generated for inline and display math, \pkg{tikz}, etc.
+% To remove all the images from the \filenm{lateximages} directory:
+% \userentry{lwarpmk cleanlimages}
+%
+%
+% \subsection{Converting \PDF\ or \EPS\ images to \SVG}
+% \changes{v0.56}{2018/04/29}{Docs: \cmds{lwarpmk pdftosvg}.}
+% \changes{v0.59}{2018/09/05}{Docs: \cmds{lwarpmk epstopdf}.}
+%
+% \HTML\ cannot display \PDF\ or \EPS\ images, so any external \PDF\ graphics images must
+% be converted to \SVG\ format.
+% \gindex{SVG>converting from \PDF\ or \EPS}
+% \gindex{PDF image>converting}
+% \gindex{EPS image>converting}
+% \gindex{image>PDF or EPS>converting}
+% \prog{pdftocairo} and \prog{epstopdf} may be used one image at a time,
+% but \prog{lwarpmk} also provides a way to convert \PDF\ or \EPS\ images in bulk:
+% \userentry{lwarpmk epstopdf *.eps \qquad \textrm{(or a list of files)}}
+% \userentry{lwarpmk pdftosvg *.pdf \qquad \textrm{(or a list of files)}}
+% Be sure to always provide \SVG\ files for \HTML\ output.
+%
+%
+% \subsection{Creating \HTML\ from an incomplete compile}
+% \changes{v0.53}{2018/04/01}{Docs: \cmds{lwarpmk pdftohtml}.}
+%
+% During testing it may be useful to finish the \HTML\ conversion even when
+% the document had errors and did not compile successfully. To attempt an
+% \HTML\ conversion of an incomplete document:
+% \userentry{lwarpmk pdftohtml [-p project]}
+%
+%
+% \subsection{Processing multiple projects in the same directory}
+%
+% It is possible to have several projects in the same directory.
+% \prog{lwarpmk} has an optional parameter which is the document to compile.
+%
+% To create each project:
+% \userentry{pdflatex project\_a}
+% \userentry{pdflatex project\_b}
+%
+% Each project is given its own configuration file:
+% \begin{sourcedisplay}
+% |project_a.lwarpmkconf|, |project_b.lwarpmkconf|
+% \end{sourcedisplay}
+%
+% To compile each project with |lwarkmk|:
+% \userentry{lwarpmk print -p project\_a}
+% \userentry{lwarpmk html -p project\_b}
+%
+%
+% \subsection{Using the \prog{make} utility}
+%
+% \prog{lwarpmk} has an action which may be useful for integration with the
+% common \prog{make} utility:
+% \begin{sourcedisplay}
+% |lwarpmk pdftohtml [-p project]|
+% \end{sourcedisplay}
+%
+% \prog{make} may be used to compile the code to \PDF\ with \HTML\
+% tags (|project_html.pdf|), then \prog{lwarpmk} may be used to
+% convert each target to \HTML\ files.
+%
+%
+% \clearpage
+%
+% \section{Converting an existing document}
+% \label{sec:convertexisting}
+%
+% \gindex{modifying>document}
+% \gindex{adapting>document}
+% \gindex{converting>document}
+% \gindex{document>convert existing}
+%
+% \changes{v0.48}{2018/02/05}{Docs: Converting an existing document.}
+% \changes{v0.51}{2018/03/04}{Docs: Updated Converting an existing document.}
+% \changes{v0.66}{2019/02/07}{Docs: Updated Converting an existing document.}
+%
+% To convert an existing document for use with \pkg{lwarp}:
+% \begin{enumerate}
+% \item Arrange the document in the following order:
+% \begin{enumerate}
+% \item Declare the \cs{documentclass}.
+% \item Load text fonts.
+% \item Load \pkg{inputenc} or \pkg{inputenx}, \pkg{fontenc}, and/or \pkg{fontspec}.
+% \item Load \pkg{lwarp}.
+% \item Load remaining packages.
+% \end{enumerate}
+% \item Modify the document:
+% \begin{enumerate}
+% ^^A \item Remove \filenm{.pdf} file extensions. Change:
+% ^^A \begin{sourcedisplay}
+% ^^A \cs{includegraphics}\{filename.pdf\}
+% ^^A \end{sourcedisplay} to:
+% ^^A \begin{sourcedisplay}
+% ^^A \cs{includegraphics}\{filename\}
+% ^^A \end{sourcedisplay}
+% ^^A Other image formats may have a file extension.
+% \item \limitsmathinsectionnames
+% \item \limitsincludegraphicsscale
+% \item Possible changes to \env{tabular} environments include:
+% |*| columns, \pkg{multirow}, \pkg{longtable}, \pkg{supertabular}, \pkg{xtab},
+% \pkg{bigdelim}. See \cref{sec:limitstabular}.
+% \item Possible option clashes with \pkg{memoir}. See \cref{sec:limitsmemoir}.
+% \item If using indexes, see \cref{sec:indexsetup}.
+% \item If using many indexes, glossaries, |.aux| files, etc.,
+% see \cref{sec:indexsetup} regarding \pkg{morewrites}.
+% If \pkg{morewrites} is already used, be sure to add the setup with |allocate=10|.
+% \item Other changes as per \nameref{sec:limitations}, \cref{sec:limitations}.
+% \end{enumerate}
+% \item Convert any \PDF\ images to \SVG. See \cref{sec:limitsgraphics}.
+% \item Manually compile the print version with \prog{latex}, \prog{pdflatex},
+% \prog{lualatex}, or \prog{xelatex}.
+% \item |lwarpmk print| to finish the print version.
+% \item |lwarpmk html| to create the \HTML\ version.
+% \item |lwarpmk limages| to create the \SVG\ images of any \SVG\ math, \env{lateximage}, \tikz, etc.
+% \end{enumerate}
+%
+% \needhelp
+%
+% \clearpage
+%
+% \section{Additional details}
+%
+%
+% \subsection{Shell escape}
+% \label{sec:shellescape}
+% \gindex{shell escape}
+%
+% \DescribeOption{-\/-shell-escape}
+% Some documents require the use of an external program,
+% which is allowed when using the \optn{-\/-shell-escape} command-line option.
+% When the document is first compiled manually,
+% and also whenever the print version is recompiled,
+% \pkg{lwarp} detects and remembers
+% whether shell escape is enabled. If so, it will also be enabled when
+% the document is recompiled with \prog{lwarpmk}.
+%
+%
+% \subsection{Font and \UTF-8 support}
+% \label{sec:fonts}
+% \trouble{font>UTF-8}
+% \trouble{text>corrupted}
+% \trouble{font>selection}
+% \trouble{Unicode>fonts}
+% \gindex{font>selection}
+% \gindex{font>type 3 bitmapped}
+% \gindex{font>type 1 vector}
+% \gindex{type 1 vector fonts}
+% \gindex{type 3 bitmapped fonts}
+% \gindex{vector fonts}
+% \gindex{bitmapped fonts}
+% \gindex{Unicode>selection}
+% \gindex{UTF-8>selection}
+% \gindex{Computer Modern}
+% \gindex{Latin Modern font}
+% \gindex{DVI \LaTeX}
+% \changes{v0.16}{2016/04/08}{Docs: Font and UTF-8 support.}
+% \changes{v0.16}{2016/04/08}{Lwarp no longer selects fonts.}
+% \changes{v0.61}{2018/09/25}{Docs: Fonts.}
+%
+% \pkg{lwarp} uses \prog{pdftotext} to convert \PDF\ output into UTF-8-encoded
+% \watchout[type 3 bitmapped fonts]
+% text. This process requires that UTF-8 information be embedded in the \PDF\
+% file, which may prevent the use of older ``type 3'' bit-mapped fonts,
+% and of older packages such as \pkg{ae}.
+% The \pkg{lwarp} option \optn{pdftotextEnc} may be useful in some situations.
+% See \cref{sec:loading}.
+%
+% While using \DVI\ \prog{latex} or \PDF\ \prog{pdflatex},
+% \margintag{vector fonts}
+% if no font-related package is specified then the default
+% Computer Modern font is used, which may be a ``type 3'' bit-mapped font which may not
+% convert well to plain text. A ``type 1'' vector font is required.
+% \margintag{Computer Modern}%
+% \gindex{font>Computer Modern}\gindex{Computer Modern}%
+% \watchout[\prog{pdflatex}]%
+% \watchout[DVI \prog{latex}]%
+%
+% \DescribePackage{cm-super}
+% To use the updated \pkg{cm-super}'s type 1 fonts instead of Computer Modern,
+% install the \pkg{cm-super} font package.
+%
+% \DescribePackage{lmodern}
+% To use Latin Modern instead, add
+% \begin{sourcedisplay}
+% |usepackage{lmodern}|
+% \end{sourcedisplay}
+% to the preamble.
+%
+% \DescribePackage{dejavu}
+% Another useful option is the Deja Vu series of fonts, which have
+% an increased coverage of language and glyphs:
+% \begin{sourcedisplay}
+% |\usepackage{dejavu}|
+% \end{sourcedisplay}
+% \gindex{Deja Vu}%
+% \gindex{font>Deja Vu}%
+% \gindex{Unicode>enhanced coverage}%
+% \gindex{UTF-8>enhanced coverage}%
+%
+% While using \DVI\ \prog{latex} or \PDF\ \prog{pdflatex},
+% \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,
+% but may also be specified with another encoding such as |latin1|.
+% See the next section regarding index encoding.
+%
+% \XeLaTeX{} and \LuaLaTeX{} users must use the \pkg{fontspec} package.
+% \trouble[\prog{xelatex} and \prog{lualatex}]{xelatex=xe\LaTeX}
+% \trouble{lualatex=lua\LaTeX}
+% \trouble{fontspec=\pkg{fontspec}}
+% Do NOT use \pkg{fontenc}!
+%
+% Place \pkg{fontspec} or \pkg{fontenc}, \pkg{xunicode}, and other font and UTF-8 related commands
+% after the \cs{documentclass} command and before |\usepackage{lwarp}|.
+%
+% In some cases, \trouble[package conflicts]{font>package conflicts}
+% a package conflict may require that a font package be loaded
+% after \pkg{lwarp}, which should work as well:
+% \begin{enumerate}
+% \item |documentclass{article/book/report}| comes first, followed by any of:
+% \item Font and UTF-8 related commands:
+% \begin{itemize}
+% \item For \XeLaTeX{} or \LuaLaTeX:
+% \begin{itemize}
+% \item \pkg{fontspec} and font choices
+% \DescribePackage{fontspec}
+%
+% \medskip
+% \pkg{lwarp} sets the following to turn off \TeX{} ligatures during
+% \margintag{ligatures}
+% the generation of \HTML\ tags, and turn off common ligatures
+% in regular text, since older browsers may not display them correctly
+% and newer browsers can automatically re-create them.
+% \gindex{ligatures}
+% \gindex{font>ligatures}
+% \trouble{font>ligatures}
+% \vspace{-1ex}
+% \begin{Verbatim}[gobble=2,obeytabs,tabsize=4,frame=lines]
+% \defaultfontfeatures[\rmfamily]{Ligatures={NoCommon,TeX}}
+% \defaultfontfeatures[\sffamily]{Ligatures={NoCommon,TeX}}
+% \defaultfontfeatures[\ttfamily]{Ligatures=NoCommon}
+% \end{Verbatim}
+% \end{itemize}
+% \item For \prog{pdflatex}:
+% \begin{enumerate}
+% \item |\usepackage{lmodern}|, or other font-related packages
+% \DescribePackage{lmodern}
+% \gindex{font>packages}
+% \item |\usepackage[T1]{fontenc}|
+% \DescribePackage{fontenc}
+% \item |\usepackage[utf8]{inputenc}|, or |latin1|, etc. Or use \pkg{inputenx}.
+% \DescribePackage{inputenc}\DescribePackage{inputenx}
+% \item |\usepackage{newunicodechar}| along with related definitions.
+% \DescribePackage{newunicodechar}
+% \item To assist with the \PDF-\HTML\ conversion:
+% \begin{enumerate}
+% \item |\input glyphtounicode.tex|
+% \DescribeFile{glyphtounicode.tex}
+% \item |\input glyphtounicode-cmr.tex% from the pdfx package|
+% \item |\pdfgentounicode=1|
+% \end{enumerate}
+% \item Another option to assist with the \PDF-\HTML\ conversion:
+% \begin{itemize}
+% \item |\usepackage{cmap}|
+% \DescribePackage{cmap}
+% \end{itemize}
+% \item |\usepackage{textcomp}|
+% \DescribePackage{textcomp}
+% ^^A \item \pkg{microtype} is automatically used by \pkg{lwarp}
+% ^^A \DescribePackage{microtype}
+% ^^A to turn off f,q,t,T,Q ligatures for the same
+% ^^A \margintag{ligatures}
+% ^^A browser-related reasons shown above. Also, the monospaced font is used
+% ^^A during \HTML\ tag generation to turn off \TeX{} ligatures.
+% ^^A \gindex{ligatures}\gindex{font>ligatures}
+% \end{enumerate}
+% \end{itemize}
+% \item |\usepackage{lwarp}| (\cref{sec:loading}) goes after any of the above, followed by:
+% \item |\usepackage{newtxmath}| or other math-related font packages.
+% Many of these load \pkg{amsmath}, which must be loaded after \pkg{lwarp},
+% so they must also be loaded after \pkg{lwarp}.
+% \item |\setmonofont{TeX Gyre Cursor}| or similar may be required if using
+% \trouble[\pkg{fontspec} with traditional font packages]{font>monospace}
+% \trouble{font>ligatures}
+% \trouble{ligatures}
+% \XeLaTeX\ or \LuaLaTeX\ and \pkg{fontspec} along with
+% traditional font packages such as \pkg{txfonts}, \pkg{newtxtext}, etc.
+% This is required to turn off the monospaced font's ligatures
+% with \pkg{fontspec} after loading the traditional font packages.
+% Monospaced output ligatures must be turned off
+% to produce the correct \HTML\ characters.
+% \item \ldots{} the rest of the preamble and the main document.
+% \end{enumerate}
+%
+% In some cases, an external program may require a \UTF-8 ``locale''.
+% \watchout[UTF-8 locale]
+% See \cref{sec:utf8locale}.
+%
+%
+% \subsubsection{Indexes, glossaries, and encoding}
+% \gindex{UTF-8>index}
+% \gindex{index>UTF-8}
+%
+% \pkg{lwarp} uses the \prog{xindy} program to processes indexes.
+% \prog{xelatex} and \prog{lualatex} use \prog{xindy} and
+% \prog{pdflatex} uses \prog{texindy}.
+%
+% The \pkg{lwarp} option \optn{xindyLanguage} may be used to set the language option
+% for \pkg{xindy}, and the \optn{xindyCodepage} option may be used to set the codepage
+% option for \pkg{xindy}. These are used for
+% ^^A both
+% index
+% ^^A and glossary
+% generation.
+%
+%
+% \clearpage
+%
+% \subsection{\pkg{lwarp} package loading and options}
+% \label{sec:loading}
+% \gindex{settings>lwarp=\pkg{lwarp} package options}
+%
+% \begin{table}
+% \caption{\pkg{lwarp} package options\label{tab:options}}
+% \centering
+% \renewcommand{\arraystretch}{1.2}
+% \begin{tabular}{>{\ttfamily}lp{3.25in}}
+% Option & Description \\ \midrule
+% mathsvg & Show math using \SVG\ images. \\
+% mathjax & Show math using \brand{MathJax}. \\
+% latexmk & Use \prog{latexmk} for compiling documents. \\
+% dvips & Use \prog{dvips} and \prog{ps2pdf} to convert \DVI\ documents. \\
+% dvipdfm & Use \prog{dvipdfm} to convert \DVI\ documents. \\
+% dvipdfmx & Use \prog{dvipdfmx} to convert \DVI\ documents. \\
+% HomeHTMLFilename & The filename of the home page. \\
+% HTMLFilename & A prefix for the filenames of the remaining web pages. \\
+% PrintLatexCmd & The shell commands for \cmds{lwarpmk print}. \\
+% HTMLLatexCmd & The shell commands for \cmds{lwarpmk html}. \\
+% \midrule
+% \multicolumn{2}{l}{\small For indexing (\cref{sec:indexsetup}) and glossaries (\cref{sec:glossaries}):} \\
+% makeindex & Use \prog{makeindex} to generate indices. \\
+% xindy & Use \prog{xindy} to generate indices. \\
+% makeindexStyle & Set a custom style for \prog{makeindex}. \\
+% xindyStyle & Set a custom style for \prog{xindy}. \\
+% xindyLanguage & The \prog{xindy} language option used for index
+% ^^A and glossary
+% generation. \\
+% xindyCodepage & The \prog{xindy} codepage option used for index
+% ^^A and glossary
+% generation. \\
+% PrintIndexCmd & Shell commands executed by \cmds{lwarpmk printindex}. \\
+% HTMLIndexCmd & Shell commands executed by \cmds{lwarpmk htmlindex}. \\
+% LatexmkIndexCmd & Shell commands executed by \prog{latexmk}. \\
+% GlossaryCmd & Shell command executed by \cmds{lwarpmk printglossary} and \cmds{lwarpmk htmlglossary}. \\
+% \midrule
+% \multicolumn{2}{l}{\small Seldom necessary:} \\
+% OSWindows & Force compatibility with \brand{MS-Windows}. \\
+% pdftotextEnc & Set the encoding for \prog{pdftotext}. \\
+% lwarpmk & Generate a local copy of \filenm{lwarpmk.lua}. \\
+% \midrule
+% \multicolumn{2}{l}{\small Used internally by \pkg{lwarp}:} \\
+% warpprint & Generate print output, and also generate configuration files. \\
+% warpHTML & Generate \HTML\ output. \\
+% BaseJobname & The \cs{jobname} to use.
+% Set to the \cs{jobname} of the printed version even while generating \HTML. \\
+% \bottomrule
+% \end{tabular}
+% \end{table}
+%
+%
+% \pkg{lwarp} supports \pkg{book}, \pkg{report}, and \pkg{article} classes,
+% as well as the equivalent Koma-script classes and \pkg{memoir}, and
+% various CJK-related classes and packages.
+%
+% Load the \pkg{lwarp} package immediately after the font and UTF-8 setup commands.
+%
+% Package options may be set while loading \pkg{lwarp}, or later with
+% \begin{sourcedisplay}
+% \cs{lwarpsetup}\{\meta{key=value, \dots}\}
+% \end{sourcedisplay}
+%
+% \changes{v0.16}{2016/04/08}{Docs: Moved location of \cs{usepackage\{lwarp\}}.}
+% \changes{v0.19}{2016/05/25}{Docs: Math options.}
+% \DescribePackage{lwarp}
+% \gindex{lwarp=\pkg{lwarp}>loading}
+% \gindex{lwarp=\pkg{lwarp}>options}
+% \pkg{lwarp} package options are as follows:
+%
+% \begin{description}
+%
+% \item[\optn{mathsvg}, \optn{mathjax}:]
+% \DescribeOption{mathsvg}
+% \DescribeOption{mathjax}
+% ^^A \DescribeOption{mathKaTeX}
+% ^^A For math display, select \optn{mathsvg} (default), \optn{mathjax},
+% ^^A or \optn{mathKaTeX}.
+% For math display, select \optn{mathsvg} (default) or \optn{mathjax}.
+% For more information about the math options, see \cref{sec:limitsmath}.
+%
+%
+% \item[\optn{latexmk}:]
+% \DescribeOption{latexmk}
+% \DescribeDefault{false} Tells \prog{lwarpmk} to use \prog{latexmk} to recompile the
+% document several times if necessary.
+% Otherwise, \prog{lwarpmk} attempts to determing for itself whether to recompile.
+% See \cref{sec:htmlsettings}.
+%
+% \item[\optn{dvips}:]
+% \DescribeOption{dvips}
+% \DescribeDefault{false} Tells \prog{lwarpmk} to use \prog{dvips} and \prog{ps2pdf} to convert
+% \DVI\ output to \PDF.
+%
+% \item[\optn{dvipdfm}:]
+% \DescribeOption{dvipdfm}
+% \DescribeDefault{false} Tells \prog{lwarpmk} to use \prog{dvipdfm} to convert
+% \DVI\ output to \PDF.
+%
+% \item[\optn{dvipdfmx}:]
+% \DescribeOption{dvipdfmx}
+% \DescribeDefault{false} Tells \prog{lwarpmk} to use \prog{dvipdfmx} to convert
+% \DVI\ output to \PDF.
+%
+%
+% \item[\optn{HomeHTMLFilename}:]
+% \DescribeOption{HomeHTMLFilename}
+% \DescribeDefault{\{\}}
+% See \cref{sec:htmlsettings}.
+%
+%
+% \item[\optn{HTMLFilename}:]
+% \DescribeOption{HTMLFilename}
+% \DescribeDefault{\{\}}
+% See \cref{sec:htmlsettings}.
+%
+%
+% \item[\optn{PrintLatexCmd}:]
+% \DescribeOption{PrintLatexCmd}
+% \DescribeDefault{<automatic>} Sets the shell commands executed by \cmds{lwarpmk print}.
+% If not specified, will automatically be set according to the detected \LaTeX\ engine
+% and the use of \optn{-\/-shell-escape}.
+%
+%
+% \item[\optn{HTMLLatexCmd}:]
+% \DescribeOption{HTMLLatexCmd}
+% \DescribeDefault{<automatic>} Sets the shell commands executed by \cmds{lwarpmk html}.
+% If not specified, will automatically be set according to the detected \LaTeX\ engine
+% and the use of \optn{-\/-shell-escape}.
+%
+%
+% \item[\optn{makeindex}:]
+% \DescribeOption{makeindex}
+% \DescribeDefault{makeindex} Sets \optn{PrintIndexCmd}, \optn{HTMLIndexCmd},
+% and \optn{LatexmkImageCmd}
+% to use \prog{makeindex} when generating indexes with
+% \cmds{lwarpmk printindex}, \cmds{lwarpmk htmlindex}, or \prog{latexmk}.
+% If neither \optn{makeindex} nor \optn{xindy} is used, \optn{makeindex} is assumed.
+%
+%
+% \item[\optn{xindy}:]
+% \DescribeOption{xindy}
+% \DescribeDefault{makeindex} Sets \optn{PrintIndexCmd}, \optn{HTMLIndexCmd},
+% and \optn{LatexmkImageCmd}
+% to use \prog{xindy} when generating indexes with
+% \cmds{lwarpmk printindex}, \cmds{lwarpmk htmlindex}, or \prog{latexmk}.
+%
+%
+% \item[\optn{makeindexStyle}:]
+% \DescribeOption{makeindexStyle}
+% \DescribeDefault{lwarp.ist}
+% If you wish to use a custom |.ist| file for
+% index generation, see \cref{sec:handlingpackageoptions}.
+%
+%
+% \item[\optn{xindyStyle}:]
+% \DescribeOption{xindyStyle}
+% \DescribeDefault{lwarp.xdy}
+% If you wish to use a custom |.xdy| file for
+% index generation, see \cref{sec:handlingpackageoptions}.
+%
+%
+% \item[\optn{xindyLanguage}:]
+% \DescribeOption{xindyLanguage}
+% \DescribeDefault{english} If using an index or glossary,
+% see \cref{sec:handlingpackageoptions}.
+%
+%
+% \item[\optn{xindyCodepage}:]
+% \DescribeOption{xindyCodepage}
+% \DescribeDefault{utf8} If using an index,
+% ^^A or glossary,
+% see \cref{sec:handlingpackageoptions}.
+%
+%
+% \item[\optn{PrintIndexCmd}:]
+% \DescribeOption{PrintIndexCmd}
+% \DescribeDefault{<automatic>} Sets the shell commands executed by \cmds{lwarpmk printindex}.
+% If not specified, will be set by the selection of \optn{makeindex} or
+% \optn{xindy}. May be used to specify the creation of multiple indexes.
+% See \cref{sec:indexsetup}.
+%
+% \needspace{2\baselineskip}
+% Examples:
+% \begin{sourcedisplay}
+% \small
+% makeindex -s lwarp.ist projectname.idx \hfill (\prog{makeindex}) \\
+% xindy -M lwarp.xdy -L english -C utf8 projectname.idx \hfill (\prog{xindy})
+% \end{sourcedisplay}
+%
+% The use of the \optn{makeindex} or \optn{xindy} options sets \optn{PrintIndexCmd}
+% \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.
+%
+% If specifying \optn{PrintIndexCmd} manually,
+% \trouble{PrintIndexCmd}
+% \trouble[xindy]{xindy=\pkg{xindy}>options>PrintIndexCmd=\optn{PrintIndexCmd}}
+% be sure to assign an \prog{xindy}
+% language and codepage with the |-L| and |-C| \prog{xindy} options, as the
+% \pkg{lwarp} \optn{xindyLanguage} and \optn{xindyCodepage} options are not
+% used for the \optn{PrintIndexCmd} option when it is set manually.
+%
+% This option is stored in the configuration files \filenm{lwarpmk.conf}
+% and \filenm{*.lwarpmkconf}, and is then passed by the \cmds{lwarpmk printindex}
+% command to the operating system to compile the print indexes.
+% Since the command string is parsed by \TeX, written to a file,
+% read from the file by Lua\TeX, and finally passed to the operating system,
+% any attempt at quoting will be problematic. For complicated commands,
+% it would be best to create a shell script, and simply refer to the script
+% with the \pkg{lwarp} \optn{PrintIndexCmd} option.
+%
+%
+% \item[\optn{HTMLIndexCmd}:]
+% \DescribeOption{HTMLIndexCmd}
+% \DescribeDefault{<automatic>} Sets the shell commands executed by \cmds{lwarpmk htmlindex}.
+% If not specified, will be set by the selection of \optn{makeindex} or
+% \optn{xindy}. May be used to specify the creation of multiple indexes.
+% See \cref{sec:indexsetup}.
+%
+% \needspace{2\baselineskip}
+% Example settings are similar to \optn{PrintIndexCmd},
+% \trouble[filenames]{HTMLIndexCmd>filenames}
+% but append |_html| to the filenames:
+% \begin{sourcedisplay}
+% \small
+% makeindex -s lwarp.ist projectname\textred{\_html}.idx \hfill (\prog{makeindex}) \\
+% xindy -M lwarp.xdy -L english -C utf8 projectname\textred{\_html}.idx \hfill (\prog{xindy})
+% \end{sourcedisplay}
+%
+% The use of the \optn{makeindex} or \optn{xindy} options sets \optn{HTMLIndexCmd}
+% \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.
+%
+% If specifying \optn{HTMLIndexCmd} manually,
+% \trouble[xindy]{xindy=\pkg{xindy}>options>HTMLIndexCmd=\optn{HTMLIndexCmd}}
+% be sure to assign an \prog{xindy}
+% language and codepage with the |-L| and |-C| \prog{xindy} options, as the
+% \pkg{lwarp} \optn{xindyLanguage} and \optn{xindyCodepage} options are not
+% used for the \optn{HTMLIndexCmd} option when it is set manually.
+%
+% As with \optn{PrintIndexCmd}, to generate complicated indexes it may be
+% worthwhile to use a shell script, then refer to that script with \optn{HTMLIndexCmd}.
+%
+%
+% \item[\optn{LatexmkIndexCmd}:]
+% \DescribeOption{LatexmkIndexCmd}
+% \DescribeDefault{<automatic>} Sets the shell commands executed by \prog{latexmk}.
+% Unlike \optn{PrintIndexCmd} and \optn{HTMLIndexCmd}, \optn{LatexmkIndexCmd}
+% does not include any filenames, which will be provided instead by \prog{latexmk}.
+% See \cref{sec:indexsetup}.
+%
+% \needspace{2\baselineskip}
+% Example settings are similar to \optn{PrintIndexCmd}, but without a filename:
+% \begin{sourcedisplay}
+% \small
+% makeindex -s lwarp.ist \hfill (\prog{makeindex}) \\
+% xindy -M lwarp.xdy -L english -C utf8 \hfill (\prog{xindy})
+% \end{sourcedisplay}
+%
+% The use of the \optn{makeindex} or \optn{xindy} options sets \optn{LatexmkIndexCmd}
+% \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.
+% 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.
+%
+% If specifying \optn{LatexmkIndexCmd} manually,
+% \trouble[xindy]{xindy=\pkg{xindy}>options>LatexmkIndexCmd=\optn{LatexmkIndexCmd}}
+% be sure to assign an \prog{xindy}
+% language and codepage with the |-L| and |-C| \prog{xindy} options, as the
+% \pkg{lwarp} \optn{xindyLanguage} and \optn{xindyCodepage} options are not
+% used for the \optn{LatexmkIndexCmd} option when it is set manually.
+%
+%
+% \item[\optn{GlossaryCmd}:]
+% \DescribeOption{GlossaryCmd}
+% \DescribeDefault{\cmds{makeglossaries}} Sets the shell command
+% executed by \cmds{lwarpmk printglossary} and \cmds{lwarpmk htmlglossary}.
+% The print or \HTML\ glossary filename is appended to this command.
+% See \cref{sec:glossaries}.
+%
+%
+% \item[\optn{OSWindows}:]
+% \DescribeOption{OSWindows} \pkg{lwarp} attempts to automatically sense \brand{Windows},
+% but it may be forced with this option.
+% See \cref{sec:OSportabilityusage}.
+%
+%
+% \item[\optn{pdftotextEnc}:]
+% \DescribeOption{pdftotextEnc}
+% \DescribeDefault{UTF-8} Used to specify
+% the encoding used by \prog{pdftotext} during the \PDF-\HTML\ conversion.
+% In most situations, the default is the correct choice.
+%
+%
+% \item[\optn{lwarpmk}:]
+% \DescribeOption{lwarpmk} If you wish to have \pkg{lwarp} generate a local
+% copy of \filenm{lwarpmk.lua} for archival or local-installation purposes,
+% compile the print version with the \optn{lwarpmk} option set.
+% See \cref{sec:handlingpackageoptions}.
+%
+% \begin{quote}
+% \hrule
+% The following options are used internally by \pkg{lwarp}, and
+% usually are not used in the user's document:
+% \smallskip
+% \hrule
+% \end{quote}
+%
+%
+% \item[\optn{warpprint} and \optn{warpHTML}:]
+% \DescribeOption{warpprint}
+% \DescribeOption{warpHTML}
+% Usually controlled by \prog{lwarpmk}, and not set in the document.
+% Select the \optn{warpprint} option to generate print output (default),
+% or the \optn{warpHTML} option to generate \HTMLfive\ output.
+% The default is print output, so the print version may be
+% compiled with the usual \prog{pdflatex}, etc.
+% When \pkg{lwarp} is loaded in print mode, it creates
+% |<project>_html.tex|, which sets the \optn{warpHTML} option before calling
+% the user's source code |<project>.tex|. In this way, |<project>.tex|
+% can |\usepackage{lwarp}| without any options to create a printed version,
+% while |<project>_html.tex| will create an \HTML\ version.
+%
+%
+% \item[\optn{BaseJobname}:]
+% \DescribeOption{BaseJobname}
+% \DescribeDefault{\cs{jobname}} Not intended for the user.
+% Used internally by \pkg{lwarp} when
+% creating the |*_html.tex| file used to compile the \HTML\ version.
+% See \cref{sec:handlingpackageoptions}.
+%
+% \end{description}
+%
+% \clearpage
+%
+% \subsection{Customizing the \HTML\ output}
+% \label{sec:htmlsettings}
+% \gindex{settings>HTML conversion}
+% \gindex{HTML>conversion settings}
+%
+% \changes{v0.43}{2017/11/04}{Docs: \HTML\ settings table.}
+% \changes{v0.43}{2017/11/06}{Docs: Reorganized \HTML\ customization.}
+% \changes{v0.61}{2018/09/25}{Docs: HTMLDebugComments}
+% \begin{table}[p]
+% \caption{\HTML\ settings}
+% \label{tab:htmlsettings}
+% \begin{tabular}{>{\ttfamily}lp{3in}}
+% \toprule
+% Macro \Slash Cntr \Slash Bool & Description \\ \midrule
+% \cs{linkhomename} & Name of the link to the homepage. \\
+% \midrule
+% SideTOCDepth & Sectioning depth of the side\TOC. \\
+% \cs{sidetocname} & Name of the side\TOC. \\
+% \midrule
+% FileDepth & Sectioning depth of the file splits. \\
+% CombineHigherDepths & Combine higher section levels. \\
+% FileSectionNames & Use section names for file names, else use numbers. \\
+% \cs{FilenameLimit} & Maximum length of the generated filenames. \\
+% \midrule
+% FootnoteDepth & Sectioning depth of footnotes. \\
+% \midrule
+% \cs{abstractname} & The name of the abstract. \\
+% \cs{mathimagename} & The \SVG\ math image \env{lateximage} \attribute{alt} tag. \\
+% \cs{packagediagramname} & The suffix for a package's \env{lateximage} \attribute{alt} tags. \\
+% \midrule
+% \cs{CSSFilename} & The \CSS\ for the following files. \\
+% \cs{MathJaxFilename} & The MathJax script for the following files. \\
+% \midrule
+% \cs{HTMLLanguage} & The \HTML\ \attribute{lang} tag. \\
+% \cs{HTMLTitle} & The homepage's \element{title}, overriding \cs{title}. \\
+% \cs{HTMLTitleBeforeSection} & Set subpage \element{title}s to \newline
+% \fqquad \attribute{\cs{HTMLTitle} - sectionname} \\
+% \cs{HTMLTitleAfterSection} & Set subpage \element{title}s to \newline
+% \fqquad \attribute{sectioname - \cs{HTMLTitle}}\\
+% \cs{HTMLAuthor} & The \HTML\ \attribute{author} meta tag, overriding \cs{author}. \\
+% \cs{HTMLDescription} & The \HTML\ \attribute{description} meta tag. \\
+% \midrule
+% \cs{HTMLFirstPageTop} & Heading for the home page. \\
+% \cs{HTMLPageTop} & Heading for the other pages. \\
+% \cs{HTMLPageBottom} & Footing for all pages. \\
+% \midrule
+% HTMLDebugComments & Boolean to generate \HTML\ comments. \\
+% \bottomrule
+% \end{tabular}
+% \end{table}
+%
+% \Cref{tab:htmlsettings} shows several settings may be used
+% to customize the \HTML\ output.
+% Watch for the correct placement of each!\watchout[Placement!]
+%
+% Note that if changes are made,
+% \watchout[Changes!]
+% \trouble{HTML>settings>changed}
+% it is best to first:
+% \begin{enumerate}
+% \item Clear all the \HTML, \PDF, and auxiliary files: \userentry{lwarpmk clearall}
+% \item Recompile the print version in order to recreate
+% the configuration files for \prog{lwarpmk}: \userentry{lwarpmk print}
+% \item Finally, recompile the \HTML\ version with the new settings: \userentry{lwarpmk html}
+% \end{enumerate}
+%
+% \begin{description}[style=unboxed]
+%
+% \item[Options for the \pkg{lwarp} package:] \ \newline
+% Use the following as options for |\usepackage[<options>]{lwarp}|:
+%
+% \begin{description}
+%
+% \ItemDescribeOption{HomeHTMLFilename} \DescribeDefault{\cs{BaseJobname}}
+% Filename of the homepage, without
+% the ``\filenm{.html}'' suffix.
+% Defaults to the \cs{BaseJobname}. A common setting is:
+% \begin{sourcedisplay}
+% |HomeHTMLFilename=index|
+% \end{sourcedisplay}
+% causing the
+% homepage to be the file |index.html|. Underscores are allowed in
+% \margintag{filename underscores}
+% \optn{HomeHTMLFilename} and \optn{HTMLFilename} options, but may need to be escaped
+% elsewhere, such as when appearing in a list:
+% \gindex{underscore>filename}\gindex{filename>underscore in}
+% \changes{v0.24}{2017/03/13}{Docs: Filename underscore.}
+% \begin{sourcedisplay}
+% \cs{item} [\cs{href}\{file\textred{\textbackslash\_}name.pdf\}\{text\}] \textbackslash
+% \end{sourcedisplay}
+% See \cref{sec:filenameexamples} for examples of naming and numbering \HTML\ files.
+%
+% \ItemDescribeOption{HTMLFilename} \DescribeDefault{<empty>}
+% A filename prefix for the rest of the \HTML\ web pages.
+% Useful for numbered web pages with a common prefix. May be empty.
+% See \cref{sec:filenameexamples} for examples of naming and numbering \HTML\ files.
+%
+% \ItemDescribeOption{latexmk} \DescribeDefault{false}
+% Controls whether \pkg{lwarp} uses \prog{latexmk} to
+% compile the document. This setting is written to \prog{lwarpmk}'s configuration
+% files.
+%
+% \ItemDescribeOption{mathsvg} \DescribeDefault{true}
+% Selects \SVG\ display for math output. (The default.)
+%
+% \ItemDescribeOption{mathjax} \DescribeDefault{false}
+% Selects \brand{MathJax} for math output.
+%
+% ^^A \ItemDescribeOption{mathKaTeX} \DescribeDefault{false}
+% ^^A Selects Ka\TeX\ for math output.
+%
+% \ItemDescribeOption{makeindex} \DescribeDefault{makeindex}
+% Selects \prog{makeindex} for index generation by \prog{lwarpmk}.
+%
+% \ItemDescribeOption{xindy} \DescribeDefault{makeindex}
+% Selects \prog{xindy} for index generation by \prog{lwarpmk}.
+%
+% \end{description} \bigskip
+%
+% \item[Placed in the preamble before \texttt{\cs{begin}\{document\}}:] \
+%
+% \begin{description}
+%
+% \ItemDescribeMacro{\linkhomename} \DescribeDefault{Home}
+% Name of the link to the home page. Paragraphs are allowed.
+% Redefine with \cs{renewcommand}.
+% \changes{v0.63}{2018/11/29}{Docs: \cs{linkhomename}.}
+%
+% \ItemDescribeCounter{tocdepth} Sectioning depth of the table of contents.
+% See \cref{sec:stackdepths} for a list of \LaTeX{} stack depths.
+%
+% \ItemDescribeCounter{SideTOCDepth} \DescribeDefault{1}
+% Sectioning depth of the side\TOC.
+% Defaults to 1, causing the side\TOC\ to show sections but not subsections.
+%
+% Each subpage of the website has its own small table of contents
+% \margintag{side\TOC}
+% on the side (the ``side\TOC''). Its depth is set by |SideTOCDepth|.
+% This side\TOC\ is only shown if the web page is wide enough.
+% When using a narrow web browser window,
+% ``responsive web design'' is used to show the side\TOC\ at the top of the
+% page and a link back to \UI{Home} at the bottom.
+%
+% \label{sec:filedepth}
+% It is recommended to set:
+% \begin{sourcedisplay}
+% |SideTOCDepth|\,=\,|FileDepth|
+% \end{sourcedisplay}
+% or
+% \begin{sourcedisplay}
+% |SideTOCDepth|\,=\,|FileDepth|+1
+% \end{sourcedisplay}
+%
+% If |SideTOCDepth|\,<\,|FileDepth|,
+% \trouble[inaccessible pages]%
+% {HTML>missing pages>Side=\optn{SideTOCDepth} and \optn{FileDepth}}
+% web pages will be inaccessible via the side\TOC.
+% \trouble{file>inaccessible}
+% \trouble{page>inacessible}
+% \trouble{HTML>inaccessible pages}
+% \trouble{sectioning>missing}
+%
+% \ItemDescribeMacro{\sidetocname} \DescribeDefault{Contents}
+% Name of the side\TOC. Paragraphs are allowed.
+% Redefine with \cs{renewcommand}.
+% \changes{v0.63}{2018/11/29}{Docs: \cs{sidetocname}.}
+%
+% \ItemDescribeCounter{FileDepth} \DescribeDefault{-5}
+% Sectioning depth of file splits.
+% Defaults to -5, causing the entire \HTML\ website to be one single file.
+% \begin{itemize}
+% \item To place the entire file into one \HTML\ page, use:
+% \begin{sourcedisplay}
+% \cs{setcounter}\{FileDepth\}\{-5\}
+% \end{sourcedisplay}
+% \item To split the \HTML\ file at \cs{section} depth, use:
+% \begin{sourcedisplay}
+% \cs{setcounter}\{FileDepth\}\{1\}
+% \end{sourcedisplay}
+% \item To ensure that the \HTML\ pages/files are accessible:
+% \watchout\\
+% Place a \cs{tableofcontents} somewhere before the first section
+% break (therefore in the ``home page''), and set
+% \begin{sourcedisplay}
+% tocdepth\,>=\,FileDepth
+% \end{sourcedisplay}
+% \trouble{file>inaccessible}
+% \trouble{page>inacessible}
+% \trouble{HTML>inaccessible pages}
+% \trouble{sectioning>missing}
+% \end{itemize}
+%
+% \ItemDescribeBoolean{CombineHigherDepths} \DescribeDefault{true}
+% Combine a higher section with
+% its first lower subsections, down to the |FileDepth|.
+% Defaults to true. Set to false to simulate the concept of a chapter
+% opening on its own page, for example.
+%
+% The file splits are controlled by the counter |FileDepth| and
+% the boolean |CombineHigherDepths|.
+% Setting |FileDepth| to 0 splits the file
+% at chapters, 1 at sections, etc. |CombineHigherDepths| controls whether
+% to combine pages at levels higher than the chosen |FileDepth|, such as
+% in this tutorial where the page which opens the chapter also contains the
+% first section.
+% Be careful to set |tocdepth| and |SideTOCDepth| to allow
+% \trouble[Inaccesible pages!]%
+% {HTML>missing pages>Side=\optn{SideTOCDepth} and \optn{tocdepth}}
+% access to each page of the website. Set |tocdepth| and |SideTOCDepth| to be
+% greater than or equal to |FileDepth|.
+%
+% When making changes to the file structure,
+% \trouble[Lost in an old page!]{HTML>page did not update}
+% it is possible to end up
+% with the web browser pointing to an old file which is no longer in use.
+% When this occurs, changes to the web site will not appear in the browser,
+% even if reloading the page, because that page is no longer in use.
+% It is best to return to the home page, clean the files (|lwarpmk cleanall|),
+% change |FileDepth| and/or |CombineHigherDepths|, then finally recompile and
+% renavigate to the desired page using the new file structure.
+%
+% \ItemDescribeBoolean{FileSectionNames} \DescribeDefault{true}
+% If true, web page filenames are derived from a sanitized version
+% 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.
+% \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.
+% \gindex{filename>unique}
+%
+% \ItemDescribeMacro{\FilenameLimit} \DescribeDefault{80}
+% \gindex{filename>length}
+% The maximum length of the filenames generated by \pkg{lwarp}.
+% ``\filenm{.html}'' is added to this length.
+% Redefine with \cs{renewcommand}.
+%
+% \ItemDescribeCounter{FootnoteDepth} \DescribeDefault{3}
+% Determines where to place pending footnotes.
+% |3| places footnotes before each break down to the \cs{subsubsection} level.
+% |1| places footnotes before each \cs{section} break.
+% Any pending footnotes are also placed at the bottom of each page
+% before each file break.
+%
+% \ItemDescribeBoolean{HTMLDebugComments} \DescribeDefault{false}
+% Set |true| to generate \HTML\ comments, such as which section or \element{div}
+% is being opened or closed.
+%
+% \ItemDescribeMacro{\abstractname} \DescribeDefault{Abstract}
+% The name of the abstract.
+% This may also be over-written
+% by the \pkg{babel} package. Defaults to ``|Abstract|''.
+% Redefine with \cs{renewcommand}.
+%
+% \end{description}
+%
+% \needspace{2\baselineskip}
+% \item[Placed before \texttt{\cs{begin}\{document\}},
+% or before any sectioning command which causes a file break:] \
+%
+% \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
+% cause a file split.
+%
+% The \CSS\ styles of the web pages are set by the \cs{CSSFilename} command.
+% If \cs{CSSFilename} is not used, a default plain style is used to mimic printed
+% \LaTeX\ output. |lwarp_sagebrush.css| is a semi-fancy colored style as shown
+% 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.
+%
+% \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
+% cause a file split.
+%
+% The MathJax script file is copied into the head of each \HTML\ file.
+% This may be used to point to a local repository, add extensions, or change
+% the script somewhere in the middle of the document.
+% \cs{MathJaxFilename} may be used before each file break to set the script file for
+% individual pages of the website.
+%
+% \ItemDescribeMacro{\HTMLLanguage} \marg{langauge} \DescribeDefault{en-US} \quad
+% The \HTML\ file's \HTML\ \attribute{lang} meta tag.
+% Defaults to \attribute{en-US}.
+%
+% \ItemDescribeMacro{\HTMLTitle} \marg{title} \DescribeDefault{\cs{thetitle}} \quad
+% \gindex{HTML>meta tag>title}
+% Overrides \cs{title} for the \HTML\ header's meta title.
+% Defaults to \cs{thetitle}, which is set by \cs{title}, or empty otherwise.
+% Unlike the author, \cs{thetitle} is set by \cs{title} even if not using the \pkg{titling} package.
+%
+% \ItemDescribeMacro{\HTMLTitleBeforeSection} \DescribeDefault{\cs{HTMLTitleBeforeSection}}
+% Sets subpage \element{title} tags to show the website title followed
+% by the section name.
+%
+% \ItemDescribeMacro{\HTMLTitleAfterSection}
+% Sets subpage \element{title} tags to show the section name
+% followed by the website title.
+%
+% To customize subpage \element{title}s, redefine \cs{theHTMLTitleSection},
+% \margintag{custom \element{title}}
+% which defaults to:
+% \gindex{HTML>meta tag>title}
+% \begin{sourcedisplay}
+% \cs{def}\cs{theHTMLTitleSection}\{\% \\
+% \fquad\cs{theHTMLTitle}\cs{theHTMLTitleSeparator}\cs{theHTMLSection}\% \\
+% \}
+% \end{sourcedisplay}
+%
+%
+% \ItemDescribeMacro{\HTMLAuthor} \marg{author} \DescribeDefault{\cs{theauthor}} \quad
+% The \HTML\ header's meta author.
+% Defaults to \cs{theauthor},
+% which is set by \cs{author} if using the \pkg{titling} package,
+% but is empty otherwise.
+% There are several ways to represent the author and affiliations,
+% especially if using the \pkg{authblk} package, most of which do not result in
+% a sensible \cs{theauthor}, so \cs{HTMLAuthor} is useful to create a list of
+% authors without their affiliations.
+%
+% \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
+% cause a file split.
+%
+% \ItemDescribeMacro{\HTMLFirstPageTop} \marg{contents} \DescribeDefault{<empty>} \quad
+% A user-definable custom action applied
+% to the top of the home page. Useful for logos, etc.
+% Defaults empty.
+% Ignored in print output.
+%
+% \ItemDescribeMacro{\HTMLPageTop} \marg{contents} \DescribeDefault{<empty>} \quad
+% A user-definable custom action applied to
+% the top of pages other than the home page. Useful for logos, etc.
+% Defaults empty.
+% \cs{LinkHome} may be used to place a link back to the homepage.
+% Ignored in print output.
+%
+% \ItemDescribeMacro{\HTMLPageBottom} \marg{contents} \DescribeDefault{<empty>} \quad
+% A user-definable custom action applied to the
+% bottom of each web page.
+% Useful for authors, copyright notices, contact information, etc.
+% Defaults empty.
+% \cs{LinkHome} may be used to place a link back to the homepage.
+% Ignored in print output.
+%
+% \end{description}
+%
+%
+% \needspace{2\baselineskip}
+% \item[Placed in the home page before the first sectioning command which causes a file break:] \
+%
+% \begin{description}
+% \ItemDescribeMacro{\tableofcontents}
+% Used to place a table of contents on the home page.
+% This command must be used before the first file split,
+% \trouble[TOC on the homepage!]{Table of Contents>missing}
+% \trouble{HTML>inaccessible pages}
+% so that a way is available to navigate to other files from the homepage.
+%
+% Links to each chapter/section are provided, as selected by |tocdepth|.
+% \end{description}
+%
+%
+% \needspace{2\baselineskip}
+% \item[Placed in the document wherever necessary:] \
+%
+% \begin{description}
+%
+% \ItemDescribeMacro{\mathimagename} \DescribeDefault{math image}
+% \label{sec:mathimagename}
+% Redefine with \cs{renewcommand}.
+% \describemathimagename
+%
+% \ItemDescribeMacro{\packagediagramname} \DescribeDefault{diagram}
+% \label{sec:packagediagramname}
+% Redefine with \cs{renewcommand}.
+% \describepackagediagramname
+%
+% \ItemDescribeEnv{warpprint} An environment which is only used
+% while generating print output. Place inside anything which does not
+% apply to \HTML\ and which may cause problems with \pkg{lwarp}.
+% If \pkg{lwarp} knows about and emulates or supports
+% a package then its related macros, lengths, counters, etc. probably won't have
+% to be placed inside a \env{warpprint} environment, but unknown packages
+% may cause problems which may be isolated from \pkg{lwarp} using this environment.
+%
+% \emph{Do not place anything else on the same line as \texttt{\cs{end}\{warpprint\}}}.
+% \watchout
+%
+% \ItemDescribeEnv{warpHTML} An environment which is only used
+% while generating \HTML\ output. This is useful for website logos and
+% other items which have no purpose in printed output.
+%
+% \emph{Do not place anything else on the same line as \texttt{\cs{end}\{warpHTML\}}}.
+% \watchout
+%
+% \ItemDescribeMacro{\warpprintonly} \marg{contents} \quad
+% A macro version of the \env{warpprint} environment.
+%
+% \ItemDescribeMacro{\warpHTMLonly} \marg{contents} \quad
+% A macro version of the \env{warpHTML} environment.
+% \end{description}
+%
+% \end{description}
+%
+%
+% \subsubsection{Example \HTML\ file naming}
+% \label{sec:filenameexamples}
+% \gindex{HTML>filename generation}
+% \changes{v0.20}{2016/09/11}{Docs: Examples for generating \HTML\ file names.}
+%
+% Examples of ways to name or number \HTML\ files:
+% \begin{description}
+% \item[Numbered \HTML\ nodes:] \
+%
+% Example: Homepage |index.html|, and |node-1|, |node-2|.
+% \footnote{See \cs{SetHTMLFileNumber} to number in groups by chapter, for example.}
+% \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
+% \usepackage[
+% HomeHTMLFilename=index,
+% HTMLFilename={node-}
+% ]{lwarp}
+% \boolfalse{FileSectionNames}
+% \end{Verbatim}
+%
+% \item[Named \HTML\ sections, no prefix:] \
+%
+% Example: |index.html|, and |About.html|, |Products.html|
+% \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
+% \usepackage[
+% HomeHTMLFilename=index,
+% HTMLFilename={}
+% ]{lwarp}
+% \booltrue{FileSectionNames}
+% \end{Verbatim}
+%
+% \item[Named \HTML\ sections, with prefix:] \
+%
+% Example: Homepage |mywebsite.html|, and additional pages such
+% as \\
+% |mywebsite-About.html|, |mywebsite-Products|, etc.
+% \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
+% \usepackage[
+% HomeHTMLFilename=mywebsite,
+% HTMLFilename={mywebsite-}
+% ]{lwarp}
+% \booltrue{FileSectionNames}
+% \end{Verbatim}
+% \end{description}
+%
+%
+% \subsection{Customizing the \CSS}
+% \label{sec:csscustomization}
+%
+% \DescribeMacro{\CSSFilename} \marg{filename} \DescribeDefault{lwarp.css}
+%
+% \cs{CSSFilename} may be used to choose which |.css| file is used to display
+% each page of the web site. Use \cs{CSSFilename} before |\begin{document}|
+% to assign the style of the home page.
+% If different parts of the website should have different styles,
+% call \cs{CSSFilename} again before each section heading which creates a new file.
+% This may be changed numerous times throughout the file, resulting in
+% different \HTML\ pages having different \CSS\ files assigned:
+% \begin{Verbatim}[gobble=2,tabsize=4]
+% ...
+% \CSSFilename{myCSS.css}
+% \chapter{Another Chapter}
+% ...
+% \end{Verbatim}
+% \gindex{CSS>file selection}
+% \gindex{CSS>per \HTML\ page}
+% \gindex{settings>CSS selection}
+%
+% The styles provided by \pkg{lwarp} include:
+% \begin{description}
+% \item[|lwarp.css|:] A default style if \cs{CSSFilename} is not used. This
+% style is comparable to a plain \LaTeX\ document.
+% To set this style, you may use |\CSSFilename{lwarp.css}|, or no \cs{CSSFilename} call at all.
+% \item[|lwarp\_formal.css|:] A formal style with a serif fonts and a traditional
+% look.
+% \item[|lwarp\_sagebrush.css|:] A style with muted colors, gradient backgrounds,
+% additional borders, and rounded corners.
+% \end{description}
+%
+% To see each style in use, change the \cs{CSSFilename} entry in the tutorial,
+% |lwarpmk html| again, and then reload the tutorial webpage.
+%
+% A customized style may also be created.
+% \margintag{Custom \CSS}
+% For each new project a file
+% called |sample_project.css| is generated. This may be renamed to
+% |<project>.css| then used by assigning |\CSSFilename{<project>.css}|.
+%
+% Note that |sample_project.css| is overwritten whenever \pkg{lwarp}
+% is loaded in print mode.
+% It is therefore important to rename the file
+% \trouble[Rename it!]{sample=\filenm{sample_projects.css}>overwritten}
+% to something like |<project>.css| before
+% using it, so that your own changes are not overwritten.
+%
+% |<project>.css| has an entry which loads |lwarp.css|, and this
+% entry may be changed to load |lwarp_formal.css| or |lwarp_sagebrush.css| if
+% desired. Additional changes to the \CSS\ may be made by making entries
+% later in the |<project>.css| file.
+%
+% \label{sec:projectcss}
+% \DescribeFile{lwarp.css}\DescribeFile{project.css}\DescribeFile{sample_project.css}\label{sec:lwarpcss}
+% It is best to make a local project-specific \CSS\ file such as |project.css|, containing only
+% things which are different from |lwarp.css|.
+% The file |project.css| should refer to |lwarp.css| as follows:
+% \gindex{CSS>project-specific changes}\gindex{CSS>lwarp.css=\filenm{lwarp.css}}
+% \gindex{settings>CSS project-specific}
+% \vspace{-2ex}
+% \VerbatimInput[frame=lines]{sample_project.css}
+%
+% Finally use |\CSSFilename{<project>.css}| in the document to activate the custom \CSS.
+%
+%
+% \subsection{Selecting the operating system}
+% \label{sec:OSportabilityusage}
+% \changes{v0.11}{2016/03/11}{Added section: Selecting the operating system.}
+%
+% \osportabilityusage
+%
+%
+% \subsection{Selecting actions for print or \HTML\ output}
+% \label{sec:selectingoutput}
+% \gindex{settings>selecting output}
+% \changes{v0.15}{2016/04/05}{Docs: Clarify print/\HTML\ output.}
+%
+% The following environments and macros are used to select actions which only apply
+% to either traditional \LaTeX{} print-formatted \PDF\ generation,
+% or to \HTML\ generation.
+%
+% For most of built-in \LaTeX\ and many additional packages
+% there is user-level source code support or emulation,
+% so no special handling will be required.
+% For those cases which \pkg{lwarp} does not handle by itself, the
+% following environments and macros may be used to isolate sections
+% of code for print-only or \HTML-only.
+%
+% These environments are also useful for creating a special version of
+% the titlepage for print and another for \HTML.
+
+% \DescribeEnv{warpHTML}
+% Anything which is to be done only for \HTMLfive{} output
+% is surrounded by a |warpHTML| environment:
+% \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
+% \begin{warpHTML}
+% ... something to be done only during \HTML\ generation
+% \end{warpHTML}
+% \end{Verbatim}
+% Do \emph{not} place anything else on the same line as |\end{warpHTML}|.
+% \trouble[\texttt{\cs{end}\{warpHTML\}}]{warpHTML}
+% The exact phrase is used to mark the end of the environment.
+%
+% \DescribeEnv{warpprint}
+% Anything which is to be done only for print output
+% is surrounded by a |warpprint| environment:
+% \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
+% \begin{warpprint}
+% ... something to be done only during traditional \PDF\ generation
+% \end{warpprint}
+% \end{Verbatim}
+% As above, do not place anything else on the line with |\end{warpprint}|.
+% \trouble[\texttt{\cs{end}\{warpprint\}}]{warpprint}
+%
+% \DescribeEnv{warpall}
+% Anything which is to be done for any output
+% may be surrounded by a |warpall| environment. Doing so is optional.
+% \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
+% \begin{warpall}
+% ... something to be done during print \PDF\ or \HTML\ output
+% \end{warpall}
+% \end{Verbatim}
+% As above, do not place anything else on the line with |\end{warpall}|.
+%
+%
+% Macros are also provided for print-only or \HTML-only code:
+%
+% \DescribeMacro{\warpprintonly} \marg{actions}
+%
+% Performs the given actions only when print output is being generated.
+%
+% \DescribeMacro{\warpHTMLonly} \marg{actions}
+%
+% Performs the given actions only when \HTML\ output is being generated.
+%
+%
+%
+% \subsection{Commands to be placed into the \env{warpprint} environment}
+% \label{sec:printcommands}
+%
+% \changes{v0.14}{2016/03/26}{Docs: Commands into a warpprint environment.}
+%
+% Certain print-related commands should always be placed
+% inside a \env{warpprint} environment, or may need other special handling.
+% These are unrelated to \HTML\ output, but are hard to isolate automatically.
+% For example:
+%
+% \begin{itemize}
+% \item Paragraph formatting: \cs{parindent} \cs{parskip}
+% \item Manual page positions such as the \pkg{textpos} package, which is
+% emulated but only in a limited way.
+% \item Anything changing the |page| counter. \pkg{lwarp} requires that the
+% |page| counter not be adjusted during \HTML\ output.
+% \end{itemize}
+%
+% Some packages require additional setup commands. Where these packages are emulated
+% for \HTML, setup commands may work for the emulated \HTML\ output as well as for print
+% output. See the details for each package in this document for more information.
+%
+% Also see \cref{sec:troubleshooting}: \nameref{sec:troubleshooting}.
+%
+%
+%
+%
+%
+%
+% \subsection{Title page}
+% \label{sec:settitle}
+% \gindex{settings>title page}
+%
+% In the preamble, place an additional block of code to set the following:
+% \vspace{-2em}
+% \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
+% \title{Document Title} % One line only
+% \author{Author One\affiliation{Affiliation One} \and
+% Author Two\affiliation{Affiliation Two} }
+% \date{Optional date}
+% \end{Verbatim}
+%
+% The title is used in the meta tags in the \HTML\ files,
+% unless overridden by \cs{HTMLTitle}, and the rest are used in \cs{maketitle}.
+% To use a \cs{subtitle} or \cs{published} field, see \cref{sec:publishedsubtitle}.
+%
+%
+% \DescribeMacro{\maketitle}
+% Use \cs{maketitle} just after the |\begin{document}|, as this will establish
+% the title of the homepage. Optionally, use a \env{titlepage} environment instead.
+%
+% \DescribeEnv{titlepage}
+% The \env{titlepage} environment may be used to hold a custom title page.
+% The titlepage will be set in a \element{div} class |titlepage|, and \cs{printtitle}, etc.\ may be used
+% inside this environment.
+%
+% \DescribeEnv{titlingpage}
+% Another form of custom title page, where \cs{maketitle} is allowed, and
+% additional information may be included as well.
+%
+% \DescribeMacro{\title} \marg{title}
+%
+% Avoid newlines in the \cs{title}; these will interfere with the
+% file break and \CSS\ detection.
+% \trouble[newlines]{title>newlines}
+% \trouble{HTML>corrupted}
+% Use a \cs{subtitle} command instead (\cref{sec:publishedsubtitle}).
+% The title will appear in the document \cs{maketitle} as a heading \element{h1}.
+% The \HTML\ meta |title| tag will also have this title, unless \cs{HTMLTitle}
+% is used to set the meta title to something else instead.
+%
+% \DescribeMacro{\author} \marg{author}
+%
+% In \cs{author}, \cs{protect} may be needed before some formatting commands.
+% \trouble{author>formatting}
+% In \HTML, the author will appear in a \element{div} of class |author| in the
+% \cs{maketitle}.
+% If the \pkg{titling} package is used, the author will also appear in a \HTML\ meta tag, but
+% \cs{HTMLAuthor} may be necessary to create a plain list of names if
+% \cs{author} had affiliations added.
+% \cs{affiliation} is a new addition to \pkg{lwarp}.
+%
+% \DescribeMacro{\date} \marg{date}
+%
+% \cs{date} works as expected.
+% In \HTML, this will appear in a \element{div} class |titledate|.
+%
+%
+% \DescribeMacro{\thanks} \marg{text}
+%
+% \cs{thanks} are allowed in the titlepage fields, and will be rendered
+% as \HTML\ notes at the bottom of the title page.
+%
+%
+% \subsection{\HTML\ page meta descriptions}
+%
+% \label{sec:htmldescription}
+% \gindex{HTML>meta tag>description}
+% \gindex{description>HTML meta tag}
+% \gindex{meta tag, HTML>description}
+% \DescribeMacro{\HTMLDescription} \marg{A description of the web page.}
+% \DescribeDefault{(none)}
+%
+% Each page of \HTML\ output should have its own \HTML\ meta description,
+% which usually shows up in web search results,
+% \margintag{limitations}
+% is limited to around
+% 150 characters in length, and should not include the \acro{ASCII} double quote character (").
+%
+% Use \cs{HTMLDescription}
+% \margintag{placement}
+% just before |\begin{document}| to set the description of the home page,
+% and also just before each sectioning command such as \cs{chapter} or \cs{section}
+% where a new file will be generated, depending on |FileDepth|. For example, if |FileDepth| is 1,
+% use \cs{HTMLDescription} just before each \cs{section} command, and that description will be
+% placed inside the \HTML\ page for that \cs{section}. The same descrition will be used for
+% all following \HTML\ files as well, until reset by a new \cs{HTMLDescription}. It is best
+% to use a unique description for each \HTML\ file.
+%
+% To disable the generation of \HTML\ description meta tags,
+% \margintag{disabling}
+% use:
+% \begin{sourcedisplay}
+% \fqquad \cs{HTMLDescription}\{\}
+% \end{sourcedisplay}
+%
+%
+% \subsection{\HTML\ homepage meta title}
+%
+% \gindex{HTML>meta tag>title}
+% \gindex{title>HTML meta tag}
+% \gindex{meta tag, HTML>title}
+% \DescribeMacro{\HTMLTitle} \marg{title}
+% \DescribeDefault{\texttt{\cs{HTMLtitle}\{\cs{thetitle}\}}}
+%
+% Sets the contents of the web page \element{meta name="title"} element.
+% May be set empty to cancel the meta title tag.
+%
+% See \cref{sec:htmlsettings} for \cs{HTMLTitleBeforeSection} and
+% \cs{HTMLTitleAfterSection}, used to set the title for \HTML\ subpages.
+%
+%
+% \subsection{\HTML\ page meta author}
+%
+% \gindex{HTML>meta tag>author}
+% \gindex{author>HTML meta tag}
+% \gindex{meta tag, HTML>author}
+% \DescribeMacro{\HTMLAuthor} \marg{author}
+% \DescribeDefault{\texttt{\cs{HTMLAuthor}\{\cs{theauthor}\}}}
+%
+% Sets the contents of the web page \element{meta name="author"} element.
+% May be set empty to cancel the meta author tag.
+%
+% \cs{author} may be used to create a list of authors and their affiliations,
+% in several formats if using \pkg{authblk}, and these may not successfully parse
+% properly into a sensible list for \cs{theauthor}.
+% \cs{HTMLAuthor} may be used to set the meta tag to a simple list of names.
+%
+%
+%
+% \section{Special cases and limitations}
+% \label{sec:limitations}
+%
+% \label{sec:successfulcommands}
+% \gindex{HTML>conversion suggestions}
+%
+% \changes{v0.14}{2016/03/26}{Docs: Commands for a successful \HTML\ conversion.}
+% \changes{v0.36}{2017/08/11}{Docs: Reorganized: Special cases and limitations.}
+%
+% Some commonly-used \LaTeX{} expressions should be modified as follows to allow
+% for a smooth conversion to both \HTML\ and print-formatted outputs.
+%
+% \needhelp
+%
+% \subsection{Things to avoid}
+% \label{sec:thingstoavoid}
+% \changes{v0.51}{2018/03/04}{Docs: Things to avoid.}
+%
+% In the document, avoid the following:
+%
+% \begin{description}
+% \item [\texttt{page} counter:] Do not adjust the \texttt{page} counter.
+% If doing so is required for the print version, place the
+% adjustment inside a \env{warpprint} environment.
+% \item [Custom math environment macros:] Do not use expressions such as
+% \cs{beq} as a replacement for \texttt{\cs{begin}\{equation\}}.
+% \item [Custom macros in section, figure, table names:] Custom macros which appear in
+% sectioning commands or float captions then appear in the
+% \filenm{.toc}, \filenm{.lof}, and \filenm{.lot} lists, and should be made robust
+% using \cs{newrobustcmd} or \cs{robustify} from \pkg{etoolbox}, \pkg{xparse}, etc.
+%
+% \changes{v0.54}{2018/04/21}{Docs: Macros in sectioning names.}
+% When setting |FileSectionNames| to |true| to name the \HTML\ files from the
+% section names, the file names are created from sanitized versions of the chapter
+% or section names, but the section names must be plain text or something
+% which expands into plain text. Robust macros will not work at the sectioning
+% level which is used for file names, but a robust macro or other complicated
+% name may be used for the manditory argument of \cs{chapter}, \cs{section}, etc.,
+% if a plain-text version is also included in the optional argument:
+% \begin{sourcedisplay}
+% \cs{chapter}[Plain Name]\{\cs{ARobustMacro\{Fancy Name\}}\}
+% \end{sourcedisplay}
+% \end{description}
+%
+%
+% \subsubsection{Invalid \HTML}
+% \label{sec:invalidhtml}
+%
+% \trouble{HTML>invalid}
+% \trouble{HTML>validation}
+% Additionally, some objects are valid \LaTeX, but invalid \HTML.
+% An example is a tabular inside \cs{textbf}, since \HTML\ does not allow a table
+% inside a span. \pkg{lwarp} will create the table, and the browser may support it,
+% but the result is technically invalid.
+%
+%
+%
+% \subsection{Formatting}
+%
+% \subsubsection{Text formatting}
+% \label{sec:avoidtextformatting}
+% \gindex{code listings}
+% \gindex{program listings}
+% \gindex{listings, program code}
+% \gindex{HTML>entities, conversion}
+% \gindex{HTML>verbatim, in}
+% \gindex{verbatim>code and \HTML\ tags}
+%
+% \changes{v0.61}{2018/09/25}{Docs: \HTML\ entities.}
+%
+% \limitstext
+%
+% \subsubsection{Horizontal space}
+%
+% \limitshspace
+%
+%
+% \subsubsection{Text alignment}
+%
+% Use the environments \env{center}, \env{flushright}, \env{flushleft} instead
+% of the macros \cs{centering}, \cs{raggedright}, \cs{raggedleft}.
+%
+% \limitsfloatalignment
+%
+%
+% \subsubsection{Accents}
+%
+% \limitsaccents
+%
+%
+% \subsubsection{\pkg{textcomp} package}
+%
+% \DescribePackage{textcomp}
+% \limitstextcomp
+%
+% \subsubsection{Superscripts and other non-math uses of math mode}
+%
+% Use \cs{textsuperscript\{x\}} instead of |$^{x}$|
+%
+% \subsubsection{Empty \cs{item} followed by a new line of text or a nested list:}
+%
+% Use a trailing backslash: |\item[label] \|
+% \margintag{lists}
+% \trouble{list>empty item}
+%
+%
+% \subsubsection{Filenames and \URL{}s in lists or footnotes}
+%
+% \gindex{underscore>filename}\gindex{filename>underscore in}
+% \gindex{list>filename}
+% \changes{v0.24}{2017/03/13}{Docs: Filename underscore.}
+% Escape underscores in
+% \margintag{filename underscore}
+% the filenames:
+% \begin{sourcedisplay}
+% |\item[\href{file\_name.pdf}{text}]|
+% \end{sourcedisplay}
+%
+%
+% \subsubsection{\pkg{relsize} package}
+%
+% \DescribePackage{relsize}
+% \limitsrelsize
+%
+%
+% \subsection{Boxes and minipages}
+%
+% \subsubsection{Marginpars}
+%
+% \limitsmarginpars
+%
+% \subsubsection{Save Boxes}
+%
+% \changes{v0.27}{2017/04/04}{Docs: Limitations of saveboxes.}
+%
+% \limitssaveboxes
+%
+%
+% \subsubsection{Minipages}
+% \label{sec:minipages}
+%
+% \limitsminipage
+%
+%
+% \subsubsection{Side-by-side minipages}
+%
+% Place side-by-side minipages inside a |center| environment,
+% with horizontal space between them, such as \cs{quad}, \cs{qquad},
+% \cs{hspace}, or \cs{hfill}. The result is similar in print and
+% \HTML. Do not use space commands at the start or end of the line.
+%
+% \subsubsection{Framed minipages and other environments}
+% \label{sec:framedminipages}
+%
+% \cs{fbox} can only be used around inline \element{span} items during
+% \HTML\ output, but \HTML\ cannot place a block element such as a \element{div} for a minipage
+% or a list inside of a \element{span}. Several options are provided for framing an object,
+% depending on which kind of object and which packages are loaded:
+%
+% For a framed object, options include:
+% \DescribeMacro{\fbox}
+% \DescribeMacro{\fboxBlock}
+% \DescribeEnv{fminipage}
+% \gindex{minipage>framed}
+% \gindex{framed objects}
+% \trouble{frames}
+% \begin{description}[style=unboxed]
+% \item [To remove the frame in \HTML\ output:] Place the \cs{fbox} command and
+% its closing brace inside \env{warpprint} environments.
+% This will nullify the frame for \HTML\ output.
+% \item [To frame the contents inline with some formatting losses in HTML:]
+% This is the default action of \cs{fbox} when enclosing a minipage.
+% \margintag{For inline text:}
+% During \HTML\ output, \cs{fbox} nullifies the \HTML\ tags
+% for \env{minipage}, \cs{parbox},
+% and lists. The contents are included as inline text inside the
+% \cs{fbox}'s \element{span} of class |framebox|.
+% For lists, line breaks are converted to \HTML\ breaks.
+% The result is a plain-text inline version of the contents, framed inline
+% with the surrounding text, but lacking any extra \HTML\ markup.
+% \item [To frame the contents on their own line with improved formatting in HTML:] A new
+% command \cs{fboxBlock} is included,
+% \margintag{For inline \env{minipage} and lists:}
+% intended to be a direct replacement
+% for \cs{fbox} for cases where the \cs{fbox} surrounds a minipage, table, or list.
+% For print output, this behaves as \cs{fbox}.
+% For \HTML\ output, the contents are placed
+% inside an \HTML\ \element{div} with the class |framed|, resulting in the contents
+% being placed on their own line with a frame surrounding them.
+% The contents preserve their \HTML\ formatting, so lists and minipages look nicer,
+% and valid \HTML\ is created for a \env{tabular}.
+% While an \cs{fbox} containing a \env{tabular} is valid \LaTeX\ code, the result
+% in \HTML\ is problematic since a table is a \element{div} not a \element{span},
+% so use \cs{fboxBlock} around a \env{tabular}, or else place the \env{tabular}
+% inside a \env{minipage}, or use \env{fminipage}, described next.
+% Also see below regarding the ``Misplaced alignment tab character \&.'' error.
+% \item [To create a framed minipage in both print and HTML:] A new environment \env{fminipage}
+% \margintag{For display \env{tabular}, minipages, and lists:}
+% is included. For print output, this is identical to \env{minipage}, except that
+% it is also framed.
+% For \HTML\ output, this forms a \element{div} of class |framed|, the contents
+% preserve their \HTML\ formatting, and valid \HTML\ is created for a \env{tabular}.
+% Also see \cref{sec:xcolorpatches} for a new environment \env{fcolorminipage}.
+% Also see below regarding the ``Misplaced alignment tab character \&.'' error.
+% \item [To create colored frames and boxes:] See \cref{sec:xcolor} for \pkg{xcolor}'s
+% \margintag{colored boxes and frames:}
+% \cs{colorbox} and \cs{fcolorbox},
+% and \pkg{lwarp}'s additional \cs{colorboxBlock} and \cs{fcolorboxBlock}.
+% \item [To frame tables or verbatim environments:] Place the contents
+% inside a \env{fminipage}, or perhaps a \cs{fboxBlock} for a \env{tabular}.
+% Also, if using \cs{fboxblock} with \env{tabular},
+% \trouble[Misplaced alignment tab character \&]
+% {Misplaced alignment tab character \&>frames}
+% you will have to use \cs{StartDefiningTabulars}
+% before the start of the macro which uses \cs{fboxBlock} and the \env{tabular},
+% and \cs{StopDefiningTabulars} afterwards.
+% Also see the \pkg{lwarp} documentation for the \pkg{fancybox} package.
+% \item [To frame equations:] See \cref{sec:fancybox} for the \pkg{fancybox} package.
+% \item [For fancy framed minipages:] See packages \pkg{boxedminipage2e},
+% \pkg{shadow}, \pkg{fancybox}, \pkg{framed}, \pkg{mdframed}.
+% \item [Custom environments:] Use a custom environment to create a sidebar,
+% containing a \env{BlockClass} environment
+% with custom \CSS\ formatting,
+% and |\warpprintonly{\hrule}| command:
+% \begin{Verbatim}[gobble=2,frame=lines]
+% \begin{BlockClass}{frameminipage}% ignored in print output
+% % use \CSS\ to format div class ``framedminipage''
+% \warpprintonly{\hrule} % only appears in print output
+% Contents
+% \warpprintonly{\hrule} % only appears in print output
+% \end{BlockClass}
+% \end{Verbatim}
+% \end{description}
+%
+%
+% \subsubsection{\pkg{fancybox} package}
+%
+% \DescribePackage{fancybox}
+% \limitsfancybox
+%
+%
+% \subsubsection{\pkg{mdframed} package}
+%
+% \DescribePackage{mdframed}
+% \limitsmdframed
+%
+%
+% \subsection{Section names}
+% \label{sec:limitssectionnames}
+%
+% If using named \HTML\ files, by selecting |\booltrue{FileSectionNames}|,
+% the generated filenames may be simplified by using \cs{FilenameSimplify}
+% and \cs{FilenameNullify}:
+%
+% \DescribeMacro{\FilenameSimplify} \marg{text}
+% \gindex{filename>simplify}
+% \gindex{section>file names}
+%
+% To remove common short words from the automatically-generated filenames,
+% replacing each with a single hyphen ``|-|'',
+% use \cs{FilenameSimplify}:
+% \begin{sourceverb}
+% \FilenameSimplify*{-in-}
+% \FilenameSimplify*{A-}
+% \end{sourceverb}
+% The first example removes the word ''in'' in the middle of a filename,
+% and the second example removes ``A'' at the start of the filename.
+% The star forces the arguments to be detokenized, which is required for
+% a plain-text comparison.
+% (The unstarred form is used for a token-sensitive comparison, which is
+% seldom required by the user.)
+% After simplfication, repeated hyphen characters will be further simplified
+% to a single hyphen ``|-|''.
+% Finally, single hyphens at the start or end of the filename are removed.
+%
+% \DescribeMacro{\FilenameNullify} \marg{macros}
+%
+% Macro names may appear in the automatically-generated file names.
+% \trouble[macros in section names]{sectioning>macro in name}
+% \trouble{filename>corrupted}
+% \trouble{filename>macro in name}
+% To remove these, create \emph{non-robust} nullified versions
+% of the macros,
+% ensuring that each line ends with a percent character |%| as shown below.
+% These are placed inside \cs{FilenameNullify}, which adds them to the
+% list of macros which are nullfiied during filename generation.
+% Low-level macros such as \cs{begingroup} will cause problems when
+% nullfied. Many macros such as \cs{textbf} are already nullfied.
+% \pkg{lwarp} also already nullifies built-in symbol and \pkg{textcomp} macros,
+% including if defined by \pkg{xunicode}, but not all \pkg{xunicode} macros.
+% See the definition of \cs{LWR@nullfonts} for a complete list.
+% \begin{sourcedisplay}
+% \cs{FilenameNullify}\{\textred{\%}\\
+% \fquad\cs{renewcommand*}\{\cs{macroname}\}[1]\{\#1\}\textred{\%}\\
+% \fquad\cs{renewcommand*}\{\cs{anothermacro}\}\{\}\textred{\%}\\
+% \}
+% \end{sourcedisplay}
+%
+% Avoid duplicate file names.
+% \trouble[duplicate filename]{filename>duplicate}
+% \trouble{duplcate filename}
+% \trouble{sectioning>duplicate name}
+% Section names at levels which result in \HTML\ file splits must
+% be unique. \pkg{lwarp} will generate an error if a duplicate
+% \HTML\ filename is generated.
+% Use the optional \TOC\ caption entry parameter for formatting.
+% Remember to \cs{protect} \LaTeX\ commands which appear in
+% section names and \TOC\ captions.
+%
+% \limitsmathinsectionnames
+%
+%
+% \subsection{Cross-references}
+%
+% \limitsreferences
+%
+% \subsubsection{Page references} The printed page does not translate
+% to the \HTML\
+% \trouble[\LaTeX\ page numbers]{page counter>references}
+% page, so \cs{pageref} references are converted to parentheses containing
+% \cs{pagerefPageFor}, which defaults to ``see~'',
+% followed by a hyperlink to the appropriate
+% object.
+%
+% Ex:
+% \begin{sourcedisplay}
+% \cs{ref}\{sec:name\} on page \cs{pageref}\{sec:name\} \\
+% \rmfamily
+% \hspace*{-2em} in \HTML\ becomes: \\
+% ``Sec.~\textred{1.23}
+% on page (\textbf{see}
+% sec.~\textred{1.23})''.
+% \end{sourcedisplay}
+% \cs{pagerefPageFor} may be redefined to ``page for '', empty, etc.
+% See \cpageref{sec:pagerefpagefor}.
+%
+%
+% \subsubsection{\pkg{cleveref} and \pkg{varioref} packages}
+%
+% \changes{v0.22}{2017/03/01}{\pkg{varioref}: Supported.}
+%
+% \DescribePackage{cleveref}
+% \DescribePackage{varioref}
+% \limitscpageref
+%
+% \subsubsection{Hyperlinks, \pkg{hyperref}, and \pkg{url}}
+%
+% \DescribePackage{hyperref}
+% \DescribePackage{url}
+% \limitshyperlinks
+%
+%
+% \subsubsection{Footnotes and page notes}
+% \label{sec:limitsfootnotes}
+%
+% \trouble{footnote>numbering}
+% \gindex{footnotes>numbering}
+% \trouble{footnote>in sectioning command}
+%
+% \limitsfootnotes
+%
+% \trouble{footnote>verbatim}
+% \trouble{verbatim>footnote}
+% \trouble{footnote>in math}
+% \trouble{math>footnote}
+% \limitsverbatimfootnotes
+%
+% \limitspfnote
+%
+% \limitsmanyfootbigfoot
+%
+%
+% \subsection{Front and back matter}
+% \label{sec:frontbackmatter}
+%
+% \subsubsection{Custom classes with multiple authors and affiliations}
+% \label{sec:authorsaffils}
+% \changes{v0.51}{2018/03/04}{Docs: Multiple authors and affiliations.}
+%
+% Some classes allow multiple authors and affiliations.
+% \gindex{author>multiple}\gindex{affiliation>multiple authors}
+% Often it is possible to emulate these using a standard class
+% along with \pkg{authblk}:
+% \begin{sourcedisplay}
+% \%\cs{documentclass}\{customclass\}~\% for print document \\
+% \cs{documentclass}\{article\}~\% for \HTML\ document \\
+% \\
+% \cs{usepackage}\{lwarp\} \\
+% \cs{begin}\{warpHTML\} \\
+% \cs{usepackage}\{authblk\} \\
+% \cs{let}\cs{affiliation}\cs{affil}~\% maybe required \\
+% \cs{end}\{warpHTML\}
+% \end{sourcedisplay}
+%
+% \subsubsection{Starred chapters and sections}
+% \label{sec:forcesectionstar}
+%
+% \changes{v0.38}{2017/08/24}{Docs: Starred sections.}
+%
+% The following describes \cs{ForceHTMLPage} and \cs{ForceHTMLTOC},
+% which may be used for \pkg{endnotes}, \pkg{glossaries}, \pkg{tocbibind},
+% bibliographies, and the index.
+% See the following sections where applicable.
+% Continue here if interested in the reason for adding these commands to \pkg{lwarp}.
+% \trouble{endnotes>HTML=\HTML\ page and \TOC}
+% \trouble{glossaries=\pkg{glossaries}>HTML=\HTML\ page and \TOC}
+% \trouble{bibliography>HTML=\HTML\ page and \TOC}
+% \trouble{index>HTML=\HTML\ page and \TOC}
+% \gindex{endnotes>HTML=\HTML\ page and \TOC}
+% \gindex{glossaries=\pkg{glossaries}>HTML=\HTML\ page and \TOC}
+% \gindex{bibliography>HTML=\HTML\ page and \TOC}
+% \gindex{index>HTML=\HTML\ page and \TOC}
+%
+% Some packages use \cs{chapter*} or \cs{section*} to introduce reference
+% material such as notes or lists, often to be placed in the back matter of a book.
+% These starred sections are placed inline instead of on their own \HTML\ pages,
+% and they are not given \TOC\ entries.
+%
+% \pkg{lwarp} provides a method to cause a starred section to be on its own \HTML\ page,
+% subject to \texttt{FileDepth}, and also a method to cause the starred section
+% to have its own \TOC\ entry during \HTML\ output.
+%
+% \DescribeMacro{\ForceHTMLPage}
+% To place a starred section on its own \HTML\ page, use \cs{ForceHTMLPage} just before
+% the \cs{chapter*} or \cs{section*}. \pkg{lwarp} will create a new page for the
+% starred sectional unit.
+%
+% A starred sectional unit does not have a \TOC\ entry unless one is placed
+% manually. The typical method using \cs{phantomsection} and \cs{addcontentsline}
+% works for inline text but fails when the new starred section is given its own
+% webpage after the \TOC\ entry is created, or when creating an \EPUB\ where
+% the \TOC\ entry will point to the page before the starred section.
+% If the starred section has its own \HTML\ page but no correct \TOC\ entry
+% \trouble[inaccessible \HTML\ page]{HTML>inaccessible pages>starred section}
+% \trouble{sectioning>starred section}
+% pointing to that page, the page will be inaccessible unless some other link is created.
+%
+% \DescribeMacro{\ForceHTMLTOC}
+% To automatically force the \HTML\ version of the document to have a \TOC\ entry
+% for a starred section, use \cs{ForceHTMLTOC} just before
+% the \cs{chapter*} or \cs{section*},
+% and place \cs{phantomsection} and \cs{addcontentsline} inside a \env{warpprint}
+% environment.
+%
+% For print output, \cs{ForceHTMLTOC} and \cs{ForceHTMLPage} have no effect.
+%
+%
+%
+% \subsubsection{\pkg{abstract} package}
+%
+% \DescribePackage{abstract}
+% \limitsabstract
+%
+%
+% \subsubsection{\pkg{titling} and \pkg{authblk}}
+%
+% \DescribePackage{titling}
+% \DescribePackage{authblk}
+% \limitstitlepage
+%
+%
+% \subsubsection{\pkg{tocloft} package}
+%
+% \DescribeOption[tocloft]{titles}
+% \DescribePackage{tocloft}
+% \limitstocloft
+%
+%
+% \subsubsection{\pkg{appendix} package}
+%
+% \DescribePackage{appendix}
+% \limitsappendix
+%
+%
+% \subsubsection{\pkg{pagenote} package}
+%
+% \DescribePackage{pagenote}
+% \limitspagenote
+%
+%
+% \subsubsection{\pkg{endnotes} package}
+%
+% \DescribePackage{endnotes}
+% \limitsendnotes
+%
+%
+% \subsubsection{\brand{BibTeX}}
+% \label{sec:limitsbibtex}
+% \DescribeMacro{\etalchar} Displays a superscript ``+'' to indicate ``and others''.
+% \changes{v0.54}{2018/03/09}{Docs: BibTeX.}
+%
+% \limitsbibtex
+%
+%
+% \needspace{6\baselineskip}
+% \subsubsection{\pkg{gloss} package}
+% \label{sec:gloss}
+%
+% \DescribePackage{gloss}
+% \gindex{gloss=\pkg{gloss}}
+% \trouble[compiling]{gloss=\pkg{gloss}}
+% \limitsgloss
+%
+% \needspace{10\baselineskip}
+% \subsubsection{\pkg{glossaries} package}
+% \label{sec:glossaries}
+%
+% \DescribePackage{glossaries}
+% \gindex{glossaries=\pkg{glossaries}>options}
+% \gindex{language>glossaries=\pkg{glossaries}}
+% \gindex{glossaries=\pkg{glossaries}>language}
+% \limitsglossaries
+%
+%
+% \subsubsection{\pkg{nomencl} package}
+% \label{sec:nomencl}
+%
+% \DescribePackage{nomencl}
+% \gindex{nomencl=\pkg{nomencl}}
+% \trouble{nomencl=\pkg{nomencl}}
+% \limitsnomencl
+%
+%
+% \subsubsection{Indexing overview}
+% \label{sec:indexingoverview}
+%
+% There are many ways to process indexes for a \LaTeX\ document,
+% including native \LaTeX\ capabilities, a number of packages and classes,
+% the possible availability of shell escape and \prog{latexmk}, and the
+% need to process print and \HTML\ versions.
+% \pkg{lwarp} attempts to provide easy recompilation of indexes along with
+% the rest of the document, but the various indexing options must be set correctly.
+% Numerous examples are given below.
+% Some differ in minor details, so the important parts are highlighted in red,
+% and options are in green.
+%
+% Once set up properly, the entire document may be recompiled with
+% \cmds{lwarpmk print} and \cmds{lwarpmk html}.
+% In some cases, it will also be necessary to compile the indexes with
+% \cmds{lwarpmk printindex} and \cmds{lwarpmk htmlindex}.
+% A recompile may then be forced with \cmds{lwarpmk print1} and \cmds{lwarpmk html1}.
+%
+% The user may continue to process indexes manually or by shell script
+% \margintag{manual processing}
+% without the use of \prog{lwarpmk}, but adjustments will be required to
+% process \HTML\ indexes as well. In general, \filenm{*.idx} and \filenm{*.ind} files
+% will be accompanied by \filenm{*_html.idx} and \filenm{*_html.ind} files.
+%
+% If using a custom indexing style file,
+% \margintag{custom index style}
+% see \cref{sec:modifymakeindex,sec:modifyxindy}.
+%
+% See \cref{sec:index} for \pkg{lwarp}'s core index and glossary code,
+% \margintag{source code}
+% \gindex{index>source code}
+% \cref{sec:indexpkg} for \pkg{index},
+% \cref{sec:splitidx} for \pkg{splitidx},
+% \cref{sec:imakeidx} for \pkg{imakeidx},
+% \cref{sec:tocbibind} for \pkg{tocbibind},
+% and \cref{sec:memoirbackmatter} for \pkg{memoir}'s indexing patches.
+%
+%
+% \subsubsection{Indexing with basic \LaTeX\ and \pkg{makeidx}}
+% \label{sec:indexsetup}
+%
+% \changes{v0.38}{2017/08/24}{Docs: Index, \pkg{tocbibind}.}
+% \changes{v0.58}{2018/06/14}{Docs: Index, \prog{makeindex}, \pkg{imakeidx}.}
+%
+% \gindex{xindy=\pkg{xindy}>and \pkg{hyperref}}
+% \gindex{hyperref=\pkg{hyperref}>and \pkg{xindy}}
+% \gindex{index>xindy=\pkg{xindy} and \pkg{hyperref}}
+% \trouble{index>missing entries}
+% \gindex{index>see, seealso, ranges}
+% \gindex{index>processing}
+%
+% The following allow the user to process indexes automatically, or
+% \margintag{\prog{lwarpmk} processing}
+% using \prog{lwarpmk}'s commands:
+% \userentry{lwarpmk printindex}
+% \userentry{lwarpmk htmlindex}
+%
+% \begin{description}
+%
+% \needspace{2\baselineskip}
+% \item [For a single index using \prog{makeindex}:]
+% \begin{sourcedisplay}
+% \cs{usepackage}\textred{[makeindex\textgreen{,latexmk}]}
+% \{\textblue{lwarp}\}
+% \end{sourcedisplay}
+% The usual \filenm{.idx} and \filenm{.ind} files will be used,
+% along with the new \filenm{lwarp.ist} style file.
+% When creating the \HTML\ index, ``\filenm{_html}'' is automatically appended
+% to each of the names.
+%
+% \prog{lwarpmk} will use \prog{latexmk} if specified, in which case
+% \prog{latexmk} will create the index automatically.
+% Otherwise, use \userentry{lwarpmk printindex} \userentry{lwarpmk htmlindex}
+% to compile the indexes.
+%
+% \needspace{8\baselineskip}
+% \item [For a single index using \prog{xindy}:]
+% \begin{sourcedisplay}
+% \cs{usepackage}[ \\
+% \fqquad \textred{xindy,} \\
+% \fqquad \textgreen{xindyLanguage=english,} \hfill \textrm{<optional>} \\
+% \fqquad \textgreen{xindyCodepage=utf8,} \hfill \textrm{<optional>} \\
+% \fqquad \textgreen{latexmk} \hfill \textrm{<optional>}\\
+% ]\{\textblue{lwarp}\}
+% \end{sourcedisplay}
+% The usual \filenm{.idx} and \filenm{.ind} files will be used,
+% along with the new \filenm{lwarp.xdy} style file.
+%
+% \prog{lwarpmk} will use \prog{latexmk} if specified, in which case
+% \prog{latexmk} will create the index automatically.
+% Otherwise, use \userentry{lwarpmk printindex} \userentry{lwarpmk htmlindex}
+% to compile the indexes.
+% \end{description}
+%
+%
+% \subsubsection{Indexing with \pkg{index}}
+%
+% \pkg{lwarp} is told how to use \prog{makeindex} using the
+% \optn{PrintIndexCmd} and \optn{HTMLIndexCmd} options.
+% The file \filenm{lwarp.ist} is specified, which generates index letter heads for
+% print output and also allows special \HTML\ formatting for \HTML\ output.
+%
+% \begin{description}
+%
+% \needspace{20\baselineskip}
+% \item [For multiple indexes using \prog{makeindex} and \pkg{index}:] \
+%
+% \textgreen{
+% (Assuming that the second index has file extensions \filenm{.sist} and \filenm{.sind})
+% }
+% \begin{sourcedisplay}
+% \cs{usepackage}[ \\
+% \fquad\textred{makeindex,} \textgreen{latexmk,} \\
+% \fquad\textred{PrintIndexCmd}=\{ \\
+% \fqquad makeindex -s lwarp.ist <projectname>.idx \textred{;} \\
+% \fqquad makeindex -s lwarp.ist \\
+% \fqqquad -o <projectname>\textred{.sind} <projectname>\textred{.sidx} \\
+% \fquad\}, \\
+% \fquad\textred{HTMLIndexCmd}=\{ \\
+% \fqquad makeindex -s lwarp.ist <projectname>\textred{\_html}.idx \textred{;} \\
+% \fqquad makeindex -s lwarp.ist \\
+% \fqqquad -o <projectname>\textred{\_html.sind} <projectname>\textred{\_html.sidx} \\
+% \fquad\} \\
+% ]\{\textblue{lwarp}\} \\
+% \cs{usepackage}\{\textblue{index}\} \\
+% \dots \\
+% \cs{makeindex} \\
+% \cs{newindex}\{secondname\}\{\textred{sidx}\}\{\textred{sind}\}\{Second Index\}
+% \end{sourcedisplay}
+% \emph{For \brand{Windows}, replace the two ``;'' characters with ``\&''.}\watchout[\brand{Windows}]
+%
+% When creating the \HTML\ index, ``\filenm{_html}'' is automatically appended
+% to the index filenames.
+%
+% Use \userentry{lwarpmk printindex} \userentry{lwarpmk htmlindex}
+% to compile the indexes.
+%
+% If the \optn{latexmk} option is selected for \pkg{lwarp},
+% \prog{latexmk} will compile the document but will \emph{not} compile the indexes.
+% \cmds{lwarpmk printindex} and \cmds{lwarpmk htmlindex} will still be required.
+%
+% \end{description}
+%
+%
+% \subsubsection{Indexing with \pkg{splitidx}}
+%
+% \pkg{lwarp} is told how to use \prog{splitindex} using the
+% \optn{PrintIndexCmd} and \optn{HTMLIndexCmd} options.
+% The file \filenm{lwarp.ist} is specified, which generates index letter heads for
+% print output and also allows special \HTML\ formatting for \HTML\ output.
+%
+% \limitssplitidx
+%
+% \begin{description}
+%
+% \needspace{16\baselineskip}
+% \item [For multiple indexes using \prog{makeindex} and \pkg{splitidx}:]
+% \begin{sourcedisplay}
+% \cs{usepackage}[ \\
+% \fquad\textred{makeindex,} \textgreen{latexmk,} \\
+% \fquad\textred{PrintIndexCmd}=\{ \\
+% \fqquad splitindex <projectname> \textred{-\/- -s lwarp.ist} \\
+% \fquad\}, \\
+% \fquad\textred{HTMLIndexCmd}=\{ \\
+% \fqquad splitindex <projectname>\textred{\_html} \textred{-\/- -s lwarp.ist} \\
+% \fquad\} \\
+% ]\{\textblue{lwarp}\} \\
+% \cs{usepackage}\{\textblue{splitidx}\} \\
+% \dots \\
+% \cs{makeindex} \\
+% \cs{newindex}[Second Index]\{secondname\} \\
+% \end{sourcedisplay}
+% When creating the \HTML\ index, ``\filenm{_html}'' is automatically appended
+% to each of the names.
+%
+% Use \userentry{lwarpmk printindex} \userentry{lwarpmk htmlindex}
+% to compile the indexes.
+%
+% \needspace{18\baselineskip}
+% \item [For multiple indexes using \prog{xindy} and \pkg{splitidx}:]
+% \begin{sourcedisplay}
+% \cs{usepackage}[ \\
+% \fquad\textred{xindy,} \textgreen{latexmk,} \\
+% \fquad\textred{PrintIndexCmd}=\{ \\
+% \fqquad splitindex \textred{-m xindy} <projectname> \textred{-\/- -M lwarp.xdy} \\
+% \fqqquad \textgreen{-L english -C utf8} \hfill{<optional>} \\
+% \fquad\}, \\
+% \fquad\textred{HTMLIndexCmd}=\{ \\
+% \fqquad splitindex \textred{-m xindy} <projectname>\textred{\_html} \textred{-\/- -M lwarp.xdy} \\
+% \fqqquad \textgreen{-L english -C utf8} \hfill{<optional>} \\
+% \fquad\} \\
+% ]\{\textblue{lwarp}\} \\
+% \cs{usepackage}\{\textblue{splitidx}\} \\
+% \dots \\
+% \cs{makeindex} \\
+% \cs{newindex}[Second Index]\{secondname\} \\
+% \end{sourcedisplay}
+% When creating the \HTML\ index, ``\filenm{_html}'' is automatically appended
+% to each of the names.
+%
+% Use \userentry{lwarpmk printindex} \userentry{lwarpmk htmlindex}
+% to compile the indexes.
+%
+% \end{description}
+%
+%
+%
+%
+% \subsubsection{Indexing with \pkg{imakeidx}}
+% \label{sec:indexingimakeidx}
+%
+% Due to the number of methods which may be used to process multiple indexes,
+% the options for style file and \prog{xindy} language and codepage must be
+% specified in one of several different ways. These are described in detail later in
+% this section, but are summarized here.
+%
+% If shell escape is used, \pkg{imakeidx} will automatically compile the indexes by itself.
+% Options specifying a custom style file and \prog{xindy} language and
+% codepage must be specified for each \cs{makeindex} command using its
+% \optn{options=} option, which must include
+% \pkg{lwarp}'s special \filenm{lwarp.ist} or \filenm{lwarp.xdy} file,
+% or a file based on them.
+% If using a custom indexing style file, see \cref{sec:modifymakeindex,sec:modifyxindy}.
+% The \optn{splitindex} option is also available of shell escape is used,
+% in which case the \pkg{splitidx} package and \prog{splitindex} program will also be used.
+%
+% If shell escape is not possible, \prog{latexmk} may be used to
+% automatically compile the indexes.
+% The style, language, and codepage options are specified with \pkg{lwarp}'s
+% \optn{makeindexStyle}, \optn{xindyStyle}, \optn{xindyLanguage}, and
+% \optn{xindyCodepage} options. These are passed to \prog{latexmk} by
+% \prog{lwarpmk}'s \cmds{lwarpmk} \cmds{printindex} and \cmds{lwarpmk} \cmds{htmlindex} commands.
+%
+% Where shell escape and \prog{latexmk} are not possible,
+% \prog{lwarpmk} may be used to manually compile the indexes.
+% \pkg{lwarp}'s \optn{PrintIndexCmd} and \optn{HTMLIndexCmd} options are used.
+%
+% \begin{description}
+% \needspace{2\baselineskip}
+% \item [For a single or multiple indexes using \prog{makeindex} and \pkg{imakeidx}:] \
+%
+% The index style \filenm{lwarp.ist} is automatically used for \HTML\ output.
+% This file turns on letter headings, so it may be desirable to specify it as
+% an option, in which case it will also be used for print output, which will
+% help match the print and \HTML\ output.
+% \begin{sourcedisplay}
+% \cs{usepackage}\textred{[makeindex\textgreen{,latexmk}]}
+% \{\textblue{lwarp}\} \\
+% \cs{usepackage}\textred{[makeindex]}\{\textblue{imakeidx}\} \\
+% \dots \\
+% \cs{makeindex}[\textgreen{options=\{-s lwarp.ist\}}] \\
+% \cs{makeindex}[name=secondname,\textgreen{options=\{-s lwarp.ist\}}] \\
+% \end{sourcedisplay}
+% \pkg{imakeidx} will automatically compile the indexes.
+% Shell escape is not required while using \prog{makeindex}.
+% \optn{latexmk} may be specified, and if so it will be used for
+% \cmds{lwarpmk print} and \cmds{lwarpmk html}, but \prog{imakeidx} will actually
+% create the indexes.
+%
+% \needspace{2\baselineskip}
+% \item [For a single or multiple indexes using \prog{makeindex} and \prog{splitindex} with \pkg{imakeidx}:] \
+%
+% The index style \filenm{lwarp.ist} is automatically used for \HTML\ output.
+% This file turns on letter headings, so it may be desirable to specify it as
+% an option, in which case it will also be used for print output, which will
+% help match the print and \HTML\ output.
+% \begin{sourcedisplay}
+% \cs{usepackage}\textred{[makeindex\textgreen{,latexmk}]}
+% \{\textblue{lwarp}\} \\
+% \cs{usepackage}\textred{[makeindex,splitindex]}\{\textblue{imakeidx}\} \\
+% \dots \\
+% \cs{makeindex}[\textgreen{options=\{-s lwarp.ist\}}] \\
+% \cs{makeindex}[name=secondname,\textgreen{options=\{-s lwarp.ist\}}] \\
+% \end{sourcedisplay}
+% Shell escape is required while using \prog{splitindex}.
+% For the first compile, use
+% \watchout[enable shell escape]
+% \userentry{pdflatex \textred{-\/-shell-escape} projectname.tex}
+% \userentry{pdflatex \textred{-\/-enable-write18} projectname.tex \quad \textrm{(MiKTeX)}}
+% or similar with \prog{xelatex} or \prog{lualatex}.
+% \pkg{lwarp} will remember that shell escape was used.
+%
+% \prog{imakeidx} will automatically execute \prog{splitindex},
+% and will also use \prog{makeindex} to compile the indexes.
+%
+% \optn{latexmk} may be specified, and if so it will be used for
+% \cmds{lwarpmk print} and \cmds{lwarpmk html}, but \prog{imakeidx} will actually
+% create the indexes.
+%
+% \needspace{2\baselineskip}
+% \item [For multiple indexes using \prog{xindy} and \pkg{imakeidx}, using shell escape:] \
+%
+% Options may be given to \pkg{imakeidx}'s \cs{makeindex} command.
+% The style file \filenm{lwarp.xdy} is automatically used for \HTML\ output,
+% and is not necessary for print output since the output will be similar.
+% If language or codepage must be set, they should be specified as
+% options for \cs{makeindex}, since \pkg{imakeidx} will process the indexes.
+% \begin{sourcedisplay}
+% \cs{usepackage}\textred{[xindy\textgreen{,latexmk}]}
+% \{\textblue{lwarp}\} \\
+% \cs{usepackage}\textred{[xindy\textgreen{,splitindex}]}\{\textblue{imakeidx}\} \\
+% \dots \\
+% \cs{makeindex}[ \\
+% \fquad \textgreen{options=\{ -M lwarp.xdy \textgreen{-L english -c utf8} \}} \\
+% ] \\
+% \cs{makeindex}[ \\
+% \fquad name=secondname, \\
+% \fquad \textgreen{options=\{ -M lwarp.xdy \textgreen{-L english -c utf8} \}} \\
+% ] \\
+% \end{sourcedisplay}
+% For the first compile, use
+% \watchout[enable shell escape]
+% \userentry{pdflatex \textred{-\/-shell-escape} projectname.tex}
+% \userentry{pdflatex \textred{-\/-enable-write18} projectname.tex \quad \textrm{(MiKTeX)}}
+% or similar with \prog{xelatex} or \prog{lualatex}.
+% \pkg{lwarp} will remember that shell escape was used.
+%
+% \prog{imakeidx} will automatically execute \prog{splitindex} if selected,
+% and will also use \prog{xindy} to compile the indexes.
+%
+% If selected, \prog{latexmk} will automatically recompile the entire document
+% as necessary.
+%
+% \needspace{14\baselineskip}
+% \item [For indexes using \prog{xindy} and \prog{imakeidx}, without shell escape,
+% but \emph{with} \prog{latexmk}:] \
+%
+% \pkg{lwarp}'s options are used, and are passed to \prog{latexmk}.
+%
+% \begin{sourcedisplay}
+% \cs{usepackage}[ \\
+% \fquad\textred{xindy,} \\
+% \fquad \textgreen{xindyLanguage=english,} \hfill \textrm{<optional>} \\
+% \fquad \textgreen{xindyCodepage=utf8,} \hfill \textrm{<optional>} \\
+% \fquad\textred{latexmk,} \\
+% ]\{\textblue{lwarp}\} \\
+% \cs{usepackage}\textred{[xindy]}\{\textblue{imakeidx}\} \\
+% \dots \\
+% \cs{makeindex} \\
+% \cs{makeindex}[name=secondname] \\
+% \end{sourcedisplay}
+% \prog{latexmk} will create the indexes automatically when
+% \cmds{lwarpmk print} and \cmds{lwarpmk html} are executed.
+%
+% \needspace{20\baselineskip}
+% \item [For indexes using \prog{xindy} and \prog{imakeidx}, without shell escape,
+% and \emph{without} \prog{latexmk}:] \
+%
+% \prog{lwarpmk} must be told how to create the indexes:
+% \begin{sourcedisplay}
+% \cs{usepackage}[ \\
+% \fquad\textred{xindy,} \\
+% \fquad\textred{PrintIndexCmd}=\{ \\
+% \fqquad xindy \textred{-M lwarp.xdy} \textgreen{-L english -C utf8} \\
+% \fqqquad <projectname>.idx \textred{;} \\
+% \fqquad xindy \textred{-M lwarp.xdy} \textgreen{-L english -C utf8} \\
+% \fqqquad secondname.idx \\
+% \fquad\}, \\
+% \fquad\textred{HTMLIndexCmd}=\{ \\
+% \fqquad xindy \textred{-M lwarp.xdy} \textgreen{-L english -C utf8} \\
+% \fqqquad <projectname>\textred{\_html}.idx \textred{;} \\
+% \fqquad xindy \textred{-M lwarp.xdy} \textgreen{-L english -C utf8} \\
+% \fqqquad secondname\textred{\_html}.idx \\
+% \fquad\} \\
+% ]\{\textblue{lwarp}\} \\
+% \cs{usepackage}\textred{[xindy]}\{\textblue{imakeidx}\} \\
+% \dots \\
+% \cs{makeindex} \\
+% \cs{makeindex}[name=secondname] \\
+% \end{sourcedisplay}
+% \emph{For \brand{Windows}, replace the two ``;'' characters with ``\&''.}\watchout[\brand{Windows}]
+%
+% \texttt{<projectname>} is the \cs{jobname}:
+% if compiling ``\filenm{name.tex}'', use the filenames \filenm{name.idx} and
+% \filenm{name_html.idx}.
+%
+% Use \userentry{lwarpmk printindex} \userentry{lwarpmk htmlindex}
+% to compile the indexes.
+% \end{description}
+%
+%
+% \subsubsection{Indexes with \pkg{memoir}}
+%
+% \begin{description}
+% \needspace{7\baselineskip}
+% \item [For a single index with \pkg{memoir} and \pkg{makeindex}:]
+% \begin{sourcedisplay}
+% \cs{documentclass}\{\textblue{memoir}\} \\
+% \cs{usepackage}\textred{[makeindex\textgreen{,latexmk}]}\{\textblue{lwarp}\} \\
+% \dots \\
+% \cs{makeindex}
+% \end{sourcedisplay}
+% The usual \filenm{.idx} and \filenm{.ind} files will be used,
+% along with the \filenm{lwarp.ist} style file.
+%
+% \prog{lwarpmk} will use \prog{latexmk} if specified, in which case
+% \prog{latexmk} will create the index automatically.
+% Otherwise, use \userentry{lwarpmk printindex} \userentry{lwarpmk htmlindex}
+% to compile the indexes.
+%
+% \needspace{9\baselineskip}
+% \item [For multiple indexes with \pkg{memoir} and \pkg{makeindex},
+% using \prog{latexmk}:] \
+%
+% \pkg{lwarp}'s options are used, and are passed to \prog{latexmk}.
+% \begin{sourcedisplay}
+% \cs{documentclass}\{\textblue{memoir}\} \\
+% \cs{usepackage}\textred{[makeindex,latexmk]}\{\textblue{lwarp}\} \\
+% \dots \\
+% \cs{makeindex} \\
+% \cs{makeindex}[secondname]
+% \end{sourcedisplay}
+% \prog{lwarpmk} will use \prog{latexmk} to create the indexes automatically
+% when the user executes \cmds{lwarpmk print} and \cmds{lwarpmk html}.
+%
+% \needspace{19\baselineskip}
+% \item [For multiple indexes with \pkg{memoir} and \pkg{makeindex},
+% \emph{without} \pkg{latexmk}:] \
+%
+% \prog{lwarpmk} must be told how to create the indexes:
+% \begin{sourcedisplay}
+% \cs{documentclass}\{\textblue{memoir}\} \\
+% \cs{usepackage}[ \\
+% \fquad\textred{makeindex,} \\
+% \fquad\textred{PrintIndexCmd}=\{ \\
+% \fqquad makeindex \textred{-s lwarp.ist} <projectname>.idx \textred{;} \\
+% \fqquad makeindex \textred{-s lwarp.ist} secondname.idx \\
+% \fquad\}, \\
+% \fquad\textred{HTMLIndexCmd}=\{ \\
+% \fqquad makeindex \textred{-s lwarp.ist} <projectname>\textred{\_html}.idx \textred{;} \\
+% \fqquad makeindex \textred{-s lwarp.ist} secondname\textred{\_html}.idx \\
+% \fquad\} \\
+% ]\{\textblue{lwarp}\} \\
+% \dots \\
+% \cs{makeindex} \\
+% \cs{makeindex}[secondname] \\
+% \end{sourcedisplay}
+% \emph{For \brand{Windows}, replace the two ``;'' characters with ``\&''.}\watchout[\brand{Windows}]
+%
+% \texttt{<projectname>} is the \cs{jobname}:
+% if compiling ``\filenm{name.tex}'', use the filenames \filenm{name.idx} and
+% \filenm{name_html.idx}.
+%
+% Use \userentry{lwarpmk printindex} \userentry{lwarpmk htmlindex}
+% to compile the indexes.
+%
+% \needspace{13\baselineskip}
+% \item [For a single index with \pkg{memoir} and \pkg{xindy}:]
+% \begin{sourcedisplay}
+% \cs{documentclass}\{\textblue{memoir}\} \\
+% \cs{usepackage}[ \\
+% \fqquad \textred{xindy,} \\
+% \fqquad \textgreen{xindyLanguage=english,} \hfill \textrm{<optional>} \\
+% \fqquad \textgreen{xindyCodepage=utf8,} \hfill \textrm{<optional>} \\
+% \fqquad \textgreen{latexmk} \hfill \textrm{<optional>}\\
+% ]\{\textblue{lwarp}\} \\
+% \dots \\
+% \textred{\cs{xindyindex}} \\
+% \cs{makeindex}
+% \end{sourcedisplay}
+% The usual \filenm{.idx} and \filenm{.ind} files will be used,
+% along with the \filenm{lwarp.xdy} style file.
+%
+% \prog{lwarpmk} will use \prog{latexmk} if specified, in which case
+% \prog{latexmk} will create the index automatically.
+% Otherwise, use \userentry{lwarpmk printindex} \userentry{lwarpmk htmlindex}
+% to compile the indexes.
+%
+% \needspace{17\baselineskip}
+% \item [For multiple indexes with \pkg{memoir} and \pkg{xindy},
+% using \pkg{latexmk}:] \
+%
+% \pkg{lwarp}'s options are used, and are passed to \prog{latexmk}.
+% \begin{sourcedisplay}
+% \cs{documentclass}\{\textblue{memoir}\} \\
+% \cs{usepackage}[ \\
+% \fqquad \textred{xindy,} \\
+% \fqquad \textgreen{xindyLanguage=english,} \hfill \textrm{<optional>} \\
+% \fqquad \textgreen{xindyCodepage=utf8,} \hfill \textrm{<optional>} \\
+% \fqquad \textred{latexmk} \\
+% ]\{\textblue{lwarp}\} \\
+% \dots \\
+% \textred{\cs{xindyindex}} \\
+% \cs{makeindex} \\
+% \cs{makeindex}[secondname] \\
+% \end{sourcedisplay}
+% \prog{lwarpmk} will use \prog{latexmk} to create the indexes automatically.
+%
+% \needspace{24\baselineskip}
+% \item [For multiple indexes with \pkg{memoir} and \pkg{xindy},
+% \emph{without} \pkg{latexmk}:] \
+%
+% \prog{lwarpmk} must be told how to create the indexes:
+% \begin{sourcedisplay}
+% \cs{documentclass}\{\textblue{memoir}\} \\
+% \cs{usepackage}[ \\
+% \fquad\textred{xindy,} \\
+% \fquad\textred{PrintIndexCmd}=\{ \\
+% \fqquad xindy \textred{-M lwarp.xdy} \textgreen{-L english -C utf8} \\
+% \fqqquad <projectname>.idx \textred{;} \\
+% \fqquad xindy \textred{-M lwarp.xdy} \textgreen{-L english -C utf8} \\
+% \fqqquad secondname.idx \\
+% \fquad\}, \\
+% \fquad\textred{HTMLIndexCmd}=\{ \\
+% \fqquad xindy \textred{-M lwarp.xdy} \textgreen{-L english -C utf8} \\
+% \fqqquad <projectname>\textred{\_html}.idx \textred{;} \\
+% \fqquad xindy \textred{-M lwarp.xdy} \textgreen{-L english -C utf8} \\
+% \fqqquad secondname\textred{\_html}.idx \\
+% \fquad\} \\
+% ]\{\textblue{lwarp}\} \\
+% \dots \\
+% \textred{\cs{xindyindex}} \\
+% \cs{makeindex} \\
+% \cs{makeindex}[secondname] \\
+% \end{sourcedisplay}
+% \emph{For \brand{Windows}, replace the four ``;'' characters with ``\&''.}\watchout[\brand{Windows}]
+%
+% \texttt{<projectname>} is the \cs{jobname}:
+% if compiling ``\filenm{name.tex}'', use the filenames \filenm{name.idx} and
+% \filenm{name_html.idx}.
+%
+% Use \userentry{lwarpmk printindex} \userentry{lwarpmk htmlindex}
+% to compile the indexes.
+% \end{description}
+%
+%
+% \subsubsection{Using a custom \prog{makeindex} style file}
+% \label{sec:modifymakeindex}
+%
+% \DescribeProgram{makeindex}
+% \DescribeFile{lwarp.ist}
+% When using \prog{makeindex}, \prog{lwarpmk} uses the file |lwarp.ist| to process the index.
+% \gindex{lwarp.ist=\filenm{lwarp.ist}>customizing}
+% \gindex{makeindex>customizing}
+% \gindex{index>custom \pkg{makeindex} style file}
+% This file is over-written by \pkg{lwarp} whenever a print version of
+% the document is processed.
+%
+% To use a custom \prog{makeindex} style file:
+% \begin{enumerate}
+% \item Copy |lwarp.ist| to a new filename such as |projectname.ist|
+% \item Make changes to |projectname.ist|.
+% Keep the lines which refer to \cs{hyperindexref}.
+% These lines creates the hyperlinks for the \HTML\ index. During print output
+% \cs{hyperindexref} becomes a null function.
+% \item In the document source use the \optn{makeindexStyle} option for \pkg{lwarp}:
+% \DescribeOption{makeindexStyle}
+% \begin{Verbatim}[gobble=2,tabsize=4]
+% \usepackage[
+% ... other options ...
+% \textred{makeindexStyle=projectname.ist},
+% ]{lwarp}
+% \end{Verbatim}
+% Likewise, refer to the custom style file if using \cs{PrintIndexCmd},
+% \cs{HTMLIndexCmd}, or \cs{LatexmkIndexCmd}.
+% \item Recompile the print version, which causes
+% \pkg{lwarp} to rewrite the |lwarpmk.conf| configuration file.
+% This tells \prog{lwarpmk} to use the custom |projectname.ist| file
+% instead of |lwarp.ist|.
+% \end{enumerate}
+%
+%
+% \subsubsection{Using a custom \prog{xindy} style file}
+% \label{sec:modifyxindy}
+%
+% \DescribeProgram{xindy}
+% \DescribeFile{lwarp.xdy}
+% When using \prog{xindy}, \prog{lwarpmk} uses the file |lwarp.xdy| to process the index.
+% \gindex{lwarp.xdy=\filenm{lwarp.xdy}>customizing}
+% \gindex{xindy=\pkg{xindy}>customizing}
+% \gindex{index>custom \pkg{xindy} style file}
+% This file is over-written by \pkg{lwarp} whenever a print version of
+% the document is processed.
+%
+% To use a custom \prog{xindy} style file:
+% \begin{enumerate}
+% \item Copy |lwarp.xdy| to a new filename such as |projectname.xdy|
+% \item Make changes to |projectname.xdy|.
+%
+% Keep the lines which refer to \cs{hyperindexref}:
+% \begin{Verbatim}[gobble=2,tabsize=4]
+% (define-attributes (("hyperindexref")))
+% (markup-locref :open "\hyperindexref{" :close "}")
+% ...
+% (markup-locref :open "\textit{\hyperindexref{" :close "}}" :attr "textit")
+% \end{Verbatim}
+% These lines create the hyperlinks for the \HTML\ index. During print output
+% \cs{hyperindexref} becomes a null function.
+%
+% To create custom styles, refer to the lines for \cs{textbf} and \cs{textit}.
+% \item In the document source use the \optn{xindyStyle} option for \pkg{lwarp}:
+% \DescribeOption{xindyStyle}
+% \begin{Verbatim}[gobble=2,tabsize=4]
+% \usepackage[
+% ... other options ...
+% \textred{xindyStyle=projectname.xdy},
+% ]{lwarp}
+% \end{Verbatim}
+% Likewise, refer to the custom style file if using \cs{PrintIndexCmd},
+% \cs{HTMLIndexCmd}, or \cs{LatexmkIndexCmd}.
+% \item Recompile the print version, which causes
+% \pkg{lwarp} to rewrite the |lwarpmk.conf| configuration file.
+% This tells \prog{lwarpmk} to use the custom |projectname.xdy| file instead of |lwarp.xdy|.
+% \end{enumerate}
+%
+%
+% \subsubsection{Additional indexing limitations}
+% \prog{xindy} and \pkg{hyperref} may not work well together for print output
+% \trouble[\pkg{xindy} with \pkg{hyperref}]{xindy=\pkg{xindy}>hyperref=\pkg{hyperref}}
+% \trouble{index>xindy=\pkg{xindy} and \pkg{hyperref}}
+% \trouble{index>see and seealso}
+% \trouble{index>reference ranges}
+% \trouble{index>styling references}
+% with ``see'', ``see also'', reference ranges, or stylized index references.
+% It may be necessary to turn off hyper-referencing for indexes:
+% \begin{sourcedisplay}
+% \cs{usepackage}\textred{[hyperindex=false]}\{hyperref\}
+% \end{sourcedisplay}
+%
+% If an \HTML\ index is empty, it may be necessary to add the following
+% \trouble[empty index]{index>empty}
+% \trouble{morewrites=\pkg{morewrites}}
+% before \pkg{lwarp} is loaded:
+% \begin{sourcedisplay}
+% \textred{\cs{usepackage}\{morewrites\}} \\
+% \textred{\cs{morewritessetup}\{allocate=10\}} \\
+% \dots \\
+% \cs{usepackage}\{lwarp\}
+% \end{sourcedisplay}
+%
+% When using \prog{makeindex}, custom display styles are possible:
+% \gindex{index>custom display styles}
+% \margintag{\prog{makeindex} custom display styles}
+% \begin{sourcedisplay}
+% \cs{begin}\{warpprint\} \\
+% \cs{newcommand}\{\cs{notesstyle}\}[1]\{\#1nn\} \\
+% \cs{end}\{warpprint\} \\
+% ~ \\
+% \cs{begin}\{warpHTML\} \\
+% \cs{makeatletter} \\
+% \cs{newcommand}\{\cs{notesstyle}\}[1]\{\cs{LWR@doindexentry}\{\#1\} notes \} \\
+% \cs{makeatother} \\
+% \cs{end}\{warpHTML\} \\
+% \dots \\
+% A sentence.\cs{index}\{key\textbar{}notesstyle\}
+% \end{sourcedisplay}
+%
+% For custom styles with \prog{xindy},
+% \margintag{\prog{xindy} custom display styles}
+% see \filenm{lwarp.xdy} for \cs{textbf} and \cs{textit} as examples.
+%
+%
+% \subsubsection{Index positions, \TOC, \pkg{tocbibind}}
+% \limitstocbibind
+%
+% \limitstocloft
+%
+%
+%
+% \subsection{Math}
+%
+% \changes{v0.42}{2017/10/30}{Docs: Reorganized math limitations}
+% \label{sec:limitsmath}
+%
+% \limitsmath
+%
+% \subsubsection{Catcode changes}
+% \label{sec:mathcatcode}
+% \limitsmathcatcode
+%
+% \subsubsection{Complicated inline math objects}
+% \label{sec:mathdynamic}
+% \gindex{inline math>complicated objects}
+% \gindex{math>inline with complicated objects}
+% \gindex{math>dynamic}
+% \gindex{dynamic math}
+% \limitsmathinline
+%
+% \subsubsection{Complicated display math objects}
+% \label{sec:displaymathother}
+% \gindex{display math>complicated objects}
+% \gindex{math>display with complicated objects}
+% \gindex{math>dynamic}
+% \gindex{dynamic math}
+% \trouble{math>tikz=\tikz}
+% \trouble{tikz>in math}
+% \trouble{MathJax=\brand{MathJax}>errors}
+% \trouble{HTML>alt tags}
+% \trouble{alt tags}
+%
+% \limitsmathdisplay
+%
+% \subsubsection{\pkg{ntheorem} package}
+%
+% \DescribePackage{ntheorem}
+% \limitsntheorem
+%
+%
+% \subsubsection{\pkg{siunitx} package}
+% \label{sec:limitssiunitx}
+%
+% \DescribePackage{siunitx}
+% \limitssiunitx
+%
+%
+% \subsubsection{\pkg{units} and \pkg{nicefrac} packages}
+%
+% \DescribePackage{units}
+% \DescribePackage{nicefrac}
+% \limitsnicefrac
+%
+%
+% \subsubsection{\pkg{newtxmath} package}
+%
+% \DescribePackage{newtxmath}
+% \limitsnewtxmath
+%
+%
+% \subsection{Graphics}
+% \label{sec:limitsgraphics}
+%
+% \DescribePackage{graphics}%
+% \DescribePackage{graphicx}%
+% \limitsgraphics
+%
+%
+% \subsubsection{\pkg{tikz} package}
+% \label{sec:limitstikz}
+%
+% \DescribePackage{tikz}
+% \limitstikz
+% \changes{v0.51}{2018/03/18}{Docs: \pkg{tikz} limitations.}
+%
+%
+% \subsubsection{\pkg{grffile} package}
+%
+% \DescribePackage{grffile}
+% \limitsgrffile
+%
+%
+% \subsubsection{\pkg{color} package}
+%
+% \DescribePackage{color}
+% \limitscolor
+%
+%
+% \subsubsection{\pkg{xcolor} package}
+%
+% \DescribePackage{xcolor}
+% \limitsxcolor
+%
+%
+% \subsubsection{\pkg{epstopdf} package}
+%
+% \DescribePackage{epstopdf}
+% \limitsepstopdf
+%
+%
+% \subsubsection{\pkg{pstricks} package}
+%
+% \DescribePackage{pstricks}
+% \limitspstricks
+%
+%
+% \subsubsection{\pkg{pdftricks} package}
+%
+% \DescribePackage{pdftricks}
+% \limitspdftricks
+%
+%
+% \subsubsection{\pkg{psfrag} package}
+%
+% \DescribePackage{psfrag}
+% \trouble{psfrag=\pkg{psfrag}}
+% \limitspsfrag
+%
+%
+% \subsubsection{\pkg{pstool} package}
+%
+% \DescribePackage{pstool}
+% \trouble{pstool=\pkg{pstool}}
+% \limitspstool
+%
+%
+% \needspace{15\baselineskip}
+% \subsubsection{\pkg{asymptote} package}
+% \changes{v0.62}{2018/10/16}{Docs: \pkg{asymptote}.}
+%
+% \DescribePackage{asymptote}
+% \limitsasymptote
+%
+%
+% \subsubsection{\pkg{overpic} package}
+%
+% \DescribePackage{overpic}
+% \limitsoverpic
+%
+%
+% \subsubsection{Multimedia packages}
+%
+% \DescribePackage{multimedia}
+% \DescribePackage{movie15}
+% \DescribePackage{media9}
+% \trouble{multimedia=\pkg{multimedia}}
+% \trouble{media9=\pkg{media9}}
+% \trouble{movie15=\pkg{movie15}}
+% \trouble{graphics>multimedia}
+% \trouble{video}
+% \trouble{audio}
+% \gindex{video}
+% \gindex{audio}
+% \gindex{multimedia}
+% \limitsmultimedia
+%
+%
+%
+% \subsection{Tabbing}
+% \limitstabbing
+%
+%
+% \subsection{Tabular}
+%
+% \subsubsection{\env{tabular} environment}
+% \label{sec:limitstabular}
+% \changes{v0.39}{2017/08/30}{Docs: Reorganized tabular discussion.}
+% \limitstabular
+%
+% \subsubsection{\pkg{multirow} package}
+% \gindex{multirow=\pkg{multirow}>mrowcell=\cs{mrowcell} and \cs{mcolrowcell}}
+% \gindex{tabular>multirow=\pkg{multirow} \cs{mrowcell} and \cs{mcolrowcell}}
+% \gindex{mrowcell=\cs{mrowcell}}
+% \gindex{mcolrowcell=\cs{mcolrowcell}}
+% \trouble{multirow=\pkg{multirow}>mrowcell=\cs{mrowcell} and \cs{mcolrowcell}}
+% \trouble{tabular>multirow=\pkg{multirow} \cs{mrowcell} and \cs{mcolrowcell}}
+% \trouble{mrowcell=\cs{mrowcell}}
+% \trouble{mcolrowcell=\cs{mcolrowcell}}
+% \gindex{multicolumn=\cs{multicolumn}>with \cs{multirow}}
+% \gindex{multirow=\cs{multirow}>with \cs{multicolumn}}
+% \gindex{tabular>multicolumn=\cs{multicolumn} with \cs{multirow}}
+% \trouble{tabular>multicolumn=\cs{multicolumn} with \cs{multirow}}
+% \limitsmultirow
+%
+% \subsubsection{\pkg{longtable} package}
+%
+% \DescribePackage{longtable}
+% \trouble{longtable=\pkg{longtable}>endhead=\cs{endhead}, etc.}
+% \trouble{endhead=\cs{endhead}, etc.}
+% \limitslongtable
+%
+%
+% \subsubsection{\pkg{threeparttablex} package}
+% \label{sec:limitsthreeparttablex}
+% \DescribePackage{threeparttablex}
+% \trouble{threeparttablex=\pkg{threeparttablex}}
+% \limitsthreeparttablex
+%
+%
+% \subsubsection{\pkg{supertabular} and \pkg{xtab} packages}
+%
+% \DescribePackage{supertabular}
+% \DescribePackage{xtab}
+% \limitssupertabular
+%
+% \subsubsection{\pkg{colortbl} package}
+%
+% \DescribePackage{colortbl}
+% \limitscolortbl
+%
+% \subsubsection{\pkg{ctable} package}
+% \trouble{ctable=\pkg{ctable}}
+% \gindex{ctable=\pkg{ctable}}
+% \limitsctable
+%
+% \subsubsection{\pkg{bigdelim} package}
+%
+% \DescribePackage{bigdelim}
+% \limitsbigdelim
+%
+%
+% \subsection{Floats}
+%
+% \subsubsection{Float contents alignment}
+%
+% \limitsfloatalignment
+%
+%
+% \subsubsection{\pkg{float}, \pkg{trivfloat}, and/or \pkg{algorithmicx} together}
+%
+% \DescribePackage{float}
+% \DescribePackage{trivfloat}
+% \DescribePackage{algorithmicx}
+% \limitscombiningfloats
+%
+%
+% \subsubsection{\pkg{caption} and \pkg{subcaption} packages}
+%
+% \DescribePackage{caption}
+% \DescribePackage{subcaption}
+% \limitscaption
+%
+%
+%
+%
+% \subsubsection{\pkg{subfig} package}
+%
+% \DescribePackage{subfig}
+% \limitssubfig
+%
+%
+% \subsubsection{\pkg{floatrow} package}
+%
+% \DescribePackage{floatrow}
+% \limitsfloatrow
+%
+%
+% \subsubsection{\pkg{keyfloat} package}
+%
+% \DescribePackage{keyfloat}
+% \limitskeyfloat
+%
+%
+% \subsection{\brand{Koma-Script} classes}
+%
+% \DescribeClass{komascript}
+% \limitskomascript
+%
+%
+% \subsection{\brand{Memoir} class}
+% \label{sec:limitsmemoir}
+%
+% \changes{v0.66}{2019/02/06}{\pkg{memoir}: Docs re: version numbers.}
+%
+% \DescribeClass{memoir}
+% \limitsmemoir
+%
+%
+% \subsection{International languages}
+% \label{sec:international}
+%
+% If using \prog{pdflatex} with the setting |\booltrue{FileSectionNames}|,
+% \trouble[section and file names]{sectioning>international language}
+% \trouble{filename>corrupted}
+% \trouble{filename>international, \UTF-8}
+% \gindex{international>section names}
+% \gindex{foreign>section names}
+% \gindex{section>international languages}
+% \gindex{filename>international languages}
+% non-\acro{ASCII} text in section names can result in corrupted \HTML\ file names.
+% \prog{pdflatex} may be used if setting |\boolfalse{FileSectionNames}|, in which case
+% \HTML\ file numbers will be generated.
+%
+% For correct \HTML\ file names, use \prog{xelatex}, \prog{lualatex},
+% or dedicated document classes \Slash engines.
+%
+% (As of this writing, this warning is only relevent to the \pkg{kotex} package.)
+%
+%
+% \subsection{Miscellaneous packages}
+%
+% \subsubsection{\pkg{verse} and \pkg{memoir}}
+%
+% \DescribePackage{verse}
+% \DescribeClass{memoir}
+% \limitsverse
+%
+%
+% \subsubsection{\pkg{newclude} package}
+%
+% \changes{v0.14}{2016/03/29}{Docs: Newclude limitations.}
+%
+% \DescribePackage{newclude}
+% \limitsnewclude
+%
+%
+%
+% \subsubsection{\pkg{babel} package}
+%
+% \DescribePackage{babel}
+% ^^A \limitsbabelone
+% \limitsbabeltwo
+%
+%
+% \subsubsection{\pkg{polyglossia} package}
+% \label{sec:limitspolyglossia}
+%
+% \DescribePackage{polyglossia}
+% \limitspolyglossia
+%
+%
+% \subsubsection{\pkg{todonotes} and \pkg{luatodonotes} packages}
+%
+% \DescribePackage{todonotes}
+% \DescribePackage{luatodonotes}
+% \limitstodonotes
+%
+%
+% \subsubsection{\pkg{fixme}}
+%
+% \DescribePackage{fixme}
+% \limitsfixme
+%
+%
+% \subsubsection{\pkg{chemfig} package}
+%
+% \limitschemfig
+% \trouble{chemfig=\pkg{chemfig}}
+%
+%
+% \subsubsection{\pkg{chemformula} package}
+% \limitschemformula
+% \trouble{array>chemformula=\pkg{chemformula}}
+% \trouble{math>chemformula=\pkg{chemformula}}
+%
+%
+% \subsubsection{\pkg{mhchem} package}
+%
+% See \cref{sec:mhchem}.
+%
+%
+% \subsubsection{\pkg{xparse} package}
+%
+% \changes{v0.45}{2017/12/09}{Docs: \pkg{xparse} warnings.}
+% \DescribePackage{xparse}
+% \limitsxparse
+% \gindex{xparse=\pkg{xparse}>warnings}
+%
+%
+% \subsubsection{\pkg{kotex} package}
+%
+% \DescribePackage{kotex}
+% See \cref{sec:international} regarding \prog{pdflatex} and
+% Korean section names.
+% \trouble[Korean section names]{filename>Korean}
+%
+%
+% \clearpage
+%
+% \section{Compiling using custom shell commands}
+% \label{sec:customcompiling}
+% \gindex{compiling>custom}
+%
+% \changes{v0.61}{2018/09/21}{Docs: Compiling using custom shell commands.}
+%
+% \pkg{lwarp} and \prog{lwarpmk} try to make it easy to process
+% print and \HTML\ compilation tasks in most situations.
+% Depending on the operating system, command-line options, \TeX\ engine,
+% and \pkg{lwarp} options, the commands \cmds{lwarpmk print} and
+% \cmds{lwarpmk html} are automatically set up to correctly recompile the project.
+% These actions may be overridden using \pkg{lwarp} options, thus allowing the use
+% of packages such as \pkg{perltex} and \pkg{pythontex}.
+%
+% \subsection{Command options}
+%
+% \DescribeOption{PrintLatexCmd}
+% \DescribeOption{HTMLLatexCmd}
+% The \pkg{lwarp} options \optn{PrintLatexCmd} and \optn{HTMLLatexCmd}
+% are used to set customized commands to be executed by
+% \cmds{lwarpmk print} and \cmds{lwarpmk html}.
+% \begin{description}
+% \item [\optn{PrintLatexCmd}] should be set to shell commands which take \filenm{project.tex}
+% and generate \filenm{project.pdf}.
+% \item[\optn{HTMLLatexCmd}] should be set to take \filenm{project_html.tex} and
+% generate \filenm{project_html.pdf}.
+% \prog{lwarpmk} will then take \filenm{project_html.pdf} and
+% automatically convert it and generate \filenm{project.html}.
+% \end{description}
+%
+% \subsection{Literal character macros}
+% The \pkg{lwarp} package options are parsed by \TeX, and so some characters
+% require the use of a special macro to represent them. See \cref{tab:literalchars}.
+% \cs{LWRopquote} and \cs{LWRopseq} may be used to increase operating-system portability.
+% \cs{jobname} must have |_html| appended for processing \HTML.
+% \cs{space} may be necessary between other macros.
+%
+% To use these macros, either \pkg{kvoptions-patch} must be loaded before \pkg{lwarp}:
+% \trouble[macro not found]{LWRopseq=\cs{LWRopseq}}
+% \trouble{LWRpercent=\cs{LWRpercent}}
+% \trouble{LWRdollar=\cs{LWRdollar}}
+% \trouble{LWRhash=\cs{LWRhash}}
+% \trouble{LWRbackslash=\cs{LWRbackslash}}
+% \trouble{LWRopquote=\cs{LWRopquote}}
+% \begin{Verbatim}[gobble=2,obeytabs,tabsize=4,frame=lines]
+% \usepackage{kvoptions-patch}
+% \usepackage[
+% PrintLatexCmd={ ... } ,
+% HTMLLatexCmd={ ... }
+% ]{lwarp}
+% \end{Verbatim}
+% \needspace{18\baselineskip}
+% or \cs{lwarpsetup} must be used to set \optn{PrintLatexCmd} and \optn{HTMLLatexCmd}:
+% \begin{Verbatim}[gobble=2,obeytabs,tabsize=4,frame=lines]
+% \usepackage[...]{lwarp}
+% \lwarpsetup{
+% PrintLatexCmd=
+% {
+% latex tm \LWRopseq
+% dvips -o tm-pics.ps tm.dvi \LWRopseq
+% ps2pdf tm-pics.ps \LWRopseq
+% pdflatex tm.tex
+% } ,
+% HTMLLatexCmd=
+% {
+% latex tm_html \LWRopseq
+% dvips -o tm_html-pics.ps tm_html.dvi \LWRopseq
+% ps2pdf tm_html-pics.ps \LWRopseq
+% pdflatex tm_html.tex
+% }
+% }
+% \end{Verbatim}
+%
+% \begin{table}
+% \centering
+% \caption{Literal character macros}
+% \label{tab:literalchars}
+% \begin{tabular}{cll}
+% Character & Macro & Comment \\
+% |%| & \cs{LWRpercent} & \\
+% |$| & \cs{LWRdollar} & \\
+% |&| & \cs{LWRamp} & \\
+% |%| & \cs{LWRhash} & \\
+% |\| & \cs{LWRbackslash} & \\
+% \texttt{\textquotesingle} or |"| & \cs{LWRopquote} & Depends on the operating system. \\
+% |&| or |&&| & \cs{LWRopseq} & Depends on the operating system. \\
+% (space) & \cs{space} & Forces an extra space. \\
+% (jobname) & \cs{jobname} & Without file extension. \\
+% \end{tabular}
+% \hrule
+% \end{table}
+%
+%
+% \needspace{6\baselineskip}
+%
+% \subsection{\prog{latexmk}}
+%
+% \DescribeProgram{latexmk}
+% If \prog{latexmk} is used for a project, it may be easiest to continue
+% using it.
+% \begin{description}
+% \item[\cmds{latexmk project.tex}] would create \filenm{project.pdf} as normal.
+% \item[\cmds{latexmk project\_html.tex}] would create \filenm{project_html.pdf},
+% then
+% \item [\cmds{lwarpmk pdftohtml project\_html.pdf}] would take
+% \filenm{project_html.pdf} and convert it to \filenm{project.html}.
+% \end{description}
+%
+% \prog{latexmk} may simplify the use of packages such as \pkg{sagetex}.
+% \DescribePackage{sagetex}
+%
+%
+% \subsection{\pkg{perltex} package}
+%
+% The \pkg{lwarp} package option settings to use \pkg{perltex} would be similar to:
+% \DescribePackage{perltex}
+% \begin{sourcedisplay}
+% \cs{usepackage}[ \\
+% \fquad \dots \\
+% \fquad PrintLatexCmd=\{perltex -latex=pdflatex project.tex\} , \\
+% \fquad HTMLLatexCmd=\{perltex -latex=pdflatex project\textgreen{\_html}.tex\} , \\
+% \fquad \dots \\
+% ]\{lwarp\}
+% \end{sourcedisplay}
+%
+% Place \pkg{perltex} math expressions between
+% \trouble[``impure'' math]{perltex=\pkg{perltex}}
+% \cs{displaymathother} and \cs{displaymathnormal}, or
+% \cs{inlinemathother} and \cs{inlinemathnormal}.
+% See \cref{sec:displaymathother}.
+%
+%
+% \subsection{\pkg{pythontex} package}
+%
+% \DescribePackage{pythontex}
+% An example using \pkg{pythontex}:
+% \begin{sourcedisplay}
+% \cs{usepackage}[ \\
+% \fquad \dots \\
+% \fquad PrintLatexCmd=\{ \\
+% \fqquad pdflatex project.tex \cs{LWRopseq} \\
+% \fqquad pythontex project \cs{LWRopseq} \\
+% \fqquad pdflatex project.tex \\
+% \fquad \} , \\
+% \fquad HTMLLatexCmd=\{ \\
+% \fqquad pdflatex project\textgreen{\_html}.tex \cs{LWRopseq} \\
+% \fqquad pythontex project\textgreen{\_html} \cs{LWRopseq} \\
+% \fqquad pdflatex project\textgreen{\_html}.tex \\
+% \fquad \} , \\
+% \fquad \dots \\
+% ]\{lwarp\}
+% \end{sourcedisplay}
+%
+% Another possibility is to use \prog{latexmk}, placing the
+% \cmds{latexmk \dots} commands in the \optn{PrintLatexCmd} and \optn{HTMLLatexCmd}
+% options.
+% While using these options, the \pkg{lwarp} option \optn{latexmk} would not be used.
+%
+% No attempt has yet been made to make \pkg{pythontex} robust with \HTML\ output.
+% Some math objects must be surrounded by
+% \trouble[``impure'' math]{pythontex=\pkg{pythontex}}
+% \cs{displaymathother} \dots \cs{displaymathnormal},
+% or \cs{inlinemathother} \dots \cs{inlinemathnormal}.
+% Displays of code may have to be
+% enclosed inside a \env{lateximage} environment
+% \watchout[HTML look-alike]
+% to prevent |<|, |>| and similar from being interpreted by the browser
+% as \HTML\ entities.
+%
+%
+% \subsection{Other packages}
+%
+% \DescribePackage{sympytex}
+% \DescribePackage{rterface}
+% Other packages such as \pkg{sympytex} and \pkg{rterface} would be set up
+% similar to \pkg{pythontex}, and the same warnings would apply.
+% \trouble{sympytex=\pkg{sympytex}}
+% \trouble{rterface=\pkg{rterface}}
+%
+%
+% \subsection{\prog{make} program}
+% \gindex{make utility}
+%
+% \DescribeProgram{make}
+% To use \pkg{lwarp} with the \prog{make} program,
+% have the \filenm{makefile} take \filenm{project.tex} and
+% generate the print version \filenm{project.pdf}, as normal.
+% |\usepackage{lwarp}| must be used, and it generates \filenm{lwarpmk.conf}
+% when the print version is created.
+%
+% To generate \HTML, first have \filenm{project_html.tex} be compiled to
+% generate \filenm{project_html.pdf}.
+% This must be in \PDF\ format.
+% Finally, have \filenm{project_html.pdf} be converted to \HTML\ using
+% \cmds{lwarpmk pdftohtml project\_html.pdf},
+% and convert \SVG\ math with \cmds{lwarpmk limages}.
+%
+%
+% \subsection{\UTF-8 locale}
+% \label{sec:utf8locale}
+% \gindex{locale}
+% \gindex{UTF-8>locale}
+%
+% \changes{v0.62}{2018/10/20}{Docs: UTF-8 locale.}
+%
+% \prog{lwarpmk} uses the \prog{texlua} program, which sets the ``locale'' to ``|C|'',
+% \trouble[UTF-8 locale]{UTF-8>locale}
+% \trouble{Unicode>UTF-8 locale}
+% \trouble{locale}
+% including for external operating-system calls such as when executing \cmds{lwarpmk html}.
+% In some cases, an external program called from the user's document
+% may require the use of a \UTF-8 ``locale''.
+% For \brand{Unix}-related operating systems, it may be required to use \pkg{lwarp}'s
+% custom compilation options to add a locale change:
+% \begin{sourcedisplay}
+% \cs{usepackage}\{lwarp\}[\\
+% \fquad PrintLatexCmd=\{\\
+% \fqquad \textred{env LC\_CTYPE=en\_US.UTF-8} \\
+% \fqqquad xelatex --shell-escape project.tex \\
+% \fquad \} \\
+% \fquad HTMLLatexCmd=\{\\
+% \fqquad \textred{env LC\_CTYPE=en\_US.UTF-8} \\
+% \fqqquad xelatex --shell-escape project\textgreen{\_html}.tex \\
+% \fquad \} \\
+% ] \\
+% \end{sourcedisplay}
+%
+% \DescribePackage{ditaa}
+% The only example seen so far where this is required is the \pkg{ditaa} package,
+% \trouble{ditaa=\pkg{ditaa}}
+% where the locale change allows the use of UTF-8 with Xe\LaTeX\ and \pkg{ditaa}.
+% To use Lua\LaTeX\ instead, the locale change would have to be made inside the
+% \pkg{ditaa} package where its calls the \prog{ditaa} program.
+%
+%
+% \clearpage
+%
+% \section{EPUB conversion}
+% \label{sec:epub}
+%
+% \pkg{lwarp} does not produce \EPUB\ documents,
+% but it may be told to modify its \HTML\ output
+% to greatly assist in the conversion.
+% An external program may then be used to finish the conversion
+% to \EPUB.
+%
+% To assign the author's name for regular \pkg{lwarp} \HTML\
+% \margintag{\element{meta} author}
+% files, and also for the \EPUB,
+% use \cs{HTMLAuthor} \marg{name}. This assigns the name to the
+% \element{meta} author element. It may be set empty, and it defaults to
+% \cs{theauthor}.
+%
+% A special boolean is provided to simplify the process of
+% converting \pkg{lwarp} \HTML\ output to \EPUB:
+%
+% \begin{docsidebar}[\bool{FormatEPUB}]
+% \DescribeBoolean{FormatEPUB} \DescribeDefault{false}
+% \raggedright
+% |FormatEPUB| changes \HTML\ output for easy \EPUB\ conversion
+% via an external program. Removes per-file headers, footers, and nav.
+% Adds footnotes per chapter/section.
+% \end{docsidebar}
+% \gindex{EPUB>HTML conversion settings}
+% \gindex{HTML>conversion settings>EPUB}
+%
+% To help convert \pkg{lwarp} \HTML\ output to \EPUB, add
+% \begin{sourcedisplay}
+% |\booltrue{FormatEPUB}|
+% \end{sourcedisplay}
+% to the project's source preamble after |\usepackage{lwarp}|.
+% The \EPUB\ version of the document cannot co-exist with the
+% regular \HTML\ version, so
+% \userentry{lwarpmk cleanall}
+% \userentry{lwarpmk html}
+% \userentry{lwarpmk limages}
+% to recompile with the |FormatEPUB| boolean turned on.
+% Several changes are then made to the \HTML\ output:
+% \begin{itemize}
+% \item Headers, footers, and navigation are removed at file splits.
+% \item Any accumulated footnotes are printed at the bottom of each section.
+% \end{itemize}
+%
+% The resulting files will be ready to be loaded into an \EPUB\ conversion
+% program, such as the open-source program \prog{Calibre} (\url{https://calibre-ebook.com/}).
+% \gindex{Calibre=\prog{Calibre}}
+% \gindex{EPUB>conversion software}\margintag{\prog{Calibre}}
+%
+% The \EPUB\ conversion program must know what order the files are included.
+% For \pkg{lwarp} projects, set the \EPUB\ conversion software to
+% \trouble[search order]{EPUB>search order}
+% \trouble{EPUB>page order}
+% \trouble{Calibre=\prog{Calibre}>EPUB conversion}
+% do a breadth-first search of the files.
+% For \prog{Calibre}, this option is found in
+% \begin{UIdisplay}
+% Preferences $\to$ Plugins $\to$ File type plugins $\to$ \HTML\ to Zip
+% \end{UIdisplay}
+% Check the box \textsf{Add linked files in breadth first order.}
+% Set the document encoding as |utf-8|\trouble[encoding]{EPUB>encoding},
+% which is what \pkg{lwarp} generates for \HTML,
+% even if the original printed document uses some other encoding.
+%
+% The \EPUB-conversion program must also know where the section breaks are located.
+% \trouble[section breaks]{EPUB>section breaks}
+% For a list of \pkg{lwarp}'s section headings,
+% see \cref{tab:depthsheadings}.
+% For example, an |article|
+% class document would break at \cs{section}, which is mapped to \HTML\
+% heading level \element{h4}, whereas a |book| class document would break at \cs{chapter},
+% which is \HTML\ heading level \element{h3}.
+% For \prog{Calibre}, this option is found in
+% \begin{UIdisplay}
+% Preferences $\to$ Conversion (Common Options) $\to$
+% Structure Detection $\to$ Detect chapters at (XPath expression)
+% \end{UIdisplay}
+% Select the ``magic wand'' to the right of this entry box, and set
+% the first entry
+% \begin{UIdisplay}
+% Match \HTML\ tags with tag name:
+% \end{UIdisplay}
+% to ``h4''. (Or ``h3'' for document classes with \cs{chapter}s.)
+% The \textsf{Detect chapters at} field should then show
+% \begin{UIdisplay}
+% //h:h4 \qquad \textmd{\textrm{---\,or\,---}} \qquad //h:h3
+% \end{UIdisplay}
+%
+% This option is also available on the main tool bar at the \textsf{Convert books}
+% button.
+%
+% Once these settings have been made, the \pkg{lwarp}-generated \HTML\ files
+% may be loaded by \prog{Calibre}, and then converted to an \EPUB.
+%
+% \begin{docsidebar}[\brand{MathJax} support]
+% \brand{MathJax} may be used in \EPUB\ documents.
+% Some e-readers include \brand{MathJax}, but any given reader
+% may or may not have a recent version, and may or may not include
+% extensions such as support for \pkg{siunitx}.
+%
+% \pkg{lwarp} adds some modifications to \MathML\ to support equations numbered
+% by chapter. These modifications may not be compatible with the e-reader's
+% version of \brand{MathJax}, so \pkg{lwarp} requests that a known version be loaded
+% instead. In some cases chapter numbering of equations still doesn't work.
+%
+% Until math support in \EPUB\ documents is improved, it is recommended to use
+% \SVG\ images instead of \brand{MathJax}, especially for equations numbered by chapter,
+% or where \pkg{siunitx} support is important.
+% \end{docsidebar}
+%
+%
+%
+%
+% \clearpage
+%
+% \section{Word-processor conversion}
+% \label{sec:wordprocessorconversion}
+% \gindex{word processor>HTML conversion settings}
+% \gindex{HTML>conversion settings>word processor}
+% \gindex{LibreOffice=\brand{LibreOffice}>import into}
+% \gindex{export>to word processor}
+% \trouble{word processor>import}
+% \trouble{LibreOffice=\prog{LibreOffice}>import}
+%
+% \pkg{lwarp} may be told to modify its \HTML\ output to make it
+% easier to import the \HTML\ document into a word processor.
+% At the time of this writing, it seems that \brand{LibreOffice} works best at
+% preserving table layout, but it still has some limitations, such as
+% an inability to automatically assign figure and table
+% frames and captions according to user-selected \HTML\ classes.
+% \pkg{lwarp} provides some assistance in locating these frame boundaries,
+% as shown below.
+%
+%
+% \subsection{Activating word-processor conversion}
+%
+% A special boolean is provided to simplify the process of
+% converting \pkg{lwarp} \HTML\ output to \EPUB:
+% \begin{docsidebar}[\bool{FormatWP}]
+% \DescribeBoolean{FormatWP} \DescribeDefault{false}
+% \raggedright
+% Changes \HTML\ output for easier conversion
+% by a word processor.
+% Removes headers and nav, prints footnotes per section,
+% and also forces single-file output and turns off \HTML\ debug
+% comments.
+% Additionally, honors the booleans |WPMarkFloats|, |WPMarkMinipages|,
+% |WPMarkTOC|, and |WPMarkLOFT|.
+% \end{docsidebar}
+%
+% To help modify \pkg{lwarp} \HTML\ output for easier
+% import to a word processor, add
+% \begin{sourcedisplay}
+% |\booltrue{FormatWP}|
+% \end{sourcedisplay}
+% to the project's source preamble after \pkg{lwarp} is loaded.
+% The following changes are then made to the \HTML\ output:
+% \margintag{formatting adjustments}
+% \begin{itemize}
+% \item If using a class without chapters, \cs{section} and lower are
+% shifted up in level for the \HTML\ heading tags. The \CSS\ has
+% not been changed, so the section heading formats will not match the normal
+% \HTML\ output, but when imported to \prog{LibreOffice Writer} the higher
+% section headings will import as \UI{Heading~1} for the title, \UI{Heading~2}
+% for \cs{section}, etc.
+% \item Headers, footers, and navigation are removed at file splits.
+% \item Any accumulated footnotes are printed at the bottom of each section.
+% \item Forces single-file output.
+% \item Turns off \HTML\ debugging comments.
+% These are comments appearing inside the \HTML\ code,
+% marking the opening/closing of sections and \element{div}s,
+% but they are no longer useful when the document has been
+% imported into a word processor.
+% \item An additional \element{div} with an \attribute{id} encapsulates
+% each float and minipage, which on import into \prog{LibreOffice Writer}
+% causes a thin frame to appear around the text block for each.
+% \item Float captions are given an explicit italic formatting.
+% \item Tabular rule borders are made explicit for \prog{LibreOffice Writer}.
+% \brand{LibreOffice} displays a light border around each cell while editing,
+% even those which have no border when printed,
+% and \pkg{lwarp} also uses a light border for thin rules,
+% so it will be best to judge the results using
+% the print preview instead of while editing in \brand{LibreOffice}.
+% \item \cs{includegraphics} and \SVG\ math width and height
+% are made explicit for \brand{LibreOffice}.
+% \item \cs{hspace} is approximated by a number of \cs{quad}s,
+% and rules are approximated by a number of underscores.
+% \item Explicit \HTML\ styles are given to:
+% \begin{itemize}
+% \item \cs{textsc}, etc.
+% \item \cs{underline}, \pkg{soul} and \pkg{ulem} markup.
+% \item \env{center}, \env{flushleft}, \env{flushright}.
+% \item \cs{marginpar}, \pkg{keyfloat}, \pkg{sidenotes}, \pkg{floatflt},
+% and \pkg{wrapfig}.
+% \item \pkg{fancybox} \cs{shadowbox}, etc.
+% \item The \LaTeX\ and \TeX\ logos.
+% \end{itemize}
+% \item Honors several booleans:
+% \begin{description}
+% \item[\texttt{WPMarkFloats}:] Marks the begin and end of floats.
+% \item[\texttt{WPMarkMinipages}:] Marks the begin and end of minipages.
+% \item[\texttt{WPMarkTOC}:] Marks the location of the Table of Contents.
+% \item[\texttt{WPMarkLOFT}:] Marks the locations of the List of Figures/Tables.
+% \item[\texttt{WPMarkMath}:] Prints \LaTeX\ math instead of using images.
+% \item[\texttt{WPTitleHeading}:] Adjusts title and section headings.
+% \end{description}
+% Several of these may be used to add markers to the \HTML\ text
+% which help determine where to adjust the word processor document after
+% import.
+
+% \end{itemize}
+%
+%
+% \subsection{Additional modifications}
+%
+% \newcommand{\describeWPMarkFloats}{
+% Adds
+% \begin{sourcedisplay}
+% === begin table === \\
+% \dots \\
+% === end ===
+% \end{sourcedisplay}
+% or
+% \begin{sourcedisplay}
+% === begin figure === \\
+% \dots \\
+% === end ===
+% \end{sourcedisplay}
+% around floats while formatting for word processors.
+% This helps identify boundaries of floats to be manually converted
+% to word-processor frames and captions.
+% }
+%
+% \begin{docsidebar}[\bool{WPMarkFloats}]
+% \DescribeBoolean{WPMarkFloats} \DescribeDefault{false}
+% \raggedright
+% \describeWPMarkFloats
+% \end{docsidebar}
+%
+%
+% \newcommand{\describeWPMarkMinipages}{
+% Adds
+% \begin{sourcedisplay}
+% === begin minipage === \\
+% \dots \\
+% === end minipage ===
+% \end{sourcedisplay}
+% around minipages while formatting for word processors.
+% This helps identify boundaries of minipages to be manually converted
+% to word-processor frames.
+% }
+%
+% \begin{docsidebar}[\bool{WPMarkMinipages}]
+% \DescribeBoolean{WPMarkMinipages} \DescribeDefault{false}
+% \raggedright
+% \describeWPMarkMinipages
+% \end{docsidebar}
+%
+%
+% \newcommand{\describeWPMarkTOC}{
+% While formatting for word processors, adds
+% \begin{sourcedisplay}
+% === table of contents === \\
+% \end{sourcedisplay}
+% where the Table of Contents would have been.
+% This helps identify where to insert the actual \TOC.
+%
+% \emph{If set |false|, the actual \TOC\ is printed instead.}
+% }
+%
+% \begin{docsidebar}[\bool{WPMarkTOC}]
+% \DescribeBoolean{WPMarkTOC} \DescribeDefault{true}
+% \raggedright
+% \describeWPMarkTOC
+% \end{docsidebar}
+%
+%
+% \newcommand{\describeWPMarkLOFT}{
+% While formatting for word processors, adds
+% \begin{sourcedisplay}
+% === list of figures === \quad \textrm{\textit{and\,/\,or}} \\
+% === list of tables === \\
+% \end{sourcedisplay}
+% where each of these lists would have been.
+% This helps identify where to insert the actual lists.
+%
+% \emph{If set |false|, the actual lists are printed instead.}
+% }
+%
+% \begin{docsidebar}[\bool{WPMarkLOFT}]
+% \DescribeBoolean{WPMarkLOFT} \DescribeDefault{false}
+% \raggedright
+% \describeWPMarkLOFT
+% \end{docsidebar}
+%
+%
+% \newcommand{\describeWPMarkMath}{
+% While formatting for word processors,
+% prints math as \LaTeX\ code instead of creating \SVG\ images or \brand{MathJax}.
+% This is useful for cut/paste into the \prog{LibreOffice Writer TeXMaths} extension.
+% }
+%
+% \begin{docsidebar}[\bool{WPMarkMath}]
+% \trouble{TeXMaths}
+% \trouble{siunitx>with TeXMaths}
+% \margintag{siunitx}
+% \DescribeBoolean{WPMarkMath} \DescribeDefault{false}
+% \DescribeProgram{TeXMaths}
+% \raggedright
+% \describeWPMarkMath
+%
+% When using the \pkg{siunitx} package, enter
+% \begin{sourcedisplay}
+% \cs{usepackage}\{siunitx\}
+% \end{sourcedisplay}
+% in the \prog{TeXMaths} preamble.
+% Equation numbering is problematic for \AmS\ math environments.
+% \end{docsidebar}
+% \gindex{siunitx>with \prog{TeXMaths}}
+% \gindex{math>word processor conversion}
+%
+%
+% \newcommand*{\describeWPTitleHeading}{
+% While formatting for word processors,
+% |true| sets the document title to \element{h1}, which is expected for \HTML\ documents,
+% but also causes the lower-level section headings to start at \UI{Heading 2} when
+% imported into \brand{LibreOffice}.
+% Set to |false| to cause the title to be plain text, and the section headings
+% to begin at \UI{Heading 1}.
+%
+% See \cref{tab:WPsectionheadings} on \cpageref{tab:WPsectionheadings}.
+% }
+%
+% \begin{docsidebar}[\bool{WPTitleHeading}]
+% \DescribeBoolean{WPTitleHeading} \DescribeDefault{false}
+% \margintag{section headings}
+% \raggedright
+% \describeWPTitleHeading
+% \end{docsidebar}
+% \gindex{section>heading, word processor}
+% \gindex{heading, word processor}
+% \gindex{word processor>section headings}
+% \gindex{LibreOffice=\brand{LibreOffice}>section headings}
+% \trouble{sectioning>word processor import}
+% \trouble{word processor>sectioning headings}
+%
+% \begin{table}
+% \centering
+% \begin{threeparttable}
+% \caption{Section \HTML\ headings for word-processor conversion}
+% \label{tab:WPsectionheadings}
+% \begin{tabular}{lcccc}
+% \toprule
+% ~ & \multicolumn{4}{c}{\HTML\ headings\tnote{\textasteriskcentered}} \\
+% \cmidrule{2-5}
+% ~ & \multicolumn{2}{c}{With \cs{chapter}} & \multicolumn{2}{c}{Without \cs{chapter}} \\
+% \cmidrule(r){2-3} \cmidrule(l){4-5}
+% ~ & \multicolumn{2}{c}{|WPTitleHeading|} & \multicolumn{2}{c}{|WPTitleHeading|} \\
+% Section & |true| & |false| & |true| & |false| \\
+% \midrule
+% Title & \element{h1} & plain & \element{h1} & plain \\
+% \cs{book} & \element{div} & \element{div} & \element{div} & \element{div} \\
+% \cs{part} & \element{h2} & \element{h1} & \element{h2} & \element{h1} \\
+% \cs{chapter} & \element{h3} & \element{h2} & --- & --- \\
+% \cs{section} & \element{h4} & \element{h3} & \element{h3} & \element{h2} \\
+% \cs{subsection} & \element{h5} & \element{h4} & \element{h4} & \element{h3} \\
+% \cs{paragraph} & \element{h6} & \element{h5} & \element{h5} & \element{h4} \\
+% \cs{subparagraph} & \element{span} & \element{h6} & \element{h6} & \element{h5} \\
+% \bottomrule
+% \end{tabular}
+% \begin{tablenotes}
+% \footnotesize
+% \item[\textasteriskcentered] For default depths when not |FormatWP|,
+% see \cref{tab:depthsheadings} on \cpageref{tab:depthsheadings}.
+% \end{tablenotes}
+% \end{threeparttable}
+% \smallskip\hrule
+% \end{table}
+%
+% \subsection{Recommendations}
+% \gindex{word processor>conversion recommendations}
+% \gindex{LibreOffice=\brand{LibreOffice}>conversion recommendations}
+%
+% For use with \prog{LibreOffice Writer}, it is recommended to:
+% \margintag{TOC, LOF, LOT}
+% \begin{enumerate}[nosep]
+% \item Set |\booltrue{FormatWP}|
+% \item Set |\booltrue{WPMarkTOC}| and |\boolfalse{WPMarkLOFT}|
+% \item Use \pkg{lwarp} to generate the \HTML\ document.
+% \item Copy/paste from the \HTML\ document into an empty \prog{LibreOffice Writer} document.
+% \item Manually insert a \brand{LibreOffice} \TOC\ in the \brand{LibreOffice} document.
+% \item Manually add frames around each float, adding a caption which is cut/pasted from
+% each float's simulated caption.
+% \item Manually create cross references.
+% \end{enumerate}
+% This process yields a document with an actual \brand{LibreOffice} Table of Contents,
+% but a simulated List of Figures and List of Tables.
+%
+% For \pkg{siunitx}, remember to adjust the preamble as mentioned above.
+% \margintag{siunitx}
+%
+% \brand{LibreOffice} has options in the \UI{View} menu to turn on/off the display of
+% \margintag{LO view border options}
+% thin borders around table cells and text objects.
+%
+%
+% \subsection{Limitations}
+%
+% Floats and captions are not explicitly converted to \brand{LibreOffice} floats with their
+% own captions. Floats are surrounded by a thin frame in the \brand{LibreOffice} editor,
+% and may be marked with |WPMarkFloats|, but are not given a proper \brand{LibreOffice}
+% object frame.
+% Captions are given an explicit italic formatting,
+% but not a proper \brand{LibreOffice} paragraph style.
+%
+% Cross references are not actual \brand{LibreOffice} linked cross references.
+%
+% The List of Figures and List of Tables are not linked.
+% The pasted pseudo \LOF\ and \LOT\ match the numbering
+% of the \LaTeX\ and \HTML\ versions.
+%
+% Equation numbering is not automatic, but the equation numbers in \SVG\ math
+% will match the \LaTeX\ and \HTML\ output.
+% SVG math is recommended when using the \AmS\ environments, which may have
+% multiple numbered equations per object.
+%
+% As of when last checked, \brand{LibreOffice} ignores the following:
+% \begin{itemize}
+% \item Minipage alignment.
+% \item Tabular cell vertical alignment.
+% \item Image rotation and scaling.
+% \item Rounded border corners, which are also used by:
+% \begin{itemize}
+% \item \cs{textcircled}
+% \item \pkg{booktabs} trim
+% \end{itemize}
+% \item \cs{hspace} and rules, also used by \pkg{algorithmic}.
+% \item Coloring of text decorations, used by \pkg{soul} and \pkg{ulem}.
+% \item Overline text decoration, used by \pkg{romanbar}.
+% \end{itemize}
+%
+% \brand{LibreOffice} also has limitations with frames and backgrounds:
+% \begin{itemize}
+% \item Multiple lines in an object are framed individually instead of as a whole.
+% \item Nested frames are not handled correctly.
+% \item Images inside boxes are not framed correctly.
+% \item Spans with background colors and frames are not displayed correctly.
+% \end{itemize}
+%
+%
+%
+%
+%
+%
+% \clearpage
+%
+% \section{Modifying \pkg{lwarp}}
+% \pagestyle{pageheadfoot}
+%
+% To quickly find the source for a package in |lwarp.dtx|,
+% \margintag{locating something}
+% search for |*packagename|,
+% such as |*siunitx|.
+%
+% Likewise, to quickly find the source for a file in |lwarp.dtx|,
+% search for |*filename|, such as |*lwarp.css|.
+%
+% Purely text-based packages probably will work as-is when generating
+% \HTML.
+%
+% Look to existing code for ideas on how to expand into new code.
+%
+% An environment may be converted to a |lateximage| then displayed
+% \margintag{image of \TeX\ output}
+% with an image of the resulting \LaTeX{} output.
+% See \cref{sec:picture} for an example of the |picture| environment.
+%
+% To create a custom \HTML\ block or inline \CSS\ class,
+% \margintag{\CSS\ classes}
+% see \cref{sec:highlevelclasses}.
+%
+% To create print and \HTML\ versions of the same macro or environment,
+% \margintag{print/HTML macros}
+% see \cref{sec:definingprinthtml}.
+%
+% Any \TeX\ boxes must be undone, as \SVG\ math or \env{lateximage}s
+% \watchout[\TeX\ boxes]
+% require \cs{newpage}, which will not work in a \TeX\ box.
+%
+% \changes{v0.57}{2018/05/28}{Docs: Recreating the index for \pkg{lwarp} source.}
+% To recreate the index for the \pkg{lwarp} documentation:
+% \margintag{index recreation}
+% \begin{Verbatim}[gobble=2,obeytabs,tabsize=4,frame=lines]
+% makeindex -s gglo.ist -o lwarp.gls lwarp.glo
+% splitindex lwarp.idx -- -s gind.ist
+% \end{Verbatim}
+%
+%
+% \subsection{Creating a development system}
+%
+% The following creates a local development system for \pkg{lwarp} on a TeXLive system
+% in a \brand{Unix}-like environment.
+% Doing so allows anything requesting \pkg{lwarp} to use the development version
+% instead of whichever version is installed in TeXLive.
+%
+% \begin{description}
+% \item [Create a development directory:] \
+%
+% Place into this directory \filenm{lwarp.dtx} and \filenm{lwarp.ins}.
+%
+% To create \filenm{lwarp.sty},
+% execute \userentry{pdflatex lwarp.ins} which creates \filenm{lwarp.sty} and several
+% hundred additional \filenm{lwarp-*.sty} files for the various packages which are
+% supported.
+%
+% To create the documentation \filenm{lwarp.pdf},
+% execute \userentry{pdflatex lwarp.dtx}
+%
+% \item[To make the development files visible to other projects:] \
+%
+% Create the directory
+% \begin{quote}
+% \filenm{/usr/local/texlive/texmf-local/tex/latex/local/lwarp}
+% \end{quote}
+%
+% Inside this directory, create the file \filenm{update}, containing:
+% \begin{Verbatim}[gobble=2,obeytabs,tabsize=4,frame=lines]
+% ln -s /path_to_dev_directory/lwarp*.sty .
+% ln -s /path_to_dev_directory/lwarp_baseline_marker.png .
+% ln -s /path_to_dev_directory/lwarp_baseline_marker.eps .
+% mktexlsr
+% \end{Verbatim}
+% Run ./update now, and whenever a new lwarp-* package is added.
+
+% \item[To make the development version of \prog{lwarpmk} visible to other projects:] \
+%
+% \begin{Verbatim}[gobble=2,obeytabs,tabsize=4,frame=lines]
+% cd /opt
+% ln -s /usr/local/texlive/texmf-local/bin/x86_64-linux texbin_local
+% cd texbin_local
+% ln -s ../../scripts/lwarp/lwarpmk.lua lwarpmk
+% cd /usr/local/texlive/texmf-local/scripts/
+% mkdir lwarp
+% cd lwarp
+% ln -s /path_to_dev_directory/lwarpmk.lua lwarpmk
+% \end{Verbatim}
+% Verify that the correct version is found with \userentry{which lwarpmk}
+%
+% \item [To make the local versions visible to the shell:] \
+%
+% Paths must be set by the shell startup, such as in \filenm{.bashrc} and \filenm{.cshrc}:
+%
+% In \filenm{.bashrc}:
+% \begin{Verbatim}[gobble=2,obeytabs,tabsize=4,frame=lines]
+% PATH=/opt/texbin_local:/opt/texbin:$PATH
+% \end{Verbatim}
+%
+% In \filenm{.cshrc}:
+% \begin{Verbatim}[gobble=2,obeytabs,tabsize=4,frame=lines]
+% setenv PATH ${HOME}/bin:/opt/texbin_local:/opt/texbin:${PATH}
+% \end{Verbatim}
+%
+% \end{description}
+%
+%
+%
+% \subsection{Modifying a package for \pkg{lwarp}}
+%
+% \gindex{package>modifying for \pkg{lwarp}}
+% \gindex{modifying>package}
+% \gindex{adapting>package}
+% \gindex{converting>package}
+%
+% If a class loads additional packages, it will be required to modify the
+% class for \pkg{lwarp}, since \pkg{lwarp} must be loaded before most other packages.
+%
+% To work with \pkg{lwarp}, a class must first set up anything which replicates
+% the functions of the basic \LaTeX\ classes, load any required fonts,
+% then load \pkg{lwarp}, then finally load and adjust any other required packages.
+%
+% When creating \HTML,
+% \pkg{lwarp} redefines the \cs{usepackage} and \cs{RequirePackage}
+% macros such that it first looks to see if a |lwarp-<packagename>.sty|
+% version exists. If so, the \pkg{lwarp} version is used instead.
+% This modular system allows users to create their own
+% versions of packages for \pkg{lwarp} to use for \HTML, simply by creating
+% a new package with a |lwarp-| prefix. If placed in the local
+% directory along with the source code, it will be seen by that project
+% alone. If placed alongside the other |lwarp-| packages where \TeX\
+% can see it, then the user's new package will be seen by any documents
+% using \pkg{lwarp}. (Remember |mktexlsr| or |texhash|.)
+%
+% An |lwarp-<packagename>.sty| package is only used during \HTML\
+% generation. Its purpose is to pretend to be the original package,
+% while modify anything necessary to create a successful \HTML\ conversion.
+% For many packages it is sufficient to simply provide nullified macros,
+% lengths, counters, etc. for anything which the original package does,
+% while passing the raw text on to be typeset. See the pre-existing
+% |lwarp-| packages for examples.
+%
+% Anything the user might expect of the original package
+% must be replaced or emulated by the new |lwarp-| package, including
+% package options, user-adjustable counters, lengths, and booleans, and
+% conditional behaviors.
+% In many of these packages, most of the new definitions have a ``local'' prefix
+% according to the package name, and |@| characters inside the name,
+% which hides these names from the user. In most cases these macros
+% will not need to be emulated for \HTML\ output. Only the ``user-facing''
+% macros need to be nullified or emulated.
+%
+% Each |lwarp-*| package should first call either of:
+% \begin{sourcedisplay}
+% \cs{LWR@ProvidesPackage\textblue{Drop}} \\
+% \fquad \textrm{-or-} \\
+% \cs{LWR@ProvidesPackage\textblue{Pass}}
+% \end{sourcedisplay}
+% If ``|Drop|''ped, the original print-version
+% package is ignored, and only the |lwarp-| version is used.
+% Use this where the original print version is useless for \HTML.
+% If ``|Pass|''ed, the original package is loaded first, with the user-supplied options,
+% then the |lwarp-| version continues loading as well.
+% See \cref{sec:ntheorem} (\nameref{sec:ntheorem})
+% for an example of selectively disabling user options for a package.
+% Use this when \HTML\
+% output only requires some modifications of the original package.
+% For a case where the original package is usable without changes, there is no
+% need to create a |lwarp-| version.
+%
+%
+% \subsubsection{Adding a package to the \pkg{lwarp.dtx} file}
+%
+% When adding a package to |lwarp.dtx| for permanent inclusing in \pkg{lwarp},
+% provide the |lwarp-<packagename>| code in |lwarp.dtx|,
+% add its entry into |lwarp.ins|, and also remember to add
+% \begin{sourcedisplay}
+% \cs{LWR@loadafter}\{\textless{}packagename\textgreater\}
+% \end{sourcedisplay}
+% to |lwarp.dtx| in \cref{sec:loadafter}. This causes \pkg{lwarp} to stop with
+% an error if \pkg{packagename} is loaded before \pkg{lwarp}.
+% Finally, add an entry in \cref{tab:supported}, \nameref{tab:supported},
+% and also the Updates section.
+%
+%
+% \subsection{Modifying a class for \pkg{lwarp}}
+%
+% \gindex{class>modifying for \pkg{lwarp}}
+% \gindex{modifying>class}
+% \gindex{adapting>class}
+% \gindex{converting>class}
+%
+% If a class loads additional packages, it will be required to modify the
+% class for \pkg{lwarp}, since \pkg{lwarp} must be loaded before most other packages.
+%
+% To work with \pkg{lwarp}, a class must first set up anything which replicates
+% the functions of the basic \LaTeX\ classes, load any required fonts,
+% then load \pkg{lwarp}, then finally load and adjust any other required packages.
+%
+%
+% \subsection{Testing \pkg{lwarp}}
+%
+% \changes{v0.25}{2017/03/22}{Docs: Testing \pkg{lwarp}.}
+%
+% When changes have been made, test the print output before testing the
+% \HTML. The print output compiles faster, and any errors in the printed
+% version will be easier to figure out than the \HTML\ version.
+%
+% Remember that the configuration files are only rewritten when compiling the
+% printed version of the document.
+%
+% \changes{v0.57}{2018/05/28}{Docs: Recompiling \prog{lwarpmk} or \CSS\ files.}
+% When changing the source to \prog{lwarpmk} or a \CSS\ file in \filenm{lwarp.dtx}:
+% \begin{enumerate}
+% \item Change the source in \filenm{lwarp.dtx}.
+% \item |pdflatex lwarp.ins|
+% \item |pdflatex lwarp.dtx|
+% \item If modifying \prog{lwarpmk} the new version should now be active.
+% \item If modifying \CSS\ files:
+% \begin{enumerate}
+% \item For the document, |lwarpmk print| to update the \CSS\ files
+% in the project.
+% \item Reload the \HTML\ document to see the effect of the new \CSS\ files.
+% \end{enumerate}
+% \end{enumerate}
+%
+% Sometimes it is worth checking the |<project>_html.pdf| file, which is the
+% \PDF\ containing \HTML\ tags. Also, |<project>_html.html| has
+% the text conversion of these tags, before the file is split into individual
+% \HTML\ files.
+%
+% It is also worth checking the browser's tools for verifying the correctness
+% of \HTML\ and \CSS\ code.
+%
+%
+% \subsection{Modifying \prog{lwarpmk}}
+% \label{sec:modifylwarpmk}
+%
+% \changes{v0.28}{2017/04/14}{Docs: Modfying lwarpmk and index processing.}
+%
+% \DescribeProgram{lwarpmk}
+% \DescribeFile{lwarpmk.lua}
+% In most installations, \filenm{lwarpmk.lua} is an executable file located somewhere
+% \gindex{lwarpmk=\prog{lwarpmk}>customizing}
+% the operating system knows about, and it is called by typing \cmds{lwarpmk} into
+% a terminal.
+%
+% A project-local copy of \filenm{lwarpmk.lua} may be generated, modified, and then used to
+% compile documents:
+% \begin{enumerate}
+% \item Add the \optn{lwarpmk} option to the \pkg{lwarp} package.
+% \item Recompile the printed version of the document.
+% The \optn{lwarpmk} option causes \pkg{lwarp} to create a local copy of \filenm{lwarpmk.lua}
+% \item The \optn{lwarpmk} option may now be removed from the \pkg{lwarp} package.
+% \item Copy and rename \filenm{lwarpmk.lua} to a new file such as \filenm{mymake.lua}.
+% \item Modify \filenm{mymake.lua} as desired.
+% \item If necessary, make \filenm{mymake.lua} executable.
+% \item Use \filenm{mymake.lua} instead of \filenm{lwarpmk.lua}.
+% \end{enumerate}
+%
+%
+%
+% \clearpage
+%
+% ^^A *troubleshooting
+% \section{Troubleshooting}
+% \label{sec:troubleshooting}
+% \gindex{FAQ}\gindex{Frequently Asked Questions}\gindex{bugs}
+% \gindex{troubleshooting}\gindex{problems}\gindex{error messages}
+% \gindex{debugging}
+% \trouble{error messages}
+% \trouble{warning messages}
+%
+%
+% \subsection{\pkg{lwarp} package error conditions and warnings}
+% \label{sec:errortestingmessages}
+% \changes{v0.71}{2019/04/11}{Docs: Error testing.}
+%
+% \pkg{lwarp} tests for a number of error conditions and prints appropriate
+% warnings. The following is a summary of these conditions.
+%
+% \subsubsection{Configuration file \filenm{lwarpmk.conf}}
+%
+% \begin{description}
+% \item[File does not exist:] The configuration file must exist for \pkg{lwarpmk}.
+% \item[Incorrect \optn{Unix} \slash \optn{Windows} selection:] The operating
+% system which was detected by \pkg{lwarp}. So far only \optn{Unix} and \optn{Windows}
+% are supported.
+% \item[Incorrect delimiter characters.] Older versions of \prog{lwarpmk} used
+% a different delimiter.
+% \item[Source name is set to \optn{lwarp}:]
+% \pkg{lwarp} has recently been recompiled in this directory,
+% which overwrote the project's configuration files.
+% This also occurs if \prog{lwarpmk} is executed in \pkg{lwarp}'s source directory.
+% \item[Incorrect operating system:] The configuratio file was set for a
+% different operating system, perhaps due to sharing in a collaborative project.
+% \item[Outdated configuration files:] \pkg{lwarp} has
+% been updated since this projects was last compiled.
+% If there appears to be a valid print command in the file, \pkg{lwarpmk} displays
+% this to instruct the user how to recompile the print version, which then
+% updates the configuration files.
+% \item[The designated source file does not exist:] For whatever reason\dots
+% \item[Unknown engine:] \pkg{lwarp} cannot determing which engine is being used.
+% Supported are \DVI\ \LaTeX, \PDF\ \LaTeX, \XeLaTeX, \LuaLaTeX, and up\LaTeX.
+% \end{description}
+%
+% \subsubsection{Image generation with \cmds{lwarpmk limages}}
+%
+% \begin{description}
+% \item[``Wait a moment for the images to complete before reloading page.'':] \
+%
+% Images
+% are generated by background tasks. If the document is reloaded before these
+% tasks are complete, some images may not yet be generated.
+% \prog{lwarpmk} tries to wait for background tasks to complete before exiting.
+% \item[\HTML\ version does not exist:] Images are extracted from the \HTML\ version,
+% which must be compiled before images are generated.
+% \item[\filenm{*-images.txt} does not exist:] This file tells which images to
+% extract from the \HTML\ file. If the file does not exist, it may be that
+% no \SVG\ math or \env{lateximage}s were used.
+% If so, \cmds{lwarpmk limages} is not necessary.
+% \item[Cross references are not correct:] The document must have up-to-date
+% cross references to locate the images to extract.
+% A number of conditions may cause incorrect cross references.
+% \item[``WARNING: Images will be incorrect.'':] An image reference was not found.
+% Recompile.
+% \item[\cmds{lwarpmk epstopdf *} or \cmds{lwarpmk pdftosvg *}:] Errors if
+% filenames are not found.
+% \end{description}
+%
+% \subsubsection{Default bitmapped font}
+%
+% \pkg{lwarp} requires the use of a vector font.
+% If \pkg{lwarp} detects that the document uses the default
+% \brand{Computer Modern} font, and the \pkg{cm-super} package is not installed,
+% it is assumed that the font is bitmapped.
+% An error is generated, along with the recommendation to install \pkg{cm-super}
+% or use \pkg{lmodern}.
+%
+% \subsubsection{Packages}
+%
+% \begin{description}
+% \item[Loaded before \pkg{lwarp}:] Some packages and classes must be loaded
+% before \pkg{lwarp}. These include input and font encoding,
+% \pkg{morewrites} and \pkg{newclude},
+% and a number of CJK-related packages and classes.
+% \item[Loaded after \pkg{lwarp}:] Most packages which are modified by
+% \pkg{lwarp} must be loaded after \pkg{lwarp}.
+% \item[Loaded never:] Some packages do not work with \pkg{lwarp}.
+% An error is generated, along with a list of alternatives to consider.
+% \item[Specific packages:] Some packages enforce a specific load order vs.
+% certain other packages.
+% \item[Patching error:] \pkg{lwarp} tries to patch some packages using
+% \pkg{xpatch}. If the original package has been updated more recently than
+% \pkg{lwarp}, a patch may not work. It may be necessary to use an older version
+% of the package until \pkg{lwarp} is updated.
+% \item[\pkg{longtable}:] \pkg{lwarp}'s \pkg{longtable} package issues
+% detailed error messages regarding the use of the table headers and footers.
+% \end{description}
+%
+% \subsubsection{Compiling}
+%
+% \begin{description}
+% \item[Duplicate filenames:] \pkg{lwarp} may generate file names from section names.
+% While doing so, the filenames are simplified and special characters are removed.
+% If this process generates a duplicate filename, and error is generated,
+% describing the filename and which section name generated it.
+% \item[Multirow:] When \cs{multirow} or \cs{multicolrow} are used,
+% \cs{mrowcell} or \cs{mcolrowcell} must be placed in the appropriate cells to
+% avoid corrupted \HTML\ output.
+% \item[(width,height) missing a comma:] \cs{makebox} and \cs{framebox} can accept
+% a parenthesis-delimited width and height, which must be separated by a comma.
+% \item[``Load graphicx or graphics for improved SVG math baselines.'':] \SVG\ math
+% baselines are improved if either of these packages are used.
+% \item[``Load graphicx or graphics for improved XeTeX logo.'':] If these packages
+% are loaded, the \XeLaTeX\ logo can use the reversed ``E''.
+% \item[``It is recommended to use \texttt{[width=xx\cs{linewidth}]}
+% instead of
+% \texttt{[scale=yy]}
+% '':] Browser support of \optn{scale} is not
+% the same effect as \LaTeX.
+% \end{description}
+%
+%
+% \subsection{Using the \pkg{lwarp} package}
+%
+% The following address problems which may occur, and possible solutions to each.
+%
+% Also see: \\
+% \Cref{sec:printcommands}: \nameref{sec:printcommands} \\
+% \Cref{sec:limitations}: \nameref{sec:limitations}
+%
+% \changes{v0.14}{2016/03/26}{Docs: Troubleshooting cross-references.}
+% \changes{v0.16}{2016/04/08}{Docs: Text not converting.}
+% \changes{v0.34}{2017/08/08}{Docs: Misplaced alignment character.}
+% \changes{v0.42}{2017/10/13}{Docs: Improper \cs{prevdepth}.}
+% \changes{v0.58}{2018/06/07}{Docs: Misplaced \cs{omit}.}
+%
+% \begin{description}
+%
+% \item [Text is not converting correctly / corrupted \HTML\ tags:] ~
+% \trouble{HTML>corrupted}
+% \begin{itemize}
+% \item Font-related UTF-8 information must be embedded in the \PDF\ file.
+% See \cref{sec:fonts} regarding bitmapped vs. vector fonts.
+% \item See \cref{sec:avoidtextformatting} regarding \HTML\ entities and
+% the characters |&|, |<|, and |>|.
+% \end{itemize}
+%
+% \item [Undefined \HTML\ settings:] \
+% \trouble{HTML>settings>undefined}
+% \begin{itemize}
+% \item See the warning regarding the placement of the \HTML\ settings
+% at \cref{sec:htmlsettings}.
+% \end{itemize}
+%
+% \item [Tabular problems:] See \cref{sec:limitstabular}.
+%
+% \item [Obscure error messages:] ~
+% \begin{description}
+% \setlength{\parskip}{1ex}
+% \item [Print first:] Be sure that a print version of the document compiles and
+% that your document's \LaTeX{} code is correct, before attempting
+% to generate an \HTML\ version.
+%
+% \item [\texttt{\cs{end}\{warpHTML\}, \cs{end}\{warpprint\}, \cs{end}\{warpall\}}:]
+% \trouble{warpHTML}\trouble{warpprint}\trouble{warpall}
+% Each of these must be without any other characters on the same line.
+%
+% \item [Options clash:] If using \pkg{memoir}, see \cref{sec:limitsmemoir}.
+%
+% \item [``No room for a new \cs{write}.'':] Before |\usepackage{lwarp}|, add:
+% \trouble{No room for a new \cs{write}}
+% \trouble{morewrites}
+% \begin{sourcedisplay}
+% \cs{usepackage}\{morewrites\} \\
+% \cs{morewritessetup}\{allocate=10\}
+% \end{sourcedisplay}
+%
+% \item [``Missing \$ inserted.'':] If using a filename or URL in a
+% footnote or \cs{item}, escape underscores with \cs{\_}.
+% \trouble{Missing \$ inserted>filename or URL}
+% \trouble{URL>Missing \$ inserted}
+% \trouble{filename>Missing \$ inserted}
+%
+% \item [``Label(s) may have changed. Rerun to get cross-references right.'':] \
+%
+% This warning may repeat endlessly if a math expression is used in a caption.
+% Simple math expressions such as \$X=1\$ may be replaced with
+% \begin{sourcedisplay}
+% \cs{textit}\{X\}\cs{,}=\cs{,}1
+% \end{sourcedisplay}
+% \trouble{Label(s) may have changed}
+%
+% \item [``Leaders not followed by proper glue'':] This can be caused by
+% a missing |l@<floattype>| or |l@<sectiontype>| definition.
+% See \pkg{lwarp}'s definitions for examples.
+% \trouble{Leaders not followed by proper glue}
+%
+% \item [``Improper \cs{prevdepth}'':]
+% \trouble{Improper \cs{prevdepth}>boxes}
+% \env{lateximage}s and \SVG\ math require \cs{newpage}, which
+% cannot work inside \TeX\ boxes or \cs{ensuremath}.
+% Anything using \cs{newsavebox}, \cs{newbox}, \env{lrbox},
+% \cs{savebox}, \cs{hbox}, \cs{vbox}, \cs{usebox}, \cs{sbox},
+% etc., must be modified to work without box commands.
+%
+% \trouble{ensuremath=\cs{ensuremath}}
+% If you find something using \cs{ensuremath}, have it temporarily set:
+% \begin{sourcedisplay}
+% \cs{LetLtxMacro}\cs{@ensuredmath}\cs{LWR@origensuredmath}
+% \end{sourcedisplay}
+% inside a group first.
+%
+% Also, custom macros which appear inside a section,
+% \trouble[macros in section,table,figure names]{sectioning>macro in name}
+% \trouble{table>macro in name}
+% \trouble{figure>macro in name}
+% figure, or table name should be
+% made robust since they appear inside the \filenm{.toc}, \filenm{.lof}, or
+% \filenm{.lot} files.
+% Use \cs{newrobustcmd} or \cs{robustify} from \pkg{etoolbox}, \pkg{xparse}, etc.
+%
+% If using BibTeX, see \cref{sec:limitsbibtex}.\watchout[BibTeX]
+%
+% \item[``\texttt{!~Undefined control sequence. \dots\ \cs{@begindocumenthook}''}:] ~
+% \watchout[\pkg{polyglossia}]
+% See \cref{sec:limitspolyglossia}
+% if using \pkg{polyglossia}.
+%
+% \item[``\texttt{\cs{begin}\{equation\} ended by \cs{end}\{document\}}'':] Do not
+% \trouble[custom macros for environments]{math>custom macros}
+% use custom macros such as \cs{beq} and \cs{eeq} to replace
+% \begin{sourcedisplay}
+% \cs{begin}\{equation\} \\
+% \dots \\
+% \cs{end}\{equation\}
+% \end{sourcedisplay}
+%
+% \item[``\texttt{Misplaced \cs{omit}}'':] If using \cs{LWR@formatted} to
+% \watchout[\cs{LWR@formatted}]
+% define new macros for print and \HTML\ modes, see \cref{sec:definingprinthtml}
+% regarding \cs{LWR@expandableformatted}.
+%
+% \item[Complicated objects inside math:] Some objects, such as \tikz,
+% \trouble[``impure'' math objects]{math>non-math contents}
+% may not compile in \pkg{lwarp}'s normal math emulation.
+% Insert
+% \begin{sourcedisplay}
+% \cs{displaymathother} \textrm{-or-} \cs{inlinemathother}
+% \end{sourcedisplay}
+% before the math, and then
+% \begin{sourcedisplay}
+% \cs{displaymathnormal} \textrm{-or-} \cs{inlinemathnormal}
+% \end{sourcedisplay}
+% when displaying ``normal'' math.
+% See \cref{sec:displaymathother}.
+% \item[Slow compliation of math objects:] Complicated math objects
+% \trouble{math>slow or failed compile}
+% \trouble{math>alt tags}
+% \trouble{alt tags}
+% can also cause problems with \attribute{alt} tags, resulting in
+% very slow compilation, large \attribute{alt} tags, and possible
+% crashes. Use \cs{inlinemathother} \dots \cs{inlinemathnormal} or
+% \cs{displaymathother} \dots \cs{displaymathnormal} around the
+% math expression.
+% \end{description}
+%
+% \needspace{3\baselineskip}
+% \item [Incorrect \brand{MathJax}:] Some objects do not convert to \brand{Mathjax}.
+% \trouble[\brand{MathJax}]{MathJax=\brand{MathJax}>errors}
+% \trouble[\brand{MathJax}]{MathJax=\brand{MathJax}>unsupported packages}
+% Use \cs{displaymathother} before these objects, then \cs{displaymathnormal} to return
+% to ``normal'' display math.
+% See \cref{sec:displaymathother}.
+%
+% \needspace{3\baselineskip}
+% \item [Missing sections:] See \cref{sec:filedepth} regarding the
+% |FileDepth| and |SideTOCDepth| counters,
+% and the use of \cs{tableofcontents} in the home page.
+%
+% \item [Misnumbered footnotes from section headings:] See \cref{sec:limitsfootnotes}.
+%
+% \item [Missing \HTML\ files:] \
+% \begin{itemize}
+% \item See the warning regarding changes to the \HTML\ settings
+% at \cref{sec:htmlsettings}.
+% \item Ensure that the filenames are unique after math and short words are removed.
+% See \optn{FileSectionNames} at \cref{sec:htmlsettings}.
+% \end{itemize}
+%
+% \item [Missing / incorrect cross-references:] ~
+% \trouble{reference>missing or incorrect}
+% \trouble{cross reference>missing}
+% \begin{itemize}
+% \item Use |lwarpmk again| followed
+% by |lwarpmk html| or |lwarpmk print| to compile the document one more time.
+% \item \limitsreferences
+% \item \limitscpageref
+% \end{itemize}
+%
+% \item [BibTeX errors with \cs{etalchar}:] See \cref{sec:limitsbibtex}.
+%
+% \item [Malformed URLs:] Do not use the \texttt{\%} character between
+% \trouble{hyperref=\pkg{hyperref}>incorrect link}
+% \trouble{reference>incorrect link}
+% \trouble{cross reference>incorrect link}
+% \trouble{reference>\% character between arguments}
+% arguments of \cs{hyperref}, etc., as this character is among those which
+% is neutralized for inclusion in \HTML\ \URL{}s.
+%
+% \item [Em-dashes or En-dashes in listing captions and titles:] \
+%
+% Use \XeLaTeX\ or \LuaLaTeX.
+% \trouble{listings=\pkg{listings}}
+%
+% \item [Floats out of sequence:] ~
+% \trouble{float>out of sequence}
+% \begin{description}
+% \item [Mixed ``Here'' and floating:] Floats [H]ere and regular floats may
+% become out of order. \cs{clearpage} if necessary.
+% \item [Caption setup:] With \cs{captionsetup} set the positions for
+% the captions |above| or |below| to match their use in the source code.
+% \end{description}
+%
+% \item [Images are appearing in strange places:] ~
+% \trouble{image>incorrect}
+% \trouble{SVG image>incorrect}
+% \begin{itemize}
+% \item Enter \cmds{lwarpmk limages} to refresh the \env{lateximage} images.
+% \end{itemize}
+%
+% \item[SVG images:] \
+%
+% \limitssvgimages
+%
+% \needspace{3\baselineskip}
+% \item [Plain-looking document:] \
+% \trouble{CSS}
+% \begin{itemize}
+% \item The document's \CSS\ stylesheet may not be available, or may be
+% linked incorrectly. Verify any \cs{CSSFilename} statements point to
+% a valid \CSS\ file.
+% \end{itemize}
+%
+% \item [Broken fragments of HTML:] ~
+% \trouble{HTML>corrupted}
+% \begin{itemize}
+% \item Check the \PDF\ file used to create \HTML\
+% to see if the tags overflowed the margin.
+% (This is why such large page size and margins are used.)
+% \end{itemize}
+%
+% \item [Changes do not seem to be taking effect:] ~
+% \trouble{HTML>page did not update}
+% \trouble{HTML>missing pages>recompile}
+% \begin{itemize}
+% \item Be sure to |lwarpmk clean|, recompile, then start by reloading the home page.
+% You may have been looking at an older version of the document.
+% If you changed a section name, you may have been looking at
+% the file for the old name.
+% \item See the warning regarding changes to the \HTML\ settings
+% at \cref{sec:htmlsettings}.
+% \item Verify that the proper \CSS\ is actually being used.
+% \item The browser may compensate for some subtle changes, such as
+% automatically generating ligatures, reflowing text, etc.
+% \end{itemize}
+%
+% \item [Un-matched conditional compiles:] ~
+% \begin{itemize}
+% \item Verify the proper |begin|/|end| of |warpprint|, |warpHTML|, and |warpall| environments.
+% \end{itemize}
+%
+% \end{description}
+%
+%
+% \subsubsection{Debug tracing output}
+%
+% \DescribeMacro{\tracinglwarp}
+% \trouble{tracing lwarp}
+% When \cs{tracinglwarp} is used, \pkg{lwarp} will add extra
+% tracing messages to the |.log| file. The last several messages
+% may help track down errors.
+%
+% Place \cs{tracinglwarp} just after |\usepackage{lwarp}| to
+% activate tracing.
+%
+%
+%
+%
+% \subsection{Compiling the \filenm{lwarp.dtx} file}
+%
+% \begin{description}
+% \item [\filenm{lwarp_tutorial.tex}:] Copy or link \filenm{lwarp_tutorial.txt}
+% from the \TDS\ |doc| directory to the |source| directory,
+% or wherever you wish to compile the documentation.
+% This file is included verbatim in the documentation, but is in the \filenm{doc}
+% directory so that it may be found by \prog{texdoc} and copied by the user.
+% \item [Illogical error messages caused by an out-of-sync \filenm{lwarp.sty} file:] ~
+% \begin{enumerate}
+% \item Delete the \filenm{lwarp.sty} file.
+% \item Enter \cmds{pdflatex lwarp.ins} to generate a new \filenm{lwarp.sty} file.
+% \item Enter \cmds{pdflatex lwarp.dtx} to recompile the \filenm{lwarp.pdf} documentation.
+% \end{enumerate}
+%
+% \item [Un-nested environments:]~
+%
+% Be sure to properly nest:
+% \begin{itemize}
+% \item |\begin{macrocode}| and |\end{macrocode}|
+% \item |\begin{macro}| and |\end{macro}|
+% \item |\begin{environment}| and |\end{environment}|
+% \end{itemize}
+% \end{description}
+%
+%
+%
+% \clearpage
+% \section{Trademarks}
+%
+% \changes{v0.14}{2016/03/29}{Docs: Trademarks section.}
+%
+% \begin{itemize}
+% \item \TeX\ is a trademark of American Mathematical Society.
+% \item \brand{Adobe}® and \brand{Adobe} \prog{Framemaker}® are either registered trademarks or
+% trademarks of \brand{Adobe Systems Incorporated} in the United States and/or other countries.
+% \item \brand{Linux}® is the registered trademark of Linus Torvalds in the U.S.\ and other countries.
+% \item \brand{Mac\,OS}® is a trademark of \brand{Apple Inc.}
+% \item \brand{MadCap Flare}™ is the property of \brand{MadCap Software, Inc.}
+% \item \brand{MathJax} is copyright 2009 and later.
+% The \brand{MathJax Consortium} is a joint venture of the \brand{American Mathematical Society} (AMS)
+% and the \brand{Society for Industrial and Applied Mathematics} (SIAM)
+% to advance mathematical and scientific content on the web.
+% \item \brand{Microsoft}®, \brand{Encarta}, \brand{MSN}, and \brand{Windows}® are either registered trademarks or
+% trademarks of \brand{Microsoft Corporation} in the United States and/or other countries.
+% \item \brand{UNIX}® is a registered trademark of \brand{The Open Group}.
+% \item \brand{YouTube}™ is trademark of \brand{Google LLC}.
+% \end{itemize}
+%
+%
+%
+% \changes{v0.61}{2018/09/27}{Docs: Multiple indexes.}
+%
+% \makeatletter
+%
+% \StopEventually{
+% ^^A \part{Change History and Index}
+% ^^A \part{Change History}
+%
+%
+% \pagestyle{plain}
+%
+% ^^A Each index has a prologue which creates its own \part, label,
+% ^^A and meta index entry.
+% \GlossaryPrologue{
+% \part{Change History}
+% \section{Chg Hist}
+% \label{sec:changehistory}
+% \sindex[meta]{Change History}
+% \markboth{{Change History}}{{Change History}}
+%
+% For the most recent changes, see page \pageref{sec:changesend}.
+%
+% }
+% \PrintChanges
+% \phantomsection
+% \label{sec:changesend}
+%
+%
+% ^^A The instructions for the Index of Objects:
+% \IndexPrologue{
+% \clearpage
+% \expandafter\part\expandafter{\indexname}
+% \label{sec:index\indexshortcut}
+% \sindex[meta]{\indexname}
+% \markboth{Index of Objects}{Index of Objects}%
+%
+% This is an index of macros, environments, booleans, counters, lengths,
+% packages, classes, options, keys, files, and various other programming objects.
+% Each is listed by itself, and also by category.
+% In some cases, they are further subdivided by [class].
+%
+% Numbers written in italic refer to the page
+% where the corresponding entry is described;
+% numbers underlined refer to the
+% \ifcodeline@index
+% code line of the
+% \fi
+% definition.
+% ^^A ; numbers in roman refer to the
+% ^^A \ifcodeline@index
+% ^^A code lines
+% ^^A \else
+% ^^A pages
+% ^^A \fi
+% ^^A where the entry is used.
+% }
+%
+% \printindex[idx][Index of Objects]
+%
+%
+% ^^A The instructions for the General Index:
+% \IndexPrologue{
+% \clearpage
+% \expandafter\part\expandafter{\indexname}
+% \label{sec:index\indexshortcut}
+% \sindex[meta]{\indexname}
+%
+% This is an index of instructions and concepts.
+% Look here when wondering how to do something, and
+% check the Troubleshooting Index when something goes wrong.
+% }
+%
+% \printindex[gen][General Index]
+%
+%
+% ^^A The instructions for the Troubleshooting Index:
+% \IndexPrologue{
+% \clearpage
+% \expandafter\part\expandafter{\indexname}
+% \label{sec:index\indexshortcut}
+% \sindex[meta]{\indexname}
+%
+% This index is a sorted reference of problems and solutions.
+% In order to make it easier to locate a solution,
+% the same issue may be addressed by more than one entry.
+%
+% Entries with higher page numbers are often duplicates of entries with
+% lower page numbers, as the same warning may occur within the user manual
+% and again within the source code for a given package.
+% }
+%
+% \printindex[trb][Troubleshooting Index]
+%
+%
+% ^^A The meta index does not get a meta index entry pointing to itself:
+% \IndexPrologue{
+
+% \clearpage
+% \expandafter\part\expandafter{\indexname}
+% \label{sec:index\indexshortcut}
+% }
+%
+% \printindex[meta][Index of Indexes]
+% }
+%
+% \makeatother
+%
+%
+% \clearpage
+%
+% \part{lwarp.sty}
+%
+%
+% \section{Implementation}
+%
+%
+% This package is perhaps best described as a large collection of smaller
+% individual technical challenges,
+% in many cases solved through a number of \sout{crude hacks} clever tricks.
+% Reference sources are
+% given for many of the solutions, and a quick internet search will provide
+% additional possibilities.
+%
+% Judgement calls were made, and are often commented. Improvements are possible.
+% The author is open to ideas and suggestions.
+%
+% Packages were patched for re-use where they provided significant functionality.
+% Examples include \pkg{xcolor} with its color models and conversion to \HTML\
+% color output, and \pkg{siunitx} which provides many number and unit-formatting
+% options, almost all of which are available in pure-text form, and thus
+% easily used by \prog{pdftotext}.
+%
+% Packages were emulated where their primary purpose was visual formatting which is not
+% relevent to \HTML\ output. For example, packages related to sectioning
+% are already patched by numerous other packages, creating a difficult number of
+% combinations to try to support, and yet in \HTML\ output all of the
+% formatting is thrown away, so these packages are merely emulated.
+%
+% Packages with graphical output are allowed as-is, but must be nested inside a
+% \env{lateximage} environment to preserve the graphics.
+%
+%
+%
+% Testing has primarily been done with the Iceweasel/Firefox browser.
+%
+%
+% \clearpage
+%
+% \section{Section depths and \HTML\ headings}
+% \label{sec:stackdepths}
+% \gindex{HTML>headings}
+% \gindex{section>depths}\gindex{stack depths}
+%
+% Stacks are created to track depth inside the \LaTeX{} document structure.
+% This depth is translated to \HTML\ headings as shown
+% in \cref{tab:depthsheadings}.
+% ``Depth'' here is not
+% depth in the traditional computer-science stack-usage sense, but rather a
+% representation of the nesting depth inside the \LaTeX{} document structure.
+%
+% When starting a new section, the program first must close out any existing
+% sections and lists of a deeper level to keep the \HTML\ tags nested correctly.
+%
+% \begin{table}
+% \centering
+% \begin{threeparttable}
+% \caption{Section depths and \HTML\ headings\label{tab:depthsheadings}}
+% \begin{tabular}{lcl}
+% \toprule
+% Section & \parbox[b]{.35in}{\centering\LaTeX\ depth} &
+% \HTML\ headings \tnote{\textasteriskcentered} \\
+% \midrule
+% Title of the entire website & & \element{h1} \\
+% (none) & -5 & new for this package \\
+% book & -2 & \element{div class = "book"} \\
+% part & -1 & \element{h2} \\
+% chapter & 0 & \element{h3} \\
+% section & 1 & \element{h4} \\
+% subsection & 2 & \element{h5} \\
+% subsubsection & 3 & \element{h6} \\
+% paragraph & 4 & \element{span class = "paragraph"} \\
+% subparagraph & 5 & \element{span class = "subparagraph"} \\
+% listitem & 7 & new for this package, used for list items \\
+% \bottomrule
+% \end{tabular}
+% \begin{tablenotes}
+% \footnotesize
+% \item{\textasteriskcentered} If |FormatWP| is true,
+% section headings may be adjusted, depending on |WPTitleHeading|.
+% See \cref{tab:WPsectionheadings} on \cpageref{tab:WPsectionheadings}.
+% \end{tablenotes}
+% \end{threeparttable}
+% \smallskip
+% \hrule
+% \end{table}
+%
+% Support for the \pkg{memoir} package will require the addition of a |book|
+% level, which may push the \HTML\ headings down a step, and also cause
+% |subsubsection| to become a \element{div} due to a limit of six \HTML\ headings.
+%
+% It is possible to use \HTMLfive{} \element{section} and \element{h1} for all levels,
+% but this may not be well-recognized by older browsers.
+%
+% Fixed levels for parts and chapters allow the \CSS\ to remain fixed as well.
+%
+%
+% \clearpage
+%
+%
+%
+% \section{Source code}
+%
+% ^^A *source
+%
+% This is where the documented source code for \pkg{lwarp} begins,
+% continuing through the following sections all the way to the
+% change log and index at the end of this document.
+%
+% \gindex{numbers>left margin}\gindex{line numbers}
+% \gindex{margin>numbers}\gindex{margin>tags}
+% \documentationnotes
+% \gindex{warning icon}\gindex{danger icon}\gindex{icon>warning}
+% \changes{v0.15}{2016/04/05}{Docs: Added warning icons for items needing
+% special attention.}
+%
+% \vfill
+%
+% \begin{center}
+% --- \pkg{lwarp} source code begins on the following page ---
+% \end{center}
+%
+%
+%
+% \clearpage
+%
+% \section{Detecting the \TeX\ engine — \prog{pdflatex}, \prog{lualatex}, \prog{xelatex}}
+%
+% \changes{v0.16}{2016/04/07}{Added XeLaTeX, LuaLaTeX support.}
+% See: \url{http://tex.stackexchange.com/a/47579}.
+%
+% Detects \XeTeX{} and \LuaLaTeX:
+% \gindex{Xe\LaTeX>detection}\gindex{Lua\LaTeX>detection}
+%
+% \begin{macrocode}
+\RequirePackage{iftex}
+\newif\ifxetexorluatex
+\ifXeTeX
+ \xetexorluatextrue
+\else
+ \ifLuaTeX
+ \xetexorluatextrue
+ \else
+ \xetexorluatexfalse
+ \fi
+\fi
+
+\ifLuaTeX
+\RequirePackage{luatex85}% until the geometry package is updated
+\fi
+
+\RequirePackage{ifpdf}
+% \end{macrocode}
+%
+% \changes{v0.63}{2018/11/25}{Added p\TeX support.}
+%
+% \begin{macrocode}
+\RequirePackage{ifptex}
+% \end{macrocode}
+%
+%
+%
+% \section{Early package requirements}
+%
+% \DescribePackage{etoolbox}
+% Provides \cs{ifbool} and other functions.
+%
+% \DescribePackage{xpatch}
+% Patches macros with optional arguments.
+% \begin{macrocode}
+\RequirePackage{etoolbox}[2011/01/03]% v2.6 for \BeforeBeginEnvironment, etc.
+\RequirePackage{xpatch}
+% \end{macrocode}
+
+
+% \DescribePackage{ifplatform}
+% Provides \cs{ifwindows} to try to automatically detect
+% \brand{Windows} OS.
+%
+% \begin{macrocode}
+\RequirePackage{ifplatform}% sense op-system platform
+% \end{macrocode}
+%
+%
+%
+%
+% \DescribePackage{letltxmacro}
+%
+% \begin{macrocode}
+\RequirePackage{letltxmacro}
+% \end{macrocode}
+%
+%
+%
+% \section{Package load order}
+%
+% \changes{v0.21}{2017/02/22}{Add: Errors for misplaced packages.}
+%
+%
+% Several packages must never be used with \pkg{lwarp},
+% others should only be loaded before \pkg{lwarp},
+% and others should only be loaded after.
+% The \pkg{lwarp} core checks most of these cases.
+% In some \filenm{lwarp-*} packages, \cs{LWR@loadbefore} is used to trigger an error
+% if they are loaded after \pkg{lwarp}, while additional code provides necessary
+% patches for when they are loaded before.
+%
+% Packages which must be loaded after \pkg{lwarp} are enfoced by
+% a large number of \cs{LWR@loadafter} statements, below.
+% Some packages are emulated by \pkg{memoir}, and so these are tested by
+% \cs{LWR@notmemoirloadafter}, which does not cause an error if \pkg{memoir} is used.
+%
+% \cs{LWR@checkloadfilename} is used to check each filename to see if
+% it must never be loaded, or must always be loaded before \pkg{lwarp}.
+%
+%
+% \subsection{Tests of package load order}
+%
+% \begin{macro}{\LWR@loadafter} \marg{packagename} \quad
+% Error if this package was loaded before \pkg{lwarp}.
+%
+% \label{sec:loadafter}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@loadafter}[1]{%
+\@ifpackageloaded{#1}
+{
+ \PackageError{lwarp}
+ {%
+ Package #1,\MessageBreak
+ or one which uses #1,\MessageBreak
+ must be loaded after lwarp
+ }
+ {Move \detokenize{\usepackage}{#1} after
+ \detokenize{\usepackage}{lwarp}.\MessageBreak
+ Package #1 may also be loaded by something else,\MessageBreak
+ which must also be moved after lwarp.}
+}
+{}
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@notmemoirloadafter} \marg{packagename} \quad
+% Error if not \pkg{memoir} class and this package was loaded before \pkg{lwarp}.
+%
+% \pkg{memoir} emulates many packages, and pretends that they have already been loaded.
+%
+% \changes{v0.45}{2017/12/03}{Added.}
+% \begin{macrocode}
+\@ifclassloaded{memoir}
+{\newcommand*{\LWR@notmemoirloadafter}[1]{}}
+{\LetLtxMacro\LWR@notmemoirloadafter\LWR@loadafter}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@notltjloadafter} \marg{packagename} \quad
+% Error if not a \pkg{ltjs*} class and this package was loaded before \pkg{lwarp}.
+%
+% \changes{v0.63}{2018/11/24}{Added.}
+% \changes{v0.63}{2018/12/20}{Added more classes.}
+% \begin{macrocode}
+\LetLtxMacro\LWR@notltjloadafter\LWR@loadafter
+
+\@ifclassloaded{ltjarticle}{\renewcommand*{\LWR@notltjloadafter}[1]{}}{}
+\@ifclassloaded{ltjbook}{\renewcommand*{\LWR@notltjloadafter}[1]{}}{}
+\@ifclassloaded{ltjreport}{\renewcommand*{\LWR@notltjloadafter}[1]{}}{}
+\@ifclassloaded{ltjsarticle}{\renewcommand*{\LWR@notltjloadafter}[1]{}}{}
+\@ifclassloaded{ltjsbook}{\renewcommand*{\LWR@notltjloadafter}[1]{}}{}
+\@ifclassloaded{ltjsreport}{\renewcommand*{\LWR@notltjloadafter}[1]{}}{}
+\@ifclassloaded{ltjspf}{\renewcommand*{\LWR@notltjloadafter}[1]{}}{}
+\@ifclassloaded{ltjskiyou}{\renewcommand*{\LWR@notltjloadafter}[1]{}}{}
+\@ifclassloaded{ltjtarticle}{\renewcommand*{\LWR@notltjloadafter}[1]{}}{}
+\@ifclassloaded{ltjtbook}{\renewcommand*{\LWR@notltjloadafter}[1]{}}{}
+\@ifclassloaded{ltjtreport}{\renewcommand*{\LWR@notltjloadafter}[1]{}}{}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@loadbefore} \marg{packagename} \quad
+% Error if this package is loaded after \pkg{lwarp}.
+%
+% \changes{v0.33}{2017/07/06}{Fix: No \cs{PackageError} if already loaded.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@loadbefore}[1]{%
+\@ifpackageloaded{#1}
+{}
+{
+\PackageError{lwarp}
+{Package #1 must be loaded before lwarp}
+{Move \detokenize{\usepackage}{#1} before \detokenize{\usepackage}{lwarp}.}
+}
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@checkloadbefore}
+% \marg{thispackagename} \marg{packagename}
+%
+% If package names match, error if it is loaded after \pkg{lwarp}.
+%
+% \changes{v0.63}{2018/12/02}{Added.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@checkloadbefore}[2]{%
+ \edef\LWR@tempone{#1}%
+ \ifdefstring{\LWR@tempone}{#2}{%
+ \LWR@loadbefore{#1}%
+ }{}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@loadnever} \marg{badpackagename} \marg{replacementpkgnames}
+%
+% The first packages is not supported, so tell the user to use the second instead.
+%
+% \changes{v0.25}{2017/03/16}{Added the ability to prevent conflicting packages.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@loadnever}[2]{%
+\PackageError{lwarp}
+{%
+ Package #1 is not supported\MessageBreak
+ by lwarp's HTML conversion.\MessageBreak
+ Package(s) #2 may be useful instead
+}
+{%
+ Package #1 might conflict with lwarp in some way,\MessageBreak
+ or is superceded by another package.\MessageBreak
+ For a possible alternative, see package(s) #2.
+}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@checkloadnever}
+% \marg{thispackagename} \marg{badpackagename} \marg{replacementpkgnames}
+%
+% If this package name is the bad packagename, suggest the replacements instead.
+%
+% \changes{v0.63}{2018/12/01}{Added.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@checkloadnever}[3]{%
+ \edef\LWR@tempone{#1}%
+ \ifdefstring{\LWR@tempone}{#2}{%
+ \LWR@loadnever{#2}{#3}%
+ }{}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@earlyloadnever} \marg{badpackagename} \marg{replacementpkgname}
+%
+% The first package is not supported, so tell the user to use the second instead.
+% This version checks immediately for packages which may have been loaded before \pkg{lwarp}.
+%
+% \changes{v0.54}{2018/04/06}{Added.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@earlyloadnever}[2]{%
+\@ifpackageloaded{#1}{%
+\PackageError{lwarp}
+{%
+ Package #1 is not supported\MessageBreak
+ by lwarp's HTML conversion.\MessageBreak
+ Package(s) #2 may be useful instead
+}
+{%
+ Package #1 might conflict with lwarp in some way,\MessageBreak
+ or is superceded by another package.\MessageBreak
+ For a possible alternative, see package(s) #2.
+}
+}{}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@earlyclassloadnever} \marg{badclassname} \marg{replacementclassname}
+%
+% The first class is not supported, so tell the user to use the second instead.
+% This version checks immediately for classes which may have been loaded before \pkg{lwarp}.
+%
+% \changes{v0.63}{2018/11/25}{Added.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@earlyclassloadnever}[2]{%
+\@ifclassloaded{#1}{%
+\PackageError{lwarp}
+{%
+ Class #1 is not supported\MessageBreak
+ by lwarp's HTML conversion.\MessageBreak
+ Class(es) #2 may be useful instead
+}
+{%
+ Class #1 might conflict with lwarp in some way,\MessageBreak
+ or is superceded by another class.\MessageBreak
+ For a possible alternative, see class(es) #2.
+}
+}{}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Error for disallowed packages and classes loaded before lwarp}
+% \changes{v0.54}{2018/04/06}{Added early check for disallowed packages.}
+% \changes{v0.54}{2018/09/26}{Never load \pkg{aecompl}.}
+% \changes{v0.62}{2018/11/18}{Added early checks for \pkg{CJK}, \pkg{CJKutf8}.}
+% \changes{v0.65}{2018/12/15}{Added early checks for \pkg{jarticle}, \pkg{tarticle}, and related.}
+% \changes{v0.66}{2019/01/04}{Added early checks for \pkg{colortab}, \pkg{epsf}, \pkg{hyper},
+% \pkg{picinpar}, \pkg{picins}, \pkg{sistyle}, \pkg{ucs}.}
+% \changes{v0.68}{2019/02/26}{Prevented \pkg{alg}, \pkg{algorithmic}, \pkg{fncylab}, \pkg{pdfcprot}.}
+%
+% \begin{macrocode}
+\LWR@earlyclassloadnever{jarticle}{ujarticle}
+\LWR@earlyclassloadnever{jbook}{ujbook}
+\LWR@earlyclassloadnever{jreport}{ujreport}
+\LWR@earlyclassloadnever{tarticle}{utarticle}
+\LWR@earlyclassloadnever{tbook}{utbook}
+\LWR@earlyclassloadnever{treport}{utreport}
+\LWR@earlyloadnever{ae}{cm-super, lmodern}
+\LWR@earlyloadnever{aecompl}{cm-super, lmodern}
+\LWR@earlyloadnever{aecc}{cm-super, lmodern}
+\LWR@earlyloadnever{alg}{algorithm2e, algorithmicx}
+\LWR@earlyloadnever{algorithmic}{algorithm2e, algorithmicx}
+\LWR@earlyloadnever{boxedminipage}{boxedminipage2e}
+\LWR@earlyloadnever{caption2}{caption}
+% \LWR@earlyloadnever{ccaption}{caption}% might be preloaded by memoir
+% \end{macrocode}
+% The older \pkg{CJK} and \pkg{CJKutf8} only work with \pkg{xeCJK}:
+% \begin{macrocode}
+\@ifpackageloaded{xeCJK}{}{
+ \LWR@earlyloadnever{CJK}{ctex, xeCJK}
+ \LWR@earlyloadnever{CJKutf8}{ctex, xeCJK}
+}
+% \end{macrocode}
+% \pkg{bxcjkatype} is based on \pkg{CJK}:
+% \begin{macrocode}
+\LWR@earlyloadnever{bxcjkjatype}{upLaTeX, bxjsarticle, ujarticle, utarticle}
+% \end{macrocode}
+% \pkg{hangul} is not in TeXLive, and is not tested:
+% \begin{macrocode}
+\LWR@earlyloadnever{hangul}{kotex, xetexko, luatexko}
+% \end{macrocode}
+% Others:
+% \begin{macrocode}
+\LWR@earlyloadnever{colortab}{colortbl}
+\LWR@earlyloadnever{epsf}{graphicx}
+\LWR@earlyloadnever{fancyheadings}{fancyhdr}
+\LWR@earlyloadnever{fncylab}{cleveref}
+\LWR@earlyloadnever{glossary}{glossaries}
+\LWR@earlyloadnever{hyper}{hyperref}
+\LWR@earlyloadnever{pdfcprot}{microtype}
+\LWR@earlyloadnever{picinpar}{floatflt, wrapfig}
+\LWR@earlyloadnever{picins}{floatflt, wrapfig}
+\LWR@earlyloadnever{sistyle}{siunitx}
+\LWR@earlyloadnever{t1enc}{fontenc, inputenc, inputenx}
+\LWR@earlyloadnever{ucs}{inputenc, inputencx}
+\LWR@earlyloadnever{wasysym}{textcomp, amssymb, amsfonts, mnsymbol, fdsymbol}
+% \end{macrocode}
+%
+%
+% \subsection{Enforcing package loading after \pkg{lwarp}}
+%
+% Packages which should only be loaded after \pkg{lwarp} are tested
+% here to trip an error of they have already been loaded.
+%
+% \changes{v0.25}{2017/03/16}{Fix: Allows XE\LaTeX\ and
+% \LuaLaTeX\ to preload graphics and graphicx.}
+% \changes{v0.45}{2017/12/03}{Allows \pkg{memoir}'s preloaded packages.}
+% \changes{v0.58}{2018/06/21}{Fix: \pkg{memoir} and \pkg{ccaption}.}
+%
+% The following packages must be loaded after \pkg{lwarp}:
+% ^^A *loadafter
+% \begin{macrocode}
+\LWR@loadafter{2in1}
+\LWR@loadafter{2up}
+\LWR@loadafter{a4}
+\LWR@loadafter{a4wide}
+\LWR@loadafter{a5comb}
+\LWR@notmemoirloadafter{abstract}
+\LWR@loadafter{academicons}
+\LWR@loadafter{accsupp}
+\LWR@loadafter{acro}
+\LWR@loadafter{acronym}
+\LWR@loadafter{adjmulticol}
+\LWR@loadafter{addlines}
+\LWR@loadafter{ae}
+\LWR@loadafter{aecc}
+\LWR@loadafter{afterpage}
+\LWR@loadafter{algorithm2e}
+\LWR@loadafter{algorithmicx}
+\LWR@loadafter{alltt}
+\LWR@loadafter{amsmath}
+\LWR@loadafter{amsthm}
+\LWR@loadafter{anonchap}
+\LWR@loadafter{anysize}
+\LWR@notmemoirloadafter{appendix}
+\LWR@loadafter{ar}
+\LWR@loadafter{arabicfront}
+\LWR@notmemoirloadafter{array}
+\LWR@loadafter{arydshln}
+\LWR@loadafter{asymptote}
+% \LWR@loadafter{atbegshi}% used by morewrites
+\LWR@loadafter{attachfile}
+\LWR@loadafter{attachfile2}
+\LWR@loadafter{authblk}
+\LWR@loadafter{autonum}
+\LWR@loadafter{axessibility}
+\LWR@loadafter{axodraw2}
+\LWR@loadafter{backnaur}
+\LWR@loadafter{backref}
+\LWR@loadafter{balance}
+\LWR@loadafter{bbding}
+\LWR@loadafter{bigdelim}
+\LWR@loadafter{bigfoot}
+\LWR@loadafter{bigstrut}
+\LWR@loadafter{bitpattern}
+\LWR@loadafter{blowup}
+\LWR@loadafter{booklet}
+\LWR@loadafter{bookmark}
+\LWR@notmemoirloadafter{booktabs}
+\LWR@loadafter{bophook}
+\LWR@loadafter{bounddvi}
+\LWR@loadafter{boxedminipage}
+\LWR@loadafter{boxedminipage2e}
+\LWR@loadafter{breakurl}
+\LWR@loadafter{breqn}
+\LWR@loadafter{bsheaders}
+\LWR@loadafter{bxpapersize}
+\LWR@loadafter{bytefield}
+\LWR@loadafter{cancel}
+\LWR@loadafter{canoniclayout}
+\LWR@loadafter{caption}
+\LWR@loadafter{caption2}
+\LWR@loadafter{cases}
+% \LWR@loadafter{ccaption}% may be preloaded by memoir
+\LWR@loadafter{changebar}
+\LWR@loadafter{changelayout}
+\LWR@notmemoirloadafter{changepage}
+\LWR@loadafter{changes}
+\LWR@loadafter{chappg}
+\LWR@loadafter{chapterbib}
+\LWR@loadafter{chemfig}
+\LWR@loadafter{chemformula}
+\LWR@loadafter{chemgreek}
+\LWR@loadafter{chemmacros}
+\LWR@loadafter{chemnum}
+\LWR@loadafter{chkfloat}
+\LWR@notmemoirloadafter{chngpage}
+\LWR@loadafter{cite}
+\LWR@loadafter{cmdtrack}
+\LWR@loadafter{color}
+\LWR@loadafter{colortbl}
+\LWR@loadafter{continue}
+\LWR@loadafter{copyrightbox}
+\LWR@notmemoirloadafter{crop}
+% ctex must be loaded before lwarp
+\LWR@loadafter{ctable}
+\LWR@loadafter{cuted}
+\LWR@loadafter{cutwin}
+\LWR@loadafter{dblfloatfix}
+\LWR@loadafter{dblfnote}
+\LWR@notmemoirloadafter{dcolumn}
+\LWR@loadafter{diagbox}
+\LWR@loadafter{dingbat}
+\LWR@loadafter{dprogress}
+\LWR@loadafter{draftcopy}
+\LWR@loadafter{draftfigure}
+\LWR@loadafter{draftwatermark}
+\LWR@loadafter{easy-todo}
+\LWR@loadafter{ebook}
+\LWR@loadafter{ed}
+\LWR@loadafter{ellipsis}
+\LWR@loadafter{embrac}
+\LWR@loadafter{emptypage}
+\LWR@loadafter{endfloat}
+\LWR@loadafter{endheads}
+\LWR@loadafter{endnotes}
+\LWR@notmemoirloadafter{enumerate}
+\LWR@loadafter{enumitem}
+\LWR@notmemoirloadafter{epigraph}
+\LWR@loadafter{epsfig}
+\LWR@loadafter{epstopdf}
+\LWR@loadafter{epstopdf-base}
+\LWR@loadafter{eqlist}
+\LWR@loadafter{eqparbox}
+\LWR@loadafter{errata}
+\LWR@loadafter{eso-pic}
+\LWR@loadafter{eurosym}
+\LWR@loadafter{everypage}
+\LWR@loadafter{everyshi}
+\LWR@loadafter{extramarks}
+\LWR@loadafter{fancybox}
+\LWR@loadafter{fancyhdr}
+\LWR@loadafter{fancyheadings}
+\LWR@loadafter{fancyref}
+\LWR@loadafter{fancytabs}
+\LWR@loadafter{fancyvrb}
+\LWR@loadafter{figcaps}
+\LWR@loadafter{figsize}
+\LWR@loadafter{fitbox}
+\LWR@loadafter{fix2col}
+\LWR@loadafter{fixme}
+\LWR@loadafter{fixmetodonotes}
+\LWR@loadafter{flafter}
+\LWR@loadafter{flippdf}
+\LWR@loadafter{float}
+\LWR@loadafter{floatflt}
+\LWR@loadafter{floatpag}
+\LWR@loadafter{floatrow}
+\LWR@loadafter{fltrace}
+\LWR@loadafter{flushend}
+\LWR@loadafter{fnbreak}
+\LWR@loadafter{fncychap}
+\LWR@loadafter{fnlineno}
+\LWR@loadafter{fnpara}
+\LWR@loadafter{fnpos}
+\LWR@loadafter{fontawesome}
+\LWR@loadafter{fontawesome5}
+% fontenc must be loaded before lwarp
+% fontspec must be loaded before lwarp
+\LWR@loadafter{footmisc}
+\LWR@loadafter{footnote}
+\LWR@loadafter{footnotebackref}
+\LWR@loadafter{footnotehyper}
+\LWR@loadafter{footnoterange}
+\LWR@loadafter{footnpag}
+\LWR@loadafter{foreign}
+\LWR@loadafter{forest}
+\LWR@loadafter{framed}
+\LWR@loadafter{ftcap}
+\LWR@loadafter{ftnright}
+\LWR@loadafter{fullminipage}
+\LWR@loadafter{fullpage}
+\LWR@loadafter{fullwidth}
+\LWR@loadafter{fwlw}
+\LWR@loadafter{gentombow}
+% geometry is always loaded by lwarp, and lwarp-geometry is AtBeginDocument
+\LWR@loadafter{gmeometric}
+\LWR@loadafter{glossaries}
+% \LWR@loadafter{graphics}% pre-loaded by xunicode
+% \LWR@loadafter{graphicx}% pre-loaded by xunicode
+\LWR@loadafter{gloss}
+\LWR@loadafter{glossary}
+\LWR@loadafter{grffile}
+\LWR@loadafter{grid}
+\LWR@loadafter{grid-system}
+\LWR@loadafter{gridset}
+\LWR@loadafter{hang}
+\LWR@loadafter{hanging}
+\LWR@loadafter{hypbmsec}
+\LWR@loadafter{hypcap}
+\LWR@loadafter{hypdestopt}
+\LWR@loadafter{hypernat}
+\LWR@loadafter{hyperref}
+\LWR@loadafter{hyperxmp}
+\LWR@loadafter{hyphenat}
+\LWR@loadafter{idxlayout}
+\LWR@loadafter{ifoddpage}
+\LWR@loadafter{imakeidx}
+\LWR@notmemoirloadafter{index}
+% inputenc must be loaded before lwarp
+% inputenx must be loaded before lwarp
+% inputtrc may be loaded before lwarp
+\LWR@loadafter{intopdf}
+\LWR@loadafter{karnaugh-map}
+\LWR@loadafter{keyfloat}
+\LWR@loadafter{layaureo}
+\LWR@loadafter{layout}
+\LWR@loadafter{layouts}
+\LWR@loadafter{leading}
+\LWR@loadafter{letterspace}
+\LWR@loadafter{lettrine}
+\LWR@loadafter{lineno}
+\LWR@loadafter{lips}
+\LWR@loadafter{listings}
+\LWR@loadafter{listliketab}
+\LWR@loadafter{longtable}
+\LWR@loadafter{lscape}
+\LWR@loadafter{ltablex}
+\LWR@loadafter{ltcaption}
+\LWR@loadafter{ltxgrid}
+\LWR@loadafter{ltxtable}
+\LWR@loadafter{lua-check-hyphen}
+\LWR@loadafter{lua-visual-debug}
+\LWR@loadafter{luacolor}
+\LWR@loadafter{luatodonotes}
+\LWR@loadafter{lyluatex}
+\LWR@loadafter{magaz}
+\LWR@notmemoirloadafter{makeidx}
+\LWR@loadafter{manyfoot}
+\LWR@loadafter{marginfit}
+\LWR@loadafter{marginfix}
+\LWR@loadafter{marginnote}
+\LWR@loadafter{marvosym}
+\LWR@loadafter{mathtools}
+\LWR@loadafter{mcaption}
+\LWR@loadafter{mdframed}
+\LWR@loadafter{media9}
+\LWR@loadafter{memhfixc}
+\LWR@loadafter{metalogo}
+\LWR@loadafter{metalogox}
+\LWR@loadafter{mhchem}
+\LWR@loadafter{microtype}
+\LWR@loadafter{midfloat}
+\LWR@loadafter{midpage}
+\LWR@loadafter{minibox}
+\LWR@loadafter{minitoc}
+% morefloats must be allowed early for print mode
+\LWR@notmemoirloadafter{moreverb}
+% morewrites must be loaded before lwarp
+\LWR@notmemoirloadafter{movie15}
+\LWR@notmemoirloadafter{mparhack}
+\LWR@loadafter{multicap}
+%\LWR@loadafter{multicol}% loaded by ltxdoc
+\LWR@loadafter{multicolrule}
+\LWR@loadafter{multimedia}
+\LWR@loadafter{multirow}
+\LWR@loadafter{multitoc}
+\LWR@loadafter{musicography}
+\LWR@loadafter{nameauth}
+\LWR@loadafter{nameref}
+\LWR@loadafter{natbib}
+\LWR@notmemoirloadafter{nccfancyhdr}
+\LWR@notmemoirloadafter{needspace}
+% newclude must be loaded before lwarp
+\LWR@loadafter{newtxmath}
+% newunicodechar must be loaded before lwarp
+\LWR@notmemoirloadafter{nextpage}
+\LWR@loadafter{nicefrac}
+\LWR@loadafter{niceframe}
+\LWR@loadafter{nomencl}
+\LWR@loadafter{nonfloat}
+\LWR@loadafter{nonumonpart}
+\LWR@loadafter{nopageno}
+\LWR@loadafter{notes}
+\LWR@loadafter{notespages}
+\LWR@loadafter{nowidow}
+\LWR@loadafter{ntheorem}
+\LWR@loadafter{octave}
+\LWR@loadafter{overpic}
+\LWR@loadafter{pagegrid}
+\LWR@notmemoirloadafter{pagenote}
+\LWR@loadafter{pagesel}
+\LWR@loadafter{paralist}
+\LWR@loadafter{parnotes}
+\LWR@notmemoirloadafter{parskip}
+\LWR@loadafter{pbox}
+\LWR@loadafter{pdfcomment}
+\LWR@loadafter{pdfcrypt}
+\LWR@loadafter{pdflscape}
+\LWR@loadafter{pdfmarginpar}
+\LWR@loadafter{pdfpages}
+\LWR@loadafter{pdfprivacy}
+\LWR@loadafter{pdfrender}
+\LWR@loadafter{pdfsync}
+\LWR@loadafter{pdftricks}
+\LWR@loadafter{pdfx}
+\LWR@loadafter{perpage}
+\LWR@loadafter{pfnote}
+\LWR@loadafter{phfqit}
+\LWR@loadafter{pifont}
+\LWR@loadafter{placeins}
+\LWR@loadafter{plarray}
+\LWR@loadafter{plarydshln}
+\LWR@loadafter{plextarray}
+\LWR@loadafter{plextarydshln}
+\LWR@loadafter{plcolortbl}
+\LWR@loadafter{plextdelarray}
+\LWR@loadafter{prelim2e}
+\LWR@loadafter{prettyref}
+\LWR@loadafter{preview}
+\LWR@loadafter{psfrag}
+\LWR@loadafter{psfragx}
+\LWR@loadafter{pst-eps}
+\LWR@loadafter{pstool}
+\LWR@loadafter{pstricks}
+% \LWR@loadafter{pxatbegshi}% may be used by morewrites
+\LWR@loadafter{pxeveryshi}
+\LWR@loadafter{pxftnright}
+\LWR@loadafter{pxjahyper}
+\LWR@loadafter{quotchap}
+\LWR@loadafter{quoting}
+\LWR@loadafter{ragged2e}
+\LWR@loadafter{realscripts}
+\LWR@loadafter{refcheck}
+\LWR@loadafter{register}
+\LWR@loadafter{relsize}
+\LWR@loadafter{repeatindex}
+\LWR@loadafter{resizegather}
+\LWR@loadafter{rmpage}
+\LWR@loadafter{romanbar}
+\LWR@loadafter{romanbarpagenumber}
+\LWR@loadafter{rotating}
+\LWR@loadafter{rotfloat}
+\LWR@loadafter{rviewport}
+\LWR@loadafter{savetrees}
+% scalefnt is loaded by babel-french
+\LWR@loadafter{schemata}
+\LWR@loadafter{scrextend}
+\LWR@loadafter{scrhack}
+\LWR@loadafter{scrlayer}
+\LWR@loadafter{scrlayer-notecolumn}
+\LWR@loadafter{scrlayer-scrpage}
+\LWR@loadafter{scrpage2}
+\LWR@loadafter{section}
+\LWR@loadafter{sectionbreak}
+\LWR@loadafter{sectsty}
+\LWR@loadafter{semantic-markup}
+\LWR@notmemoirloadafter{setspace}
+\LWR@loadafter{shadow}
+\LWR@loadafter{shapepar}
+\LWR@notmemoirloadafter{showidx}
+\LWR@loadafter{showkeys}
+\LWR@loadafter{showtags}
+\LWR@loadafter{sidecap}
+\LWR@loadafter{sidenotes}
+\LWR@loadafter{SIunits}
+\LWR@loadafter{siunitx}
+\LWR@loadafter{slantsc}
+\LWR@loadafter{soul}
+\LWR@loadafter{soulpos}
+\LWR@loadafter{soulutf8}
+\LWR@loadafter{splitidx}
+\LWR@loadafter{srcltx}
+\LWR@loadafter{srctex}
+\LWR@loadafter{stabular}
+\LWR@loadafter{stackengine}
+\LWR@notltjloadafter{stfloats}
+\LWR@loadafter{struktex}
+\LWR@loadafter{subcaption}
+\LWR@loadafter{subfig}
+\LWR@loadafter{subfigure}
+\LWR@loadafter{supertabular}
+\LWR@loadafter{t1inc}
+\LWR@loadafter{tabfigures}
+\LWR@loadafter{tabls}
+\LWR@loadafter{tablefootnote}
+\LWR@notmemoirloadafter{tabularx}
+\LWR@loadafter{tabulary}
+\LWR@loadafter{tascmac}
+\LWR@loadafter{textarea}
+% \LWR@loadafter{textcomp}% maybe before lwarp with font packages
+\LWR@loadafter{textfit}
+\LWR@loadafter{textpos}
+\LWR@loadafter{theorem}
+\LWR@loadafter{thinsp}
+\LWR@loadafter{threadcol}
+\LWR@loadafter{threeparttable}
+\LWR@loadafter{threeparttablex}
+\LWR@loadafter{thumb}
+\LWR@loadafter{thumbs}
+\LWR@loadafter{tikz}
+\LWR@loadafter{titleps}
+\LWR@loadafter{titlesec}
+\LWR@loadafter{titletoc}
+\LWR@notmemoirloadafter{titling}
+% \LWR@loadafter{tocbasic}% preloaded by koma-script classes
+\LWR@notmemoirloadafter{tocbibind}
+\LWR@loadafter{tocdata}
+\LWR@loadafter{tocenter}
+\LWR@notmemoirloadafter{tocloft}
+\LWR@loadafter{tocstyle}
+\LWR@loadafter{todo}
+\LWR@loadafter{todonotes}
+\LWR@loadafter{topcapt}
+\LWR@loadafter{tram}
+\LWR@loadafter{transparent}
+\LWR@loadafter{trimclip}
+\LWR@loadafter{trivfloat}
+\LWR@loadafter{truncate}
+\LWR@loadafter{turnthepage}
+\LWR@loadafter{twoup}
+% \end{macrocode}
+% \changes{v0.44}{2017/11/19}{Adjustment for \pkg{koma-script}.}
+% \begin{macrocode}
+% \LWR@loadafter{typearea}% preloaded by koma-script classes
+\LWR@loadafter{typicons}
+% \LWR@loadafter{ulem}% preloaded by ctexart and related classes
+\LWR@loadafter{umoline}
+\LWR@loadafter{underscore}
+\LWR@loadafter{units}
+\LWR@loadafter{unitsdef}
+\LWR@loadafter{upref}
+\LWR@loadafter{url}
+\LWR@loadafter{uspace}
+\LWR@loadafter{varioref}% no lwarp package provided
+\LWR@notmemoirloadafter{verse}
+\LWR@loadafter{versonotes}
+\LWR@loadafter{vertbars}
+\LWR@loadafter{vmargin}
+\LWR@loadafter{vowel}
+\LWR@loadafter{vpe}
+\LWR@loadafter{vwcol}
+\LWR@loadafter{wallpaper}
+\LWR@loadafter{watermark}
+\LWR@loadafter{widows-and-orphans}
+\LWR@loadafter{wrapfig}
+\LWR@loadafter{xbmks}
+\LWR@loadafter{xcolor}
+\LWR@loadafter{xechangebar}
+\LWR@loadafter{xellipsis}
+% xetexko-vertical must be loaded before lwarp
+\LWR@loadafter{xfakebold}
+\LWR@loadafter{xfrac}
+\LWR@loadafter{xltabular}
+\LWR@loadafter{xltxtra}
+\LWR@loadafter{xmpincl}
+\LWR@loadafter{xpiano}
+\LWR@loadafter{xpinyin}
+\LWR@loadafter{xr}
+\LWR@loadafter{xr-hyper}
+\LWR@loadafter{xtab}
+% xunicode must be loaded before lwarp
+\LWR@loadafter{xurl}
+\LWR@loadafter{xy}
+\LWR@loadafter{zwpagelayout}
+% \end{macrocode}
+%
+%
+%
+%
+%
+% \section{MD5 hashing}
+%
+% The MD5 hash is used for \env{lateximage} filenames for \SVG\ math.
+%
+% \begin{macrocode}
+\newcommand{\LWR@mdfive}[1]{%
+\PackageError{lwarp}
+{No MD5 macro was found}
+{Lwarp must find the macros pdfmdfivesum or mdfivesum.}
+}
+% \end{macrocode}
+%
+% The default for pdf\LaTeX, \DVI\LaTeX, up\LaTeX, etc:
+% \changes{v0.63}{2018/11/30}{Fix: Default \cs{LWR@mdfive}.}
+% \begin{macrocode}
+\let\LWR@mdfive\pdfmdfivesum
+% \end{macrocode}
+%
+% For \LuaLaTeX:
+% \begin{macrocode}
+\ifLuaTeX
+\RequirePackage{pdftexcmds}
+\let\LWR@mdfive\pdf@mdfivesum
+\fi
+% \end{macrocode}
+%
+% For \XeLaTeX:
+% \begin{macrocode}
+\ifXeTeX
+\@ifundefined{pdffivesum}{}
+ {\let\LWR@mdfive\pdfmdfivesum}
+\@ifundefined{mdfivesum}{}
+ {\let\LWR@mdfive\mdfivesum}
+\fi
+% \end{macrocode}
+%
+%
+% \section{pdf\LaTeX\ T1 and \UTF-8 encoding}
+%
+% When using pdf\LaTeX, \pkg{lwarp} requires T1 encoding, and recommends \UTF-8 encoding.
+%
+% If some other input encoding is already defined, \pkg{lwarp} will
+% try to use it instead, and hope for the best.
+%
+% \XeLaTeX\ and Lua\LaTeX\ are both \UTF-8 by nature.
+%
+% \changes{v0.44}{2017/11/16}{If pdfLaTeX, require T1 and \UTF-8 encoding.}
+% \changes{v0.52}{2018/03/26}{If pdfLaTeX, allow other input encoding.}
+% \changes{v0.63}{2018/11/25}{p\TeX: Encoding.}
+%
+% \begin{macro}{\LWR@pdfencoding}
+% Sets \optn{T1}, and also \optn{utf8} if not already set.
+% \begin{macrocode}
+\newcommand*{\LWR@pdfencoding}{%
+ \RequirePackage[T1]{fontenc}
+
+ \@ifpackageloaded{inputenc}{}{
+ \@ifpackageloaded{inputenx}{}{
+ \RequirePackage[utf8]{inputenc}
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\ifPDFTeX% pdflatex or dvi latex
+ \LWR@pdfencoding
+\fi
+
+\ifpTeX
+ \LWR@pdfencoding
+\fi
+% \end{macrocode}
+%
+%
+%
+% \section{Unicode input characters}
+% \changes{v0.18}{2016/05/17}{PDF Unicode input characters.}
+% \gindex{Unicode>input characters}
+%
+% \codeall
+%
+% If using \prog{pdflatex}, convert a minimal set of Unicode characters.
+% Additional characters may be defined by the user, as needed.
+%
+% A commonly-used multiply symbol is declared to be \cs{texttimes}.
+%
+% The first arguments of \cs{newunicodechar} below are text ligatures in
+% the source code, even though they are not printed in the following
+% listing.
+%
+% \changes{v0.63}{2018/11/25}{p\TeX: No \pkg{newunicodechar}.}
+% \begin{macrocode}
+\ifpTeX
+\else
+\RequirePackage{newunicodechar}
+
+\newunicodechar{⨯}{\texttimes}
+
+\ifPDFTeX% pdflatex or dvi latex
+\newunicodechar{ff}{ff}% the first arguments are ligatures
+\newunicodechar{fi}{fi}
+\newunicodechar{fl}{fl}
+\newunicodechar{ffi}{ffi}
+\newunicodechar{ffl}{ffl}
+\newunicodechar{—}{---}
+\newunicodechar{–}{--}
+\fi
+
+\fi
+% \end{macrocode}
+%
+%
+% \section{Avoid a bitmapped font}
+%
+% If \DVI\ or \PDF\ \LaTeX,
+% and if the default Computer Modern is the selected font family,
+% ensure that \pkg{cm-super} or \pkg{lmodern} is used to provide a vector font.
+%
+% \changes{v0.70}{2019/03/25}{Ensure vector font.}
+% \begin{macrocode}
+\ifxetexorluatex
+\else
+ \ifdefstring{\f@family}{cmr}{
+ \IfFileExists{type1ec.sty}% found in cm-super
+ {}
+ {% cm-super not installed
+ \IfFileExists{lmodern.sty}{
+ \PackageInfo{lwarp}{cm-super not installed, loading lmodern}
+ \RequirePackage{lmodern}
+ }{
+ \PackageError{lwarp}
+ {%
+ Lwarp requires a vector font.\MessageBreak
+ Install and load cm-super, lmodern, or another\MessageBreak
+ Type-1 vector font before loading lwarp%
+ }
+ {%
+ Install cm-super or lmodern.\MessageBreak
+ If lmodern, load it before lwarp:\MessageBreak
+ \space\space\protect\usepackage{lmodern}\MessageBreak
+ \space\space\protect\usepackage{lwarp}%
+ }
+ }
+ }% cm-super not installed
+ }{}% f@family
+\fi
+% \end{macrocode}
+%
+%
+% \section{Upright quotes}
+%
+% In PDF\TeX, preserve upright quotes in verbatim text.
+% \pkg{upquote} also loads \pkg{textcomp}.
+%
+% \changes{v0.63}{2018/11/25}{p\TeX: Load \pkg{upquote}.}
+% \begin{macrocode}
+\ifPDFTeX
+\RequirePackage{upquote}
+\fi
+
+\ifpTeX
+ \RequirePackage{upquote}
+\fi
+% \end{macrocode}
+%
+%
+%
+% \section{Miscellaneous tools}
+%
+% \subsection{Lengths and units}
+%
+% \begin{macro}{\LWR@providelength} \marg{\cs{lengthname}}
+% Provides the length if it isn't defined yet.
+%
+% Used to provide source compatibility for lengths which will be ignored,
+% but might or might not be already provided by other packages.
+%
+% \changes{v0.46}{2018/01/23}{Added.}
+% \begin{macrocode}
+\newcommand*\LWR@providelength[1]{%
+ \ifdeflength{#1}{}{\newlength{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@convertto} \marg{dest unit} \marg{length}
+%
+% Prints a length in the given units, without printing the unit itself.
+% \begin{macrocode}
+\newcommand*{\LWR@convertto}[2]{\strip@pt\dimexpr #2*65536/\number\dimexpr 1#1}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@printpercentlength} \marg{smaller} \marg{larger}
+%
+% Prints a percent ratio of the two lengths.
+% \begin{macrocode}
+\newcommand*{\LWR@printpercentlength}[2]{%
+ \setcounter{LWR@tempcountone}{100*\ratio{#1}{#2}}%
+ \arabic{LWR@tempcountone}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Patching}
+
+% \begin{macro}{\LWR@patcherror} \marg{packagename} \marg{macroname}
+%
+% Prints an error if could not patch a macro.
+% \begin{macrocode}
+\newcommand*{\LWR@patcherror}[2]{%
+\PackageError{lwarp}
+{Unable to patch package #1, macro #2}
+{Please contact the author of the lwarp package.}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Chinese text isolation}
+%
+% \begin{macro}{\LWR@isolate} \marg{text}
+% Isolates Chinese characters from the surrounding text.
+% This is required to avoid extra spaces on either side of the Chinese
+% characters, especially when written to a file.
+%
+% \changes{v0.62}{2018/11/17}{Added.}
+% \changes{v0.63}{2018/11/24}{Fix for \pkg{xeCJK}.}
+%
+% \begin{macrocode}
+\newcommand{\LWR@isolate}[1]{#1}%
+
+\@ifpackageloaded{ctexpatch}{
+ \renewcommand{\LWR@isolate}[1]{\null#1\null}%
+}{}
+
+\@ifpackageloaded{xeCJK}{
+ \renewcommand{\LWR@isolate}[1]{\null#1\null}%
+}{}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Inserting vertical space}
+%
+% \begin{macro}{\LWR@forceemptyline} Extra vertical space in the \HTML\ output.
+% Use after \cs{LWR@stoppars}.
+% \changes{v0.73}{2019/06/26}{Added.}
+% \begin{macrocode}
+\newcommand*{\LWR@forceemptyline}{%
+ \LWR@origrule{0pt}{1\baselineskip}%
+ \LWR@orignewline%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Argument selection}
+%
+% \begin{macro}{\LWR@firstoffour} \marg{first} \marg{second} \marg{third} \marg{fourth}
+% \changes{v0.63}{2019/01/25}{Added.}
+% \begin{macro}{\LWR@secondoffour} \marg{first} \marg{second} \marg{third} \marg{fourth}
+% \begin{macro}{\LWR@thirdoffour} \marg{first} \marg{second} \marg{third} \marg{fourth}
+% \begin{macro}{\LWR@fourthoffour} \marg{first} \marg{second} \marg{third} \marg{fourth}
+%
+% Expands to the nth of the four arguments.
+% Used for extra cross referencing.
+%
+% \begin{macrocode}
+\long\def\LWR@firstoffour#1#2#3#4{#1}
+\long\def\LWR@secondoffour#1#2#3#4{#2}
+\long\def\LWR@thirdoffour#1#2#3#4{#3}
+\long\def\LWR@fourthoffour#1#2#3#4{#4}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsection{Global boxes}
+%
+% \begin{macro}{\LWR@gsavebox} \marg{macroname} \marg{contents}
+%
+% From
+% \href{https://tex.stackexchange.com/questions/288702/savebox-forgets-its-content-across-columns-inside-align}
+% {https://tex.stackexchange.com/questions/288702/ \\ \fqquad\ savebox-forgets-its-content-across-columns-inside-align}
+%
+% \changes{v0.73}{2019/06/11}{Added global save boxes.}
+%
+% \begin{macrocode}
+\DeclareRobustCommand\LWR@gsavebox[1]{%
+ \@ifnextchar(%)
+ {\LWR@@gsavepicbox#1}{\@ifnextchar[{\LWR@@gsavebox#1}{\LWR@gsbox#1}}}%
+\long\def\LWR@gsbox#1#2{\global\setbox#1\hbox{%
+ \color@setgroup#2\color@endgroup}}
+\def\LWR@@gsavebox#1[#2]{%
+ \@ifnextchar [{\LWR@@igsavebox#1[#2]}{\LWR@@igsavebox#1[#2][c]}}
+\long\def\LWR@@igsavebox#1[#2][#3]#4{%
+ \LWR@gsbox#1{\@imakebox[#2][#3]{#4}}}
+\def\LWR@@gsavepicbox#1(#2,#3){%
+ \@ifnextchar[%]
+ {\LWR@@igsavepicbox#1(#2,#3)}{\LWR@@igsavepicbox#1(#2,#3)[]}}
+\long\def\LWR@@igsavepicbox#1(#2,#3)[#4]#5{%
+ \LWR@gsbox#1{\@imakepicbox(#2,#3)[#4]{#5}}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{environment}{LWR@glrbox} \marg{macroname}
+% \begin{macrocode}
+\def\LWR@glrbox#1{%
+ \edef\reserved@a{%
+ \endgroup
+ \global\setbox#1\hbox{%
+ \begingroup\aftergroup}%
+ \def\noexpand\@currenvir{\@currenvir}%
+ \def\noexpand\@currenvline{\on@line}}%
+ \reserved@a
+ \@endpefalse
+ \color@setgroup
+ \ignorespaces}
+\let\LWR@endglrbox\LWR@endlrbox
+% \end{macrocode}
+% \end{environment}
+%
+%
+%
+% \section{Operating-System portability}
+% \label{sec:OSportability}
+% \changes{v0.11}{2016/03/11}{Added section: Operating-System portability.}
+%
+% \osportabilityusage
+%
+%
+%
+% \subsection{Literal characters}
+%
+% Literal characters to be used in \optn{PrintLatexCmd} and \optn{HTMLLatexCmd}.
+% These are defined without |@| to easily allow their inclusion in the user's document.
+%
+% The literal |%| character:
+% \begin{macrocode}
+\let\LWRpercent\@percentchar
+% \end{macrocode}
+%
+%
+% The literal |$| character:
+% \begin{macrocode}
+\catcode`\$=12
+\def\LWRdollar{$}
+\catcode`\$=3
+% \end{macrocode}
+%
+%
+% The literal |&| character:
+% \begin{macrocode}
+\catcode`\&=12
+\def\LWRamp{&}
+\catcode`\&=4
+% \end{macrocode}
+%
+%
+% The literal |\| character.
+% The ampersand is temporarily set to the escape character during the
+% definition of the backslash macro.
+% \begin{macrocode}
+\catcode`\&=0
+&catcode`&\=12
+&def&LWRbackslash{\}
+&catcode`&\=0
+\catcode`\&=4
+% \end{macrocode}
+%
+%
+% The literal |{| character.
+% The ampersand is temporarily set to the begin group character during the
+% definition of the leftbrace macro.
+% \begin{macrocode}
+\catcode`\&=1
+\catcode`\{=12
+\def\LWRleftbrace&{}
+\catcode`\{=1
+\catcode`\&=4
+% \end{macrocode}
+%
+%
+% The literal |}| character.
+% The ampersand is temporarily set to the end group character during the
+% definition of the leftbrace macro.
+% \begin{macrocode}
+\catcode`\&=2
+\catcode`\}=12
+\def\LWRrightbrace{}&
+\catcode`\}=2
+\catcode`\&=4
+% \end{macrocode}
+%
+%
+% The literal |#| character:
+% \begin{macrocode}
+\catcode`\#=12
+\def\LWRhash{#}
+\catcode`\#=6
+% \end{macrocode}
+%
+%
+% \begin{macro}{\LWRopquote}
+% The operating system's quote mark, \brand{Unix} default.
+% For \brand{Windows}, see \cs{LWR@setOSWindows}, below.
+% \begin{macrocode}
+\def\LWRopquote{'}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWRopseq}
+% The operating system's sequential execution command, \brand{Unix} default.
+% For \brand{Windows}, see \cs{LWR@setOSWindows}, below.
+% \changes{v0.61}{2018/10/06}{Added spaces.}
+% \begin{macrocode}
+\def\LWRopseq{\space\LWRamp\LWRamp\space\space}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Common portability code}
+%
+% \DescribeBoolean{usingOSWindows} Set if the \optn{OSWindows} option is used,
+% or if \brand{Windows} is automatically detected.
+% \begin{macrocode}
+\newbool{usingOSWindows}
+\boolfalse{usingOSWindows}
+% \end{macrocode}
+
+
+% \subsection{\brand{Unix}, \brand{Linux}, and \brand{Mac\,OS}}
+
+% \begin{macro}{\OSPathSymbol}
+% Symbol used to separate directories in a path.
+% \begin{macrocode}
+\newcommand*{\OSPathSymbol}{/}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{\brand{MS-Windows}}
+
+% For \brand{MS-Windows}:
+%
+% \begin{macro}{\LWR@setOSWindows}
+% Set defaults for the \brand{MS-Windows} operating system.
+% \pkg{lwarp} attempts to auto-detect the operatings system,
+% and the \optn{OSWindows} option may also be used to force
+% \brand{MS-Windows} compatibility.
+%
+% \changes{v0.20}{2016/12/19}{Auto-detects operating system.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@setOSWindows}
+{
+\booltrue{usingOSWindows}
+\renewcommand*{\OSPathSymbol}{\@backslashchar}
+\def\LWRopquote{"}
+\def\LWRopseq{\space\LWRamp\space\space}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Test for windows during compile. The user may also specify
+% \optn{OSWindows} package option in case this test fails.
+% \begin{macrocode}
+\ifwindows
+\LWR@setOSWindows
+\fi
+% \end{macrocode}
+
+
+
+
+
+%
+% \section{Package options}
+% \label{sec:handlingpackageoptions}
+%
+%
+
+
+% \DescribePackage{kvoptions}
+% Allows key/value package options.
+% \begin{macrocode}
+\RequirePackage{kvoptions}
+\SetupKeyvalOptions{family=LWR,prefix=LWR@}
+% \end{macrocode}
+
+
+% \begin{macro}{\lwarpsetup}
+% A user interface to set the keys:
+% \changes{v0.61}{2018/09/21}{Added.}
+% \begin{macrocode}
+\newcommand{\lwarpsetup}[1]{\setkeys{LWR}{#1}}
+% \end{macrocode}
+% \end{macro}
+
+
+% \DescribeBoolean{warpingprint}
+% \DescribeBoolean{warpingHTML}
+% \DescribeBoolean{mathjax}
+% \DescribeBoolean{LWR@origmathjax}
+% ^^A \DescribeBoolean{mathKaTeX}
+%
+% Set to true/false depending on the package option selections for
+% print/\HTML/\EPUB\ output and mathsvg/mathjax.
+%
+% \optn{LWR@origmathjax} remembers the original setting to be restored
+% by \cs{displaymathnormal}.
+% \begin{macrocode}
+\newbool{warpingprint}
+\newbool{warpingHTML}
+\newbool{mathjax}
+\newbool{LWR@origmathjax}
+% \end{macrocode}
+% ^^A % \begin{macrocode}
+% ^^A \newbool{mathKaTeX}
+% ^^A % \end{macrocode}
+%
+%
+% The default is print output,
+% \margintag{defaults}
+% and \SVG\ math if the user chose \HTML\ output.
+% \begin{macrocode}
+\booltrue{warpingprint}%
+\boolfalse{warpingHTML}%
+\boolfalse{mathjax}%
+% \end{macrocode}
+%
+%
+%
+% \DescribeOption{warpprint}
+% If the \optn{warpprint} option is given,
+% boolean |warpingprint| is true and boolean |warpingHTML| is false,
+% and may be used for \cs{ifbool} tests.
+%
+%
+% \begin{macrocode}
+\DeclareVoidOption{warpprint}{%
+\PackageInfo{lwarp}{Using option 'warpprint'}
+\booltrue{warpingprint}%
+\boolfalse{warpingHTML}%
+}
+% \end{macrocode}
+
+% \DescribeOption{warpHTML}
+% Anything in the |warpHTML| environment will be generated for \HTML\ output only.
+%
+% \DescribeOption{warpHTML}
+% If the \optn{warpHTML} option is given,
+% boolean |warpingHTML| is true and boolean |warpingprint| is false,
+% and may be used for \cs{ifbool} tests.
+%
+% \begin{macrocode}
+\DeclareVoidOption{warpHTML}{%
+\PackageInfo{lwarp}{Using option 'warpHTML'}%
+\booltrue{warpingHTML}%
+\boolfalse{warpingprint}%
+}
+% \end{macrocode}
+%
+%
+%
+
+
+%
+% \changes{v0.19}{2016/05/25}{Options: mathsvg and mathjax}
+% \DescribeOption{mathsvg}
+% Option \optn{mathsvg} selects \SVG\ math display:
+% \gindex{math>mathsvg=\optn{mathsvg} option}
+% \gindex{SVG>mathsvg=\optn{mathsvg} option}
+% If the \optn{mathsvg} option is given, boolean |mathjax| is false,
+% and may be used for \cs{ifbool} tests.
+% \begin{macrocode}
+\DeclareVoidOption{mathsvg}{%
+\PackageInfo{lwarp}{Using option 'mathsvg'}
+\boolfalse{mathjax}%
+\boolfalse{LWR@origmathjax}%
+% \end{macrocode}
+% ^^A % \begin{macrocode}
+% ^^A \boolfalse{mathKaTeX}%
+% ^^A % \end{macrocode}
+% \begin{macrocode}
+}
+% \end{macrocode}
+%
+% \DescribeOption{mathjax}
+% Option \optn{mathjax} selects \brand{MathJax} math display:
+% \gindex{math>mathjax=\optn{mathjax} option}
+% \gindex{MathJax=\brand{MathJax}>mathjax=\optn{mathjax} option}
+% If the \optn{mathjax} option is given, boolean |mathjax| is true, may be used for \cs{ifbool} tests.
+% \begin{macrocode}
+\DeclareVoidOption{mathjax}{%
+\PackageInfo{lwarp}{Using option 'mathjax'}
+\booltrue{mathjax}%
+\booltrue{LWR@origmathjax}%
+% \end{macrocode}
+% ^^A % \begin{macrocode}
+% ^^A \boolfalse{mathKaTeX}%
+% ^^A % \end{macrocode}
+% \begin{macrocode}
+}
+% \end{macrocode}
+
+% ^^A \DescribeOption{mathKaTeX}
+% ^^A Option \optn{mathKaTeX} selects Ka\TeX\ math display:
+% ^^A \gindex{math>mathKaTeX=\optn{mathKaTeX} option}
+% ^^A \gindex{KaTeX=Ka\TeX>mathKaTeX=\optn{mathKaTeX} option}
+% ^^A If the \optn{mathKaTeX} option is given, boolean |mathKaTeX| is true,
+% ^^A may be used for \cs{ifbool} tests.
+% ^^A Boolean |mathjax| is also set true, as most code is shared with
+% ^^A \brand{MathJax} functions.
+% ^^A \begin{macrocode}
+% ^^A \DeclareVoidOption{mathKaTeX}{%
+% ^^A \PackageInfo{lwarp}{Using option 'mathKaTeX'}
+% ^^A \booltrue{mathjax}%
+% ^^A \booltrue{LWR@origmathjax}%
+% ^^A \booltrue{mathKaTeX}%
+% ^^A }
+% ^^A \end{macrocode}
+
+
+
+% \DescribeOption{BaseJobname}
+% \DescribeDefault{\cs{jobname}}
+% Option \optn{BaseJobname} sets the \cs{BaseJobname} for this document.
+%
+% This is the \cs{jobname} of the printed version, even if currently
+% compiling the \HTML\ version.
+% I.e. this is the \cs{jobname} without |_html| appended.
+% This is used to set \cs{HomeHTMLFilename} if the user did not provide one.
+% \begin{macrocode}
+\DeclareStringOption[\jobname]{BaseJobname}
+% \end{macrocode}
+
+
+% \DescribeOption{ImagesDirectory}
+% \DescribeDefault{\cs{jobname}-images}
+% Option \optn{ImagesDirectory} sets the name of the directory
+% to use for the \env{lateximage} images.
+%
+% \changes{v0.66}{2019/01/27}{Added option \optn{ImagesDirectory}.}
+% \begin{macrocode}
+\DeclareStringOption[\BaseJobname-images]{ImagesDirectory}
+% \end{macrocode}
+
+
+% \DescribeOption{ImagesName}
+% \DescribeDefault{image-}
+% Option \optn{ImagesName} sets the prefix
+% to use for the \env{lateximage} images.
+%
+% \changes{v0.66}{2019/01/27}{Added option \optn{ImagesName}.}
+% \begin{macrocode}
+\DeclareStringOption[image-]{ImagesName}
+% \end{macrocode}
+
+
+% \DescribeOption{makeindexStyle} Selects a custom |.ist| file.
+% \DescribeDefault{lwarp.ist}
+% A customized file should be based on |lwarp.ist|, and must retain
+% the lines related to \cs{hyperindexref}.
+%
+% \changes{v0.58}{2018/06/21}{Added option \optn{makeindexStyle.}}
+%
+% \begin{macrocode}
+\DeclareStringOption[lwarp.ist]{makeindexStyle}
+% \end{macrocode}
+
+
+% \DescribeOption{xindyStyle} Selects a custom |.xdy| file.
+% \DescribeDefault{lwarp.xdy}
+% A customized file should be based on |lwarp.xdy|, and must retain
+% the line
+% \begin{Verbatim}[gobble=2]
+% (markup-locref :open "\hyperindexref{" :close "}")
+% \end{Verbatim}
+%
+% \changes{v0.30}{2017/04/28}{Option \optn{xdyFilename} added.}
+% \changes{v0.54}{2018/04/06}{Option \optn{xdyFilename} changed to \optn{xindyStyle.}}
+%
+% \begin{macrocode}
+\DeclareStringOption[lwarp.xdy]{xindyStyle}
+% \end{macrocode}
+
+
+% \DescribeOption{xindyLanguage} Sets the \pkg{xindy} language to be assigned
+% \DescribeDefault{english}
+% in \prog{lwarpmk}'s configuration files. This is then used by \prog{lwarpmk} while
+% processing the index and glossary.
+%
+% \changes{v0.29}{2017/04/15}{Add: \optn{lwarpmklang} option for \pkg{lwarp}.}
+% \changes{v0.30}{2017/04/28}{Option \optn{lwarpmklang} changed to \optn{IndexLanguage}.}
+% \changes{v0.54}{2018/04/06}{Option \optn{IndexLanguage} changed to \optn{xindyLanguage}.}
+%
+% \begin{macrocode}
+\DeclareStringOption[english]{xindyLanguage}
+% \end{macrocode}
+
+
+% \DescribeOption{xindyCodepage} Sets the \pkg{xindy} codepage to be assigned
+% \DescribeDefault{utf8}
+% in \prog{lwarpmk}'s configuration files. This is then used by \prog{lwarpmk} while
+% processing the index.
+% ^^A and glossary.
+%
+% \changes{v0.54}{2018/04/06}{Add: \optn{xindyCodepage}.}
+%
+% \begin{macrocode}
+\DeclareStringOption[utf8]{xindyCodepage}
+% \end{macrocode}
+
+
+
+% \limitspdftotextenc
+%
+% \changes{v0.54}{2018/04/06}{Add: \optn{pdftotextEnc}.}
+%
+% \begin{macrocode}
+\DeclareStringOption[UTF-8]{pdftotextEnc}
+% \end{macrocode}
+
+
+
+% \DescribeOption{lwarpmk} Tells \pkg{lwarp} to
+% generate a local copy of \prog{lwarpmk} called \filenm{lwarpmk.lua}.
+% Useful for archiving for future use.
+% This file may be made executable and acts just like \prog{lwarpmk}.
+%
+% If \optn{lwarpmk} option, creates a local copy of \filenm{lwarpmk.lua}:
+% \begin{macrocode}
+\newbool{LWR@creatinglwarpmk}
+\boolfalse{LWR@creatinglwarpmk}
+
+\DeclareVoidOption{lwarpmk}{
+\PackageInfo{lwarp}{Using option 'lwarpmk'}
+\booltrue{LWR@creatinglwarpmk}
+}
+% \end{macrocode}
+
+
+
+% \DescribeOption{OSWindows} Tells \pkg{lwarp} to use \brand{MS-Windows} compatibility.
+% Auto-detection of the operating system is attempted, and this option is only
+% necessary if the auto-detection fails.
+% See the automatically-generated |lwarpmk.conf| file to find out
+% whether the operating system was detected correctly.
+%
+% \changes{v0.30}{2017/04/27}{Option \optn{OSWindows} replaces macro \cs{warpOSwindows}.}
+%
+% \begin{macrocode}
+\DeclareVoidOption{OSWindows}{
+\PackageInfo{lwarp}{Using option 'OSWindows'}
+\LWR@setOSWindows
+}
+% \end{macrocode}
+
+
+
+% \DescribeOption{HomeHTMLFilename} \DescribeDefault{\cs{BaseJobname}}
+% The filename of the homepage.
+% The default is the jobname.
+% This option is stored into \cs{LWR@HomeHTMLFilename},
+% and later transferred into \cs{HomeHTMLFilename} for internal use.
+%
+% \changes{v0.30}{2017/04/27}{Options \optn{HomeHTMLFilename} and \optn{HTMLFilename}
+% replace macros \cs{HomeHTMLFilename} and \cs{HTMLFilename}.}
+%
+% \begin{macrocode}
+\DeclareStringOption[]{HomeHTMLFilename}
+% \end{macrocode}
+
+
+% \DescribeOption{HTMLFilename} \DescribeDefault{<empty>}
+% The filename prefix of web pages after the homepage.
+% The default is empty, no prefix.
+% This option is stored into \cs{LWR@HTMLFilename},
+% and later transferred into \cs{HTMLFilename} for internal use.
+%
+% \begin{macrocode}
+\DeclareStringOption[]{HTMLFilename}
+% \end{macrocode}
+
+% \DescribeOption{PrintLatexCmd} \DescribeDefault{<automatic>}
+% The shell commands to use to compile the print document.
+%
+% \changes{v0.61}{2018/09/20}{Added \optn{PrintLatexCmd} option.}
+% \begin{macrocode}
+\DeclareStringOption[]{PrintLatexCmd}
+% \end{macrocode}
+
+% \DescribeOption{HTMLLatexCmd} \DescribeDefault{<automatic>}
+% The shell commands to use to compile the \HTML\ document.
+%
+% \changes{v0.61}{2018/09/20}{Added \optn{HTMLLatexCmd} option.}
+% \begin{macrocode}
+\DeclareStringOption[]{HTMLLatexCmd}
+% \end{macrocode}
+
+% \DescribeOption{PrintIndexCmd} \DescribeDefault{<empty>}
+% The shell commands to use to compile the print indexes.
+%
+% \begin{macrocode}
+\DeclareStringOption[]{PrintIndexCmd}
+% \end{macrocode}
+
+% \DescribeOption{HTMLIndexCmd} \DescribeDefault{<empty>}
+% The shell commands to use to compile the \HTML\ indexes.
+%
+% \begin{macrocode}
+\DeclareStringOption[]{HTMLIndexCmd}
+% \end{macrocode}
+
+
+% \DescribeOption{LatexmkIndexCmd} \DescribeDefault{<empty>}
+% The shell commands to by used by \prog{latexmk} to compile the print indexes.
+% Unlike \optn{PrintIndexCmd} and \optn{HTMLIndexCmd},
+% \optn{LatexmkIndexCmd} does not include the filename, which will be
+% provided by \prog{latexmk}.
+%
+% \begin{macrocode}
+\DeclareStringOption[]{LatexmkIndexCmd}
+% \end{macrocode}
+
+% \DescribeOption{makeindex} Tells \pkg{lwarp} to
+% use \pkg{makeindex} for index generation.
+% When \filenm{lwarpmk.conf} and \filenm{*.lwarpmkconf} are generated,
+% \optn{PrintIndexCmd} and \optn{HTMLIndexCmd} will be set for \prog{makeindex}
+% with a single index file.
+% \changes{v0.58}{2018/06/20}{Added \optn{makeindex} option.}
+% \begin{macrocode}
+\DeclareBoolOption[false]{makeindex}
+% \end{macrocode}
+
+
+% \DescribeOption{xindy} Tells \pkg{lwarp} to
+% use \pkg{xindy} for index generation.
+% When \filenm{lwarpmk.conf} and \filenm{*.lwarpmkconf} are generated,
+% \optn{PrintIndexCmd} and \optn{HTMLIndexCmd} will be set for \prog{xindy}
+% with a single index file.
+% \changes{v0.58}{2018/06/20}{Added \optn{xindy} option.}
+% \begin{macrocode}
+\DeclareBoolOption[false]{xindy}
+% \end{macrocode}
+
+
+% \DescribeOption{GlossaryCmd} \DescribeDefault{makeglossaries}
+% The shell command to use to compile the glossary.
+% The print or \HTML\ version of the glossary filename will be appended to this command.
+%
+% \begin{macrocode}
+\DeclareStringOption[makeglossaries]{GlossaryCmd}
+% \end{macrocode}
+
+
+% \DescribeOption{latexmk}
+% Option \optn{latexmk} tells \prog{lwarpmk} to use \prog{latexmk} when compiling documents.
+%
+% \changes{v0.30}{2017/04/29}{Option \prog{latexmk} replaces macro \cs{UseLatexmk}.}
+%
+% \begin{macrocode}
+\DeclareBoolOption[false]{latexmk}
+% \end{macrocode}
+
+
+% \DescribeOption{dvips}
+% Option \optn{dvips} tells \prog{lwarpmk} to use \prog{dvips}
+% when compiling \DVI\ \prog{latex} documents.
+%
+% \changes{v0.59}{2018/09/02}{Added option \optn{dvips}.}
+%
+% \begin{macrocode}
+\DeclareBoolOption[false]{dvips}
+% \end{macrocode}
+
+
+% \DescribeOption{dvipdfm}
+% Option \optn{dvipdfm} tells \prog{lwarpmk} to use \prog{dvipdfm}
+% when compiling \DVI\ \prog{latex} documents.
+%
+% \changes{v0.59}{2018/09/02}{Added option \optn{dvipdfm}.}
+%
+% \begin{macrocode}
+\DeclareBoolOption[false]{dvipdfm}
+% \end{macrocode}
+
+
+% \DescribeOption{dvipdfmx}
+% Option \optn{dvipdfmx} tells \prog{lwarpmk} to use \prog{dvipdfmx}
+% when compiling \DVI\ \prog{latex} documents.
+%
+% \changes{v0.59}{2018/09/02}{Added option \optn{dvipdfmx}.}
+%
+% \begin{macrocode}
+\DeclareBoolOption[false]{dvipdfmx}
+% \end{macrocode}
+
+
+
+
+% Execute the package options, with the defaults which have been set just above:
+% \margintag{Execute options}
+% \begin{macrocode}
+\ProcessKeyvalOptions*\relax
+% \end{macrocode}
+
+
+
+
+% \subsection{Additional options support}
+
+
+% Assign the \cs{BaseJobname} if the user hasn't provided one:
+% \begin{macrocode}
+\providecommand*{\BaseJobname}{\LWR@BaseJobname}
+% \end{macrocode}
+
+
+% Defaults unless already over-ridden by the user:
+% \begin{macrocode}
+\ifcsempty{LWR@HomeHTMLFilename}{
+ \newcommand*{\HomeHTMLFilename}{\BaseJobname}
+}{
+ \csedef{HomeHTMLFilename}{\LWR@HomeHTMLFilename}
+}
+
+\csedef{HTMLFilename}{\LWR@HTMLFilename}
+% \end{macrocode}
+%
+%
+% Special handling for underscores in labels and filenames.
+%
+% \begin{macro}{\LWR@sanitized} The sanitized version of what was given
+% to \cs{LWR@sanitize}.
+% Characters are set to their detokenized versions.
+% Required for underscores in labels and filenames.
+% \begin{macrocode}
+\newcommand*{\LWR@sanitized}{}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@sanitize} \marg{text}
+%
+% Sanitizes the text and returns the result in \cs{LWR@sanitized}.
+% \begin{macrocode}
+\newcommand*{\LWR@sanitize}[1]{%
+\edef\LWR@sanitized{#1}%
+\edef\LWR@sanitized{\detokenize\expandafter{\LWR@sanitized}}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% Sanitize some string options to neutralize underscores.
+% \changes{v0.66}{2019/01/28}{Sanitize filenames.}
+% \begin{macrocode}
+\LWR@sanitize{\LWR@BaseJobname}
+\edef\LWR@BaseJobname{\LWR@sanitized}
+
+\LWR@sanitize{\LWR@ImagesDirectory}
+\edef\LWR@ImagesDirectory{\LWR@sanitized}
+
+\LWR@sanitize{\LWR@ImagesName}
+\edef\LWR@ImagesName{\LWR@sanitized}
+% \end{macrocode}
+%
+%
+%
+% \cs{LWR@PrintIndexCmd} and \cs{LWR@HTMLIndexCmd} are tested to see if they are empty.
+% If so, they are set to a reasonable defaults for a single index using \prog{makeindex},
+% then possibly set to defaults for \prog{xindy}
+% if the \pkg{lwarp} \optn{xindy} option was selected.
+%
+% \begin{macrocode}
+\ifdefempty{\LWR@PrintIndexCmd}{
+ \renewcommand{\LWR@PrintIndexCmd}{%
+ makeindex -s \LWR@makeindexStyle \space \jobname.idx%
+ }
+ \ifbool{LWR@xindy}{
+ \renewcommand{\LWR@PrintIndexCmd}{%
+ xindy
+ -M \LWR@xindyStyle \space
+ -L \LWR@xindyLanguage \space
+ -C \LWR@xindyCodepage \space
+ \jobname.idx%
+ }
+ }{}
+}{}
+
+\ifdefempty{\LWR@HTMLIndexCmd}{
+ \renewcommand{\LWR@HTMLIndexCmd}{%
+ makeindex -s \LWR@makeindexStyle \space \jobname_html.idx%
+ }
+ \ifbool{LWR@xindy}{
+ \renewcommand{\LWR@HTMLIndexCmd}{%
+ xindy
+ -M \LWR@xindyStyle \space
+ -L \LWR@xindyLanguage \space
+ -C \LWR@xindyCodepage \space
+ \jobname_html.idx%
+ }
+ }{}
+}{}
+
+\ifdefempty{\LWR@LatexmkIndexCmd}{
+ \renewcommand{\LWR@LatexmkIndexCmd}{%
+ makeindex -s \LWR@makeindexStyle%
+ }
+ \ifbool{LWR@xindy}{
+ \renewcommand{\LWR@LatexmkIndexCmd}{%
+ xindy
+ -M \LWR@xindyStyle \space
+ -L \LWR@xindyLanguage \space
+ -C \LWR@xindyCodepage%
+ }
+ }{}
+}{}
+% \end{macrocode}
+%
+%
+%
+% \subsection{Conditional compilation}
+%
+% \begin{macro}{\warpprintonly} \marg{contents}
+%
+% Only process the contents if producing printed output.
+% \changes{v0.19}{2016/06/06}{Replaces \cs{rowprintedonly}.}
+% \begin{macrocode}
+\newcommand{\warpprintonly}[1]{\ifbool{warpingprint}{#1}{}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\warpHTMLonly} \marg{contents}
+%
+% Only process the contents if producing \HTML\ output.
+% \changes{v0.19}{2016/06/06}{Added.}
+% \begin{macrocode}
+\newcommand{\warpHTMLonly}[1]{\ifbool{warpingHTML}{#1}{}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \DescribePackage{comment} Provides conditional code blocks.
+%
+% Attempts to use \pkg{versions} or \pkg{verbatim} fail in some cases, and do not
+% provide much of a speed benefit even when they do work.
+%
+% \begin{macrocode}
+\RequirePackage{comment}
+% \end{macrocode}
+
+
+% Use |comment_print.cut| for print mode, and
+% |comment_html.cut| for \HTML\ mode.
+% This helps \prog{latexmk} to more reliably know whether to recompile.
+%
+% \changes{v0.37}{2017/08/19}{\pkg{comment}: Maintains independent
+% cutfiles for print, \HTML.}
+%
+% \begin{macrocode}
+\ifbool{warpingHTML}{
+\def\DefaultCutFileName{\def\CommentCutFile{comment_html.cut}}
+}{}
+
+\ifbool{warpingprint}{
+\def\DefaultCutFileName{\def\CommentCutFile{comment_print.cut}}
+}{}
+% \end{macrocode}
+
+
+% \begin{environment}{warpall}
+% Anything in the |warpall| environment will be generated for print or \HTML\ outputs.
+% \begin{macrocode}
+\includecomment{warpall}
+% \end{macrocode}
+% \end{environment}
+
+
+% \begin{environment}{warpprint}
+% \begin{environment}{warpHTML}
+% Anything in the |warpprint| environment will be generated for print output only.
+%
+% For \HTML\ output:
+% \begin{macrocode}
+\ifbool{warpingHTML}
+{\includecomment{warpHTML}}
+{\excludecomment{warpHTML}}%
+% \end{macrocode}
+
+% \begin{macrocode}
+\ifbool{warpingprint}
+{\includecomment{warpprint}}
+{\excludecomment{warpprint}}
+% \end{macrocode}
+
+% \end{environment}
+% \end{environment}
+
+
+% Optionally generate a local copy of \prog{lwarpmk}.
+% Default to no.
+% \begin{macrocode}
+\ifbool{LWR@creatinglwarpmk}
+{\includecomment{LWR@createlwarpmk}}
+{\excludecomment{LWR@createlwarpmk}}
+% \end{macrocode}
+%
+%
+%
+%
+%
+
+
+
+% ^^A *required
+% \section{Required packages}
+% \label{sec:requiredpackages}
+% \gindex{package>required}
+% \changes{v0.16}{2016/04/08}{Lwarp no longer selects fonts.}
+
+% These packages are automatically loaded by \pkg{lwarp} when generating
+% \HTML\ output. Some of them are also automatically loaded when
+% generating print output, but some are not.
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+% ^^A
+% ^^A
+% ^^A % For \XeTeX{} or \LuaLaTeX, use \pkg{fontspec}.
+% ^^A % \marginpar{\textcolor{blue}{\XeTeX{} or \LuaLaTeX{} only:}}
+% ^^A %
+% ^^A % See:\\
+% ^^A % \href
+% ^^A % {http://tex.stackexchange.com/questions/2984/frequently-loaded-packages-differences-between-pdflatex-and-xelatex}
+% ^^A % {http://tex.stackexchange.com/questions/2984/\\
+% ^^A % \hspace*{.25in}frequently-loaded-packages-differences-between-pdflatex-and-xelatex}
+% ^^A %
+% ^^A % \gindex{font>during conversion}
+% ^^A % For \XeLaTeX{} and \LuaLaTeX, uses DejaVu Serif for enhanced Cyrillic and Greek coverage.
+% ^^A % \gindex{Unicode>XeLaTeX \& LuaLaTeX}
+% ^^A
+% ^^A
+%
+% Load \pkg{fontspec} if necessary:
+% \changes{v0.50}{2018/02/24}{Fix: Load \pkg{fontspec} if necessary.}
+% \begin{macrocode}
+\ifxetexorluatex
+\@ifpackageloaded{fontspec}{}{
+ \usepackage[no-math]{fontspec}
+}
+% \end{macrocode}
+% ^^A \defaultfontfeatures{Ligatures=Common}
+% ^^A \setmainfont{DejaVu Serif}
+% ^^A \setsansfont{DejaVu Sans}
+% ^^A \setmonofont{DejaVu Sans Mono}
+% The monospaced font is used for \HTML\ tags,
+% so turn off its TeX ligatures and common ligatures:
+% \begin{macrocode}
+\defaultfontfeatures[\rmfamily]{Ligatures={NoCommon,TeX}}
+\defaultfontfeatures[\sffamily]{Ligatures={NoCommon,TeX}}
+\defaultfontfeatures[\ttfamily]{Ligatures=NoCommon}
+\else
+% \end{macrocode}
+% ^^A % For \prog{pdflatex}, use \pkg{fontenc} and \pkg{lmodern}:
+% ^^A % \marginpar{\textcolor{blue}{\prog{pdflatex} only:}}
+% ^^A % \gindex{Unicode>pdfLaTeX}
+% ^^A % \gindex{pdfLaTeX>Unicode support}
+% ^^A % \begin{macrocode}
+% ^^A \RequirePDFTeX % error if not pdflatex
+% ^^A
+% ^^A \input glyphtounicode.tex
+% ^^A \input glyphtounicode-cmr.tex% from the pdfx package
+% ^^A \pdfgentounicode=1
+% ^^A
+% ^^A \usepackage{cmap}% help map Russian to unicode
+% ^^A \defaulthyphenchar=127%
+% ^^A % \end{macrocode}
+% ^^A
+% ^^A % \DescribePackage{lmodern}
+% ^^A %
+% ^^A % \pdflatexonly
+% ^^A %
+% ^^A % \prog{pdftotext} works better with a vector font.
+% ^^A % This font choice does not control the \HTML\ file, but it does appear in the
+% ^^A % images generated from math expressions.
+% ^^A % \begin{macrocode}
+% ^^A \RequirePackage{lmodern}
+% ^^A % \end{macrocode}
+% ^^A
+% ^^A
+% ^^A % \DescribePackage{fontenc}
+% ^^A %
+% ^^A % \pdflatexonly
+% ^^A %
+% ^^A % \begin{macrocode}
+% ^^A \RequirePackage[T1]{fontenc}
+% ^^A % \end{macrocode}
+% ^^A
+% ^^A
+% ^^A % \DescribePackage{inputenc}
+% ^^A %
+% ^^A % \pdflatexonly
+% ^^A %
+% ^^A % \begin{macrocode}
+% ^^A \RequirePackage[utf8]{inputenc}
+% ^^A % \end{macrocode}
+% ^^A
+
+% \pdflatexonly
+%
+
+% \DescribePackage{microtype}
+% \changes{v0.18}{2016/05/18}{Microtype disabled during \HTML\ generation}
+%
+% Older browsers don't
+% \gindex{ligatures}
+% display ligatures.
+% \margintag{ligatures}
+% Turn off letter ligatures, keeping
+% \LaTeX{} dash and quote ligatures, which may fail on older browers
+% but at least won't corrupt written words.
+% \begin{macrocode}
+\RequirePackage {microtype}
+
+\microtypesetup{
+ protrusion=false,
+ expansion=false,
+ tracking=false,
+ kerning=false,
+ spacing=false}
+
+\DisableLigatures[f,q,t,T,Q]{encoding = *,family = *}
+% \end{macrocode}
+% ^^A
+% ^^A
+% ^^A % \DescribePackage{newunicodechar}
+% ^^A %
+% ^^A %
+% ^^A % \pdflatexonly
+% ^^A %
+% ^^A % Note that the font used by the source code listing may not correctly display the
+% ^^A % \watchout
+% ^^A % actual Unicode character contained in the \cs{newunicode\{\}} expression.
+% ^^A % The listing printout may not display ligatures or the dashes correctly.
+% ^^A % \begin{macrocode}
+% ^^A \RequirePackage{newunicodechar}
+% ^^A \newunicodechar{Í}{\IeC {\'I}}
+% ^^A \newunicodechar{ff}{ff}% ligatures
+% ^^A \newunicodechar{fi}{fi}
+% ^^A \newunicodechar{fl}{fl}
+% ^^A \newunicodechar{ffi}{ffi}
+% ^^A \newunicodechar{ffl}{ffl}
+% ^^A %% \newunicodechar{°}{\degree}
+% ^^A \newunicodechar{ρ}{\ensuremath{\rho}}
+% ^^A \newunicodechar{⨯}{\texttimes}
+% ^^A %% \newunicodechar{®}{\textregistered}
+% ^^A %% \newunicodechar{©}{\textcopyright}
+% ^^A \newunicodechar{—}{---}% emdash
+% ^^A \newunicodechar{–}{--}% endash
+% ^^A %% \newunicodechar{”}{''}% closing quote
+% ^^A %% \newunicodechar{“}{``}% opening quote
+% ^^A %% \newunicodechar{§}{\S}
+% ^^A %% \newunicodechar{¶}{\P}
+% ^^A %% \newunicodechar{†}{\dag}
+% ^^A %% \newunicodechar{‡}{\ddag}
+% ^^A % \end{macrocode}
+% ^^A
+% ^^A
+% ^^A % \DescribePackage{textcomp}
+% ^^A %
+% ^^A %
+% ^^A % \pdflatexonly
+% ^^A %
+% ^^A % Provides \cs{degree}, \cs{textquotesingle}, \cs{textmu}.
+% ^^A % \begin{macrocode}
+% ^^A \RequirePackage{textcomp}
+% ^^A % \end{macrocode}
+% ^^A
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+% ^^A % \marginpar{\textcolor{blue}{End of \XeLaTeX, \LuaLaTeX, \pdfLaTeX\ choices.}}
+% ^^A
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \DescribePackage{geometry}
+% Tactics to avoid unwanted page breaks and margin overflow:
+% \begin{itemize}
+% \item Uses a very long and wide page to minimize page breaks and margin overflow.
+% \item Uses a scriptsize font.
+% \item Uses extra space at the margin to avoid \HTML\ tag overflow off the page.
+% \item Forces a new \PDF\ page before some environments.
+% \item Forces line break between major pieces of long tags.
+% \end{itemize}
+%
+% \changes{v0.20}{2017/01/12}{Page geometry set to 6in wide with large margins.}
+% \changes{v0.27}{2017/04/04}{Page geometry modified to reduce line overflow.}
+% \changes{v0.28}{2017/04/13}{Forced oneside to maintain large right margin.}
+% \changes{v0.52}{2018/03/31}{Fix: MathJax script line wraps. Reduced right margin.}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\RequirePackage{geometry}
+% \end{macrocode}
+%
+% Avoid class and option conflict by changing settings after package load:
+% \changes{v0.63}{2018/11/24}{\pkg{geometry}: Fix for \pkg{bxjs*} classes.}
+% \changes{v0.65}{2018/12/21}{\pkg{geometry}: Fix for \pkg{bxjs*} classes.}
+% \begin{macrocode}
+\geometry{
+ paperheight=190in,%
+ paperwidth=20in,%
+ left=2in,right=6in,%
+ top=1in,bottom=1in,%
+}
+% \end{macrocode}
+%
+% \pkg{ltjtarticle} and other classes may require these to be reset by \pkg{lwarp}:
+% \begin{macrocode}
+\setlength{\textheight}{0.8\paperheight}
+\setlength{\textwidth}{0.7\paperwidth}
+
+\@twosidefalse
+\@mparswitchfalse
+
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+
+% \DescribePackage{xparse}
+%
+% \LaTeX{}3 command argument parsing
+% ^^A \RequirePackage[log-declarations=false]{xparse}
+% \begin{macrocode}
+\RequirePackage{xparse}
+% \end{macrocode}
+
+% \changes{v0.51}{2018/03/06}{\pkg{afterpackage}: No longer required.}
+
+% \DescribePackage{calc}
+% \changes{v0.62}{2018/11/10}{\pkg{calc}: Fix: Required for print version.}
+% \begin{macrocode}
+\RequirePackage{calc}
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \DescribePackage{expl3}
+%
+% \LaTeX{}3 programming
+% \begin{macrocode}
+\RequirePackage{expl3}
+% \end{macrocode}
+
+% ^^A % \DescribePackage{l3regex}
+% ^^A %
+% ^^A % \LaTeX{}3 regular expression handling
+% ^^A % \begin{macrocode}
+% ^^A \RequirePackage{l3regex}
+% ^^A % \end{macrocode}
+
+
+
+% ^^A % \begin{macro}{\EmulatesPackage} \marg{pkg name} \oarg{yyyy/mm/dd and comments}
+% ^^A %
+% ^^A % Similar to \cs{ProvidesPackage}. Used where the \pkg{lwarp} package emulates
+% ^^A % other packages.
+% ^^A % For example, \pkg{trivfloat} wants to load \pkg{float}, which is emulated by \pkg{lwarp}.
+% ^^A % Since |\EmulatesPackage{float}| is declared by \pkg{lwarp},
+% ^^A % \pkg{trivfloat} will not load \pkg{float} on its own.
+% ^^A % Doing so would have over-written the \pkg{lwarp} emulation.
+% ^^A %
+% ^^A % Do not use \cs{EmulatesPackage} for packages which are patched by other
+% ^^A % \watchout
+% ^^A % packages. The emulated code cannot be patched correctly.
+% ^^A %
+% ^^A % \begin{macrocode}
+% ^^A \NewDocumentCommand{\EmulatesPackage}{m O{}}{%
+% ^^A \expandafter\xdef\csname ver@#1.sty\endcsname{#2 ---
+% ^^A Emulated by package \@currname.}
+% ^^A }
+% ^^A \@onlypreamble\EmulatesPackage
+% ^^A % \end{macrocode}
+% ^^A % \end{macro}
+% ^^A
+
+
+% \DescribePackage{gettitlestring}
+%
+% Used to emulate \cs{nameref}.
+% \begin{macrocode}
+\RequirePackage{gettitlestring}
+% \end{macrocode}
+
+
+% \DescribePackage{everyhook}
+%
+% \pkg{everyhook} is used to patch paragraph handling.
+%
+% \changes{v0.63}{2018/11/29}{\pkg{everyhook}: Fix for \pkg{bxjs*} classes.}
+% \begin{macrocode}
+\@ifundefined{bxjs@everypar}{}{\let\everypar\bxjs@everypar}
+
+\RequirePackage{everyhook}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+
+% \DescribePackage{filecontents}
+%
+% Used to write helper files, done in print mode.
+%
+% Patched to work with \pkg{morewrites}, per
+% \href
+% {https://tex.stackexchange.com/questions/312830/does-morewrites-not-support-filecontents-and-can-i-write-body-of-environment-us/312910}
+% {\texttt{https://tex.stackexchange.com/questions/312830/\\
+% does-morewrites-not-support-filecontents-and-can-i-write-body-of-environment-us/\\
+% 312910}}
+%
+% \changes{v0.34}{2017/08/02}{\pkg{filecontents}: Required. Patched for \pkg{morewrites}.}
+%
+% \begin{macrocode}
+\RequirePackage{filecontents}
+
+\@ifpackagelater{filecontents}{2011/10/09}%
+{}
+{
+\newwrite\fcwrite
+\let\LWR@origfilec@ntents\filec@ntents
+\def\filec@ntents{\def\chardef##1\write{\let\reserved@c\fcwrite}\LWR@origfilec@ntents}
+}
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% \DescribePackage{xifthen}
+% \begin{macrocode}
+\RequirePackage{xifthen}
+% \end{macrocode}
+
+
+% \DescribePackage{verbatim}
+% \begin{macrocode}
+\RequirePackage{verbatim}
+% \end{macrocode}
+
+
+% \DescribePackage{refcount}
+%
+% Provides \cs{setcounterref}, \cs{setcounterpageref}, etc.
+% \begin{macrocode}
+\RequirePackage{refcount}
+% \end{macrocode}
+
+
+% \DescribePackage{newfloat}
+% \begin{macrocode}
+\RequirePackage{newfloat}
+% \end{macrocode}
+
+% \changes{v0.24}{2017/03/06}{No longer preloads \pkg{subcaption};
+% conflicted with \pkg{subfig}.}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+
+
+% \DescribePackage{xstring}
+% There was a short-term bug in \pkg{xstring} regarding \cs{IfInteger} which affected
+% \pkg{lwarp}'s index generation. The updated version is requested here.
+% \trouble[index]{index>xstring=\pkg{xstring} bug}
+% \trouble{index>numbers, not links}
+% \trouble{xstring=\pkg{xstring}}
+% \begin{macrocode}
+\RequirePackage{xstring}[2019/02/01]
+% \end{macrocode}
+
+
+% \DescribePackage{environ}
+% Used to encapsulate math environments for re-use in \HTML\ \element{alt} text.
+%
+% \begin{macrocode}
+\RequirePackage{environ}
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% \changes{v0.40}{2017/09/07}{\pkg{xfrac}: No longer preloaded.}
+% \changes{v0.66}{2019/01/27}{\pkg{zref}: No longer used.}
+
+
+% \DescribePackage{printlen}
+% Used to convert lengths for image width/height options.
+%
+% \begin{macrocode}
+\RequirePackage{printlen}
+% \end{macrocode}
+
+% \begin{macro}{\LWR@printlength} \marg{length}
+%
+% Prints a length using a locally-controlled unit and space.
+% Rounding is used unless the length is small.
+%
+% \changes{v0.49}{2018/02/19}{Fix: Group \pkg{printlen} changes.}
+% \begin{macrocode}
+\newrobustcmd*{\LWR@printlength}[1]{%
+\begingroup%
+\uselengthunit{PT}%
+\renewcommand*{\unitspace}{}%
+\ifdimless{#1}{10pt}{%
+ \printlength{#1}%
+}{%
+ \rndprintlength{#1}%
+}%
+\endgroup%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+% \codeprint
+% \begin{macrocode}
+\begin{warpprint}
+% \end{macrocode}
+
+% \DescribePackage{varwidth}
+% Used for print-mode \env{lateximage}.
+% \begin{macrocode}
+\RequirePackage{varwidth}
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpprint}
+% \end{macrocode}
+
+
+
+% \section{Loading packages}
+%
+%
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+
+% Remember the original \cs{RequirePackage}:
+% \begin{macrocode}
+\LetLtxMacro\LWR@origRequirePackage\RequirePackage
+% \end{macrocode}
+
+% \begin{macro}{\LWR@requirepackagenames}
+% Stores the list of required package names.
+% \begin{macrocode}
+\newcommand*{\LWR@requirepackagenames}{}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@parsedrequirepackagenames}
+% Stores the parsed list of required package names
+% after spaces are removed and |lwarp-| is prepended.
+% \changes{v0.48}{2018/02/03}{Fix: Parsing similar package names.}
+% \begin{macrocode}
+\newcommand*{\LWR@parsedrequirepackagenames}{}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@nullifycomment}
+%
+% Remove the preexisting \env{comment} environment.
+% Certain packages define it for their own use.
+%
+% \begin{macrocode}
+\newcommand*{\LWR@nullifycomment}{%
+ \PackageInfo{lwarp}%
+ {Nullifying the comment environment before loading \LWR@strresulttwo,}%
+ \let\comment\relax%
+ \let\endcomment\relax%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@findword} \oarg{1: separator} \marg{2: list}
+% \marg{3: index} \oarg{4: destination}
+%
+% Note that argument 4 is passed directly to \cs{StrBetween}.
+% \begin{macrocode}
+\newcommand*\LWR@findword[3][,]{%
+ \StrBetween[#3,\numexpr#3+1]{#1#2#1}{#1}{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+
+
+
+% ^^A *checkload
+% \begin{macro}{\LWR@checkloadfilename} \marg{filename}
+% Checks if this filename should be loaded after \pkg{lwarp},
+% or never at all.
+%
+% \changes{v0.63}{2018/12/02}{Added to reduce number of \filenm{lwarp-*} files.}
+% \changes{v0.64}{2018/12/07}{Prevented \pkg{bitfield}, \pkg{doublespace},
+% \pkg{newthm}, \pkg{rplain}, \pkg{si}.}
+% \changes{v0.66}{2019/01/04}{Prevented \pkg{colortab}, \pkg{epsf}, \pkg{hyper}, \pkg{picinpar},
+% \pkg{picins}, \pkg{sistyle}, \pkg{ucs}.}
+% \changes{v0.68}{2019/02/26}{Prevented \pkg{alg}, \pkg{algorithmic}, \pkg{fncylab}, \pkg{pdfcprot}.}
+%
+% The following should never be loaded:
+% \begin{macrocode}
+\newcommand*{\LWR@checkloadfilename}[1]{%
+\LWR@checkloadnever{#1}{ae}{latinmodern}
+\LWR@checkloadnever{#1}{aecc}{latinmodern}
+\LWR@checkloadnever{#1}{alg}{algorithm2e, algorithmicx}
+\LWR@checkloadnever{#1}{algorithmic}{algorithm2e, algorithmicx}
+\LWR@checkloadnever{#1}{bitfield}{bytefield}
+\LWR@checkloadnever{#1}{boxedminipage}{boxedminipage2e}
+\LWR@checkloadnever{#1}{caption2}{caption}
+\LWR@checkloadnever{#1}{ccaption}{caption}
+\LWR@checkloadnever{#1}{colortab}{colortbl}
+\LWR@checkloadnever{#1}{doublespace}{setspace}
+\LWR@checkloadnever{#1}{epsf}{graphicx}
+\LWR@checkloadnever{#1}{fancyheadings}{fancyhdr}
+\LWR@checkloadnever{#1}{fncylab}{cleveref}
+\LWR@checkloadnever{#1}{glossary}{glossaries}
+\LWR@checkloadnever{#1}{hyper}{hyperref}
+\LWR@checkloadnever{#1}{newthm}{ntheorem}
+\LWR@checkloadnever{#1}{pdfcprot}{microtype}
+\LWR@checkloadnever{#1}{picinpar}{floatflt, wrapfig}
+\LWR@checkloadnever{#1}{picins}{floatflt, wrapfig}
+\LWR@checkloadnever{#1}{rplain}{fancyhdr}
+\LWR@checkloadnever{#1}{si}{siunitx}
+\LWR@checkloadnever{#1}{sistyle}{siunitx}
+\LWR@checkloadnever{#1}{t1enc}{fontenc, inputenc, inputenx}
+\LWR@checkloadnever{#1}{ucs}{inputenc, inputencx}
+\LWR@checkloadnever{#1}{wasysym}{textcomp, amssymb, amsfonts, mnsymbol, fdsymbol}
+% \end{macrocode}
+%
+% ^^A *loadbefore
+% The following should only be loaded before \pkg{lwarp}:
+% \begin{macrocode}
+\LWR@checkloadbefore{#1}{ctex}
+\LWR@checkloadbefore{#1}{fontspec}
+\LWR@checkloadbefore{#1}{inputenc}
+\LWR@checkloadbefore{#1}{inputenx}
+\LWR@checkloadbefore{#1}{nfssext-cfr}
+\LWR@checkloadbefore{#1}{fontaxes}
+\LWR@checkloadbefore{#1}{kotex}
+\LWR@checkloadbefore{#1}{luatexja}
+\LWR@checkloadbefore{#1}{luatexja-fontspec}
+\LWR@checkloadbefore{#1}{luatexko}
+\LWR@checkloadbefore{#1}{morewrites}
+\LWR@checkloadbefore{#1}{newclude}
+\LWR@checkloadbefore{#1}{newunicodechar}
+\LWR@checkloadbefore{#1}{plext}
+\LWR@checkloadbefore{#1}{xeCJK}
+\LWR@checkloadbefore{#1}{xetexko}
+\LWR@checkloadbefore{#1}{zxjatype}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@lookforpackagename} \marg{index}
+%
+% If \HTML, and if this is an \pkg{lwarp}-supported package name,
+% re-direct it to the \pkg{lwarp} version
+% by renaming it |lwarp-| followed by the original name.
+%
+% Looks |index| deep into the list of package names, \cs{LWR@requirepackagenames}, and
+% builds \cs{LWR@parsedrequirepackagenames} which is the modified list of names.
+% \changes{v0.48}{2018/02/03}{Fix: Parsing similar package names.}
+% \begin{macrocode}
+\newcommand*{\LWR@lookforpackagename}[1]{%
+% \end{macrocode}
+% Find the |index|'th package name from the list:
+% \begin{macrocode}
+\LWR@findword{\LWR@requirepackagenames}{#1}[\LWR@strresult]%
+% \end{macrocode}
+% Remove blanks.
+% The original name with blanks is in |LWR@strresult| and
+% the final name with no blanks goes into |LWR@strresulttwo|.
+% \begin{macrocode}
+\StrSubstitute[100]{\LWR@strresult}{ }{}[\LWR@strresulttwo]%
+% \end{macrocode}
+% See if the package name was found:
+% \begin{macrocode}
+\IfStrEq{\LWR@strresulttwo}{}%
+{}% no filename
+{% yes filename was found
+% \end{macrocode}
+% Possible adjustments before loading the package.
+% Maybe nullify the \env{comment} environment if the new package
+% will be redefining it for a new purpose.
+% \changes{v0.67}{2019/02/15}{\pkg{easyReview}: Supported.}
+% \changes{v0.70}{2019/03/23}{\pkg{changes}: Updated to v3.1.2.}
+% \begin{macrocode}
+ \ifdefstring{\LWR@strresulttwo}{easyReview}{\LWR@nullifycomment}{}%
+ \ifdefstring{\LWR@strresulttwo}{changes}{\LWR@nullifycomment}{}%
+% \end{macrocode}
+% If \HTML, check if the package should be loaded before \pkg{lwarp},
+% or never at all:
+% \begin{macrocode}
+ \ifbool{warpingHTML}{\LWR@checkloadfilename{\LWR@strresulttwo}}{}%
+% \end{macrocode}
+% If \HTML, and if found, and if an \pkg{lwarp}-equivalent name exists,
+% use |lwarp-|* instead.
+% \begin{macrocode}
+ \ifboolexpr{
+ bool{warpingHTML} and
+ test{\IfFileExists{lwarp-\LWR@strresulttwo.sty}}
+ }%
+ {% lwarp-* file found
+ \ifdefvoid{\LWR@parsedrequirepackagenames}{%
+ \edef\LWR@parsedrequirepackagenames{lwarp-\LWR@strresulttwo}%
+ }{%
+ \edef\LWR@parsedrequirepackagenames{%
+ \LWR@parsedrequirepackagenames,lwarp-\LWR@strresulttwo%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Otherwise, use the current package name.
+% \changes{v0.46}{2018/01/23}{Fix: Spaces in \cs{usepackage}.}
+% \begin{macrocode}
+ \ifdefvoid{\LWR@parsedrequirepackagenames}{%
+ \edef\LWR@parsedrequirepackagenames{\LWR@strresulttwo}%
+ }{%
+ \edef\LWR@parsedrequirepackagenames{%
+ \LWR@parsedrequirepackagenames,\LWR@strresulttwo%
+ }%
+ }%
+ }% no lwarp-* file
+}% yes filename
+}
+% \end{macrocode}
+% \end{macro}
+
+%
+% \begin{macro}{\RequirePackage} \oarg{1: options} \marg{2: package names} \oarg{3: version}
+%
+% For each of many package names in a comma-separated list,
+% if an \pkg{lwarp} version of a package exists,
+% select it instead of the \LaTeX\ version.
+%
+% \changes{v0.32}{2017/06/09}{Fix: Ignores blanks in package list.}
+%
+% \begin{macrocode}
+\RenewDocumentCommand{\RequirePackage}{o m o}{%
+% \end{macrocode}
+% Redirect up to twenty names:\footnote{This was originally nine names, but
+% then I came across a package which used twelve...}
+% \changes{v0.61}{2018/10/02}{Support up to 20 packages.}
+% \begin{macrocode}
+\renewcommand*{\LWR@requirepackagenames}{#2}%
+\renewcommand*{\LWR@parsedrequirepackagenames}{}%
+\LWR@lookforpackagename{1}%
+\LWR@lookforpackagename{2}%
+\LWR@lookforpackagename{3}%
+\LWR@lookforpackagename{4}%
+\LWR@lookforpackagename{5}%
+\LWR@lookforpackagename{6}%
+\LWR@lookforpackagename{7}%
+\LWR@lookforpackagename{8}%
+\LWR@lookforpackagename{9}%
+\LWR@lookforpackagename{10}%
+\LWR@lookforpackagename{11}%
+\LWR@lookforpackagename{12}%
+\LWR@lookforpackagename{13}%
+\LWR@lookforpackagename{14}%
+\LWR@lookforpackagename{15}%
+\LWR@lookforpackagename{16}%
+\LWR@lookforpackagename{17}%
+\LWR@lookforpackagename{18}%
+\LWR@lookforpackagename{19}%
+\LWR@lookforpackagename{20}%
+% \end{macrocode}
+% \cs{RequirePackage} depending on the options and version:
+% \begin{macrocode}
+\IfValueTF{#1}%
+{% options given
+ \IfValueTF{#3}% version given?
+ {\LWR@origRequirePackage[#1]{\LWR@parsedrequirepackagenames}[#3]}%
+ {\LWR@origRequirePackage[#1]{\LWR@parsedrequirepackagenames}}%
+}%
+{% no options given
+ \IfValueTF{#3}% version given?
+ {\LWR@origRequirePackage{\LWR@parsedrequirepackagenames}[#3]}%
+ {\LWR@origRequirePackage{\LWR@parsedrequirepackagenames}}%
+}%
+}
+\LetLtxMacro\usepackage\RequirePackage
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{macro}{\LWR@ProvidesPackagePass} \marg{pkgname} \oarg{version}
+%
+% Uses the original package, including options.
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@ProvidesPackagePass}{m o}{
+\PackageInfo{lwarp}{%
+ Using package `#1' and adding lwarp modifications,\MessageBreak
+ including options,}%
+\IfValueTF{#2}
+{\ProvidesPackage{lwarp-#1}[#2]}
+{\ProvidesPackage{lwarp-#1}}
+\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{#1}}
+\ProcessOptions\relax
+\IfValueTF{#2}
+{\LWR@origRequirePackage{#1}[#2]}
+{\LWR@origRequirePackage{#1}}
+% \end{macrocode}
+% In some cases, the following seems to be required
+% to avoid an ``unknown option'' error, such
+% as when loading \pkg{xcolor} with options.
+% \changes{v0.62}{2018/11/11}{Fix: Unknown option error.}
+% \begin{macrocode}
+\DeclareOption*{}%
+\ProcessOptions\relax
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@ProvidesPackageDrop} \marg{pkgname} \oarg{version}
+%
+% Ignores the original package and uses lwarp's version instead.
+% Drops/discards all options.
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@ProvidesPackageDrop}{m o}{
+\PackageInfo{lwarp}{%
+ Replacing package `#1' with the lwarp version,\MessageBreak
+ and discarding options,%
+}%
+\IfValueTF{#2}
+{\ProvidesPackage{lwarp-#1}[#2]}
+{\ProvidesPackage{lwarp-#1}}
+% \end{macrocode}
+% Ignore all options.
+% \begin{macrocode}
+\DeclareOption*{}
+% \end{macrocode}
+% Nullifies then processes the options.
+% Seems to be required when options contain curly braces, which were causing
+% ``|Missing \begin{document}|''.
+% \changes{v0.48}{2018/02/04}{Fix: Options with braces.}
+% \begin{macrocode}
+% \ProcessOptions\relax% original LaTeX code
+\let\ds@\@empty% from the original \ProcessOptions
+\edef\@curroptions{}% lwarp modification to \ProcessOptions
+\@process@ptions\relax% from the original \ProcessOptions
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+% \section{Additional required packages}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \DescribePackage{caption}
+% \changes{v0.47}{2018/01/29}{\pkg{caption}: Also loads \pkg{lwarp-caption}.}
+% \changes{v0.66}{2018/12/29}{\pkg{caption}: Fix for options clash.}
+% \begin{macrocode}
+\LWR@origRequirePackage{caption}
+\AtBeginDocument{\RequirePackage{lwarp-caption}}%
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+% \section{File handles}
+
+% Defines file handles for writes.
+
+% \changes{v0.37}{2017/08/19}{File handles reorganized.}
+
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+
+% \begin{macro}{\LWR@quickfile}
+% For quick temporary use only.
+% This is reused in several places.
+% \begin{macrocode}
+\newwrite\LWR@quickfile%
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{macro}{\LWR@lateximagesfile}
+% For \filenm{<project>-images.txt}:
+% \begin{macrocode}
+\newwrite\LWR@lateximagesfile
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \section{Include a file}
+%
+% During \HTML\ output, |\include{<filename>}| causes the following to occur:
+%
+% \begin{enumerate}
+% \item \pkg{lwarp} creates |<filename>_html_inc.tex| whose contents are:
+% \begin{sourcedisplay}
+% \cs{input} \textless{}filename\textgreater.tex
+% \end{sourcedisplay}
+% \item |<filename>_html_inc.tex| is then \cs{include}d instead of |<filename>.tex|.
+% \item |<filename>_html_inc.aux| is automatically generated and used by \LaTeX.
+% \end{enumerate}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{macro}{\@include} \marg{filename} Modified to load |_html_inc| files.
+%
+% (Below, \cs{clearpage} caused missing text, and was changed to \cs{newpage}.)
+%
+% \changes{v0.37}{2017/08/19}{Maintains independent \filenm{aux} files for \protect\HTML.}
+% \changes{v0.73}{2019/06/20}{Fix: \cs{newpage} instead of \cs{clearpage}.}
+% \begin{macrocode}
+\def\@include#1 {%
+\immediate\openout\LWR@quickfile #1_html_inc.tex% lwarp
+\immediate\write\LWR@quickfile{\string\input{#1.tex}}% lwarp
+\immediate\closeout\LWR@quickfile% lwarp
+\LWR@orignewpage% changed from clearpage
+\if@filesw
+ \immediate\write\@mainaux{\string\@input{#1_html_inc.aux}}% changed
+\fi
+\@tempswatrue
+\if@partsw
+ \@tempswafalse
+ \edef\reserved@b{#1}%
+ \@for\reserved@a:=\@partlist\do
+ {\ifx\reserved@a\reserved@b\@tempswatrue\fi}%
+\fi
+\if@tempswa
+ \let\@auxout\@partaux
+ \if@filesw
+ \immediate\openout\@partaux #1_html_inc.aux % changed
+ \immediate\write\@partaux{\relax}%
+ \fi
+ \@input@{#1_html_inc.tex}% changed
+ \LWR@orignewpage% changed from clearpage
+ \@writeckpt{#1}%
+ \if@filesw
+ \immediate\closeout\@partaux
+ \fi
+\else
+ \deadcycles\z@
+ \@nameuse{cp@#1}%
+\fi
+\let\@auxout\@mainaux%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+% \section{Copying a file}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{macro}{\LWR@copyfile} \marg{source filename} \marg{destination filename}
+%
+% Used to copy the |.toc| file to |.sidetoc| to re-print the \TOC\ in
+% the side\TOC\ navigation pane.
+% \begin{macrocode}
+\newwrite\LWR@copyoutfile % open the file to write to
+\newread\LWR@copyinfile % open the file to read from
+
+\newcommand*{\LWR@copyfile}[2]{%
+\LWR@traceinfo{LWR@copyfile: copying #1 to #2}
+
+\immediate\openout\LWR@copyoutfile=#2
+\openin\LWR@copyinfile=#1
+\begingroup\endlinechar=-1
+\makeatletter
+
+\LWR@traceinfo{LWR@copyfile: about to loop}
+
+\loop\unless\ifeof\LWR@copyinfile
+ \LWR@traceinfo{LWR@copyfile: one line}
+ \read\LWR@copyinfile to\LWR@fileline % Read one line and store it into \LWR@fileline
+% \LWR@fileline\par % print the content into the pdf
+% print the content:
+ \immediate\write\LWR@copyoutfile{\unexpanded\expandafter{\LWR@fileline}}%
+\repeat
+\immediate\closeout\LWR@copyoutfile
+\LWR@traceinfo{LWR@copyfile: done}
+\endgroup
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \section{Debugging messages}
+% \label{sec:debuggingmessages}
+%
+% \gindex{HTML>conversion settings>debug comments}
+% \gindex{tracing log}
+% \gindex{debugging>HTML debug comments}
+% \gindex{debugging>tracing log}
+% \gindex{troubleshooting>HTML debug comments}
+% \gindex{troubleshooting>tracing log}
+%
+% \changes{v0.61}{2018/09/25}{Docs: HTMLDebugComments}
+%
+% To have the \HTML\ output include additional \HTML\ comments, such as
+% \margintag{\HTML\ comments}
+% which \element{div} is closing, use
+% \begin{sourcedisplay}
+% \cs{booltrue\{HTMLDebugComments\}}
+% \end{sourcedisplay}
+%
+% \changes{v0.61}{2018/09/25}{Docs: \cs{tracinglwarp}}
+%
+% To have debug information written to the log,
+% \margintag{debugging information}
+% use
+% \begin{sourcedisplay}
+% \cs{tracinglwarp}
+% \end{sourcedisplay}
+%
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+
+% \DescribeBoolean{LWR@tracinglwarp} True if tracing is turned on.
+% \begin{macrocode}
+\newbool{LWR@tracinglwarp}
+% \end{macrocode}
+%
+% \begin{macro}{\tracinglwarp} Turns on the debug tracing messages.
+% \changes{v0.20}{2017/02/07}{Added.}
+% \begin{macrocode}
+\newcommand{\tracinglwarp}{\booltrue{LWR@tracinglwarp}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LWR@traceinfo} \marg{text} \quad If tracing is turned on, writes
+% the text to the |.log| file.
+% \begin{macrocode}
+\newcommand{\LWR@traceinfo}[1]{%
+\ifbool{LWR@tracinglwarp}%
+{%
+ \typeout{*** lwarp: #1}%
+}%
+{}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \DescribeBoolean{HTMLDebugComments} \DescribeDefault{false}
+% Add comments in \HTML\
+% about closing \element{div}s, sections, etc.
+%
+% \changes{v0.28}{2017/04/09}{Added boolean \progcode{HTMLDebugComments}.}
+%
+% \begin{macrocode}
+\newbool{HTMLDebugComments}
+\boolfalse{HTMLDebugComments}
+% \end{macrocode}
+
+
+
+% If \cs{tracinglwarp}, show where preamble hooks occur:
+% \begin{macrocode}
+\AfterEndPreamble{
+\LWR@traceinfo{AfterEndPreamble}
+}
+
+\AtBeginDocument{
+\LWR@traceinfo{AtBeginDocument}
+}
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+
+% \section{Defining print and \HTML\ versions of macros and environments}
+% \label{sec:definingprinthtml}
+% \gindex{print>selecting print/HTML definitions}
+% \gindex{HTML>selecting print/HTML definitions}
+%
+% The following refers to defining objects inside \pkg{lwarp}, and is not
+% for the user's document.
+%
+% Many macros and environments must be provided as both print and \HTML\ versions.
+%
+% While generating the print version of a document, the original macros
+% as defined by \LaTeX\ and its packages are used as-is.
+%
+% While generating the \HTML\ version of a document,
+% the original macro or environment is redefined to call a new \HTML\ version
+% or a copy of the original print version.
+% The new \HTML\ versions of macros and environments are used most of the time.
+% Copies of the print versions are used inside a \env{lateximage} environment,
+% which draws and remembers an image of the printed output, and also several
+% other places. The copies of the print versions may also be used by the \HTML\
+% versions, such as when the \HTML\ version merely encloses the print version
+% inside \HTML\ tags.
+%
+% The general structure for providing print and \HTML\ versions of a macro or
+% environment is as follows:
+%
+% \begin{description}
+%
+% \item[For a preexisting macro, not defined with \pkg{xparse}:] An \HTML\ version
+% is provided with a special name, inside a \env{warpHTML} environment,
+% then \cs{LWR@formatted} is used to redefine and patch various macros:
+% \begin{Verbatim}[gobble=2,obeytabs,tabsize=4,frame=lines]
+% \begin{warpHTML}
+% \newcommand{\LWR@HTML@name}{...}% may also use xparse
+%
+% \LWR@formatted{name}
+% \end{warpHTML}
+% \end{Verbatim}
+% |\LWR@formatted{name}| copies the original print version,
+% then redefines \cs{name} to use either the print or \HTML\ version depending
+% on which mode \pkg{lwarp} is using. \pkg{xparse} may be used to
+% define the new \HTML\ version, even if the original did not use \pkg{xparse}.
+
+% \item[For a preexisiting environment, not defined with \pkg{xparse}:] The process
+% is similar. Note the use of \cs{LWR@formattedenv} instead of \cs{LWR@formatted}.
+% \begin{Verbatim}[gobble=2,obeytabs,tabsize=4,frame=lines]
+% \begin{warpHTML}
+% \newenvironment{LWR@HTML@name}{...}% may also use xparse
+%
+% \LWR@formattedenv{name}
+% \end{warpHTML}
+% \end{Verbatim}
+
+% \item[If the original used \pkg{xparse}:] A copy must be made using a new name:
+% \begin{Verbatim}[gobble=2,obeytabs,tabsize=4,frame=lines]
+% \begin{warpHTML}
+% \NewDocumentCommand{\LWR@print@name}{..}{..}% copy the original
+%
+% \NewDocumentCommand{\LWR@HTML@name}{..}{..}% or use \newcommand
+%
+% \LWR@formatted{name}
+% \end{warpHTML}
+% \end{Verbatim}
+% Similar for an environment, using \cs{LWR@formattedenv}.
+% (\cs{LWR@formatted} and \cs{LWR@formattedenv} use \cs{LetLtxMacro} to
+% copy the original print definiton,
+% which may not work with macros and environments created by \pkg{xparse},
+% so the print version must be manually recreated in the \pkg{lwarp} source.)
+
+% \item[For a new macro or environment, not using \pkg{xparse} for the print version:] \
+% \begin{Verbatim}[gobble=2,obeytabs,tabsize=4,frame=lines]
+% \begin{warpall}
+% \newcommand{\name}{...}% NOT xparse!
+% \end{warpall}
+%
+% \begin{warpHTML}
+% \newcommand{\LWR@HTML@name}{...}% may use xparse for HTML
+%
+% \LWR@formatted{name}
+% \end{warpHTML}
+% \end{Verbatim}
+% Similar for an environment.
+% The plain \cs{name} or environment \env{name} is used for the printed
+% version, and is placed inside \env{warpall}.
+% \pkg{xparse} may be used for the \cs{LWR@HTML@<name>} version.
+%
+% \item [For a new macro or environment, using \pkg{xparse}:]
+% It is possible to use \pkg{xparse} for an entirely new macro or environment
+% by defining the \cs{LWR@print@<name>} version with \pkg{xparse}, along with
+% \cs{name} defined without \pkg{xparse} to refer directly to the \cs{LWR@print}
+% version:
+% \begin{Verbatim}[gobble=2,obeytabs,tabsize=4,frame=lines]
+% \begin{warpall}
+% \NewDocumentCommand{\LWR@print@name}{...} {...}% -or-
+% \NewDocumentEnvironment{\LWR@print@name}{...} {...} {...}
+%
+% % Simply a call to \LWR@print@name:
+% \newcommand{\name}{\LWR@print@name}% -or-
+% \newenvironment{name}{\LWR@print@name}{\endLWR@print@name}
+% \end{warpall}
+%
+% \begin{warpHTML}
+% \NewDocumentCommand{\LWR@HTML@name}{...} {...}% -or-
+% \NewDocumentEnvironment{\LWR@HTML@name}{...} {...} {...}
+%
+% \LWR@formatted{name}% -or-
+% \LWR@formattedenv{name}
+% \end{warpHTML}
+% \end{Verbatim}
+%
+% \end{description}
+%
+% In general, \cs{LWR@formatted} or \cs{LWR@formattedenv} are placed inside
+% a \env{warpHTML} environment, and while producing an \HTML\ document
+% they do the following:
+% \begin{itemize}
+% \item Macros are modified:
+% \begin{enumerate}
+% \item The pre-existing print version \cs{name} is saved as \cs{LWR@print@<name>},
+% unless \cs{LWR@print@<name>} is already defined.
+% \item The original \cs{name} is redefined to call either the print or \HTML\ version
+% depending on which format is in use at the moment, as set by \cs{LWR@formatting},
+% which is defined as either ``|print|'' or ``|HTML|''.
+% \end{enumerate}
+% \item When \pkg{lwarp} is producing a print document, the original definitions are
+% used, as well as any new definitions defined in \env{warpall} above.
+% \item When \pkg{lwarp} is generating \HTML\ output, \cs{LWR@formatting} is
+% set to ``|HTML|'', and \cs{name} is directed to \cs{LWR@HTML@<name>}.
+% \item When \pkg{lwarp} is generating \HTML\ output
+% but enters a \env{lateximage} environment,
+% or for some other reason needs to draw images using the original print
+% defintions, \cs{LWR@formatting} is changed to ``|print|'' and \cs{name} is
+% then redirected to \cs{LWR@print@<name>}, which was the original \cs{name}.
+% \end{itemize}
+%
+% Since arguments are not handled by the new \cs{name}, any star and other arguments
+% are processed by the print or \HTML\ version.
+%
+% Expandable versions are also provided as well.
+% These usually are necessary for anything which could appear inside a \env{tabular},
+% without which a ``|Misplaced \omit|'' error may occur.
+% \trouble[Misplaced \cs{omit} error]{Misplaced \cs{omit}>tabular}
+% \begin{sourcedisplay}
+% \cs{LWR@expandableformatted} \\
+% \cs{LWR@expandableformattedenv}
+% \end{sourcedisplay}
+%
+% (Older versions of \pkg{lwarp} used \cs{LetLtxMacro} for everything,
+% but this could fail when using macros defined by \pkg{xparse}.
+% This older system is still in use for many definitions.)
+% ^^A *8* Modify the above when all old \lets are removed.
+%
+% \changes{v0.57}{2018/05/28}{New system for switching print and \HTML\ outputs.}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\LWR@formatting} Remembers if selected print/\HTML\ formatting.
+%
+% Used while \cs{LWR@restoreorigformatting}, such as in an \env{lateximage}.
+% May be set to either ``|print|'' or ``|HTML|''.
+%
+% \begin{macrocode}
+\newcommand*{\LWR@formatting}{HTML}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@formatted} \marg{macroname} \qquad No backslash in the macro name.
+%
+% If not yet defined, defines \cs{LWR@print@<name>} as
+% the original print-mode \cs{<name>}.
+% Also redefines \cs{<name>} to use \cs{LWR@<format>@<name>},
+% where <format> is set by \cs{LWR@formatting}, and is |print| or |HTML|.
+%
+% \begin{macrocode}
+\newcommand*{\LWR@formatted}[1]{%
+ \ifcsundef{LWR@print@#1}{%
+ \expandafter\LetLtxMacro\csname LWR@print@#1\expandafter\endcsname%
+ \csname#1\endcsname%
+ }{}%
+ \ifcsundef{#1}{%
+ \expandafter\newrobustcmd\csname #1\endcsname{%
+ \@nameuse{LWR@\LWR@formatting @#1}%
+ }%
+ }{%
+ \expandafter\renewrobustcmd\csname #1\endcsname{%
+ \@nameuse{LWR@\LWR@formatting @#1}%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@expandableformatted} \marg{macroname} \qquad No backslash
+% in the macro name.
+%
+% An expandable version of \cs{LWR@formatted}.
+%
+% \begin{macrocode}
+\newcommand*{\LWR@expandableformatted}[1]{%
+ \ifcsundef{LWR@print@#1}{%
+ \expandafter\LetLtxMacro\csname LWR@print@#1\expandafter\endcsname%
+ \csname#1\endcsname%
+ }{}%
+ \ifcsundef{#1}{%
+ \expandafter\newcommand\csname #1\endcsname{%
+ \@nameuse{LWR@\LWR@formatting @#1}%
+ }%
+ }{%
+ \expandafter\renewcommand\csname #1\endcsname{%
+ \@nameuse{LWR@\LWR@formatting @#1}%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@formattedenv} \marg{environmentname}
+%
+% If not yet defined, defines the environment \env{LWR@print@<name>} as
+% the original print-mode \env{<name>}.
+% Also redefines the environment |<name>| to use environment |LWR@<format>@<name>|,
+% where <format> is set by \cs{LWR@formatting}, and is |print| or |HTML|.
+%
+% \begin{macrocode}
+\newcommand*{\LWR@formattedenv}[1]{%
+ \ifcsundef{LWR@print@#1}{%
+ \expandafter\LetLtxMacro\csname LWR@print@#1\expandafter\endcsname%
+ \csname#1\endcsname%
+ \csletcs{endLWR@print@#1}{end#1}%
+ }{}%
+ \DeclareDocumentEnvironment{#1}{}%
+ {%
+ \@nameuse{LWR@\LWR@formatting @#1}%
+ }%
+ {%
+ \@nameuse{endLWR@\LWR@formatting @#1}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@expandableformattedenv} \marg{environmentname}
+%
+% An expandable version of \env{LWR@formattedenv}.
+%
+% \begin{macrocode}
+\newcommand*{\LWR@expandableformattedenv}[1]{%
+ \ifcsundef{LWR@print@#1}{%
+ \expandafter\LetLtxMacro\csname LWR@print@#1\expandafter\endcsname%
+ \csname#1\endcsname%
+ \csletcs{endLWR@print@#1}{end#1}%
+ }{}%
+ \DeclareExpandableDocumentEnvironment{#1}{}%
+ {%
+ \@nameuse{LWR@\LWR@formatting @#1}%
+ }%
+ {%
+ \@nameuse{endLWR@\LWR@formatting @#1}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+% \section{\HTML-conversion output modifications}
+%
+% These booleans modify the \HTML\ output in various ways
+% to improve conversion to \EPUB\ or word processor imports.
+%
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+%
+% \subsection{User-level controls}
+%
+% \DescribeBoolean{FormatEPUB} \DescribeDefault{false}
+% Changes \HTML\ output for easy \EPUB\ conversion
+% via an external program. Removes per-file headers, footers, and nav.
+% Adds footnotes per chapter/section.
+% \gindex{EPUB>HTML conversion settings}
+% \gindex{HTML>conversion settings>EPUB}
+%
+% \changes{v0.28}{2017/04/09}{Added boolean \progcode{FormatEPUB}.}
+%
+% \begin{macrocode}
+\newbool{FormatEPUB}
+\boolfalse{FormatEPUB}
+% \end{macrocode}
+%
+%
+% \DescribeBoolean{FormatWP} \DescribeDefault{false}
+% Changes \HTML\ output for easier conversion
+% by a word processor.
+% Removes headers and nav, prints footnotes per section,
+% and also forces single-file output and turns off \HTML\ debug
+% comments.
+% \gindex{word processor>HTML conversion settings}
+% \gindex{HTML>conversion settings>word processor}
+%
+% \changes{v0.28}{2017/04/09}{Added boolean \progcode{FormatWP}.}
+%
+% \begin{macrocode}
+\newbool{FormatWP}
+\boolfalse{FormatWP}
+% \end{macrocode}
+%
+%
+% \DescribeBoolean{WPMarkFloats} \DescribeDefault{false}
+% \describeWPMarkFloats
+% \footnote{Perhaps some day word processors will have \HTML\ import options
+% for identifying \element{figure} and caption tags
+% for figures and tables.}
+% \gindex{word processor>HTML conversion settings}
+% \gindex{HTML>conversion settings>word processor}
+%
+% \changes{v0.28}{2017/04/09}{Added boolean \progcode{HTMLMarkFloats}, changed
+% to \progcode{WPMarkFloats} as of v0.42.}
+%
+% \begin{macrocode}
+\newbool{WPMarkFloats}
+\boolfalse{WPMarkFloats}
+% \end{macrocode}
+
+% \DescribeBoolean{WPMarkMinipages} \DescribeDefault{false}
+% \changes{v0.42}{2017/10/18}{Added boolean \progcode{WPMarkMinipages}.}
+% \describeWPMarkMinipages
+% \begin{macrocode}
+\newbool{WPMarkMinipages}
+\boolfalse{WPMarkMinipages}
+% \end{macrocode}
+
+% \DescribeBoolean{WPMarkTOC} \DescribeDefault{true}
+% \changes{v0.42}{2017/10/18}{Added boolean \progcode{WPMarkTOC}.}
+% \describeWPMarkTOC
+% \begin{macrocode}
+\newbool{WPMarkTOC}
+\booltrue{WPMarkTOC}
+% \end{macrocode}
+
+
+% \DescribeBoolean{WPMarkLOFT} \DescribeDefault{false}
+% \changes{v0.42}{2017/10/19}{Added boolean \progcode{WPMarkLOFT}.}
+% \describeWPMarkLOFT
+% \begin{macrocode}
+\newbool{WPMarkLOFT}
+\boolfalse{WPMarkLOFT}
+% \end{macrocode}
+
+
+% \DescribeBoolean{WPMarkMath} \DescribeDefault{false}
+% \changes{v0.42}{2017/10/19}{Added boolean \progcode{WPMarkMath}.}
+% \describeWPMarkMath
+% \begin{macrocode}
+\newbool{WPMarkMath}
+\boolfalse{WPMarkMath}
+% \end{macrocode}
+
+
+% \DescribeBoolean{WPTitleHeading} \DescribeDefault{false}
+% \changes{v0.42}{2017/10/19}{Added boolean \progcode{WPTitleHeading}.}
+% \describeWPTitleHeading
+% \begin{macrocode}
+\newbool{WPTitleHeading}
+\boolfalse{WPTitleHeading}
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+%
+% \subsection{Heading adjustments}
+%
+% \changes{v0.42}{2017/10/19}{If \progcode{FormatWP},
+% shift section headings.}
+% If formatting the \HTML\ for a word processor, adjust heading levels.
+%
+% If |WPTitleHeading| is true, adjust so that |part| is \UI{Heading~1}.
+%
+% If |WPTitleHeading| is false, use \element{h1} for the title,
+% and set |part| to \UI{Heading~2}.
+%
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\AtBeginDocument{
+\ifbool{FormatWP}{
+\@ifundefined{chapter}{
+\ifbool{WPTitleHeading}{% part and section starting at h2
+\renewcommand*{\LWR@tagtitle}{h1}
+\renewcommand*{\LWR@tagtitleend}{/h1}
+\renewcommand*{\LWR@tagpart}{h2}
+\renewcommand*{\LWR@tagpartend}{/h2}
+\renewcommand*{\LWR@tagsection}{h3}
+\renewcommand*{\LWR@tagsectionend}{/h3}
+\renewcommand*{\LWR@tagsubsection}{h4}
+\renewcommand*{\LWR@tagsubsectionend}{/h4}
+\renewcommand*{\LWR@tagsubsubsection}{h5}
+\renewcommand*{\LWR@tagsubsubsectionend}{/h5}
+\renewcommand*{\LWR@tagparagraph}{h6}
+\renewcommand*{\LWR@tagparagraphend}{/h6}
+\renewcommand*{\LWR@tagsubparagraph}{span class="subparagraph"}
+\renewcommand*{\LWR@tagsubparagraphend}{/span}
+}% WPTitleHeading
+{% not WPTitleHeading, part and section starting at h1
+\renewcommand*{\LWR@tagtitle}{div class="title"}
+\renewcommand*{\LWR@tagtitleend}{/div}
+\renewcommand*{\LWR@tagpart}{h1}
+\renewcommand*{\LWR@tagpartend}{/h1}
+\renewcommand*{\LWR@tagsection}{h2}
+\renewcommand*{\LWR@tagsectionend}{/h2}
+\renewcommand*{\LWR@tagsubsection}{h3}
+\renewcommand*{\LWR@tagsubsectionend}{/h3}
+\renewcommand*{\LWR@tagsubsubsection}{h4}
+\renewcommand*{\LWR@tagsubsubsectionend}{/h4}
+\renewcommand*{\LWR@tagparagraph}{h5}
+\renewcommand*{\LWR@tagparagraphend}{/h5}
+\renewcommand*{\LWR@tagsubparagraph}{h6}
+\renewcommand*{\LWR@tagsubparagraphend}{/h6}
+}% not WPTitleHeading
+}% chapter undefined
+{% chapter defined
+\ifbool{WPTitleHeading}{}
+{% not WPTitleHeading, part and chapter starting at h1
+\renewcommand*{\LWR@tagtitle}{div class="title"}
+\renewcommand*{\LWR@tagtitleend}{/div}
+\renewcommand*{\LWR@tagpart}{h1}
+\renewcommand*{\LWR@tagpartend}{/h1}
+\renewcommand*{\LWR@tagchapter}{h2}
+\renewcommand*{\LWR@tagchapterend}{/h2}
+\renewcommand*{\LWR@tagsection}{h3}
+\renewcommand*{\LWR@tagsectionend}{/h3}
+\renewcommand*{\LWR@tagsubsection}{h4}
+\renewcommand*{\LWR@tagsubsectionend}{/h4}
+\renewcommand*{\LWR@tagsubsubsection}{h5}
+\renewcommand*{\LWR@tagsubsubsectionend}{/h5}
+\renewcommand*{\LWR@tagparagraph}{h6}
+\renewcommand*{\LWR@tagparagraphend}{/h6}
+\renewcommand*{\LWR@tagsubparagraph}{span class="subparagraph"}
+\renewcommand*{\LWR@tagsubparagraphend}{/span}
+}% not WPTitleHeading
+}% chapter defined
+}{}% FormatWP
+}% AtBeginDocument
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \section{Remembering original formatting macros}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% Remember original definitions of formatting commands.
+% Will be changed to \HTML\ commands for most uses.
+% Will be temporarily restored to original meaning inside any lateximage environment.
+% Also nullify unused commands.
+%
+% Some packages redefine \cs{\#}, which is used to generate \HTML, so the original must
+% 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@formatted} for \cs{bfseries}, etc.}
+% \begin{macrocode}
+\chardef\LWR@origpound=`\#
+% \end{macrocode}
+% \begin{macrocode}
+\let\LWR@origcomma\,
+\let\LWR@origthinspace\thinspace
+\let\LWR@orignegthinspace\negthinspace
+\let\LWR@origtilde~
+\let\LWR@origenskip\enskip
+\let\LWR@origquad\quad
+\let\LWR@origqquad\qquad
+\let\LWR@orighfil\hfil
+\let\LWR@orighss\hss
+\let\LWR@origllap\llap
+\let\LWR@origrlap\rlap
+\let\LWR@orighfilneg\hfilneg
+\let\LWR@orighspace\hspace
+
+\let\LWR@origrule\rule
+
+\let\LWR@origmedskip\medskip
+\let\LWR@origbigskip\bigskip
+
+\let\LWR@origtextellipsis\textellipsis
+\let\LWR@orig@textquotedbl\textquotedbl
+
+\LetLtxMacro\LWR@origttfamily\ttfamily
+
+\LetLtxMacro\LWR@origem\em
+\LetLtxMacro\LWR@orignormalfont\normalfont
+
+\let\LWR@origonecolumn\onecolumn
+
+\let\LWR@origsp\sp
+\let\LWR@origsb\sb
+\LetLtxMacro\LWR@origtextsuperscript\textsuperscript
+\LetLtxMacro\LWR@orig@textsuperscript\@textsuperscript
+
+\AtBeginDocument{
+\LetLtxMacro\LWR@origtextsubscript\textsubscript
+\LetLtxMacro\LWR@orig@textsubscript\@textsubscript
+}
+
+\LetLtxMacro\LWR@origunderline\underline
+% \end{macrocode}
+%
+% \begin{macrocode}
+\let\LWR@orignewpage\newpage
+
+\let\LWR@origpagestyle\pagestyle
+\let\LWR@origthispagestyle\thispagestyle
+\LetLtxMacro\LWR@origpagenumbering\pagenumbering
+
+\let\LWR@orignewline\newline
+
+
+\AtBeginDocument{% in case packages change definition
+\let\LWR@orig@trivlist\@trivlist
+\let\LWR@origtrivlist\trivlist
+\let\LWR@origendtrivlist\endtrivlist
+\LetLtxMacro\LWR@origitem\item
+\LetLtxMacro\LWR@origitemize\itemize
+\LetLtxMacro\LWR@endorigitemize\enditemize
+\LetLtxMacro\LWR@origenumerate\enumerate
+\LetLtxMacro\LWR@endorigenumerate\endenumerate
+\LetLtxMacro\LWR@origdescription\description
+\LetLtxMacro\LWR@endorigdescription\enddescription
+\let\LWR@orig@mklab\@mklab
+\let\LWR@origmakelabel\makelabel
+\let\LWR@orig@donoparitem\@donoparitem
+\LetLtxMacro\LWR@orig@item\@item
+\let\LWR@orig@nbitem\@nbitem
+}
+
+\let\LWR@origpar\par
+
+\LetLtxMacro\LWR@origfootnote\footnote
+\let\LWR@orig@mpfootnotetext\@mpfootnotetext
+
+
+\AtBeginDocument{% in case packages change definition
+\LetLtxMacro\LWR@orighline\hline%
+\LetLtxMacro\LWR@origcline\cline%
+}
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+% \section{Accents}
+%
+% \limitsaccents
+%
+% \changes{v0.37}{2017/08/18}{\protect\LaTeX\ accents: Added.}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+%
+% Without \cs{AtBeginDocument}, \cs{t} was being re-defined somewhere.
+% \begin{macrocode}
+\AtBeginDocument{
+% \end{macrocode}
+% The following are restored for print when inside a \env{lateximage}.
+%
+% For Unicode engines, only \cs{t} needs to be redefined:
+% \begin{macrocode}
+\LetLtxMacro\LWR@origt\t
+% \end{macrocode}
+% For pdf\LaTeX, additional work is required:
+% \begin{macrocode}
+\ifPDFTeX% pdflatex or dvi latex
+\LetLtxMacro\LWR@origequalaccent\=
+\LetLtxMacro\LWR@origdotaccent\.
+\LetLtxMacro\LWR@origu\u
+\LetLtxMacro\LWR@origv\v
+\LetLtxMacro\LWR@origc\c
+\LetLtxMacro\LWR@origd\d
+\LetLtxMacro\LWR@origb\b
+% \end{macrocode}
+% The \HTML\ redefinitions follow.
+%
+% For pdf\LaTeX, Unicode diacritical marks are used:
+% \begin{macrocode}
+\renewcommand*{\=}[1]{#1\HTMLunicode{0305}}
+\renewcommand*{\.}[1]{#1\HTMLunicode{0307}}
+\renewcommand*{\u}[1]{#1\HTMLunicode{0306}}
+\renewcommand*{\v}[1]{#1\HTMLunicode{030C}}
+\renewcommand*{\c}[1]{#1\HTMLunicode{0327}}
+\renewcommand*{\d}[1]{#1\HTMLunicode{0323}}
+\renewcommand*{\b}[1]{#1\HTMLunicode{0331}}
+\fi
+% \end{macrocode}
+% For all engines, a Unicode diacritical tie is used:
+% \begin{macrocode}
+\def\LWR@t#1#2{#1\HTMLunicode{0361}#2}
+\renewcommand*{\t}[1]{\LWR@t#1}
+% \end{macrocode}
+%
+% \begin{macro}{\LWR@restoreorigaccents}
+% Called from \cs{restoreoriginalformatting} when a \env{lateximage} is begun.
+% \begin{macrocode}
+\ifPDFTeX% pdflatex or dvi latex
+\newcommand*{\LWR@restoreorigaccents}{%
+\LetLtxMacro\=\LWR@origequalaccent%
+\LetLtxMacro\.\LWR@origdotaccent%
+\LetLtxMacro\u\LWR@origu%
+\LetLtxMacro\v\LWR@origu%
+\LetLtxMacro\t\LWR@origt%
+\LetLtxMacro\c\LWR@origc%
+\LetLtxMacro\d\LWR@origd%
+\LetLtxMacro\b\LWR@origb%
+}%
+\else% XeLaTeX, LuaLaTeX:
+\newcommand*{\LWR@restoreorigaccents}{%
+\LetLtxMacro\t\LWR@origt%
+}%
+\fi%
+}% AtBeginDocument
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+
+% \section{Configuration files}
+
+% \changes{v0.20}{2016/12/20}{\pkg{lwarp-newproject}: Added.}
+% \changes{v0.30}{2017/04/27}{\pkg{lwarp-newproject} removed, and combined with \pkg{lwarp}.}
+
+
+
+% \subsection{Decide whether to generate configuration files}
+
+% Configuration files are only written if processing the print version of the document,
+% and not processing a \pkg{pstool} image.
+% \pkg{pstool} uses an additional compile for each image using the original
+% document's preamble, which includes \pkg{lwarp}, so the \pkg{lwarp}
+% configuration files are turned off if \filenm{-pstool} is part of the \cs{jobname}.
+%
+% Default to no configuration files:
+% \changes{v0.61}{2018/10/02}{Don't write configuration files if processing \pkg{pstool} image.}
+% \begin{macrocode}
+\excludecomment{LWRwriteconf}
+% \end{macrocode}
+%
+% Generate configuration files if print mode and not \filenm{-pstool}:
+%
+% \codeprint
+% \begin{macrocode}
+\begin{warpprint}
+\fullexpandarg%
+\IfSubStr*{\jobname}{-pstool}
+ {
+ \PackageInfo{lwarp}{%
+ Jobname with -pstool is found.\MessageBreak
+ Not generating lwarp configuration files,%
+ }
+ }
+ {
+ \PackageInfo{lwarp}{Generating lwarp configuration files,}%
+ \includecomment{LWRwriteconf}
+ }
+\end{warpprint}
+% \end{macrocode}
+
+
+% \subsection{\filenm{<project>_html.tex}}
+%
+% \DescribeFile{*_html.tex} Used to allow an \HTML\ version of the
+% document to exist alongside the print version.
+%
+% \codeconfig
+% \begin{macrocode}
+\begin{LWRwriteconf}
+\immediate\openout\LWR@quickfile=\jobname_html.tex
+\immediate\write\LWR@quickfile{%
+\detokenize{\PassOptionsToPackage}%
+{warpHTML,BaseJobname=\jobname}{lwarp}%
+}
+\immediate\write\LWR@quickfile{%
+\detokenize{\input}\string{\jobname.tex\string }%
+}
+\immediate\closeout\LWR@quickfile
+\end{LWRwriteconf}
+% \end{macrocode}
+
+
+% \subsection{\prog{lwarpmk} configuration files}
+% ^^A *lwarpmk.conf
+
+% \codeconfig
+% \begin{macrocode}
+\begin{LWRwriteconf}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@lwarpconfversion}
+% The version number of the configuration file, allowing \prog{lwarpmk} to detect
+% an obsolete configuration file format.
+% Incremented by one each time the configuration file format changes.
+% (This is NOT the same as the \pkg{lwarp} version number.)
+% \begin{macrocode}
+\newcommand*{\LWR@lwarpconfversion}{2}% also in lwarpmk.lua
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsubsection{Helper macros}
+%
+% \begin{macro}{\LWR@shellescapecmd}
+% The LaTeX compile option for shell escape, if used.
+% \begin{macrocode}
+\ifshellescape
+ \def\LWR@shellescapecmd{--shell-escape }
+\else
+ \def\LWR@shellescapecmd{}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@compilecmd} \marg{engine} \marg{suffix}
+%
+% Used to form the basic compilation command for a document, adding
+% the optional shell escape.
+%
+% Engine is \prog{pdflatex}, etc. Suffix is empty or \filenm{_html}
+% \begin{macrocode}
+\newcommand*{\LWR@compilecmd}[2]{%
+ #1 \LWR@shellescapecmd \jobname#2%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@addcompilecmd} \marg{cmd} \marg{suffix}
+%
+% Adds to the compilation command.
+%
+% Cmd is \prog{dvipdfmx}, etc. Suffix is empty or \filenm{_html}
+% \changes{v0.61}{2018/10/06}{Removed spaces.}
+% \begin{macrocode}
+\newcommand*{\LWR@addcompilecmd}[2]{%
+ \LWRopseq
+ #1 \jobname#2%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@unknownengine}
+% Error message if not sure which \LaTeX\ engine is being used.
+% \begin{macrocode}
+\newcommand*{\LWR@unknownengine}{%
+ \PackageError{lwarp}
+ {Unknown LaTeX engine.}
+ {Lwarp only knows about pdflatex, dvi latex, xelatex, lualatex, and upLateX.}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@latexmkvar} \marg{varname} \marg{value}
+%
+% Adds a \prog{latexmk} variable assignment.
+% \begin{macrocode}
+\newcommand*{\LWR@latexmkvar}[2]{%
+ -e
+ \LWRopquote%
+ \LWRdollar #1=q/#2/%
+ \LWRopquote
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LWR@latexmkcmd} \marg{\prog{latexmk} options}
+%
+% Sets a call to \prog{latexmk} with the given options, possibly adding
+% \optn{-\/-shell-escape}, and also adding the indexing program.
+% \changes{v0.59}{2018/09/05}{Fix: \optn{-\/-shell-escape} with \prog{latexmk}.}
+% \begin{macrocode}
+\newcommand*{\LWR@latexmkcmd}[1]{%
+ latexmk \space \LWR@shellescapecmd \space #1 \space
+ -recorder \space
+ \LWR@latexmkvar{makeindex}{\LWR@LatexmkIndexCmd}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@latexmkdvipdfm} \marg{\prog{dvipdfm} or \prog{dvipdfmx}}
+%
+% Adds the options settings for \prog{dvipdfm} or \prog{dvipdfmx}.
+% \begin{macrocode}
+\newcommand*{\LWR@latexmkdvipdfm}[1]{%
+ -pdfdvi \space
+ \LWR@latexmkvar{dvipdf}{%
+ #1
+ \@percentchar O
+ -o \@percentchar D
+ \@percentchar S%
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@compileuplatex}
+% Sets compile options for up\LaTeX\ with \pkg{ujarticle} or related classes.
+% \changes{v0.63}{2018/11/25}{Added.}
+% \begin{macrocode}
+\newcommand*{\LWR@compileuplatex}{
+ \def\LWR@tempprintlatexcmd{%
+ \LWR@compilecmd{uplatex}{}
+ \LWR@addcompilecmd{dvipdfmx}{}
+ }
+ \def\LWR@tempHTMLlatexcmd{%
+ \LWR@compilecmd{uplatex}{_html}
+ \LWR@addcompilecmd{dvipdfmx}{_html}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\LWR@PrintLatexCmd}
+% \begin{macro}{\LWR@HTMLLatexCmd}
+%
+% If not set by the user,
+% the following sets the command to use to compile the source to \PDF\ form.
+%
+% If using \prog{latexmk}, a complicated string is created,
+% eventually resulting in something such as:
+%
+% For \prog{xelatex} with \optn{-\/-shell-escape}:
+% \begin{Verbatim}[tabsize=4,gobble=2,frame=lines]
+% [[latexmk -xelatex --shell-escape -recorder
+% -e '$makeindex = q/makeindex -s lwarp.ist/' <jobname>_html]]
+% \end{Verbatim}
+%
+% For \prog{dvipdfmx}:
+% \begin{Verbatim}[tabsize=4,gobble=2,frame=lines]
+% [[latexmk -pdfdvi -e '$dvipdf=q/dvipdfmx %O -o %D %S/'
+% -recorder
+% -e '$makeindex=q/makeindex -s lwarp.ist/' <jobname>_html]]
+% \end{Verbatim}
+%
+% For the following, temporary values are computed, but the permanent
+% values are only set if the originals were not assigned by the user.
+% \begin{macrocode}
+\ifbool{LWR@latexmk}{
+% \end{macrocode}
+% For \prog{latexmk} with \prog{pdflatex} or \prog{lualatex}:
+% \begin{macrocode}
+ \ifpdf
+% \end{macrocode}
+% For \prog{latexmk} with \prog{pdflatex}:
+% \begin{macrocode}
+ \ifPDFTeX
+ \def\LWR@latexcmd{\LWR@latexmkcmd{-pdf -dvi- -ps-}}
+ \else
+% \end{macrocode}
+% For \prog{latexmk} with \prog{lualatex}:
+% \begin{macrocode}
+ \ifLuaTeX
+ \def\LWR@latexcmd{\LWR@latexmkcmd{-lualatex}}
+ \else
+ \LWR@unknownengine
+ \fi
+ \fi
+ \else% \ifpdf
+% \end{macrocode}
+% For \prog{latexmk} with \prog{xelatex} or \DVI\ \prog{latex}:
+% \begin{macrocode}
+ \ifXeTeX
+% \end{macrocode}
+% For \prog{latexmk} with \prog{xelatex}:
+% \begin{macrocode}
+ \def\LWR@latexcmd{\LWR@latexmkcmd{-xelatex}}
+ \else% \ifXeTeX
+% \end{macrocode}
+% For \prog{latexmk} with \DVI\ \prog{latex}:
+% \begin{macrocode}
+ \ifbool{LWR@dvipdfm}{
+ \def\LWR@latexcmd{%
+ \LWR@latexmkcmd{%
+ \LWR@latexmkdvipdfm{dvipdfm}%
+ }
+ }
+ }{
+ \ifbool{LWR@dvipdfmx}{
+ \def\LWR@latexcmd{%
+ \LWR@latexmkcmd{%
+ \LWR@latexmkdvipdfm{dvipdfmx}%
+ }
+ }
+ }{
+ \def\LWR@latexcmd{\LWR@latexmkcmd{-pdfps}}
+ }
+ }
+ \fi
+ \fi% \ifpdf
+% \end{macrocode}
+% The final assignment if \prog{latexmk}:
+% \begin{macrocode}
+ \def\LWR@tempprintlatexcmd{\LWR@latexcmd \space \jobname}
+ \def\LWR@tempHTMLlatexcmd{\LWR@latexcmd \space \jobname_html}
+}% latexmk
+% \end{macrocode}
+% Without \prog{latexmk}, the compiling command is simply the compiler name
+% and the optional shell escape:
+% \begin{macrocode}
+{% not latexmk
+ \ifpdf
+% \end{macrocode}
+% For \prog{pdflatex} or \prog{lualatex}:
+% \begin{macrocode}
+ \ifPDFTeX
+% \end{macrocode}
+% For \prog{pdflatex}:
+% \begin{macrocode}
+ \def\LWR@tempprintlatexcmd{\LWR@compilecmd{pdflatex}{}}
+ \def\LWR@tempHTMLlatexcmd{\LWR@compilecmd{pdflatex}{_html}}
+ \else
+ \ifLuaTeX
+% \end{macrocode}
+% For \prog{lualatex}:
+% \begin{macrocode}
+ \def\LWR@tempprintlatexcmd{\LWR@compilecmd{lualatex}{}}
+ \def\LWR@tempHTMLlatexcmd{\LWR@compilecmd{lualatex}{_html}}
+ \else
+ \LWR@unknownengine
+ \fi
+ \fi
+ \else% \ifpdf
+% \end{macrocode}
+% For \DVI\ \prog{latex} or \prog{xelatex}:
+% \begin{macrocode}
+ \ifXeTeX
+% \end{macrocode}
+% For \prog{xelatex}:
+% \begin{macrocode}
+ \def\LWR@tempprintlatexcmd{\LWR@compilecmd{xelatex}{}}
+ \def\LWR@tempHTMLlatexcmd{\LWR@compilecmd{xelatex}{_html}}
+ \else
+% \end{macrocode}
+% For \DVI\ \prog{latex}. Default to \prog{dvips}, unless
+% told to use \prog{dvipdfm} or \prog{dvipdfmx}:
+% \begin{macrocode}
+ \ifbool{LWR@dvipdfm}{
+% \end{macrocode}
+% For \DVI\ \prog{latex} with \prog{dvipdfm}:
+% \begin{macrocode}
+ \def\LWR@tempprintlatexcmd{%
+ \LWR@compilecmd{latex}{}
+ \LWR@addcompilecmd{dvipdfm}{}
+ }
+ \def\LWR@tempHTMLlatexcmd{%
+ \LWR@compilecmd{latex}{_html}
+ \LWR@addcompilecmd{dvipdfm}{_html}
+ }
+ }{
+ \ifbool{LWR@dvipdfmx}{
+% \end{macrocode}
+% For \DVI\ \prog{latex} with \prog{dvipdfmx}:
+% \begin{macrocode}
+ \def\LWR@tempprintlatexcmd{%
+ \LWR@compilecmd{latex}{}
+ \LWR@addcompilecmd{dvipdfmx}{}
+ }
+ \def\LWR@tempHTMLlatexcmd{%
+ \LWR@compilecmd{latex}{_html}
+ \LWR@addcompilecmd{dvipdfmx}{_html}
+ }
+ }{% dvips
+% \end{macrocode}
+% For \DVI\ \prog{latex} with \prog{dvips} and \prog{ps2pdf}:
+% \begin{macrocode}
+ \def\LWR@tempprintlatexcmd{%
+ \LWR@compilecmd{latex}{}
+ \LWR@addcompilecmd{dvips}{}
+ \LWR@addcompilecmd{ps2pdf}{}.ps
+ }
+ \def\LWR@tempHTMLlatexcmd{%
+ \LWR@compilecmd{latex}{_html}
+ \LWR@addcompilecmd{dvips}{_html}
+ \LWR@addcompilecmd{ps2pdf}{_html}.ps
+ }
+ }
+ }
+ \fi% \ifXeTeX
+ \fi% \ifpdf
+}% latexmk
+% \end{macrocode}
+% For \pkg{ujarticle}, \pkg{utarticle}, and related, using up\LaTeX\ and \prog{dvipdfmx}:
+% \changes{v0.63}{2018/11/25}{\pkg{ujarticle} and related: Compile options.}
+% \changes{v0.64}{2018/12/07}{\pkg{utarticle} and related: Added.}
+% \begin{macrocode}
+\@ifclassloaded{ujarticle}{\LWR@compileuplatex}{}
+\@ifclassloaded{ujbook}{\LWR@compileuplatex}{}
+\@ifclassloaded{ujreport}{\LWR@compileuplatex}{}
+\@ifclassloaded{utarticle}{\LWR@compileuplatex}{}
+\@ifclassloaded{utbook}{\LWR@compileuplatex}{}
+\@ifclassloaded{utreport}{\LWR@compileuplatex}{}
+% \end{macrocode}
+% Only make the setting permanent if the original was empty:
+% \changes{v0.61}{2018/09/20}{Added \optn{PrintLatexCmd} option.}
+% \changes{v0.61}{2018/09/20}{Added \optn{HTMLLatexCmd} option.}
+% \begin{macrocode}
+\ifdefempty{\LWR@PrintLatexCmd}{
+ \def\LWR@PrintLatexCmd{\LWR@tempprintlatexcmd}
+}{}
+\ifdefempty{\LWR@HTMLLatexCmd}{
+ \def\LWR@HTMLLatexCmd{\LWR@tempHTMLlatexcmd}
+}{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@writeconf} \marg{filename}
+%
+% Common code for each of \filenm{lwarpmk.conf} and \filenm{<project>.lwarpmkconf}.
+% Each entry is a variable name, the equal sign, and a quoted string
+% inside |[[| and |]]|, which are \prog{lua}'s long quote characters, allowing the
+% use of single and double quotes inside.
+%
+% \changes{v0.59}{2018/08/21}{Compilation commands now preassigned by \pkg{lwarp} instead
+% of being computed by \prog{lwarpmk}.}
+% \changes{v0.66}{2019/01/27}{Added \optn{ImagesDirectory} and \optn{ImagesName}.}
+% \begin{macrocode}
+\newcommand{\LWR@writeconf}[1]{
+\ifcsdef{LWR@quickfile}{}{\newwrite{\LWR@quickfile}}
+\immediate\openout\LWR@quickfile=#1
+\immediate\write\LWR@quickfile{confversion = [[\LWR@lwarpconfversion]]}
+\ifbool{usingOSWindows}{
+ \immediate\write\LWR@quickfile{opsystem = [[Windows]]}
+}{
+ \immediate\write\LWR@quickfile{opsystem = [[Unix]]}
+}
+\immediate\write\LWR@quickfile{sourcename = [[\jobname]]}
+\immediate\write\LWR@quickfile{homehtmlfilename = [[\HomeHTMLFilename]]}
+\immediate\write\LWR@quickfile{htmlfilename = [[\HTMLFilename]]}
+\immediate\write\LWR@quickfile{imagesdirectory = [[\LWR@ImagesDirectory]]}
+\immediate\write\LWR@quickfile{imagesname = [[\LWR@ImagesName]]}
+\immediate\write\LWR@quickfile{latexmk = [[\ifbool{LWR@latexmk}{true}{false}]]}
+\immediate\write\LWR@quickfile{printlatexcmd = [[\LWR@PrintLatexCmd]]}
+\immediate\write\LWR@quickfile{HTMLlatexcmd = [[\LWR@HTMLLatexCmd]]}
+\immediate\write\LWR@quickfile{printindexcmd = [[\LWR@PrintIndexCmd]]}
+\immediate\write\LWR@quickfile{HTMLindexcmd = [[\LWR@HTMLIndexCmd]]}
+\immediate\write\LWR@quickfile{latexmkindexcmd = [[\LWR@LatexmkIndexCmd]]}
+\immediate\write\LWR@quickfile{glossarycmd = [[\LWR@GlossaryCmd]]}
+\immediate\write\LWR@quickfile{pdftotextenc = [[\LWR@pdftotextEnc]]}
+\immediate\closeout\LWR@quickfile
+}
+
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{LWRwriteconf}
+% \end{macrocode}
+
+
+
+% \subsubsection{\filenm{lwarpmk.conf}}
+%
+% \DescribeFile{lwarpmk.conf}
+% |lwarpmk.conf| is automatically (re-)created by the \pkg{lwarp} package when
+% executing\\
+% \hspace*{2ex} |pdflatex <project.tex>|,\\
+% or similar for \prog{xelatex} or \prog{lualatex}, in print-document generation mode,
+% which is the default unless the \optn{warpHTML} option is given.
+% |lwarpmk.conf| is then used by the utility \prog{lwarpmk}.
+%
+% \changes{v0.29}{2017/04/15}{\filenm{lwarpmk.conf}: Add: \optn{language}
+% option for config files.}
+% \changes{v0.54}{2018/04/06}{\filenm{lwarpmk.conf}: Option \optn{xdyFilename} changed to \optn{xindyStyle}.}
+% \changes{v0.54}{2018/04/06}{\filenm{lwarpmk.conf}: Option \optn{IndexLanguage} changed to \optn{xindyLanguage}.}
+% \changes{v0.54}{2018/04/06}{\filenm{lwarpmk.conf}: Option \optn{xindyCodepage} added.}
+% \changes{v0.54}{2018/04/06}{\filenm{lwarpmk.conf}: Option \optn{pdftotextEnc} added.}
+% \changes{v0.56}{2018/05/11}{\filenm{lwarpmk.conf}: Records \texttt{-\/-shell-escape}.}
+% \changes{v0.58}{2018/06/20}{\filenm{lwarpmk.conf}: Generated \cs{AtBeginDocument}.}
+% \changes{v0.58}{2018/06/20}{\filenm{lwarpmk.conf}: Added options \optn{makeindex} and \optn{xindy}.}
+% \changes{v0.58}{2018/06/21}{\filenm{lwarpmk.conf}: Added option \optn{makeindexstyle}.}
+%
+% \codeconfig
+% \begin{macrocode}
+\begin{LWRwriteconf}
+
+\AtBeginDocument{\LWR@writeconf{lwarpmk.conf}}
+
+\end{LWRwriteconf}
+% \end{macrocode}
+
+
+
+% \subsubsection{\filenm{<project>.lwarpmkconf}}
+%
+% \DescribeFile{project.lwarpmkconf} A project-specific configuration file for \prog{lwarpmk}.
+%
+% \changes{v0.29}{2017/04/15}{\filenm{*.lwarpmkconf}: Add: \optn{language}
+% option for config files.}
+% \changes{v0.54}{2018/04/06}{\filenm{*.lwarpmkconf}: Option \optn{xdyFilename} changed to \optn{xindyStyle}.}
+% \changes{v0.54}{2018/04/06}{\filenm{*.lwarpmkconf}: Option \optn{IndexLanguage} changed to \optn{xindyLanguage}.}
+% \changes{v0.54}{2018/04/06}{\filenm{*.lwarpmkconf}: Option \optn{xindyCodepage} added.}
+% \changes{v0.54}{2018/04/06}{\filenm{*.lwarpmkconf}: Option \optn{pdftotextEnc} added.}
+% \changes{v0.56}{2018/05/11}{\filenm{*.lwarpmkconf}: Records \texttt{-\/-shell-escape}.}
+% \changes{v0.58}{2018/06/20}{\filenm{*.lwarpmkconf}: Generated \cs{AtBeginDocument}.}
+% \changes{v0.58}{2018/06/20}{\filenm{*.lwarpmkconf}: Added options \optn{makeindex} and \optn{xindy}.}
+% \changes{v0.58}{2018/06/21}{\filenm{*.lwarpmkconf}: Added option \optn{makeindexstyle}.}
+%
+% The \optn{makeindex} and \optn{xindy} options have already been handled
+% for \filenm{lwarp.conf}.
+%
+% \codeconfig
+% \begin{macrocode}
+\begin{LWRwriteconf}
+
+\AtBeginDocument{\LWR@writeconf{\jobname.lwarpmkconf}}
+
+\end{LWRwriteconf}
+% \end{macrocode}
+
+
+
+
+
+
+% \subsection{\filenm{lwarp.css}}
+
+% \DescribeFile{lwarp.css}
+% This is the base \CSS\ layer used by \pkg{lwarp}.
+%
+% This must be present both when compiling the project
+% and also when distributing the \HTML\ files.
+%
+% \changes{v0.26}{2017/03/30}{\filenm{lwarp.css}: Improved responsive
+% \attribute{marginpar} and \attribute{marginblock}.}
+% \changes{v0.30}{2017/04/26}{Fix: \filenm{*.css} files only written in print mode.}
+% \changes{v0.50}{2018/03/02}{\filenm{lwarp.css}: Improved \SVG\ display math centering.}
+% \changes{v0.54}{2018/04/24}{\filenm{lwarp.css}: Fix: Text-decoration-skip: auto.}
+% \changes{v0.56}{2018/04/27}{\filenm{lwarp.css}: Added \attribute{span.textbf}, etc.}
+% \changes{v0.56}{2018/05/09}{\filenm{lwarp.css}: Added \attribute{div.textbf}, etc.}
+% \changes{v0.57}{2018/05/21}{\filenm{lwarp.css}: Added ruled, boxed, boxruled floats.}
+% \changes{v0.57}{2018/05/21}{\filenm{lwarp.css}: Increased float vertical margins.}
+% \changes{v0.61}{2018/10/05}{\filenm{lwarp.css}: Footnotes text align left.}
+% \changes{v0.61}{2018/10/05}{\filenm{lwarp.css}: Minipage table and footnotes: tighter margin.}
+% \changes{v0.62}{2018/11/02}{\filenm{lwarp.css}: Reduced margins in titlepage.}
+% \changes{v0.62}{2018/11/02}{\filenm{lwarp.css}: Fixed \CSS\ for \cs{textup}.}
+% \changes{v0.62}{2018/11/02}{\filenm{lwarp.css}: Added \CSS\ for \pkg{xfrac}, \pkg{nicefrac}.}
+% \changes{v0.63}{2018/11/30}{\filenm{lwarp.css}: Added \CSS\ for vertical writing.}
+% \changes{v0.63}{2018/12/01}{\filenm{lwarp.css}: Improved \CSS\ for \pkg{mdframed}.}
+% \changes{v0.65}{2018/12/09}{\filenm{lwarp.css}: Improved \CSS\ for quotations.}
+% \changes{v0.65}{2018/12/09}{\filenm{lwarp.css}: Side\TOC to left for improved \cs{marginpar}s.}
+% \changes{v0.65}{2018/12/09}{\filenm{lwarp.css}: Added \cs{sishape}, \cs{textsi}.}
+% \changes{v0.65}{2018/12/18}{\filenm{lwarp.css}: Improved \CSS\ for page layout.}
+% \changes{v0.66}{2019/01/02}{\filenm{lwarp.css}: Improved \CSS\ for definition lists.}
+% \changes{v0.66}{2019/02/28}{\filenm{lwarp.css}: Added \pkg{niceframe}.}
+% \changes{v0.72}{2019/05/24}{\filenm{lwarp.css}: Added \pkg{backnaur}.}
+% \changes{v0.72}{2019/05/26}{\filenm{lwarp.css}: Removed unneeded support for \cs{sishape}, \cs{textsi}.}
+% \changes{v0.73}{2019/06/21}{\filenm{lwarp.css}: Added \cs{book} for \pkg{memoir}.}
+% \changes{v0.73}{2019/06/30}{\filenm{lwarp_.css}: Improved pkg{tocdata} formatting.}
+%
+% ^^A *lwarp.css
+%
+% \codeconfig
+% \begin{macrocode}
+\begin{LWRwriteconf}
+\begin{filecontents*}{lwarp.css}
+/*
+ CSS stylesheet for the LaTeX lwarp package
+ Copyright 2016-2019 Brian Dunn — BD Tech Concepts LLC
+*/
+
+
+/* a fix for older browsers: */
+header, section, footer, aside, nav, main,
+ article, figure { display: block; }
+
+
+A:link {color:#000080 ; text-decoration: none ; }
+A:visited {color:#800000 ; }
+A:hover {color:#000080 ; text-decoration: underline ;}
+A:active {color:#800000 ; }
+
+a.tocbook {display: inline-block ; margin-left: 0em ;
+ font-weight: bold ; margin-top: 1ex ; margin-bottom: 1ex ; }
+a.tocpart {display: inline-block ; margin-left: 0em ;
+ font-weight: bold ;}
+a.tocchapter {display: inline-block ; margin-left: 0em ;
+ font-weight: bold ;}
+a.tocsection {display: inline-block ; margin-left: 1em ;
+ text-indent: -.5em ; font-weight: bold ; }
+a.tocsubsection {display: inline-block ; margin-left: 2em ;
+ text-indent: -.5em ; }
+a.tocsubsubsection {display: inline-block ; margin-left: 3em ;
+ text-indent: -.5em ; }
+a.tocparagraph {display: inline-block ; margin-left: 4em ;
+ text-indent: -.5em ; }
+a.tocsubparagraph {display: inline-block ; margin-left: 5em ;
+ text-indent: -.5em ; }
+a.tocfigure {margin-left: 0em}
+a.tocsubfigure {margin-left: 2em}
+a.toctable {margin-left: 0em}
+a.tocsubtable {margin-left: 2em}
+a.toctheorem {margin-left: 0em}
+a.toclstlisting {margin-left: 0em}
+
+body {
+ font-family: "DejaVu Serif", "Bitstream Vera Serif",
+ "Lucida Bright", Georgia, serif;
+ background: #FAF7F4 ;
+ color: black ;
+ margin:0em ;
+ padding:0em ;
+ font-size: 100% ;
+ line-height: 1.2 ;
+}
+
+p {margin: 1.5ex 0em 1.5ex 0em ;}
+table p {margin: .5ex 0em .5ex 0em ;}
+
+/* Holds a section number */
+span.sectionnumber { margin-right: 0em }
+
+/* Inserted in front of index lines */
+span.indexitem {margin-left: 0em}
+span.indexsubitem {margin-left: 2em}
+span.indexsubsubitem {margin-left: 4em}
+
+div.hidden, span.hidden { display: none ; }
+
+kbd, span.texttt {
+ font-family: "DejaVu Mono", "Bitstream Vera Mono", "Lucida Console",
+ "Nimbus Mono L", "Liberation Mono", "FreeMono", "Andale Mono",
+ "Courier New", monospace;
+ font-size: 100% ;
+}
+
+pre { padding: 3pt ; }
+
+span.strong, span.textbf, div.strong, div.textbf { font-weight: bold; }
+
+span.textit, div.textit { font-style: italic; }
+
+span.textmd, div.textmd { font-weight: normal; }
+
+span.texteb { font-weight: bolder; }
+
+span.textlg { font-weight: lighter; }
+
+span.textsc, div.textsc {
+ font-variant: small-caps;
+ font-variant-numeric: oldstyle-nums ;
+}
+
+span.textulc, div.textulc {
+ font-variant: normal ;
+ font-variant-numeric: normal ;
+}
+
+span.textsl, div.textsl { font-style: oblique; }
+
+span.textup, div.textup {
+ font-style: normal;
+ font-variant: normal;
+ font-variant-numeric: normal ;
+}
+
+span.textrm, div.textrm {
+ font-family: "DejaVu Serif", "Bitstream Vera Serif",
+ "Lucida Bright", Georgia, serif;
+}
+
+span.textsf, div.textsf {
+ font-family: "DejaVu Sans", "Bitstream Vera Sans",
+ Geneva, Verdana, sans-serif ;
+}
+
+span.textcircled { border: 1px solid black ; border-radius: 1ex ; }
+
+span.underline {
+ text-decoration: underline ;
+ text-decoration-skip: auto ;
+}
+
+span.overline {
+ text-decoration: overline ;
+ text-decoration-skip: auto ;
+}
+
+
+/* for vertical text: */
+div.verticalrl { writing-mode: vertical-rl }
+div.horizontaltb { writing-mode: horizontal-tb }
+
+
+/* for diagbox */
+div.diagboxtitleN { border-bottom: 1px solid gray }
+div.diagboxtitleS { border-top: 1px solid gray }
+
+div.diagboxE {
+ padding-left: 2em ;
+ text-align: right ;
+}
+
+div.diagboxW {
+ padding-right: 2em ;
+ text-align: left ;
+}
+
+
+
+/* For realscripts */
+.supsubscript {
+ display: inline-block;
+ text-align:left ;
+}
+
+.supsubscript sup,
+.supsubscript sub {
+ position: relative;
+ display: block;
+ font-size: .5em;
+ line-height: 1;
+}
+
+.supsubscript sup {
+ top: .5em;
+}
+
+.supsubscript sub {
+ top: .5em;
+}
+
+div.attribution p {
+ text-align: right ;
+ font-size: 80%
+}
+
+span.poemtitle {
+ font-size: 120% ; font-weight: bold;
+}
+
+pre.tabbing {
+ font-family: "Linux Libertine Mono O", "Lucida Console",
+ "Droid Sans Mono", "DejaVu Mono", "Bitstream Vera Mono",
+ "Liberation Mono", "FreeMono", "Andale Mono",
+ "Nimbus Mono L", "Courier New", monospace;
+}
+
+blockquote {
+ display: block ;
+ margin-left: 2em ;
+ margin-right: 2em ;
+}
+
+/* quotchap is for the quotchap package */
+div.quotchap {
+ display: block ;
+ font-style: oblique ;
+ overflow-x: auto ;
+ margin-left: 2em ;
+ margin-right: 2em ;
+}
+
+blockquote p, div.quotchap p {
+ line-height: 1.5;
+ text-align: left ;
+ font-size: .85em ;
+}
+
+/* qauthor is for the quotchap package */
+div.qauthor {
+ display: block ;
+ text-align: right ;
+ margin-left: auto ;
+ margin-right: 2em ;
+ font-size: 80% ;
+ font-variant: small-caps;
+}
+
+div.qauthor p {
+ text-align: right ;
+}
+
+div.epigraph, div.dictum {
+ line-height: 1.2;
+ text-align: left ;
+ padding: 3ex 1em 0ex 1em ;
+/* margin: 3ex auto 3ex auto ; */ /* Epigraph centered */
+ margin: 3ex 1em 3ex auto ; /* Epigraph to the right */
+/* margin: 3ex 1em 3ex 1em ; */ /* Epigraph to the left */
+ font-size: .85em ;
+ max-width: 27em ;
+}
+
+div.epigraphsource, div.dictumauthor {
+ text-align:right ;
+ margin-left:auto ;
+/* max-width: 50% ; */
+ border-top: 1px solid #A0A0A0 ;
+ padding-bottom: 3ex ;
+ line-height: 1.2;
+}
+
+div.epigraph p, div.dictum p { padding: .5ex ; margin: 0ex ;}
+div.epigraphsource p, div.dictumauthor p { padding: .5ex 0ex 0ex 0ex ; margin: 0ex ;}
+div.dictumauthor { font-style:italic }
+
+
+/* copyrightbox package */
+div.copyrightbox { margin: .5ex .5em }
+div.copyrightbox p {margin: 0px .5em ; padding: 0px}
+div.copyrightboxnote {text-align: left ; font-size: 60%}
+
+
+/* lettrine package: */
+span.lettrine { font-size: 4ex ; float: left ; }
+span.lettrinetext { font-variant: small-caps ; }
+
+/* ulem, soul, umoline packages: */
+span.uline {
+ text-decoration: underline ;
+ text-decoration-skip: auto ;
+}
+
+span.uuline {
+ text-decoration: underline ;
+ text-decoration-skip: auto ;
+ text-decoration-style: double ;
+}
+
+span.uwave {
+ text-decoration: underline ;
+ text-decoration-skip: auto ;
+ text-decoration-style: wavy ;
+}
+
+span.sout {
+ text-decoration: line-through ;
+}
+
+span.oline {
+ text-decoration: overline ;
+ text-decoration-skip: auto ;
+}
+
+span.xout {
+ text-decoration: line-through ;
+}
+
+span.dashuline {
+ text-decoration: underline ;
+ text-decoration-skip: auto ;
+ text-decoration-style: dashed ;
+}
+
+span.dotuline {
+ text-decoration: underline ;
+ text-decoration-skip: auto ;
+ text-decoration-style: dotted ;
+}
+
+span.letterspacing { letter-spacing: .2ex ; }
+
+span.capsspacing {
+ font-variant: small-caps ;
+ letter-spacing: .1ex ;
+}
+
+span.highlight { background: #F8E800 ; }
+
+
+
+
+html body {
+ margin: 0 ;
+ line-height: 1.2;
+}
+
+
+body div {
+ margin: 0ex;
+}
+
+
+div.book, h1, h2, h3, h4, h5, h6, span.paragraph, span.subparagraph
+{
+ font-family: "Linux Libertine O", "Hoefler Text", "Garamond",
+ "Bembo", "Janson", "TeX Gyre Pagella", "Palatino",
+ "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times,
+ "Times New Roman", serif;
+ font-style: normal ;
+ font-weight: bold ;
+ text-align: left ;
+}
+
+h1 { /* title of the entire website, used on each page */
+ text-align: center ;
+ font-size: 2.5em ;
+ padding: .4ex 0em 0ex 0em ;
+}
+
+div.book {
+ text-align: center ;
+ font-size: 2.325em ;
+ padding: .4ex 0em 0ex 0em ;
+}
+
+h2 { font-size: 2.25em }
+h3 { font-size: 2em }
+h4 { font-size: 1.75em }
+h5 { font-size: 1.5em }
+h6 { font-size: 1.25em }
+span.paragraph {font-size: 1em ; font-variant: normal ;
+ margin-right: 1em ; }
+span.subparagraph {font-size: 1em ; font-variant: normal ;
+ margin-right: 1em ; }
+
+div.minisec {
+ font-family: "DejaVu Sans", "Bitstream Vera Sans",
+ Geneva, Verdana, sans-serif ;
+ font-style: normal ;
+ font-weight: bold ;
+ text-align: left ;
+}
+
+h1 {
+ margin: 0ex 0em 0ex 0em ;
+ line-height: 1.3;
+ text-align: center ;
+}
+
+h2 {
+ margin: 1ex 0em 1ex 0em ;
+ line-height: 1.3;
+ text-align: center ;
+}
+
+h3 {
+ margin: 3ex 0em 1ex 0em ;
+ line-height: 1.3;
+}
+
+h4 {
+ margin: 3ex 0em 1ex 0em ;
+ line-height: 1.3;
+}
+
+h5 {
+ margin: 3ex 0em 1ex 0em ;
+ line-height: 1.3;
+}
+
+h6 {
+ margin: 3ex 0em 1ex 0em ;
+ line-height: 1.3;
+}
+
+
+div.titlepage {
+ text-align: center ;
+}
+
+.footnotes {
+ text-align: left ;
+ font-size: .85em ;
+ margin: 3ex 2em 0ex 2em ;
+ border-top: 1px solid silver ;
+}
+
+.marginpar, .marginparblock {
+ max-width: 50%;
+ float: right ;
+ clear: both ;
+ text-align: left ;
+ margin: 1ex 0.5em 1ex 1em ;
+ padding: 1ex 0.5em 1ex 0.5em ;
+ font-size: 85% ;
+ border-top: 1px solid silver ;
+ border-bottom: 1px solid silver ;
+ overflow-x: auto ;
+}
+
+.marginpar br { margin-bottom: 2ex ; }
+
+div.marginblock, div.marginparblock {
+ max-width:50%;
+ min-width: 10em; /* room for caption */
+ float:right;
+ text-align:left;
+ margin: 1ex 0.5em 1ex 1em ;
+ padding: 1ex 0.5em 1ex 0.5em ;
+ overflow-x: auto;
+}
+
+div.marginblock div.minipage,
+div.marginparblock div.minipage {
+ display: block ;
+ margin: 0pt auto 0pt auto ;
+}
+
+div.marginblock div.minipage p ,
+div.marginparblock div.minipage p
+ { font-size: 85%}
+
+div.marginblock br ,
+div.marginparblock br
+ { margin-bottom: 2ex ; }
+
+div.bodycontainer {
+ float: left ;
+ width: 80% ;
+}
+
+div.bodywithoutsidetoc div.bodycontainer {
+ float: none ;
+ width: 100% ;
+}
+
+section.textbody div.footnotes{
+ margin: 3ex 2em 0ex 2em ;
+ border-bottom: 2px solid silver ;
+}
+
+.footnoteheader {
+ border-top: 2px solid silver ;
+ margin-top: 3ex ;
+ padding-top: 1ex ;
+ font-weight: bold ;
+}
+
+.mpfootnotes {
+ text-align: left ;
+ font-size: .85em ;
+ margin-left: 1em ;
+ border-top: 1px solid silver ;
+}
+
+/* Remove footnote top border in the title page. */
+div.titlepage div.mpfootnotes {
+ border-top: none ;
+}
+
+
+
+ul, ol {
+ margin: 1ex 1em 1ex 0em;
+ line-height: 1.2;
+}
+
+body dir, body menu {
+ margin: 3ex 1em 3ex 0em;
+ line-height: 1.2;
+}
+
+li { margin: 0ex 0em 1ex 0em; }
+
+html {
+ margin: 0;
+ padding: 0;
+}
+
+.programlisting {
+ font-family: "DejaVu Mono", "Bitstream Vera Mono", "Lucida Console",
+ "Nimbus Mono L", "Liberation Mono", "FreeMono", "Andale Mono",
+ "Courier New", monospace;
+ margin: 1ex 0ex 1ex 0ex ;
+ padding: .5ex 0pt .5ex 0pt ;
+ overflow-x: auto;
+}
+
+section.textbody>pre.programlisting {
+border-top: 1px solid silver ;
+border-bottom: 1px solid silver ;
+}
+
+
+div.displaymath {
+ text-align: center ;
+}
+
+div.displaymathnumbered {
+ text-align: right ;
+ margin-left: 5% ;
+ margin-right: 5% ;
+ min-width: 2.5in ;
+}
+
+@media all and (min-width: 400px) {
+ div.displaymathnumbered {
+ margin-left: 10% ;
+ margin-right: 10% ;
+ }
+}
+
+@media all and (min-width: 800px) {
+ div.displaymathnumbered {
+ margin-right: 20% ;
+ }
+}
+
+@media all and (min-width: 1200px) {
+ div.displaymathnumbered {
+ margin-right: 30% ;
+ }
+}
+
+
+.inlineprogramlisting {
+ font-family: "DejaVu Mono", "Bitstream Vera Mono", "Lucida Console",
+ "Nimbus Mono L", "Liberation Mono", "FreeMono", "Andale Mono",
+ "Courier New", monospace;
+ overflow-x: auto;
+}
+
+span.listinglabel {
+ display: inline-block ;
+ font-size: 70% ;
+ width: 4em ;
+ text-align: right ;
+ margin-right: 2em ;
+}
+
+div.abstract {
+ margin: 2em 5% 2em 5% ;
+ padding: 1ex 1em 1ex 1em ;
+/* font-weight: bold ; */
+ font-size: 90% ;
+ text-align: left ;
+}
+
+div.abstract dl {line-height:1.5;}
+div.abstract dt {color:#304070;}
+
+div.abstracttitle{
+ font-family: "URW Classico", Optima, "Linux Biolinum O",
+ "Linux Libertine O", "Liberation Serif", "Nimbus Roman No 9 L",
+ "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif;
+ font-weight:bold;
+ font-size:1.25em;
+ text-align: center ;
+}
+
+span.abstractrunintitle{
+ font-family: "URW Classico", Optima, "Linux Biolinum O",
+ "Linux Libertine O", "Liberation Serif", "Nimbus Roman No 9 L",
+ "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif;
+ font-weight:bold;
+}
+
+
+.verbatim {
+ overflow-x: auto ;
+}
+
+.alltt {
+ overflow-x: auto ;
+}
+
+
+.bverbatim {
+ margin: 1ex 0pt 1ex 0pt ;
+ padding: .5ex 0pt .5ex 0pt ;
+ overflow-x: auto ;
+}
+
+.lverbatim {
+ margin: 1ex 0pt 1ex 0pt ;
+ padding: .5ex 0pt .5ex 0pt ;
+ overflow-x: auto ;
+}
+
+.fancyvrb {
+ font-size:.85em ;
+ margin: 3ex 0pt 3ex 0pt
+}
+
+.fancyvrblabel {
+ font-size: .85em ;
+ text-align: center ;
+ font-weight: bold ;
+ margin-top: 1ex ;
+ margin-bottom: 1ex ;
+}
+
+
+.verse {
+ font-family: "Linux Libertine Mono O", "Lucida Console",
+ "Droid Sans Mono", "DejaVu Mono", "Bitstream Vera Mono",
+ "Liberation Mono", "FreeMono", "Andale Mono",
+ "Nimbus Mono L", "Courier New", monospace;
+ margin-left: 1em ;
+}
+
+
+div.singlespace { line-height: 1.2 ; }
+div.onehalfspace { line-height: 1.5 ; }
+div.doublespace { line-height: 2 ; }
+
+
+/* Word processor format output: */
+div.wpfigure { border: 1px solid red ; margin: .5ex ; padding: .5ex ; }
+div.wptable { border: 1px solid blue ; margin: .5ex ; padding: .5ex ; }
+div.wpminipage { border: 1px solid green ; margin: .5ex ; padding: .5ex ;}
+
+
+
+
+/* Minipage environments, vertically aligned to top, center, bottom: */
+.minipage, .fminipage, .fcolorminipage {
+ /* display: inline-block ; */
+ /* Mini pages which follow each other will be tiled. */
+ margin: .25em .25em .25em .25em;
+ padding: .25em .25em .25em .25em;
+ display: inline-flex;
+ flex-direction: column ;
+ overflow: auto;
+}
+
+.inlineminipage {
+ display: inline-block ;
+ text-align: left
+}
+
+/* Paragraphs in the flexbox did not collapse their margins. */
+/* Have not yet researched this. */
+.minipage p {margin: .75ex 0em .75ex 0em ;}
+
+.fboxBlock .minipage, .colorbox .minipage, .colorboxBlock .minipage,
+.fcolorbox .minipage, .fcolorboxBlock .minipage
+ {border: none ; background: none;}
+
+.fbox, .fboxBlock { border: 1px solid black ; }
+
+.fbox, .fboxBlock, .fcolorbox, .fcolorboxBlock, .colorbox, .colorboxBlock,
+.fminipage, .fcolorminipage
+ {display: inline-block}
+
+.shadowbox, .shabox {
+ border: 1px solid black;
+ box-shadow: 3px 3px 3px #808080 ;
+ border-radius: 0px ;
+ padding: .4ex .3em .4ex .3em ;
+ margin: 0pt .3ex 0pt .3ex ;
+ display: inline-block ;
+}
+
+.doublebox {
+ border: 3px double black;
+ border-radius: 0px ;
+ padding: .4ex .3em .4ex .3em ;
+ margin: 0pt .3ex 0pt .3ex ;
+ display: inline-block ;
+}
+
+.ovalbox, .Ovalbox {
+ border: 1px solid black;
+ border-radius: 1ex ;
+ padding: .4ex .3em .4ex .3em ;
+ margin: 0pt .3ex 0pt .3ex ;
+ display: inline-block ;
+}
+
+.Ovalbox { border-width: 2px ; }
+
+.framebox {
+ border: 1px solid black;
+ border-radius: 0px ;
+ padding: .3ex .2em 0ex .2em ;
+ margin: 0pt .1ex 0pt .1ex ;
+ display: inline-block ;
+}
+
+
+.mdframed {
+ padding: 0ex ;
+ margin: 2ex 0em 2ex 0em ;
+}
+
+.mdframed p { padding: 0ex .5em 0ex .5em ; }
+
+.mdframed dl { padding: 1ex .5em 0ex .5em ; }
+
+.mdframedtitle {
+ padding: .5ex 0pt 0pt 0pt ;
+ border-radius: 10pt 10pt 0pt 0pt ;
+ display: block ;
+ margin-bottom: 1ex ;
+}
+
+.mdframedsubtitle {
+ display: block ;
+}
+
+.mdframedsubsubtitle {
+ display: block ;
+}
+
+.mdtheorem {
+ padding: 0ex .5em 0ex .5em ;
+ margin: 3ex 5% 3ex 5% ;
+}
+
+
+/* framed package */
+.framed, pre.boxedverbatim, fcolorbox {
+ margin: 3ex 0em 3ex 0em ;
+ border: 1px solid black;
+ border-radius: 0px ;
+ padding: .3ex 1em 0ex 1em ;
+ display: block ;
+}
+
+.shaded {
+ margin: 3ex 0em 3ex 0em ;
+ padding: .3ex 1em .3ex 1em ;
+ display: block ;
+}
+
+.snugframed {
+ margin: 3ex 0em 3ex 0em ;
+ border: 1px solid black;
+ border-radius: 0px ;
+ display: block ;
+}
+
+.framedleftbar {
+ margin: 3ex 0em 3ex 0em ;
+ border-left: 3pt solid black;
+ border-radius: 0px ;
+ padding: .3ex .2em .3ex 1em ;
+ display: block ;
+}
+
+.framedtitle {
+ margin: 0em ;
+ padding: 0em ;
+ font-size: 130%
+}
+
+.framedtitle p { padding: .3em }
+
+
+/* For the niceframe package: */
+
+div.niceframe, div.curlyframe, div.artdecoframe, div.generalframe {
+ padding: 1ex ;
+ margin: 2ex auto ;
+ border-radius: 2ex ;
+}
+
+div.niceframe {
+ border: 6px groove black ;
+}
+
+div.curlyframe {
+ border-left: 3px dotted black ;
+ border-right: 3px dotted black ;
+ border-radius: 6ex ;
+}
+
+div.artdecoframe {
+ border-left: 10px double black ;
+ border-right: 10px double black ;
+ border-radius: 6ex ;
+}
+
+div.generalframe {
+ border: 6px groove black ;
+}
+
+
+
+dl {
+ margin: 1ex 2em 1ex 0em;
+ line-height: 1.3;
+}
+
+dl dt {
+ display: block ;
+ float:left ;
+ font-weight: bold;
+ padding-right: 1em ;
+}
+
+dl dd { display: block ; }
+
+dl dd:after { content: "" ; display: block ; clear: both }
+
+dl dd p { margin-top: 0em; }
+
+dd ul, dd ol, dd dl { clear: both ; padding-top: 1ex }
+
+
+nav {
+ font-family: "URW Classico", Optima, "Linux Biolinum O",
+ "DejaVu Sans", "Bitstream Vera Sans",
+ Geneva, Verdana, sans-serif ;
+ margin-bottom: 4ex ;
+}
+
+nav p {
+ line-height: 1.2 ;
+ margin-top:.5ex ;
+ margin-bottom:.5ex;
+ font-size: .9em ;
+}
+
+
+
+img, img.hyperimage, img.borderimage {
+ max-width: 600px;
+ border: 1px solid silver;
+ box-shadow: 3px 3px 3px #808080 ;
+ padding: .5% ;
+ margin: .5% ;
+ background: none ;
+}
+
+img.inlineimage{
+ padding: 0px ;
+ box-shadow: none ;
+ border: none ;
+ background: none ;
+ margin: 0px ;
+ display: inline-block ;
+ border-radius: 0px ;
+}
+
+img.logoimage{
+ max-width: 300px ;
+ box-shadow: 3px 3px 3px #808080 ;
+ border: 1px solid black ;
+ background:none ;
+ padding:0 ;
+ margin:.5ex ;
+ border-radius: 10px ;
+}
+
+
+.section {
+/*
+ To have each section float relative to each other:
+*/
+/*
+ display: block ;
+ float: left ;
+ position: relative ;
+ background: white ;
+ border: 1px solid silver ;
+ padding: .5em ;
+*/
+ margin: 0ex .5em 0ex .5em ;
+ padding: 0 ;
+}
+
+
+figure {
+ margin: 5ex auto 5ex auto ;
+ padding: 1ex 1em 1ex 1em ;
+ overflow-x: auto ;
+}
+
+
+/* To automatically center images in figures: */
+/*
+figure img.inlineimage {
+ margin: 0ex auto 0ex auto ;
+ display: block ;
+}
+*/
+
+/* To automatically center minipages in figures: */
+/*
+figure div.minipage, figure div.minipage div.minipage {
+ margin: 1ex auto 1ex auto ;
+ display: block ;
+}
+*/
+
+figure figure { margin: 0pt }
+
+figure div.minipage p { font-size: 85% ; }
+
+figure.subfigure, figure.subtable {
+ display: inline-block ; margin: 3ex 1em 3ex 1em ;
+}
+
+div.figurecaption .minipage { margin:0 ; padding: 0 }
+
+div.minipage figure { border: none ; box-shadow: none ; }
+div.minipage figure.table { margin: 0ex }
+div.minipage div.footnotes { margin: 1ex 2em 0ex 2em }
+
+div.floatrow { text-align: center; }
+
+div.floatrow figure { display: inline-block ; margin: 1ex 2% ; }
+
+div.floatfoot { font-size: .85em ;
+ border-top: 1px solid silver ; line-height: 1.2 ; }
+
+div.figurecaption , .lstlistingtitle {
+ font-size: .85em ;
+ text-align: center ;
+ font-weight: bold ;
+ margin-top: 1ex ;
+ margin-bottom: 1ex ;
+}
+
+figure.subfigure div.figurecaption, figure.subtable div.figurecaption {
+ border-bottom: none ; background: none ;
+}
+
+div.nonfloatcaption {
+ margin: 1ex auto 1ex auto ;
+ font-size: .85em ;
+ text-align: center ;
+ font-weight: bold ;
+}
+
+/* For a \RawCaption inside a minipage inside a figure's floatrow: */
+figure div.floatrow div.minipage div.figurecaption {
+ border: none ;
+ background: none ;
+}
+
+
+/* For packages such as float, rotfloat, and algorithm2e: */
+
+figure.boxed, figure.boxruled {
+ border: 1px solid black ;
+}
+
+figure.ruled {
+ border-top: 1px solid black ;
+ border-bottom: 1px solid black ;
+ border-left: 0px ;
+ border-right: 0px ;
+ border-radius: 0px ;
+ background: none ;
+ box-shadow: none ;
+}
+
+figure.ruled div.figurecaption, figure.boxruled div.figurecaption {
+ border-top: 1px solid silver ;
+ border-bottom: 1px solid silver ;
+}
+
+
+table {
+ margin: 1ex auto 1ex auto ;
+ border-collapse: separate ;
+ border-spacing: 0px ;
+ line-height: 1.3 ;
+ }
+
+tr.hline td {border-top: 1px solid #808080 ; margin-top: 0ex ;
+ margin-bottom: 0ex ; } /* for \hline */
+
+tr.tbrule td {border-top: 1px solid black ; margin-top: 0ex ;
+ margin-bottom: 0ex ; } /* for \toprule, \bottomrule */
+
+td {padding: .5ex .5em .5ex .5em ;}
+
+table td.tdl { text-align: left ; vertical-align: middle ; }
+table td.tdc { text-align: center ; vertical-align: middle ; }
+table td.tdat { text-align: center ; vertical-align: middle ; padding: 0px ; margin: 0px ; }
+table td.tdbang { text-align: center ; vertical-align: middle ; }
+table td.tdr { text-align: right ; vertical-align: middle ; }
+table td.tdp { text-align: left ; vertical-align: bottom ; }
+table td.tdm { text-align: left ; vertical-align: middle ; }
+table td.tdb { text-align: left ; vertical-align: top ; }
+table td.tdP { text-align: center ; vertical-align: bottom ; }
+table td.tdM { text-align: center ; vertical-align: middle ; }
+table td.tdB { text-align: center ; vertical-align: top ; }
+
+table td.tvertbarl { border-left: 1px solid black }
+table td.tvertbarldouble { border-left: 4px double black }
+table td.tvertbarr { border-right: 1px solid black }
+table td.tvertbarrdouble { border-right: 4px double black }
+
+table td.tvertbarldash { border-left: 1px dashed black }
+table td.tvertbarldoubledash { border-left: 2px dashed black }
+table td.tvertbarrdash { border-right: 1px dashed black }
+table td.tvertbarrdoubledash { border-right: 2px dashed black }
+
+
+/* for cmidrules: */
+table td.tdrule {
+ border-top: 1px solid #A0A0A0 ;
+}
+
+table td.tdrulel {
+ border-top-left-radius:.5em ;
+ border-top: 1px solid #A0A0A0 ;
+}
+
+table td.tdruler {
+ border-top-right-radius:.5em ;
+ border-top: 1px solid #A0A0A0 ;
+}
+
+table td.tdrulelr {
+ border-top-left-radius:.5em ;
+ border-top-right-radius:.5em ;
+ border-top: 1px solid #A0A0A0 ;
+}
+
+
+/* Margins of paragraphs inside table cells: */
+td.tdp p , td.tdprule p , td.tdP p , td.tdPrule p { padding-top: 1ex ;
+ padding-bottom: 1ex ; margin: 0ex ; }
+td.tdm p , td.tmbrule p , td.tdM p , td.tdMrule p { padding-top: 1ex ;
+ padding-bottom: 1ex ; margin: 0ex ; }
+td.tdb p , td.tdbrule p , td.tdB p , td.tdBrule p { padding-top: 1ex ;
+ padding-bottom: 1ex ; margin: 0ex ; }
+
+td.tdp , td.tdprule , td.tdP , td.tdPrule
+ { padding: 0ex .5em 0ex .5em ; }
+td.tdm , td.tdmrule , td.tdM , td.tdMrule
+ { padding: 0ex .5em 0ex .5em ; }
+td.tdb , td.tdbrule , td.tdB , td.tdBrule
+ { padding: 0ex .5em 0ex .5em ; }
+
+
+/* table notes: */
+.tnotes {
+ margin: 0ex 5% 1ex 5% ;
+ padding: 0.5ex 1em 0.5ex 1em;
+ font-size:.80em;
+ text-align: left ;
+}
+
+.minipage .tnotes {
+ margin: 0pt ;
+ padding: 0pt ;
+}
+
+.tnotes dl dt p {margin-bottom:0px;}
+
+.tnoteitemheader {margin-right: 1em;}
+
+
+/* for colortbl and cell color */
+div.cellcolor {
+ width: 100% ;
+ padding: .5ex .5em .5ex .5em ;
+ margin: -.5ex -.5em -.5ex -.5em ;
+}
+
+
+/* for bigdelim */
+.ldelim, .rdelim { font-size: 200% }
+
+
+/* center, flushleft, flushright environments */
+div.center{text-align:center;}
+div.center table {margin-left:auto;margin-right:auto;}
+div.flushleft{text-align:left;}
+div.flushleft table {margin-left:0em ; margin-right:auto;}
+div.flushright{text-align:right;}
+div.flushright table {margin-left:auto ; margin-right: 0em ;}
+
+
+/* Fancybox */
+div.Btrivlist table tr td {
+ padding: .2ex 0em ;
+}
+
+
+/* program listing callouts: */
+span.callout {
+ font-family: "DejaVu Sans", "Bitstream Vera Sans",
+ Geneva, Verdana, sans-serif ;
+ border-radius: .5em;
+ background-color:black;
+ color:white;
+ padding:0px .25em 0px .25em;
+ margin: 0 ;
+ font-weight: bold;
+ font-size:.72em ;
+}
+
+div.programlisting pre.verbatim span.callout{
+ font-size: .85em ;
+}
+
+span.verbatim {
+ font-family: "DejaVu Mono", "Bitstream Vera Mono", "Lucida Console",
+ "Nimbus Mono L", "Liberation Mono", "FreeMono", "Andale Mono",
+ "Courier New", monospace;
+}
+
+
+
+div.published
+{
+ text-align: center ;
+ font-variant: normal ;
+ font-style: italic ;
+ font-size: 1em ;
+ margin: 1ex 0em 1ex 0em ;
+}
+
+div.subtitle
+{
+ text-align: center ;
+ font-variant: normal ;
+ font-style: italic ;
+ font-size: 1.25em ;
+ margin: 1ex 0em 1ex 0em ;
+}
+
+div.subtitle p { margin: 1ex ; }
+
+div.author
+{
+ font-variant: normal ;
+ font-style: normal ;
+ font-size: 1em ;
+ margin: 1ex 0em 1ex 0em ;
+}
+
+div.oneauthor {
+ display: inline-block ;
+ margin: 0ex 1em 0ex 1em ;
+}
+
+/*
+div.author table {
+ margin: 1ex auto 0ex auto ;
+ background: none ;
+}
+
+div.author table tbody tr td { padding: .25ex ; }
+*/
+
+span.affiliation {font-size: .85em ; font-variant: small-caps; }
+
+div.titledate {
+ text-align: center ;
+ font-size: .85em ;
+ font-style: italic;
+ margin: 1ex 0em 1ex 0em ;
+}
+
+
+nav.topnavigation{
+ text-align: left ;
+ padding: 0.5ex 1em 0.5ex 1em ;
+/* margin: 2ex 0em 3ex 0em ; */
+ margin: 0 ;
+ border-bottom: 1px solid silver ;
+ border-top: 1px solid silver ;
+ clear:both ;
+}
+
+nav.botnavigation{
+ text-align: left ;
+ padding: 0.5ex 1em 0.5ex 1em ;
+/* margin: 3ex 0em 2ex 0em ; */
+ margin: 0 ;
+ border-top: 1px solid silver ;
+ border-bottom: 1px solid silver ;
+ clear:both ;
+}
+
+
+header {
+ line-height: 1.2 ;
+ font-size: 1em ;
+ border-bottom: 1px solid silver ;
+ margin: 0px ;
+ padding: 2ex 1em 2ex 1em ;
+ text-align:left ;
+}
+
+
+footer {
+ font-size: .85em ;
+ line-height: 1.2 ;
+ margin-top: 1ex ;
+ border-top: 1px solid silver ;
+ padding: 2ex 1em 2ex 1em ;
+ clear:both ;
+ text-align:left ;
+}
+
+
+a.linkhome { font-weight:bold ; font-size: 1em ;}
+
+
+div.lateximagesource { padding: 0px ; margin: 0px ; display: none; }
+
+img.lateximage{
+ padding: 0pt ;
+ margin: 0pt ;
+ box-shadow: none ;
+ border: none ;
+ background: none ;
+ max-width: 100% ;
+ border-radius: 0ex ;
+ border: none ;
+}
+
+
+/* The -1px right margin compensates for the 1px right border. */
+/* Without this -1px margin, the body container appears below instead */
+/* of floating to the side. */
+div.sidetoccontainer {
+ font-family: "DejaVu Serif", "Bitstream Vera Serif",
+ "Lucida Bright", Georgia, serif;
+ float: left ;
+ width: 20%;
+ margin: 0pt -1px 3ex 0pt ;
+ border-right: 1px solid silver;
+ border-bottom: 1px solid silver;
+ background: #FAF7F4 ;
+ font-size:.9em ;
+ border-radius: 0px 0px 20px 0px ;
+}
+
+div.sidetoccontents {
+ overflow-y: auto ;
+ width: 100% ;
+ text-align: left ;
+}
+
+
+nav.sidetoc p {line-height:1.2 ; margin: 1ex .5em 1ex .5em ;
+ text-indent: 0 ; }
+
+nav.sidetoc p a {color:black ; font-size: .7em ;}
+
+div.sidetoctitle {font-size: 1.2em; font-weight:bold; text-align:center;
+ border-bottom: 1px solid silver ; }
+
+nav.sidetoc a:hover {text-decoration: underline ; }
+
+
+
+section.textbody { margin: 0ex 1em 0ex 1em ;}
+
+
+div.multicolsheading { -webkit-column-span: all;
+ -moz-column-span: all; column-span: all; }
+div.multicols { -webkit-columns: 3 380px ;
+ -moz-columns: 3 380px ; columns: 3 380px ; }
+div.multicols p {margin-top: 0ex}
+
+
+/* Used for xfrac and nicefrac: */
+span.numerator {
+ font-size: 60% ;
+ vertical-align: .4em ;
+}
+
+span.denominator {
+ font-size: 60%
+}
+
+
+/* Used for algorithm2e: */
+div.alg2evline{
+ margin-left: 1em ;
+ padding-left: 1em ;
+ border-left: 1px solid black ;
+ border-radius: 0px 0px 0px 1ex ;
+}
+
+div.alg2evsline{
+ margin-left: 1em ;
+ padding-left: 1em ;
+ border-left: 1px solid black ;
+}
+
+div.alg2enoline{
+ margin-left: 1em ;
+ padding-left: 1em ;
+}
+
+span.alg2elinenumber{
+ margin-right: .5em ;
+ font-size: 50% ;
+ color: red ;
+}
+
+
+/* Used for algorithmicx: */
+span.floatright { float: right ; }
+
+
+/* keyfloat and tocdata: */
+.floatnotes {
+ margin: 0ex 5% 0ex 5% ;
+ padding: 0ex 1em 0ex 1em ;
+ font-size:.80em ;
+ text-align: left ;
+}
+
+.authorartist{
+ display:block ;
+ font-size:.70em ;
+ font-style: italic;
+}
+
+nav .authorartist{ display:inline; }
+
+
+
+/* Native LaTeX theorems: */
+
+.theoremcontents { font-style: italic; margin-top: 3ex ; margin-bottom: 3ex ; }
+.theoremlabel { font-style: normal; font-weight: bold ; margin-right: .5em ; }
+
+
+/* theorem, amsthm, and ntheorem packages */
+
+span.theoremheader,
+span.theoremheaderplain,
+span.theoremheaderdefinition,
+span.theoremheaderbreak,
+span.theoremheadermarginbreak,
+span.theoremheaderchangebreak,
+span.theoremheaderchange,
+span.theoremheadermargin
+{
+ font-style:normal ; font-weight: bold ; margin-right: 1em ;
+}
+
+span.amsthmnameplain,
+span.amsthmnamedefinition,
+span.amsthmnumberplain,
+span.amsthmnumberdefinition
+{
+ font-style:normal ; font-weight: bold ;
+}
+
+
+span.amsthmnameremark,
+span.amsthmnumberremark
+{font-style:italic ; font-weight: normal ; }
+
+
+span.amsthmnoteplain,
+span.amsthmnotedefinition
+{font-style:normal ;}
+
+
+span.theoremheaderremark,
+span.theoremheaderproof,
+span.amsthmproofname
+{font-style:italic ; font-weight: normal ; margin-right: 1em ; }
+
+span.theoremheadersc
+{
+ font-style:normal ;
+ font-variant: small-caps ;
+ font-weight: normal ;
+ margin-right: 1em ;
+}
+
+.theoremendmark {float:right}
+
+div.amsthmbodyplain, div.theorembodyplain, div.theorembodynonumberplain,
+div.theorembodybreak, div.theorembodynonumberbreak,
+div.theorembodymarginbreak,
+div.theorembodychangebreak,
+div.theorembodychange,
+div.theorembodymargin
+{
+ font-style:italic;
+ margin-top: 3ex ; margin-bottom: 3ex ;
+}
+
+div.theorembodydefinition, div.theorembodyremark, div.theorembodyproof,
+div.theorembodyplainupright, nonumberplainuprightsc,
+div.amsthmbodydefinition, div.amsthmbodyremark,
+div.amsthmproof
+{
+ font-style: normal ;
+ margin-top: 3ex ; margin-bottom: 3ex ;
+}
+
+span.amsthmnoteremark {}
+
+
+/* For the backnaur package: */
+div.backnaur {
+ display: block ;
+ margin: 2ex 2em 2ex 2em ;
+}
+
+div.backnaur p {
+ margin: .25ex 0ex .25ex 0ex ;
+}
+
+div.backnaurprod {
+ display: inline-block ;
+ min-width: 8em ;
+ text-align:right ;
+}
+
+div.backnaurdesc {
+ display: inline-block ;
+}
+
+
+/* For the notes package: */
+div.notesimportantnote, div.noteswarningnote, div.notesinformationnote {
+ clear: both ;
+ margin: 2ex 2em 2ex 2em ;
+ border: 1px solid silver ;
+}
+
+div.notesicon {
+ float:left ;
+ display: inline-block ;
+ background: gold ;
+ padding: 0ex 1em 0ex 1em ;
+ margin-right: 1em ;
+ font-weight: bold ;
+}
+
+div.notescontents { font-style: italic }
+
+
+/*
+For CSS LaTeX and related logos:
+Based on spacing demonstrated by the metafont package.
+*/
+
+.latexlogofont {
+ font-family: "Linux Libertine O", "Nimbus Roman No 9 L",
+ "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif;
+ font-variant: normal ;
+}
+
+.latexlogo {
+ font-family: "Linux Libertine O", "Nimbus Roman No 9 L",
+ "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif;
+ font-size: 1.1em;
+}
+
+.latexlogosup {
+ text-transform: uppercase;
+ letter-spacing: .03em ;
+ font-size: 0.7em;
+ vertical-align: 0.25em;
+ margin-left: -0.4em;
+ margin-right: -0.15em;
+}
+
+.latexlogosub {
+ text-transform: uppercase;
+ vertical-align: -0.27ex;
+ margin-left: -0.08em;
+ margin-right: -0.07em;
+ font-size: 1em;
+}
+
+.latexlogotwoe {
+ text-transform: none ;
+ font-variant-numeric: oldstyle-nums ;
+}
+
+.latexlogotwoesub {
+ font-style:italic ;
+ vertical-align: -0.27ex;
+ margin-left: -0.11em;
+ margin-right: -0.1em;
+ font-size: 1em;
+}
+
+.xelatexlogo {
+ font-family: "Linux Libertine O", "Nimbus Roman No 9 L",
+ "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif;
+ letter-spacing: .03em ;
+ font-size: 1.1em;
+}
+
+.xelatexlogosub {
+ vertical-align: -0.27ex;
+ margin-left: -0.0667em;
+ margin-right: -.05em;
+ font-size: 1em;
+ letter-spacing: .03em ;
+}
+
+.amslogo {
+ font-family: "TeXGyreChorus","URW Chancery L",
+ "Apple Chancery","ITC Zapf Chancery","Monotype Corsiva",
+ "Linux Libertine O", "Nimbus Roman No 9 L", "FreeSerif",
+ "Hoefler Text", Times, "Times New Roman", serif ;
+ font-style: italic ;
+}
+
+.lyxlogo {
+ font-family: "URW Classico", Optima, "Linux Biolinum O",
+ "DejaVu Sans", "Bitstream Vera Sans", Geneva,
+ Verdana, sans-serif ;
+}
+
+
+/* Only display top and bottom navigation if a small screen: */
+/* Hide the sidetoc if a small screen: */
+nav.topnavigation { display:none; }
+nav.botnavigation { display:none; }
+
+/* Only display the sidetoc's webpage title if a small screen */
+span.sidetocthetitle { display: none }
+
+@media screen and (max-width: 50em) {
+ div.sidetoccontainer {
+ float: none ;
+ width: 100% ;
+ padding: 0 ;
+ border-radius: 0 ;
+ border-bottom: 1px solid black ;
+ border-top: 1px solid black ;
+ box-shadow: none ;
+ }
+ span.sidetocthetitle { display: inline }
+ nav.botnavigation { display:block }
+ div.bodycontainer { width: 100% }
+ .marginpar {
+ max-width: 100%;
+ float: none;
+ display:block ;
+ margin: 1ex 1em 1ex 1em ;
+ }
+}
+
+@media print {
+ body {
+ font-family: "Linux Libertine O",
+ "DejaVu Serif", "Bitstream Vera Serif",
+ "Liberation Serif", "Nimbus Roman No 9 L",
+ "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif;
+ }
+ div.sidetoccontainer { display:none; }
+ nav.topnavigation { display: none; }
+ nav.botnavigation { display: none; }
+ div.bodycontainer { width: 100% }
+}
+
+@media handheld {
+ div.sidetoccontainer { display:none; }
+ nav.topnavigation { display:block }
+ nav.botnavigation { display:block }
+ div.bodycontainer { width: 100% }
+}
+
+@media projection {
+ div.sidetoccontainer { display:none; }
+ nav.topnavigation { display:block }
+ nav.botnavigation { display:block }
+ div.bodycontainer { width: 100% }
+}
+\end{filecontents*}
+% \end{Verbatim}% for syntax highlighting
+\end{LWRwriteconf}
+% \end{macrocode}
+
+
+
+
+% \subsection{\filenm{lwarp_sagebrush.css}}
+
+% \DescribeFile{lwarp_sagebrush.css}
+% An optional \CSS\ which may be used for
+% a semi-modern appearance.
+%
+% If used, this must be present both when compiling the project
+% and also when distributing the \HTML\ files.
+%
+% \changes{v0.65}{2018/12/09}{\filenm{lwarp_sagebrush.css}: Side\TOC to left for improved \cs{marginpar}s.}
+% \changes{v0.73}{2019/06/21}{\filenm{lwarp_formal.css}: Added \cs{book} for \pkg{memoir}.}
+%
+% ^^A *lwarp_sagebrush.css
+%
+% \codeconfig
+% \begin{macrocode}
+\begin{LWRwriteconf}
+\begin{filecontents*}{lwarp_sagebrush.css}
+@import url("lwarp.css") ;
+
+
+A:link {color:#105030 ; text-decoration: none ; }
+A:visited {color:#705030 ; text-shadow:1px 1px 2px #a0a0a0;}
+A:hover {color:#006000 ; text-decoration: underline ; text-shadow:0px 0px 2px #a0a0a0;}
+A:active {color:#00C000 ; text-shadow:1px 1px 2px #a0a0a0;}
+
+
+
+div.book, h1, h2, h3, h4, h5, h6, span.paragraph, span.subparagraph
+{
+ font-family: "URW Classico", Optima, "Linux Biolinum O",
+ "Linux Libertine O", "Liberation Serif",
+ "Nimbus Roman No 9 L", "FreeSerif",
+ "Hoefler Text", Times, "Times New Roman", serif;
+ font-variant: small-caps ;
+ font-weight: normal ;
+ color: #304070 ;
+ text-shadow: 2px 2px 3px #808080;
+}
+
+h1 { /* title of the entire website, used on each page */
+ font-variant: small-caps ;
+ color: #304070 ;
+ text-shadow: 2px 2px 3px #808080;
+ background-color: #F7F7F0 ;
+ background-image: linear-gradient(to bottom, #F7F7F0, #C0C0C4);
+}
+
+h1 {
+ border-bottom: 1px solid #304070;
+/* border-top: 2px solid #304070; */
+}
+
+h2 {
+ border-bottom: 1px solid #304070;
+/* border-top: 2px solid #304070; */
+ background-color: #F7F7F0 ;
+ background-image: linear-gradient(to bottom, #F7F7F0, #DAD0C0);
+}
+
+
+
+div.abstract {
+ background: #f5f5eb ;
+ background-image: linear-gradient(to bottom, #f5f5eb, #C8C8B8);
+
+ border: 1px solid silver;
+ border-radius: 1em ;
+}
+
+div.abstract dl {line-height:1.5;}
+div.abstract dt {color:#304070;}
+
+div.abstracttitle{
+ font-family: "URW Classico", Optima, "Linux Biolinum O",
+ "Linux Libertine O", "Liberation Serif", "Nimbus Roman No 9 L",
+ "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif;
+ font-weight:bold;
+ font-variant: small-caps ;
+ font-size:1.5em;
+ border-bottom: 1px solid silver ;
+ color: #304070 ;
+ text-align: center ;
+ text-shadow: 1px 1px 2px #808080;
+}
+
+span.abstractrunintitle{
+ font-family: "URW Classico", Optima, "Linux Biolinum O",
+ "Linux Libertine O", "Liberation Serif", "Nimbus Roman No 9 L",
+ "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif;
+ font-weight:bold;
+}
+
+
+div.epigraph, div.dictum {
+ background: #f5f5eb ;
+ background-image: linear-gradient(to bottom, #f5f5eb, #C8C8B8);
+
+ border: 1px solid silver ;
+ border-radius: 1ex ;
+ box-shadow: 3px 3px 3px #808080 ;
+}
+
+
+.example {
+ background-color: #f5f5eb ;
+ background-image: linear-gradient(to bottom, #f5f5eb, #C8C8B8);
+
+}
+
+div.exampletitle{
+ font-family: "URW Classico", Optima, "Linux Biolinum O",
+ "Linux Libertine O", "Liberation Serif", "Nimbus Roman No 9 L",
+ "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif;
+ font-weight:bold;
+ font-variant: small-caps ;
+ border-bottom: 1px solid silver ;
+ color: #304070 ;
+ text-align: center ;
+ text-shadow: 1px 1px 2px #808080;
+}
+
+
+.sidebar {
+ background-color: #f5f5eb ;
+ background-image: linear-gradient(to bottom, #f5f5eb, #C8C8B8);
+
+}
+
+div.sidebartitle{
+ font-family: "URW Classico", Optima, "Linux Biolinum O",
+ "Linux Libertine O", "Liberation Serif", "Nimbus Roman No 9 L",
+ "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif;
+ font-weight:bold;
+ font-variant: small-caps ;
+ border-bottom: 1px solid silver ;
+ color: #304070 ;
+ text-align: center ;
+ text-shadow: 1px 1px 2px #808080;
+}
+
+
+.fancyvrblabel {
+ font-family: "URW Classico", Optima, "Linux Biolinum O",
+ "Linux Libertine O", "Liberation Serif", "Nimbus Roman No 9 L",
+ "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif;
+ font-weight:bold;
+ font-variant: small-caps ;
+ font-size: 1.5em ;
+ color: #304070 ;
+ text-align: center ;
+ text-shadow: 1px 1px 2px #808080;
+}
+
+div.minipage {
+ background-color: #eeeee7 ;
+ border: 1px solid silver ;
+ border-radius: 1ex ;
+}
+
+table div.minipage { background: none ; border: none ; }
+
+div.framebox div.minipage {border:none ; background:none}
+
+section.textbody > div.minipage {
+ box-shadow: 3px 3px 3px #808080 ;
+}
+
+div.fboxBlock div.minipage { box-shadow: none ; }
+
+.framed .minipage , .framedleftbar .minipage {
+ border: none ;
+ background: none ;
+ padding: 0ex ;
+ margin: 0ex ;
+}
+
+figure.figure .minipage, div.figurecaption .minipage { border: none; }
+
+div.marginblock div.minipage ,
+div.marginparblock div.minipage
+ { border: none; }
+
+figure , div.marginblock {
+ background-color: #eeeee7 ;
+ border: 1px solid silver ;
+ border-radius: 1ex ;
+ box-shadow: 3px 3px 3px #808080 ;
+}
+
+figure figure {
+ border: 1px solid silver ;
+ margin: 0em ;
+ box-shadow: none ;
+}
+
+/*
+div.figurecaption {
+ border-top: 1px solid silver ;
+ border-bottom: 1px solid silver ;
+ background-color: #e8e8e8 ;
+}
+*/
+
+
+div.table {
+ box-shadow: 3px 3px 3px #808080 ;
+}
+
+/*
+.tnotes {
+ background: #e8e8e8;
+ border: 1px solid silver;
+}
+*/
+
+
+nav.topnavigation{
+ background-color: #b0b8b0 ;
+ background-image: linear-gradient(to bottom,#e0e0e0,#b0b8b0) ;
+}
+
+nav.botnavigation{
+ background-color: #b0b8b0 ;
+ background-image: linear-gradient(to top,#e0e0e0,#b0b8b0) ;
+}
+
+
+
+header{
+ background-color: #F7F7F0 ;
+ background-image: linear-gradient(to top, #F7F7F0, #b0b8b0);
+}
+
+footer{
+ background-color: #F7F7F0 ;
+ background-image: linear-gradient(to bottom, #F7F7F0, #b0b8b0);
+}
+
+
+
+div.sidetoccontainer {
+ background-color: #F7F7F0 ;
+ background-image: linear-gradient(to bottom, #F7F7F0, #C0C0C0);
+ box-shadow: 3px 3px 3px #808080 ;
+ }
+
+div.sidetoctitle {color: #304070 ; }
+
+nav.sidetoc a:hover {
+ color:#006000 ;
+ text-decoration: none ;
+ text-shadow:0px 0px 2px #a0a0a0;
+}
+
+
+@media screen and (max-width: 45em) {
+ div.sidetoccontainer { border-radius: 0 ; }
+}
+
+
+\end{filecontents*}
+% \end{Verbatim}% for syntax highlighting
+\end{LWRwriteconf}
+% \end{macrocode}
+
+
+
+
+% \subsection{\filenm{lwarp_formal.css}}
+
+% \DescribeFile{lwarp_formal.css}
+% An optional \CSS\ which may be used for
+% a more formal appearance.
+%
+% If used, this must be present both when compiling the project
+% and also when distributing the \HTML\ files.
+%
+% \changes{v0.62}{2018/11/10}{\filenm{lwarp_formal.css}: Fix: Font for verse.}
+% \changes{v0.65}{2018/12/09}{\filenm{lwarp_formal.css}: Side\TOC to left for improved \cs{marginpar}s.}
+% \changes{v0.66}{2019/01/02}{\filenm{lwarp_formal.css}: Improved \CSS\ for table notes.}
+% \changes{v0.73}{2019/06/21}{\filenm{lwarp_formal.css}: Added \cs{book} for \pkg{memoir}.}
+%
+% ^^A *lwarp_formal.css
+%
+% \codeconfig
+% \begin{macrocode}
+\begin{LWRwriteconf}
+\begin{filecontents*}{lwarp_formal.css}
+@import url("lwarp.css") ;
+
+
+
+A:link {color:#802020 ; text-decoration:none; }
+A:visited {color:#802020 ; text-shadow:none ;}
+A:hover {color:#400000 ; text-shadow:none ;}
+A:active {color:#C00000 ; text-shadow:none ;}
+
+
+body {
+ font-family: "Linux Libertine O", "Hoefler Text", "Garamond",
+ "Bembo", "Janson", "TeX Gyre Pagella", "Palatino",
+ "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times,
+ "Times New Roman", serif;
+ background: #fffcf5;
+}
+
+span.textrm {
+ font-family: "Linux Libertine O", "Hoefler Text", "Garamond",
+ "Bembo", "Janson", "TeX Gyre Pagella", "Palatino",
+ "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times,
+ "Times New Roman", serif;
+}
+
+span.textsf {
+ font-family: "DejaVu Sans", "Bitstream Vera Sans",
+ Geneva, Verdana, sans-serif ;
+}
+
+
+
+div.book, h1, h2, h3, h4, h5, h6, span.paragraph, span.subparagraph
+{
+ font-family: "Linux Libertine O", "Hoefler Text", "Garamond",
+ "Bembo", "Janson", "TeX Gyre Pagella", "Palatino",
+ "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times,
+ "Times New Roman", serif;
+ color: #800000 ;
+ text-shadow: none ;
+}
+
+h1, h2 {
+ background-color: #fffcf5 ;
+ background-image: none ;
+ border-bottom: 1px solid #808080;
+/* border-top: 2px solid #808080; */
+}
+
+div.abstracttitle {
+ font-family: "Linux Libertine O", "Hoefler Text", "Garamond",
+ "Bembo", "Janson", "TeX Gyre Pagella", "Palatino",
+ "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times,
+ "Times New Roman", serif;
+ color: black ;
+ text-shadow: none ;
+}
+
+span.abstractrunintitle {
+ font-family: "Linux Libertine O", "Hoefler Text", "Garamond",
+ "Bembo", "Janson", "TeX Gyre Pagella", "Palatino",
+ "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times,
+ "Times New Roman", serif;
+ color: black ;
+ text-shadow: none ;
+}
+
+div.abstract { font-size: 100% }
+
+.sidebar {
+ background: #fffcf5;
+ background-image: none ;
+ margin: 2em 5% 2em 5%;
+ padding: 0.5em 1em;
+ border: none ;
+ border-top : 1px solid silver;
+ border-bottom : 1px solid silver;
+ font-size: 90% ;
+}
+
+div.sidebartitle{
+ font-family: "Linux Libertine O", "Hoefler Text", "Garamond",
+ "Bembo", "Janson", "TeX Gyre Pagella", "Palatino",
+ "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times,
+ "Times New Roman", serif;
+ color: #800000 ;
+ text-shadow: none ;
+ border: none ;
+}
+
+.example {
+ background: #fffcf5;
+ background-image: none ;
+ margin: 2em 5% 2em 5%;
+ padding: 0.5em 1em;
+ border: none ;
+ border-top : 1px solid silver;
+ border-bottom : 1px solid silver;
+}
+
+div.exampletitle{
+ font-family: "Linux Libertine O", "Hoefler Text", "Garamond",
+ "Bembo", "Janson", "TeX Gyre Pagella", "Palatino",
+ "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times,
+ "Times New Roman", serif;
+ color: #800000 ;
+ text-shadow: none ;
+ border: none ;
+}
+
+div.fancyvrblabel{
+ font-family: "Linux Libertine O", "Hoefler Text", "Garamond",
+ "Bembo", "Janson", "TeX Gyre Pagella", "Palatino",
+ "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times,
+ "Times New Roman", serif;
+ color: #800000 ;
+ text-shadow: none ;
+ border: none ;
+}
+
+
+
+figure {
+ margin: 5ex 5% 5ex 5% ;
+ padding: 1ex 1em 1ex 1em ;
+ background-color: #fffcf5 ;
+ overflow-x: auto ;
+ border: none ;
+/* border-top: 1px solid silver; */
+/* border-bottom: 1px solid silver; */
+}
+
+
+div.figurecaption , .lstlisting {
+ border: none ;
+/* border-top: 1px solid silver ; */
+/* border-bottom: 1px solid silver ; */
+ background-color: #fffcf5 ;
+}
+
+.tnotes {
+ background: #fffcf5 ;
+ border-top: 1px solid silver ;
+ border-bottom: 1px solid silver ;
+}
+
+.theorem {
+ background: none ;
+}
+
+.minipage {
+ background-color: #fffcf5 ;
+ border: none ;
+}
+
+div.floatrow figure { border: none ; }
+
+figure figure { border: none ; }
+
+
+nav.toc, nav.lof, nav.lot, nav.lol {
+ font-family: "Linux Libertine O", "Hoefler Text", "Garamond",
+ "Bembo", "Janson", "TeX Gyre Pagella", "Palatino",
+ "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times,
+ "Times New Roman", serif;
+}
+
+div.sidetoccontainer {
+ font-family: "Linux Libertine O", "Hoefler Text", "Garamond",
+ "Bembo", "Janson", "TeX Gyre Pagella", "Palatino",
+ "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times,
+ "Times New Roman", serif;
+ background-image: linear-gradient(to bottom, #fffcf5, #C0C0C0);
+}
+
+div.sidetoctitle{
+ color: #800000 ;
+}
+
+header{
+ background-color: #e0e0e0 ;
+ background-image: linear-gradient(to top, #fffcf5, #b0b0b0);
+ text-align:center ;
+}
+
+footer{
+ background-color: #e0e0e0 ;
+ background-image: linear-gradient(to bottom, #fffcf5, #b0b0b0);
+ padding: 2ex 1em 2ex 1em ;
+ text-align:left ;
+}
+
+nav.botnavigation {
+ background: #dedcd5 ;
+ border-top: 1px solid black ;
+}
+\end{filecontents*}
+% \end{Verbatim}% for syntax highlighting
+\end{LWRwriteconf}
+% \end{macrocode}
+
+
+
+% \subsection{\filenm{sample_project.css}}
+
+% \DescribeFile{sample_project.css}
+% The project-specific \CSS\ file. Use with \cs{CSSFilename}.
+%
+% If used, this must be present both when compiling the project
+% and also when distributing the \HTML\ files.
+%
+% ^^A *sample_project.css
+%
+% \codeconfig
+% \begin{macrocode}
+\begin{LWRwriteconf}
+\begin{filecontents*}{sample_project.css}
+/* ( --- Start of project.css --- ) */
+/* ( --- A sample project-specific CSS file for lwarp --- ) */
+
+/* Uncomment one of the following: */
+@import url("lwarp.css") ;
+/* @import url("lwarp_formal.css") ; */
+/* @import url("lwarp_sagebrush.css") ; */
+
+/* Project-specific CSS setting follow here. */
+/* . . . */
+
+/* ( --- End of project.css --- ) */
+\end{filecontents*}
+% \end{Verbatim}% for syntax highlighting
+\end{LWRwriteconf}
+% \end{macrocode}
+
+
+% \subsection{\filenm{lwarp.ist}}
+
+% \DescribeFile{lwarp.ist}
+% Used to modify the index for \pkg{lwarp}.
+%
+% This must be present when compiling the project,
+% but does not need to be present when distributing
+% the resulting \HTML\ files.
+%
+% The page compositor line is for \pkg{memoir}'s \cs{specialindex}.
+%
+% \changes{v0.58}{2018/06/17}{\filenm{lwarp_html.ist}: Added.}
+%
+% ^^A *lwarp.ist
+%
+% \codeconfig
+% \begin{macrocode}
+\begin{LWRwriteconf}
+\begin{filecontents*}{lwarp.ist}
+preamble
+"\\begin{theindex}
+ \\providecommand*\\lettergroupDefault[1]{}
+ \\providecommand*\\lettergroup[1]{%
+ \\par\\textbf{#1}\\par
+ \\nopagebreak
+ }
+"
+headings_flag 1
+heading_prefix "
+ \\lettergroup{"
+heading_suffix "}"
+delim_0 ", \\hyperindexref{"
+delim_1 ", \\hyperindexref{"
+delim_2 ", \\hyperindexref{"
+delim_n "}, \\hyperindexref{"
+delim_r "} -- \\hyperindexref{"
+delim_t "}"
+page_compositor "."
+\end{filecontents*}
+% \end{Verbatim}% for syntax highlighting
+\end{LWRwriteconf}
+% \end{macrocode}
+
+
+
+% \subsection{\filenm{lwarp.xdy}}
+
+% \DescribeFile{lwarp.xdy}
+% Used to modify the index for \pkg{lwarp}.
+%
+% This must be present when compiling the project,
+% but does not need to be present when distributing
+% the resulting \HTML\ files.
+%
+% See: \\
+% \href{https://tex.stackexchange.com/questions/80300/how-can-i-convince-hyperref-and-xindy-to-play-together-nicely}
+% {https://tex.stackexchange.com/questions/80300/ \\ \fqquad\ how-can-i-convince-hyperref-and-xindy-to-play-together-nicely}
+%
+% \changes{v0.30}{2017/04/28}{File: \filenm{lwarp_html.xdy} renamed to \filenm{lwarp.xdy}.}
+% \changes{v0.30}{2017/04/26}{Fix: \filenm{lwarp.xdy} only written in print mode.}
+% \changes{v0.58}{2018/06/19}{\filenm{lwarp.xdy}: Requires \filenm{makeindex.xdy}.}
+% \changes{v0.58}{2018/06/21}{\filenm{lwarp.xdy}: Supports bold, italic.}
+%
+% ^^A *lwarp.xdy
+%
+% \codeconfig
+% \begin{macrocode}
+\begin{LWRwriteconf}
+\begin{filecontents*}{lwarp.xdy}
+(require "tex/inputenc/latin.xdy")
+(merge-rule "\\PS *" "Postscript")
+(require "texindy.xdy")
+(require "page-ranges.xdy")
+(require "book-order.xdy")
+(define-location-class "arabic-page-numbers"
+ ("arabic-numbers") :min-range-length 1)
+(require "makeindex.xdy")
+(define-attributes (("hyperindexref")))
+(markup-locref :open "\hyperindexref{" :close "}")
+(markup-locref :open "\hyperindexref{" :close "}" :attr "hyperpage")
+(markup-locref :open "\textbf{\hyperindexref{" :close "}}" :attr "textbf")
+(markup-locref :open "\textit{\hyperindexref{" :close "}}" :attr "textit")
+(define-location-class-order ("roman-page-numbers"
+ "arabic-page-numbers"
+ "alpha-page-numbers"
+ "Roman-page-numbers"
+ "Alpha-page-numbers"
+ "see"
+ "seealso"))
+\end{filecontents*}
+% \end{Verbatim}% for syntax highlighting
+\end{LWRwriteconf}
+% \end{macrocode}
+
+
+% \subsection{\filenm{lwarp_one_limage.cmd}}
+%
+% \DescribeFile{lwarp_one_limage.cmd}
+% Used by \pkg{lwarp} to help make \env{lateximage}s when using \brand{Windows}.
+%
+% This must be present when compiling the project,
+% but does not need to be present when distributing
+% the resulting \HTML\ files.
+%
+% The arguments are each of the three fields from \filenm{<project>-images.txt},
+% and also the base name of the source file.
+%
+% \prog{MiKTeX} does not allow file \filenm{lwarp_one_limage.cmd} to be
+% created directly by \prog{lwarpmk}, so \filenm{lwarp_one_limage.txt} is created instead,
+% then copied to \filenm{lwarp_one_limage.cmd} by \prog{lwarpmk}.
+% This occurs each time \prog{lwarpmk} used to create \env{lateximage}s.
+%
+% \changes{v0.50}{2018/02/27}{\filenm{lwarp_one_limage.txt}: Added.}
+% \changes{v0.51}{2018/03/16}{\filenm{lwarp_one_limage.txt}: \prog{pdftocairo} \optn{-noshrink} added.}
+% \changes{v0.66}{2019/01/30}{\filenm{lwarp_one_limage.txt}: Image directory and prefix.}
+%
+% ^^A *lwarp_one_limage.txt
+%
+% \codeconfig
+% \begin{macrocode}
+\begin{LWRwriteconf}
+\immediate\openout\LWR@quickfile=lwarp_one_limage.txt
+\immediate\write\LWR@quickfile{%
+ pdfseparate -f \LWRpercent 1 -l \LWRpercent 1 \LWRpercent 4_html.pdf %
+ \LWR@ImagesDirectory\OSPathSymbol lateximagetemp-\LWRpercent\LWRpercent d.pdf%
+}
+\immediate\write\LWR@quickfile{%
+ pdfcrop --hires \LWR@ImagesDirectory\OSPathSymbol lateximagetemp-\LWRpercent 1.pdf %
+ \LWR@ImagesDirectory\OSPathSymbol\LWRpercent 3.pdf%
+}
+\immediate\write\LWR@quickfile{%
+ pdftocairo -svg -noshrink \LWR@ImagesDirectory\OSPathSymbol\LWRpercent 3.pdf %
+ \LWR@ImagesDirectory\OSPathSymbol\LWRpercent 3.svg%
+}
+\immediate\write\LWR@quickfile{%
+ del \LWR@ImagesDirectory\OSPathSymbol\LWRpercent 3.pdf%
+}
+\immediate\write\LWR@quickfile{%
+ del \LWR@ImagesDirectory\OSPathSymbol lateximagetemp-\LWRpercent 1.pdf%
+}
+\immediate\write\LWR@quickfile{exit}
+\immediate\closeout\LWR@quickfile
+\end{LWRwriteconf}
+% \end{macrocode}
+
+
+
+% \subsection{\filenm{lwarp_mathjax.txt}}
+
+% \DescribeFile{lwarp_mathjax.txt}
+% The default MathJax script used by \pkg{lwarp} when using \brand{MathJax}.
+% A recent version of MathJax is used, as served by the recommended repository.
+% Adjustments are made to allow \LaTeX\ to control the equation tags.
+%
+% \cs{MathJaxFilename} determines which script file is copied into the \HTML\ pages,
+% and defaults to \filenm{lwarp_mathjax.txt}.
+% The script files must be present when compiling the project,
+% but do not need to be present when distributing
+% the resulting \HTML\ files.
+%
+% \gindex{MathJax=\brand{MathJax}>custom script}
+% \trouble{MathJax=\brand{MathJax}>custom script}
+% To generate a custom script, such as to use a local repository,
+% \margintag{custom script}
+% copy \filenm{lwarp_mathjax.txt} to a new file,
+% make changes while keeping \pkg{lwarp}'s adjustments for equation numbering,
+% and use \cs{MathJaxFilename} to select new filename.
+%
+% \changes{v0.28}{2017/04/11}{File: \filenm{lwarp_mathjax.txt}: Updated \protect\acro{CDN} repository.}
+% \changes{v0.30}{2017/04/26}{Fix: \filenm{lwarp_mathjax.txt}: Only written in print mode.}
+% \changes{v0.34}{2017/07/27}{File: \filenm{lwarp_mathjax.txt}: Version change.}
+% \changes{v0.42}{2017/10/16}{File: \filenm{lwarp_mathjax.txt}: Updated \pkg{siunitx} script.}
+% \changes{v0.45}{2017/12/21}{File: \filenm{lwarp_mathjax.txt}: Allow \brand{MathJax} inside \env{tabbing}.}
+% \changes{v0.45}{2018/01/23}{File: \filenm{lwarp_mathjax.txt}: Allow \brand{MathJax} inside \env{verse}.}
+% \changes{v0.59}{2018/07/13}{File: \filenm{lwarp_mathjax.txt}: Updated to MathJax v2.7.4.}
+% \changes{v0.59}{2018/07/16}{File: \filenm{lwarp_mathjax.txt}: Fix: Removed chapter number from tagged non-numeric MathJax equations.}
+% \changes{v0.62}{2018/11/05}{File: \filenm{lwarp_mathjax.txt}: Removed inoperable \pkg{siunitx} extension.}
+% \changes{v0.70}{2019/03/24}{File: \filenm{lwarp_mathjax.txt}: Updated to MathJax v2.7.5.}
+% \changes{v0.70}{2019/03/24}{File: \filenm{lwarp_mathjax.txt}: Loads \filenm{autoload-all.js} extension.}
+%
+% ^^A *lwarp_mathjax.txt
+%
+% \codeconfig
+% \begin{macrocode}
+\begin{LWRwriteconf}
+\begin{filecontents*}{lwarp_mathjax.txt}
+<!-- https://groups.google.com/forum/#!topic/
+ mathjax-users/jUtewUcE2bY -->
+<script type="text/x-mathjax-config">
+MathJax.Hub.Register.StartupHook("TeX AMSmath Ready",function () {
+ var seteqsectionDefault = {name: "", num: 0};
+ var seteqsections = {}, seteqsection = seteqsectionDefault;
+ var TEX = MathJax.InputJax.TeX, PARSE = TEX.Parse;
+ var AMS = MathJax.Extension["TeX/AMSmath"];
+ TEX.Definitions.Add({
+ macros: {
+ seteqsection: "mySection",
+ seteqnumber: "mySetEqNumber"
+ }
+ });
+
+ PARSE.Augment({
+ mySection: function (name) {
+ seteqsection.num = AMS.number;
+ var n = this.GetArgument(name);
+ if (n === "") {
+ seteqsection = seteqsectionDefault;
+ } else {
+ if (!seteqsections["_"+n])
+ seteqsections["_"+n] = {name:n, num:0};
+ seteqsection = seteqsections["_"+n];
+ }
+ AMS.number = seteqsection.num;
+ },
+ mySetEqNumber: function (name) {
+ var n = this.GetArgument(name);
+ if (!n || !n.match(/^ *[0-9]+ *$/))
+ n = "";
+ else
+ n = parseInt(n)-1;
+ <!-- $ syntax highlighting -->
+ if (n === "" || n < 1)
+ TEX.Error
+ ("Argument to "+name+" should be a positive integer");
+ AMS.number = n;
+ }
+ });
+ MathJax.Hub.Config({
+ TeX: {
+ equationNumbers: {
+ formatTag: function (n) {
+ <!-- if not numeric, don't include the chapter -->
+ if (!n.match(/^ *[0-9]+ *$/ ))
+ <!-- $ syntax highlighting -->
+ return "("+(n).replace(/^\./,"")+")" ;
+ else
+ return "("+(seteqsection.name+"."+n).replace(/^\./,"")+")" ;
+ },
+ formatID: function (n) {
+ n = (seteqsection.name+'.'+n).replace
+ (/[:"'<>&]/g,"").replace(/^\./,"");
+ return 'mjx-eqn-' + n;
+ }
+ }
+ }
+ });
+});
+</script>
+
+<!-- http://docs.mathjax.org/en/latest/options/ThirdParty.html -->
+<script type="text/x-mathjax-config">
+ MathJax.Ajax.config.path["Contrib"] =
+ "https://cdn.mathjax.org/mathjax/contrib";
+</script>
+
+<script type="text/x-mathjax-config">
+MathJax.Hub.Config({
+ TeX: {
+ extensions: ["autoload-all.js"] ,
+ equationNumbers: {
+ autoNumber: "AMS"
+ }
+ }
+});
+</script>
+
+<!-- Alternative CDN provider: -->
+<script type="text/javascript" async
+src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS_HTML-full">
+</script>
+
+<!-- No longer supported after April 30, 2017: -->
+<!--
+<script
+ src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full">
+</script>
+-->
+
+\end{filecontents*}
+% \end{Verbatim}% for syntax highlighting
+\end{LWRwriteconf}
+% \end{macrocode}
+
+% ^^A A possible addition for siuntix:
+% ^^A <!-- https://github.com/burnpanck/MathJax-siunitx -->
+% ^^A
+% ^^A <script type="text/x-mathjax-config">
+% ^^A MathJax.Hub.Config({
+% ^^A extensions: ["tex2jax.js","[siunitx]/siunitx.js"],
+% ^^A jax: ["input/TeX","output/HTML-CSS"],
+% ^^A tex2jax: {
+% ^^A inlineMath: [["$","$"],["\\(","\\)"]] ,
+% ^^A processClass: "tabbing|verse"
+% ^^A },
+% ^^A TeX: {extensions: ["AMSmath.js","AMSsymbols.js", "sinuitx.js"]}
+% ^^A });
+% ^^A MathJax.Ajax.config.path['siunitx'] = 'http://rawgit.com/burnpanck/MathJax-siunitx/master/';
+% ^^A </script>
+
+
+
+% ^^A \subsection{\filenm{lwarp_KaTeX.txt}}
+
+% ^^A \DescribeFile{lwarp_KaTeX.txt}
+% ^^A Used by \pkg{lwarp} when using Ka\TeX.
+%
+% ^^A This must be present when compiling the project,
+% ^^A but does not need to be present when distributing
+% ^^A the resulting \HTML\ files.
+%
+% ^^A \changes{v0.59}{2018/11/03}{File: \filenm{lwarp_KaTeX.txt}: Added.}
+%
+%
+% ^^A ^^A *lwarp_KaTeX.txt
+%
+% ^^A \codeconfig
+% ^^A \begin{macrocode}
+% ^^A \begin{LWRwriteconf}
+% ^^A \begin{filecontents*}{lwarp_KaTeX.txt}
+% ^^A <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.10.0/dist/katex.min.css" integrity="sha384-9eLZqc9ds8eNjO3TmqPeYcDj8n+Qfa4nuSiGYa6DjLNcv9BtN69ZIulL9+8CqC9Y" crossorigin="anonymous">
+% ^^A <script defer src="https://cdn.jsdelivr.net/npm/katex@0.10.0/dist/katex.min.js" integrity="sha384-K3vbOmF2BtaVai+Qk37uypf7VrgBubhQreNQe9aGsz9lB63dIFiQVlJbr92dw2Lx" crossorigin="anonymous"></script>
+% ^^A <script defer src="https://cdn.jsdelivr.net/npm/katex@0.10.0/dist/contrib/auto-render.min.js" integrity="sha384-kmZOZB5ObwgQnS/DuDg6TScgOiWWBiVt0plIRkZCmE6rDZGrEOQeHM5PcHi+nyqe" crossorigin="anonymous"
+% ^^A onload="renderMathInElement(document.body);"></script>
+% ^^A \end{filecontents*}
+% ^^A % \end{Verbatim}% for syntax highlighting
+% ^^A \end{LWRwriteconf}
+% ^^A \end{macrocode}
+
+
+
+% \subsection{\filenm{lwarpmk.lua} — \optn{lwarpmk} option}
+
+% \DescribeOption{lwarpmk} Creates a local copy of \prog{lwarpmk}.
+%
+% \DescribeProgram{lwarpmk} Command-line utility to process \pkg{lwarp} files and images.
+%
+% \env{lateximage}s and \SVG\ math images are generated using
+% \margintag{parallel processing}
+% \gindex{image>processing}
+% \gindex{lateximage>processing}
+% \gindex{SVG>image processing}
+% multiple processes in parallel.
+% For \brand{Unix} and \brand{Linux}, every 32 images the |wait| command is
+% issued to wait for the previous batch of images to finish processing before
+% starting a new batch.
+% For \brand{Windows}, every 32 images one task is dispatched with
+% \begin{sourcedisplay}
+% START /B /WAIT /BELOWNORMAL
+% \end{sourcedisplay}
+% which causes the operating system to wait until this lesser-priority tasks finishes,
+% hopefully also waiting for the normal priority tasks which were already in
+% progress to also complete. Afterwards, the next batch of images is started.
+%
+% \changes{v0.21}{2017/02/11}{\prog{lwarpmk}: Fix: \cmds{lwarpmk again} for \brand{Windows}.}
+% \changes{v0.21}{2017/02/22}{\prog{lwarpmk}: Fix: \cmds{lwarpmk limages} for \brand{Windows}.}
+% \changes{v0.21}{2017/02/22}{\prog{lwarpmk}: Fix: \prog{lwarpmk} uses \filenm{lateximages} text file instead of shell script.}
+% \changes{v0.28}{2017/04/14}{\prog{lwarpmk}: Add: \cmds{printglossary} and \cmds{htmlglossary} commands.}
+% \changes{v0.29}{2017/04/15}{\prog{lwarpmk}: Add: \optn{language} option for config files.}
+% \changes{v0.30}{2017/04/22}{\prog{lwarpmk}: \optn{language} now used for both index and glossary generation.}
+% \changes{v0.30}{2017/04/22}{\prog{lwarpmk}: Fix: \prog{xindy} now used for print index generation with \prog{latexmk}.}
+% \changes{v0.30}{2017/04/28}{\prog{lwarpmk}: Fix: \prog{xindy} and \prog{texindy}
+% adjusted for \prog{pdflatex}, \prog{xelatex} and \prog{lualatex}.}
+% \changes{v0.30}{2017/04/28}{\prog{lwarpmk}: Add: \optn{xdyfile} configuration option.}
+% \changes{v0.32}{2017/06/08}{\prog{lwarpmk}: Fix: \cmds{io.lines()} changed to \cmds{file:lines()}
+% due to \prog{luatex} changes.}
+% \changes{v0.37}{2017/08/19}{\prog{lwarpmk}: Removes additional \HTML\ \filenm{aux} files.}
+% \changes{v0.38}{2017/08/24}{\prog{lwarpmk}: Added \cmds{print1} and \cmds{html1} actions.}
+% \changes{v0.47}{2018/01/24}{\prog{lwarpmk}: \prog{pdfcrop}: Removed \optn{hires} option for improved crop accuracy.}
+% \changes{v0.50}{2018/02/22}{\prog{lwarpmk}: MD5 hash avoids duplicate \SVG\ math.}
+% \changes{v0.50}{2018/02/27}{\prog{lwarpmk}: Multiprocess support making lateximages.}
+% \changes{v0.50}{2018/02/28}{\prog{lwarpmk}: Error if \filenm{lateximages.txt} does not exist.}
+% \changes{v0.50}{2018/02/28}{\prog{lwarpmk}: Error if \filenm{lwarpmk.conf} points to \pkg{lwarp}.}
+% \changes{v0.50}{2018/02/28}{\prog{lwarpmk}: Improved error messages.}
+% \changes{v0.51}{2018/03/14}{\prog{lwarpmk}: \prog{pdfcrop}: Restored \optn{hires} option.}
+% \changes{v0.51}{2018/03/16}{\prog{lwarpmk}: \prog{pdftocairo} \optn{-noshrink} added.}
+% \changes{v0.52}{2018/03/31}{\prog{lwarpmk}: Fix: Memory overflow when spawning tasks.}
+% \changes{v0.52}{2018/04/01}{\prog{lwarpmk}: Fix: Skip image generation if from page 0.}
+% \changes{v0.53}{2018/04/01}{\prog{lwarpmk}: Added warning for corrupted images.}
+% \changes{v0.53}{2018/04/01}{\prog{lwarpmk}: Added \cmds{lwarpmk cleanlimages}.}
+% \changes{v0.54}{2018/04/06}{\prog{lwarpmk}: Changed \optn{xdyfile} to \optn{xindystyle}.}
+% \changes{v0.54}{2018/04/06}{\prog{lwarpmk}: Changed \optn{language} to \optn{xindylanguage}.}
+% \changes{v0.54}{2018/04/06}{\prog{lwarpmk}: Added \optn{xindycodepage}.}
+% \changes{v0.54}{2018/04/06}{\prog{lwarpmk}: Added \optn{pdftotextenc}.}
+% \changes{v0.54}{2018/04/09}{\prog{lwarpmk}: Increased prominence for error for an unknown command.}
+% \changes{v0.54}{2018/04/11}{\prog{lwarpmk}: Verifies image references before \progcode{lwarpmk limages}.}
+% \changes{v0.54}{2018/04/11}{\prog{lwarpmk}: Verifies \HTML\ version exists before \progcode{lwarpmk limages}.}
+% \changes{v0.54}{2018/04/19}{\prog{lwarpmk}: Improved error if configuration file does not exist.}
+% \changes{v0.56}{2018/04/29}{\prog{lwarpmk}: Added \progcode{lwarpmk pdftosvg}.}
+% \changes{v0.56}{2018/05/11}{\prog{lwarpmk}: Supports \texttt{-\/-shell-escape}.}
+% \changes{v0.57}{2018/05/20}{\prog{lwarpmk}: Improved code factoring.}
+% \changes{v0.57}{2018/05/20}{\prog{lwarpmk}: Improved error handling.}
+% \changes{v0.58}{2018/06/14}{\prog{lwarpmk}: Added \texttt{-p} option for project name.}
+% \changes{v0.58}{2018/06/14}{\prog{lwarpmk}: Added optional list of names for \cmds{lwarpmk printindex} and /cmds{lwarpmk htmlindex}.}
+% \changes{v0.58}{2018/06/18}{\prog{lwarpmk}: Glossary generation now uses \prog{makeglossaries}.}
+% \changes{v0.58}{2018/06/20}{\prog{lwarpmk}: Added \optn{makeindex} and \optn{xindy} options.}
+% \changes{v0.58}{2018/06/20}{\prog{lwarpmk}: \cmds{lwarpmk clean} removes all \filenm{*.ind} and \filenm{*.idx} files.}
+% \changes{v0.59}{2018/07/29}{\prog{lwarpmk}: Warning if operating system changed.}
+% \changes{v0.59}{2018/07/29}{\prog{lwarpmk}: Error if \filenm{lwarpmk.conf} format changed.}
+% \changes{v0.59}{2018/08/05}{\prog{lwarpmk}: Double insead of single-dashed \optn{-\/-shell-escape} option.}
+% \changes{v0.59}{2018/08/21}{\prog{lwarpmk}: Consolidated compiling options into \optn{printlatexcmd} and \optn{HTMLlatexcmd}.}
+% \changes{v0.59}{2018/09/06}{\prog{lwarpmk}: Added \cmds{lwarpmk epstopdf}.}
+% \changes{v0.66}{2019/01/27}{\prog{lwarpmk}: Added \optn{ImagesDirectory} and \optn{ImagesName}.}
+% \changes{v0.66}{2019/01/30}{\prog{lwarpmk}: Fix for \cmds{cleanlimages}.}%
+% \changes{v0.68}{2019/03/02}{\prog{lwarpmk}: Improved error handling if incomplete compile.}%
+% \changes{v0.71}{2019/04/11}{\prog{lwarpmk}: If wrong \filenm{lwarpmk.conf} version,
+% or wrong OS,
+% displays the print command to recompile.}%
+%
+% The following is only generated if the \optn{lwarpmk} option
+% was given to \pkg{lwarp}.
+% \begin{macrocode}
+\begin{LWR@createlwarpmk}
+% \end{macrocode}
+%
+% ^^A *lwarpmk.lua
+% \begin{macrocode}
+\begin{filecontents*}{lwarpmk.lua}
+#!/usr/bin/env texlua
+
+-- Copyright 2016-2019 Brian Dunn
+
+
+printversion = "v0.73"
+requiredconfversion = "2" -- also at *lwarpmk.conf
+
+function printhelp ()
+print ("lwarpmk: Use lwarpmk -h or lwarpmk --help for help.") ;
+end
+
+
+function printusage ()
+--
+-- Print the usage of the lwarpmk command:
+--
+print ( [[
+
+lwarpmk print [-p project]: Compile the print version if necessary.
+lwarpmk print1 [-p project]: Forced single compile of the print version.
+lwarpmk printindex [-p project]: Process print indexes.
+lwarpmk printglossary [-p project]: Process the glossary for the print version.
+lwarpmk html [-p project]: Compile the HTML version if necessary.
+lwarpmk html1 [-p project]: Forced single compile of the HTML version.
+lwarpmk htmlindex [-p project]: Process HTML indexes.
+lwarpmk htmlglossary [-p project]: Process the glossary for the html version.
+lwarpmk again [-p project]: Touch the source code to trigger recompiles.
+lwarpmk limages [-p project]: Process the "lateximages" created by lwarp.sty.
+lwarpmk pdftohtml [-p project]:
+ For use with latexmk or a Makefile:
+ Converts project_html.pdf to project_html.html and individual HTML files.
+ Finishes the HTML conversion even if there was a compile error.
+lwarpmk pdftosvg <list of file names>: Converts each PDF file to SVG.
+lwarpmk epstopdf <list of file names>: Converts each EPS file to PDF.
+lwarpmk clean [-p project]: Remove *.aux, *.toc, *.lof/t,
+ *.idx, *.ind, *.log, *_html_inc.*, .gl*
+lwarpmk cleanall [-p project]: Remove auxiliary files, project.pdf, *.html
+lwarpmk cleanlimages: Removes all images from the "lateximages" directory.
+lwarpmk -h: Print this help message.
+lwarpmk --help: Print this help message.
+
+]] )
+-- printconf ()
+end
+
+
+function splitfile (destfile,sourcefile)
+--
+-- Split one large sourcefile into a number of files,
+-- starting with destfile.
+-- The file is split at each occurance of <!--|Start file|newfilename|*
+--
+print ("lwarpmk: Splitting " .. sourcefile .. " into " .. destfile) ;
+local sfile = io.open(sourcefile)
+io.output(destfile)
+for line in sfile:lines() do
+i,j,copen,cstart,newfilename = string.find (line,"(.*)|(.*)|(.*)|") ;
+if ( (i~= nil) and (copen == "<!--") and (cstart == "Start file")) then
+ -- split the file
+ io.output(newfilename) ;
+else
+ -- not a splitpoint
+ io.write (line .. "\n") ;
+end
+end -- do
+io.close(sfile)
+end -- function
+
+
+function cvalueerror ( line, linenum , cvalue )
+--
+-- Incorrect value, so print an error and exit.
+--
+ print ("lwarpmk: ===")
+ print ("lwarpmk: " .. linenum .. " : " .. line ) ;
+ print (
+ "lwarpmk: incorrect variable value \"" .. cvalue ..
+ "\" in lwarpmk.conf.\n"
+ ) ;
+ print ("lwarpmk: ===")
+-- printconf () ;
+ os.exit(1) ;
+end
+
+
+function printhowtorecompile ()
+-- Tells the user how to recompile to regenerate the configuration files.
+ print ("lwarpmk: The configuration files lwarpmk.conf and "..sourcename..".lwarpmkconf" )
+ print ("lwarpmk: must be updated. To do so, recompile" )
+ print ("lwarpmk: " , sourcename..".tex" )
+ if ( printlatexcmd == "" ) then
+ print ("lwarpmk: using xe/lua/pdflatex," )
+ else
+ print ("lwarpmk: using the command:")
+ print ("lwarpmk: " , printlatexcmd )
+ end
+ print ("lwarpmk: then use lwarpmk again.")
+end -- printhowtorecompile
+
+
+function ignoreconf ()
+-- Global argument index
+argindex = 2
+end
+
+function loadconf ()
+--
+-- Load settings from the project's "lwarpmk.conf" file:
+--
+-- Default configuration filename:
+local conffile = "lwarpmk.conf"
+local confroot = "lwarpmk"
+-- Global argument index
+argindex = 2
+-- Optional configuration filename:
+if ( arg[argindex] == "-p" ) then
+ argindex = argindex + 1
+ confroot = arg[argindex]
+ conffile = confroot..".lwarpmkconf"
+ argindex = argindex + 1
+end
+-- Additional defaults:
+confversion = "0"
+opsystem = "Unix"
+imagesdirectory = "lateximages"
+imagesname = "image-"
+latexmk = "false"
+printlatexcmd = ""
+HTMLlatexcmd = ""
+printindexcmd = ""
+HTMLindexcmd = ""
+latexmkindexcmd = ""
+-- to be removed:
+-- indexprog = "makeindex"
+-- makeindexstyle = "lwarp.ist"
+-- xindylanguage = "english"
+-- xindycodepage = "utf8"
+-- xindystyle = "lwarp.xdy"
+-- pdftotextenc = "UTF-8"
+glossarycmd = "makeglossaries"
+-- Verify the file exists:
+if (lfs.attributes(conffile,"mode")==nil) then
+ -- file not exists
+ print ("lwarpmk: ===")
+ print ("lwarpmk: File \"" .. conffile .."\" does not exist.")
+ print ("lwarpmk: Move to the project's source directory,")
+ print ("lwarpmk: recompile using pdflatex, xelatex, or lualatex,")
+ print ("lwarpmk: then try using lwarpmk again.")
+ if ( arg[argindex] ~= nil ) then
+ print (
+ "lwarpmk: (\"" .. confroot ..
+ "\" does not appear to be a project name.)"
+ )
+ end
+ print ("lwarpmk: ===")
+ printhelp () ;
+ os.exit(1) -- exit the entire lwarpmk script
+else -- file exists
+-- Read the file:
+print ("lwarpmk: Reading " .. conffile ..".")
+local cfile = io.open(conffile)
+-- Scan each line, parsing each line as: name = [[string]]
+local linenum = 0
+for line in cfile:lines() do -- scan lines
+linenum = linenum + 1
+i,j,cvarname,cvalue = string.find (line,"([%w-_]*)%s*=%s*%[%[([^%]]*)%]%]") ;
+-- Error if incorrect enclosing characters:
+if ( i == nil ) then
+ print ("lwarpmk: ===")
+ print ("lwarpmk: " .. linenum .. " : " .. line ) ;
+ print ("lwarpmk: Incorrect entry in " .. conffile ..".\n" ) ;
+ print ("lwarpmk: ===")
+-- printconf () ;
+ os.exit(1) ;
+end -- nil
+if ( cvarname == "confversion" ) then
+ confversion = cvalue
+elseif ( cvarname == "opsystem" ) then
+ -- Verify choice of opsystem:
+ if ( (cvalue == "Unix") or (cvalue == "Windows") ) then
+ opsystem = cvalue
+ else
+ cvalueerror ( line, linenum , cvalue )
+ end
+elseif ( cvarname == "sourcename" ) then sourcename = cvalue
+elseif ( cvarname == "homehtmlfilename" ) then homehtmlfilename = cvalue
+elseif ( cvarname == "htmlfilename" ) then htmlfilename = cvalue
+elseif ( cvarname == "imagesdirectory" ) then imagesdirectory = cvalue
+elseif ( cvarname == "imagesname" ) then imagesname = cvalue
+elseif ( cvarname == "latexmk" ) then latexmk = cvalue
+elseif ( cvarname == "printlatexcmd" ) then printlatexcmd = cvalue
+elseif ( cvarname == "HTMLlatexcmd" ) then HTMLlatexcmd = cvalue
+elseif ( cvarname == "printindexcmd" ) then printindexcmd = cvalue
+elseif ( cvarname == "HTMLindexcmd" ) then HTMLindexcmd = cvalue
+elseif ( cvarname == "latexmkindexcmd" ) then latexmkindexcmd = cvalue
+elseif ( cvarname == "glossarycmd" ) then glossarycmd = cvalue
+elseif ( cvarname == "pdftotextenc" ) then pdftotextenc = cvalue
+else
+ print ("lwarpmk: ===")
+ print ("lwarpmk: " .. linenum .. " : " .. line ) ;
+ print (
+ "lwarpmk: Incorrect variable name \"" .. cvarname .. "\" in " ..
+ conffile ..".\n"
+ ) ;
+ print ("lwarpmk: ===")
+-- printconf () ;
+os.exit(1) ;
+end -- cvarname
+end -- do scan lines
+io.close(cfile)
+end -- file exists
+-- Error if sourcename is "lwarp".
+-- This could happen if a local copy of lwarp has recently been recompiled.
+if sourcename=="lwarp" then
+ print ("lwarpmk: ===")
+ print ("lwarpmk: lwarp.sty has recently been recompiled in this directory,")
+ print ("lwarpmk: and \"lwarpmk.conf\" is no longer set for your own project.")
+ print ("lwarpmk: Recompile your own project using pdf/lua/xelatex <projectname>.")
+ print ("lwarpmk: After a recompile, \"lwarpmk.conf\" will be set for your project,")
+ print ("lwarpmk: and you may again use lwarpmk.")
+ print ("lwarpmk: ===")
+ os.exit(1)
+end -- sourcename of "lwarp"
+-- Select some operating-system commands:
+if opsystem=="Unix" then -- For Unix / Linux / Mac OS:
+ rmname = "rm"
+ mvname = "mv"
+ cpname = "cp"
+ touchnamepre = "touch"
+ touchnamepost = ""
+ newtouchname = "touch"
+ dirslash = "/"
+ opquote= "\'"
+ cmdgroupopenname = " ( "
+ cmdgroupclosename = " ) "
+ seqname = " && "
+ bgname = " &"
+elseif opsystem=="Windows" then -- For Windows
+ rmname = "DEL"
+ mvname = "MOVE"
+ cpname = "COPY"
+ touchnamepre = "COPY /b"
+ touchnamepost = "+,,"
+ newtouchname = "echo empty >"
+ dirslash = "\\"
+ opquote= "\""
+ cmdgroupopenname = ""
+ cmdgroupclosename = ""
+ seqname = " & "
+ bgname = ""
+else
+ print ("lwarpmk: ===")
+ print ("lwarpmk: Select Unix or Windows for opsystem." )
+ print ("lwarpmk: ===")
+ os.exit(1)
+end --- for Windows
+-- Warning if the operating system does not appear to be correct,
+-- in case files were transferred to another system.
+if ( (package.config:sub(1,1)) ~= dirslash ) then
+ print ("lwarpmk: ===")
+ print ("lwarpmk: It appears that lwarpmk.conf is for a different operating system." )
+ printhowtorecompile ()
+ print ("lwarpmk: ===")
+ os.exit(1)
+end
+-- Error if the configuration file's version is not current:
+if ( confversion ~= requiredconfversion ) then
+ print ("lwarpmk: ===")
+ printhowtorecompile ()
+ print ("lwarpmk: ===")
+ os.exit(1)
+end
+end -- loadconf
+
+
+function executecheckerror ( executecommands , errormessage )
+--
+-- Execute an operating system call,
+-- and maybe exit with an error message.
+--
+local err
+err = os.execute ( executecommands )
+if ( err ~= 0 ) then
+ print ("lwarpmk: ===")
+ print ("lwarpmk: " .. errormessage )
+ print ("lwarpmk: ===")
+ os.exit(1)
+end
+end -- executecheckerror
+
+
+function refreshdate ()
+os.execute(touchnamepre .. " " .. sourcename .. ".tex " .. touchnamepost)
+end
+
+
+
+function reruntoget (filesource)
+--
+-- Scan the LaTeX log file for the phrase "Rerun to get",
+-- indicating that the file should be compiled again.
+-- Return true if found.
+--
+local fsource = io.open(filesource)
+for line in fsource:lines() do
+if ( string.find(line,"Rerun to get") ~= nil ) then
+ io.close(fsource)
+ return true
+end -- if
+end -- do
+io.close(fsource)
+return false
+end
+
+
+
+function onetime (latexcmd, fsuffix)
+--
+-- Compile one time, return true if should compile again.
+-- fsuffix is "" for print, "_html" for HTML output.
+--
+print("lwarpmk: Compiling with: " .. latexcmd)
+executecheckerror (
+ latexcmd ,
+ "Compile error."
+)
+return (reruntoget(sourcename .. fsuffix .. ".log") ) ;
+end
+
+
+function manytimes (latexcmd, fsuffix)
+--
+-- Compile up to five times.
+-- fsuffix is "" for print, "_html" for HTML output
+--
+if onetime(latexcmd, fsuffix) == true then
+if onetime(latexcmd, fsuffix) == true then
+if onetime(latexcmd, fsuffix) == true then
+if onetime(latexcmd, fsuffix) == true then
+if onetime(latexcmd, fsuffix) == true then
+end end end end end
+end
+
+
+function verifyfileexists (filename)
+--
+-- Exit if the given file does not exist.
+--
+if (lfs.attributes ( filename , "modification" ) == nil ) then
+ print ("lwarpmk: ===")
+ print ("lwarpmk: " .. filename .. " not found." ) ;
+ print ("lwarpmk: ===")
+ os.exit (1) ;
+end
+end
+
+
+
+function pdftohtml ()
+--
+-- Convert <project>_html.pdf into HTML files:
+--
+-- Convert to text:
+print ("lwarpmk: Converting " .. sourcename
+ .."_html.pdf to " .. sourcename .. "_html.html")
+os.execute("pdftotext -enc " .. pdftotextenc .. " -nopgbrk -layout "
+ .. sourcename .. "_html.pdf " .. sourcename .. "_html.html")
+-- Split the result into individual HTML files:
+splitfile (homehtmlfilename .. ".html" , sourcename .. "_html.html")
+end
+
+
+function removeaux ()
+--
+-- Remove auxiliary files:
+-- All .aux files are removed since there may be many bbl*.aux files.
+--
+os.execute ( rmname .. " *.aux " ..
+ sourcename ..".toc " .. sourcename .. "_html.toc " ..
+ sourcename ..".lof " .. sourcename .. "_html.lof " ..
+ sourcename ..".lot " .. sourcename .. "_html.lot " ..
+ " *.idx " ..
+ " *.ind " ..
+ sourcename ..".ps " .. sourcename .."_html.ps " ..
+ sourcename ..".log " .. sourcename .. "_html.log " ..
+ sourcename ..".gl* " .. sourcename .. "_html.gl* " ..
+ " *_html_inc.* "
+ )
+end
+
+function checkhtmlpdfexists ()
+--
+-- Error if the HTML document does not exist.
+-- The lateximages are drawn from the HTML PDF version of the document,
+-- so "lwarpmk html" must be done before "lwarpmk limages".
+--
+local htmlpdffile = io.open(sourcename .. "_html.pdf", "r")
+if ( htmlpdffile == nil ) then
+ print ("")
+ print ("lwarpmk: ===")
+ print ("lwarpmk: The HTML version of the document does not exist.")
+ print ("lwarpmk: Enter \"lwarpmk html\" to compile the HTML version.")
+ print ("lwarpmk: ===")
+ os.exit(1)
+end
+io.close (htmlpdffile)
+end -- checkhtmlpdfexists
+
+
+function warnlimages ()
+--
+-- Warning of a missing <sourcename>-images.txt file:
+ print ("lwarpmk: ===")
+ print ("lwarpmk: \"" .. sourcename .. "-images.txt\" does not exist.")
+ print ("lwarpmk: Your project does not use SVG math or other lateximages,")
+ print ("lwarpmk: or the file has been deleted somehow.")
+ print ("lwarpmk: Use \"lwarpmk html1\" to recompile your project")
+ print ("lwarpmk: and recreate \"" .. sourcename .. "-images.txt\".")
+ print ("lwarpmk: If your project does not use SVG math or other lateximages,")
+ print ("lwarpmk: then \"" .. sourcename .. "-images.txt\" will never exist, and")
+ print ("lwarpmk: \"lwarpmk limages\" will not be necessary.")
+ print ("lwarpmk: ===")
+end -- warnlimages
+
+
+function warnlimagesrecompile ()
+-- Warning if must recompile before creating limages:
+ print ("")
+ print ("lwarpmk: ===")
+ print ("lwarpmk: Cross-references are not yet correct.")
+ print ("lwarpmk: The document must be recompiled before creating the lateximages.")
+ print ("lwarpmk: Enter \"lwarpmk html1\" again, then try \"lwarpmk limages\" again.")
+ print ("lwarpmk: ===")
+end --warnlimagesrecompile
+
+
+function checklimages ()
+--
+-- Check <sourcename>.txt to see if need to recompile first.
+-- If any entry has a page number of zero, then there were incorrect images.
+--
+print ("lwarpmk: Checking for a valid " .. sourcename .. "-images.txt file.")
+local limagesfile = io.open(sourcename .. "-images.txt", "r")
+if ( limagesfile == nil ) then
+ warnlimages ()
+ os.exit(1)
+end
+-- Track warning to recompile if find a page 0
+local pagezerowarning = false
+-- Scan <sourcename>.txt
+for line in limagesfile:lines() do
+ -- lwimgpage is the page number in the PDF which has the image
+ -- lwimghash is true if this filename is a hash
+ -- lwimgname is the lateximage filename root to assign for the image
+ i,j,lwimgpage,lwimghash,lwimgname = string.find (line,"|(.*)|(.*)|(.*)|")
+ -- For each entry:
+ if ( (i~=nil) ) then
+ -- If the page number is 0, image references are incorrect
+ -- and must recompile the soure document:
+ if ( lwimgpage == "0" ) then
+ pagezerowarning = true
+ end
+ end -- if i~=nil
+end -- do
+-- The last line should be |end|end|end|.
+-- If not, the compile must have aborted, and the images are incomplete.
+if ( lwimgpage ~= "end" ) then
+ warnlimagesrecompile()
+ os.exit(1) ;
+end
+if ( pagezerowarning ) then
+ warnlimagesrecompile()
+ os.exit(1) ;
+end -- pagezerowarning
+end -- checklimages
+
+
+function createuniximage ( lwimgfullname )
+--
+-- Create one lateximage for Unix / Linux / Mac OS.
+--
+executecheckerror (
+ cmdgroupopenname ..
+ "pdfseparate -f " .. lwimgpage .. " -l " .. lwimgpage .. " " ..
+ sourcename .."_html.pdf " ..
+ imagesdirectory .. dirslash .."lateximagetemp-%d" .. ".pdf" ..
+ seqname ..
+ -- Crop the image:
+ "pdfcrop --hires " .. imagesdirectory .. dirslash .. "lateximagetemp-" ..
+ lwimgpage .. ".pdf " ..
+ imagesdirectory .. dirslash .. lwimgname .. ".pdf" ..
+ seqname ..
+ -- Convert the image to svg:
+ "pdftocairo -svg -noshrink " .. imagesdirectory .. dirslash .. lwimgname .. ".pdf " ..
+ imagesdirectory .. dirslash .. lwimgname ..".svg" ..
+ seqname ..
+ -- Remove the temporary files:
+ rmname .. " " .. imagesdirectory .. dirslash .. lwimgname .. ".pdf" .. seqname ..
+ rmname .. " " .. imagesdirectory .. dirslash .. "lateximagetemp-" .. lwimgpage .. ".pdf" ..
+ cmdgroupclosename .. " >/dev/null " .. bgname
+ ,
+ "File error trying to convert " .. lwimgfullname
+)
+-- Every 32 images, wait for completion at below normal priority,
+-- allowing other image tasks to catch up.
+numimageprocesses = numimageprocesses + 1
+if ( numimageprocesses > 32 ) then
+ numimageprocesses = 0
+ print ( "lwarpmk: waiting" )
+ executecheckerror ( "wait" , "File error trying to wait.")
+end
+end -- createuniximage
+
+
+function createwindowsimage ( lwimgfullname )
+--
+-- Create one lateximage for Windows.
+--
+-- Every 32 images, wait for completion at below normal priority,
+-- allowing other image tasks to catch up.
+numimageprocesses = numimageprocesses + 1
+if ( numimageprocesses > 32 ) then
+ numimageprocesses = 0
+ thiswaitcommand = "/WAIT /BELOWNORMAL"
+ print ( "lwarpmk: waiting" )
+else
+ thiswaitcommand = ""
+end
+-- Execute the image generation command
+executecheckerror (
+ "start /B " .. thiswaitcommand .. " \"\" lwarp_one_limage " ..
+ lwimgpage .. " " ..
+ lwimghash .. " " ..
+ lwimgname .. " " ..
+ sourcename .. " <nul >nul"
+ ,
+ "File error trying to create image."
+)
+end -- createwindowsimage
+
+
+function createonelateximage ( line )
+--
+-- Given the next line of <sourcename>.txt, convert a single image.
+--
+-- lwimgpage is the page number in the PDF which has the image
+-- lwimghash is true if this filename is a hash
+-- lwimgname is the lateximage filename root to assign for the image
+i,j,lwimgpage,lwimghash,lwimgname = string.find (line,"|(.*)|(.*)|(.*)|")
+-- For each entry:
+if ( (i~=nil) ) then
+ -- Skip if the page number is 0:
+ if ( lwimgpage == "0" ) then
+ pagezerowarning = true
+ -- Skip if the page number is "end":
+ else if ( lwimgpage == "end" ) then
+ else
+ -- Skip is this image is hashed and already exists:
+ local lwimgfullname = imagesdirectory .. dirslash .. lwimgname .. ".svg"
+ if (
+ (lwimghash ~= "true") or
+ (lfs.attributes(lwimgfullname,"mode")==nil) -- file not exists
+ )
+ then -- not hashed or not exists:
+ -- Print the name of the file being generated:
+ print ( "lwarpmk: " .. lwimgname )
+ -- Touch/create the dest so that only once instance tries to build it:
+ executecheckerror (
+ newtouchname .. " " .. lwimgfullname ,
+ "File error trying to touch " .. lwimgfullname
+ )
+ -- Separate out the image into its own single-page pdf:
+ if opsystem=="Unix" then
+ createuniximage (lwimgfullname)
+ elseif opsystem=="Windows" then
+ createwindowsimage (lwimgfullname)
+ end
+ end -- not hashed or not exists
+ end -- not page "end"
+ end -- not page 0
+end -- not nil
+end -- createonelateximage
+
+
+function createlateximages ()
+--
+-- Create lateximages based on <sourcename>-images.txt:
+--
+-- See if the document must be recompiled first:
+checklimages ()
+-- See if the HTML version exists:
+checkhtmlpdfexists ()
+-- Attempt to create the lateximages:
+print ("lwarpmk: Creating lateximages.")
+local limagesfile = io.open(sourcename .. "-images.txt", "r")
+if ( limagesfile == nil ) then
+ warnlimages ()
+ os.exit(1)
+end
+-- Create the lateximages directory, ignore error if already exists
+err = os.execute("mkdir " .. imagesdirectory)
+-- For Windows, create lwarp_one_limage.cmd from lwarp_one_limage.txt:
+if opsystem=="Windows" then
+ executecheckerror (
+ cpname .. " lwarp_one_limage.txt lwarp_one_limage.cmd" ,
+ "File error trying to copy lwarp_one_limage.txt to lwarp_one_limage.cmd"
+ )
+end -- create lwarp_one_limage.cmd
+-- Track the number of parallel processes
+numimageprocesses = 0
+-- Track warning to recompile if find a page 0
+pagezerowarning = false
+-- Scan <sourcename>.txt
+for line in limagesfile:lines() do
+ createonelateximage ( line )
+end -- do
+io.close(limagesfile)
+print ( "lwarpmk limages: ===")
+print ( "lwarpmk limages: Wait a moment for the images to complete" )
+print ( "lwarpmk limages: before reloading the page." )
+print ( "lwarpmk limages: ===")
+print ( "lwarpmk limages: Done." )
+if ( pagezerowarning == true ) then
+ print ( "lwarpmk limages: WARNING: Images will be incorrect." )
+ print ( "lwarpmk limages: Enter \"lwarpmk cleanlimages\", then" )
+ print ( "lwarpmk limages: recompile the document one more time, then" )
+ print ( "lwarpmk limages: repeat \"lwarpmk images\" again." )
+end -- pagezerowarning
+end -- function
+
+
+function convertepstopdf ()
+--
+-- Converts EPS files to PDF files.
+-- The filenames are arg[argindex] and up.
+-- arg[1] is the command "pdftosvg".
+--
+ignoreconf ()
+for i = argindex , #arg do
+ if (lfs.attributes(arg[i],"mode")==nil) then
+ print ("lwarpmk: File \"" .. arg[i] .. "\" does not exist.")
+ else
+ print ("lwarpmk: Converting \"" .. arg[i] .. "\"")
+ os.execute ( "epstopdf " .. arg[i] )
+ end -- if
+end -- do
+end --function
+
+
+function convertpdftosvg ()
+--
+-- Converts PDF files to SVG files.
+-- The filenames are arg[argindex] and up.
+-- arg[1] is the command "pdftosvg".
+--
+ignoreconf ()
+for i = argindex , #arg do
+ if (lfs.attributes(arg[i],"mode")==nil) then
+ print ("lwarpmk: File \"" .. arg[i] .. "\" does not exist.")
+ else
+ print ("lwarpmk: Converting \"" .. arg[i] .. "\"")
+ os.execute ( "pdftocairo -svg " .. arg[i] )
+ end -- if
+end -- do
+end --function
+
+
+-- Force an update and conclude processing:
+function updateanddone ()
+print ("lwarpmk: Forcing an update of " .. sourcename ..".tex.")
+refreshdate ()
+print ("lwarpmk: " .. sourcename ..".tex is ready to be recompiled.")
+print ("lwarpmk: Done.")
+end -- function
+
+
+-- Start of the main code: --
+
+
+-- lwarpmk --version :
+
+if (arg[1] == "--version") then
+print ( "lwarpmk: " .. printversion )
+
+else -- not --version
+
+
+-- print intro:
+
+print ("lwarpmk: " .. printversion .. " Automated make for the LaTeX lwarp package.")
+
+
+-- lwarpmk print:
+
+if arg[1] == "print" then
+loadconf ()
+if ( latexmk == "true" ) then
+ print ("lwarpmk: Compiling with: " .. printlatexcmd)
+ executecheckerror (
+ printlatexcmd ,
+ "Compile error."
+ )
+ print ("lwarpmk: Done.")
+else -- not latexmk
+ verifyfileexists (sourcename .. ".tex") ;
+ -- See if up to date:
+ if (
+ ( lfs.attributes ( sourcename .. ".pdf" , "modification" ) == nil ) or
+ (
+ lfs.attributes ( sourcename .. ".tex" , "modification" ) >
+ lfs.attributes ( sourcename .. ".pdf" , "modification" )
+ )
+ ) then
+ -- Recompile if not yet up to date:
+ manytimes(printlatexcmd, "")
+ print ("lwarpmk: Done.") ;
+ else
+ print ("lwarpmk: " .. sourcename .. ".pdf is up to date.") ;
+ end
+end -- not latexmk
+
+
+-- lwarpmk print1:
+
+elseif arg[1] == "print1" then
+ loadconf ()
+ verifyfileexists (sourcename .. ".tex") ;
+ onetime(printlatexcmd, "")
+ print ("lwarpmk: Done.") ;
+
+
+-- lwarpmk printindex:
+-- Compile the index then touch the source
+-- to trigger a recompile of the document:
+
+elseif arg[1] == "printindex" then
+loadconf ()
+os.execute ( printindexcmd )
+print ("lwarpmk: -------")
+updateanddone ()
+
+
+-- lwarpmk printglossary:
+-- Compile the glossary then touch the source
+-- to trigger a recompile of the document:
+
+elseif arg[1] == "printglossary" then
+loadconf ()
+print ("lwarpmk: Processing the glossary.")
+
+os.execute(glossarycmd .. " " .. sourcename)
+updateanddone ()
+
+
+-- lwarpmk html:
+
+elseif arg[1] == "html" then
+loadconf ()
+if ( latexmk == "true" ) then
+ print ("lwarpmk: Compiling with: " .. HTMLlatexcmd)
+ executecheckerror (
+ HTMLlatexcmd ,
+ "Compile error."
+ )
+ pdftohtml ()
+ print ("lwarpmk: Done.")
+else -- not latexmk
+ verifyfileexists ( sourcename .. ".tex" ) ;
+ -- See if exists and is up to date:
+ if (
+ ( lfs.attributes ( homehtmlfilename .. ".html" , "modification" ) == nil ) or
+ (
+ lfs.attributes ( sourcename .. ".tex" , "modification" ) >
+ lfs.attributes ( homehtmlfilename .. ".html" , "modification" )
+ )
+ ) then
+ -- Recompile if not yet up to date:
+ manytimes(HTMLlatexcmd, "_html")
+ pdftohtml ()
+ print ("lwarpmk: Done.")
+ else
+ print ("lwarpmk: " .. homehtmlfilename .. ".html is up to date.")
+ end
+end -- not latexmk
+
+
+-- lwarpmk html1:
+
+elseif arg[1] == "html1" then
+ loadconf ()
+ verifyfileexists ( sourcename .. ".tex" ) ;
+ onetime(HTMLlatexcmd, "_html")
+ pdftohtml ()
+ print ("lwarpmk: Done.")
+
+
+-- lwarpmk pdftohtml:
+elseif arg[1] == "pdftohtml" then
+ loadconf ()
+ pdftohtml ()
+
+
+-- lwarpmk htmlindex:
+-- Compile the index then touch the source
+-- to trigger a recompile of the document:
+
+elseif arg[1] == "htmlindex" then
+loadconf ()
+os.execute ( HTMLindexcmd )
+print ("lwarpmk: -------")
+updateanddone ()
+
+
+-- lwarpmk htmlglossary:
+-- Compile the glossary then touch the source
+-- to trigger a recompile of the document.
+-- The <sourcename>.xdy file is created by the glossaries package.
+
+elseif arg[1] == "htmlglossary" then
+loadconf ()
+print ("lwarpmk: Processing the glossary.")
+os.execute(glossarycmd .. " " .. sourcename .. "_html")
+updateanddone ()
+
+
+-- lwarpmk limages:
+-- Scan the <sourcename>.txt file to create lateximages.
+
+elseif arg[1] == "limages" then
+loadconf ()
+print ("lwarpmk: Processing images.")
+createlateximages ()
+print ("lwarpmk: Done.")
+
+
+-- lwarpmk again:
+-- Touch the source to trigger a recompile.
+
+elseif arg[1] == "again" then
+loadconf ()
+updateanddone ()
+
+
+-- lwarpmk clean:
+-- Remove project.aux, .toc, .lof, .lot, .log, *.idx, *.ind, *_html_inc.*, .gl*
+
+elseif arg[1] == "clean" then
+loadconf ()
+removeaux ()
+print ("lwarpmk: Done.")
+
+
+-- lwarpmk cleanall
+-- Remove project.aux, .toc, .lof, .lot, .log, *.idx, *.ind, *_html_inc.*, .gl*
+-- and also project.pdf, project.dvi, *.html
+
+elseif arg[1] == "cleanall" then
+loadconf ()
+removeaux ()
+os.execute ( rmname .. " " ..
+ sourcename .. ".pdf " .. sourcename .. "_html.pdf " ..
+ sourcename .. ".dvi " .. sourcename .. "_html.dvi " ..
+ "*.html"
+ )
+print ("lwarpmk: Done.")
+
+
+-- lwarpmk cleanlimages
+-- Remove images from the imagesdirectory.
+
+elseif arg[1] == "cleanlimages" then
+loadconf ()
+os.execute ( rmname .. " " .. imagesdirectory .. dirslash .. "*" )
+print ("lwarpmk: Done.")
+
+-- lwarpmk epstopdf <list of file names>
+-- Convert EPS files to PDF using epstopdf
+elseif arg[1] == "epstopdf" then
+convertepstopdf ()
+print ("lwarpmk: Done.")
+
+
+-- lwarpmk pdftosvg <list of file names>
+-- Convert PDF files to SVG using pdftocairo
+elseif arg[1] == "pdftosvg" then
+convertpdftosvg ()
+print ("lwarpmk: Done.")
+
+
+-- lwarpmk with no argument :
+
+elseif (arg[1] == nil) then
+printhelp ()
+
+
+-- lwarpmk -h or lwarpmk --help :
+
+elseif (arg[1] == "-h" ) or (arg[1] == "--help") then
+printusage ()
+
+
+-- Unknown command:
+
+else
+printhelp ()
+print ("\nlwarpmk: ****** Unknown command \""..arg[1].."\". ******\n")
+end
+
+end -- not --version
+\end{filecontents*}
+% \end{Verbatim}% for syntax highlighting
+% \end{macrocode}
+%
+% \begin{macrocode}
+\end{LWR@createlwarpmk}
+% \end{macrocode}
+%
+
+
+
+
+
+% \section{Stacks}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+
+% Stacks are used to remember how to close sections and list items.
+% Before a new section is started, previously nested sections and items must
+% be closed out (un-nested) in proper order.
+% Note that starting a new section may close several levels of previously
+% \watchout
+% nested items at the same time.
+% For example, starting a new \cs{section} would close any currently open
+% subsection, subsubsection, and paragraph.
+% General environments are not nested on the stack since they have their own close
+% mechanism. List environments are nested, and items inside those environments
+% are nested one level deeper still.
+% List environments may be nested inside other list environments, and list items
+% are nested inside list environments as well. Thus, the stack may have items
+% which are not necessarily in order, since a description may contain an enumerate,
+% for example.
+% Depths to be recorded in |\LWR@closedepthone|, etc.
+
+% \subsection{Assigning depths}
+
+% initial depths for empty stack entries:
+% \begin{macrocode}
+\newcommand*{\LWR@depthnone}{-5}
+% \end{macrocode}
+% All sectioning depths are deeper than |LWR@depthfinished|:
+% \changes{v0.73}{2019/06/21}{Added \cs{book} for \pkg{memoir}.}
+% \begin{macrocode}
+\newcommand*{\LWR@depthfinished}{-4}
+\newcommand*{\LWR@depthbook}{-2}
+\newcommand*{\LWR@depthpart}{-1}
+\newcommand*{\LWR@depthchapter}{0}
+\newcommand*{\LWR@depthsection}{1}
+\newcommand*{\LWR@depthsubsection}{2}
+\newcommand*{\LWR@depthsubsubsection}{3}
+\newcommand*{\LWR@depthparagraph}{4}
+\newcommand*{\LWR@depthsubparagraph}{5}
+% \end{macrocode}
+% Used by \cs{itemize}, \cs{enumerate}, \cs{description}:
+% \begin{macrocode}
+\newcommand*{\LWR@depthlist}{6}
+% \end{macrocode}
+% Used by \cs{item}:
+% \begin{macrocode}
+\newcommand*{\LWR@depthlistitem}{7}
+\let\LWR@depthdescitem\LWR@depthlistitem
+% \end{macrocode}
+
+
+% \subsection{Closing actions}
+
+% A stack to record the action to take to close each nesting level:
+% Add more levels of stack if necessary for a very deeply nested document,
+% adding to \cs{pushclose} and \cs{popclose} as well.
+% \begin{macrocode}
+\newcommand*{\LWR@closeone}{}% top of the stack
+\newcommand*{\LWR@closetwo}{}
+\newcommand*{\LWR@closethree}{}
+\newcommand*{\LWR@closefour}{}
+\newcommand*{\LWR@closefive}{}
+\newcommand*{\LWR@closesix}{}
+\newcommand*{\LWR@closeseven}{}
+\newcommand*{\LWR@closeeight}{}
+\newcommand*{\LWR@closenine}{}
+\newcommand*{\LWR@closeten}{}
+\newcommand*{\LWR@closeeleven}{}
+\newcommand*{\LWR@closetwelve}{}
+% \end{macrocode}
+
+% \subsection{Closing depths}
+
+% A stack to record the depth of each level:
+%
+% Note that nested \LaTeX\ structures may push depths which are non-sequential.
+% \watchout
+%
+% \begin{docsidebar}[Ex:]
+% \vspace*{-2\baselineskip}
+% \begin{Verbatim}[gobble=2,obeytabs,tabsize=4]
+% \begin{itemize}
+% \item{A}
+% \begin{description}
+% \item{B}
+% \end{description}
+% \end{itemize}
+% \end{Verbatim}
+% \vspace{-\baselineskip}
+% \end{docsidebar}
+
+% \begin{macrocode}
+\newcommand*{\LWR@closedepthone}{\LWR@depthnone}% top of the stack
+\newcommand*{\LWR@closedepthtwo}{\LWR@depthnone}
+\newcommand*{\LWR@closedepththree}{\LWR@depthnone}
+\newcommand*{\LWR@closedepthfour}{\LWR@depthnone}
+\newcommand*{\LWR@closedepthfive}{\LWR@depthnone}
+\newcommand*{\LWR@closedepthsix}{\LWR@depthnone}
+\newcommand*{\LWR@closedepthseven}{\LWR@depthnone}
+\newcommand*{\LWR@closedeptheight}{\LWR@depthnone}
+\newcommand*{\LWR@closedepthnine}{\LWR@depthnone}
+\newcommand*{\LWR@closedepthten}{\LWR@depthnone}
+\newcommand*{\LWR@closedeptheleven}{\LWR@depthnone}
+\newcommand*{\LWR@closedepthtwelve}{\LWR@depthnone}
+% \end{macrocode}
+
+% \subsection{Pushing and popping the stack}
+
+% \begin{macro}{\LWR@pushclose} \marg{sectiontype}
+
+% Pushes one return action and its \LaTeX\ depth onto the stacks.
+% \changes{v0.46}{2018/01/18}{Fix: Stack unnesting.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@pushclose}{m}
+{%
+\global\let\LWR@closetwelve\LWR@closeeleven%
+\global\let\LWR@closeeleven\LWR@closeten%
+\global\let\LWR@closeten\LWR@closenine%
+\global\let\LWR@closenine\LWR@closeeight%
+\global\let\LWR@closeeight\LWR@closeseven%
+\global\let\LWR@closeseven\LWR@closesix%
+\global\let\LWR@closesix\LWR@closefive%
+\global\let\LWR@closefive\LWR@closefour%
+\global\let\LWR@closefour\LWR@closethree%
+\global\let\LWR@closethree\LWR@closetwo%
+\global\let\LWR@closetwo\LWR@closeone%
+\global\csletcs{LWR@closeone}{LWR@printclose#1}%
+\global\let\LWR@closedepthtwelve\LWR@closedeptheleven%
+\global\let\LWR@closedeptheleven\LWR@closedepthten%
+\global\let\LWR@closedepthten\LWR@closedepthnine%
+\global\let\LWR@closedepthnine\LWR@closedeptheight%
+\global\let\LWR@closedeptheight\LWR@closedepthseven%
+\global\let\LWR@closedepthseven\LWR@closedepthsix%
+\global\let\LWR@closedepthsix\LWR@closedepthfive%
+\global\let\LWR@closedepthfive\LWR@closedepthfour%
+\global\let\LWR@closedepthfour\LWR@closedepththree%
+\global\let\LWR@closedepththree\LWR@closedepthtwo%
+\global\let\LWR@closedepthtwo\LWR@closedepthone%
+\global\csletcs{LWR@closedepthone}{LWR@depth#1}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@popclose}
+
+% Pops one action and its depth off the stacks.
+% \changes{v0.46}{2018/01/18}{Fix: Stack unnesting.}
+% \begin{macrocode}
+\newcommand*{\LWR@popclose}
+{%
+\global\let\LWR@closeone\LWR@closetwo%
+\global\let\LWR@closetwo\LWR@closethree%
+\global\let\LWR@closethree\LWR@closefour%
+\global\let\LWR@closefour\LWR@closefive%
+\global\let\LWR@closefive\LWR@closesix%
+\global\let\LWR@closesix\LWR@closeseven%
+\global\let\LWR@closeseven\LWR@closeeight%
+\global\let\LWR@closeeight\LWR@closenine%
+\global\let\LWR@closenine\LWR@closeten%
+\global\let\LWR@closeten\LWR@closeeleven%
+\global\let\LWR@closeeleven\LWR@closetwelve%
+\global\let\LWR@closedepthone\LWR@closedepthtwo%
+\global\let\LWR@closedepthtwo\LWR@closedepththree%
+\global\let\LWR@closedepththree\LWR@closedepthfour%
+\global\let\LWR@closedepthfour\LWR@closedepthfive%
+\global\let\LWR@closedepthfive\LWR@closedepthsix%
+\global\let\LWR@closedepthsix\LWR@closedepthseven%
+\global\let\LWR@closedepthseven\LWR@closedeptheight%
+\global\let\LWR@closedeptheight\LWR@closedepthnine%
+\global\let\LWR@closedepthnine\LWR@closedepthten%
+\global\let\LWR@closedepthten\LWR@closedeptheleven%
+\global\let\LWR@closedeptheleven\LWR@closedepthtwelve%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+% \section{Data arrays}
+% \label{sec:dataarray}
+%
+% These macros are similar to the \pkg{arrayjobx} package, except
+% that \cs{LWR@setexparray}'s argument is expanded only once when assigned.
+%
+% |name| has no backslash, |index| can be a number or a text name,
+% and an empty |value| must be \cs{relax} instead of empty.
+%
+% To assign an empty value:
+% \begin{sourcedisplay}
+% |\LWR@setexparray{name}{index}{}|
+% \end{sourcedisplay}
+%
+% \changes{v0.20}{2017/01/07}{Added single-expansion data arrays.}
+%
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+% \begin{macro}{\LWR@setexparray} \marg{name} \marg{index} \marg{contents}
+% \changes{v0.66}{2018/12/31}{Fix with \cs{par}.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@setexparray}{m m m}{%
+ \begingroup%
+ \let\par\relax%
+ \xdef\LWR@thisexparrayname{#1#2}%
+ \ifstrempty{#3}%
+ {\csgdef{\LWR@thisexparrayname}{}}%
+ {\csxdef{\LWR@thisexparrayname}{#3}}%
+ \endgroup%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LWR@getexparray} \marg{name} \marg{index}
+% \begin{macrocode}
+\newcommand*{\LWR@getexparray}[2]{%
+ \@nameuse{#1#2}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+% \section{Localizing catcodes}
+% \label{sec:localizingcatcodes}
+%
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+%
+% Place \cs{StartDefiningTabulars} and
+% \cs{StopDefiningTabulars}
+% \trouble[Misplaced alignment tab character \&]
+% {Misplaced alignment tab character \&>tabular>macros}
+% \trouble{tabular>Misplaced alignment tab character \&>rules}
+% before and after defining macros or environments which include
+% the tabular |&| character in their definitions.
+%
+% The catcode of |&| must be changed before the definitions begin,
+% and must be restored afterwards. Doing so avoids the error\\
+% \hspace*{.5in}\texttt{Misplaced alignment tab character \&.}
+%
+% \begin{macro}{\StartDefiningTabulars} Place before defining something with |&| in it.
+% \changes{v0.33}{2017/06/20}{Add: Avoids error: \protect\texttt{Misplaced alignment tab character \&}.}
+% \begin{macrocode}
+\newcommand{\StartDefiningTabulars}{%
+\LWR@traceinfo{StartDefiningTabulars}%
+\warpHTMLonly{\catcode`\&=\active}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\StopDefiningTabulars} Place after defining something with |&| in it.
+% \begin{macrocode}
+\newcommand{\StopDefiningTabulars}{%
+\LWR@traceinfo{StopDefiningTabulars}%
+\warpHTMLonly{\catcode`\&=4}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \DescribeBoolean{LWR@mathmacro} True if currently defining math macros.
+% Used to disable \SVG\ math hashing and MathJax math contents while
+% defining a macro using inline math.
+% Begin a macro, it is not guaranteed that the contents are static, and so
+% the image must be unique. The contents also almost certainly will not be
+% parsed correctly by MathJax.
+% \begin{macrocode}
+\newbool{LWR@mathmacro}
+\boolfalse{LWR@mathmacro}
+% \end{macrocode}
+
+% \begin{macro}{\StartDefiningMath} Place before defining something with |$| in it.
+% \changes{v0.57}{2018/05/23}{Added.}
+% \begin{macrocode}
+\newcommand{\StartDefiningMath}{%
+\LWR@traceinfo{StartDefiningMath}%
+\warpHTMLonly{\catcode`\$=\active}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\StopDefiningMath} Place after defining something with |$| in it.
+% \begin{macrocode}
+\newcommand{\StopDefiningMath}{%
+\LWR@traceinfo{StopDefiningMath}%
+\warpHTMLonly{\catcode`\$=3}% math shift
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+% \section{Localizing dynamic math}
+% \label{sec:localizingdynamicmath}
+% \trouble{SVG image>math incorrect}
+% \gindex{SVG>dynamic math}
+% \trouble{math>incorrect}
+% \trouble{math>dynamic}
+% \trouble{MathJax=\brand{MathJax}>errors}
+% \gindex{math>dynamic}
+% \gindex{dynamic math expressions}
+%
+% Inline \SVG\ math usually uses a hash of its contents to generate \env{lateximage}s
+% which are reusable for multiple instances with the same contents.
+% If the contents may change for each use, such as depending on the current
+% value of a counter, then \cs{inlinemathother} must be used before the
+% inline math expression, and \cs{inlinemathnormal} must be used after.
+%
+% For MathJax, the inline math expression is usually printed for MathJax to
+% interpret. When marked as dynamic math, the following inline math expression
+% will be displayed as an unhashed inline \SVG\ image instead.
+%
+% For existing code and packages, it may be possible to patch macros after
+% they have been defined, using the \pkg{xpatch} package,
+% which is pre-loaded by \pkg{lwarp}:
+% \begin{Verbatim}[gobble=2,obeytabs,tabsize=4,frame=lines]
+% \xpatchcmd{\macroname}
+% {$math expression$}
+% {\inlinemathother$math expression$\inlinemathnormal}
+% {}
+% {\typeout{Error patching macroname.}}
+% \end{Verbatim}
+%
+%
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+%
+% \DescribeBoolean{LWR@dynamicmath} True to mark inline math which is dynamic in
+% nature, thus should not be hashed for reuse.
+% \DescribeDefault{false}
+% \begin{macrocode}
+\newbool{LWR@dynamicmath}
+\boolfalse{LWR@dynamicmath}
+% \end{macrocode}
+%
+% \begin{macro}{\inlinemathother} Place before using |$| \dots\ |$| or \cs{(} \dots \cs{)}
+% if the contents of the math are not static, depending on counters or dynamic macros.
+% \changes{v0.57}{2018/05/23}{Added.}
+% \changes{v0.61}{2018/09/20}{Changed name from \cs{StartDynamicMath} to \cs{inlinemathother}.}
+% \begin{macrocode}
+\newcommand{\inlinemathother}{%
+\LWR@traceinfo{inlinemathother}%
+\booltrue{LWR@dynamicmath}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\inlinemathnormal} Place after using |$| \dots\ |$| or \cs{(} \dots \cs{)}
+% with dynamic contents.
+% \changes{v0.61}{2018/09/20}{Changed name from \cs{StopDynamicMath} to \cs{inlinemathnormal}.}
+% \begin{macrocode}
+\newcommand{\inlinemathnormal}{%
+\LWR@traceinfo{inlinemathnormal}%
+\boolfalse{LWR@dynamicmath}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+
+
+
+% \section{\HTML\ entities}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \HTML\ Unicode entities:
+% \begin{macrocode}
+\let\LWR@origampersand\&
+% \end{macrocode}
+% \begin{macro}{\HTMLentity} \marg{entitytag}
+% \begin{macrocode}
+\newcommand*{\HTMLentity}[1]{%
+% \LWR@traceinfo{HTMLentity \detokenize{#1}}%
+\begingroup%
+\LWR@FBcancel%
+\LWR@origampersand#1;%
+\endgroup%
+% \LWR@traceinfo{HTMLentity done}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HTMLunicode} \marg{hex\_unicode}
+% \begin{macrocode}
+\newcommand*{\HTMLunicode}[1]{\HTMLentity{\LWR@origpound{}x#1}}
+% \end{macrocode}
+% \end{macro}
+
+% \DescribeMacro{\&}
+% \begin{macrocode}
+\renewrobustcmd*{\&}{\HTMLentity{amp}}
+% \end{macrocode}
+
+% \begin{macro}{\textless}
+% \changes{v0.66}{2019/02/07}{Made robust.}
+% \begin{macrocode}
+\let\LWR@origtextless\textless
+\renewrobustcmd*{\textless}{\HTMLentity{lt}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\textgreater}
+% \changes{v0.66}{2019/02/07}{Made robust.}
+% \begin{macrocode}
+\let\LWR@origtextgreater\textgreater
+\renewrobustcmd*{\textgreater}{\HTMLentity{gt}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+% \section{\HTML\ filename generation}
+%
+
+% The filename of the homepage is set to |\HomeHTMLFilename.html|.
+% The filenames of additional sections start with |\HTMLFilename|, to which is
+% appended a section number or a simplified section name, depending on |FileSectionNames|.
+%
+
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+
+
+% \begin{macro}{\BaseJobname}
+% The \cs{jobname} of the printed version, even if currently
+% compiling the \HTML\ version.
+% I.e. this is the \cs{jobname} without |_html| appended.
+% This is used to set \cs{HomeHTMLFilename} if the user did not provide one.
+% \begin{macrocode}
+\providecommand*{\BaseJobname}{\jobname}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\HTMLFilename}
+% \changes{v0.19}{2016/05/28}{Docs: Escape filename underscores.}
+% \changes{v0.20}{2016/12/18}{No longer escape underscores.}
+% The prefix for all generated \HTML\ files other than the home page,
+% defaulting to empty. See \cref{sec:filenameexamples}.
+%
+% \begin{macrocode}
+\providecommand*{\HTMLFilename}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\HomeHTMLFilename}
+% \changes{v0.19}{2016/05/28}{Docs: Escape filename underscores.}
+% \changes{v0.20}{2016/12/18}{No longer escape underscores.}
+% The filename of the home page, defaulting to the \cs{BaseJobname}.
+% See \cref{sec:filenameexamples}.
+%
+% \begin{macrocode}
+\providecommand*{\HomeHTMLFilename}{\BaseJobname}
+% \end{macrocode}
+% \end{macro}
+%
+
+% \begin{macro}{\SetHTMLFileNumber} \marg{number}
+%
+% \changes{v0.20}{2016/09/11}{Add: Control file numbers.}
+% Sets the file number for the next
+% file to be generated. 0 is the home page.
+% Use just before the next sectioning command, and set it to one less than the
+% desired number of the next section.
+% May be used to generate numbered groups of nodes
+% such as 100+ for one chapter, 200+ for another chapter, etc.
+% \begin{macrocode}
+\newcommand*{\SetHTMLFileNumber}[1]{%
+\setcounter{LWR@htmlfilenumber}{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \DescribeBoolean{FileSectionNames}
+% Selects how to create \HTML\ file names.
+%
+% Defaults to use section names in the filenames.
+% \begin{macrocode}
+\newbool{FileSectionNames}
+\booltrue{FileSectionNames}
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% \DescribeCounter{LWR@htmlfilenumber}
+% Records the number of each \HTML\ file as it is being created.
+% Number 0 is the home page.
+% \begin{macrocode}
+\newcounter{LWR@htmlfilenumber}
+\setcounter{LWR@htmlfilenumber}{0}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@htmlsectionfilename} \marg{htmlfilenumber or name}
+%
+% \changes{v0.14}{2016/03/28}{Fix: Links to home page.}
+% \changes{v0.17}{2016/04/11}{Fix: Links when entire doc is one \HTML\ page.}
+% \changes{v0.20}{2016/09/11}{HTMLFilename: removed additional trailing '-', and may be empty.}
+% \changes{v0.20}{2016/09/11}{Sections called ``Index'' or ``index'' have an underscore
+% prepended to their filenames if no prefix.}
+% \changes{v0.66}{2019/01/30}{Sanitize underscores.}
+%
+% Prints the filename for a given section: |\HTMLFilename{}filenumber/name.html|
+% \begin{macrocode}
+\newcommand*{\LWR@htmlsectionfilename}[1]{%
+\LWR@traceinfo{LWR@htmlsectionfilename A !\detokenize{#1}!}%
+% \end{macrocode}
+% Section 0 or empty is given the home filename.
+% The filename must be detokenized for underscores.
+% \begin{macrocode}
+% \LWR@traceinfo{about to assign temp}%
+\LWR@sanitize{#1}%
+\LWR@traceinfo{about to compare with ??}%
+\ifthenelse{\equal{\LWR@sanitized}{??}}%
+ {\LWR@traceinfo{found ??}}%
+ {\LWR@traceinfo{not found ??}}%
+\LWR@traceinfo{about to compare with zero or empty}%
+\ifthenelse{%
+ \equal{\LWR@sanitized}{0}%
+ \OR \equal{\LWR@sanitized}{}%
+ \OR \equal{\LWR@sanitized}{??}%
+}%
+{%
+ \LWR@traceinfo{LWR@htmlsectionfilename B \HomeHTMLFilename.html}%
+ \HomeHTMLFilename.html%
+}%
+% \end{macrocode}
+% For a \LaTeX\ section named ``Index'' or ``index'' without a prefix, create a filename
+% with a leading underscore to avoid colliding with the \HTML\ filename |index.html|:
+% \begin{macrocode}
+{%
+ \LWR@traceinfo{LWR@htmlsectionfilename C \LWR@sanitized}%
+ \ifthenelse{%
+ \equal{\HTMLFilename}{} \AND
+ \equal{\LWR@sanitized}{Index} \OR
+ \equal{\LWR@sanitized}{index}%
+ }%
+ {%
+ \LWR@traceinfo{Prefixing the index name with an underscore.}%
+ \_\LWR@sanitized.html%
+ }%
+% \end{macrocode}
+% Otherwise, create a filename with the chosen prefix:
+% \begin{macrocode}
+ {%
+ \HTMLFilename\LWR@isolate{\LWR@sanitized}.html%
+ }%
+}%
+\LWR@traceinfo{LWR@htmlsectionfilename Z}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@htmlrefsectionfilename} \marg{label}
+%
+% Prints the filename for the given label
+%
+% \changes{v0.50}{2018/02/20}{Fix: SVG math in a section name.}
+% \begin{macrocode}
+\newcommand*{\LWR@htmlrefsectionfilename}[1]{%
+\LWR@traceinfo{LWR@htmlrefsectionfilename: !\detokenize{#1}!}%
+% \end{macrocode}
+% \cs{LWR@nullfonts} to allow math in a section name.
+% \begin{macrocode}
+\begingroup%
+\LWR@nullfonts%
+\LWR@htmlsectionfilename{\LWR@htmlfileref{#1}}%
+\endgroup%
+\LWR@traceinfo{LWR@htmlrefsectionfilename: done}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+% \section{Homepage link}
+
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+
+
+% \begin{macro}{\linkhomename}
+% Holds the default name for the home link.
+%
+% \changes{v0.63}{2018/11/29}{Added.}
+% \begin{macrocode}
+\newcommand{\linkhomename}{Home}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{macro}{\LinkHome}
+% May be used wherever you wish to place a link back to the homepage.
+% The filename must be detokenized for underscores.
+% \begin{macrocode}
+\newcommand*{\LinkHome}{%
+\LWR@subhyperrefclass{\HomeHTMLFilename.html}{\linkhomename}{linkhome}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \codeprint
+% \begin{macrocode}
+\begin{warpprint}
+% \end{macrocode}
+
+% \begin{macro}{\LinkHome}
+% May be used wherever you wish to place a link back to the homepage.
+% For print output, if \pkg{hyperref} is available a hyperlink to the first page
+% is used, named by \cs{linkhomename}.
+% If \pkg{hyperref} is not available, a pageref is used instead.
+%
+% \cs{BaseJobname} is included in the link label in case multiple
+% documents are cross-referenced.
+%
+% \changes{v0.63}{2018/11/29}{Fix: Print version.}
+% \changes{v0.66}{2019/01/23}{Fix: Document cross-references.}
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifundefined{hyperref}{
+ \newcommand*{\LinkHome}{%
+ \linkhomename\ --- page \pageref{\BaseJobname-page-LWRfirstpage}%
+ }
+}{
+ \newcommand*{\LinkHome}{%
+ \hyperref[\BaseJobname-page-LWRfirstpage]{\linkhomename}%
+ }
+}
+}
+
+\AfterEndPreamble{\label{\BaseJobname-page-LWRfirstpage}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpprint}
+% \end{macrocode}
+
+
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{macro}{\LWR@topnavigation}
+%
+% Creates a link to the homepage at the top of the page for use when the window is too
+% narrow for the side\TOC.
+% \begin{macrocode}
+\newcommand*{\LWR@topnavigation}{
+\LWR@htmlelementclassline{nav}{topnavigation}{\LinkHome}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@botnavigation}
+%
+% Creates a link to the homepage at the bottom of the page for use when the window is too
+% narrow for the side\TOC.
+% \begin{macrocode}
+\newcommand*{\LWR@botnavigation}{
+\LWR@htmlelementclassline{nav}{botnavigation}{\LinkHome}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+% \section{\cs{LWRPrintStack} diagnostic tool}
+
+% Diagnostics tool:
+% Prints the \LaTeX\ nesting depth values for the stack levels.
+% \cs{LWR@startpars} is used before printing the stack, so that \cs{LWRPrintStack} may
+% \watchout
+% be called from anywhere in the normal text flow.
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{macro}{\LWRPrintStack} Prints the closedepth stack.
+% \changes{v0.46}{2018/01/15}{Name changed from \cs{PrintStack}.}
+% \begin{macrocode}
+\newcommand*{\LWR@subprintstack}{
+\LWR@closedepthone\ \LWR@closedepthtwo\ \LWR@closedepththree\
+\LWR@closedepthfour\ \LWR@closedepthfive\ \LWR@closedepthsix\
+\LWR@closedepthseven\ \LWR@closedeptheight\ \LWR@closedepthnine\
+\LWR@closedepthten\ \LWR@closedeptheleven\ \LWR@closedepthtwelve\
+}
+
+\newcommand*{\LWRPrintStack}{
+\LWR@startpars
+\LWR@subprintstack
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+% \codeprint
+% \begin{macrocode}
+\begin{warpprint}
+% \end{macrocode}
+
+% \begin{macrocode}
+\newcommand*{\LWRPrintStack}{}
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpprint}
+% \end{macrocode}
+
+
+
+
+% \section{Closing stack levels}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% Close one nested level:
+% \begin{macrocode}
+\newcommand*{\LWR@closeoneprevious}{%
+
+\LWR@closeone
+
+\LWR@popclose
+}
+% \end{macrocode}
+
+% \begin{macro}{\LWR@closeprevious} \marg{sectintype}
+% Close everything up to the given depth:
+% \begin{macrocode}
+\newcommand*{\LWR@closeprevious}[1]{
+\LWR@traceinfo{%
+ LWR@closeprevious to depth \csuse{LWR@depth#1}, %
+ depths are \LWR@subprintstack%
+}%
+% \end{macrocode}
+% Close any pending paragraph:
+% \begin{macrocode}
+\LWR@stoppars%
+% \end{macrocode}
+% Close anything nested deeper than the desired depth.
+% First close anything deeper, then at most one of the same level.
+% \changes{v0.46}{2018/01/18}{Fix: Stack unnesting.}
+% \begin{macrocode}
+\whileboolexpr{test{\ifnumcomp{\LWR@closedepthone}{>}{\csuse{LWR@depth#1}}}}%
+{%
+ \LWR@traceinfo{LWR@closeprevious: closing out depth \LWR@closedepthone}%
+ \LWR@closeoneprevious%
+}%
+\ifboolexpr{test{\ifnumcomp{\LWR@closedepthone}{=}{\csuse{LWR@depth#1}}}}%
+{%
+ \LWR@traceinfo{LWR@closeprevious: closing out depth \LWR@closedepthone}%
+ \LWR@closeoneprevious%
+}{}%
+\LWR@traceinfo{LWR@closeprevious: done, depths are \LWR@subprintstack}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+% \section{\PDF\ pages and styles}
+
+% \changes{v0.38}{2017/08/21}{Added \cs{markboth}, \cs{sloppy}, etc.}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@forcenewpage} New \PDF\ page a before major environment.
+%
+% This is used just before major environments, such as \env{verse}.
+% Reduces the chance of an environment overflowing the \HTML\ \PDF\ output page.
+%
+% \changes{v0.28}{2017/04/13}{Forces new \PDF\ page before major environments.}
+% \changes{v0.46}{2018/01/20}{Fix: Improper \cs{prevdepth}.}
+% \begin{macrocode}
+\newcommand{\LWR@forcenewpage}{%
+\LWR@traceinfo{LWR@forcenewpage}%
+\ifinner\else%
+\LWR@stoppars\LWR@orignewpage\LWR@startpars%
+\fi%
+}
+% \end{macrocode}
+%
+%
+%
+% \cs{pagestyle}, etc. are nullified for \HTML\ output.
+%
+%
+% \begin{macro}{\pagestyle} \marg{style}
+% \begin{macrocode}
+\renewcommand*{\pagestyle}[1]{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\thispagestyle} \marg{style}
+% \begin{macrocode}
+\renewcommand*{\thispagestyle}[1]{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\markboth} \marg{left} \marg{right}
+% \begin{macrocode}
+\renewcommand*{\markboth}[2]{}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\markright} \marg{right}
+% \begin{macrocode}
+\renewcommand*{\markright}[1]{}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\raggedbottom}
+% \begin{macrocode}
+\renewcommand*{\raggedbottom}{}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\flushbottom}
+% \begin{macrocode}
+\renewcommand*{\flushbottom}{}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\sloppy}
+% \begin{macrocode}
+\renewcommand*{\sloppy}{}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\fussy}
+% \begin{macrocode}
+\renewcommand*{\fussy}{}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\pagenumbering} * \marg{commands}
+% \begin{macrocode}
+\RenewDocumentCommand{\pagenumbering}{s m}{}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \section{\HTML\ tags, spans, divs, elements}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% \subsection{Mapping \LaTeX\ sections to \HTML\ sections}
+%
+% \changes{v0.73}{2019/06/21}{Added \cs{book} for \pkg{memoir}.}
+% \begin{macrocode}
+\newcommand*{\LWR@tagtitle}{h1}
+\newcommand*{\LWR@tagtitleend}{/h1}
+\newcommand*{\LWR@tagbook}{div class="book"}
+\newcommand*{\LWR@tagbookend}{/div}
+\newcommand*{\LWR@tagpart}{h2}
+\newcommand*{\LWR@tagpartend}{/h2}
+\newcommand*{\LWR@tagchapter}{h3}
+\newcommand*{\LWR@tagchapterend}{/h3}
+\newcommand*{\LWR@tagsection}{h4}
+\newcommand*{\LWR@tagsectionend}{/h4}
+\newcommand*{\LWR@tagsubsection}{h5}
+\newcommand*{\LWR@tagsubsectionend}{/h5}
+\newcommand*{\LWR@tagsubsubsection}{h6}
+\newcommand*{\LWR@tagsubsubsectionend}{/h6}
+\newcommand*{\LWR@tagparagraph}{span class="paragraph"}
+\newcommand*{\LWR@tagparagraphend}{/span}
+\newcommand*{\LWR@tagsubparagraph}{span class="subparagraph"}
+\newcommand*{\LWR@tagsubparagraphend}{/span}
+
+\newcommand*{\LWR@tagregularparagraph}{p}
+% \end{macrocode}
+
+
+
+% \subsection{Babel-French tag modifications}
+
+% \changes{v0.34}{2017/08/03}{\pkg{babel-french}: Adds fixed-width \HTML\ spaces to punctuation.}
+% \changes{v0.36}{2017/08/15}{\pkg{babel-french}: Adjustements for French variants,
+% load order, footnotes, ellipses.}
+% \changes{v0.37}{2017/08/19}{\pkg{babel-french}: Adjustment for load order.}
+% \changes{v0.45}{2017/12/29}{\pkg{babel-french}: Robust commands.}
+%
+% Adjust \pkg{babel-french} for \HTML\ spaces.
+% So far, this only works for \prog{pdflatex} and \prog{xelatex}.
+%
+% \credits{Daniel Flipo}
+%
+% \begin{macrocode}
+\providecommand*{\LWR@FBcancel}{}
+
+\AtBeginDocument{%
+\@ifundefined{frenchbsetup}%
+{}%
+{%
+ \frenchbsetup{FrenchFootnotes=false}%
+% \end{macrocode}
+% ^^A OR: redefine \insertfootnotemarkFB?
+% \begin{macrocode}
+%
+ \LetLtxMacro\LWR@FBcancel\NoAutoSpacing%
+ \renewrobustcmd*{\FBcolonspace}{%
+ \begingroup%
+ \LWR@FBcancel%
+ \LWR@origampersand{}nbsp;%
+ \endgroup%
+ }%
+ \renewrobustcmd*{\FBthinspace}{%
+ \begingroup%
+ \LWR@FBcancel%
+ \LWR@origampersand\LWR@origpound{}x202f;% \,
+ \endgroup%
+ }%
+ \renewrobustcmd*{\FBguillspace}{%
+ \begingroup%
+ \LWR@FBcancel%
+ \LWR@origampersand{}nbsp;% ~, for \og xyz \fg{}
+ \endgroup%
+ }%
+ \DeclareDocumentCommand{\FBmedkern}{}{%
+ \begingroup%
+ \LWR@FBcancel%
+ \LWR@origampersand\LWR@origpound{}x202f;% \,
+ \endgroup%
+ }%
+ \DeclareDocumentCommand{\FBthickkern}{}{%
+ \begingroup%
+ \LWR@FBcancel%
+ \LWR@origampersand{}nbsp;% ~
+ \endgroup%
+ }%
+ \renewrobustcmd*{~}{\HTMLentity{nbsp}}% was overwritten by babel-french
+ \ifFBunicode%
+ \else%
+ \DeclareTextSymbol{\FBtextellipsis}{LY1}{133}%
+ \DeclareTextCommandDefault{\FBtextellipsis}{\textellipsis\xspace}%
+ \fi%
+}%
+}
+% \end{macrocode}
+
+
+% \subsection{\HTML\ output formatting}
+%
+% Helps format the output \HTML\ code for human readability.
+%
+% \begin{macro}{\LWR@indentHTML} Newline and indent the output \HTML\ code.
+% \changes{v0.66}{2019/02/01}{Added.}
+% \begin{macrocode}
+\newcommand*{\LWR@indentHTML}{%
+ \LWR@orignewline\LWR@origrule{2em}{0pt}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@indentHTMLtwo} Newline and indent the output \HTML\ code.
+% \changes{v0.73}{2019/06/26}{Added.}
+% \begin{macrocode}
+\newcommand*{\LWR@indentHTMLtwo}{%
+ \LWR@orignewline\LWR@origrule{4em}{0pt}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{\HTML\ tags}
+
+% \begin{macro}{\LWR@htmltagc} \marg{tag}
+% Break ligatures and use upright apostrophes in \HTML\ tags.
+%
+% \cs{protect} is in case the tag appears in \TOC, \LOF, \LOT.
+% \begin{macrocode}
+\newcommand*{\LWR@htmltagc}[1]{%
+\LWR@traceinfo{LWR@htmltagc !\detokenize{#1}!}%
+\begingroup%
+\LWR@FBcancel%
+\ifmmode\else\protect\LWR@origttfamily\fi%
+\protect\LWR@origtextless%
+\LWR@isolate{#1}%
+\protect\LWR@origtextgreater%
+\endgroup%
+}
+% \end{macrocode}
+% \end{macro}
+%
+
+
+% \begin{environment}{LWR@nestspan} Disable \env{minipage}, \cs{parbox},
+% and \HTML\ \element{div}s inside a \element{span}.
+%
+% |\begin{LWR@nestspan}| must follow the opening \element{span} tag to allow
+% \watchout
+% a paragraph to start if the span is at the beginning of a new paragraph.
+%
+% |\end{LWR@nestspan}| must follow the \element{/span} or a \element{p} may appear
+% \watchout
+% inside the span.
+%
+% \changes{v0.20}{2016/12/24}{Fix: Minipages inside a span.}
+% \changes{v0.34}{2017/07/29}{Fix: Minipages, BlocksClass, and lists inside a span.}
+% \changes{v0.44}{2017/11/15}{Added \env{list} and \env{trivlist}.}
+% \changes{v0.70}{2019/04/02}{Improved \env{minipage}, \cs{parbox} inside a span.}
+% \changes{v0.73}{2019/06/23}{Fix: \env{quote}, \env{quotation} inside a span.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@nestspanitem}{%
+\if@newlist\else{\LWR@htmltagc{br /}}\fi%
+\LWR@origitem%
+}
+
+\newenvironment*{LWR@nestspan}
+{%
+\LWR@traceinfo{LWR@nestspan starting}%
+\ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
+{%
+ \LWR@traceinfo{LWR@nestspan: inside a lateximage}%
+}%
+{% not in a lateximage
+ \LWR@traceinfo{LWR@nestspan: NOT inside a lateximage}%
+ \addtocounter{LWR@spandepth}{1}%
+ \RenewDocumentEnvironment{minipage}{O{t} o O{t} m}%
+ {\LWR@subhtmlelementclass{span}{inlineminipage}}%
+ {\LWR@htmltagc{/span}}%
+ \RenewDocumentEnvironment{BlockClass}{o m}{}{}%
+ \renewcommand{\BlockClassSingle}[2]{##2}%
+ \renewcommand{\LWR@forcenewpage}{}%
+ \renewcommand{\LWR@liststart}{%
+ \let\item\LWR@nestspanitem%
+ }%
+ \renewcommand{\LWR@listend}{\LWR@htmltagc{br /}\LWR@htmltagc{br /}}%
+ \renewenvironment{quote}{\LWR@htmltagc{br /}}{\LWR@htmltagc{br /}}%
+ \renewenvironment{quotation}{\LWR@htmltagc{br /}}{\LWR@htmltagc{br /}}%
+}% not in a lateximage
+\LWR@traceinfo{LWR@nestspan starting: done}%
+}% starting env
+{% ending env
+\LWR@traceinfo{LWR@nestspan ending}%
+\ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
+{}%
+{\addtocounter{LWR@spandepth}{-1}}%
+\LWR@traceinfo{LWR@nestspan ending: done}%
+}
+
+\AfterEndEnvironment{LWR@nestspan}{\global\let\par\LWR@closeparagraph}
+% \end{macrocode}
+% \end{environment}
+
+
+% \begin{macro}{\LWR@htmlspan} \marg{tag} \marg{text}
+%
+% \cs{LWR@spandepth} is used to ensure that paragraph tags are not
+% generated inside a span. The exact sequence of when to add and subtract
+% \watchout
+% the counter is important to correctly handle the paragraph tags before
+% and after the span.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@htmlspan}{m +m}{%
+\LWR@ensuredoingapar%
+\LWR@htmltagc{#1}%
+\begin{LWR@nestspan}%
+#2%
+\LWR@htmltagc{/#1}%
+\end{LWR@nestspan}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@htmlspanclass} \oarg{style} \marg{class} \marg{text}
+%
+% \changes{v0.34}{2017/08/02}{Moved optional argument in front of mandatory.}
+%
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@htmlspanclass}{o m +m}{%
+\LWR@traceinfo{LWR@htmlspanclass |#1|#2|}%
+\LWR@ensuredoingapar%
+\LWR@subhtmlelementclass{span}[#1]{#2}%
+\begin{LWR@nestspan}%
+#3%
+\LWR@htmltagc{/span}%
+\LWR@traceinfo{LWR@htmlspanclass done}%
+\end{LWR@nestspan}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@htmltag} \marg{tag}
+
+% Print an \HTML\ tag: \textless{}tag\textgreater{}
+% \begin{macrocode}
+\newcommand*{\LWR@htmltag}[1]{%
+% \LWR@traceinfo{LWR@htmltagb !\detokenize{#1}!}%
+\LWR@htmltagc{#1}%
+% \LWR@traceinfo{LWR@htmltagb: done}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \subsection{Block tags and comments}
+
+% In the following, \cs{origttfamily} breaks ligatures, which may not be used for \HTML\ codes:
+%
+% \begin{macro}{\LWR@htmlopencomment}
+% \begin{macro}{\LWR@htmlclosecomment}
+% \changes{v0.47}{2018/01/25}{Add \cs{mbox} to prevent line breaks.}
+% \changes{v0.63}{2018/11/30}{Fix: Break ligature for \pkg{luatexko}.}
+% \begin{macrocode}
+\newcommand*{\LWR@htmlopencomment}{%
+{%
+% \LWR@traceinfo{LWR@htmlopencomment}%
+\begingroup%
+\LWR@FBcancel%
+\ifmmode\else\protect\LWR@origttfamily\fi%
+\LWR@print@mbox{\LWR@origtextless{}!-\/-}%
+\endgroup%
+}%
+}
+
+\newcommand*{\LWR@htmlclosecomment}{%
+{%
+% \LWR@traceinfo{LWR@htmlclosecomment}%
+\begingroup%
+\LWR@FBcancel%
+\ifmmode\else\protect\LWR@origttfamily\fi%
+\LWR@print@mbox{-\/-\LWR@origtextgreater}%
+\endgroup%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+
+% \begin{macro}{\LWR@htmlcomment} \marg{comment}
+%
+% \changes{v0.28}{2017/04/13}{Breaks ligatures in \HTML\ comments.}
+%
+% \begin{macrocode}
+\newcommand{\LWR@htmlcomment}[1]{%
+\LWR@htmlopencomment{}%
+{%
+\LWR@origttfamily% break ligatures
+#1%
+}%
+\LWR@htmlclosecomment{}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@htmlblockcomment} \marg{comment}
+% \begin{macrocode}
+\newcommand{\LWR@htmlblockcomment}[1]
+{\LWR@stoppars\LWR@htmlcomment{#1}\LWR@startpars}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@htmlblocktag} \marg{tag} print a stand-alone \HTML\ tag
+% \begin{macrocode}
+\newcommand*{\LWR@htmlblocktag}[1]{%
+\LWR@stoppars%
+\LWR@htmltag{#1}%
+\LWR@startpars%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \subsection{Div class and element class}
+
+% \begin{macro}{\LWR@subhtmlelementclass} \marg{element} \oarg{style} \marg{class}
+%
+% Factored and reused in several places.
+%
+% The trailing spaces allow more places for a line break.
+%
+% The use of \cs{textquotedbl} instead of |"| provides improved
+% compatibility with \pkg{xeCJK}.
+%
+% \changes{v0.20}{2017/01/17}{Factored code.}
+% \changes{v0.34}{2017/08/02}{Moved optional argument in front of mandatory.}
+% \changes{v0.63}{2018/11/24}{Fix for \pkg{xeCJK}.}
+% \changes{v0.66}{2019/02/02}{Improved \HTML\ formatting.}
+%
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@subhtmlelementclass}{m O{} m}{%
+\LWR@traceinfo{LWR@subhtmlelementclass !#1!#2!#3!}%
+\ifblank{#2}%
+{% empty option
+ \LWR@htmltag{%
+ #1 % space
+ class=\textquotedbl#3\textquotedbl\ % space
+ }%
+}%
+{% non-empty option
+ \LWR@htmltag{%
+ #1\LWR@indentHTML%
+ class=\textquotedbl#3\textquotedbl\LWR@indentHTML%
+ style=\textquotedbl#2\textquotedbl\LWR@orignewline%
+ }%
+}%
+\LWR@traceinfo{LWR@subhtmlelementclass done}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@htmlelementclass} \marg{element} \marg{class} \oarg{style}
+%
+% \changes{v0.20}{2017/01/17}{Added optional style.}
+% \changes{v0.34}{2017/08/02}{Moved optional argument in front of mandatory.}
+% \changes{v0.73}{2019/06/26}{Vertical space.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@htmlelementclass}{m o m}{%
+\LWR@stoppars%
+\LWR@forceemptyline%
+\LWR@subhtmlelementclass{#1}[#2]{#3}%
+\LWR@startpars%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@htmlelementclassend} \marg{element} \marg{class}
+% \begin{macrocode}
+\newcommand*{\LWR@htmlelementclassend}[2]{%
+\LWR@stoppars%
+\LWR@htmltag{/#1}%
+\ifbool{HTMLDebugComments}{%
+ \LWR@htmlcomment{End of #1 ``#2''}%
+}{}%
+\LWR@startpars%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@htmldivclass} \oarg{style} \marg{class}
+%
+% \changes{v0.20}{2017/01/17}{Added optional style.}
+% \changes{v0.34}{2017/08/02}{Moved optional argument in front of mandatory.}
+%
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@htmldivclass}{o m}{%
+\LWR@htmlelementclass{div}[#1]{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@htmldivclassend} \marg{class}
+% \begin{macrocode}
+\newcommand*{\LWR@htmldivclassend}[1]{%
+\LWR@htmlelementclassend{div}{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \subsection{Single-line elements}
+
+% A single-line element, without a paragraph tag for the line of text:
+
+% \begin{macro}{\LWR@htmlelementclassline}
+% \marg{element} \oarg{style} \marg{class} \marg{text}
+%
+% \changes{v0.34}{2017/08/02}{Moved optional argument in front of mandatory.}
+% \changes{v0.73}{2019/06/26}{Vertical space.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@htmlelementclassline}{m o m +m}{%
+\LWR@stoppars
+\LWR@forceemptyline%
+\LWR@subhtmlelementclass{#1}[#2]{#3}%
+#4%
+\LWR@htmltag{/#1}
+\LWR@startpars
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+
+
+% \subsection{\HTMLfive\ semantic elements}
+
+
+% \begin{macro}{\LWR@htmlelement} \marg{element}
+% \begin{macrocode}
+\newcommand*{\LWR@htmlelement}[1]{%
+\LWR@htmlblocktag{#1}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@htmlelementend} \marg{element}
+% \begin{macrocode}
+\newcommand*{\LWR@htmlelementend}[1]{%
+\LWR@stoppars
+\LWR@htmltag{/#1}
+\LWR@startpars
+}
+
+\end{warpHTML}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \subsection{High-level block and inline classes}
+% \label{sec:highlevelclasses}
+%
+
+% These are high-level commands which allow the creation of
+% arbitrary block or inline
+% sections which may be formatted with \CSS.
+%
+% Nullified versions are provided for print mode.
+%
+% For other direct-formatting commands, see \cref{sec:directformatting}.
+%
+%
+% \begin{environment}{BlockClass} \oarg{style} \marg{class} \quad
+% High-level interface for \element{div} classes.
+%
+% \qquad Ex: |\begin{BlockClass}{class}| text |\end{BlockClass}|
+%
+% \changes{v0.20}{2017/01/03}{Renamed from "blockclass".}
+% \changes{v0.20}{2017/01/17}{Added optional style.}
+% \changes{v0.34}{2017/08/02}{Moved optional argument in front of mandatory.}
+% \changes{v0.57}{2018/05/28}{Improved print/\HTML\ output selection.}
+%
+% \codeprint
+% \begin{macrocode}
+\begin{warpprint}
+\NewDocumentEnvironment{BlockClass}{o m}{}{}%
+\end{warpprint}
+% \end{macrocode}
+% \end{environment}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+\NewDocumentEnvironment{LWR@print@BlockClass}{o m}{}{}%
+\NewDocumentEnvironment{LWR@HTML@BlockClass}{o m}%
+{%
+ \LWR@htmldivclass[#1]{#2}%
+}
+{\LWR@htmldivclassend{#2}}
+
+\LWR@formattedenv{BlockClass}
+\end{warpHTML}
+% \end{macrocode}
+%
+%
+%
+% \begin{macro}{\BlockClassSingle} \marg{class} \marg{text} \quad
+% A single-line \element{div}, without a paragraph tag for the line of text.
+%
+% \changes{v0.20}{2017/01/03}{Renamed from "LWR@htmldivclassline".}
+% \changes{v0.57}{2018/05/28}{Improved print/\HTML\ output selection.}
+%
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+\newcommand{\BlockClassSingle}[2]{#2}
+\end{warpall}
+% \end{macrocode}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+\newcommand{\LWR@HTML@BlockClassSingle}[2]{%
+\LWR@htmlelementclassline{div}{#1}{#2}%
+}
+
+\LWR@formatted{BlockClassSingle}
+\end{warpHTML}
+% \end{macrocode}
+%
+%
+% \end{macro}
+
+
+% \begin{macro}{\InlineClass} \parg{WP style} \oarg{style} \marg{class} \marg{text}
+%
+% High-level interface for inline span classes.
+%
+% \parg{WP style} is \CSS\ styling to add when formatting for a word processor import.
+%
+% \oarg{style} is the \CSS\ styling to add when not formatting for a word processor.
+%
+% \changes{v0.20}{2017/01/03}{Renamed from "inlineclass".}
+% \changes{v0.34}{2017/08/02}{Moved optional argument in front of mandatory.}
+% \changes{v0.57}{2018/05/28}{Improved print/\HTML\ output selection.}
+% \changes{v0.62}{2018/10/24}{Added optional word-processing style. Replaces \cs{LWR@HTMLtextstyle}.}
+%
+% \codeprint
+% \begin{macrocode}
+\begin{warpprint}
+\NewDocumentCommand{\InlineClass}{D{(}{)}{} o m +m}{#4}%
+\end{warpprint}
+% \end{macrocode}
+% \end{macro}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+\NewDocumentCommand{\LWR@print@InlineClass}{D{(}{)}{} o m +m}{#4}%
+
+\NewDocumentCommand{\LWR@HTML@InlineClass}{D{(}{)}{} o m +m}{%
+\ifbool{FormatWP}{%
+ \LWR@htmlspanclass[#1]{#3}{#4}%
+}{%
+ \LWR@htmlspanclass[#2]{#3}{#4}%
+}%
+}
+
+\LWR@formatted{InlineClass}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \begin{environment}{LWR@BlockClassWP} \marg{WPstyle} \marg{HTMLstyle} \marg{class} \quad
+% Low-level interface for \element{div} classes with an automatic float ID.
+% These are often used when |\ifbool{FormatWP}|.
+%
+% The use of \cs{textquotedbl} instead of |"| provides improved
+% compatibility with \pkg{xeCJK}.
+%
+% \changes{v0.42}{2017/10/26}{Added to factor code.}
+% \changes{v0.47}{2018/01/26}{Fix: Line wrap at \HTML\ hyphen.}
+% \changes{v0.57}{2018/05/28}{Improved print/\HTML\ output selection.}
+% \changes{v0.63}{2018/11/24}{Fix for \pkg{xeCJK}.}
+%
+% \codeprint
+% \begin{macrocode}
+\begin{warpprint}
+\NewDocumentEnvironment{LWR@BlockClassWP}{m m m}{}{}%
+\end{warpprint}
+% \end{macrocode}
+% \end{environment}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+\NewDocumentEnvironment{LWR@print@LWR@BlockClassWP}{m m m}{}{}%
+\NewDocumentEnvironment{LWR@HTML@LWR@BlockClassWP}{m m m}%
+{%
+\LWR@stoppars%
+\ifbool{FormatWP}%
+{%
+ \addtocounter{LWR@thisautoidWP}{1}%
+% \end{macrocode}
+% \changes{v0.65}{2018/12/21}{Fix space between class and id.}
+% \begin{macrocode}
+ \LWR@htmltag{%
+ div class=\textquotedbl#3\textquotedbl\ % space
+ id=\textquotedbl%
+ \LWR@print@mbox{autoidWP-\arabic{LWR@thisautoidWP}}%
+ \textquotedbl%
+ \ifblank{#1}{}{ style=\textquotedbl#1\textquotedbl}%
+ }%
+}% FormatWP
+{% not FormatWP
+ \LWR@htmltag{%
+ div class=\textquotedbl#3\textquotedbl%
+ \ifblank{#2}{}{ style=\textquotedbl#2\textquotedbl}%
+ }%
+}% not FormatWP
+\LWR@startpars%
+}
+{\LWR@htmldivclassend{#3}}
+
+\LWR@formattedenv{LWR@BlockClassWP}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \subsection{Closing \HTML\ tags}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% Sections H1, H2, etc.\ do not need a closing \HTML\ tag, but we add a comment for readability:
+% \begin{macrocode}
+\newcommand*{\LWR@printclosebook}
+ {\ifbool{HTMLDebugComments}{\LWR@htmlcomment{Closing book}}{}}
+\newcommand*{\LWR@printclosepart}
+ {\ifbool{HTMLDebugComments}{\LWR@htmlcomment{Closing part}}{}}
+\newcommand*{\LWR@printclosechapter}
+ {\ifbool{HTMLDebugComments}{\LWR@htmlcomment{Closing chapter}}{}}
+\newcommand*{\LWR@printclosesection}
+ {\ifbool{HTMLDebugComments}{\LWR@htmlcomment{Closing section}}{}}
+\newcommand*{\LWR@printclosesubsection}
+ {\ifbool{HTMLDebugComments}{\LWR@htmlcomment{Closing subsection}}{}}
+\newcommand*{\LWR@printclosesubsubsection}
+ {\ifbool{HTMLDebugComments}{\LWR@htmlcomment{Closing subsubsection}}{}}
+\newcommand*{\LWR@printcloseparagraph}
+ {\ifbool{HTMLDebugComments}{\LWR@htmlcomment{Closing paragraph}}{}}
+\newcommand*{\LWR@printclosesubparagraph}
+ {\ifbool{HTMLDebugComments}{\LWR@htmlcomment{Closing subparagraph}}{}}
+% \end{macrocode}
+
+% Lists require closing \HTML\ tags:
+% \begin{macrocode}
+\newcommand*{\LWR@printcloselistitem}
+ {\LWR@htmltag{/li}}
+\newcommand*{\LWR@printclosedescitem}
+ {\LWR@htmltag{/dd}}
+\newcommand*{\LWR@printcloseitemize}
+ {\LWR@htmltag{/ul}}
+\newcommand*{\LWR@printcloseenumerate}
+ {\LWR@htmltag{/ol}}
+\newcommand*{\LWR@printclosedescription}
+ {\LWR@htmltag{/dl}}
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+
+
+
+% \section{Paragraph handling}
+% \label{sec:parhanding}
+%
+% These commands generate the \HTML\ paragraph tags when allowed and
+% required.
+%
+% Paragraph tags are or are not allowed depending on many conditions.
+% \Cref{sec:parstartstop} has high-level commands which allow
+% paragraph-tag generation to start/stop.
+% Even when allowed (\cs{LWR@doingstartpars}),
+% tags are not generated until a \LaTeX{} paragraph
+% is being used (\cs{LWR@doingapar}).
+% |LWR@lateximagedepth| is used to prevent nesting tags inside
+% a |lateximage|.
+% |LWR@spandepth| is used to prevent nesting paragraph tags inside
+% a paragraph, which became important inside \cs{fbox} commands and other spans.
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% \DescribeCounter{LWR@spandepth}
+% Do not create paragraph tags inside of an \HTML\ span.
+% \begin{macrocode}
+\newcounter{LWR@spandepth}
+\setcounter{LWR@spandepth}{0}
+% \end{macrocode}
+
+
+% \DescribeBoolean{LWR@doingstartpars}
+% Tells whether paragraphs may be generated.
+% \begin{macrocode}
+\newbool{LWR@doingstartpars}
+\boolfalse{LWR@doingstartpars}
+% \end{macrocode}
+
+% \DescribeBoolean{LWR@doingapar}
+% Tells whether have actually generated and are currently processing paragraph text.
+% \begin{macrocode}
+\newbool{LWR@doingapar}
+\global\boolfalse{LWR@doingapar}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@ensuredoingapar}
+% If are about to print something visible, and
+% if allowed to start a new paragraph,
+% ensure that are |LWR@doingapar|, so that paragraph tags are placed:
+% \begin{macrocode}
+\newcommand*{\LWR@ensuredoingapar}{%
+\ifbool{LWR@doingstartpars}%
+{\global\booltrue{LWR@doingapar}}%
+{}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\PN@parnotes@auto} Redefined by \pkg{parnotes} to print
+% paragraph notes at the end of each paragraph.
+% \begin{macrocode}
+\def\PN@parnotes@auto{}%
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@openparagraph}
+% \begin{macrocode}
+\newcommand*{\LWR@openparagraph}
+{%
+% \end{macrocode}
+% See if paragraph handling is enabled:
+% \begin{macrocode}
+\ifbool{LWR@doingstartpars}%
+{% handling pars
+% \end{macrocode}
+% See if have already started a \env{lateximage} or a \element{span}.
+% If so, do not generate nested paragraph tags.
+% \begin{macrocode}
+ \ifboolexpr{
+ test {\ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}} or
+ test {\ifnumcomp{\value{LWR@spandepth}}{>}{0}}
+ }% nested par tags?
+% \end{macrocode}
+% If so: Do nothing if already started a \env{lateximage} page. Cannot nest a \env{lateximage}.
+% Also do nothing if already inside a \element{span}. Do not nest paragraph tags
+% inside a \element{span}.
+% \begin{macrocode}
+ {}% no nested par tags
+% \end{macrocode}
+% Else: No \env{lateximage} or \element{span} has been started yet,
+% so it's OK to generate paragraph tags.
+% \begin{macrocode}
+ {% yes nest par tags
+% \end{macrocode}
+% If \pkg{parnotes} is used, paragraph notes are inserted
+% before starting the next paragraph:
+% \changes{v0.56}{2018/05/09}{Added support for \pkg{parnotes}.}
+% \begin{macrocode}
+ \PN@parnotes@auto%
+% \end{macrocode}
+% The opening paragraph tag:
+% \changes{v0.66}{2019/02/02}{Improved \HTML\ formatting.}
+% \begin{macrocode}
+ \LWR@htmltagc{\LWR@tagregularparagraph}\LWR@orignewline%
+% \end{macrocode}
+% Now have started a paragraph.
+% \begin{macrocode}
+ \global\booltrue{LWR@doingapar}%
+% \end{macrocode}
+% At the endof each paragraph,
+% generate closing tag and do regular |/par| stuff.
+% (Attempting to use the \pkg{everyhook} |cr| hook
+% for \cs{LWR@closeparagraph} does not work well.)
+% \begin{macrocode}
+ \let\par\LWR@closeparagraph%
+ }% end of yes nest par tags
+}% end of handling pars
+{}% not handling pars
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@closeparagraph@br}
+%
+% Add an \HTML\ break if in a span, and not in a \env{lateximage},
+% and not in tabular metadata. Factored from \cs{LWR@closeparagraph}.
+%
+% \changes{v0.66}{2019/01/01}{Factored.}
+% \begin{macrocode}
+\newcommand*{\LWR@closeparagraph@br}
+{%
+ \ifboolexpr{
+ test {\ifnumcomp{\value{LWR@spandepth}}{>}{0}} and
+ test {\ifnumcomp{\value{LWR@lateximagedepth}}{=}{0}} and
+ not bool {LWR@intabularmetadata}
+ }%
+ {\unskip\LWR@htmltagc{br /}}%
+ {}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@closeparagraph}
+% \changes{v0.20}{2017/01/17}{No break tags in the start/end of a tabular.}
+% \changes{v0.20}{2017/01/17}{\cs{unskip} extra spaces.}
+% \changes{v0.36}{2017/08/15}{Extra \protect\HTML\ source space after paragraphs.}
+% \begin{macrocode}
+\newcommand*{\LWR@closeparagraph}
+{%
+% \LWR@traceinfo{LWR@closeparagraph}%
+% \end{macrocode}
+% See if paragraph handling is enabled:
+% \begin{macrocode}
+\ifbool{LWR@doingapar}%
+% \end{macrocode}
+% If currently in paragraph mode:
+% \begin{macrocode}
+{% handling pars
+% \end{macrocode}
+% See if already started a \env{lateximage} or a \element{span}:
+% \begin{macrocode}
+ \ifboolexpr{
+ test {\ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}} or
+ test {\ifnumcomp{\value{LWR@spandepth}}{>}{0}}
+ }%
+% \end{macrocode}
+% Add a parbreak if in a span, not in a lateximage,
+% and not in table metadata.
+% \begin{macrocode}
+ {% no nested par tags
+ \LWR@closeparagraph@br%
+ }% no nested par tags
+% \end{macrocode}
+% If have not already started a \env{lateximage} or a \element{span}:
+% \begin{macrocode}
+ {% yes nest par tags
+% \end{macrocode}
+% Print a closing tag and some extra vertical space.
+%
+% (The fill seems to be required to force the \pkg{caption}
+% package to create flush left caption text in the \HTML.)
+% \changes{v0.66}{2019/02/02}{Improved \HTML\ formatting.}
+% \changes{v0.70}{2019/03/25}{Reduced underfull \cs{hbox} warnings.}
+% \changes{v0.71}{2019/04/08}{Flush left captions.}
+% \begin{macrocode}
+ \@hspacer{\fill}% \hspace*{\fill}
+ \leavevmode\LWR@orignewline%
+ \LWR@htmltagc{/\LWR@tagregularparagraph}%
+% \end{macrocode}
+% No longer doing a paragraph:
+% \begin{macrocode}
+ \global\boolfalse{LWR@doingapar}%
+% \end{macrocode}
+% Disable the special \env{minipage} \& \cs{hspace} interaction
+% until a new minipage is found:
+% \begin{macrocode}
+ \global\boolfalse{LWR@minipagethispar}%
+% \end{macrocode}
+% If \pkg{parnotes} is used, paragraph notes are inserted
+% after ending the previous paragraph:
+% \changes{v0.56}{2018/05/09}{Added support for \pkg{parnotes}.}
+% \begin{macrocode}
+ \PN@parnotes@auto%
+ }% end of yes nest par tags
+}% end of handling pars
+% \end{macrocode}
+% Add a parbreak if in a span, not in a lateximage,
+% and not in table metadata.
+% \changes{v0.66}{2019/01/01}{Fix: Combined span, \env{tabular}, and \env{lateximage}.}
+% \begin{macrocode}
+{% not handling pars
+ \LWR@closeparagraph@br%
+}% not handling pars
+% \end{macrocode}
+% In most cases, finish with a \LaTeX\ \cs{par}, but in the case
+% of paragraphs between lines in a tabular fetch the next token instead:
+% \changes{v0.46}{2018/01/19}{Fix: Tabular empty lines.}
+% \begin{macrocode}
+\ifboolexpr{%
+ not bool {LWR@doingapar} and
+ test {\ifnumcomp{\value{LWR@tabulardepth}}{>}{0}} and
+ test {
+ \ifnumcomp{\value{LWR@tabulardepth}}{=}{\value{LWR@tabularpardepth}}
+ } and
+ bool {LWR@intabularmetadata} and
+ not bool {LWR@tableparcell} and
+ test {\ifnumcomp{\value{LWR@lateximagedepth}}{=}{0}}
+}%
+{%
+ \LWR@getmynexttoken%
+}{%
+ \LWR@origpar%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \section{Paragraph start/stop handling}
+% \label{sec:parstartstop}
+% These commands allow/disallow the generation of \HTML\
+% paragraph tags.
+%
+% \Cref{sec:parhanding} has the commands which actually generate
+% the tags.
+%
+% The |everyhook| package is used to generate the opening
+% paragraph tags. The closing tags are generated by \cs{par}.
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@startpars}
+% Begin handling \HTML\ paragraphs.
+% This allows an \HTML\ paragraph to start, but one has not yet begun.
+% \begin{macrocode}
+\newcommand*{\LWR@startpars}%
+{%
+% \LWR@traceinfo{LWR@startpars}%
+% \end{macrocode}
+% Ignore if inside a span:
+% \begin{macrocode}
+\ifnumcomp{\value{LWR@spandepth}}{>}{0}%
+{}%
+{%
+% \end{macrocode}
+% See if currently handling \HTML\ paragraphs:
+% \begin{macrocode}
+ \ifbool{LWR@doingstartpars}%
+% \end{macrocode}
+% If already in paragraph mode, do nothing.
+% \begin{macrocode}
+ {}%
+% \end{macrocode}
+% If not currently in paragraph mode:
+% \begin{macrocode}
+ {%
+% \end{macrocode}
+% At the start of each paragraph, generate an opening tag:
+% \gindex{par=\cs{par}>hooks}
+% \begin{macrocode}
+ \PushPreHook{par}{\LWR@openparagraph}%
+% \end{macrocode}
+% At the end of each paragraph, generate closing tag then do regular |/par| actions:
+% \begin{macrocode}
+ \let\par\LWR@closeparagraph
+
+ }% an intentionally blank line
+% \end{macrocode}
+% Are now handling paragraphs, but have not yet actually started one:
+% \begin{macrocode}
+ \global\setbool{LWR@doingstartpars}{true}%
+% \end{macrocode}
+% No <par> tag yet to undo:
+% \begin{macrocode}
+ \global\boolfalse{LWR@doingapar}%
+}% nestspan
+% \LWR@traceinfo{LWR@startpars: done}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@stoppars}
+% Stop handling \HTML\ paragraphs.
+% Any currently open \HTML\ paragraph is closed, and no more will be opened.
+%
+% \changes{v0.36}{2017/08/15}{Extra \protect\HTML\ source space after paragraphs.}
+% \begin{macrocode}
+\newcommand*{\LWR@stoppars}%
+{%
+% \end{macrocode}
+% Ignore if inside a span:
+% \begin{macrocode}
+\ifnumcomp{\value{LWR@spandepth}}{>}{0}%
+{}%
+{%
+% \end{macrocode}
+% See if currently handling \HTML\ paragraphs:
+% \begin{macrocode}
+ \ifbool{LWR@doingapar}%
+% \end{macrocode}
+% if currently in an \HTML\ paragraph:
+% \begin{macrocode}
+ {%
+% \end{macrocode}
+% Print a closing tag:
+% \changes{v0.66}{2019/02/02}{Improved \HTML\ formatting.}
+% \begin{macrocode}
+ \leavevmode\LWR@orignewline%
+ \LWR@htmltagc{/\LWR@tagregularparagraph}%
+ \LWR@orignewline%
+% \end{macrocode}
+% No longer have an open \HTML\ paragraph:
+% \begin{macrocode}
+ \global\boolfalse{LWR@doingapar}%
+% \end{macrocode}
+% Disable the special \env{minipage} \& \cs{hspace} interaction
+% until a new minipage is found:
+% \changes{v0.71}{2019/04/08}{Reduced underfull \cs{hbox} warnings.}
+% \begin{macrocode}
+ \global\boolfalse{LWR@minipagethispar}
+ }%
+% \end{macrocode}
+% If was not in an \HTML\ paragraph:
+% \begin{macrocode}
+ {}%
+% \end{macrocode}
+% See if currently allowing \HTML\ paragraphs:
+% \begin{macrocode}
+ \ifbool{LWR@doingstartpars}%
+% \end{macrocode}
+% If so: clear the |par| hook to no longer catch paragraphs:
+% \begin{macrocode}
+ {\ClearPreHook{par}}%
+% \end{macrocode}
+% Else: Do nothing:
+% \begin{macrocode}
+ {}%
+% \end{macrocode}
+% No longer in paragraph mode:
+% \begin{macrocode}
+ \global\setbool{LWR@doingstartpars}{false}%
+% \end{macrocode}
+% No \element{p} tag to undo:
+% \begin{macrocode}
+ \global\boolfalse{LWR@doingapar}%
+}% nestspan
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+% \section{Indentfirst}
+%
+% \DescribePackage{indentfirst}
+% \pkg{indentfirst} redefines \cs{@afterindentfalse} to be \cs{@afterindenttrue}.
+% This is reversed \cs{AtBeginDocument} here.
+%
+% \changes{v0.66}{2019/02/04}{Added support for \pkg{indentfirst}.}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{macrocode}
+\AtBeginDocument{
+\def\@afterindentfalse{\let\if@afterindent\iffalse}
+\@afterindentfalse
+}
+\let\LWR@afterindent@syntaxhighlight\fi% syntax highlighting
+% \end{macrocode}
+
+
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \section{Page headers and footers}
+
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+
+% In the following, catcode is manually changed back and forth
+% without groups, since new macros are being defined which must
+% not be contained within the groups.
+% \begin{macrocode}
+\newcommand{\LWR@firstpagetop}{} % for the home page alone
+\newcommand{\LWR@pagetop}{} % for all other pages
+\newcommand{\LWR@pagebottom}{}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\HTMLFirstPageTop} \marg{text and logos}
+%
+% \changes{v0.30}{2017/04/28}{Renamed from \cs{SetFirstPageTop}.}
+%
+% \begin{macrocode}
+\newcommand{\HTMLFirstPageTop}[1]{%
+ \renewcommand{\LWR@firstpagetop}{#1}%
+}
+% \end{macrocode}
+%
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\HTMLPageTop} \marg{text and logos}
+%
+% \changes{v0.30}{2017/04/28}{Renamed from \cs{SetPageTop}.}
+%
+% \begin{macrocode}
+\newcommand{\HTMLPageTop}[1]{%
+ \renewcommand{\LWR@pagetop}{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\HTMLPageBottom} \marg{text and logos}
+%
+% \changes{v0.30}{2017/04/28}{Renamed from \cs{SetPageBottom}.}
+%
+% \begin{macrocode}
+\newcommand{\HTMLPageBottom}[1]{%
+ \renewcommand{\LWR@pagebottom}{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+
+% \section{\CSS}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{macro}{\LWR@currentcss} The \CSS\ filename to use.
+% This may be changed mid-document using \cs{CSSFilename},
+% allowing different \CSS\ files to be used
+% for different sections of the document.
+
+% \begin{macrocode}
+\newcommand*{\LWR@currentcss}{lwarp.css}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\CSSFilename} \marg{new-css-filename.css} \qquad
+% Assigns the \CSS\ file to be used by the following \HTML\ pages.
+%
+% \changes{v0.30}{2017/04/28}{Renamed from \cs{NewCSS}.}
+% \changes{v0.45}{2017/12/29}{Improved filenames with underscores.}
+%
+% \begin{macrocode}
+\newcommand*{\CSSFilename}[1]{%
+\renewcommand*{\LWR@currentcss}{#1}%
+\@onelevel@sanitize\LWR@currentcss%
+}
+
+\end{warpHTML}
+% \end{macrocode}
+%
+% \codeprint
+% \begin{macrocode}
+\begin{warpprint}
+\newcommand*{\CSSFilename}[1]{}
+\end{warpprint}
+% \end{macrocode}
+% \end{macro}
+
+
+
+
+
+% \section{MathJax script}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{macro}{\LWR@mathjaxfilename}
+% \DescribeDefault{\filenm{lwarp_mathjax.txt}}
+% The MathJax script filename to use.
+% This file is copied into the head of each \HTML\ page.
+% This may be changed mid-document using \cs{MathJaxFilename},
+% allowing the use of a custom MathJax script, such as for a local repository,
+% or different MathJax script files to be used for different sections of the document.
+%
+% \changes{v0.70}{2019/03/24}{Added.}
+% \begin{macrocode}
+\newcommand*{\LWR@mathjaxfilename}{lwarp_mathjax.txt}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\MathJaxFilename} \marg{filename} \qquad
+% Assigns the MathJax script file to be used by the following \HTML\ pages.
+%
+% \changes{v0.70}{2019/03/24}{Added.}
+% \begin{macrocode}
+\newcommand*{\MathJaxFilename}[1]{%
+ \renewcommand*{\LWR@mathjaxfilename}{#1}%
+ \@onelevel@sanitize\LWR@mathjaxfilename%
+}
+
+\end{warpHTML}
+% \end{macrocode}
+%
+% \codeprint
+% \begin{macrocode}
+\begin{warpprint}
+\newcommand*{\MathJaxFilename}[1]{}
+\end{warpprint}
+% \end{macrocode}
+% \end{macro}
+
+
+% \section{Title, \HTML\ meta author, \HTML\ meta description}
+%
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+% \begin{macro}{\title} \marg{title}
+% Modified to remember \cs{thetitle}, which is used to set the \HTML\ page titles.
+% \gindex{HTML>meta tag>title}
+% \gindex{title>HTML meta tag}
+% \gindex{meta tag, HTML>title}
+% \changes{v0.44}{2017/11/18}{Added \cs{thetitle}.}
+% \begin{macrocode}
+\let\LWR@origtitle\title
+
+\renewcommand*{\title}[1]{%
+ \LWR@origtitle{#1}%
+ \begingroup%
+ \renewcommand{\thanks}[1]{}%
+ \protected@xdef\thetitle{#1}%
+ \endgroup%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+%
+%
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+%
+% \begin{macro}{\HTMLTitle} \marg{Titlename} \qquad
+% The Title to place into an \HTML\ meta tag.
+% The default is to use the document \cs{title}'s setting.
+%
+% \gindex{HTML>meta tag>title}
+% \gindex{title>HTML meta tag}
+% \gindex{meta tag, HTML>title}
+%
+% \changes{v0.44}{2017/11/18}{Added.}
+% \changes{v0.73}{2019/06/24}{Added default title if none specified.}
+% \begin{macrocode}
+\providecommand{\thetitle}{\BaseJobname}
+
+\newcommand{\theHTMLTitle}{\thetitle}
+
+\newcommand{\HTMLTitle}[1]{\renewcommand{\theHTMLTitle}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\HTMLAuthor} \marg{authorname} \qquad
+% The author to place into an \HTML\ meta tag.
+% If none given, the default is \cs{theauthor}, which is empty unless
+% the \pkg{titling} package is used.
+%
+% \gindex{HTML>meta tag>author}
+% \gindex{author>HTML meta tag}
+% \gindex{meta tag, HTML>author}
+%
+% \changes{v0.28}{2017/04/06}{Added \cs{HTMLauthor}. (Renamed in v0.30.)}
+% \changes{v0.30}{2017/04/28}{Renamed from \cs{HTMLauthor}.}
+% \changes{v0.33}{2017/06/18}{Fix: Provides empty default author if none given.}
+%
+% \begin{macrocode}
+\providecommand{\theauthor}{}
+
+\newcommand{\theHTMLAuthor}{\theauthor}
+
+\newcommand{\HTMLAuthor}[1]{\renewcommand{\theHTMLAuthor}{#1}}
+% \end{macrocode}
+% \end{macro}
+
+
+% This is placed inside an \HTML\ meta tag at the start of each file.
+% This may be changed mid-document using \cs{HTMLDescription},
+% allowing different \HTML\ descriptions to be used
+% for different sections of the document.
+%
+% Do not use double quotes, and do not exceed 150 characters.
+% \trouble[HTML author]{HTMLAuthor=\cs{HTMLAuthor}}
+% \trouble{HTML>author}
+
+% \begin{macro}{\HTMLDescription} \marg{New \HTML\ meta description.} \qquad
+% Assigns the \HTML\ file's description meta tag.
+%
+% \gindex{HTML>meta tag>description}
+% \gindex{description>HTML meta tag}
+% \gindex{meta tag, HTML>description}
+%
+% \changes{v0.20}{2016/06/27}{Added \cs{NewHTMLdescription}. (Renamed in v0.30.)}
+% \changes{v0.30}{2017/04/28}{Renamed from \cs{NewHTMLdescription}.}
+%
+% \begin{macrocode}
+\newcommand{\LWR@currentHTMLDescription}{}
+
+\newcommand{\HTMLDescription}[1]{%
+\renewcommand{\LWR@currentHTMLDescription}{#1}
+}
+
+\end{warpall}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \section{Footnotes}
+% \label{sec:footnotes}
+%
+% \gindex{footnotes}
+%
+% \limitsfootnotes
+%
+% \changes{v0.26}{2017/03/28}{Footnotes now are \LaTeX\ boxes instead of pagenotes.}
+%
+% Several kinds of footnotes are used: in a regular page, in a minipage, or
+% as thanks in the titlepage. Each of these is handle differently.
+%
+% \subsection{Regular page footnotes}
+% In \HTML\ documents, footnotes are placed at the
+% bottom of the web page or the section, depending on \progcode{FootnoteDepth},
+% using the \LaTeX\ box \cs{LWR@footnotebox}.
+% Using this instead of the original \cs{footins} box
+% avoids having footnotes be printed by the output routine,
+% since footnotes should be printed per \HTML\ page
+% instead of per \PDF\ page.
+%
+% See \cref{sec:footnotesregular} for the implementation.
+%
+% \subsection{Minipage footnotes}
+% See \cref{sec:footnotesminipage} for how minipage footnotes are gathered.
+% See \cref{sec:footnotesminipageplaced} for how minipage footnotes are placed into
+% the document.
+%
+% \subsection{Titlepage thanks}
+% See \cref{sec:titlehtml} for titlepage footnotes.
+%
+% \subsection{Regular page footnote implementation}
+% \label{sec:footnotesregular}
+%
+%
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+
+% \DescribeCounter{FootnoteDepth} \DescribeDefault{3} Determines how deeply
+% to place footnotes in the \HTML\ files, similar to |tocdepth|.
+% The default of |3| places footnotes before each \cs{subsubsection} or higher.
+% See \cref{tab:depthsheadings} for a table of \LaTeX\ section headings.
+% \changes{v0.43}{2017/11/08}{Added \progcode{FootnoteDepth}.}
+% \changes{v0.52}{2018/03/28}{Changed \progcode{FootnoteDepth} default
+% to \cs{subsbusection}.}
+% \begin{macrocode}
+\newcounter{FootnoteDepth}
+\setcounter{FootnoteDepth}{3}
+% \end{macrocode}
+%
+%
+% \DescribeCounter{footnoteReset}
+% \DescribeDefault{0}
+% If non-zero, the \ctr{footnote} counter
+% is reset to this value each time the footnotes are printed,
+% as controlled by \ctr{FootnoteDepth}.
+% For the \pkg{manyfoot} and \pkg{bigfoot} packages,
+% additional counters such as |footnote<suffix>Reset| will be defined as well.
+% These counters may be set non-zero by the user, and
+% are also set if the \pkg{perpage}'s
+% \cs{MakePerPage} or \cs{MakeSortedPerPage} macros are used for the
+% |footnote| or |footnote<suffix>| counters.
+%
+% (The name is not capitalized because it is made from the counter's name with
+% ``Reset'' appended.)
+%
+% \begin{macrocode}
+\newcounter{footnoteReset}
+\setcounter{footnoteReset}{0}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@footnotebox}
+% Patch \LaTeX\ footnotes to use a new \cs{box} instead of an insert
+% for \pkg{lwarp} footnotes.
+% This avoids having the original \cs{footins} appear
+% at the bottom of a \env{lateximage}, which is on its own new page.
+% \begin{macrocode}
+\newbox\LWR@footnotebox
+% \end{macrocode}
+% \end{macro}
+%
+%
+% Much of the following has unneeded print-mode formatting removed.
+%
+% \begin{macro}{\@makefntext} \marg{text}
+% \begin{macrocode}
+\long\def\@makefntext#1{\textsuperscript{\@thefnmark}~#1}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makefnmark}
+% \begin{macrocode}
+\def\@makefnmark{%
+ \textsuperscript{\@thefnmark}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% Footnotes may be in regular text, in which case paragraphs are tagged,
+% or in a table data cell or \env{lateximage},
+% in which case paragraph tags must be added manually.
+%
+% In a \env{lateximage} during \HTML\ output, the \env{lateximage} is placed
+% inside a print-mode \env{minipage}, but the footnotes are broken out by:
+% \begin{sourcedisplay}
+% \cs{def}\cs{@mpfn}\{footnote\} \\
+% \cs{def}\cs{thempfn}\{\cs{thefootnote}\} \\
+% \cs{let}\cs{@footnotetext}\cs{LWR@footnotetext}
+% \end{sourcedisplay}
+%
+% \begin{macro}{\LWR@@footnotetext} \marg{text} \marg{footnote box name}
+%
+% Factored to allow multiple footnote boxes for \pkg{manyfoot}.
+%
+% \changes{v0.27}{2017/04/04}{Fix for table footnote par tags.}
+% \changes{v0.36}{2017/08/15}{Extra \protect\HTML\ source space after paragraphs.}
+% \changes{v0.36}{2017/08/16}{Force \protect\HTML\ superscripts.}
+% \changes{v0.68}{2019/03/04}{Factored for multiple foot boxes.}
+%
+% \begin{macrocode}
+\long\def\LWR@@footnotetext#1#2{%
+\LWR@traceinfo{LWR@footnotetext}%
+\global\setbox\csname #2\endcsname=\vbox{%
+% \end{macrocode}
+% Add to any current footnotes:
+% \begin{macrocode}
+ \unvbox\csname #2\endcsname%
+% \end{macrocode}
+% Remember the footnote number for \cs{ref}:
+% \begin{macrocode}
+ \protected@edef\@currentlabel{%
+ \csname p@footnote\endcsname\@thefnmark%
+ }% @currentlabel
+% \end{macrocode}
+% Open a group:
+% \begin{macrocode}
+ \color@begingroup%
+% \end{macrocode}
+% Use \HTML\ superscripts in the footnote even inside a \env{lateximage}:
+% \changes{v0.50}{2018/02/20}{Robustify macros.}
+% \begin{macrocode}
+ \renewrobustcmd{\textsuperscript}[1]{\LWR@htmlspan{sup}{##1}}%
+% \end{macrocode}
+% Use paragraph tags if in a tabular data cell or a \env{lateximage}:
+% \changes{v0.66}{2019/02/02}{Improved \HTML\ formatting.}
+% \begin{macrocode}
+ \ifthenelse{%
+ \boolean{LWR@doingstartpars} \AND%
+ \cnttest{\value{LWR@lateximagedepth}}{=}{0}%
+ }%
+ {}%
+ {\LWR@htmltagc{\LWR@tagregularparagraph}\LWR@orignewline}%
+% \end{macrocode}
+% Append the footnote to the list:
+% \begin{macrocode}
+ \@makefntext{#1}%
+% \end{macrocode}
+% Closing paragraph tag:
+% \begin{macrocode}
+ \ifthenelse{%
+ \boolean{LWR@doingstartpars} \AND%
+ \cnttest{\value{LWR@lateximagedepth}}{=}{0}%
+ }%
+ {\par}%
+ {%
+ \LWR@htmltagc{/\LWR@tagregularparagraph}%
+ \LWR@orignewline%
+ }%
+% \end{macrocode}
+% Close the group:
+% \begin{macrocode}
+ \color@endgroup%
+}% vbox
+% \end{macrocode}
+% Paragraph handling:
+% \changes{v0.52}{2018/03/28}{Fix: Paragraph handling.}
+% \begin{macrocode}
+\LWR@ensuredoingapar%
+}%
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@footnotetext} \marg{text}
+% \begin{macrocode}
+\long\def\LWR@footnotetext#1{\LWR@@footnotetext{#1}{LWR@footnotebox}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@footnotetext} \marg{text}
+% \begin{macrocode}
+\LetLtxMacro\@footnotetext\LWR@footnotetext
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{Minipage footnote implementation}
+% \label{sec:footnotesminipage}
+%
+% Patch \LaTeX\ minipage footnotes to use a new \cs{box} instead of an insert
+% for \pkg{lwarp} minipage footnotes.
+% This avoids having the original \cs{@mpfootins} appear
+% at the bottom of a \env{lateximage}, which is on its own new page.
+% \begin{macrocode}
+\newbox\LWR@mpfootnotes
+% \end{macrocode}
+%
+% \begin{macro}{\@mpfootnotetext} \marg{text}
+% \begin{macrocode}
+\long\def\@mpfootnotetext#1{%
+\LWR@traceinfo{@mpfootnotetext}%
+\global\setbox\LWR@mpfootnotes\vbox{%
+ \unvbox\LWR@mpfootnotes%
+ \reset@font\footnotesize%
+ \hsize\columnwidth%
+ \@parboxrestore%
+ \protected@edef\@currentlabel%
+ {\csname p@mpfootnote\endcsname\@thefnmark}%
+ \color@begingroup%
+% \end{macrocode}
+% Use paragraph tags if in a tabular data cell or a \env{lateximage}:
+% \changes{v0.66}{2019/02/02}{Improved \HTML\ formatting.}
+% \begin{macrocode}
+ \ifthenelse{%
+ \boolean{LWR@doingstartpars} \AND%
+ \cnttest{\value{LWR@lateximagedepth}}{=}{0}%
+ }%
+ {}%
+ {\LWR@htmltagc{\LWR@tagregularparagraph}\LWR@orignewline}%
+% \end{macrocode}
+% \begin{macrocode}
+ \@makefntext{%
+ \ignorespaces#1%
+ }%
+% \end{macrocode}
+% Don't add the closing paragraph tag if are inside a \env{lateximage}:
+% \changes{v0.71}{2019/04/07}{Improved \HTML\ formatting.}
+% \changes{v0.71}{2019/04/08}{Reduced underfull \cs{hbox} warnings.}
+% \begin{macrocode}
+ \ifthenelse{\cnttest{\value{LWR@lateximagedepth}}{>}{0}}%
+ {}%
+ {%
+ \leavevmode\LWR@orignewline%
+ \LWR@htmltagc{/\LWR@tagregularparagraph}%
+ \LWR@origpar%
+ }%
+ \color@endgroup%
+}% vbox
+% \end{macrocode}
+% Paragraph handling:
+% \changes{v0.52}{2018/03/28}{Fix: Paragraph handling.}
+% \begin{macrocode}
+\LWR@ensuredoingapar%
+\LWR@traceinfo{@mpfootnotetext: done}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\thempfootnote} Redefined to remove the \cs{itshape}, which caused
+% an obscure compiling error in some situations.
+% \changes{v0.48}{2018/02/11}{Removed \cs{itshape}.}
+% \begin{macrocode}
+\AtBeginDocument{
+\def\thempfootnote{\@alph\c@mpfootnote}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \subsection{Printing pending footnotes}
+%
+%
+% \begin{macro}{\LWR@@printpendingfootnotes} \marg{footnote counter name}
+% \begin{macrocode}
+\newcommand*{\LWR@@printpendingfootnotes}[1]{%
+\expandafter\ifvoid\csname LWR@#1box\endcsname\else
+ \LWR@forcenewpage
+ \begin{BlockClass}{footnotes}
+ \LWR@origmedskip
+ \unvbox\csuse{LWR@#1box}
+ \setbox\csuse{LWR@#1box}=\vbox{}
+ \end{BlockClass}
+ \ifltxcounter{#1Reset}{%
+ \ifnumgreater{\value{#1Reset}}{0}{%
+ \setcounter{#1}{\value{#1Reset}}%
+ \addtocounter{#1}{-1}%
+ }{}%
+ }{}%
+\fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LWR@printpendingfootnotes}
+% Enclose the footnotes in a class, print, then clear.
+% For \pkg{manynotes}, new footnotes may be added via \cs{appto}.
+%
+% \changes{v0.68}{2019/03/04}{Factored for multiple footnote boxes.}
+% \begin{macrocode}
+\newcommand*{\LWR@printpendingfootnotes}{%
+ \LWR@@printpendingfootnotes{footnote}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LWR@maybeprintpendingfootnotes} \marg{depth}
+% Used to print footnotes before sections only if formatting for an \EPUB\ or word processor:
+% \changes{v0.43}{2017/11/08}{Added \progcode{FootnoteDepth}.}
+% \begin{macrocode}
+\newcommand*{\LWR@maybeprintpendingfootnotes}[1]{%
+\ifboolexpr{
+ not test{\ifnumcomp{#1}{>}{\value{FootnoteDepth}}} or
+ bool{FormatEPUB} or
+ bool{FormatWP}
+}%
+{\LWR@printpendingfootnotes}%
+{}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@printpendingmpfootnotes}
+% Enclose the minipage footnotes in a class, print, then clear.
+% \changes{v0.45}{2018/01/10}{Added.}
+% \begin{macrocode}
+\newcommand*{\LWR@printpendingmpfootnotes}{%
+\ifvoid\LWR@mpfootnotes\else
+ \LWR@forcenewpage
+ \begin{BlockClass}{footnotes}
+ \LWR@print@vspace*{\baselineskip}
+ \unvbox\LWR@mpfootnotes
+ \setbox\LWR@mpfootnotes=\vbox{}
+ \end{BlockClass}
+\fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+% \section{Marginpars}
+%
+% \limitsmarginpars
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% \begin{macro}{\marginpar} \oarg{left} \marg{right}
+%
+% \changes{v0.21}{2017/02/11}{Fixed source listing.}
+% \changes{v0.42}{2017/10/26}{If \progcode{FormatWP} emulate a wrapfig.}
+%
+% \begin{macrocode}
+\renewcommand{\marginpar}[2][]{%
+\ifbool{FormatWP}%
+{%
+\begin{LWR@BlockClassWP}{width:2in; float:right; margin:10pt}{}{marginblock}
+#2
+\end{LWR@BlockClassWP}
+}%
+{%
+ \LWR@htmlspanclass{marginpar}{#2}%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\marginparBlock} \oarg{left} \marg{right}
+%
+% For use when the marginpar will be more than one paragraph,
+% and/or contains more than simple text.
+%
+% \HTML\ version.
+%
+% \changes{v0.21}{2017/02/11}{Fixed source listing.}
+% \changes{v0.42}{2017/10/26}{If \progcode{FormatWP} emulate a wrapfig.}
+% \changes{v0.44}{2017/11/10}{Added.}
+% \changes{v0.73}{2019/06/25}{Fix: Paragraph tags.}
+%
+% \begin{macrocode}
+\newcommand{\marginparBlock}[2][]{%
+\LWR@stoppars%
+\ifbool{FormatWP}%
+{%
+ \begin{LWR@BlockClassWP}{width:2in; float:right; margin:10pt}{}{marginblock}
+ #2
+ \end{LWR@BlockClassWP}
+}{%
+ \begin{BlockClass}[width:2in; float:right; margin:10pt]{marginparblock}
+ #2
+ \end{BlockClass}
+}%
+\LWR@startpars%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\reversemarginpar}
+% \changes{v0.45}{2017/12/12}{Added.}
+% \begin{macrocode}
+\renewcommand*{\reversemarginpar}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\normalmarginpar}
+% \changes{v0.45}{2017/12/12}{Added.}
+% \begin{macrocode}
+\renewcommand*{\normalmarginpar}{}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \codeprint
+% \begin{macrocode}
+\begin{warpprint}
+% \end{macrocode}
+%
+% \begin{macro}{\marginparBlock} \oarg{left} \marg{right}
+%
+% For use when the marginpar will be more than one paragraph,
+% and/or contains more than simple text.
+%
+% Print version.
+%
+% \begin{macrocode}
+\LetLtxMacro\marginparBlock\marginpar
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\end{warpprint}
+% \end{macrocode}
+
+
+
+% \section{Splitting \HTML\ files}
+%
+% \begin{itemize}
+% \item Files are split according to |FileDepth| and |CombineHigherDepths|.
+% \item Filenames are sanitized by |\LWR@filenamenoblanks|.
+% \item |\LWR@newhtmlfile| finishes an \HTML\ page,
+% adds a comment to tell where and how to split the file,
+% then starts a new \HTML\ page.
+% \end{itemize}
+
+
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+
+% \DescribeCounter{FileDepth} \marg{section depth} determines how deeply
+% to break into new \HTML\ files, similar to |tocdepth|.
+% The default of -5 produces one large \HTML\ file.
+% \begin{macrocode}
+\newcounter{FileDepth}
+\setcounter{FileDepth}{-5}
+% \end{macrocode}
+
+
+% \DescribeBoolean{CombineHigherDepths} Combile higher-level sections
+% together into one file?
+% \begin{macrocode}
+\newbool{CombineHigherDepths}
+\booltrue{CombineHigherDepths}
+% \end{macrocode}
+
+
+% \begin{macro}{\FilenameLimit}
+% Maximum length of the generated filenames.
+% \begin{macrocode}
+\newcommand*{\FilenameLimit}{80}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{macro}{\LWR@thisfilename}
+% The currently-active filename or number.
+% At first, this is the homepage.
+% \begin{macrocode}
+\AtBeginDocument{
+\ifbool{FileSectionNames}%
+ {\newcommand*{\LWR@thisfilename}{\HomeHTMLFilename}}
+ {\newcommand*{\LWR@thisfilename}{0}}
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@thisnewfilename}
+% The filename being sanitized.
+% \begin{macrocode}
+\newcommand*{\LWR@thisnewfilename}{}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@simplifyname} * \marg{expression} \qquad Simplify \cs{LWR@thisnewfilename}.
+%
+% If starred, detokenizes the input expression.
+% If found, changes the expression to a single detokenized dash.
+%
+% \changes{v0.66}{2019/02/07}{Added.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@simplifyname}{s m}{%
+\IfBooleanTF{#1}{%
+ \StrSubstitute{\LWR@thisnewfilename}%
+ {\detokenize{#2}}%
+ {\detokenize{-}}[\LWR@thisnewfilename]%
+}{%
+ \StrSubstitute{\LWR@thisnewfilename}%
+ {#2}%
+ {\detokenize{-}}[\LWR@thisnewfilename]%
+}
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@simplifycustom}
+% User-defined filename simplifications.
+% Redefine with \cs{newcommand}.
+% \changes{v0.67}{2019/02/13}{Added.}
+% \begin{macrocode}
+\newcommand*{\LWR@simplifycustom}{}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\FilenameSimplify} * \marg{phrase}
+% Assign a user-defined filename simplification.
+% Appends to \cs{LWR@simplifycustom}.
+% \changes{v0.67}{2019/02/13}{Added.}
+% \begin{macrocode}
+\NewDocumentCommand{\FilenameSimplify}{s m}{%
+\IfBooleanTF{#1}{%
+ \appto{\LWR@simplifycustom}{%
+ \LWR@simplifyname*{#2}%
+ }%
+}{%
+ \appto{\LWR@simplifycustom}{%
+ \LWR@simplifyname{#2}%
+ }%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \begin{macro}{\LWR@filenamenoblanks} \marg{filename}
+%
+% Convert blanks into dashes, removes short words,
+% store result in \\ |\LWR@thisfilename|.
+%
+% Also see \cs{LWR@nullfonts} for nullified macros.
+%
+% \changes{v0.66}{2019/02/07}{Improved file name generation.}
+% \changes{v0.67}{2019/02/13}{Improved file name generation.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@filenamenoblanks}[1]{%
+\begingroup
+% \end{macrocode}
+%
+% Locally temporarily disable direct-formatting commands,
+% not used in filenames:
+% \begin{macrocode}
+\LWR@nullfonts%
+\renewcommand*{\LWR@htmltagc}[1]{}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\edef\LWR@thisnewfilename{#1}%
+% \end{macrocode}
+% Replaces common macros with hyphens.
+% (\cs{\&} is done by \cs{LWR@nullfonts}.)
+% \begin{macrocode}
+\RenewDocumentCommand{\LWR@subsingledollar}{s m m m}{}%
+\LWR@simplifyname{\_}
+\LWR@simplifyname{\#}
+\LWR@simplifyname{\textbackslash}
+\LWR@simplifyname{\protect}
+\LWR@simplifyname{\ }
+\LWR@simplifyname{\textless}
+\LWR@simplifyname{\textgreater}
+% \end{macrocode}
+% \changes{v0.66}{2019/02/06}{Fix: Section names detokenized.}
+% \begin{macrocode}
+\edef\LWR@thisnewfilename{\detokenize\expandafter{\LWR@thisnewfilename}}%
+% \end{macrocode}
+% \begin{macrocode}
+\LWR@traceinfo{LWR@filenamenoblanks edef: !\LWR@thisnewfilename!}%
+\fullexpandarg%
+% \end{macrocode}
+% Convert spaces into hyphens:
+% \begin{macrocode}
+\LWR@simplifyname*{ }
+% \end{macrocode}
+% Convert punctutation into hyphens:
+% \begin{macrocode}
+\LWR@simplifyname*{!}
+\LWR@simplifyname*{,}
+\LWR@simplifyname*{'}
+\LWR@simplifyname*{+}
+\LWR@simplifyname*{,}
+\LWR@simplifyname*{/}
+\LWR@simplifyname*{:}
+\LWR@simplifyname*{;}
+\LWR@simplifyname*{=}
+\LWR@simplifyname*{?}
+\LWR@simplifyname*{@}
+\LWR@simplifyname*{^}
+\LWR@simplifyname*{&}
+\LWR@simplifyname*{"}
+\LWR@simplifyname*{<}
+\LWR@simplifyname*{>}
+% \end{macrocode}
+% \changes{v0.66}{2019/02/06}{Fix: Section names with macros.}
+% \begin{macrocode}
+\LWR@simplifyname{\LWRbackslash}
+% \end{macrocode}
+% Braces are removed entirely to avoid extra dashes in the result.
+% \begin{macrocode}
+\StrSubstitute{\LWR@thisnewfilename}%
+ {\LWRleftbrace}{}[\LWR@thisnewfilename]%
+\StrSubstitute{\LWR@thisnewfilename}%
+ {\LWRrightbrace}{}[\LWR@thisnewfilename]%
+% \end{macrocode}
+% \changes{v0.66}{2019/02/06}{Fix: Section names with percent.}
+% \begin{macrocode}
+\LWR@simplifyname{\LWRpercent}
+\LWR@simplifyname{\LWRdollar}
+% \end{macrocode}
+% \begin{macrocode}
+\LWR@simplifyname*{|}
+\LWR@simplifyname*{^}
+\LWR@simplifyname*{~}
+\LWR@simplifyname*{[}
+\LWR@simplifyname*{]}
+\LWR@simplifyname*{`}
+% \end{macrocode}
+% Convert short words:
+% \begin{macrocode}
+\LWR@simplifyname*{-s-}
+\LWR@simplifyname*{-S-}
+\LWR@simplifyname*{-a-}
+\LWR@simplifyname*{-A-}
+\LWR@simplifyname*{-an-}
+\LWR@simplifyname*{-AN-}
+\LWR@simplifyname*{-to-}
+\LWR@simplifyname*{-TO-}
+\LWR@simplifyname*{-by-}
+\LWR@simplifyname*{-BY-}
+\LWR@simplifyname*{-of-}
+\LWR@simplifyname*{-OF-}
+\LWR@simplifyname*{-and-}
+\LWR@simplifyname*{-AND-}
+\LWR@simplifyname*{-for-}
+\LWR@simplifyname*{-FOR-}
+\LWR@simplifyname*{-the-}
+\LWR@simplifyname*{-THE-}
+% \end{macrocode}
+% Convert custom words:
+% \begin{macrocode}
+\LWR@simplifycustom%
+% \end{macrocode}
+% Convert multiple hyphens:
+% \begin{macrocode}
+\LWR@simplifyname*{-----}
+\LWR@simplifyname*{----}
+\LWR@simplifyname*{---}
+\LWR@simplifyname*{--}
+% \end{macrocode}
+% If pdf\LaTeX\ and not \optn{utf8} encoding, don't try to convert emdash, endash:
+% \changes{v0.52}{2018/04/01}{Fix: \cs{FileDepth} with non-utf8 encoding.}
+% \begin{macrocode}
+\ifPDFTeX% pdflatex or dvi latex
+\ifdefstring{\inputencodingname}{utf8}{%
+\LWR@simplifyname*{—}
+% emdash
+\LWR@simplifyname*{–}
+% endash
+}{}%
+\else% not PDFTeX
+\LWR@simplifyname*{—}
+\LWR@simplifyname*{–}
+\fi%
+% \end{macrocode}
+% If starts with a dash, remove the leading dash:
+% \begin{macrocode}
+\IfBeginWith{\LWR@thisnewfilename}{\detokenize{-}}{%
+ \StrGobbleLeft{\LWR@thisnewfilename}{1}[\LWR@thisnewfilename]%
+}{}%
+% \end{macrocode}
+% If ends with a dash, remove the trailing dash:
+% \begin{macrocode}
+\IfEndWith{\LWR@thisnewfilename}{\detokenize{-}}{%
+ \StrGobbleRight{\LWR@thisnewfilename}{1}[\LWR@thisnewfilename]%
+}{}%
+% \end{macrocode}
+% Limits the length of the filename:
+% \changes{v0.66}{2019/02/07}{Limits filename length.}
+% \begin{macrocode}
+\StrLeft{\LWR@thisnewfilename}{\FilenameLimit}[\LWR@thisnewfilename]%
+% \end{macrocode}
+% Return the global result:
+% \begin{macrocode}
+\global\let\LWR@thisfilename\LWR@thisnewfilename%
+\endgroup%
+\LWR@traceinfo{LWR@filenamenoblanks: result is \LWR@thisfilename}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \DescribeCounter{LWR@previousautopagelabel} Remembers which autopage label
+% was most recently generated. Used to avoid duplicates.
+% \begin{macrocode}
+\newcounter{LWR@previousautopagelabel}
+\setcounter{LWR@previousautopagelabel}{-1}
+% \end{macrocode}
+
+
+% \DescribeFile{*_html.aux}
+% A new entry in the \filenm{*_html.aux} file is used to help
+% cross-references:
+% \begin{sourceverb}
+% \newlabel{autopage-<nnn>}{{<x>}{<y>}}
+% \end{sourceverb}
+%
+% \begin{macro}{\LWR@newautopagelabel} \marg{pagenumber counter}
+% \changes{v0.48}{2018/02/11}{Fix: \TOC, \LOF, \LOT\ links.}
+% \changes{v0.72}{2019/06/05}{Fix: References for \pkg{xr}, \pkg{xr-hyper}.}
+%
+% \cs{BaseJobname} is added to the label in case \pkg{xr} or \pkg{xr-hyper} are used.
+% \begin{macrocode}
+\newcommand*{\LWR@newautopagelabel}[1]{%
+\ifnumequal{\value{LWR@previousautopagelabel}}{\value{page}}%
+{}% no action if this autopage label has already been defined
+{%
+ \label{\BaseJobname-autopage-\arabic{#1}}%
+ \setcounter{LWR@previousautopagelabel}{\value{page}}
+}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Customizing \brand{MathJax}}
+
+% \begin{macro}{\LWR@customizedMathJax}
+% Additional \brand{MathJax} definitions to be added to the start of each \HTML\ page.
+% \changes{v0.52}{2018/03/31}{Added.}
+% \begin{macrocode}
+\newcommand*{\LWR@customizedMathJax}{}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\CustomizeMathJax}
+%
+% \limitscustomizemathjax
+%
+% \changes{v0.52}{2018/03/31}{Added.}
+% \begin{macrocode}
+\newcommand*{\CustomizeMathJax}[1]{%
+ \appto{\LWR@customizedMathJax}{%
+ \(#1\)\par
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@customizeMathJax}
+% \changes{v0.51}{2018/03/18}{MathJax: Nullifies \cs{ensuremath}.}
+% \changes{v0.57}{2018/05/24}{MathJax: Supports \cs{footnote}, \cs{footnotemark}.}
+% \begin{macrocode}
+\newcommand{\LWR@customizeMathJax}{%
+\ifbool{mathjax}{
+% \end{macrocode}
+% ^^A \ifboolexpr{bool{mathjax} and not bool{mathKaTeX}}{
+% \begin{macrocode}
+\LWR@stoppars
+\LWR@htmlcomment{Nullify \textbackslash{}ensuremath, footnotes for MathJax:}
+
+\(\newcommand\ensuremath[1]{##1}\)
+
+\(\newcommand\footnote[2][]{\text{( Footnote ##1 )}}\)
+
+\(\newcommand\footnotemark[1][]{\text{( Footnote ##1 )}}\)
+
+\LWR@htmlcomment{Additional customizations for MathJax:}
+
+\LWR@customizedMathJax
+
+\LWR@startpars
+}{}
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% ^^A % \subsection{Customizing Ka\TeX}
+
+% ^^A % \begin{macro}{\LWR@customizedKaTeX}
+% ^^A % Additional Ka\TeX\ definitions to be added to the start of each \HTML\ page.
+% ^^A % \changes{v0.62}{2018/11/03}{Added.}
+% ^^A % \begin{macrocode}
+% ^^A \newcommand*{\LWR@customizedKaTeX}{}
+% ^^A % \end{macrocode}
+% ^^A % \end{macro}
+
+
+% ^^A % \begin{macro}{\CustomizeKaTeX}
+% ^^A %
+% ^^A % \limitscustomizeKaTeX
+% ^^A %
+% ^^A % \changes{v0.62}{2018/11/03}{Added.}
+% ^^A % \begin{macrocode}
+% ^^A \newcommand*{\CustomizeKaTeX}[1]{%
+% ^^A \appto{\LWR@customizedKaTeX}{%
+% ^^A \(#1\)\par
+% ^^A }%
+% ^^A }
+% ^^A % \end{macrocode}
+% ^^A % \end{macro}
+
+
+% ^^A % \begin{macro}{\LWR@customizeKaTeX}
+% ^^A % \changes{v0.62}{2018/11/03}{Added.}
+% ^^A % \begin{macrocode}
+% ^^A \newcommand{\LWR@customizeKaTeX}{%
+% ^^A \ifboolexpr{bool{mathjax} and bool{mathKaTeX}}{
+% ^^A \LWR@stoppars
+% ^^A \LWR@htmlcomment{Nullify \textbackslash{}ensuremath, footnotes for KaTeX:}
+% ^^A
+% ^^A \(\gdef\ensuremath##1{##1}\)
+% ^^A
+% ^^A \(\gdef\footnote[##1]##2{\text{( Footnote ##1 )}}\)
+% ^^A
+% ^^A \(\gdef\footnotemark[##1]{\text{( Footnote ##1 )}}\)
+% ^^A
+% ^^A \LWR@htmlcomment{Additional customizations for KaTeX:}
+% ^^A
+% ^^A \LWR@customizedKaTeX
+% ^^A
+% ^^A \LWR@startpars
+% ^^A }{}
+% ^^A }
+% ^^A % \end{macrocode}
+% ^^A % \end{macro}
+
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \codeprint
+% \begin{macrocode}
+\begin{warpprint}
+% \end{macrocode}
+
+% \begin{macro}{\CustomizeMathJax}
+% The print-mode version:
+% \begin{macrocode}
+\newcommand*{\CustomizeMathJax}[1]{}
+% \end{macrocode}
+% \end{macro}
+
+% ^^A % \begin{macro}{\CustomizeKaTeX}
+% ^^A % The print-mode version:
+% ^^A % \begin{macrocode}
+% ^^A \newcommand*{\CustomizeKaTeX}[1]{}
+% ^^A % \end{macrocode}
+% ^^A % \end{macro}
+
+% \begin{macro}{\FilenameSimplify} * \marg{expression}
+% \changes{v0.67}{2019/02/13}{Added.}
+% \begin{macrocode}
+\NewDocumentCommand{\FilenameSimplify}{s m}{}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpprint}
+% \end{macrocode}
+
+
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{macro}{\LWR@newhtmlfile} \marg{section name}
+% \changes{v0.18}{2016/04/23}{side\TOC\ after title, improving responsive design.}
+% \changes{v0.21}{2017/02/22}{Skip title if not given.}
+% \changes{v0.28}{2017/04/06}{If \progcode{FormatEPUB} or \progcode{FormatWP}: skips headers, footers, nav.}
+%
+% Finishes the current \HTML\ page with footnotes, footer, navigation,
+% then starts a new \HTML\ page with an \HTML\ comment telling where to
+% split the page and what the new filename and \CSS\ are, then adds
+% navigation, side \TOC, header, and starts the text body.
+% \begin{macrocode}
+\newcommand*{\LWR@newhtmlfile}[1]{
+\LWR@traceinfo{LWR@newhtmlfile}
+% \end{macrocode}
+%
+% At the bottom of the ending file:
+%
+% \changes{v0.65}{2018/12/18}{Improved \CSS\ for page layout.}
+% \begin{macrocode}
+\LWR@htmlelementclassend{section}{textbody}
+\LWR@htmlelementclassend{div}{bodycontainer}
+\LWR@htmlelementclassend{div}{bodyandsidetoc}
+
+\LWR@printpendingfootnotes
+
+% \end{macrocode}
+%
+%
+% No footer between files if \EPUB:
+% \begin{macrocode}
+\ifbool{FormatEPUB}
+{}
+{
+% \end{macrocode}
+% \changes{v0.73}{2019/06/23}{Fix: Empty header/footer.}
+% \begin{macrocode}
+ \ifdefempty{\LWR@pagebottom}{}{%
+ \LWR@htmlelement{footer}
+
+ \LWR@pagebottom
+
+ \LWR@htmlelementend{footer}
+ }
+}
+% \end{macrocode}
+%
+%
+% No bottom navigation if are finishing the home page or
+% formatting for \EPUB\ or a word-processor.
+% \begin{macrocode}
+\ifthenelse{\boolean{FormatEPUB}\OR\boolean{FormatWP}}
+ {}
+ {\ifnumcomp{\value{LWR@htmlfilenumber}}{>}{0}{\LWR@botnavigation}{}}
+% \end{macrocode}
+
+% End of this \HTML\ file:
+% \begin{macrocode}
+\LWR@stoppars
+\LWR@htmltag{/body}\LWR@orignewline
+\LWR@htmltag{/html}\LWR@orignewline
+\LWR@traceinfo{LWR@newhtmlfile: about to LWR@orignewpage}
+\LWR@orignewpage
+
+\addtocounter{LWR@htmlfilenumber}{1}%
+% \end{macrocode}
+%
+%
+% If using a filename based on section name, create a version without blanks.
+% The filename without blanks will be placed into \cs{LWR@thisfilename}.
+% Duplicates will be detected using MD5 hashes.
+%
+% If not using a filename, the file number will be used instead.
+%
+% \changes{v0.12}{2016/03/13}{Bugfix: \TOC\ with numbered files.}
+% \changes{v0.65}{2018/12/21}{Error if duplicate file name.}
+% \begin{macrocode}
+\ifbool{FileSectionNames}%
+{%
+% \end{macrocode}
+% Convert the section name to a filename with blanks and common words removed.
+% The resulting filename is in \cs{LWR@thisfilename}.
+% \begin{macrocode}
+ \LWR@filenamenoblanks{#1}%
+% \end{macrocode}
+% Create a macro name from the MD5 hash of the file name, to detect duplicates:
+% \begin{macrocode}
+ \edef\LWR@hashedname{\LWR@mdfive{\LWR@thisfilename}}%
+% \end{macrocode}
+% If the macro name is not yet defined, this filename is unique.
+% \begin{macrocode}
+ \ifcsundef{LWR@filename\LWR@hashedname}{%
+% \end{macrocode}
+% If the filename is unique, create a macro using the hashed name,
+% to be used to test for additional duplicates in the future.
+% \begin{macrocode}
+ \csdef{LWR@filename\LWR@hashedname}{}%
+ }{%
+% \end{macrocode}
+% If the filename is not unique, create an error.
+% \begin{macrocode}
+ \PackageError{lwarp}
+ {%
+ Section name\MessageBreak
+ ``#1'',\MessageBreak
+ at the line number listed below,\MessageBreak
+ generates the filename\MessageBreak
+ ``\LWR@thisfilename'',\MessageBreak
+ which appears to be a duplicate.\MessageBreak
+ There is a previous section with an\MessageBreak
+ identical or similar name%
+ }
+ {%
+ Lwarp sanitizes most symbols and a few common short words
+ when generating file names, and this may cause a conflict.
+ }
+ }
+}
+% \end{macrocode}
+% If using file numbers instead of names, the name is set to the next file number.
+% \begin{macrocode}
+{\renewcommand*{\LWR@thisfilename}{\arabic{LWR@htmlfilenumber}}}
+% \end{macrocode}
+%
+%
+% Include an \HTML\ comment to instruct lwarpmk
+% where to split the files apart.
+% Uses pipe-separated fields for |split_html.gawk|.
+% Uses monospaced font with ligatures disabled for everything except the title.
+%
+% \changes{v0.50}{2018/02/20}{Fix: SVG math in a section name.}
+% \begin{macrocode}
+\LWR@traceinfo{LWR@newhtmlfile: about to print start file}%
+% \end{macrocode}
+% \cs{LWR@nullfonts} to allow math in a section name.
+% \begin{macrocode}
+\begingroup%
+\LWR@nullfonts%
+\LWR@htmlblockcomment{%
+|Start file|%
+\LWR@htmlsectionfilename{\LWR@thisfilename}|%
+}
+\endgroup%
+% \end{macrocode}
+%
+%
+% At the top of the starting file:
+% \begin{macrocode}
+\LWR@stoppars
+
+% \end{macrocode}
+%
+% Start a new file with the given section name:
+% \begin{macrocode}
+\LWR@filestart[#1]
+
+% \end{macrocode}
+%
+% Track the page numbers:
+% \changes{v0.48}{2018/02/11}{Fix: \TOC, \LOF, \LOT\ links.}
+% \begin{macrocode}
+\setcounter{LWR@latestautopage}{\value{page}}%
+\LWR@newautopagelabel{LWR@latestautopage}%
+% \end{macrocode}
+%
+%
+% No navigation between files if formatting for an \EPUB\ or word processor:
+% \begin{macrocode}
+\ifthenelse{\boolean{FormatEPUB}\OR\boolean{FormatWP}}
+ {}
+ {\LWR@topnavigation}
+
+% \end{macrocode}
+%
+%
+% No header if between files if formatting for an \EPUB\ or word processor:
+% \begin{macrocode}
+\ifthenelse{\boolean{FormatEPUB}\OR\boolean{FormatWP}}
+ {}
+ {
+% \end{macrocode}
+% \changes{v0.73}{2019/06/23}{Fix: Empty header/footer.}
+% \begin{macrocode}
+ \ifdefempty{\LWR@pagetop}{}{
+ \LWR@htmlelement{header}
+
+ \LWR@pagetop
+
+ \LWR@htmlelementend{header}
+ }
+ }
+
+% \end{macrocode}
+%
+%
+% The container for the sidetoc and text body:
+% \begin{macrocode}
+\LWR@htmlelementclass{div}{bodyandsidetoc}
+% \end{macrocode}
+%
+%
+% No side\TOC\ if formatting for an \EPUB\ or word processor:
+% \begin{macrocode}
+\ifthenelse{\boolean{FormatEPUB}\OR\boolean{FormatWP}}
+ {}
+ {\LWR@sidetoc}
+
+% \end{macrocode}
+%
+%
+% Start of the \element{textbody}:
+% \changes{v0.65}{2018/12/18}{Improved \CSS\ for page layout.}
+% \begin{macrocode}
+\LWR@htmlelementclass{div}{bodycontainer}
+\LWR@htmlelementclass{section}{textbody}
+
+% \end{macrocode}
+%
+%
+% Print title only if there is one.
+% Skip if formatting for an \EPUB\ or word processor:
+% \begin{macrocode}
+\ifthenelse{\boolean{FormatEPUB}\OR\boolean{FormatWP}}%
+ {}%
+ {%
+ \ifcsvoid{thetitle}{}{%
+ \LWR@printthetitle%
+ }%
+ }%
+% \end{macrocode}
+%
+%
+% Keep paragraph tags disabled for now:
+% \begin{macrocode}
+\LWR@stoppars
+
+% \end{macrocode}
+%
+% If using \brand{MathJax},
+% disable \cs{ensuremath} by printing a nullified
+% definition at the start of each file, and add further customizations:
+% \changes{v0.51}{2018/03/18}{MathJax: Nullifies \cs{ensuremath}.}
+% \begin{macrocode}
+\LWR@customizeMathJax
+% \end{macrocode}
+%
+% ^^A % Likewise for Ka\TeX:
+% ^^A % \changes{v0.62}{2018/11/03}{KaTeX: Nullifies \cs{ensuremath}.}
+% ^^A % \begin{macrocode}
+% ^^A \LWR@customizeKaTeX
+% ^^A % \end{macrocode}
+%
+% \begin{macrocode}
+\LWR@traceinfo{LWR@newhtmlfile: done}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+% \section{Sectioning}
+
+%
+% Sectioning and cross-references have been emulated from scratch, rather
+% than try to patch several layers of existing \LaTeX{} code and packages.
+% Formatting is handled by \CSS, so the emulated code has much less
+% work to do than the print versions.
+%
+% Section names and the resulting filenames with accented characters
+% \margintag{Unicode}
+% are partially supported, depending on the ability of
+% \prog{pdflatex} to generate characters and \prog{pdftotext} to read them.
+% If extra symbols appear in the text,
+% \trouble[accents in filenames]{filename>accents}
+% \trouble{sectioning>accents}
+% \gindex{filename>accent in}
+% \gindex{accents>in section \& file names}
+% it may be that \prog{pdflatex} is actually producing a symbol over or under a
+% character, resulting in \prog{pdftotext} picking up the accent symbol separately.
+%
+% \XeLaTeX{} and \LuaLaTeX{} directly support accented section and file names.
+% \gindex{accents>in section \& file names}
+% \gindex{Unicode>file \& section names}
+% \gindex{UTF-8>file \& section names}
+% \gindex{Xe\LaTeX>file \& section names}
+% \gindex{Lua\LaTeX>file \& section names}
+%
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+%
+%
+% \subsection{User-level starred section commands}
+%
+%
+% \begin{macro}{\ForceHTMLPage}
+% For \HTML\ output, forces the next section to be on its own \HTML\ page,
+% if |FileDepth| allows, even if starred.
+% For use with \cs{printindex} and others which generate a starred section
+% which should be on its own \HTML\ page. Also see \cs{ForceHTMLTOC}.
+%
+% For print output, no effect.
+%
+% \changes{v0.38}{2017/08/22}{Added.}
+%
+% \begin{macrocode}
+\newbool{LWR@forcinghtmlpage}
+\boolfalse{LWR@forcinghtmlpage}
+
+\newcommand*{\ForceHTMLPage}{%
+\global\booltrue{LWR@forcinghtmlpage}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\ForceHTMLTOC}
+% For \HTML\ output, forces the next section to have a \TOC\ entry, even if starred.
+% For use with \cs{printindex} and others which generate a starred section
+% which should be in the \TOC\ so that it may be accessed via \HTML.
+% Not necessary if used with \pkg{tocbibind}. Also see \cs{ForceHTMLPage}.
+%
+% For print output, no effect.
+%
+% \changes{v0.38}{2017/08/22}{Added.}
+%
+% \begin{macrocode}
+\newbool{LWR@forcinghtmltoc}
+\boolfalse{LWR@forcinghtmltoc}
+
+\newcommand*{\ForceHTMLTOC}{%
+\global\booltrue{LWR@forcinghtmltoc}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+%
+%
+%
+% \codeprint
+% \begin{macrocode}
+\begin{warpprint}
+\newcommand*{\ForceHTMLPage}{}
+\newcommand*{\ForceHTMLTOC}{}
+\end{warpprint}
+% \end{macrocode}
+%
+%
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+%
+%
+%
+% \subsection{Book class commands}
+%
+%
+% \begin{macro}{\mainmatter}
+%
+% Declare the main matter section of the document. Does not reset the page number,
+% \watchout
+% which must be consecutive arabic numbers for the \HTML\ conversion.
+% \begin{macrocode}
+\newbool{LWR@mainmatter}
+\DeclareDocumentCommand{\mainmatter}{}{%
+\booltrue{LWR@mainmatter}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\frontmatter}
+%
+% Declare the front matter section of the document,
+% using arabic numbering for the internal numbering. Does not reset the page number.
+% \begin{macrocode}
+\DeclareDocumentCommand{\frontmatter}{}{%
+\boolfalse{LWR@mainmatter}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\backmatter}
+%
+% Declare the back matter section of the document. Does not reset the page number.
+% \begin{macrocode}
+\DeclareDocumentCommand{\backmatter}{}{%
+\boolfalse{LWR@mainmatter}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Sectioning support macros}
+%
+% \begin{macro}{\LWR@sectionumber} \marg{section type}
+%
+% Typeset a section number and its trailing space with \CSS\ formatting:
+% \begin{macrocode}
+\newcommand*{\LWR@sectionnumber}[1]{%
+\InlineClass{sectionnumber}{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \DescribeObject{autosec} A tag used by the \TOC\ and index.
+%
+% \begin{macro}{\LWR@createautosec} \marg{section type}
+%
+% Create an autosection tag.
+% \changes{v0.47}{2018/01/26}{Fix: Line wrap at \HTML\ hyphen.}
+% \changes{v0.63}{2018/11/24}{Fix for \pkg{xeCJK}.}
+% \begin{macrocode}
+\newcommand*{\LWR@createautosec}[1]{%
+\LWR@htmltag{%
+ #1 % space
+ id=\textquotedbl\LWR@print@mbox{autosec-\arabic{page}}\textquotedbl%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+
+% \begin{macro}{\LWR@pushoneclose} \marg{sectiontype}
+% Stacks the new sectioning level's closing tag,
+% to be used when this section is closed some time later.
+%
+% \cs{LWR@stoppars} must be executed first.
+% \watchout
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@pushoneclose}{m}{%
+\LWR@traceinfo{LWR@pushoneclose #1}%
+ \LWR@pushclose{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@startnewdepth} \marg{sectiontype}
+%
+% Closes currently stacked tags of a lesser level,
+% then opens the new nesting level by saving this new sectioning
+% level's closing tag for later use.
+%
+% \cs{LWR@stoppars} must be executed first.
+% \watchout
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@startnewdepth}{m}{%
+% \end{macrocode}
+% Close any stacked sections up to this new one.
+% \begin{macrocode}
+\LWR@closeprevious{#1}%
+% \end{macrocode}
+% Push a new section depth:
+% \begin{macrocode}
+\LWR@pushoneclose{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \DescribeCounter{LWR@prevFileDepth} Remembers the previous |LWR@FileDepth|.
+%
+% Initialized to a deep level so that any section will trigger a new \HTML\
+% page after the home page.
+% \begin{macrocode}
+\newcounter{LWR@prevFileDepth}
+\setcounter{LWR@prevFileDepth}{\LWR@depthsubparagraph}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\@seccntformat} \marg{sectiontype}
+% \changes{v0.38}{2017/08/21}{Added for \pkg{appendix}.}
+%
+% \begin{macrocode}
+\def\@seccntformat#1{\csname the#1\endcsname\quad}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\simplechapterdelim} Used by \pkg{tocbibind} and \pkg{anonchap}.
+% \changes{v0.40}{2017/09/12}{Added for \pkg{tocbibind}, \pkg{anonchap}.}
+%
+% \begin{macrocode}
+\newcommand*{\simplechapterdelim}{}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@chapcntformat} \marg{sectiontype}
+%
+% \cs{let} to \cs{@seccntformat} by default, but may be redefined
+% by \cs{simplechapter} and \cs{restorechapter} from \pkg{tocbibind} or
+% \pkg{anonchap}.
+%
+% \changes{v0.40}{2017/09/12}{Added for \pkg{tocbibind}, \pkg{anonchap}.}
+%
+% \begin{macrocode}
+\let\@chapcntformat\@seccntformat
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@partcntformat} \marg{sectiontype}
+%
+% \cs{let} to \cs{@seccntformat} by default, but may be redefined
+% by \pkg{ctex}.
+%
+% \changes{v0.62}{2018/11/17}{Added for \pkg{ctex}.}
+%
+% \begin{macrocode}
+\let\@partcntformat\@seccntformat
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@partnameformat}
+% Prints ``Part'' for part sections.
+%
+% Nullified by \pkg{ctex}.
+%
+% \changes{v0.62}{2018/11/17}{Added for \pkg{ctex}.}
+% \begin{macrocode}
+\newcommand*{\@partnameformat}{\LWR@isolate{\partname}~}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \DescribeCounter{LWR@currentautosec} Records the page number when the section
+% was created. If a math expression is included in the section name,
+% and SVG math is used, the corresponding \env{lateximage} will cause the
+% page number to change by the time the following autosec label is created.
+% \changes{v0.43}{2017/11/01}{\ctr{LWR@currentautosec}: Added.}
+% \changes{v0.66}{2019/01/28}{\ctr{LWR@currentautosec}: Fix for \LOF, \LOT float in home page.}
+% \begin{macrocode}
+\newcounter{LWR@currentautosec}
+\setcounter{LWR@currentautosec}{1}
+% \end{macrocode}
+%
+%
+%
+% \begin{macro}{\LWR@section} * \oarg{TOC name} \marg{name} \marg{sectiontype}
+%
+% \changes{v0.20}{2017/01/09}{Combined higher-level sections together into files.}
+% \changes{v0.36}{2017/08/15}{Improved spacing.}
+% \changes{v0.38}{2017/08/21}{\cs{part*} starts a new \HTML\ page, for \pkg{appendix}.}
+% \changes{v0.38}{2017/08/21}{Modified spacing, uses \cs{numberline}.}
+%
+% The common actions for the high-level sectioning commands.
+% \begin{macrocode}
+\DeclareDocumentCommand{\LWR@section}{m m m m}{%
+\IfValueTF{#2}%
+ {\LWR@traceinfo{LWR@section: starting #4 #2}}%
+ {\LWR@traceinfo{LWR@section: starting #4 #3}}%
+\LWR@maybeprintpendingfootnotes{\csuse{LWR@depth#4}}%
+\LWR@stoppars%
+\LWR@startnewdepth{#4}%
+% \end{macrocode}
+% Cancel special \env{minipage} horizontal space interaction:
+% \begin{macrocode}
+\global\boolfalse{LWR@minipagethispar}%
+% \end{macrocode}
+%
+% Start a new \HTML\ file unless starred,
+% and if is a shallow sectioning depth.
+%
+% Exception: Also start a new \HTML\ file for \cs{part*}, for \pkg{appendix}.
+%
+% Generate a new \LaTeX\ page so that \TOC\ and index page number points to the section:
+% \begin{macrocode}
+\LWR@traceinfo{LWR@section: testing whether to start a new HTML file}%
+\IfBooleanT{#1}{\LWR@traceinfo{LWR@section: starred}}%
+\ifbool{LWR@forcinghtmlpage}{\LWR@traceinfo{LWR@section: forcinghtmlpage}}{}%
+\ifthenelse{%
+ \(%
+ \(\NOT\equal{#1}{\BooleanTrue}\)\OR%
+ \(\cnttest{\@nameuse{LWR@depth#4}}{=}{\LWR@depthpart}\)\OR%
+ \(\boolean{LWR@forcinghtmlpage}\)%
+ \)%
+ \AND%
+ \cnttest{\@nameuse{LWR@depth#4}}{<=}{\value{FileDepth}}%
+ \AND%
+ \(%
+ \NOT\boolean{CombineHigherDepths}\OR%
+ \cnttest{\@nameuse{LWR@depth#4}}{<=}{\value{LWR@prevFileDepth}}%
+ \)%
+ \AND%
+% \end{macrocode}
+% \changes{v0.43}{2017/10/31}{Fix: Expansion in comparison.}
+% \begin{macrocode}
+ \(% phantomsection
+ \NOT\isempty{#3}%
+ \OR%
+ \(\NOT\equal{#1}{\BooleanTrue}\)%
+ \)%
+}%
+% \end{macrocode}
+% If so: start a new \HTML\ file:
+% \begin{macrocode}
+{% new file
+ \LWR@traceinfo{LWR@section: new HTML file}%
+% \end{macrocode}
+% See if there was an optional \TOC\ name entry:
+% \begin{macrocode}
+ \IfNoValueTF{#2}%
+% \end{macrocode}
+% If no optional entry
+% \begin{macrocode}
+ {\LWR@newhtmlfile{#3}}%
+% \end{macrocode}
+% If yes an optional entry
+% \begin{macrocode}
+ {\LWR@newhtmlfile{#2}}%
+}% new file
+% \end{macrocode}
+% Else: No new \HTML\ file:
+% \begin{macrocode}
+{% not new file
+% \end{macrocode}
+% Generate a new \LaTeX\ page so that \TOC\ and index page number points to the section:
+% \begin{macrocode}
+ \LWR@traceinfo{LWR@section: not a new HTML file, about to LWR@orignewpage}%
+ \LWR@orignewpage%
+}% not new file
+
+% \end{macrocode}
+% Remember this section's name for \cs{nameref}:
+% \begin{macrocode}
+\IfValueT{#3}{%
+ \LWR@traceinfo{LWR@section: about to LWR@setlatestname}%
+ \IfValueTF{#2}{\LWR@setlatestname{#2}}{\LWR@setlatestname{#3}}%
+}%
+% \end{macrocode}
+% Print an opening comment with the level and the name;
+% ex: ``section'' ``Introduction''
+% Footnotes may be used in section names, which would also appear in the
+% \HTML\ section opening comments, so the short \TOC\ entry is used if possible,
+% and a limited opening comment is made if the sectional unit is starred.
+% \changes{v0.43}{2017/10/31}{Fix: Nullify fonts inside \HTML\ comment.}
+% \changes{v0.52}{2018/03/28}{Fix: Footnote numbering: Limited \HTML\ comment if starred.}
+% \changes{v0.52}{2018/03/28}{Fix: Footnote numbering: Use short \TOC\ entry
+% for HTMLDebug comments.}
+% \begin{macrocode}
+\ifbool{HTMLDebugComments}{%
+ \begingroup%
+ \LWR@nullfonts%
+ \IfBooleanTF{#1}% starred
+ {\LWR@htmlcomment{Opening #4*}}%
+ {%
+ \IfNoValueTF{#2}% short TOC
+ {\LWR@htmlcomment{Opening #4 ``#3''}}%
+ {\LWR@htmlcomment{Opening #4 ``#2''}}%
+ }\LWR@orignewline%
+ \endgroup%
+}{}
+% \end{macrocode}
+% For inline sections paragraph and subparagraph, start a new paragraph now:
+% \begin{macrocode}
+\ifthenelse{%
+ \cnttest{\@nameuse{LWR@depth#4}}{>=}{\LWR@depthparagraph}%
+}%
+ {\LWR@startpars}%
+ {}%
+% \end{macrocode}
+% Create the opening tag with an autosec:
+% \begin{macrocode}
+\LWR@traceinfo{LWR@section: about to LWR@createautosec}%
+\LWR@createautosec{\@nameuse{LWR@tag#4}}%
+% \end{macrocode}
+% \changes{v0.43}{2017/11/01}{Fix: Math in section name.}
+% \begin{macrocode}
+\setcounter{LWR@currentautosec}{\value{page}}%
+% \end{macrocode}
+% Check if starred:
+% \begin{macrocode}
+\IfBooleanTF{#1}%
+{%
+ \LWR@traceinfo{LWR@section: starred}%
+% \end{macrocode}
+% Starred, but also forcing a \TOC\ entry, so
+% add unnumbered \TOC\ name or regular name:
+% \begin{macrocode}
+ \ifbool{LWR@forcinghtmltoc}%
+ {%
+ \addcontentsline{toc}{#4}{%
+ \IfValueTF{#2}{\LWR@isolate{#2}}{\LWR@isolate{#3}}%
+ }%
+ }%
+ {}%
+}% starred
+% \end{macrocode}
+% Not starred, so step counter and add to \TOC:
+% \begin{macrocode}
+{% not starred
+% \end{macrocode}
+% Only add a numbered \TOC\ entry if section number is not too deep:
+% \begin{macrocode}
+ \ifthenelse{%
+ \cnttest{\@nameuse{LWR@depth#4}}{<=}{\value{secnumdepth}}%
+ }%
+ {% if secnumdepth
+% \end{macrocode}
+% If in the main matter, step the counter and add the \TOC\ entry.
+% For |article| class, \pkg{lwarp} assumes that all is mainmatter.
+% \begin{macrocode}
+ \LWR@traceinfo{LWR@section: about to test main matter}%
+ \ifbool{LWR@mainmatter}%
+ {%
+ \LWR@traceinfo{LWR@section: yes mainmatter}%
+ \refstepcounter{#4}%
+% \end{macrocode}
+% Add main matter numbered \TOC\ entry with the \TOC\ name or the regular name:
+% \changes{v0.64}{2018/12/07}{Support for \pkg{ujarticle and related.}}
+% \begin{macrocode}
+ \LWR@traceinfo{LWR@section: about to addcontentsline}%
+ \addcontentsline{toc}{#4}%
+ {%
+ \protect\numberline{%
+ \@nameuse{pre#4name}%
+ \@nameuse{the#4}%
+ \@nameuse{post#4name}%
+ }%
+ {%
+ \ignorespaces%
+ \IfValueTF{#2}{\LWR@isolate{#2}}{\LWR@isolate{#3}}\protect\relax%
+ }%
+ }%
+ \LWR@traceinfo{LWR@section: finished addcontentsline}%
+ }% end of if main matter
+% \end{macrocode}
+% If not main matter, add unnumbered \TOC\ name or regular name:
+% \begin{macrocode}
+ {% not main matter
+ \LWR@traceinfo{LWR@section: no main matter}%
+ \addcontentsline{toc}{#4}{%
+ \IfValueTF{#2}{\LWR@isolate{#2}}{\LWR@isolate{#3}}%
+ }%
+ }% end of not main matter
+ }% end of secnumdepth
+% \end{macrocode}
+% Deeper than secnumdepth, so add an unnumbered \TOC\ entry:
+% \begin{macrocode}
+ {%
+ \addcontentsline{toc}{#4}{%
+ \IfValueTF{#2}{\LWR@isolate{#2}}{\LWR@isolate{#3}}%
+ }%
+ }%
+% \end{macrocode}
+% For part, print ``Part'':
+% \begin{macrocode}
+ \ifbool{LWR@mainmatter}%
+ {%
+ \ifthenelse{%
+ \(\cnttest{\@nameuse{LWR@depth#4}}{<=}%
+ {\value{secnumdepth}}\) \AND%
+ \(\cnttest{\@nameuse{LWR@depth#4}}{=}{\LWR@depthpart}\)%
+ }%
+ {\@partnameformat}%
+ {}%
+% \end{macrocode}
+% Print the section number:
+% \begin{macrocode}
+ \LWR@traceinfo{LWR@section: about to print section number}%
+ \ifthenelse{%
+ \cnttest{\@nameuse{LWR@depth#4}}{<=}{\value{secnumdepth}}%
+ }%
+ {%
+ \ifstrequal{#4}{part}%
+ {\protect\LWR@sectionnumber{\@partcntformat{#4}}}%
+ {%
+ \ifstrequal{#4}{chapter}%
+ {\protect\LWR@sectionnumber{\@chapcntformat{#4}}}%
+ {\protect\LWR@sectionnumber{\@seccntformat{#4}}}%
+ }%
+ }%
+ {}%
+ \LWR@traceinfo{LWR@section: finished print section number}%
+ }{}%
+}% end of not starred
+% \end{macrocode}
+% Print the section name:
+% \begin{macrocode}
+\LWR@traceinfo{LWR@section: about to print the section name}%
+\LWR@isolate{#3}%
+% \end{macrocode}
+% Close the heading tag, such as /H2:
+% \changes{v0.66}{2019/02/02}{Improved \HTML\ formatting.}
+% \begin{macrocode}
+\LWR@traceinfo{LWR@section: about to close the heading tag}%
+\LWR@htmltag{\@nameuse{LWR@tag#4end}}%
+\LWR@orignewline%
+% \end{macrocode}
+% Generate a \LaTeX{} label:
+% \changes{v0.43}{2017/11/01}{Fix: Math in section name.}
+% \changes{v0.48}{2018/02/11}{Fix: \TOC, \LOF, \LOT\ links.}
+% \changes{v0.66}{2019/01/28}{Fix: \TOC, \LOF, \LOT\ links.}
+% \changes{v0.66}{2019/02/02}{Improved \HTML\ formatting.}
+% \begin{macrocode}
+\LWR@traceinfo{LWR@section: about to create the LaTeX label}%
+\setcounter{LWR@latestautopage}{\value{page}}%
+\LWR@newautopagelabel{LWR@currentautosec}\LWR@orignewline%
+% \end{macrocode}
+% Start paragraph handing unless is an inline paragraph or subparagraph:
+% \begin{macrocode}
+\ifthenelse{%
+ \cnttest{\@nameuse{LWR@depth#4}}{<}{\LWR@depthparagraph}%
+}%
+ {\LWR@startpars}%
+ {}%
+% \end{macrocode}
+% If not starred, remember the previous depth to
+% possibly trigger a new \HTML\ page.
+%
+% HOWEVER, allow a \cs{part*} to start a new \HTML\ page.
+% This is used by \pkg{appendix}.
+%
+% A starred section does not trigger a new \HTML\ page at the beginning
+% of this macro, so it should not affect it here at the end either.
+% This became an issue when a \cs{listoftables} was tested in the middle of
+% the document. The \cs{chapter*} for the list was not allowing
+% a new \HTML\ page for the section following it
+% while |CombineHigherDepths| was true.
+% \begin{macrocode}
+\ifthenelse{%
+ \NOT\equal{#1}{\BooleanTrue}\OR%
+ \cnttest{\@nameuse{LWR@depth#4}}{=}{\LWR@depthpart}%
+}%
+ {% not starred
+ \setcounter{LWR@prevFileDepth}{\@nameuse{LWR@depth#4}}%
+ }% not starred
+ {}%
+% \end{macrocode}
+% Reset to defaults if not a phantomsection:
+% \begin{macrocode}
+\ifstrempty{#3}%
+ {}%
+ {%
+ \global\boolfalse{LWR@forcinghtmlpage}%
+ \global\boolfalse{LWR@forcinghtmltoc}%
+ }%
+%
+\LWR@traceinfo{LWR@section: done}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Pre- and post- sectioning names}
+
+
+% \begin{macro}{\prebookname}
+% \begin{macro}{\postbookname}
+%
+% Usually null, but is used by \pkg{uj*} and \pkg{ut*} Japanese classes.
+%
+% \changes{v0.73}{2019/06/21}{Added \cs{book} for \pkg{memoir}.}
+% \begin{macrocode}
+\providecommand*{\prebookname}{}
+\providecommand*{\postbookname}{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+
+% \begin{macro}{\prepartname}
+% \begin{macro}{\postpartname}
+%
+% Usually null, but is used by \pkg{uj*} and \pkg{ut*} Japanese classes.
+% \begin{macrocode}
+\providecommand*{\prepartname}{}
+\providecommand*{\postpartname}{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+
+% \begin{macro}{\prechaptername}
+% \begin{macro}{\postchaptername}
+%
+% Usually null, but is used by \pkg{uj*} and \pkg{ut*} Japanese classes.
+% \begin{macrocode}
+\providecommand*{\prechaptername}{}
+\providecommand*{\postchaptername}{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+
+% \begin{macro}{\presectionname}
+% \begin{macro}{\postsectionname}
+%
+% Always null, but provided here for algorithmic simplicity in \cs{LWR@section}.
+% \begin{macrocode}
+\providecommand*{\presectionname}{}
+\let\postsectionname\presectionname
+
+\let\presubsectionname\presectionname
+\let\postsubsectionname\postsectionname
+
+\let\presubsubsectionname\presectionname
+\let\postsubsubsectionname\postsectionname
+
+\let\preparagraphname\presectionname
+\let\postparagraphname\postsectionname
+
+\let\presubparagraphname\presectionname
+\let\postsubparagraphname\postsectionname
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+
+
+% \subsection{\cs{section} and friends}
+%
+% For \pkg{memoir}, a second optional argument is allowed.
+%
+% For \pkg{hypbmsec}, a second optional argument or either parenthesis argument
+% is allowed.
+%
+% Each of these additional arguments are for headers or \PDF\ bookmarks,
+% and are ignored for \HTML\ output.
+
+
+% \begin{macro}{\part} * \parg{2:PDF name} \oarg{3:TOC name}
+% \oarg{4:PDF name} \parg{5:PDF name} \marg{6:name}
+%
+% \changes{v0.38}{2017/08/21}{Fix with \pkg{article} class.}
+% \changes{v0.44}{2017/11/21}{Add preamble for \pkg{koma-script}.}
+% \changes{v0.72}{2019/05/27}{Added support for \pkg{hypbmsec}.}
+%
+% \begin{macrocode}
+\newcommand{\part@preamble}{}% for koma-script
+
+\DeclareDocumentCommand{\part}{s d() o o d() m}{%
+ \LWR@section{#1}{#3}{#6}{part}%
+
+ \part@preamble% for koma-script
+ \renewcommand{\part@preamble}{}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\chapter} * \parg{2:PDF name} \oarg{3:TOC name}
+% \oarg{4:PDF name} \parg{5:PDF name} \marg{6:name}
+%
+% \changes{v0.28}{2017/04/06}{If \EPUB, prints footnotes before each section.}
+% \changes{v0.40}{2017/09/22}{Added support for \pkg{quotchap}.}
+% \changes{v0.44}{2017/11/21}{Add preamble for \pkg{koma-script}.}
+% \changes{v0.45}{2017/12/04}{Add optional heading title for \pkg{memoir}.}
+% \changes{v0.72}{2019/05/27}{Added support for \pkg{hypbmsec}.}
+% \begin{macrocode}
+\let\@printcites\relax% for quotchap package
+
+\newcommand{\chapter@preamble}{}% for koma-script
+
+\@ifundefined{chapter}
+{}
+{%
+ \DeclareDocumentCommand{\chapter}{s d() o o d() m}{%
+ \LWR@section{#1}{#3}{#6}{chapter}%
+
+ \@printcites% for quotchap package
+
+ \chapter@preamble% for koma-script
+ \renewcommand{\chapter@preamble}{}%
+ }
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\section} * \parg{2:PDF name} \oarg{3:TOC name}
+% \oarg{4:PDF name} \parg{5:PDF name} \marg{6:name}
+% \changes{v0.45}{2017/12/04}{Add optional heading title for \pkg{memoir}.}
+% \changes{v0.72}{2019/05/27}{Added support for \pkg{hypbmsec}.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\section}{s d() o o d() m}{%
+ \LWR@section{#1}{#3}{#6}{section}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \begin{macro}{\subsection} * \parg{2:PDF name} \oarg{3:TOC name}
+% \oarg{4:PDF name} \parg{5:PDF name} \marg{6:name}
+% \changes{v0.72}{2019/05/27}{Added support for \pkg{hypbmsec}.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\subsection}{s d() o o d() m}{%
+ \LWR@section{#1}{#3}{#6}{subsection}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \begin{macro}{\subsubsection} * \parg{2:PDF name} \oarg{3:TOC name}
+% \oarg{4:PDF name} \parg{5:PDF name} \marg{6:name}
+% \changes{v0.72}{2019/05/27}{Added support for \pkg{hypbmsec}.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\subsubsection}{s d() o o d() m}{%
+ \LWR@section{#1}{#3}{#6}{subsubsection}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+
+% \begin{macro}{\paragraph} * \parg{2:PDF name} \oarg{3:TOC name}
+% \oarg{4:PDF name} \parg{5:PDF name} \marg{6:name}
+% \changes{v0.72}{2019/05/27}{Added support for \pkg{hypbmsec}.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\paragraph}{s d() o o d() m}{%
+ \LWR@section{#1}{#3}{#6}{paragraph}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \begin{macro}{\subparagraph} * \parg{2:PDF name} \oarg{3:TOC name}
+% \oarg{4:PDF name} \parg{5:PDF name} \marg{6:name}
+% \changes{v0.72}{2019/05/27}{Added support for \pkg{hypbmsec}.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\subparagraph}{s d() o o d() m}{%
+ \LWR@section{#1}{#3}{#6}{subparagraph}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+
+% \section{Starting a new file}
+% \label{sec:startingfile}
+
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+
+% \begin{macro}{\HTMLLanguage} Default language for the \HTML\ |lang| tag.
+% \gindex{language HTML metadata}
+%
+% \changes{v0.30}{2017/04/28}{Renamed from \cs{MetaLanguage}.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@currentHTMLLanguage}{en-US}
+
+\newcommand*{\HTMLLanguage}[1]{%
+\renewcommand*{\LWR@currentHTMLLanguage}{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\theHTMLTitleSeparator}
+% May be used inside \cs{theHTMLTitleSection} to separate the
+% website's overall \HTML\ title and the particular page's
+% section name.
+% \changes{v0.52}{2018/04/01}{Fix: \cs{FileDepth} with non-utf8 encoding.}
+% \changes{v0.62}{2018/11/02}{Refactored.}
+% \changes{v0.64}{2018/12/07}{Added \pkg{utarticle} and related.}
+% \begin{macrocode}
+\ifPDFTeX% pdflatex or dvi latex
+ \ifdefstring{\inputencodingname}{utf8}{%
+ \newcommand*{\theHTMLTitleSeparator}{ — }% EMdash
+ }{%
+ \newcommand*{\theHTMLTitleSeparator}{ - }% hyphen
+ }%
+\else%
+ \ifpTeX
+ \newcommand*{\theHTMLTitleSeparator}{ - }% hyphen
+ \else
+ \newcommand*{\theHTMLTitleSeparator}{ — }% EMdash
+ \fi%
+\fi%
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\HTMLTitleBeforeSection}
+% Sets the \HTML\ page's meta \attribute{title} tag to
+% show the website title before the section name.
+% \begin{macrocode}
+\newcommand*{\HTMLTitleBeforeSection}{%
+ \def\theHTMLTitleSection{%
+ \theHTMLTitle\theHTMLTitleSeparator\theHTMLSection%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\HTMLTitleAfterSection}
+% Sets the \HTML\ page's meta \attribute{title} tag to
+% show the section name before the website title.
+% \begin{macrocode}
+\newcommand*{\HTMLTitleAfterSection}{%
+ \def\theHTMLTitleSection{%
+ \theHTMLSection\theHTMLTitleSeparator\theHTMLTitle%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\theHTMLTitleSection}
+% Forms the \HTML\ page's meta \attribute{title} tag.
+% The default is to show the website title before the section name.
+% \changes{v0.62}{2018/11/02}{Added.}
+% \begin{macrocode}
+\HTMLTitleBeforeSection
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\theHTMLSection}
+% The section name is passed to \cs{LWR@filestart},
+% which then sets \cs{theHTMLSection} for use
+% inside \cs{theHTMLTitleSection} to create an
+% \HTML\ meta \attribute{title} tag.
+% \changes{v0.62}{2018/11/02}{Added.}
+% \begin{macrocode}
+\newcommand*{\theHTMLSection}{}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@filestart} \oarg{sectionname} \qquad
+% Creates the opening \HTML\ tags.
+% \changes{v0.19}{2016/05/25}{lwarp\_mathjax.txt loaded.}
+% \changes{v0.20}{2016/06/27}{Adds meta description.}
+% \changes{v0.21}{2017/02/22}{Skip title if not given.}
+% \changes{v0.28}{2017/04/06}{Adds \HTML\ meta author.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@filestart}[1][]{%
+\LWR@traceinfo{LWR@filestart !#1!}%
+% \end{macrocode}
+% Locally temporarily disable direct-formatting commands:
+% \begin{macrocode}
+\begingroup%
+\LWR@nullfonts%
+% \end{macrocode}
+% Save the section name for use while creating the
+% \HTML\ meta \attribute{title} tag:
+% \begin{macrocode}
+\edef\theHTMLSection{#1}%
+% \end{macrocode}
+% Create the page's \HTML\ header:
+% \begin{macrocode}
+\LWR@htmltag{!DOCTYPE html}\LWR@orignewline
+% \end{macrocode}
+% The language is user-adjustable:
+% \begin{macrocode}
+\LWR@htmltag{%
+ html lang=\LWR@orig@textquotedbl\LWR@currentHTMLLanguage\LWR@orig@textquotedbl%
+}\LWR@orignewline
+% \end{macrocode}
+% Start of the meta data:
+% \begin{macrocode}
+\LWR@htmltag{head}\LWR@orignewline
+% \end{macrocode}
+% Charset is fixed at UTF-8:
+% \begin{macrocode}
+\LWR@htmltag{%
+ meta charset=\LWR@orig@textquotedbl{}UTF-8\LWR@orig@textquotedbl\ /%
+}\LWR@orignewline
+% \end{macrocode}
+%
+% Author:
+% \changes{v0.44}{2017/11/18}{Fix \cs{HTMLAuthor}.}
+% \begin{macrocode}
+\ifthenelse{\equal{\theHTMLAuthor}{}}%
+ {}%
+ {%
+ \LWR@htmltag{%
+ meta name=\LWR@orig@textquotedbl{}author\LWR@orig@textquotedbl\ % space
+ content=\LWR@orig@textquotedbl\theHTMLAuthor\LWR@orig@textquotedbl\ /%
+ }\LWR@orignewline%
+ }%
+% \end{macrocode}
+%
+% \pkg{lwarp} is the generator:
+% \gindex{HTML>meta tag>generator}
+% \gindex{generator>HTML meta tag}
+% \gindex{meta tag, HTML>generator}
+% \begin{macrocode}
+\LWR@htmltag{%
+ meta % space
+ name=\LWR@orig@textquotedbl{}generator\LWR@orig@textquotedbl\ % space
+ content=\LWR@orig@textquotedbl{}LaTeX lwarp package\LWR@orig@textquotedbl\ /%
+}\LWR@orignewline%
+% \end{macrocode}
+% If there is a description, add it now:
+% \begin{macrocode}
+\ifdefempty{\LWR@currentHTMLDescription}{}{%
+ \LWR@htmltag{%
+ meta name=\LWR@orig@textquotedbl{}description\LWR@orig@textquotedbl\ % space
+ content=\LWR@orig@textquotedbl\LWR@currentHTMLDescription\LWR@orig@textquotedbl\ /%
+ }\LWR@orignewline
+}%
+% \end{macrocode}
+% Mobile-friendly viewport:
+% \gindex{HTML>meta tag>viewport}
+% \gindex{viewport>HTML meta tag}
+% \gindex{meta tag, HTML>viewport}
+% \begin{macrocode}
+\LWR@htmltag{%
+ meta % space
+ name=\LWR@orig@textquotedbl{}viewport\LWR@orig@textquotedbl\ % space
+ content=\LWR@orig@textquotedbl{}width=device-width, initial-scale=1.0\LWR@orig@textquotedbl\ /%
+}\LWR@orignewline
+% \end{macrocode}
+% IE patch:
+% \changes{v0.63}{2018/11/30}{Fix: Break ligature for \pkg{luatexko}.}
+% \begin{macrocode}
+\LWR@htmltag{!-\/-[if lt IE 9]}\LWR@orignewline
+\LWR@htmltag{%
+ script % space
+ src=\LWR@orig@textquotedbl{}%
+ http://html5shiv.googlecode.com/svn/trunk/html5.js%
+ \LWR@orig@textquotedbl%
+}%
+\LWR@htmltag{/script}\LWR@orignewline
+\LWR@htmltag{![endif]-\/-}\LWR@orignewline
+% \end{macrocode}
+% The page's title, if there is one.
+% A section name is also added if given.
+% \changes{v0.44}{2017/11/18}{Add \cs{HTMLTitle}.}
+% \changes{v0.62}{2018/11/02}{Refactored.}
+% \begin{macrocode}
+\ifthenelse{\equal{\theHTMLTitle}{}}%
+ {}%
+ {%
+ \LWR@htmltag{title}%
+ \ifdefempty{\theHTMLSection}%
+ {\theHTMLTitle}%
+ {\theHTMLTitleSection}%
+ \LWR@htmltag{/title}\LWR@orignewline%
+ }%
+% \end{macrocode}
+% The page's stylesheet:
+% \begin{macrocode}
+\LWR@htmltag{%
+ link % space
+ rel=\LWR@orig@textquotedbl{}stylesheet\LWR@orig@textquotedbl\ % space
+ type=\LWR@orig@textquotedbl{}text/css\LWR@orig@textquotedbl\ % space
+ href=\LWR@orig@textquotedbl\LWR@currentcss\LWR@orig@textquotedbl\ /%
+}%
+\LWR@orignewline
+% \end{macrocode}
+% Optional \brand{MathJax} support. The \HTML\ tags must be turned off
+% during the verbatim input, and the paragraph handling which was
+% turned on at the end of verbatim input must be immediately turned off
+% again.
+% \begin{macrocode}
+\ifbool{mathjax}%
+{%
+ \begingroup%
+ \LWR@restoreoriglists%
+ \boolfalse{LWR@verbtags}%
+% \end{macrocode}
+% ^^A \ifbool{mathKaTeX}{%
+% ^^A \verbatiminput{lwarp_KaTeX.txt}%
+% ^^A }{%
+% \begin{macrocode}
+ \verbatiminput{\LWR@mathjaxfilename}%
+% \end{macrocode}
+% ^^A }%
+% \begin{macrocode}
+ \booltrue{LWR@verbtags}%
+ \endgroup%
+ \LWR@stoppars%
+}% end of mathjax
+{}%
+% \end{macrocode}
+% End of the header:
+% \begin{macrocode}
+\LWR@htmltag{/head}\LWR@orignewline
+% \end{macrocode}
+% Start of the body:
+% \begin{macrocode}
+\LWR@htmltag{body}\LWR@orignewline
+\endgroup
+\LWR@traceinfo{LWR@filestart: done}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+
+
+% \section{Starting \HTML\ output}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@LwarpStart}
+% Executed at the beginning of the entire document.
+%
+% The use of \cs{textquotedbl} instead of |"| improves compatibility with \pkg{xeCJK}.
+%
+% \changes{v0.19}{2016/06/01}{Enabled \textbackslash\textbackslash{} equal to \cs{newline}.}
+% \changes{v0.21}{2017/02/22}{Changed \filenm{lateximages} to a \filenm{.txt} file.}
+% \changes{v0.28}{2017/04/09}{\progcode{FormatWordProcessor} forces single-file output.}
+% \changes{v0.63}{2018/11/24}{Fixes for \pkg{xeCJK}.}
+% \begin{macrocode}
+\catcode`\$=\active
+\newcommand*{\LWR@LwarpStart}
+{%
+\LWR@traceinfo{LWR@lwarpStart}
+% \end{macrocode}
+%
+% If formatting for a word processor,
+% force filedepth to single-file only,
+% force \HTML\ debug comments off.
+% \begin{macrocode}
+\ifbool{FormatWP}{%
+ \setcounter{FileDepth}{-5}%
+ \boolfalse{HTMLDebugComments}%
+}{}
+% \end{macrocode}
+%
+% Expand and detokenize \cs{HomeHTMLFilename} and \cs{HTMLFilename}:
+% \begin{macrocode}
+\edef\LWR@strresult{\HomeHTMLFilename}
+\edef\HomeHTMLFilename{\detokenize\expandafter{\LWR@strresult}}
+\edef\LWR@strresult{\HTMLFilename}
+\edef\HTMLFilename{\detokenize\expandafter{\LWR@strresult}}
+% \end{macrocode}
+% Force onecolumn and empty page style:
+% \begin{macrocode}
+\LWR@origonecolumn%
+\LWR@origpagestyle{empty}%
+% \end{macrocode}
+% No black box for overfull lines:
+% \changes{v0.55}{2018/04/24}{Fix: Overfull boxes in \env{lateximage}s.}
+% \begin{macrocode}
+\overfullrule=0pt
+% \end{macrocode}
+% Reduce chance of line overflow when \HTML\ tags are added:
+% \begin{macrocode}
+\LWR@print@footnotesize%
+% \end{macrocode}
+% In \PDF\ output, don't allow line breaks to interfere with \HTML\ tags:
+% \begin{macrocode}
+\LWR@print@raggedright%
+\LetLtxMacro{\\}{\LWR@endofline}%
+% \end{macrocode}
+% Spread the lines for \prog{pdftotext} to read them well:
+% \begin{macrocode}
+\linespread{1.3}%
+% \end{macrocode}
+% For \prog{pdftotext} to reliably identify paragraph splits:
+% \begin{macrocode}
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{2ex}
+% \end{macrocode}
+%
+% For the \env{lateximage} record file:
+% \begin{macrocode}
+\immediate\openout\LWR@lateximagesfile=\BaseJobname-images.txt
+% \end{macrocode}
+%
+% Removes space around the caption in the \HTML:
+% \changes{v0.48}{2018/02/13}{Adjusted space around captions.}
+% \begin{macrocode}
+\setlength{\belowcaptionskip}{0ex}
+\setlength{\abovecaptionskip}{0ex}
+% \end{macrocode}
+% Redefine the plain page style to be empty when used by index pages:
+% \begin{macrocode}
+\renewcommand{\ps@plain}{}
+% \end{macrocode}
+% Plug in some new actions.
+% This is done just before the document start
+% so that they won't be over-written by some other package.
+% \changes{v0.13}{2016/03/23}{\cs{up} and \cs{fup}}
+%
+% Float captions:
+% \begin{macrocode}
+\let\LWR@origcaption\caption
+% \end{macrocode}
+%
+% Labels:
+% \cs{ltx@label} is used in \pkg{amsmath} environments and is also
+% patched by \pkg{cleveref}.
+% \gindex{label>in HTML}
+% \margintag{Label in \HTML}
+% \changes{v0.20}{2017/01/30}{Fix: math cross references.}
+% \begin{macrocode}
+\let\LWR@origltx@label\ltx@label
+\let\ltx@label\LWR@htmlmathlabel
+% \end{macrocode}
+% Not yet started any paragraph handling:
+% \begin{macrocode}
+\global\boolfalse{LWR@doingapar}
+\global\boolfalse{LWR@doingstartpars}
+% \end{macrocode}
+% Document and page settings:
+% \changes{v0.45}{2017/12/08}{Fix: Lateximages on incorrect pages with Mathjax.}
+% \begin{macrocode}
+\mainmatter
+\LWR@origpagenumbering{arabic}
+% \end{macrocode}
+% Start a new \HTML\ file and a header:
+% \begin{macrocode}
+\LWR@traceinfo{LWR@lwarpStart: Starting new file.}
+\LWR@filestart
+\LWR@traceinfo{LWR@lwarpStart: Generating first header.}
+% \end{macrocode}
+% \changes{v0.73}{2019/06/23}{Fix: Empty header/footer.}
+% \begin{macrocode}
+\ifdefempty{\LWR@firstpagetop}{}{%
+ \LWR@htmltag{header}\LWR@orignewline
+ \LWR@startpars
+ \LWR@firstpagetop
+ \LWR@stoppars
+ \LWR@htmltag{/header}\LWR@orignewline
+}%
+% \end{macrocode}
+% \changes{v0.65}{2018/12/18}{Improved \CSS\ for page layout.}
+% \begin{macrocode}
+\LWR@htmlelementclass{div}{bodywithoutsidetoc}
+\LWR@htmlelementclass{div}{bodycontainer}
+\LWR@traceinfo{LWR@lwarpStart: Generating textbody.}
+\LWR@htmlelementclass{section}{textbody}
+% \end{macrocode}
+%
+% Patch the |itemize|, |enumerate|, and |description| environments and \cs{item}.
+% This works with the native \LaTeX\ environments, as well as
+% those provided by \pkg{enumitem}, \pkg{enumerate}, and \pkg{paralist}.
+% \begin{macrocode}
+\LWR@patchlists
+% \end{macrocode}
+%
+% Ensure that math mode is active to call \pkg{lwarp}'s patches:
+% \begin{macrocode}
+\catcode`\$=\active
+% \end{macrocode}
+%
+% Required for \cs{nameref} to work with \SVG\ math:
+% \changes{v0.47}{2018/01/25}{Fix for \SVG\ math in \cs{nameref}.}
+% \begin{macrocode}
+\immediate\write\@mainaux{\catcode`\string$\active}%
+\LetLtxMacro\LWR@syntaxhighlightone$% balance for editor syntax highlighting
+% \end{macrocode}
+%
+% Allow \HTML\ paragraphs to begin:
+% \begin{macrocode}
+\LWR@startpars
+% \end{macrocode}
+%
+% If using \brand{MathJax},
+% disable \cs{ensuremath} by printing a nullified
+% definition at the start of each file, and add further customizations:
+% \changes{v0.51}{2018/03/18}{MathJax: Nullifies \cs{ensuremath}.}
+% \begin{macrocode}
+\LWR@customizeMathJax
+% \end{macrocode}
+%
+% ^^A % Likewise for Ka\TeX:
+% ^^A % \changes{v0.62}{2018/11/03}{KaTeX: Nullifies \cs{ensuremath}.}
+% ^^A % \begin{macrocode}
+% ^^A \LWR@customizeKaTeX
+% ^^A % \end{macrocode}
+%
+%
+% First autopage label in case a figure occurs early.
+% \changes{v0.66}{2019/01/28}{Fix: \TOC, \LOF, \LOT\ links.}
+% \begin{macrocode}
+\setcounter{LWR@latestautopage}{\value{page}}%
+\LWR@newautopagelabel{LWR@currentautosec}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LWR@traceinfo{LWR@lwarpStart: done}
+}
+\catcode`\$=3% math shift until lwarp starts
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+
+% \section{Ending \HTML\ output}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@requesttoc} \marg{boolean} \marg{suffix}
+% \changes{v0.18}{2016/05/19}{Reorganize \cs{HomeHTMLFilename} logic.}
+% Requests that a \TOC, \LOF, or \LOT be generated.
+
+% \begin{macrocode}
+\newcommand*{\LWR@requesttoc}[2]{%
+\ifbool{#1}
+{
+ \expandafter\newwrite\@nameuse{tf@#2}
+ \immediate\openout \@nameuse{tf@#2} \jobname.#2\relax
+}{}
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@LwarpEnd}
+% Final stop of all \HTML\ output:
+%
+% \changes{v0.28}{2017/04/06}{If \progcode{FormatEPUB} or \progcode{FormatWP}, no bottom nav.}
+% \begin{macrocode}
+\newcommand*{\LWR@LwarpEnd}
+{
+\LWR@stoppars
+\LWR@closeprevious{finished}
+% \end{macrocode}
+% At the bottom of the ending file:
+
+% Close the textbody:
+% \changes{v0.65}{2018/12/18}{Improved \CSS\ for page layout.}
+% \begin{macrocode}
+\LWR@htmlelementclassend{section}{textbody}
+\LWR@htmlelementclassend{div}{bodycontainer}
+\LWR@htmlelementclassend{div}{bodyandsidetoc}
+% \end{macrocode}
+% Print any pending footnotes:
+% \begin{macrocode}
+\LWR@printpendingfootnotes
+% \end{macrocode}
+%
+% Create the footer:
+%
+% \changes{v0.73}{2019/06/23}{Fix: Empty header/footer.}
+% \begin{macrocode}
+\ifdefempty{\LWR@pagebottom}{}{%
+ \LWR@htmlelement{footer}
+
+ \LWR@pagebottom
+
+ \LWR@htmlelementend{footer}
+}
+% \end{macrocode}
+
+% No bottom navigation if are finishing the home page,
+% or if formatting for an \EPUB\ or word processor.
+%
+% Presumably has a table-of-contents.
+% \begin{macrocode}
+\ifthenelse{\boolean{FormatEPUB}\OR\boolean{FormatWP}}
+ {}
+ {
+ \ifnumcomp{\value{LWR@htmlfilenumber}}{>}{0}{\LWR@botnavigation}{}
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\LWR@stoppars% final stop of all paragraphs
+% \end{macrocode}
+% Finish the \HTML\ file:
+% \begin{macrocode}
+\LWR@htmltag{/body}\LWR@orignewline
+\LWR@htmltag{/html}\LWR@orignewline
+% \end{macrocode}
+% Seems to be required sometimes:
+% \begin{macrocode}
+\LWR@orignewpage
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \begin{macro}{\enddocument}
+% If labels have not changed, mark successful completion
+% of the \env{lateximages} file.
+% Executed as everything is being shut down.
+% \changes{v0.70}{2019/03/26}{If labels changed, require recompile before making limages.}
+% \begin{macrocode}
+\xpatchcmd{\enddocument}
+ {%
+ \if@tempswa
+ \@latex@warning@no@line{Label(s) may have changed.
+ Rerun to get cross-references right}%
+ \fi
+ }
+ {%
+ \if@tempswa
+ \@latex@warning@no@line{Label(s) may have changed.
+ Rerun to get cross-references right}%
+ \else
+ \immediate\write\LWR@lateximagesfile{%
+ |end|end|end|%
+ }%
+ \fi
+ }
+ {}
+ {
+ \PackageWarningNoLine{lwarp}
+ {%
+ Could not patch \protect\enddocument.\MessageBreak
+ If labels have changed, be sure to recompile before\MessageBreak
+ creating lateximages with\MessageBreak
+ \space\space lwarpmk limages,\MessageBreak
+ or the images may be corrupt%
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \section{Title page}
+% \label{sec:titles}
+%
+% \limitstitlepage
+%
+% \pkg{lwarp} provides for the \cs{author} macro an additional \cs{affiliation}
+% \margintag{affiliation}
+% macro to provide an affiliation and other additional information
+% for each author in the title page.
+% The affiliation information is removed when using
+% \pkg{titlingpage}'s \cs{theauthor} in the main text.
+%
+% The \pkg{titling} package maintains the definitions of \cs{thetitle},
+% \margintag{reusing titlepage information}
+% \cs{theauthor}, etc., after the title has been typeset.
+% These commands are to be used to refer to the document's title
+% and author, etc., in the main text.
+% These definitions
+% have the \cs{thanks} and \cs{affiliation} removed, and for \cs{author} the
+% \cs{and} is replaced to generate a simple inline list of authors separated
+% by commas.
+% Note: \cs{theauthor} does not work well
+% \trouble[\cs{theauthor}, \pkg{authblk}]{theauthor=\cs{theauthor} and \pkg{authblk}}
+% \trouble{authblk=\pkg{authblk}>theauthor=\cs{theauthor}}
+% with \pkg{authblk} unless the traditional \LaTeX\ syntax is used.
+%
+% \cs{printtitle}, \cs{printauthor}, etc., are provided for use inside a custom
+% \margintag{custom titlepages}
+% \env{titlepage} or \env{titlingpage} environment, and these retain
+% the \cs{thanks} and \cs{affiliation}.
+%
+% \DescribeMacro{\printthanks}
+% \cs{printthanks} has been added to force the printing of thanks inside
+% a \env{titlingpage} environment when \cs{maketitle} is not used.
+%
+% Inside a \cs{titlepage} or \cs{titlingpage} environment, use
+% \trouble[\cs{thanks}]{title>thanks=\cs{thanks}}
+% \trouble{footnote>title}
+% \cs{thanks} instead of \cs{footnote} for acknowledgements, etc.
+%
+%
+% \subsection{Setting the title, etc.}
+%
+% The following provide setting commands for both \HTML\ and print outputs.
+%
+% \DescribeMacro{\author} \marg{author}
+% \DescribeMacro{\and}
+% While using \cs{maketitle} and print mode,
+% the author is treated as a single-column \env{tabular}
+% and the \cs{and} feature finishes the current \env{tabular} then starts a new one for
+% the next author. Each author thus is placed into its own \env{tabular}, and an
+% affiliation may be placed on its own line such as
+%
+% |\author{Name \\ Affiliation \and Second Name \\ Second Affiliation}|
+%
+% For \HTML, the entire author block is placed inside
+% a \element{div} of class \attribute{author},
+% and each individual author is inside a \element{div} of class \attribute{oneauthor}.
+%
+% \DescribeMacro{\@title}
+% \DescribeMacro{\@author}
+% \DescribeMacro{\@date}
+% \cs{@title}, \cs{@author}, and \cs{@date} \ store the values
+% as originally assigned, including any \cs{thanks}, \cs{and}, or \cs{affiliation}.
+% These are low-level macros intended to be used by other macros
+% only inside a \env{titlepage} or \env{titlingpage},
+% and are used by \cs{maketitle}.
+% The author is printed inside a single-column \env{tabular},
+% which becomes multiple single-column \env{tabular}s if multiples authors are included.
+% For \HTML, these \env{tabular}s become side-by-side \element{div}s
+% of class \attribute{oneauthor}, all of which are combined into one \element{div}
+% of class \attribute{author}.
+%
+% \DescribeMacro{\printtitle}
+% \DescribeMacro{\printauthor}
+% \DescribeMacro{\printdate}
+% \cs{printtitle}, etc.\ are user-level macros intended to
+% be used in custom \env{titlepage} or \env{titlingpage} environments in cases where
+% \cs{maketitle} is not desired. These commands preserve the \cs{thanks}, etc.,
+% and should not be used in the main text.
+%
+% \DescribeMacro{\thetitle}
+% \DescribeMacro{\theauthor}
+% \DescribeMacro{\thedate}
+% \DescribeMacro{\HTMLPageBottom}
+% \cs{thetitle}, \cs{theauthor}, and \cs{thedate} are available
+% if \pkg{titling} has been loaded, and are sanitized user-level
+% versions from which have been removed the \cs{thanks} and \cs{affiliation},
+% and \cs{and} is changed for inline text usage.
+% The author is printed inline without \cs{affiliation} or \cs{thanks},
+% with \cs{and} placing commas between multiple authors.
+% Thus, these commands are to be used in the main text whenever the user
+% wishes to refer to the document's title and such. One practical use for this
+% is to place the authors at the bottom of each \HTML\ page, such as:
+% \begin{sourceverb}
+% \HTMLPageBottom{
+% \begin{center}\textcopyright~20xx \theauthor\end{center}
+% }
+% \end{sourceverb}
+%
+% \cs{theauthor} does not work well if \pkg{authblk} is used.
+% \trouble[\cs{theauthor}, \pkg{authblk}]{theauthor=\cs{theauthor} and \pkg{authblk}}
+% \trouble{authblk=\pkg{authblk}>theauthor=\cs{theauthor}}
+% If \cs{theauthor} is important, it is recommended to use the standard
+% \LaTeX\ syntax for \cs{author}, optionally with
+% \pkg{lwarp}'s \cs{affiliation} macro as well.
+%
+% After \cs{maketitle} has completed, \cs{theauthor} retains the definition of
+% \trouble[affiliations]{author>affiliation}
+% \trouble{title>affiliation}
+% \trouble{affiliation}
+% the author, but \cs{and} is changed to become a comma and a space, intending to
+% print the authors names separated by spaces. This fails when affiliations are
+% included on their own table rows.
+%
+% A solution, provide here, is to define a macro \cs{affiliation} which,
+% \margintag{\cs{affiliation}}
+% during \cs{maketitle}, starts a new row and adds the affiliation,
+% but after \cs{maketitle} is finished \cs{affiliation} is re-defined
+% to discard its argument, thus printing only the author names
+% when \cs{author} is later used inline.
+%
+%
+% \subsection{\cs{if@titlepage}}
+%
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+%
+% \begin{macro}{\if@titlepage}
+% Some classes do not provide \cs{if@titlepage}.
+% In this case, provide it and force it |false|.
+% \begin{macrocode}
+\ifcsvoid{@titlepagefalse}{
+ \newif\if@titlepage
+ \@titlepagefalse
+}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+%
+%
+% \subsection{Changes for \cs{affiliation}}
+%
+%
+% \begin{macro}{\affiliation} \marg{text}
+%
+% Adds the affiliation to the author for use in \cs{maketitle}.
+%
+% Inside \env{titlepage}, this macro prints its argument.
+% Outside, it is null.
+%
+% \changes{v0.49}{2018/02/18}{Fix: Adapts to classes which already provide.}
+%
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+\providerobustcmd{\affiliation}[1]{}
+\end{warpall}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \codeprint
+% \begin{macrocode}
+\begin{warpprint}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\AtBeginEnvironment{titlepage}{
+\renewrobustcmd{\affiliation}[1]{\\ \textsc{\small#1}}
+}
+
+\AtBeginDocument{
+\@ifpackageloaded{titling}{
+\AtBeginEnvironment{titlingpage}{
+\renewrobustcmd{\affiliation}[1]{\\ \textsc{\small#1}}
+}
+}{}% titling loaded
+}% AtBeginDocument
+% \end{macrocode}
+%
+% \begin{macrocode}
+\end{warpprint}
+% \end{macrocode}
+%
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+% \begin{environment}{titlepage}
+% Sets up a \element{div} of class \attribute{titlepage}.
+% Provided even for \pkg{memoir} class, since it is used by \cs{maketitle}.
+%
+% \changes{v0.39}{2017/09/02}{Clear pending footnotes.}
+% \changes{v0.39}{2017/09/03}{Removed minipages.}
+% \begin{macrocode}
+\DeclareDocumentEnvironment{titlepage}{}
+{
+\renewrobustcmd{\affiliation}[1]{\\ \InlineClass{affiliation}{##1}}
+\LWR@printpendingfootnotes
+\LWR@forcenewpage
+\BlockClass{titlepage}
+}
+{
+\endBlockClass
+\LWR@printpendingfootnotes
+}
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+%
+%
+% \subsection{Printing the thanks}
+%
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+% \DescribeMacro{\printthanks} Forces the \cs{thanks} to be printed.
+%
+% This is necessary in a \env{titlingpage} environment
+% when \cs{maketitle} was not used.
+% \changes{v0.73}{2019/06/25}{Fix: Paragraph tags.}
+% \begin{macrocode}
+\newcommand*{\printthanks}{\LWR@stoppars\@thanks\LWR@startpars}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+
+% \subsection{Printing the title, etc.\ in \HTML}
+%
+% \changes{v0.20}{2017/01/21}{Enhanced \pkg{titling} support.}
+%
+% The following are for printing the title, etc.
+% in a \env{titlepage} or a \env{titlingpage}
+% in \HTML:
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+%
+%
+% \begin{macro}{\printtitle}
+% \begin{macrocode}
+\newcommand*{\printtitle}
+{%
+ \LWR@stoppars%
+ \LWR@htmltag{\LWR@tagtitle}%
+ \@title%
+ \LWR@htmltag{\LWR@tagtitleend}%
+ \LWR@startpars%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LWR@printthetitle}
+%
+% A private version which prints the title without footnotes,
+% used to title each \HTML\ page.
+% \begin{macrocode}
+\newcommand*{\LWR@printthetitle}
+{%
+ \LWR@stoppars%
+ \LWR@htmltag{\LWR@tagtitle}%
+ \thetitle%
+ \LWR@htmltag{\LWR@tagtitleend}%
+ \LWR@startpars%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\printauthor}
+% \HTML\ version.
+%
+% \changes{v0.39}{2017/09/01}{Supports \pkg{authblk} with
+% \element{div}s of class \attribute{oneauthor} instead of tabular.}
+% \changes{v0.39}{2017/09/03}{Removed minipages.}
+%
+% \begin{macrocode}
+\newcommand*{\printauthor}{
+% \end{macrocode}
+% The entire author block is contained in a \element{div} named \attribute{author}:
+% \begin{macrocode}
+\begin{BlockClass}{author}
+% \end{macrocode}
+% \cs{and} finishes one author and starts the next:
+% \begin{macrocode}
+\renewcommand{\and}{%
+\end{BlockClass}
+\begin{BlockClass}{oneauthor}
+}
+% \end{macrocode}
+% Individual authors are contained in a \element{div} named \attribute{oneauthor}:
+% \begin{macrocode}
+\begin{BlockClass}{oneauthor}
+\@author
+\end{BlockClass}
+\end{BlockClass}
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\printdate}
+% \begin{macrocode}
+\newcommand*{\printdate}{%
+\begin{BlockClass}{titledate}
+\@date
+\end{BlockClass}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+% \subsection{Printing the title, etc.\ in print form}
+%
+% The following are for printing the title, etc.
+% in a \env{titlepage} or a \env{titlingpage}
+% in print form:
+%
+% \codeprint
+% \begin{macrocode}
+\begin{warpprint}
+% \end{macrocode}
+
+% \changes{v0.16}{2016/04/07}{\cs{titlingpage}: Improved print-output spacing.}
+% \changes{v0.16}{2016/04/07}{Test Suite: Improved titlingpage.}
+%
+
+% \begin{macro}{\printtitle}
+% \begin{macrocode}
+\newcommand*{\printtitle}{{\Huge\@title}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\printauthor}
+% Print mode.
+% \begin{macrocode}
+\newcommand*{\printauthor}
+ {{\large\begin{tabular}[t]{c}\@author\end{tabular}}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\printdate}
+% \begin{macrocode}
+\newcommand*{\printdate}{{\small\textit{\@date}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\end{warpprint}
+% \end{macrocode}
+%
+%
+%
+% \subsection{\cs{maketitle} for \HTML\ output}
+% \label{sec:titlehtml}
+%
+% An \HTML\ \element{div} of class \attribute{titlepage} is used.
+%
+% \cs{thanks} are a form of footnotes used in the title page.
+% See \cref{sec:footnotes} for other kinds of footnotes.
+%
+% See |\thanksmarkseries{series}|, below, to set the style of the footnote marks.
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\@ifclassloaded{memoir}
+{
+\newcommand{\LWR@setfootnoteseries}{%
+ \renewcommand\thefootnote{\@arabic\c@footnote}%
+}
+}{% not memoir
+\if@titlepage
+\newcommand{\LWR@setfootnoteseries}{%
+ \renewcommand\thefootnote{\@arabic\c@footnote}%
+}
+\else
+\newcommand{\LWR@setfootnoteseries}{%
+ \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
+}
+\fi
+}% not memoir
+% \end{macrocode}
+%
+%
+%\begin{macro}{\LWR@maketitlesetup} Patches \cs{thanks} macros.
+%
+% \begin{macrocode}
+\newcommand*{\LWR@maketitlesetup}{%
+% \end{macrocode}
+%
+% Redefine the footnote mark:
+%
+% \begin{macrocode}
+\LWR@setfootnoteseries%
+\def\@makefnmark{\textsuperscript{\thefootnote}}
+% \end{macrocode}
+%
+% \begin{center}
+% \begin{minipage}{.7\linewidth}
+% \cs{thefootnote} \goesto\ \cs{nameuse}\{arabic\}\{footnote\}, or
+%
+% \cs{thefootnote} \goesto\ \cs{nameuse}\{fnsymbol\}\{footnote\}
+% \end{minipage}
+% \end{center}
+%
+% Redefine the footnote text:
+%
+% \begin{macrocode}
+\long\def\@makefntext##1{%
+% \end{macrocode}
+% Make the footnote mark and some extra horizontal space for the tags:
+% \begin{macrocode}
+\textsuperscript{\@thefnmark}~%
+% \end{macrocode}
+% \begin{center}
+% \begin{minipage}{.7\linewidth}
+% \cs{makethanksmark} \goesto\ \cs{thanksfootmark} \goesto\ \cs{tamark} \goesto\
+%
+% \hfill \cs{@thefnmark} \goesto\ \cs{itshape} a (or similar)
+% \end{minipage}
+% \end{center}
+%
+% Print the text:
+% \begin{macrocode}
+##1%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@fnsymbol} \marg{counter}
+%
+% Re-defined to use an \HTML\ entity for the double vertical bar symbol.
+% The original definition used \cs{\textbar} which was not being seen by \prog{pdftotext}.
+%
+% \changes{v0.34}{2017/08/07}{Text symbols instead of math.}
+%
+% \begin{macrocode}
+\def\@fnsymbol#1{\ifcase#1\or *\or \HTMLentity{dagger}\or \HTMLentity{Dagger}\or
+ \HTMLentity{sect}\or \HTMLentity{para}\or \text{\HTMLunicode{2016}}\or
+ **\or \HTMLentity{dagger}\HTMLentity{dagger} \or
+ \HTMLentity{Dagger}\HTMLentity{Dagger} \else\@ctrerr\fi}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%\begin{macro}{\maketitle}
+% \HTML\ mode.
+% Creates an \HTML\ titlepage div
+% and typesets the title, etc.
+%
+% Code from the \pkg{titling} package is adapted, simplified, and
+% modified for \HTML\ output.
+%
+% \begin{macrocode}
+\renewcommand*{\maketitle}{%
+% \end{macrocode}
+% An \HTML\ titlepage \element{div} is used for all classes.
+% \begin{macrocode}
+\begin{titlepage}
+% \end{macrocode}
+% Set up special patches:
+% \begin{macrocode}
+\LWR@maketitlesetup
+% \end{macrocode}
+% Typeset the title, etc:
+% \begin{macrocode}
+\@maketitle
+% \end{macrocode}
+% Immediately generate any \cs{thanks} footnotes:
+% \changes{v0.73}{2019/06/25}{Fix: Paragraph tags.}
+% \begin{macrocode}
+\LWR@stoppars\@thanks\LWR@startpars
+% \end{macrocode}
+% Close the \HTML\ titlepage div and cleanup:
+% \begin{macrocode}
+\end{titlepage}
+\setcounter{footnote}{0}%
+\global\let\thanks\relax
+\global\let\maketitle\relax
+\global\let\@maketitle\relax
+\global\let\@thanks\@empty
+\global\let\@author\@empty
+\global\let\@date\@empty
+\global\let\@title\@empty
+\global\let\title\relax
+\global\let\author\relax
+\global\let\date\relax
+\global\let\and\relax
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@maketitle}
+% \HTML\ mode. Typesets the title, etc.:
+%
+% \changes{v0.39}{2017/09/01}{Supports \pkg{authblk} with
+% \element{div}s of class \attribute{oneauthor} instead of tabular.}
+% \changes{v0.39}{2017/09/03}{Removed minipages.}
+% \changes{v0.39}{2017/09/04}{Native \protect\LaTeX\ version.}
+%
+% \begin{macrocode}
+\DeclareDocumentCommand{\@maketitle}{}{%
+ \LWR@stoppars%
+ \LWR@htmltag{\LWR@tagtitle}%
+ \@title%
+ \LWR@htmltag{\LWR@tagtitleend}%
+ \LWR@startpars%
+ \begin{BlockClass}{author}%
+% \end{macrocode}
+% For \pkg{IEEEtran} class:
+% \changes{v0.48}{2018/02/04}{Fix: Errors with \pkg{IEEEtran} class.}
+% \begin{macrocode}
+ \renewcommand*{\cr}{}%
+ \renewcommand*{\crcr}{}%
+ \renewcommand*{\noalign}{}%
+% \end{macrocode}
+% \begin{macrocode}
+ \renewcommand{\and}{%
+ \end{BlockClass}%
+ \begin{BlockClass}{oneauthor}%
+ }%
+ \begin{BlockClass}{oneauthor}%
+ \@author%
+ \end{BlockClass}%
+ \end{BlockClass}%
+ \begin{BlockClass}{titledate}%
+ \@date%
+ \end{BlockClass}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \begin{macro}{\LWR@titlingmaketitle}
+% \cs{maketitle} for use inside an \HTML\ \env{titlingpage} environment.
+% \begin{macrocode}
+\newcommand*{\LWR@titlingmaketitle}{%
+% \end{macrocode}
+% Keep pending footnotes out of the title block:
+% \changes{v0.73}{2019/06/25}{\pkg{titling}: Fix: Paragraph tags.}
+% \begin{macrocode}
+\LWR@stoppars\@thanks\LWR@startpars
+% \end{macrocode}
+% Set up special patches:
+% \begin{macrocode}
+\LWR@maketitlesetup
+% \end{macrocode}
+% Typeset the title, etc:
+% \begin{macrocode}
+\@maketitle
+% \end{macrocode}
+% Immediately generate any \cs{thanks} footnotes:
+% \changes{v0.73}{2019/06/25}{Fix: Paragraph tags.}
+% \begin{macrocode}
+\LWR@stoppars\@thanks\LWR@startpars
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+%
+%
+%
+% \subsection{\cs{published} and \cs{subtitle}}
+%
+% \label{sec:publishedsubtitle}
+%
+% \changes{v0.39}{2017/09/05}{Titlepage \cs{published} and \cs{subtitle} removed.
+% \cs{AddSubtitlePublished} restores.}
+%
+% To add \cs{subtitle} and \cs{published} to the titlepage,
+% \margintag{\cs{subtitle} and \cs{published}}
+% \gindex{subtitle=\cs{subtitle}}%
+% \gindex{published=\cs{published}}
+% \gindex{titlepage>subtitle=\cs{subtitle} and \cs{published}}
+% load the \pkg{titling} package and use \cs{AddSubtitlePublished}
+% in the preamble.
+%
+% The default |lwarp.css| has definitions for the |published| and |subtitle| classes.
+%
+% If \pkg{titling} is loaded, \cs{AddSubtitlePublished} creates a number
+% of additional macros, and also assigns some of the \pkg{titling} hooks.
+% If \pkg{titling} is not loaded, \cs{AddSubtitlePublished} creates null macros.
+%
+% Do not use \cs{AddSubtitlePublished} if the user has patched the \pkg{titling}
+% \trouble[\pkg{titling} hooks]{titling=\pkg{titling}>hooks}
+% \trouble{AddSubtitlePublished=\cs{AddSubtitlePublished}}
+% hooks for some other reason.
+% Portions are marked \cs{warpprintonly} to reduce extra tags in \HTML.
+% Similarly, \env{BlockClass} has no effect in print mode.
+% Thus, the following may be marked \env{warpall}.
+%
+%
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+
+% \begin{macro}{\AddSubtitlePublished}
+% Adds \cs{published} and \cs{subtitle}, and related.
+%
+% \changes{v0.39}{2017/09/05}{Added.}
+%
+% \begin{macrocode}
+\newcommand*{\AddSubtitlePublished}{%
+\@ifpackageloaded{titling}{% yes titling package
+ \newcommand{\@published}{}%
+ \newcommand{\published}[1]{\gdef\@published{##1}}%
+ \renewcommand*{\maketitlehooka}{\printpublished}%
+ \newcommand*{\printpublished}{%
+ \warpprintonly{\begin{center}\unskip}%
+ \begin{BlockClass}{published}%
+ \warpprintonly{\large\itshape}%
+ \@published%
+ \end{BlockClass}%
+ \warpprintonly{\end{center}}%
+ }%
+ \newcommand{\@subtitle}{}%
+ \newcommand{\subtitle}[1]{\gdef\@subtitle{##1}}%
+ \renewcommand*{\maketitlehookb}{\printsubtitle}%
+ \newcommand*{\printsubtitle}{%
+ \warpprintonly{\begin{center}\unskip}%
+ \begin{BlockClass}{subtitle}%
+ \warpprintonly{\Large\itshape}%
+ \@subtitle%
+ \end{BlockClass}%
+ \warpprintonly{\end{center}}%
+ }%
+}% yes titling package
+{% no titling package
+ \newcommand{\published}[1]{}%
+ \newcommand*{\printpublished}{}%
+ \newcommand{\subtitle}{}%
+ \newcommand*{\printsubtitle}%
+}% no titling package
+}% \AddSubtitlePublished
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+
+
+% \section{Abstract}
+%
+% The following code replaces the \LaTeX\ default,
+% and will itself be replaced later if the \pkg{abstract}
+% package is loaded.
+%
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{macro}{\abstractname}
+% User-redefinable title for the abstract.
+%
+% Also over-written by the \pkg{babel} package.
+% \begin{macrocode}
+\providecommand*{\abstractname}{Abstract}
+% \end{macrocode}
+% \end{macro}
+%
+% Some classes allow an optional name, so it is allowed here.
+% \begin{environment}{abstract}
+% \changes{v0.48}{2018/02/05}{Allow optional name.}
+% \begin{macrocode}
+\DeclareDocumentEnvironment{abstract}{O{\abstractname}}
+{
+\LWR@forcenewpage
+\BlockClass{abstract}
+\BlockClassSingle{abstracttitle}{#1}
+}
+{
+\endBlockClass
+}
+% \end{macrocode}
+% \end{environment}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+
+
+% \section{Quote and verse}
+
+% \subsection{Attributions}
+
+% \begin{macro}{\attribution} \marg{name}
+%
+% For use with quote, quotation, verse:
+%
+% Ex: |"A quotation." \attribution{\textsc{Author Name}\\\textsl{Book Title}}|
+%
+% \changes{v0.73}{2019/06/25}{Fix: Paragraph tags.}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+\newcommand{\attribution}[1]{%
+ \LWR@stoppars%
+ \begin{BlockClass}{attribution}
+ #1
+ \end{BlockClass}
+ \LWR@startpars%
+}
+\end{warpHTML}
+% \end{macrocode}
+% \codeprint
+% \begin{macrocode}
+\begin{warpprint}
+\newcommand{\attribution}[1]{
+ \begin{flushright}
+ \unskip
+ #1
+ \end{flushright}%
+}
+\end{warpprint}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Quotes, quotations}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+% \begin{environment}{quote}
+% \begin{macrocode}
+\renewenvironment*{quote}
+{
+ \LWR@forcenewpage
+ \LWR@htmlblocktag{blockquote}
+}
+{\LWR@htmlblocktag{/blockquote}}
+% \end{macrocode}
+% \end{environment}
+%
+% \changes{v0.71}{2019/04/27}{Fix: \env{blockquotation} tag.}
+% \begin{environment}{quotation}
+% \begin{macrocode}
+\renewenvironment*{quotation}
+{
+ \LWR@forcenewpage
+ \LWR@htmlblocktag{blockquote}
+}
+{\LWR@htmlblocktag{/blockquote}}
+% \end{macrocode}
+% \end{environment}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+% \subsection{Verse}
+%
+% \limitsverse
+%
+% \subsubsection{\LaTeX\ core \env{verse} environment}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+% \begin{environment}{verse}
+% \changes{v0.54}{2018/04/08}{Fix: Line spacing.}
+% \begin{macrocode}
+\renewenvironment{verse}
+ {\let\\\newline% lwarp
+ \list{}{\itemsep \z@
+ \itemindent -1.5em%
+ \listparindent\itemindent
+ \rightmargin \leftmargin
+ \advance\leftmargin 1.5em}%
+ \item\relax}
+ {\endlist}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+%
+%
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+%
+% \subsubsection{\pkg{verse} and \pkg{memoir}}
+%
+% The following lengths are used by \pkg{verse} and \pkg{memoir}.
+% They may be set in either print or \HTML\ output,
+% but are only used in \HTML.
+% This allows the user to set \cs{vleftskip} and \cs{leftmargini} for
+% print output, and optionally select different values for \HTML.
+%
+
+% \DescribeLength{\HTMLvleftskip}
+% Sets \cs{vleftskip} inside a \env{verse} environment in \HTML.
+% \begin{macrocode}
+\newlength{\HTMLvleftskip}
+\setlength{\HTMLvleftskip}{1em}
+% \end{macrocode}
+
+% \DescribeLength{\HTMLleftmargini}
+% Sets \cs{leftmargini} inside a \env{verse} environment in \HTML.
+% \begin{macrocode}
+\newlength{\HTMLleftmargini}
+\setlength{\HTMLleftmargini}{4.5em}
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+
+
+
+
+% \section{Verbatim and tabbing}
+
+% \changes{v0.34}{2017/07/27}{Verbatim refactored to
+% remove \pkg{fancyvrb} requirement.}
+
+
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+%
+%
+% \DescribeLength{\VerbatimHTMLWidth} Width to use in \HTML\ |Verbatim| environment.
+%
+% This width is used when placing line numbers to the right.
+% Ignored during print output.
+% \begin{macrocode}
+\newlength{\VerbatimHTMLWidth}
+\setlength{\VerbatimHTMLWidth}{4in}
+\end{warpall}
+% \end{macrocode}
+
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \DescribeBoolean{LWR@verbtags} Used to temporarily turn off verbatim tags
+% while doing \cs{verbatiminput} in the \HTML\ head.
+% \begin{macrocode}
+\newbool{LWR@verbtags}
+\booltrue{LWR@verbtags}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@atbeginverbatim}
+% \oarg{1: style}
+% \marg{2: negative \cs{baselineskip} \cs{vspace}}
+% \marg{3: class}
+%
+% Encloses a verbatim environment with the given \CSS\ class.
+%
+% The use of \cs{textquotedbl} instead of |"| improves compatibility with \pkg{xeCJK}.
+%
+% \changes{v0.51}{2018/03/17}{Adds vertical offset.}
+% \changes{v0.63}{2018/11/24}{Fix for \pkg{xeCJK}.}
+% \begin{macrocode}
+\newcommand*{\LWR@atbeginverbatim}[3][]
+{%
+% \end{macrocode}
+% Avoid excessive space between lines:
+% \begin{macrocode}
+\setlength{\parskip}{0ex}%
+% \end{macrocode}
+% Stop generating \HTML\ paragraph tags:
+% \begin{macrocode}
+\LWR@stoppars%
+% \end{macrocode}
+% Create a new |pre| of the given class.
+% The tags may temporarily be turned off for internal use, such
+% as loading the \brand{MathJax} script.
+% \begin{macrocode}
+\ifbool{LWR@verbtags}{%
+ \LWR@htmltag{pre class=\textquotedbl#3\textquotedbl%
+ \ifthenelse{\equal{#1}{}}{}{ style=\textquotedbl#1\textquotedbl}%
+ }%
+ \LWR@orignewline% pre
+ \leavevmode\unskip\LWR@print@vspace*{-#2\baselineskip}%
+}{}%
+% \end{macrocode}
+% Use a mono-spaced font to preserve horizontal positioning.
+% If horizontal alignment is important for the user, use a mono-spaced font
+% in the \CSS\ for the |verse| class.
+% \changes{v0.50}{2018/03/02}{Improved column alignment.}
+% \begin{macrocode}
+\begingroup%
+% \end{macrocode}
+% \changes{v0.50}{2018/03/02}{Improved column alignment.}
+% \changes{v0.54}{2018/04/06}{Improved column alignment.}
+% \begin{macrocode}
+% \LWR@print@normalsize%
+\LWR@origttfamily%
+\LWR@print@small%
+% \end{macrocode}
+% Since inside a \element{pre}, restore the original list processing:
+% \begin{macrocode}
+\LWR@restoreoriglists%
+% \end{macrocode}
+% Turn off \pkg{babel-french} extra space before punctuation:
+% \begin{macrocode}
+\LWR@FBcancel%
+% \end{macrocode}
+% Do not produce \HTML\ tags for \cs{hspace} inside a verse |par|.
+% Restore plain \LaTeX{} \cs{hspace} functionality:
+% \begin{macrocode}
+\LWR@select@print@hspace%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@afterendverbatim}
+% \marg{negative \cs{baselineskip} \cs{vspace}}
+%
+% Finishes enclosing a verbatim environment.
+% \changes{v0.54}{2018/04/07}{Added vspace argument.}
+% \begin{macrocode}
+\newcommand*{\LWR@afterendverbatim}[1]{%
+\endgroup%
+\par%
+% \end{macrocode}
+% At the end of the environment, close the |pre|:
+% \begin{macrocode}
+\ifbool{LWR@verbtags}{%
+ \LWR@print@vspace*{-#1\baselineskip}%
+ \noindent\LWR@htmltag{/pre}\LWR@orignewline% pre
+}{}%
+% \end{macrocode}
+% Resume regular paragraph handling:
+% \begin{macrocode}
+\LWR@startpars%
+}
+% \end{macrocode}
+% \end{macro}
+%
+
+
+% \begin{macro}{\verbatiminput} \marg{filename}
+%
+% Patch \cs{verbatiminput} to add \HTML\ tags:
+%
+% \begin{macrocode}
+\let\LWRV@origverbatim@input\verbatim@input
+
+\renewcommand{\verbatim@input}[2]{%
+\ifbool{LWR@verbtags}{\LWR@forcenewpage}{}%
+\LWR@atbeginverbatim{2.5}{Verbatim}%
+\LWRV@origverbatim@input{#1}{#2}%
+\LWR@afterendverbatim{1.5}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \begin{environment}{verbatim}
+%
+% \changes{v0.20}{2016/12/24}{Added.}
+%
+% \begin{macrocode}
+\AfterEndPreamble{
+\LWR@traceinfo{Patching verbatim.}
+\AtBeginEnvironment{verbatim}{%
+\LWR@forcenewpage%
+\LWR@atbeginverbatim{2.5}{verbatim}%
+}
+\AfterEndEnvironment{verbatim}{%
+ \LWR@afterendverbatim{1}%
+}
+}
+% \end{macrocode}
+% \end{environment}
+
+
+% \begin{environment}{tabbing}
+%
+% \limitstabbing
+%
+% \changes{v0.42}{2017/10/13}{Added.}
+% \changes{v0.52}{2018/03/27}{Fix to allow inside \env{lateximage}.}
+% \changes{v0.58}{2018/06/07}{Improved print/\HTML\ output selection.}
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@tabbing}{%
+\LWR@forcenewpage%
+\LWR@atbeginverbatim{3}{tabbing}%
+\LWR@print@tabbing%
+}
+
+\newcommand*{\LWR@HTML@endtabbing}{%
+ \LWR@print@endtabbing%
+ \LWR@afterendverbatim{1}%
+}
+
+\LWR@formatted{tabbing}
+\LWR@formatted{endtabbing}
+% \end{macrocode}
+%
+% \end{environment}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+
+
+% \section{Theorems}
+%
+% \changes{v0.25}{2017/03/17}{Basic \LaTeX\ theorems: improved \CSS.}
+%
+%
+% \DescribeMacro{\newtheorem} \marg{text} \oarg{counter} -or- \oarg{oldname} \marg{text}
+%
+% A few minor changes are made to supply \HTML\ tags.
+%
+% \begin{itemize}
+% \item The entire theorem is placed into a \element{div} of class \attribute{theoremcontents}.
+% \item The label for each theorem is placed inside a \element{span} of class \attribute{theoremlabel}.
+% \item The contents are placed inside a \element{div} of class {theoremcontents}.
+% \end{itemize}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{macro}{\@begintheorem} \marg{name} \marg{number}
+% \begin{macrocode}
+\renewcommand{\@begintheorem}[2]{%
+\LWR@forcenewpage
+\BlockClass{theoremcontents}
+\trivlist
+\item[\InlineClass{theoremlabel}{#1\ #2\ }]\itshape
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@opargbegintheorem} \marg{name} \marg{number} \marg{oparg}
+% \begin{macrocode}
+\renewcommand{\@opargbegintheorem}[3]{%
+\LWR@forcenewpage
+\BlockClass{theoremcontents}
+\trivlist
+\item[\InlineClass{theoremlabel}{#1\ #2\ (#3)\ }]\itshape
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@endtheorem}
+% \begin{macrocode}
+\renewcommand*{\@endtheorem}{%
+\endtrivlist
+\endBlockClass% theoremcontents
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+% \section{Lists}
+%
+% \limitslists
+%
+% ^^A \limitsbabelone
+%
+% The environments |itemize|, |enumerate|, and |description| are patched
+% when \pkg{lwarp} is started. These patches support the standard
+% \LaTeX\ environments, as well as those of \pkg{enumerate}, \pkg{enumitem},
+% and \pkg{paralist}, and at least the French version of \pkg{babel}.
+% Additional patches are done on a package-specific basis.
+%
+% The \LaTeX\ source for |itemize| and |enumerate| are found in |source2e|, but
+% the source for |description| is found in |article.cls|, etc.
+%
+% To have an empty item,\margintag{empty item}
+% \gindex{item>empty}%
+% \gindex{list>empty item}%
+% \trouble{list>empty item}%
+% use |\mbox{}| or a trailing backslash.
+% This forces a new line in print output, matching the new line which
+% will appear in \HTML\ output.
+% Ex:
+%\begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
+%\begin{itemize}
+%\item \mbox{}
+% \begin{itemize}
+% ...
+% \end{itemize}
+%\item \
+% \begin{itemize}
+% ...
+% \end{itemize}
+%\end{Verbatim}
+%
+%
+%
+% \DescribeMacro{\makelabel}
+% \limitsmakelabel
+%
+% \changes{v0.34}{2017/07/27}{Lists refactored to remove \pkg{enumitem} requirement.}
+%
+% \subsection{List environment}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@printcloselist}
+% May be locally redefined by \env{enumerate} or \env{description}.
+% \begin{macrocode}
+\newcommand*{\LWR@printcloselist}{\LWR@printcloseitemize}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@printopenlist}
+% May be locally redefined by \env{enumerate} or \env{description}.
+% \changes{v0.47}{2018/01/26}{Fix: Line wrap at \HTML\ hyphen.}
+% \begin{macrocode}
+\newcommand*{\LWR@printopenlist}{ul style="\LWR@print@mbox{list-style-type:none}"}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@mklab}
+% Removes \PDF\ spacing.
+% \changes{v0.45}{2018/01/11}{Modified for \HTML.}
+% \begin{macrocode}
+\AtBeginDocument{
+\def\@mklab#1{%
+% \hfil %
+ #1}
+\let\makelabel\@mklab
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@donoparitem}
+% Modified for \HTML\ output by replacing \TeX\ boxes with plain text.
+% Also removes \PDF\ spacing.
+% \changes{v0.45}{2018/01/11}{Modified for \HTML.}
+% \begin{macrocode}
+\def\@donoparitem{%
+ \@noparitemfalse
+% \global\setbox\@labels\hbox{\hskip -\leftmargin
+% \unhbox\@labels
+% \hskip \leftmargin}%
+% \if@minipage\else
+% \@tempskipa\lastskip
+% \vskip -\lastskip
+% \advance\@tempskipa\@outerparskip
+% \advance\@tempskipa -\parskip
+% \vskip\@tempskipa
+% \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{\@item}
+% Modified for \HTML\ output by replacing \TeX\ boxes with plain text.
+% Also removes \PDF\ spacing.
+% \changes{v0.45}{2018/01/11}{Modified for \HTML.}
+% \changes{v0.48}{2018/02/02}{Honors \cs{makelabel}.}
+% \begin{macrocode}
+\def\LWR@HTML@item[#1]{%
+\LWR@traceinfo{@item}
+ \if@noparitem
+ \@donoparitem
+ \else
+% \if@inlabel
+% \indent
+ \par
+% \fi
+ \ifhmode
+% \unskip\unskip
+ \par
+ \fi
+ \if@newlist
+ \if@nobreak
+ \@nbitem
+ \else
+% \addpenalty\@beginparpenalty
+% \addvspace\@topsep
+% \addvspace{-\parskip}%
+ \fi
+ \else
+% \addpenalty\@itempenalty
+% \addvspace\itemsep
+ \fi
+ \global\@inlabeltrue
+ \fi
+% \everypar{%
+ \@minipagefalse
+ \global\@newlistfalse
+% \end{macrocode}
+% \begin{macrocode}
+% \if@inlabel
+% \global\@inlabelfalse
+% \end{macrocode}
+% \begin{macrocode}
+% {\setbox\z@\lastbox
+% \ifvoid\z@
+% \kern-\itemindent
+% \fi}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+% \box\@labels
+% \penalty\z@
+% \fi
+% \end{macrocode}
+% \begin{macrocode}
+% \if@nobreak
+% \@nobreakfalse
+% \clubpenalty \@M
+% \else
+% \clubpenalty \@clubpenalty
+% \everypar{}%
+% \fi}%
+% \end{macrocode}
+% \begin{macrocode}
+ \if@noitemarg
+ \@noitemargfalse
+ \if@nmbrlist
+% \end{macrocode}
+% \begin{macrocode}
+ \refstepcounter\@listctr
+ \fi
+ \fi
+% \end{macrocode}
+% \changes{v0.51}{2018/03/17}{Restored list label space.}
+% \begin{macrocode}
+ \makelabel{#1} % extra space
+% \sbox\@tempboxa{\makelabel{#1}%
+% \global\setbox\@labels\hbox{%
+% \unhbox\@labels
+% \hskip \itemindent
+% \hskip -\labelwidth
+% \hskip -\labelsep
+% \ifdim \wd\@tempboxa >\labelwidth
+% \box\@tempboxa
+% \end{macrocode}
+% \begin{macrocode}
+% \else
+% \hbox to\labelwidth {\unhbox\@tempboxa}%
+% \fi
+% \hskip \labelsep}%
+ \ignorespaces%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@nbitem}
+% \begin{macrocode}
+\def\@nbitem{%
+% \@tempskipa\@outerparskip
+% \advance\@tempskipa -\parskip
+% \addvspace\@tempskipa
+}
+% \end{macrocode}
+% \end{macro}
+%
+
+
+% \begin{macro}{\LWR@listitem} \oarg{label}
+%
+% Handles \cs{item} inside a \env{list}, \env{itemize}, or \env{enumerate}.
+%
+% See \cs{LWR@openparagraph} where extra \cs{hspace} is used to
+% leave room for the label while inside a list during paragraph construction.
+%
+% \changes{v0.44}{2017/11/15}{Added \env{list} and \env{trivlist}.}
+% \begin{macrocode}
+\newcommand*{\LWR@listitem}{%
+\LWR@stoppars%
+\LWR@startnewdepth{listitem}%
+\LWR@htmltag{li}%
+\LWR@startpars%
+\LWR@origitem%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@nulllistfills} Nullifies various \TeX\ fill commands,
+% in case they are used inside \cs{makelabel}.
+% Problems are caused when these are nullified all the time.
+% \begin{macrocode}
+\newcommand*{\LWR@nulllistfills}{%
+\renewcommand*{\hss}{}%
+\renewcommand*{\llap}[1]{##1}%
+\renewcommand*{\rlap}[1]{##1}%
+\renewcommand*{\hfil}{}%
+\renewcommand*{\hfilneg}{}%
+\renewcommand*{\hfill}{}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{environment}{list} \marg{label} \marg{commands}
+% \changes{v0.44}{2017/11/15}{Added \env{list} and \env{trivlist}.}
+% \begin{macrocode}
+\newcommand*{\LWR@liststart}{%
+\LWR@traceinfo{LWR@liststart}%
+\LWR@stoppars%
+\LWR@pushoneclose{list}%
+\LWR@htmltag{\LWR@printopenlist}\LWR@orignewline%
+\LWR@startpars%
+\setlength{\topsep}{0pt}%
+\setlength{\partopsep}{0pt}%
+\setlength{\itemsep}{0pt}%
+\setlength{\parsep}{0pt}%
+\setlength{\leftmargin}{0pt}%
+\setlength{\rightmargin}{0pt}%
+\setlength{\listparindent}{0pt}%
+\setlength{\itemindent}{0pt}%
+\setlength{\labelsep}{1em}%
+\LWR@nulllistfills%
+}
+% \end{macrocode}
+% \changes{v0.46}{2018/01/21}{Fix: Stack unnesting.}
+% \begin{macrocode}
+\newcommand*{\LWR@listend}{%
+\LWR@traceinfo{LWR@listend}%
+\LWR@stoppars%
+\LWR@closeprevious{list}%
+\LWR@startpars%
+}
+% \end{macrocode}
+% \end{environment}
+
+
+% \subsection{Itemize}
+
+% \begin{macro}{\LWR@itemizeitem} \oarg{label}
+%
+% Handles \cs{item} inside an itemize or enumerate.
+%
+% See \cs{LWR@openparagraph} where extra \cs{hspace} is used to
+% leave room for the label while inside a list during paragraph construction.
+% \begin{macrocode}
+\newcommand*{\LWR@itemizeitem}{%
+\LWR@stoppars%
+\LWR@startnewdepth{listitem}%
+\LWR@htmltag{li}%
+\LWR@startpars%
+\LWR@origitem%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{environment}{itemize} \oarg{options}
+% \changes{v0.47}{2018/01/26}{Fix: Line wrap at \HTML\ hyphen.}
+% \begin{macrocode}
+\newcommand*{\LWR@itemizestart}{%
+\renewcommand*{\LWR@printcloselist}{\LWR@printcloseitemize}
+\renewcommand*{\LWR@printopenlist}{ul style="\LWR@print@mbox{list-style-type:none}"}
+\let\item\LWR@itemizeitem%
+\LWR@nulllistfills%
+}
+% \end{macrocode}
+% \end{environment}
+
+
+
+% \subsection{Enumerate}
+
+% An \HTML\ unordered list is used with customized \LaTeX-generated labels.
+
+% \begin{environment}{enumerate} \oarg{options}
+% \changes{v0.47}{2018/01/26}{Fix: Line wrap at \HTML\ hyphen.}
+% \begin{macrocode}
+\newcommand*{\LWR@enumeratestart}{%
+\renewcommand*{\LWR@printcloselist}{\LWR@printcloseitemize}
+\renewcommand*{\LWR@printopenlist}{ul style="\LWR@print@mbox{list-style-type:none}"}
+\let\item\LWR@itemizeitem%
+\LWR@nulllistfills%
+}
+% \end{macrocode}
+% \end{environment}
+
+
+% \subsection{Description}
+
+% \begin{macro}{\LWR@descitem} \oarg{label}
+% Handles an \cs{item} inside a description.
+% \begin{macrocode}
+\newcommand*{\LWR@descitem}[1][]%
+{%
+\LWR@stoppars%
+\LWR@setlatestname{#1}%
+\LWR@startnewdepth{descitem}%
+% \end{macrocode}
+% While creating the label, encase it inside tags and disable \cs{hspace},
+% which is used by the standard classes to add space to the labels.
+% \changes{v0.73}{2019/06/23}{Fix: \HTML\ tags.}
+% \begin{macrocode}
+\begingroup%
+\let\LWR@orig@desc@makelabel\makelabel
+\renewcommand*{\makelabel}[1]{%
+ \LWR@htmltag{dt}%
+ \LWR@orig@desc@makelabel{#1}%
+ \LWR@htmltag{/dt}%
+}
+\LWR@select@html@nohspace%
+\LWR@origitem[#1]%
+\endgroup%
+\LWR@orignewline%
+\LWR@htmltag{dd}%
+\LWR@startpars%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{environment}{description} \oarg{options}
+% \begin{macrocode}
+\newcommand*{\LWR@descriptionstart}{%
+\renewcommand*{\LWR@printcloselist}{\LWR@printclosedescription}
+\renewcommand*{\LWR@printopenlist}{dl}
+\let\item\LWR@descitem%
+\LWR@nulllistfills%
+}
+% \end{macrocode}
+% \end{environment}
+
+
+% \subsection{Patching the lists}
+
+% \begin{macro}{\LWR@patchlists} Patches list environments.
+%
+% \cs{LWR@patchlists} remembers \cs{item} as defined by whatever packages have
+% been loaded, then
+% patches the |itemize|, |enumerate|, and |description| environments and \cs{item}.
+% This works with the native \LaTeX\ environments, as well as
+% those provided by \pkg{enumitem}, \pkg{enumerate}, and \pkg{paralist}.
+%
+% \changes{v0.44}{2017/11/15}{Added \env{list} and \env{trivlist}.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@patchlists}{%
+ \LetLtxMacro\item\LWR@listitem%
+ \LetLtxMacro\@item\LWR@HTML@item%
+ \renewcommand*{\@trivlist}{%
+ \LWR@traceinfo{@trivlist start}%
+ \LWR@liststart%
+ \LWR@orig@trivlist%
+ \LWR@traceinfo{@trivlist done}%
+ }%
+ \renewcommand*{\trivlist}{%
+ \LWR@traceinfo{trivlist}%
+ \LWR@origtrivlist%
+ }%
+ \renewcommand*{\endtrivlist}{%
+ \LWR@traceinfo{endtrivlist start}%
+ \LWR@origendtrivlist\LWR@listend%
+ \LWR@traceinfo{endtrivlist done}%
+ }%
+ \renewcommand*{\itemize}{%
+ \LWR@itemizestart\LWR@origitemize%
+ }%
+ \renewcommand*{\enumerate}{%
+ \LWR@enumeratestart\LWR@origenumerate%
+ }%
+ \renewcommand*{\description}{%
+ \LWR@descriptionstart\LWR@origdescription%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@restoreoriglists} Restores the original \env{trivlist} environment.
+% \begin{macrocode}
+\newcommand*{\LWR@restoreoriglists}{%
+\LWR@traceinfo{LWR@restoreoriglists}%
+\LetLtxMacro\item\LWR@origitem%
+\LetLtxMacro\@item\LWR@orig@item%
+\let\@trivlist\LWR@orig@trivlist%
+\let\trivlist\LWR@origtrivlist%
+\let\endtrivlist\LWR@origendtrivlist%
+\LetLtxMacro\itemize\LWR@origitemize%
+\LetLtxMacro\enditemize\LWR@endorigitemize%
+\LetLtxMacro\enumerate\LWR@origenumerate%
+\LetLtxMacro\endenumerate\LWR@endorigenumerate%
+\LetLtxMacro\description\LWR@origdescription%
+\LetLtxMacro\enddescription\LWR@endorigdescription%
+\let\@mklab\LWR@orig@mklab%
+\let\makelabel\LWR@origmakelabel%
+\let\@donoparitem\LWR@orig@donoparitem%
+\let\@nbitem\LWR@orig@nbitem%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+
+
+% \section{Tabular}
+%
+% This is arguably the most complicated part of the entire package.
+% Numerous tricks are employed to handle the syntax of the \LaTeX\ core
+% and the various tabular-related packages.
+%
+%
+% \subsection{Limitations}
+%
+% \limitstabular
+%
+% \changes{v0.20}{2017/01/07}{Added @, \protect\textless, \protect\textgreater\ columns.}
+% \changes{v0.20}{2017/01/17}{Tabular: \cs{unskip} extra spaces.}
+% \changes{v0.33}{2017/06/20}{New handling of \progcode{\&} to localize catcode changes.}
+% \changes{v0.33}{2017/07/10}{Add: Tabular at and bang columns now have their
+% own \HTML\ columns.}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+%
+% \subsection{Temporary package-related macros}
+%
+% These macros are temporary placeholders for macros defined by various
+% packages. If the relevent package is not loaded, these placeholders are used instead.
+%
+%
+% \subsubsection{\pkg{arydshln}}
+%
+% Emualated by the original \LaTeX\ non-dashed versions.
+% \changes{v0.56}{2018/05/04}{\pkg{arydshln}: Added.}
+% \begin{macrocode}
+\LetLtxMacro\hdashline\hline
+\LetLtxMacro\cdashline\cline
+\LetLtxMacro\firsthdashline\hline
+\LetLtxMacro\lasthdashline\hline
+% \end{macrocode}
+%
+%
+% \subsection{Token lookahead}
+
+% Used by \cs{LWR@futurenonspacelet} to look at the next token.
+
+% \begin{macro}{\LWR@mynexttoken}
+% \begin{macrocode}
+\newcommand\LWR@mynexttoken\relax
+% \end{macrocode}
+% \end{macro}
+
+% \cs{futurelet} copies the next token then executes a function to analyze
+
+% \cs{LWR@futurenonspacelet} does the same, but ignores intervening white space
+
+% Based on the \pkg{booktabs} style:
+
+% \begin{macro}{\LWR@futurenonspacelet}
+% \begin{macrocode}
+\def\LWR@futurenonspacelet#1{\def\LWR@cs{#1}%
+\afterassignment\LWR@fnslone\let\nexttoken= }
+\def\LWR@fnslone{\expandafter\futurelet\LWR@cs\LWR@fnsltwo}
+\def\LWR@fnsltwo{%
+\expandafter\ifx\LWR@cs\@sptoken\let\next=\LWR@fnslthree%
+\else\let\next=\nexttoken\fi\next}
+\def\LWR@fnslthree{\afterassignment\LWR@fnslone\let\next= }
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@getmynexttoken}
+% Looks ahead and copies the next token into \cs{LWR@mynexttoken}.
+% \begin{macrocode}
+\newcommand*{\LWR@getmynexttoken}{%
+\LWR@traceinfo{LWR@getmynexttoken}%
+% nothing must follow this next line
+\LWR@futurenonspacelet\LWR@mynexttoken\LWR@tabledatacolumntag
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Tabular variables}
+
+% \DescribeBoolean{LWR@startedrow}
+% True if should print a row tag before this column.
+% \begin{macrocode}
+\newbool{LWR@startedrow}
+\boolfalse{LWR@startedrow}
+% \end{macrocode}
+
+% \DescribeBoolean{LWR@tabularcelladded}
+% True if have added a data cell for this position.
+% \changes{v0.60}{2018/09/17}{\env{tabular}: Improved memory management: Global boolean.}
+% \begin{macrocode}
+\newbool{LWR@tabularcelladded}
+\boolfalse{LWR@tabularcelladded}
+% \end{macrocode}
+
+% \DescribeCounter{LWR@hlines}
+% Number of \cs{hline}s or \cs{midrule}s above the next row.
+% \begin{macrocode}
+\newcounter{LWR@hlines}
+% \end{macrocode}
+
+% \DescribeCounter{LWR@hdashedlines}
+% Number of \pkg{arydshln} dashed lines above the next row.
+% \begin{macrocode}
+\newcounter{LWR@hdashedlines}
+% \end{macrocode}
+
+% \DescribeBoolean{LWR@doingtbrule}
+% True if the next row will have a top/bottom rule above it.
+% \changes{v0.60}{2018/09/17}{\env{tabular}: Improved memory management: Global boolean.}
+% \begin{macrocode}
+\newbool{LWR@doingtbrule}
+\boolfalse{LWR@doingtbrule}
+% \end{macrocode}
+
+% \DescribeBoolean{LWR@doingcmidrule}
+% True if the next row will have a cmidrule above it.
+%
+% This is used by \cs{LWR@tabularfinishrow} to force a final empty row
+% to create the border for the \cs{cmidrule}.
+% \begin{macrocode}
+\newbool{LWR@doingcmidrule}
+\boolfalse{LWR@doingcmidrule}
+% \end{macrocode}
+
+% \DescribeBoolean{LWR@tableparcell}
+% True if are handling a paragraph inside a table cell,
+% so must close the paragraph tag before moving on.
+% \begin{macrocode}
+\newbool{LWR@tableparcell}
+% \end{macrocode}
+
+% \DescribeBoolean{LWR@skippingmrowcell}
+% True if are doing an empty \cs{multirow} cell,
+% and thus there is no data tag to close.
+% \begin{macrocode}
+\newbool{LWR@skippingmrowcell}
+% \end{macrocode}
+
+% \DescribeBoolean{LWR@skippingmcolrowcell}
+% True if are doing an empty \cs{multicolumnrow} cell,
+% and thus there is no data tag to close, and
+% do not print |@| and |!| columns.
+% \begin{macrocode}
+\newbool{LWR@skippingmcolrowcell}
+% \end{macrocode}
+
+% \DescribeBoolean{LWR@usedmultirow}
+% Used to error if used \cs{multirow} or \cs{multicolumnrow} without
+% using \cs{mrowcell} or \cs{mcolrowcell}.
+% \begin{macrocode}
+\newbool{LWR@usedmultirow}
+% \end{macrocode}
+
+% \DescribeBoolean{LWR@foundmrowcell}
+% Used to error if used \cs{multirow} or \cs{multicolumnrow} without
+% using \cs{mrowcell} or \cs{mcolrowcell}.
+% \begin{macrocode}
+\newbool{LWR@foundmrowcell}
+% \end{macrocode}
+
+% \DescribeBoolean{LWR@skipatbang}
+% True if just finished a \cs{multicolumn} so should not create the trailing
+% |@| or |!| columns table data cells.
+% \begin{macrocode}
+\newbool{LWR@skipatbang}
+% \end{macrocode}
+
+
+% \DescribeBoolean{LWR@emptyatbang}
+% True if finishing a row and should print empty |@| or |!| column table data cells.
+% \begin{macrocode}
+\newbool{LWR@emptyatbang}
+% \end{macrocode}
+
+
+% \DescribeBoolean{LWR@intabularmetadata}
+% True if are in a tabular but not in a data cell.
+% Used to prevent extra \HTML\ breaks if not inside table data.
+% \begin{macrocode}
+\newbool{LWR@intabularmetadata}
+\boolfalse{LWR@intabularmetadata}
+% \end{macrocode}
+
+
+% \DescribeCounter{LWR@tabularDepth}
+% Tracks whether |&| is being used inside a \env{tabular}.
+% \begin{macrocode}
+\newcounter{LWR@tabulardepth}
+\setcounter{LWR@tabulardepth}{0}
+% \end{macrocode}
+%
+% \DescribeCounter{LWR@tabularpardepth}
+% Tracks whether should look ahead at the next token
+% when encountering a \cs{par} while processing tabular contents.
+%
+% When |LWR@tabularpardepth| is deeper than |LWR@tabulardepth| then
+% \pkg{lwarp} has started looking at the contents of the |tabular|, and thus
+% any \cs{par}s encountered must be followed by another token lookahead.
+% \changes{v0.46}{2018/01/18}{\ctr{LWR@tabularpardepth} added.}
+% \begin{macrocode}
+\newcounter{LWR@tabularpardepth}
+\setcounter{LWR@tabularpardepth}{0}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\newcommand*{\LWR@colsresult}{}%temp storage for column format results
+\newcommand*{\LWR@pposition}{}
+\newcommand*{\LWR@pleft}{}
+\newcommand*{\LWR@pright}{}
+% \end{macrocode}
+
+
+% \DescribeObject{LWR@tablecolspec} Holds the parsed column specification,
+% of total width |LWR@tabletotalLaTeXcols|, not counting |@| and |!| columns.
+%
+% Will contain a string such as |llrrccpc|, exactly one letter per \LaTeX\ table column,
+% without |@|, |!|, |>|, |<|, or the vertical bar.
+% \changes{v0.60}{2018/09/17}{\env{tabular}: Improved memory management: Not using \pkg{xstring}.}
+
+
+% \begin{macro}{\LWR@strresult} Holds the result of |Str| functions.
+% \changes{v0.44}{2017/11/19}{Fix: \cs{providecommand}.}
+% \begin{macrocode}
+\providecommand*{\LWR@strresult}{}
+\providecommand*{\LWR@strresulttwo}{}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@origcolspec} Holds the original column specs given to \env{tabular}.
+% \begin{macrocode}
+\newcommand*{\LWR@origcolspec}{}
+% \end{macrocode}
+% \end{macro}
+
+
+% \DescribeCounter{LWR@tablecolspecwidth}
+% Holds the number of tokens in the table columns specification.
+%
+% This is includes one for each |@|, |!|, |<|, |>| column,
+% and also one for each of the parameters of |p|, |@|, |!|, |<|, |>| columns,
+% and three for each |D| column.
+%
+% (This is not the total \# of \LaTeX\ columns in the table.)
+% \begin{macrocode}
+\newcounter{LWR@tablecolspecwidth}
+% \end{macrocode}
+
+% \DescribeCounter{LWR@tablecolspecindex}
+% While parsing the \LaTeX\ table column specification,
+% starts at 1 and is incremented per token of the specification.
+% \begin{macrocode}
+\newcounter{LWR@tablecolspecindex}
+% \end{macrocode}
+
+% \DescribeCounter{LWR@tableLaTeXcolindex}
+% While producing the table, resets to 1 at the start of the table and
+% also at each end of line, and is incremented by 1 by each ampersand.
+% \begin{macrocode}
+\newcounter{LWR@tableLaTeXcolindex}
+% \end{macrocode}
+
+% \DescribeCounter{LWR@tabletotalLaTeXcols}
+% While parsing a table column specification,
+% begins at 0 and increments by 1 per \LaTeX\ table column.
+% Eventually holds the final number of \LaTeX\ table columns in each row,
+% not counting |@| and |!| columns.
+% (In \HTML, |@| and |!| cells become their own columns, but are not included in
+% |LWR@tabletotalLaTeXcols|.)
+% \begin{macrocode}
+\newcounter{LWR@tabletotalLaTeXcols}
+% \end{macrocode}
+
+% \DescribeCounter{LWR@tabletotalLaTeXcolsnext}
+% Holds the next \LaTeX\ table column index while parsing,
+% equal to one more than |LWR@tabletotalLaTeXcols|.
+% \begin{macrocode}
+\newcounter{LWR@tabletotalLaTeXcolsnext}
+% \end{macrocode}
+
+% \DescribeObject{LWR@colatspec} A data array of specifications for |@| columns.
+% The leftmost's index is |leftedge|, the others are counter values.
+% See \cref{sec:dataarray}.
+%
+% \DescribeObject{LWR@colbangspec} A data array of specifications for |!| columns.
+% The leftmost's index is |leftedge|, the others are counter values.
+% See \cref{sec:dataarray}.
+%
+% \DescribeObject{LWR@colbeforespec} A data array of specifications for |>| columns.
+%
+% \DescribeObject{LWR@colafterspec} A data array of specifications for |<| columns.
+%
+% \DescribeObject{LWR@colbarspec} A data array of specifications for vertical rules.
+
+
+% \subsection{Handling \&, @, !, and bar}
+%
+% \begin{minipage}{\linewidth}
+% For technical discussion regarding problems redefining |\&|, See: \\
+% \href{http://tex.stackexchange.com/questions/11638/where-do-i-find-futurelets-nasty-behaviour-documented/11860#11860}
+% {http://tex.stackexchange.com/questions/11638/ \\ \hspace*{.25in} where-do-i-find-futurelets-nasty-behaviour-documented/11860\#11860}
+% \end{minipage}
+%
+
+% \begin{macro}{\LWR@instertatbangcols}
+% \begin{macrocode}
+\newcommand*{\LWR@insertatbangcols}{%
+\ifbool{LWR@skipatbang}%
+{}%
+{%
+ \LWR@printatbang{at}{\arabic{LWR@tableLaTeXcolindex}}%
+ \LWR@printatbang{bang}{\arabic{LWR@tableLaTeXcolindex}}%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@closetabledatacell}
+% If |LWR@skippingmrowcell| or |LWR@skippingmcolrowcell| then
+% there is no data tag to close.
+% Otherwise, close any paragraphs, then close the data tag.
+%
+% \changes{v0.41}{2017/10/02}{Add: Mute \progcode{\protect\textgreater} for \cs{bottomrule}.}
+% \changes{v0.61}{2018/09/23}{Fix: Par tags in \env{tabular}.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@closetabledatacell}{%
+\global\booltrue{LWR@intabularmetadata}%
+\ifbool{LWR@exitingtabular}%
+{%
+% \end{macrocode}
+% \changes{v0.71}{2019/04/27}{Fix: Tabular par tags.}
+% \begin{macrocode}
+ \LWR@stoppars%
+}%
+{% not exiting tabular
+ \ifboolexpr{bool{LWR@skippingmrowcell} or bool{LWR@skippingmcolrowcell}}%
+ {%
+% \end{macrocode}
+% \changes{v0.71}{2019/04/27}{Fix: Tabular par tags.}
+% \begin{macrocode}
+ \LWR@stoppars%
+% \end{macrocode}
+% If not skipping a \cs{multicolumnrow} cell,
+% insert the |@| and |!| columns after this non-existant column.
+% \changes{v0.41}{2017/10/03}{Fix: At/bang column with \cs{multirow}.}
+% \begin{macrocode}
+ \ifbool{LWR@skippingmcolrowcell}%
+ {}%
+ {\LWR@insertatbangcols}%
+ }%
+ {% not skippingmrowcell
+% \end{macrocode}
+% Insert any |<| then any |@| and |!| column contents, unless muted
+% for the \cs{bottomrule} or a \cs{multicolumn}:
+% \changes{v0.41}{2017/10/02}{Fix: Cancel \progcode{\protect\textless} for \cs{multicolumn}.}
+% \begin{macrocode}
+ \unskip%
+ \ifboolexpr{%
+ bool{LWR@tabularmutemods} or
+ bool{LWR@skipatbang} or
+ bool{LWR@emptyatbang}
+ }%
+ {}%
+ {\LWR@getexparray{LWR@colafterspec}{\arabic{LWR@tableLaTeXcolindex}}}%
+% \end{macrocode}
+% Close paragraphs:
+% \changes{v0.71}{2019/04/27}{Fix: Tabular par tags.}
+% \begin{macrocode}
+ \LWR@stoppars%
+ \global\boolfalse{LWR@tableparcell}%
+% \end{macrocode}
+%
+% Close the table data cell.
+%
+% Close any color \element{div}s.
+% \changes{v0.48}{2018/02/06}{\pkg{colortbl}: Added.}
+% \begin{macrocode}
+ \whileboolexpr{test {\ifnumcomp{\value{LWR@cellcolordepth}}{>}{0}}}{%
+ \LWR@htmltag{/div}\LWR@orignewline%
+ \addtocounter{LWR@cellcolordepth}{-1}%
+ }%
+% \end{macrocode}
+% Skip the |@| and |!| cells if are closing a multicolumn cell.
+% \begin{macrocode}
+ \leavevmode\unskip\LWR@htmltag{/td}\LWR@orignewline%
+ \global\booltrue{LWR@tabularcelladded}%
+ \LWR@insertatbangcols%
+ }% not skipping mrowcell
+}% not exiting tabular
+\global\boolfalse{LWR@skippingmrowcell}%
+\global\boolfalse{LWR@skippingmcolrowcell}%
+\global\boolfalse{LWR@skipatbang}%
+% \end{macrocode}
+% Color control. Column is set by |>{}| for each cell, so it must be cleared here.
+% \changes{v0.48}{2018/02/06}{\pkg{colortbl}: Added.}
+% \begin{macrocode}
+\gdef\LWR@cellHTMLcolor{}
+\gdef\LWR@columnHTMLcolor{}
+\setcounter{LWR@cellcolordepth}{0}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% When not used inside a \env{tabular}, |&| performs its original
+% function as recorded here ( with catcode 4 ).
+% \begin{macrocode}
+\let\LWR@origampmacro&
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+%
+%
+%
+%
+% \subsubsection{Handling \progcode{\&}}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+% \changes{v0.15}{2016/03/31}{Ampersand (\&): Fixed handling when passed as an argument.}
+%
+% \begin{macro}{&} Will behave depending on whether it is being used inside \env{tabular}.
+%
+% |&| is redefined to test whether it is inside a tabular environment,
+% in which case it performs special processing for \HTML\ conversion.
+% If not, it behaves normally.
+%
+% \begin{macrocode}
+\newcommand*{\LWR@tabularampersand}{%
+\LWR@traceinfo{LWR@tabularampersand}%
+\ifnumcomp{\value{LWR@tabulardepth}}{>}{0}%
+{%
+% \end{macrocode}
+% If not skipping a multirow cell, close the current data cell.
+% \begin{macrocode}
+ \unskip%
+ \LWR@closetabledatacell%
+% \end{macrocode}
+% Move to the next column.
+% \begin{macrocode}
+ \addtocounter{LWR@tableLaTeXcolindex}{1}%
+% \end{macrocode}
+% Have not yet added data in this column:
+% \begin{macrocode}
+ \global\boolfalse{LWR@tabularcelladded}%
+% \end{macrocode}
+% Look at the next token to decide multi or single column data tag.
+% \begin{macrocode}
+ \LWR@getmynexttoken%
+}%
+% \end{macrocode}
+% If not inside a tabular, performs the original action:
+% \begin{macrocode}
+{\LWR@origampmacro}%
+}
+% \end{macrocode}
+% |&| is left with its original catcode for now.
+%
+% \pkg{tikz} package seems to require |&| be left alone until after
+% \pkg{tikz} has been loaded. Also, \pkg{cleveref} uses the ampersand in
+% one of its options.
+%
+% |&| is made active inside a \env{tabular}.
+%
+% |&| is left alone when in math alignments.
+% \end{macro}
+
+
+
+% \subsubsection{Filling an unfinished row}
+
+% \begin{macro}{\LWR@tabularfinishrow}
+% Adds empty table cells if necessary to finish the row.
+%
+% At the end of the table, if any bottom rules are requested then
+% an empty row must be generated to form the borders which show the rules.
+%
+% \changes{v0.41}{2017/10/02}{Unfinished tabular rows automatically filled.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@tabularfinishrow}{%
+% \end{macrocode}
+% If not exiting the tabular, or doing a rule, or have already started a row,
+% finish this row:
+% \begin{macrocode}
+\ifboolexpr{%
+ not bool {LWR@exitingtabular} or%
+ bool{LWR@doingtbrule} or%
+ bool{LWR@doingcmidrule} or%
+ test{\ifnumcomp{\value{LWR@hlines}}{>}{0}} or%
+ test{\ifnumcomp{\value{LWR@hdashedlines}}{>}{0}} or%
+ bool{LWR@startedrow}%
+}{%
+% \end{macrocode}
+% To temporarily turn off |LWR@exitingtabular| so that
+% table data tags will still be generated:
+%
+% If generating a final row for the \cs{bottomrule} borders,
+% turn off the |@|, |!|, |<|, and |>| column output:
+% \begin{macrocode}
+\ifbool{LWR@exitingtabular}{%
+ \global\booltrue{LWR@tabularmutemods}%
+}{%
+ \global\boolfalse{LWR@tabularmutemods}%
+}%
+% \end{macrocode}
+% Locally reenable the table data tags until finished with the final row:
+% \begin{macrocode}
+\global\boolfalse{LWR@exitingtabular}%
+% \end{macrocode}
+% Generate table data tags and ampersands until the right edge:
+% \begin{macrocode}
+\whileboolexpr{%
+ test {
+ \ifnumcomp{\value{LWR@tableLaTeXcolindex}}{<}{\value{LWR@tabletotalLaTeXcols}}
+ } or %
+ (%
+ bool{LWR@intabularmetadata} and%
+ not bool{LWR@tabularcelladded} and%
+ test {
+ \ifnumcomp{\value{LWR@tableLaTeXcolindex}}{=}{\value{LWR@tabletotalLaTeXcols}}
+ }%
+ )%
+}%
+{%
+ \LWR@tabledatasinglecolumntag%
+% \end{macrocode}
+% The following is essentially \cs{LWR@tabularampersand} with
+% |LWR@emptyatbang| added to empty the following cells:
+% \begin{macrocode}
+ \LWR@closetabledatacell%
+ \addtocounter{LWR@tableLaTeXcolindex}{1}%
+ \global\boolfalse{LWR@tabularcelladded}%
+ \global\booltrue{LWR@emptyatbang}%
+% \end{macrocode}
+% Starts the next cell:
+% \begin{macrocode}
+ \ifnumcomp{\value{LWR@tableLaTeXcolindex}}{<}{\value{LWR@tabletotalLaTeXcols}}%
+ {\LWR@getmynexttoken}%
+ {}%
+}%
+% \end{macrocode}
+% Reenable the original |LWR@exitingtabular| to close the entire table:
+% \begin{macrocode}
+\ifbool{LWR@tabularmutemods}{%
+ \global\booltrue{LWR@exitingtabular}%
+}{%
+ \global\boolfalse{LWR@exitingtabular}%
+}%
+\global\boolfalse{LWR@tabularmutemods}%
+% \end{macrocode}
+% \begin{macrocode}
+\global\boolfalse{LWR@emptyatbang}%
+}{}% ifboolexpr
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+
+
+% \subsection{Handling \protect\textbackslash\protect\textbackslash}
+
+% Inside tabular, |\\| is redefined to |\LWR@tabularendofline|
+%
+% Throws away options |\\[dim]| or |\\*|
+%
+% \begin{macro}{\LWR@tabularendofline}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@tabularendofline}{s o}{%
+% \end{macrocode}
+% Finish the row:
+% \begin{macrocode}
+\ifnumcomp{\value{LWR@tableLaTeXcolindex}}{<}{\value{LWR@tabletotalLaTeXcols}}%
+ {\LWR@tabularfinishrow}%
+ {\LWR@closetabledatacell}%
+\LWR@htmltag{/tr}\LWR@orignewline%
+% \end{macrocode}
+% \pkg{xcolor} row color support:
+% \begin{macrocode}
+\@rowc@lors%
+% \end{macrocode}
+% No longer inside a data cell:
+% \begin{macrocode}
+\global\booltrue{LWR@intabularmetadata}%
+% \end{macrocode}
+% Not yet started a table row:
+% \begin{macrocode}
+\global\boolfalse{LWR@startedrow}%
+% \end{macrocode}
+% Additional setup:
+% \begin{macrocode}
+\setcounter{LWR@hlines}{0}%
+\setcounter{LWR@hdashedlines}{0}%
+\global\boolfalse{LWR@doingtbrule}%
+\global\boolfalse{LWR@doingcmidrule}%
+\LWR@clearmidrules%
+\gdef\LWR@rowHTMLcolor{}%
+% \end{macrocode}
+% Start at first column:
+% \begin{macrocode}
+\setcounter{LWR@tableLaTeXcolindex}{1}%
+% \end{macrocode}
+% Have not yet added data in this column:
+% \begin{macrocode}
+\global\boolfalse{LWR@tabularcelladded}%
+% \end{macrocode}
+% Allow \TeX\ to flush the pending paragraph.
+% Not doing so causes a slowdown for very large tables.
+% \changes{v0.60}{2018/09/17}{Fix: Slowdown for long tables.}
+% \begin{macrocode}
+\LWR@stoppars
+\LWR@origpar
+% \end{macrocode}
+% Look at the next token to decide between single column data tag
+% or a special case:
+% \begin{macrocode}
+\LWR@getmynexttoken%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Looking ahead in the column specifications}
+%
+% \begin{macro}{\LWR@columnspeclookahead} \marg{offset}
+%
+% Looks |offset| tokens ahead in the column specification,
+% setting \cs{LWR@strresulttwo}.
+%
+% The |w| column alignment will be seen as a single unit such as |{c}|.
+% \begin{macrocode}
+\newcommand*{\LWR@columnspeclookahead}[1]{%
+\setcounter{LWR@tempcountone}{\value{LWR@tablecolspecindex}}%
+\addtocounter{LWR@tempcountone}{#1}%
+\fullexpandarg%
+\StrChar{\LWR@origcolspec}{\arabic{LWR@tempcountone}}[\LWR@strresulttwo]%
+% \end{macrocode}
+% Get the contents of the first group in \cs{LWR@strresulttwo}:
+% \begin{macrocode}
+\exploregroups%
+\StrChar{\LWR@strresulttwo}{1}[\LWR@strresulttwo]%
+\noexploregroups%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Parsing @, >, <, !, bar columns}
+%
+%
+% Holds the parsed argument for |@|, |>|, |<|, or |!| columns:
+% \begin{macrocode}
+\newcommand*{\LWR@colparameter}{}
+% \end{macrocode}
+%
+% \begin{macro}{\LWR@parseatcolumn}
+%
+% Handles |@{text}| columns.
+%
+% \changes{v0.33}{2017/07/07}{Fix: Column alignment with leftmost \progcode{@}.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@parseatcolumn}{%
+% \end{macrocode}
+% Move to the next token after the '@':
+% \begin{macrocode}
+\LWR@traceinfo{at column}%
+\addtocounter{LWR@tablecolspecindex}{1}%
+% \end{macrocode}
+% Read the next token into \cs{LWR@colparameter}, expanding once:
+% \begin{macrocode}
+\LWR@traceinfo{about to read the next token:}%
+\expandarg%
+\StrChar{\LWR@origcolspec}%
+ {\arabic{LWR@tablecolspecindex}}[\LWR@colparameter]
+\fullexpandarg%
+% \end{macrocode}
+% Store the result into a data array, expanding once out of \cs{LWR@colparameter}:
+% \begin{macrocode}
+\LWR@traceinfo{have now read the next token}%
+\ifnumcomp{\value{LWR@tabletotalLaTeXcols}}{=}{0}%
+{% left edge of the table:
+ \LWR@traceinfo{at the left edge}%
+ \LWR@setexparray{LWR@colatspec}{leftedge}{\LWR@colparameter}%
+ \LWR@traceinfo{at the left edge: %
+ \LWR@getexparray{LWR@colatspec}{leftedge}}%
+}%
+{% not at the left edge:
+ \LWR@traceinfo{not at the left edge}%
+ \LWR@setexparray{LWR@colatspec}%
+ {\arabic{LWR@tabletotalLaTeXcols}}{\LWR@colparameter}%
+ \LWR@traceinfo{at \arabic{LWR@tabletotalLaTeXcols}: %
+ \LWR@getexparray{LWR@colatspec}{\arabic{LWR@tabletotalLaTeXcols}}}%
+}%
+\let\LWR@colparameter\relax%
+\global\booltrue{LWR@validtablecol}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@parsebangcolumn}
+% Handles |!{text}| columns.
+%
+% \changes{v0.22}{2017/02/28}{Added tabular \progcode{!!} column.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@parsebangcolumn}{%
+% \end{macrocode}
+% Move to the next token after the '!':
+% \begin{macrocode}
+\LWR@traceinfo{bang column}%
+\addtocounter{LWR@tablecolspecindex}{1}%
+% \end{macrocode}
+% Read the next token into \cs{LWR@colparameter}, expanding once:
+% \begin{macrocode}
+\LWR@traceinfo{about to read the next token:}%
+\expandarg%
+\StrChar{\LWR@origcolspec}%
+ {\arabic{LWR@tablecolspecindex}}[\LWR@colparameter]
+\fullexpandarg%
+% \end{macrocode}
+% Store the result into a data array,
+% expanding once out of \cs{LWR@colparameter}:
+% \begin{macrocode}
+\LWR@traceinfo{have now read the next token}%
+\ifnumcomp{\value{LWR@tabletotalLaTeXcols}}{=}{0}%
+{% left edge of the table:
+ \LWR@traceinfo{at the left edge}%
+ \LWR@setexparray{LWR@colbangspec}{leftedge}{\LWR@colparameter}%
+}%
+{% not at the left edge:
+ \LWR@traceinfo{not at the left edge}%
+ \LWR@setexparray{LWR@colbangspec}%
+ {\arabic{LWR@tabletotalLaTeXcols}}{\LWR@colparameter}%
+ \LWR@traceinfo{bang \arabic{LWR@tabletotalLaTeXcols}: \LWR@colparameter!}%
+}%
+\let\LWR@colparameter\relax%
+\global\booltrue{LWR@validtablecol}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\LWR@parsebeforecolumn}
+%
+% Handles |>{text}| columns.
+%
+% \begin{macrocode}
+\newcommand*{\LWR@parsebeforecolumn}{%
+% \end{macrocode}
+% Move to the next token after the '>':
+% \begin{macrocode}
+\addtocounter{LWR@tablecolspecindex}{1}%
+% \end{macrocode}
+% Read the next token, expanding once into \cs{LWR@colparameter}:
+% \begin{macrocode}
+\expandarg%
+\StrChar{\LWR@origcolspec}%
+ {\arabic{LWR@tablecolspecindex}}[\LWR@colparameter]%
+\fullexpandarg%
+% \end{macrocode}
+% Store the result into a data array, expanding once out of \cs{LWR@colparameter}:
+% \begin{macrocode}
+\LWR@setexparray{LWR@colbeforespec}%
+ {\arabic{LWR@tabletotalLaTeXcolsnext}}{\LWR@colparameter}%
+\let\LWR@colparameter\relax%
+\global\booltrue{LWR@validtablecol}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LWR@parseaftercolumn}
+%
+% Handles |<{text}| columns.
+%
+% \begin{macrocode}
+\newcommand*{\LWR@parseaftercolumn}{%
+% \end{macrocode}
+% Move to the next token after the '<':
+% \begin{macrocode}
+\addtocounter{LWR@tablecolspecindex}{1}%
+% \end{macrocode}
+% Read the next token, expanding once into \cs{LWR@colparameter}:
+% \begin{macrocode}
+\expandarg%
+\StrChar{\LWR@origcolspec}%
+ {\arabic{LWR@tablecolspecindex}}[\LWR@colparameter]%
+\fullexpandarg%
+% \end{macrocode}
+% Store the result into a data array, expanding once out of \cs{LWR@colparameter}:
+% \begin{macrocode}
+\LWR@setexparray{LWR@colafterspec}%
+ {\arabic{LWR@tabletotalLaTeXcols}}{\LWR@colparameter}%
+\let\LWR@colparameter\relax%
+\global\booltrue{LWR@validtablecol}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@parsebarcolumn} \qquad Handles vertical rules.
+%
+% \changes{v0.41}{2017/10/07}{Added vertical rules.}
+% \changes{v0.56}{2018/04/30}{Adds support for double vertical rules.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@parsebarcolumn}{%
+\LWR@traceinfo{LWR@parsebarcolumn}%
+% \end{macrocode}
+% Remember the bar at this position:
+% \begin{macrocode}
+\ifnumcomp{\value{LWR@tabletotalLaTeXcols}}{=}{0}%
+{% left edge of the table:
+ \edef\LWR@tempone{\LWR@getexparray{LWR@colbarspec}{leftedge}}%
+ \ifdefstring{\LWR@tempone}{tvertbarl}%
+ {\LWR@setexparray{LWR@colbarspec}{leftedge}{tvertbarldouble}}%
+ {\LWR@setexparray{LWR@colbarspec}{leftedge}{tvertbarl}}%
+}%
+{% not at the left edge:
+ \edef\LWR@tempone{%
+ \LWR@getexparray{LWR@colbarspec}{\arabic{LWR@tabletotalLaTeXcols}}%
+ }%
+ \ifdefstring{\LWR@tempone}{tvertbarr}%
+ {%
+ \LWR@setexparray{LWR@colbarspec}%
+ {\arabic{LWR@tabletotalLaTeXcols}}{tvertbarrdouble}%
+ }%
+ {%
+ \LWR@setexparray{LWR@colbarspec}%
+ {\arabic{LWR@tabletotalLaTeXcols}}{tvertbarr}%
+ }%
+}%
+\global\booltrue{LWR@validtablecol}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@parsecoloncolumn} \qquad Handles vertical rules.
+%
+% \changes{v0.56}{2018/05/04}{\pkg{arydshln}: Added.}
+% \begin{macrocode}
+\newcommand*{\LWR@parsecoloncolumn}{%
+\LWR@traceinfo{LWR@parsecoloncolumn}%
+% \end{macrocode}
+% Remember the bar at this position:
+% \begin{macrocode}
+\ifnumcomp{\value{LWR@tabletotalLaTeXcols}}{=}{0}%
+{% left edge of the table:
+ \edef\LWR@tempone{\LWR@getexparray{LWR@colbarspec}{leftedge}}%
+ \ifdefstring{\LWR@tempone}{tvertbarldash}%
+ {\LWR@setexparray{LWR@colbarspec}{leftedge}{tvertbarldoubledash}}%
+ {\LWR@setexparray{LWR@colbarspec}{leftedge}{tvertbarldash}}%
+}%
+{% not at the left edge:
+ \edef\LWR@tempone{%
+ \LWR@getexparray{LWR@colbarspec}{\arabic{LWR@tabletotalLaTeXcols}}%
+ }%
+ \ifdefstring{\LWR@tempone}{tvertbarrdash}%
+ {\LWR@setexparray{LWR@colbarspec}%
+ {\arabic{LWR@tabletotalLaTeXcols}}{tvertbarrdoubledash}}%
+ {\LWR@setexparray{LWR@colbarspec}%
+ {\arabic{LWR@tabletotalLaTeXcols}}{tvertbarrdash}}%
+}%
+\global\booltrue{LWR@validtablecol}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@parsesemicoloncolumn} \qquad Handles vertical rules.
+%
+% \changes{v0.56}{2018/05/04}{\pkg{arydshln}: Added.}
+% \begin{macrocode}
+\newcommand*{\LWR@parsesemicoloncolumn}{%
+% \end{macrocode}
+% Treat |;| as a |:| column:
+% \begin{macrocode}
+\LWR@parsecoloncolumn%
+% \end{macrocode}
+% Skip the following width token:
+% \begin{macrocode}
+\addtocounter{LWR@tablecolspecindex}{1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Parsing `l', `c', or `r' columns}
+%
+% \begin{macro}{\LWR@parsenormalcolumn} \marg{thiscolumn}
+%
+% Add to the accumulated column specs, advance counters,
+% and pre-clear another column of at, before, and after specs.
+% \begin{macrocode}
+\newcommand*{\LWR@parsenormalcolumn}[1]{%
+\addtocounter{LWR@tabletotalLaTeXcols}{1}%
+\addtocounter{LWR@tabletotalLaTeXcolsnext}{1}%
+% \end{macrocode}
+% \changes{v0.60}{2018/09/17}{\env{tabular}: Improved memory management: Not using \pkg{xstring}.}
+% \begin{macrocode}
+\LWR@setexparray{LWR@tablecolspec}{\arabic{LWR@tabletotalLaTeXcols}}{#1}%
+% \end{macrocode}
+% \begin{macrocode}
+\LWR@traceinfo{normal column \arabic{LWR@tabletotalLaTeXcols}: #1}%
+\LWR@setexparray{LWR@colatspec}{\arabic{LWR@tabletotalLaTeXcolsnext}}{}%
+\LWR@setexparray{LWR@colbangspec}{\arabic{LWR@tabletotalLaTeXcolsnext}}{}%
+\LWR@setexparray{LWR@colbeforespec}{\arabic{LWR@tabletotalLaTeXcolsnext}}{}%
+\LWR@setexparray{LWR@colafterspec}{\arabic{LWR@tabletotalLaTeXcolsnext}}{}%
+\LWR@setexparray{LWR@colbarspec}{\arabic{LWR@tabletotalLaTeXcolsnext}}{}%
+\global\booltrue{LWR@validtablecol}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Parsing `p', `m', or `b' columns}
+%
+% \begin{macro}{\LWR@parsepcolumn} \marg{thiscolumn}
+% The width will be ignored.
+% \begin{macrocode}
+\newcommand*{\LWR@parsepcolumn}[1]{%
+% \end{macrocode}
+% Converts to the given column type:
+% \begin{macrocode}
+\LWR@parsenormalcolumn{#1}%
+% \end{macrocode}
+% Skips the following width token:
+% \begin{macrocode}
+\addtocounter{LWR@tablecolspecindex}{1}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Parsing `w' columns}
+%
+% \begin{macro}{\LWR@parsewcolumn}
+% The width will be ignored.
+% \begin{macrocode}
+\newcommand*{\LWR@parsewcolumn}{%
+% \end{macrocode}
+% \begin{macrocode}
+\LWR@columnspeclookahead{1}%
+\expandafter\LWR@parsenormalcolumn\expandafter{\LWR@strresulttwo}%
+% \end{macrocode}
+% Skips the following width and alignment tokens:
+% \begin{macrocode}
+\addtocounter{LWR@tablecolspecindex}{2}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Parsing '*' columns}
+%
+% \begin{macro}{\LWR@parsestarcolumn}
+% Star columns should already have been expanded, so this should never be used.
+% \begin{macrocode}
+\newcommand*{\LWR@parsestarcolumn}{%
+ \addtocounter{LWR@tablecolspecindex}{2}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Parsing `D' columns}
+%
+% From the \pkg{dcolumn} package.
+%
+% \begin{macro}{\LWR@parseDcolumn} \marg{thiscolumn}
+% The three parameters will be ignored.
+%
+% \changes{v0.22}{2017/02/24}{Added tabular \progcode{D} column.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@parseDcolumn}[1]{%
+% \end{macrocode}
+% Converts to the given column type.
+% \begin{macrocode}
+\LWR@parsenormalcolumn{#1}%
+% \end{macrocode}
+% Skips the following three parameters.
+% \begin{macrocode}
+\addtocounter{LWR@tablecolspecindex}{3}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Expanding the star column specifiations}
+
+% \DescribeCounter{LWR@starcount}
+% Internal count for duplicating star columns.
+% \begin{macrocode}
+\newcount\LWR@starcount
+% \end{macrocode}
+%
+% \begin{macro}{\LWR@expcolspec}
+% Temporary storage used to build the expanded column specifier.
+% \begin{macrocode}
+\newcommand*{\LWR@expcolspec}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \DescribeCounter{LWR@splitstarindex}
+% Indexes into the column specifiers.
+% \begin{macrocode}
+\newcounter{LWR@splitstarindex}
+% \end{macrocode}
+%
+% \DescribeCounter{LWR@splitstarcopies}
+% Number of copies.
+% \begin{macrocode}
+\newcounter{LWR@splitstarcopies}
+% \end{macrocode}
+%
+% \begin{macro}{\LWR@splitstarcontents}
+% Contents to duplicate.
+% \begin{macrocode}
+\newcommand*{\LWR@splitstarcontents}{}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\expandcolspec} Expands \cs{LWR@origcolspec} for star columns.
+% \changes{v0.71}{2019/04/26}{Added support for tabular `\texttt{*}' column.}
+% \begin{macrocode}
+\newcommand*{\expandcolspec}{%
+% \end{macrocode}
+%
+% Find the position of any star token.
+% \begin{macrocode}
+ \StrPosition{\LWR@origcolspec}{*}[\LWR@tempone]%
+% \end{macrocode}
+%
+% Expand until no stars are found:
+% \begin{macrocode}
+ \whileboolexpr{ test {\ifnumgreater{\LWR@tempone}{0}}}%
+ {%
+% \end{macrocode}
+%
+% Begin with any characters to the left of the star.
+% \begin{macrocode}
+ \setcounter{LWR@splitstarindex}{\LWR@tempone}%
+ \addtocounter{LWR@splitstarindex}{-1}%
+ \StrLeft{\LWR@origcolspec}{\value{LWR@splitstarindex}}[\LWR@expcolspec]%
+% \end{macrocode}
+%
+% Move past the star to remember its number of copies.
+% \begin{macrocode}
+ \addtocounter{LWR@splitstarindex}{2}%
+ \StrChar{\LWR@origcolspec}{\value{LWR@splitstarindex}}[\LWR@tempone]%
+ \setcounter{LWR@splitstarcopies}{\expandafter\@firstofone\LWR@tempone}%
+% \end{macrocode}
+%
+% Move past the number of copies and remember the contents.
+% \begin{macrocode}
+ \addtocounter{LWR@splitstarindex}{1}%
+ \StrChar{\LWR@origcolspec}{\value{LWR@splitstarindex}}[\LWR@splitstarcontents]%
+% \end{macrocode}
+%
+% For each copy, append the contents.
+% \begin{macrocode}
+ \ifnumgreater{\value{LWR@splitstarcopies}}{0}%
+ {%
+ \LWR@starcount=\value{LWR@splitstarcopies}%
+ \loop
+ \appto\LWR@expcolspec{%
+% \end{macrocode}
+% (Remove the enclosing braces.)
+% \begin{macrocode}
+ \expandafter\@firstofone\LWR@splitstarcontents%
+ }%
+ \advance \LWR@starcount -1
+ \ifnum \LWR@starcount>0 \repeat
+ }{}%
+% \end{macrocode}
+%
+% Remove any token to the left, and append the rightmost remainding tokens.
+% \begin{macrocode}
+ \StrGobbleLeft{\LWR@origcolspec}{\value{LWR@splitstarindex}}[\colspecremainder]%
+ \appto{\LWR@expcolspec}{\colspecremainder}%
+% \end{macrocode}
+%
+% Remember the final result.
+% \begin{macrocode}
+ \edef\LWR@origcolspec{\LWR@expcolspec}%
+% \end{macrocode}
+%
+% See if more stars exist.
+% \begin{macrocode}
+ \StrPosition{\LWR@origcolspec}{*}[\LWR@tempone]%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Parsing the column specifications}
+
+% \HTML\ \CSS\ cannot exactly match the \LaTeX{} concept of a baseline for
+% a table row.
+% \trouble[tabular baselines]{tabular>baselines}
+% \Cref{tab:baseline} shows the \LaTeX{} results for various
+% vertical-alignment choices, with the baseline of the first column drawn across
+% all the columns for comparison.
+% See the |p| column specification in \cref{tab:columnconversions} for details.
+%
+% \begin{table}
+% \caption{Tabular baseline\label{tab:baseline}}
+% \gindex{tabular>baseline}\gindex{baseline>tabular}
+% \centering
+% \smallskip
+% \begin{tabular}{lp{.25in}m{.25in}b{.25in}r}
+% \toprule
+% l & p & m & b & r \\
+% \midrule
+% l \rule{1.65in}{.4pt} \hspace{-1.4in} &
+% par \newline par \newline par &
+% mid \newline mid \newline mid &
+% bot \newline bot \newline bot &
+% r \\
+% \bottomrule
+% \end{tabular}
+% \end{table}
+%
+% \Cref{tab:columnconversions} describes how each kind of column is
+% converted to \HTML.
+%
+% \begin{table}
+% \caption{Tabular \HTML\ column conversions\label{tab:columnconversions}}
+% \gindex{tabular>HTML colummn conversion}
+% \gindex{HTML>tabular column conversion}
+%
+% \medskip
+%
+% \hrule
+% \begin{description}[parsep=.5ex]
+% \item [l, r, c:] Converted to table cells without paragraph tags. \\
+% Uses \CSS\ |vertical-align:middle| so that top or bottom-aligned cells may go above or below this cell.
+% \item [p:] Converted to table cells with paragraph tags.
+% Ref: \Cref{tab:baseline},
+% \LaTeX{} places the top line of a parbox
+% aligned with the rest of the text line, so \CSS\ |vertical-align:bottom| is used to
+% have the \HTML\ result appear with the paragraph extending below the L, R, C cells at the middle, if possible.
+% This may be confusing as a P cell may not top-align with an L,R,C cell in the \HTML\
+% conversion, especially in the presence of a B cell, and two P cells side-by-side will
+% be aligned at the bottom instead of the top.
+% Some adjustment of the \CSS\ may be desired, changing
+% |td.tdp|, |td.tdP|, |td.tdprule|, and |td.tdPrule| to |vertical-align: middle|.
+% Another possibility is to change L,R,C, and P to |vertical-align: top| and not worry
+% about the alignment of B and M cells or trying to approximate \LaTeX{} baselines.
+% \item [m:] With paragraph tags, \CSS\ |vertical-align:middle|.
+% \item [b:] With paragraph tags, \CSS\ |vertical-align:top| so that the bottom of the
+% text is closest to the middle of the text line.
+% \item [P, M, B:] Horizontally-centered versions.
+% \item [S:] Converted to 'r'. Ignores optional argument. From the \pkg{siunitx} package.
+% \item [D:] Converted to 'c'. From the \pkg{dcolumn} package.
+% \item [@, !, \textgreater{}, \textless{}:] One each, in that order.
+% \item [\textbar:] Vertical rule.
+% \item [Unknown:] Converted to 'l'.
+% \item [\cs{newcolumn}:] Currently treated as unknown.
+% \end{description}
+% \hrule
+% \end{table}
+%
+%
+% \DescribeBoolean{LWR@validtablecol} True if found a valid table column type.
+% \begin{macrocode}
+\newbool{LWR@validtablecol}
+% \end{macrocode}
+%
+%
+% \DescribeBoolean{LWR@opttablecol} True if found a table column optional argument.
+% \begin{macrocode}
+\newbool{LWR@opttablecol}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\LWR@parsetablecols} \marg{colspecs}
+%
+% Scans the column specification left to right.
+%
+% Builds \cs{LWR@tablecolspec} with the final specification,
+% one \LaTeX\ column per entry. The final number of \LaTeX\ columns in each row is
+% stored in |LWR@tabletotalLaTeXcols|,
+% which is the number of |&| and |\\| in each line, but
+% which does not include |@|, |!|, |<|, |>| specifications in the count.
+%
+% \changes{v0.22}{2017/02/28}{Unknown table column types become \progcode{l}.
+% Added tabular \progcode{D}, \progcode{!!}, \progcode{X} columns.}
+%
+% \changes{v0.23}{2017/03/02}{Fix for vert bar column type.}
+% \changes{v0.28}{2017/04/11}{Added L, C, R, J column types.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@parsetablecols}[1]{%
+\LWR@traceinfo{LWR@parsetablecols}%
+% \end{macrocode}
+% Remember the original supplied column spec:
+% \begin{macrocode}
+\renewcommand*{\LWR@origcolspec}{#1}%
+% \end{macrocode}
+% Remove spaces:
+% \changes{v0.43}{2017/11/01}{Ignore spaces in col spec.}
+% \begin{macrocode}
+\expandarg%
+\StrSubstitute{\LWR@origcolspec}{ }{}[\LWR@origcolspec]%
+% \end{macrocode}
+%
+% Expand any star columns:
+% \begin{macrocode}
+\expandcolspec%
+% \end{macrocode}
+%
+% The parsed column spec data array, |LWR@tablecolspec|,
+% will be overwritten with new values.
+%
+% Total number of columns found so far.
+% Also pre-initialize the first several columns of specs:
+% \begin{macrocode}
+\setcounter{LWR@tabletotalLaTeXcols}{0}%
+\setcounter{LWR@tabletotalLaTeXcolsnext}{1}%
+\LWR@setexparray{LWR@colatspec}{leftedge}{}%
+\LWR@setexparray{LWR@colatspec}{1}{}%
+\LWR@setexparray{LWR@colatspec}{2}{}%
+\LWR@setexparray{LWR@colatspec}{3}{}%
+\LWR@setexparray{LWR@colbangspec}{leftedge}{}%
+\LWR@setexparray{LWR@colbangspec}{1}{}%
+\LWR@setexparray{LWR@colbangspec}{2}{}%
+\LWR@setexparray{LWR@colbangspec}{3}{}%
+\LWR@setexparray{LWR@colbeforespec}{1}{}%
+\LWR@setexparray{LWR@colbeforespec}{2}{}%
+\LWR@setexparray{LWR@colbeforespec}{3}{}%
+\LWR@setexparray{LWR@colafterspec}{1}{}%
+\LWR@setexparray{LWR@colafterspec}{2}{}%
+\LWR@setexparray{LWR@colafterspec}{3}{}%
+\LWR@setexparray{LWR@colbarspec}{leftedge}{}%
+\LWR@setexparray{LWR@colbarspec}{1}{}%
+\LWR@setexparray{LWR@colbarspec}{2}{}%
+\LWR@setexparray{LWR@colbarspec}{3}{}%
+% \end{macrocode}
+% Starting at the first column specification:
+% \begin{macrocode}
+\setcounter{LWR@tablecolspecindex}{1}%
+% \end{macrocode}
+% Place the colspecs string length into \cs{LWR@strresult},
+% and remember the number of characters in the column specification:
+% \begin{macrocode}
+\expandarg%
+\StrLen{\LWR@origcolspec}[\LWR@strresult]%
+\fullexpandarg%
+\LWR@traceinfo{original column spec length: \LWR@strresult}%
+\setcounter{LWR@tablecolspecwidth}{\LWR@strresult}%
+% \end{macrocode}
+% Haven't seen any optional arguments so far
+% \begin{macrocode}
+\global\boolfalse{LWR@opttablecol}%
+% \end{macrocode}
+% Scan through the column specifications:
+% \begin{macrocode}
+\whileboolexpr{%
+ not test{%
+ \ifnumcomp{\value{LWR@tablecolspecindex}}{>}%
+ {\value{LWR@tablecolspecwidth}}%
+ }%
+}%
+{%
+% \end{macrocode}
+% Place the next single-character column type into \cs{LWR@strresult}:
+% \begin{macrocode}
+\expandarg%
+\StrChar{\LWR@origcolspec}{\arabic{LWR@tablecolspecindex}}[\LWR@strresult]%
+\LWR@traceinfo{position \arabic{LWR@tablecolspecindex}: \LWR@strresult}%
+\fullexpandarg%
+% \end{macrocode}
+% Not yet found a valid column type:
+% \begin{macrocode}
+\global\boolfalse{LWR@validtablecol}%
+% \end{macrocode}
+%
+% Skip over any optional arguments, such as \pkg{siunitx} |S| column:
+% \changes{v0.48}{2018/02/04}{Fix: Ignore optional tabular column arguments.}
+% \begin{macrocode}
+\IfStrEq{\LWR@strresult}{[}{\global\booltrue{LWR@opttablecol}}{}%
+% \end{macrocode}
+%
+% Throw away anything found inside the optional argument:
+% \begin{macrocode}
+\ifbool{LWR@opttablecol}%
+{}% inside an optional argument
+{% not an optional tabular argument
+% \end{macrocode}
+% Not inside an optional argument, so consider the column type:
+% \begin{macrocode}
+\IfStrEq{\LWR@strresult}{l}{\LWR@parsenormalcolumn{l}}{}%
+\IfStrEq{\LWR@strresult}{c}{\LWR@parsenormalcolumn{c}}{}%
+\IfStrEq{\LWR@strresult}{r}{\LWR@parsenormalcolumn{r}}{}%
+\IfStrEq{\LWR@strresult}{L}{\LWR@parsenormalcolumn{l}}{}%
+\IfStrEq{\LWR@strresult}{C}{\LWR@parsenormalcolumn{c}}{}%
+\IfStrEq{\LWR@strresult}{R}{\LWR@parsenormalcolumn{r}}{}%
+\IfStrEq{\LWR@strresult}{J}{\LWR@parsenormalcolumn{l}}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\IfStrEq{\LWR@strresult}{S}{\LWR@parsenormalcolumn{c}}{}%
+\IfStrEq{\LWR@strresult}{s}{\LWR@parsenormalcolumn{c}}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\IfStrEq{\LWR@strresult}{\detokenize{@}}{\LWR@parseatcolumn}{}%
+\IfStrEq{\LWR@strresult}{!}{\LWR@parsebangcolumn}{}%
+\IfStrEq{\LWR@strresult}{>}{\LWR@parsebeforecolumn}{}%
+\IfStrEq{\LWR@strresult}{<}{\LWR@parseaftercolumn}{}%
+\IfStrEq{\LWR@strresult}{|}{\LWR@parsebarcolumn}{}%
+\IfStrEq{\LWR@strresult}{:}{\LWR@parsecoloncolumn}{}%
+\IfStrEq{\LWR@strresult}{;}{\LWR@parsesemicoloncolumn}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\IfStrEq{\LWR@strresult}{p}{\LWR@parsepcolumn{p}}{}%
+\IfStrEq{\LWR@strresult}{m}{\LWR@parsepcolumn{m}}{}%
+\IfStrEq{\LWR@strresult}{b}{\LWR@parsepcolumn{b}}{}%
+% \end{macrocode}
+% \changes{v0.56}{2018/05/10}{Added \pkg{array} \texttt{W} column.}
+% \begin{macrocode}
+\IfStrEq{\LWR@strresult}{w}{\LWR@parsewcolumn}{}%
+\IfStrEq{\LWR@strresult}{W}{\LWR@parsewcolumn}{}%
+% \end{macrocode}
+% A star column:
+% \begin{macrocode}
+\IfStrEq{\LWR@strresult}{*}{\LWR@parsestarcolumn}{}%
+% \end{macrocode}
+% From the \pkg{dcolumn} package:
+% \begin{macrocode}
+\IfStrEq{\LWR@strresult}{D}{\LWR@parseDcolumn{c}}{}%
+% \end{macrocode}
+% From the \pkg{tabularx} package.
+% X column has no parameter, but will be given paragraph tags.
+% \begin{macrocode}
+\IfStrEq{\LWR@strresult}{X}{\LWR@parsenormalcolumn{X}}{}%
+% \end{macrocode}
+% \begin{docsidebar}
+% \raggedright
+% Many people define centered versions ``|P|'', ``|M|'', and ``|B|'':
+% \begin{Verbatim}[tabsize=4,gobble=2]
+% \newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}
+% \end{Verbatim}
+% \vspace{-\baselineskip}
+% \end{docsidebar}
+% \begin{macrocode}
+\IfStrEq{\LWR@strresult}{P}{\LWR@parsepcolumn{P}}{}%
+\IfStrEq{\LWR@strresult}{M}{\LWR@parsepcolumn{M}}{}%
+\IfStrEq{\LWR@strresult}{B}{\LWR@parsepcolumn{B}}{}%
+% \end{macrocode}
+% If this column was an invalid column type, convert it to an |l| column:
+% \begin{macrocode}
+\ifbool{LWR@validtablecol}{}{%
+ \LWR@traceinfo{invalid column type: \LWR@strresult}%
+ \LWR@parsenormalcolumn{l}%
+}%
+}% not an optional column argument
+% \end{macrocode}
+% If read the closing bracket, no longer inside the optional argument:
+% \begin{macrocode}
+\IfStrEq{\LWR@strresult}{]}{\global\boolfalse{LWR@opttablecol}}{}%
+% \end{macrocode}
+% Move to the next character:
+% \begin{macrocode}
+\addtocounter{LWR@tablecolspecindex}{1}%
+}% whiledo
+}%
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{\pkg{colortbl} and \pkg{xparse} tabular color support}
+%
+% \changes{v0.48}{2018/02/06}{\pkg{colortbl}: Added.}
+% \changes{v0.49}{2018/02/17}{\pkg{xcolor}: Added tabular row colors.}
+%
+% These macros provide a minimal emulation of some \pkg{colortbl} macros
+% which might appear between table cells.
+% If \pkg{colortbl} is loaded, these macros will be replaced with
+% functional versions.
+%
+% For each of the \HTML\ colors below, the text for the \HTML\ color is
+% set if requested, but the macro is empty if none has been set.
+%
+% \begin{macro}{\rownum}
+% Reserve a counter register.
+% \begin{macrocode}
+ \@ifundefined{rownum}{\newcount\rownum}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@rowcolors} Emulated in case \pkg{xcolor} is not used.
+% \begin{macrocode}
+\newcommand*{\@rowcolors}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@rowc@lors} Emulated in case \pkg{xcolor} is not used.
+% \begin{macrocode}
+\newcommand*{\@rowc@lors}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LWR@xcolorrowHTMLcolor} Emulated \pkg{xcolor} row color.
+% \begin{macrocode}
+\newcommand*{\LWR@xcolorrowHTMLcolor}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LWR@columnHTMLcolor} \HTML style code for the column color.
+% \begin{macrocode}
+\def\LWR@columnHTMLcolor{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LWR@rowHTMLcolor} \HTML style code for the row color.
+% \begin{macrocode}
+\def\LWR@rowHTMLcolor{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LWR@cellHTMLcolor} \HTML style code for the cell color.
+% \begin{macrocode}
+\def\LWR@cellHTMLcolor{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LWR@ruleHTMLcolor} \HTML style code for the cell color.
+% \begin{macrocode}
+\newcommand*{\LWR@ruleHTMLcolor}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\rowcolor} \oarg{model} \marg{color} \oarg{left overhang} \oarg{right overhang}
+% Print version. The \HTML\ version is in \pkg{lwarp-colortbl}.
+% Used before starting a tabular data cell, thus \cs{LWR@getmynexttoken}.
+% \begin{macrocode}
+\newcommand*{\rowcolor}{\LWR@getmynexttoken}%
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\arrayrulecolor} \oarg{model} \marg{color}
+% \begin{macro}{\arrayrulecolornexttoken} \oarg{model} \marg{color}
+%
+% Print versions for use outside and inside a \env{tabular}:
+% \begin{macrocode}
+\newcommand{\arrayrulecolor}[2][named]{}
+\newcommand{\arrayrulecolornexttoken}[2][named]{\LWR@getmynexttoken}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+
+% \begin{macro}{\doublerulesepcolor} \oarg{model} \marg{color}
+% \begin{macro}{\doublerulesepcolornexttoken} \oarg{model} \marg{color}
+%
+% Print versions for use inside and outside a \env{tabular}:
+% \begin{macrocode}
+\newcommand{\doublerulesepcolor}[2][named]{}
+\newcommand{\doublerulesepcolornexttoken}[2][named]{\LWR@getmynexttoken}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+
+
+% \subsection{Starting a new row}
+
+% \begin{macro}{\LWR@maybenewtablerow}
+%
+% If have not yet started a new table row, begin one now.
+% Creates a new row tag, adding a class for |hline| or |tbrule| if
+% necessary.
+% \begin{macrocode}
+\newcommand*{\LWR@maybenewtablerow}
+{%
+\ifbool{LWR@startedrow}%
+{}% started the row
+{% not started the row
+% \end{macrocode}
+% Remember that now have started the row:
+% \begin{macrocode}
+ \global\booltrue{LWR@startedrow}%
+% \end{macrocode}
+% Create the row tag, with a class if necessary.
+% \begin{macrocode}
+ \global\booltrue{LWR@intabularmetadata}%
+ \ifboolexpr{%
+ test{\ifnumcomp{\value{LWR@hlines}}{>}{0}} or%
+ test{\ifnumcomp{\value{LWR@hdashedlines}}{>}{0}}%
+ }%
+ {%
+ \LWR@htmltag{tr class="hline" }%
+ \LWR@orignewline%
+ }%
+ {% not doing hline
+ \ifbool{LWR@doingtbrule}%
+ {%
+ \ifdefvoid{\LWR@ruleHTMLcolor}{%
+ \LWR@htmltag{tr class="tbrule"}%
+ }{%
+ \LWR@htmltag{%
+ tr class="tbrule" % space
+ style="border-top: 1px solid % space
+ \LWR@origpound\LWR@ruleHTMLcolor "%
+ }%
+ }%
+ \LWR@orignewline%
+ }%
+ {\LWR@htmltag{tr}\LWR@orignewline}%
+ }% end of not doing hline
+}% end of not started the row
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Printing vertical bar tags}
+
+% \begin{macro}{\LWR@printbartag} \marg{index}
+%
+% Adds to a tabular data cell an \HTML\ class name for a left/right vertical bar.
+%
+% \changes{v0.41}{2017/10/07}{Added vertical rules.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@printbartag}[1]{%
+\LWR@traceinfo{LWR@printbartag !#1!}%
+\ifboolexpr{bool{LWR@tabularmutemods} or bool{LWR@emptyatbang}}%
+{}% muting or empty
+{% not muting
+ \edef\LWR@tempone{\LWR@getexparray{LWR@colbarspec}{#1}}%
+ \ifdefempty{\LWR@tempone}{}{ \LWR@tempone}%
+}% not muting
+\LWR@traceinfo{LWR@printbartag done}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Printing at or bang tags}
+
+% \begin{macro}{\LWR@printatbang} \marg{at -or- bang} \marg{index}
+%
+% \changes{v0.41}{2017/09/28}{Add: \cs{cmidrule} trims.}
+% \changes{v0.41}{2017/10/02}{Add: Mute at and bang columns for \cs{bottomrule}.}
+% \begin{macrocode}
+\newcommand*{\LWR@printatbang}[2]{%
+% \end{macrocode}
+% Fetch the column at or bang spec:
+% \begin{macrocode}
+\xdef\LWR@atbangspec{\LWR@getexparray{LWR@col#1spec}{#2}}%
+\LWR@traceinfo{atbang: #2 !\LWR@atbangspec!}%
+% \end{macrocode}
+% Only generate if is not empty;
+% \begin{macrocode}
+\ifdefempty{\LWR@atbangspec}%
+{}%
+{% not empty
+ \LWR@htmltag{%
+ td class="td#1%
+ \LWR@subaddcmidruletrim{}{}%
+ \LWR@printbartag{#2}%
+ "%
+ \LWR@tdstartstyles%
+ \LWR@addcmidrulewidth%
+ \LWR@addcdashline%
+ \LWR@addtabularrulecolors%
+ \LWR@tdendstyles%
+ }%
+% \end{macrocode}
+% Create an empty cell if muting for the \cs{bottomrule}:
+% \begin{macrocode}
+ \ifboolexpr{bool{LWR@tabularmutemods} or bool{LWR@emptyatbang}}%
+ {}%
+ {\LWR@atbangspec}%
+%
+ \LWR@htmltag{/td}\LWR@orignewline%
+ \global\booltrue{LWR@tabularcelladded}%
+}% not empty
+}%
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@addleftmostbartag}
+% \begin{macrocode}
+\newcommand*{\LWR@addleftmostbartag}{%
+\ifnumcomp{\value{LWR@tableLaTeXcolindex}}{=}{1}{%
+ \LWR@printbartag{leftedge}%
+}{}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@tabularleftedge}
+% \begin{macrocode}
+\newcommand*{\LWR@tabularleftedge}{%
+\ifnumcomp{\value{LWR@tableLaTeXcolindex}}{=}{1}%
+{%
+ \LWR@printatbang{at}{leftedge}%
+ \LWR@printatbang{bang}{leftedge}%
+}% left edge
+{}% not left edge
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \subsection{Data opening tag}
+
+
+% \begin{macro}{\LWR@thiscolspec} Temporary storage.
+% \begin{macrocode}
+\newcommand*{\LWR@thiscolspec}{}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@tabledatasinglecolumntag}
+% Print a table data opening tag with style for alignment and color.
+%
+% \changes{v0.33}{2017/06/22}{Fix: Macros in tabular could cause extra data cell.}
+% \changes{v0.41}{2017/09/28}{Add: \cs{cmidrule} trims.}
+% \changes{v0.41}{2017/10/02}{Add: Mute \progcode{\protect\textless} for \cs{bottomrule}.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@tabledatasinglecolumntag}%
+{%
+\LWR@traceinfo{LWR@tabledatasinglecolumntag}%
+\LWR@maybenewtablerow%
+% \end{macrocode}
+% Don't start a new paragraph tag if have already started one:
+% \begin{macrocode}
+\ifbool{LWR@intabularmetadata}%
+{%
+% \end{macrocode}
+% If have found the end of tabular command, do not create the next data cell:
+% \begin{macrocode}
+ \ifbool{LWR@exitingtabular}{}%
+ {% not exiting tabular
+% \end{macrocode}
+% Print the |@| and |!| contents before first column:
+% \begin{macrocode}
+ \LWR@tabularleftedge%
+% \end{macrocode}
+% Fetch the current column's alignment character into \cs{LWR@strresult}:
+% \changes{v0.60}{2018/09/17}{\env{tabular}: Improved memory management: Not using \pkg{xstring}.}
+% \begin{macrocode}
+ \xdef\LWR@strresult{%
+ \LWR@getexparray{LWR@tablecolspec}{\arabic{LWR@tableLaTeXcolindex}}%
+ }%
+% \end{macrocode}
+% print the start of a new table data cell:
+% \begin{macrocode}
+\LWR@traceinfo{LWR@tabledatasinglecolumntag: about to print td tag}%
+ \LWR@htmltag{td class="td%
+% \end{macrocode}
+% append this column's spec:
+% \begin{macrocode}
+ \LWR@strresult%
+% \end{macrocode}
+% If this column has a cmidrule, add ``rule'' to the end of the \HTML\ class tag.
+% Also add vertical bar tags.
+% \begin{macrocode}
+ \LWR@addcmidruletrim%
+ \LWR@addleftmostbartag%
+ \LWR@printbartag{\arabic{LWR@tableLaTeXcolindex}}%
+ "%
+% \end{macrocode}
+% Add styles for rules, alignment:
+% \changes{v0.42}{2017/10/26}{If \progcode{FormatWP} add cell alignment.}
+% \begin{macrocode}
+ \LWR@tdstartstyles%
+ \LWR@addcmidrulewidth%
+ \LWR@addcdashline%
+% \end{macrocode}
+% \changes{v0.60}{2018/09/17}{\env{tabular}: Improved memory management: Not using \pkg{xstring}.}
+% \begin{macrocode}
+ \xdef\LWR@thiscolspec{%
+ \LWR@getexparray{LWR@tablecolspec}{\arabic{LWR@tableLaTeXcolindex}}%
+ }%
+ \LWR@addformatwpalignment{\LWR@thiscolspec}%
+% \end{macrocode}
+% Add styles for cell and rule colors:
+% \changes{v0.48}{2018/02/08}{\pkg{colortbl}: Added.}
+% \begin{macrocode}
+ \LWR@addtabularrowcolor%
+ \LWR@addtabularrulecolors%
+% \end{macrocode}
+% \begin{macrocode}
+ \LWR@tdendstyles%
+ }% HTML td
+ \LWR@traceinfo{LWR@tabledatasinglecolumntag: done printing td tag}%
+% \end{macrocode}
+% If this is a |p|, |m|, |b|, or X column, allow paragraphs:
+% \begin{macrocode}
+ \ifboolexpr{%
+ test{ \ifdefstring{\LWR@strresult}{p} } or
+ test{ \ifdefstring{\LWR@strresult}{m} } or
+ test{ \ifdefstring{\LWR@strresult}{b} } or
+ test{ \ifdefstring{\LWR@strresult}{P} } or
+ test{ \ifdefstring{\LWR@strresult}{M} } or
+ test{ \ifdefstring{\LWR@strresult}{B} } or
+ test{ \ifdefstring{\LWR@strresult}{X} }
+ }%
+ {% allow pars
+ \LWR@traceinfo{LWR@tabledatasinglecolumntag: about to LWR@startpars}%
+ \global\booltrue{LWR@tableparcell}%
+ \LWR@startpars%
+ \LWR@traceinfo{LWR@tabledatasinglecolumntag: done with LWR@startpars}%
+ }% allow pars
+ {}% no pars
+% \end{macrocode}
+% Print the |>| contents unless muted for the \cs{bottomrule}:
+% \begin{macrocode}
+ \ifboolexpr{bool{LWR@tabularmutemods} or bool{LWR@emptyatbang}}%
+ {}%
+ {%
+ \LWR@getexparray{LWR@colbeforespec}{\arabic{LWR@tableLaTeXcolindex}}%
+ }%
+ \global\boolfalse{LWR@intabularmetadata}%
+ }% not exiting tabular
+}{}% in tabular metadata
+\LWR@traceinfo{LWR@tabledatasinglecolumntag: done}%
+}%
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Midrules}
+%
+% \DescribeObject{LWR@midrules}|LWR@midrules| is a data array
+% (\cref{sec:dataarray}) of columns each containing a non-zero width
+% if a midrule should be created for this column.
+
+% \DescribeObject{LWR@trimlrules}|LWR@trimlrules| is a data array
+% (\cref{sec:dataarray}) of columns containing
+% |l| if a midrule should be left trimmed for each column.
+
+% \DescribeObject{LWR@trimrrules}|LWR@trimrrules| is a data array
+% (\cref{sec:dataarray}) of columns containing
+% |r| if a midrule should be right trimmed for each column.
+
+% \DescribeObject{LWR@cdashlines}|LWR@cdashlines| is a data array
+% (\cref{sec:dataarray}) of columns each containing a |Y|
+% if an \pkg{arydshln} package "cdashed line" should be
+% created for this column.
+
+
+
+% \DescribeCounter{LWR@midrulecounter}
+% Indexes across the |LWR@midrules| and |LWR@trim<l/r>rules| data arrays.
+% \begin{macrocode}
+\newcounter{LWR@midrulecounter}
+% \end{macrocode}
+
+
+
+% \DescribeLength{\LWR@heavyrulewidth}
+% The default width of the rule.
+% \begin{macrocode}
+\newlength{\LWR@heavyrulewidth}
+\setlength{\LWR@heavyrulewidth}{.08em}
+% \end{macrocode}
+
+
+% \DescribeLength{\LWR@lightrulewidth}
+% The default width of the rule.
+% \begin{macrocode}
+\newlength{\LWR@lightrulewidth}
+\setlength{\LWR@lightrulewidth}{.05em}
+% \end{macrocode}
+
+
+% \DescribeLength{\LWR@cmidrulewidth}
+% The default width of the rule.
+% \begin{macrocode}
+\newlength{\LWR@cmidrulewidth}
+\setlength{\LWR@cmidrulewidth}{.03em}
+% \end{macrocode}
+
+
+% \DescribeLength{\LWR@thiscmidrulewidth}
+% The width of the next rule, defaulting to \cs{LWR@cmidrulewidth}.
+%
+% If not \cs{LWR@cmidrulewidth}, a style will be used to generate
+% the custom width.
+%
+% Assigned from the |LWR@midrules| array.
+% \begin{macrocode}
+\newlength{\LWR@thiscmidrulewidth}
+\setlength{\LWR@thiscmidrulewidth}{\LWR@cmidrulewidth}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@clearmidrules}
+% Start new midrules. Called at beginning of tabular and also at |\\|.
+%
+% Clears all |LWR@midrules| and |LWR@trimrules| markers for this line.
+%
+% \changes{v0.41}{2017/09/28}{Add: \cs{cmidrule} trims.}
+% \changes{v0.60}{2018/09/17}{\env{tabular}: Fix for midrules.}
+% \begin{macrocode}
+\newcommand*{\LWR@clearmidrules}
+{%
+\setcounter{LWR@midrulecounter}{1}%
+\whileboolexpr{%
+ not test{%
+ \ifnumcomp{\value{LWR@midrulecounter}}{>}%
+ {\value{LWR@tabletotalLaTeXcols}}%
+ }%
+}%
+{%
+ \LWR@setexparray{LWR@midrules}{\arabic{LWR@midrulecounter}}{0pt}%
+ \setlength{\LWR@thiscmidrulewidth}{\LWR@cmidrulewidth}%
+ \LWR@setexparray{LWR@trimlrules}{\arabic{LWR@midrulecounter}}{}%
+ \LWR@setexparray{LWR@trimrrules}{\arabic{LWR@midrulecounter}}{}%
+ \LWR@setexparray{LWR@cdashlines}{\arabic{LWR@midrulecounter}}{N}%
+ \addtocounter{LWR@midrulecounter}{1}%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@subcmidrule} \marg{width} \marg{trim} \marg{leftcolumn} \marg{rightcolumn}
+%
+% Marks |LWR@midrules| data array elements to be
+% non-zero widths from left to right columns.
+% Also marks trimming for the L and/or R columns.
+%
+% |LWR@doingcmidrule| is set to force an empty row at the end of the tabular
+% to create the rule.
+%
+% \changes{v0.41}{2017/09/28}{Add: \cs{cmidrule} trims.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@subcmidrule}[4]{%
+\setcounter{LWR@midrulecounter}{#3}%
+\whileboolexpr{%
+ not test {%
+ \ifnumcomp{\value{LWR@midrulecounter}}{>}{#4}%
+ }%
+}%
+{%
+ \LWR@setexparray{LWR@midrules}{\arabic{LWR@midrulecounter}}{#1}%
+ \addtocounter{LWR@midrulecounter}{1}%
+}% whiledo
+\IfSubStr{#2}{l}{\LWR@setexparray{LWR@trimlrules}{#3}{l}}{}%
+\IfSubStr{#2}{r}{\LWR@setexparray{LWR@trimrrules}{#4}{r}}{}%
+\global\booltrue{LWR@doingcmidrule}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@docmidrule} \oarg{width} \parg{trim} \marg{leftcolumn-rightcolumn}
+%
+% Marks |LWR@midrules| array elements to be a non-zero width from left to right columns.
+% Also marks trimming for the L and/or R columns.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@docmidrule}
+ {O{\LWR@cmidrulewidth} D(){} >{\SplitArgument{1}{-}}m}
+ {\LWR@subcmidrule{#1}{#2}#3}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \begin{macro}{\LWR@subcdashline} \marg{leftcolumn} \marg{rightcolumn}
+%
+% Marks |LWR@cdashlines| data array elements to be |Y| from
+% left to right columns.
+%
+% |LWR@doingcmidrule| is set to force an empty row at the end of the tabular
+% to create the rule.
+%
+% \begin{macrocode}
+\newcommand*{\LWR@subcdashline}[2]{%
+\setcounter{LWR@midrulecounter}{#1}%
+\whileboolexpr{%
+ not test {%
+ \ifnumcomp{\value{LWR@midrulecounter}}{>}{#2}%
+ }%
+}%
+{%
+ \LWR@setexparray{LWR@cdashlines}{\arabic{LWR@midrulecounter}}{Y}%
+ \addtocounter{LWR@midrulecounter}{1}%
+}% whiledo
+\global\booltrue{LWR@doingcmidrule}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@docdashline} \marg{leftcolumn-rightcolumn}
+%
+% Marks |LWR@cdashlines| data array elements to be |Y| from
+% left to right columns.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@docdashline}
+ {>{\SplitArgument{1}{-}}m}%
+ {%
+ \LWR@subcdashline#1%
+ }
+% \end{macrocode}
+% \end{macro}
+
+
+
+% Used to compute margins, tabular trims, column offsets:
+% \begin{macrocode}
+\newlength{\LWR@templengthone}
+\newlength{\LWR@templengthtwo}
+\newlength{\LWR@templengththree}
+\newcounter{LWR@tempcountone}
+% \end{macrocode}
+
+
+% Used to add a style to a table data cell:
+% \begin{macrocode}
+\newbool{LWR@tdhavecellstyle}
+% \end{macrocode}
+
+% \begin{macro}{\LWR@tdstartstyles}
+% Begins possibly adding a table data cell style.
+% \begin{macrocode}
+\newcommand*{\LWR@tdstartstyles}{\global\boolfalse{LWR@tdhavecellstyle}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@tdaddstyle}
+% Starts adding a table data cell style.
+% \begin{macrocode}
+\newcommand*{\LWR@tdaddstyle}{%
+\ifbool{LWR@tdhavecellstyle}%
+{; }%
+{ style="}%
+\booltrue{LWR@tdhavecellstyle}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@tdendstyles}
+% Finishes possibly adding a table data cell style.
+% Prints the closing quote.
+% \begin{macrocode}
+\newcommand*{\LWR@tdendstyles}{%
+\ifbool{LWR@tdhavecellstyle}{%
+ "%
+ \global\boolfalse{LWR@tdhavecellstyle}%
+}{}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@subaddcmidruletrim} \marg{lefttrim} \marg{righttrim}
+% Adds a \cs{cmidrule} with optional trim.
+%
+% \changes{v0.41}{2017/10/05}{Added.}
+% \changes{v0.42}{2017/10/19}{0pt if no rule given.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@subaddcmidruletrim}[2]{%
+\setlength{\LWR@templengthone}{%
+ \LWR@getexparray{LWR@midrules}{\arabic{LWR@tableLaTeXcolindex}}%
+}%
+\ifdimcomp{\LWR@templengthone}{>}{0pt}%
+{%
+% \end{macrocode}
+% Print the class with left and right trim letters appended:
+% \begin{macrocode}
+ \LWR@origtilde tdrule#1#2%
+% \end{macrocode}
+% Remember the width of the rule:
+% \begin{macrocode}
+ \setlength{\LWR@thiscmidrulewidth}{\LWR@templengthone}%
+}%
+{%
+ \setlength{\LWR@thiscmidrulewidth}{0pt}%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@addcmidruletrim}
+% Adds left or right trim to a \cs{cmidrule}.
+%
+% \changes{v0.41}{2017/09/28}{Add: \cs{cmidrule} trims.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@addcmidruletrim}{%
+\LWR@subaddcmidruletrim%
+{\LWR@getexparray{LWR@trimlrules}{\arabic{LWR@tableLaTeXcolindex}}}%
+{\LWR@getexparray{LWR@trimrrules}{\arabic{LWR@tableLaTeXcolindex}}}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@addrulewidth} \marg{thiswidth} \marg{defaultwidth}
+%
+% If not default width, add a custom style with width and color
+% depending on |thiswidth|.
+%
+% Must be placed between \cs{LWR@tdstartstyles} and \cs{LWR@tdendstyles}.
+%
+% \changes{v0.42}{2017/10/10}{If \progcode{FormatWP} force explicit border.}
+%
+% \begin{macrocode}
+\newcommand{\LWR@addrulewidth}[2]{%
+% \end{macrocode}
+% Only add a custom width if |thiswidth| is different than the |defaultwidth|,
+% or if a color is being used:
+% \begin{macrocode}
+\ifboolexpr{%
+ test{\ifdimcomp{#1}{=}{0pt}} or
+ (
+ ( test{\ifdimcomp{#1}{=}{#2}} and not bool{FormatWP} )
+ and ( test {\ifdefvoid{\LWR@ruleHTMLcolor}} )
+ )
+}%
+{}% default width and color
+{% custom width and/or color
+% \end{macrocode}
+% Ensure that the width is wide enough to display in the browser:
+% \begin{macrocode}
+ \LWR@forceminwidth{#1}%
+% \end{macrocode}
+% Begin adding another style:
+% \begin{macrocode}
+ \LWR@tdaddstyle%
+% \end{macrocode}
+% The style itself:
+% \begin{macrocode}
+ border-top:\LWR@printlength{\LWR@atleastonept} solid %
+% \end{macrocode}
+% If default gray, the darkness of the color depends on the thickness of the rule:
+% \begin{macrocode}
+ \ifdefvoid{\LWR@ruleHTMLcolor}{%
+ \ifdimcomp{#1}{<}{\LWR@lightrulewidth}%
+ {\LWR@origpound{}A0A0A0}%
+ {% lightrule or heaver
+ \ifdimcomp{#1}{<}{\LWR@heavyrulewidth}%
+ {\LWR@origpound{}808080}%
+ {black}%
+ }% lightrule or heavier
+ }{%
+ \LWR@origpound\LWR@ruleHTMLcolor%
+ }
+}% custom width and/or color
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@addcmidrulewidth}
+% Adds a \attribute{style} for the rule width.
+%
+% Must be placed between \cs{LWR@tdstartstyles} and \cs{LWR@tdendstyles}.
+% \begin{macrocode}
+\newcommand{\LWR@addcmidrulewidth}{%
+\LWR@addrulewidth{\LWR@thiscmidrulewidth}{\LWR@cmidrulewidth}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@addcdashline}
+%
+% Must be placed between \cs{LWR@tdstartstyles} and \cs{LWR@tdendstyles}.
+%
+% \changes{v0.56}{2018/05/04}{\pkg{arydshln}: Added.}
+% \begin{macrocode}
+\newcommand{\LWR@addcdashline}{%
+\edef\LWR@tempone{%
+ \LWR@getexparray{LWR@cdashlines}{\arabic{LWR@tableLaTeXcolindex}}%
+}%
+\ifdefstring{\LWR@tempone}{Y}{%
+ \LWR@tdaddstyle%
+ border-top: 1pt dashed %
+ \ifdefvoid{\LWR@ruleHTMLcolor}%
+ {black}%
+ {\LWR@origpound\LWR@ruleHTMLcolor}%
+}{}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@WPcell} \marg{text-align} \marg{vertical-align}
+% \changes{v0.47}{2018/01/26}{Fix: Line wrap at \HTML\ hyphen.}
+% \begin{macrocode}
+\newcommand*{\LWR@WPcell}[2]{%
+\LWR@tdaddstyle%
+\LWR@print@mbox{text-align:#1}; \LWR@print@mbox{vertical-align:#2}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@addformatwpalignment}
+% If |FormatWP|, adds a \attribute{style} for the alignment.
+%
+% Must be placed between \cs{LWR@tdstartstyles} and \cs{LWR@tdendstyles}.
+%
+% \changes{v0.42}{2017/10/26}{If \progcode{FormatWP} add explicit style
+% for cell alignment.}
+% \changes{v0.44}{2017/11/08}{Fix for multicolumn alignment if \progcode{FormatWP}.}
+% \begin{macrocode}
+\newcommand*{\LWR@addformatwpalignment}[1]{%
+\ifbool{FormatWP}{%
+\IfSubStr{#1}{l}{\LWR@WPcell{left}{middle}}{}%
+\IfSubStr{#1}{c}{\LWR@WPcell{center}{middle}}{}%
+\IfSubStr{#1}{r}{\LWR@WPcell{right}{middle}}{}%
+\IfSubStr{#1}{p}{\LWR@WPcell{left}{bottom}}{}%
+\IfSubStr{#1}{m}{\LWR@WPcell{left}{middle}}{}%
+\IfSubStr{#1}{b}{\LWR@WPcell{left}{top}}{}%
+\IfSubStr{#1}{P}{\LWR@WPcell{center}{bottom}}{}%
+\IfSubStr{#1}{M}{\LWR@WPcell{center}{middle}}{}%
+\IfSubStr{#1}{B}{\LWR@WPcell{center}{top}}{}%
+}{}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Cell colors}
+
+% \changes{v0.48}{2018/02/06}{\pkg{colortbl}: Added.}
+%
+% \begin{macro}{\LWR@addtabularrowcolor} Adds a cell's row color style, if needed.
+%
+% No color is added for the final row of empty cells which finishes each \env{tabular}.
+%
+% \begin{macrocode}
+\newcommand*{\LWR@addtabularrowcolor}{%
+\ifbool{LWR@tabularmutemods}{}{%
+ \ifdefvoid{\LWR@rowHTMLcolor}{%
+ \ifdefvoid{\LWR@xcolorrowHTMLcolor}{}%
+ {% xcolor row color
+ \LWR@tdaddstyle%
+ background:\LWR@origpound\LWR@xcolorrowHTMLcolor%
+ }%
+ }%
+ {% explicit row color
+ \LWR@tdaddstyle%
+ background:\LWR@origpound\LWR@rowHTMLcolor%
+ }%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+%
+% \begin{macro}{\LWR@addtabularhrulecolor} Adds a cell's horizontal rule color style, if needed.
+% \changes{v0.48}{2018/02/08}{\pkg{colortbl}: Added.}
+% \changes{v0.56}{2018/04/30}{Adds support for double \cs{hline}s and \cs{midrule}s.}
+% \changes{v0.56}{2018/05/02}{Adds support for \pkg{arydshln} dashed rules.}
+% \begin{macrocode}
+\newcommand*{\LWR@addtabularhrulecolor}{%
+% \end{macrocode}
+% If either form of horizontal rule is requested:
+% \begin{macrocode}
+\ifboolexpr{%
+ test{\ifnumcomp{\value{LWR@hlines}}{>}{0}} or%
+ test{\ifnumcomp{\value{LWR@hdashedlines}}{>}{0}} or%
+ bool{LWR@doingtbrule}%
+}{%
+% \end{macrocode}
+% If there is a no custom color:
+% \begin{macrocode}
+ \ifdefvoid{\LWR@ruleHTMLcolor}%
+ {%
+ \ifnumcomp{\value{LWR@hlines}}{>}{1}%
+ {%
+ \LWR@tdaddstyle%
+ border-top: 4px double%
+ }{% else
+ \ifnumcomp{\value{LWR@hdashedlines}}{>}{1}%
+ {%
+ \LWR@tdaddstyle%
+ border-top: 2px dashed%
+ }{% else
+ \ifnumcomp{\value{LWR@hdashedlines}}{=}{1}%
+ {%
+ \LWR@tdaddstyle%
+ border-top: 1px dashed%
+ }{}}}%
+% \end{macrocode}
+% If no color and not doubled or dashed, then add nothing, since
+% a simpler rule is the default.
+% \begin{macrocode}
+ }%
+% \end{macrocode}
+% If there is a custom color:
+% \begin{macrocode}
+ {%
+ \ifnumcomp{\value{LWR@hlines}}{>}{1}%
+ {%
+ \LWR@tdaddstyle%
+ border-top: 4px double \LWR@origpound\LWR@ruleHTMLcolor%
+ }{% else
+ \ifnumcomp{\value{LWR@hdashedlines}}{>}{1}%
+ {%
+ \LWR@tdaddstyle%
+ border-top: 2px dashed \LWR@origpound\LWR@ruleHTMLcolor%
+ }{% else
+ \ifnumcomp{\value{LWR@hdashedlines}}{=}{1}%
+ {%
+ \LWR@tdaddstyle%
+ border-top: 1px dashed \LWR@origpound\LWR@ruleHTMLcolor%
+ }{% else
+ \LWR@tdaddstyle%
+ border-top: 1px solid \LWR@origpound\LWR@ruleHTMLcolor%
+ }}}%
+ }%
+}{}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+%
+% \begin{macro}{\LWR@addtabularrulecolors} Adds a cell's rule color styles, if needed.
+% \changes{v0.48}{2018/02/08}{\pkg{colortbl}: Added.}
+% \changes{v0.56}{2018/04/30}{Adds support for double vertical rules.}
+% \changes{v0.56}{2018/05/05}{Adds support for dashed vertical rules.}
+%
+% No color is added for the final row of empty cells which finishes each \env{tabular}.
+%
+% \begin{macrocode}
+\newcommand*{\LWR@addtabularrulecolors}{%
+% \end{macrocode}
+% Custom horizonal rule color:
+% \begin{macrocode}
+\LWR@addtabularhrulecolor%
+% \end{macrocode}
+% No vertical rules if finishing the \env{tabular} with a row of empty cells:
+% \begin{macrocode}
+\ifbool{LWR@tabularmutemods}{}{%
+% \end{macrocode}
+% If at the leftmost cell, possibly add a leftmost vertical rule:
+% \begin{macrocode}
+ \ifnumequal{\value{LWR@tableLaTeXcolindex}}{1}{%
+% \end{macrocode}
+% Fetch the left edge's vertical bar specification:
+% \begin{macrocode}
+ \edef\LWR@tempone{\LWR@getexparray{LWR@colbarspec}{leftedge}}%
+% \end{macrocode}
+% Add a custom style if a vertical bar was requested:
+% \begin{macrocode}
+ \ifdefstring{\LWR@tempone}{tvertbarl}{%
+ \LWR@tdaddstyle%
+ border-left: 1px solid % space
+ \LWR@vertruleHTMLcolor%
+ }{}%
+ \ifdefstring{\LWR@tempone}{tvertbarldouble}{%
+ \LWR@tdaddstyle%
+ border-left: 4px double % space
+ \LWR@vertruleHTMLcolor%
+ }{}%
+ \ifdefstring{\LWR@tempone}{tvertbarldash}{%
+ \LWR@tdaddstyle%
+ border-left: 1px dashed % space
+ \LWR@vertruleHTMLcolor%
+ }{}%
+ \ifdefstring{\LWR@tempone}{tvertbarldoubledash}{%
+ \LWR@tdaddstyle%
+ border-left: 2px dashed % space
+ \LWR@vertruleHTMLcolor%
+ }{}%
+ }{}%
+% \end{macrocode}
+% Possibly add a right vertical rule for this cell:
+% \begin{macrocode}
+ \edef\LWR@tempone{%
+ \LWR@getexparray{LWR@colbarspec}{\arabic{LWR@tableLaTeXcolindex}}%
+ }%
+ \ifdefstring{\LWR@tempone}{tvertbarr}{%
+% \end{macrocode}
+% Add a custom style if a vertical bar was requested:
+% \begin{macrocode}
+ \LWR@tdaddstyle%
+ border-right: 1px solid \LWR@vertruleHTMLcolor%
+ }{}%
+ \ifdefstring{\LWR@tempone}{tvertbarrdouble}{%
+ \LWR@tdaddstyle%
+ border-right: 4px double \LWR@vertruleHTMLcolor%
+ }{}%
+ \ifdefstring{\LWR@tempone}{tvertbarrdash}{%
+ \LWR@tdaddstyle%
+ border-right: 1px dashed \LWR@vertruleHTMLcolor%
+ }{}%
+ \ifdefstring{\LWR@tempone}{tvertbarrdoubledash}{%
+ \LWR@tdaddstyle%
+ border-right: 2px dashed \LWR@vertruleHTMLcolor%
+ }{}%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \DescribeCounter{LWR@cellcolordepth}
+% Counts how many cell color \element{div}s were added to the current tabular data cell.
+% \begin{macrocode}
+\newcounter{LWR@cellcolordepth}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@subaddtabularcellcolor} \marg{\HTML\ color}
+% \begin{macrocode}
+\newcommand*{\LWR@subaddtabularcellcolor}[1]{%
+\LWR@htmltag{div class="cellcolor" style="%
+ background:\LWR@origpound{}{}#1 %
+" }%
+\addtocounter{LWR@cellcolordepth}{1}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@addtabularcellcolor} Adds a cell color style, if needed.
+% \changes{v0.49}{2018/02/18}{\pkg{xcolor}: Added tabular row colors.}
+% \begin{macrocode}
+\newcommand*{\LWR@addtabularcellcolor}{%
+\ifdefvoid{\LWR@cellHTMLcolor}%
+{%
+ \ifdefvoid{\LWR@rowHTMLcolor}%
+ {%
+ \ifdefvoid{\LWR@xcolorrowHTMLcolor}%
+ {%
+ \ifdefvoid{\LWR@columnHTMLcolor}%
+ {}%
+ {\LWR@subaddtabularcellcolor{\LWR@columnHTMLcolor}}%
+ }%
+ {\LWR@subaddtabularcellcolor{\LWR@xcolorrowHTMLcolor}}%
+ }%
+ {\LWR@subaddtabularcellcolor{\LWR@rowHTMLcolor}}%
+}%
+{\LWR@subaddtabularcellcolor{\LWR@cellHTMLcolor}}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Multicolumns}
+
+% \subsubsection{Parsing multicolumns}
+
+% \begin{macrocode}
+\newcounter{LWR@tablemulticolswidth}
+% \end{macrocode}
+%
+% Indexes into the multicolumn specification:
+% \begin{macrocode}
+\newcounter{LWR@tablemulticolspos}
+% \end{macrocode}
+
+% Remembers multicolumn vertical rules if found in the column spec.
+% \begin{macrocode}
+\newcounter{LWR@mcolvertbarsl}
+\newcounter{LWR@mcolvertbarsr}
+\newcounter{LWR@mcolvertbarsldash}
+\newcounter{LWR@mcolvertbarsrdash}
+\newbool{LWR@mcolvertbaronleft}%
+% \end{macrocode}
+
+% \begin{macro}{\LWR@printmccoltype} \marg{colspec}
+% Print any valid column type found. Does not print |@|, |!|, |>|, or |<| columns
+% or their associated tokens.
+%
+% This is printed as part of the table data tag's |class|.
+% \begin{macrocode}
+\newcommand*{\LWR@printmccoltype}[1]{%
+\LWR@traceinfo{lwr@printmccoltype -#1-}%
+% \end{macrocode}
+% Get one token of the column spec:
+% \begin{macrocode}
+\StrChar{#1}{\arabic{LWR@tablemulticolspos}}[\LWR@strresult]%
+% \end{macrocode}
+% Add to the \HTML\ tag depending on which column type is found:
+% \begin{macrocode}
+\IfStrEq{\LWR@strresult}{l}{l}{}%
+\IfStrEq{\LWR@strresult}{c}{c}{}%
+\IfStrEq{\LWR@strresult}{r}{r}{}%
+\IfStrEq{\LWR@strresult}{p}{p}{}%
+\IfStrEq{\LWR@strresult}{m}{m}{}%
+\IfStrEq{\LWR@strresult}{b}{b}{}%
+\IfStrEq{\LWR@strresult}{P}{P}{}%
+\IfStrEq{\LWR@strresult}{M}{M}{}%
+\IfStrEq{\LWR@strresult}{B}{B}{}%
+% \end{macrocode}
+% \changes{v0.56}{2018/05/10}{Added \pkg{array} \texttt{W} column.}
+% \begin{macrocode}
+\IfStrEq{\LWR@strresult}{w}{w}{}%
+\IfStrEq{\LWR@strresult}{W}{W}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\IfStrEq{\LWR@strresult}{S}{c}{}%
+\IfStrEq{\LWR@strresult}{s}{c}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\IfStrEq{\LWR@strresult}{X}{p}{}%
+% \end{macrocode}
+% \changes{v0.43}{2017/11/07}{Added vertical rules.}
+% \changes{v0.56}{2018/04/30}{Adds support for double vertical rules.}
+% \changes{v0.56}{2018/05/05}{Adds support for dashed vertical rules.}
+% \begin{macrocode}
+\IfStrEq{\LWR@strresult}{|}%
+{%
+ \ifbool{LWR@mcolvertbaronleft}%
+ {\addtocounter{LWR@mcolvertbarsl}{1}}% left edge
+ {\addtocounter{LWR@mcolvertbarsr}{1}}% not left edge
+}%
+{%
+ \IfStrEq{\LWR@strresult}{:}%
+ {%
+ \ifbool{LWR@mcolvertbaronleft}%
+ {\addtocounter{LWR@mcolvertbarsldash}{1}}% left edge
+ {\addtocounter{LWR@mcolvertbarsrdash}{1}}% not left edge
+ }%
+ {%
+ \IfStrEq{\LWR@strresult}{;}%
+ {%
+ \ifbool{LWR@mcolvertbaronleft}%
+ {\addtocounter{LWR@mcolvertbarsldash}{1}}% left edge
+ {\addtocounter{LWR@mcolvertbarsrdash}{1}}% not left edge
+ }%
+ {\boolfalse{LWR@mcolvertbaronleft}}%
+ }%
+}%
+\LWR@traceinfo{lwr@printmccoltype done}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@multicolpartext} \marg{num parameters}
+% Print the data with paragraph tags, advance to bypass the given number of parameters.
+% \changes{v0.56}{2018/05/12}{Fix: \cs{multicolumn} parameters.}
+% \begin{macrocode}
+\newcommand*{\LWR@multicolpartext}[1]{%
+\LWR@startpars%
+\LWR@multicoltext%
+\addtocounter{LWR@tablemulticolspos}{#1}%
+\LWR@stoppars%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@multicolother} \marg{colspec}
+% For |@|, |!|, |>|, |<|, print the next token without paragraph tags:
+% \begin{macrocode}
+\newcommand*{\LWR@multicolother}[1]{%
+\addtocounter{LWR@tablemulticolspos}{1}%
+\StrChar{#1}{\arabic{LWR@tablemulticolspos}}[\LWR@strresult]%
+\LWR@strresult%
+% \end{macrocode}
+% A valid column data type was found:
+% \begin{macrocode}
+\global\booltrue{LWR@validtablecol}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@multicolskip}
+% Nothing to print for this column type.
+% \begin{macrocode}
+\newcommand*{\LWR@multicolskip}{%
+% \end{macrocode}
+% A valid column data type was found:
+% \begin{macrocode}
+\global\booltrue{LWR@validtablecol}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@printmccoldata} \marg{colspec}
+% Print the data for any valid column type found.
+%
+% \changes{v0.22}{2017/02/28}{Added tabular \progcode{D}, \progcode{!!},
+% and \progcode{X} columns.}
+%
+% \changes{v0.23}{2017/03/02}{Fix for vert bar column type.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@printmccoldata}[1]{%
+\LWR@traceinfo{lwr@printmccoldata -#1}%
+% \end{macrocode}
+% Not yet found a valid column type:
+% \begin{macrocode}
+\global\boolfalse{LWR@validtablecol}%
+% \end{macrocode}
+% Get one token of the column spec:
+% \begin{macrocode}
+\StrChar{#1}{\arabic{LWR@tablemulticolspos}}[\LWR@strresult]%
+% \end{macrocode}
+% Print the text depending on which column type is found.
+% Also handles |@|, |>|, |<| as it comes to them.
+% \begin{macrocode}
+\IfStrEq{\LWR@strresult}{l}{\LWR@multicoltext}{}%
+\IfStrEq{\LWR@strresult}{c}{\LWR@multicoltext}{}%
+\IfStrEq{\LWR@strresult}{r}{\LWR@multicoltext}{}%
+\IfStrEq{\LWR@strresult}{D}{%
+\addtocounter{LWR@tablemulticolspos}{3}% skip parameters
+\LWR@multicoltext%
+}{}%
+% \end{macrocode}
+% \changes{v0.56}{2018/05/12}{Fix: \cs{multicolumn} parameters.}
+% \changes{v0.72}{2019/06/07}{Fix: \cs{multicolumn} parameters.}
+% \begin{macrocode}
+\IfStrEq{\LWR@strresult}{p}{\LWR@multicolpartext{2}}{}%
+\IfStrEq{\LWR@strresult}{m}{\LWR@multicolpartext{2}}{}%
+\IfStrEq{\LWR@strresult}{b}{\LWR@multicolpartext{2}}{}%
+\IfStrEq{\LWR@strresult}{P}{\LWR@multicolpartext{2}}{}%
+\IfStrEq{\LWR@strresult}{M}{\LWR@multicolpartext{2}}{}%
+\IfStrEq{\LWR@strresult}{B}{\LWR@multicolpartext{2}}{}%
+% \end{macrocode}
+% \changes{v0.56}{2018/05/10}{Added \pkg{array} \texttt{W} column.}
+% \begin{macrocode}
+\IfStrEq{\LWR@strresult}{w}{\LWR@multicolpartext{3}}{}%
+\IfStrEq{\LWR@strresult}{W}{\LWR@multicolpartext{3}}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\IfStrEq{\LWR@strresult}{S}{\LWR@multicoltext}{}%
+\IfStrEq{\LWR@strresult}{s}{\LWR@multicoltext}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\IfStrEq{\LWR@strresult}{X}{\LWR@multicolpartext{1}}{}%
+\IfStrEq{\LWR@strresult}{|}{\LWR@multicolskip}{}%
+\IfStrEq{\LWR@strresult}{:}{\LWR@multicolskip}{}%
+\IfStrEq{\LWR@strresult}{;}{%
+ \LWR@multicolskip%
+ \addtocounter{LWR@tablemulticolspos}{1}% skip parameter
+}{}%
+\IfStrEq{\LWR@strresult}{\detokenize{@}}{\LWR@multicolother{#1}}{}%
+\IfStrEq{\LWR@strresult}{\detokenize{!}}{\LWR@multicolother{#1}}{}%
+\IfStrEq{\LWR@strresult}{\detokenize{>}}{\LWR@multicolother{#1}}{}%
+\IfStrEq{\LWR@strresult}{\detokenize{<}}{\LWR@multicolother{#1}}{}%
+% \end{macrocode}
+% If an invalid column type:
+% \begin{macrocode}
+\ifbool{LWR@validtablecol}{}{\LWR@multicoltext}%
+% \end{macrocode}
+% Tracing:
+% \begin{macrocode}
+\LWR@traceinfo{lwr@printmccoldata done}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+
+% \begin{macro}{\parsemulticolumnalignment}
+% \marg{1: colspec} \marg{2: printresults}
+%
+% Scan the multicolumn specification and execute the printfunction
+% for each entry.
+%
+% Note that the spec for a |p{spec}| column, or |@|, |>|, |<|, is a token list
+% which will NOT match |l|, |c|, |r|, or |p|.
+% \begin{macrocode}
+\newcommand*{\LWR@parsemulticolumnalignment}[2]{%
+\setcounter{LWR@tablemulticolspos}{1}%
+\StrLen{#1}[\LWR@strresult]%
+\setcounter{LWR@tablemulticolswidth}{\LWR@strresult}%
+% \end{macrocode}
+% Scan across the tokens in the column spec:
+% \begin{macrocode}
+\whileboolexpr{%
+ not test {%
+ \ifnumcomp{\value{LWR@tablemulticolspos}}{>}%
+ {\value{LWR@tablemulticolswidth}}%
+ }%
+}%
+{%
+% \end{macrocode}
+% Execute the assigned print function for each token in the column spec:
+% \begin{macrocode}
+#2{#1}%
+% \end{macrocode}
+% Move to the next token in the column spec:
+% \begin{macrocode}
+\addtocounter{LWR@tablemulticolspos}{1}%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \subsubsection{Multicolumn factored code}
+
+% \begin{macro}{\LWR@addmulticolvertrulecolor}
+% \changes{v0.56}{2018/04/30}{Adds support for double vertical rules.}
+% \changes{v0.56}{2018/05/05}{Adds support for dashed vertical rules.}
+% \begin{macrocode}
+\newcommand*{\LWR@addmulticolvertrulecolor}{%
+% \end{macrocode}
+% No vertical rules if finishing the \env{tabular} with a row of empty cells:
+% \begin{macrocode}
+\ifbool{LWR@tabularmutemods}{}{%
+% \end{macrocode}
+% Left side:
+% \begin{macrocode}
+ \ifnumcomp{\value{LWR@mcolvertbarsl}}{=}{1}{%
+ \LWR@tdaddstyle%
+ border-left: 1px solid \LWR@vertruleHTMLcolor%
+ }{}%
+ \ifnumcomp{\value{LWR@mcolvertbarsl}}{>}{1}{%
+ \LWR@tdaddstyle%
+ border-left: 4px double \LWR@vertruleHTMLcolor%
+ }{}%
+ \ifnumcomp{\value{LWR@mcolvertbarsldash}}{=}{1}{%
+ \LWR@tdaddstyle%
+ border-left: 1px dashed \LWR@vertruleHTMLcolor%
+ }{}%
+ \ifnumcomp{\value{LWR@mcolvertbarsldash}}{>}{1}{%
+ \LWR@tdaddstyle%
+ border-left: 2px dashed \LWR@vertruleHTMLcolor%
+ }{}%
+% \end{macrocode}
+% Right side:
+% \begin{macrocode}
+ \ifnumcomp{\value{LWR@mcolvertbarsr}}{=}{1}{%
+ \LWR@tdaddstyle%
+ border-right: 1px solid \LWR@vertruleHTMLcolor%
+ }{}%
+ \ifnumcomp{\value{LWR@mcolvertbarsr}}{>}{1}{%
+ \LWR@tdaddstyle%
+ border-right: 4px double \LWR@vertruleHTMLcolor%
+ }{}%
+ \ifnumcomp{\value{LWR@mcolvertbarsrdash}}{=}{1}{%
+ \LWR@tdaddstyle%
+ border-right: 1px dashed \LWR@vertruleHTMLcolor%
+ }{}%
+ \ifnumcomp{\value{LWR@mcolvertbarsrdash}}{>}{1}{%
+ \LWR@tdaddstyle%
+ border-right: 2px dashed \LWR@vertruleHTMLcolor%
+ }{}%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macrocode}
+\newcommand{\LWR@multicoltext}{}
+% \end{macrocode}
+
+% To find multicolumn right trim:
+% \begin{macrocode}
+\newcounter{LWR@lastmulticolumn}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@domulticolumn}
+% \oarg{1: vpos} \oarg{2: \#rows}
+% \marg{3: numLaTeXcols} \marg{4: numHTMLcols}
+% \marg{5: colspec} \marg{6: text}
+%
+% \changes{v0.39}{2017/08/30}{Add: Optional \optn{vpos} and \# rows.}
+% \changes{v0.41}{2017/09/28}{Add: \cs{cmidrule} trims.}
+%
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@domulticolumn}{o o m m m +m}{%
+\LWR@traceinfo{LWR@domulticolumn -#1- -#2- -#4- -#5-}%
+% \end{macrocode}
+% Remember the text to be inserted, and
+% remember that a valid column type was found:
+% \begin{macrocode}
+\renewcommand{\LWR@multicoltext}{%
+#6%
+\global\booltrue{LWR@validtablecol}%
+}%
+% \end{macrocode}
+% Compute the rightmost column to be included.
+% This is used to create the right trim.
+% \changes{v0.43}{2017/11/07}{Fix: Multicolumn trim.}
+% \begin{macrocode}
+\setcounter{LWR@lastmulticolumn}{\value{LWR@tableLaTeXcolindex}}%
+\addtocounter{LWR@lastmulticolumn}{#3}%
+\addtocounter{LWR@lastmulticolumn}{-1}%
+% \end{macrocode}
+% Row processing:
+% \begin{macrocode}
+\LWR@maybenewtablerow%
+% \end{macrocode}
+% Begin the opening table data tag:
+% \begin{macrocode}
+\LWR@htmltag{td colspan="#4" %
+% \end{macrocode}
+%
+% \begin{macrocode}
+\IfValueT{#2}{ % rows?
+rowspan="#2" %
+% \end{macrocode}
+%
+% \changes{v0.47}{2018/01/26}{Fix: Line wrap at \HTML\ hyphen.}
+% \begin{macrocode}
+\IfValueT{#1}{% vpos?
+\ifstrequal{#1}{b}{style="\LWR@print@mbox{vertical-align:bottom}" }{}%
+\ifstrequal{#1}{t}{style="\LWR@print@mbox{vertical-align:top}" }{}%
+}% vpos?
+}% rows?
+% \end{macrocode}
+%
+% \begin{macrocode}
+ class="td%
+% \end{macrocode}
+% Print the column type and vertical bars:
+% \begin{macrocode}
+\setcounter{LWR@mcolvertbarsl}{0}%
+\setcounter{LWR@mcolvertbarsr}{0}%
+\setcounter{LWR@mcolvertbarsldash}{0}%
+\setcounter{LWR@mcolvertbarsrdash}{0}%
+\booltrue{LWR@mcolvertbaronleft}%
+\LWR@parsemulticolumnalignment{#5}{\LWR@printmccoltype}%
+% \end{macrocode}
+% If this column has a cmidrule, add ``rule'' to the end of the \HTML\ class tag.
+%
+% If this position had a ``Y'' then add ``rule'' for a horizontal rule:
+% \changes{v0.43}{2017/11/07}{Fix: Multicolumn trim.}
+% \begin{macrocode}
+\LWR@subaddcmidruletrim%
+{\LWR@getexparray{LWR@trimlrules}{\arabic{LWR@tableLaTeXcolindex}}}%
+{\LWR@getexparray{LWR@trimrrules}{\arabic{LWR@lastmulticolumn}}}%
+% \end{macrocode}
+% Also add vertical bar class.
+% \changes{v0.41}{2017/10/07}{Added vertical rules.}
+% \changes{v0.43}{2017/11/07}{Fix for vertical rules.}
+% \changes{v0.56}{2018/04/30}{Adds support for double vertical rules.}
+% \changes{v0.56}{2018/05/05}{Adds support for dashed vertical rules.}
+% \begin{macrocode}
+\ifnumcomp{\value{LWR@mcolvertbarsl}}{=}{1}{ tvertbarl}{}%
+\ifnumcomp{\value{LWR@mcolvertbarsl}}{>}{1}{ tvertbarldouble}{}%
+\ifnumcomp{\value{LWR@mcolvertbarsr}}{=}{1}{ tvertbarr}{}%
+\ifnumcomp{\value{LWR@mcolvertbarsr}}{>}{1}{ tvertbarrdouble}{}%
+\ifnumcomp{\value{LWR@mcolvertbarsldash}}{=}{1}{ tvertbarldash}{}%
+\ifnumcomp{\value{LWR@mcolvertbarsldash}}{>}{1}{ tvertbarldoubledash}{}%
+\ifnumcomp{\value{LWR@mcolvertbarsrdash}}{=}{1}{ tvertbarrdash}{}%
+\ifnumcomp{\value{LWR@mcolvertbarsrdash}}{>}{1}{ tvertbarrdoubledash}{}%
+% \end{macrocode}
+% Close the class tag's opening quote:
+"% NOT A TYPO
+% \begin{macrocode}
+%
+% \end{macrocode}
+% \changes{v0.42}{2017/10/26}{If \progcode{FormatWP} add cell alignment.}
+% \begin{macrocode}
+\LWR@tdstartstyles%
+% \end{macrocode}
+% \changes{v0.49}{2018/02/18}{\pkg{xcolor}: Added tabular row colors.}
+% \begin{macrocode}
+\LWR@addtabularrowcolor%
+% \end{macrocode}
+% \begin{macrocode}
+\LWR@addcmidrulewidth%
+\LWR@addcdashline%
+\LWR@addtabularhrulecolor%
+\LWR@addmulticolvertrulecolor%
+\LWR@addformatwpalignment{#5}%
+\LWR@tdendstyles%
+}% end of the opening table data tag
+\global\boolfalse{LWR@intabularmetadata}%
+\LWR@parsemulticolumnalignment{#5}{\LWR@printmccoldata}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsubsection{Multicolumn}
+
+% \begin{macro}{\LWR@htmlmulticolumn} \marg{numcols} \marg{alignment} \marg{text}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@htmlmulticolumn}{m m +m}%
+{%
+% \end{macrocode}
+% Figure out how many extra \HTML\ columns to add for |@| and |!| columns:
+% \begin{macrocode}
+\LWR@tabularhtmlcolumns{\arabic{LWR@tableLaTeXcolindex}}{#1}
+% \end{macrocode}
+% Create the multicolumn tag:
+% \begin{macrocode}
+\LWR@domulticolumn{#1}{\arabic{LWR@tabhtmlcoltotal}}{#2}{#3}%
+% \end{macrocode}
+% Move to the next \LaTeX\ column:
+% \begin{macrocode}
+\addtocounter{LWR@tableLaTeXcolindex}{#1}%
+\addtocounter{LWR@tableLaTeXcolindex}{-1}%
+% \end{macrocode}
+% Skip any trailing |@| or |!| columns for this cell:
+% \begin{macrocode}
+\global\booltrue{LWR@skipatbang}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \subsubsection{Longtable captions}
+%
+% \pkg{longtable} captions use \cs{multicolumn}.
+
+% \DescribeBoolean{LWR@starredlongtable}
+% Per the \pkg{caption} pacakge, step the counter if |longtable*|.
+%
+% \begin{macrocode}
+\newbool{LWR@starredlongtable}
+\boolfalse{LWR@starredlongtable}
+% \end{macrocode}
+%
+%
+% Per the \pkg{caption} package. User-redefinable float type.
+% \begin{macrocode}
+\providecommand*{\LTcaptype}{table}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\LWR@longtabledatacaptiontag} * \oarg{toc entry} \marg{caption}
+%
+% \changes{v0.20}{2017/01/08}{Fix: Pars in captions.}
+%
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@longtabledatacaptiontag}{s o +m}
+{%
+% \end{macrocode}
+% Remember the latest name for \cs{nameref}:
+% \begin{macrocode}
+\IfValueTF{#2}{% optional given?
+ \ifblank{#2}% optional empty?
+ {\LWR@setlatestname{#3}}% empty
+ {\LWR@setlatestname{#2}}% given and non-empty
+}% optional given
+{\LWR@setlatestname{#3}}% no optional
+% \end{macrocode}
+% Create a multicolumn across all the columns:
+%
+% Figure out how many extra \HTML\ columns to add for |@| and |!| columns
+% found between the first and the last column:
+% \begin{macrocode}
+\LWR@tabularhtmlcolumns{1}{\arabic{LWR@tabletotalLaTeXcols}}
+% \end{macrocode}
+% Create the multicolumn tag:
+% \begin{macrocode}
+\LWR@domulticolumn{\arabic{LWR@tabletotalLaTeXcols}}%
+ {\arabic{LWR@tabhtmlcoltotal}}%
+ {P}%
+{% \LWR@domulticolumn
+\IfBooleanTF{#1}% star?
+% \end{macrocode}
+% Star version, show a caption but do not make a LOT entry:
+% \begin{macrocode}
+{% yes star
+ \LWR@figcaption%
+ \LWR@isolate{#3}%
+ \endLWR@figcaption%
+}%
+{% No star:
+% \end{macrocode}
+% Not the star version:
+%
+% Don't step the counter if |\caption[]{A caption.}|
+% \begin{macrocode}
+ \ifbool{LWR@starredlongtable}%
+ {%
+ \ifblank{#2}% TOC entry
+ {}%
+ {%
+ \refstepcounter{\LTcaptype}%
+ \protected@edef\@currentlabel{%
+ \@nameuse{p@\LTcaptype}\@nameuse{the\LTcaptype}%
+ }%
+ }%
+ }{}%
+% \end{macrocode}
+% Create an \HTML\ caption. Afterwards, maybe make a LOT entry.
+% \begin{macrocode}
+ \LWR@figcaption%
+ \LWR@isolate{\@nameuse{fnum@\LTcaptype}}%
+ \CaptionSeparator%
+ \LWR@isolate{#3}%
+ \endLWR@figcaption%
+% \end{macrocode}
+% See if an optional caption was given:
+% \begin{macrocode}
+ \ifblank{#2}% TOC entry empty
+% \end{macrocode}
+% if the optional caption was given, but empty, do not form a \TOC\ entry
+% \begin{macrocode}
+ {}%
+% \end{macrocode}
+% If the optional caption was given, but might only be |[]|:
+% \begin{macrocode}
+ {% TOC entry not empty
+ \IfNoValueTF{#2}% No TOC entry?
+% \end{macrocode}
+% The optional caption is |[]|:
+% \begin{macrocode}
+ {% No TOC entry
+ \addcontentsline%
+ {\@nameuse{ext@\LTcaptype}}%
+ {\LTcaptype}%
+ {%
+ \protect\numberline%
+ {\LWR@isolate{\@nameuse{p@\LTcaptype}}\@nameuse{the\LTcaptype}}%
+ {\ignorespaces \LWR@isolate{#3}\protect\relax}%
+ }%
+ }% end of No TOC entry
+% \end{macrocode}
+% The optional caption has text enclosed:
+% \begin{macrocode}
+ {% yes TOC entry
+ \addcontentsline%
+ {\@nameuse{ext@\LTcaptype}}%
+ {\LTcaptype}%
+ {%
+ \protect\numberline%
+ {\LWR@isolate{\@nameuse{p@\LTcaptype}}\@nameuse{the\LTcaptype}}%
+ {\ignorespaces \LWR@isolate{#2}\protect\relax}%
+ }%
+ }% end of yes TOC entry
+ }% end of TOC entry not empty
+}% end of no star
+% \end{macrocode}
+% Skip any trailing |@| or |!| columns for this cell:
+% \begin{macrocode}
+\global\booltrue{LWR@skipatbang}%
+}% end of \LWR@domulticolumn
+
+\addtocounter{LWR@tableLaTeXcolindex}{\arabic{LWR@tabletotalLaTeXcols}}
+\addtocounter{LWR@tableLaTeXcolindex}{-1}
+
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \subsubsection{Counting \HTML\ tabular columns}
+
+% The \LaTeX\ specification for a table includes a number of columns separated
+% by the |&| character. These columns differ in content from line to line.
+% Additional virtual columns may be specified by the special |@| and |!| columns.
+% These columns are identical from line to line, but may be skipped during a
+% multicolumn cell.
+%
+% For \HTML\ output, |@| and |!| columns are placed into their own tabular columns.
+% Thus, a \LaTeX\ \cs{multicolumn} command may span several additional |@| and |!|
+% columns in \HTML\ output. These additional columns must be added to the total
+% number of columns spanned by an \HTML\ multi-column data cell.
+
+% \begin{macrocode}
+\newcounter{LWR@tabhtmlcolindex}
+\newcounter{LWR@tabhtmlcolend}
+\newcounter{LWR@tabhtmlcoltotal}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@subtabularhtmlcolumns} \marg{index}
+%
+% Factored from \cs{LWr@tabularhtmlcolumns}, which follows.
+% \begin{macrocode}
+\newcommand*{\LWR@subtabularhtmlcolumns}[1]{%
+% \end{macrocode}
+% Temporarily define a macro equal to the |@| specification for this column:
+% \begin{macrocode}
+ \edef\LWR@atbangspec{\LWR@getexparray{LWR@colatspec}{#1}}%
+% \end{macrocode}
+% If the |@| specification is not empty, add to the count:
+% \begin{macrocode}
+ \ifdefempty{\LWR@atbangspec}%
+ {}%
+ {\addtocounter{LWR@tabhtmlcoltotal}{1}}%
+% \end{macrocode}
+% Likewise for the |!| columns:
+% \begin{macrocode}
+ \edef\LWR@atbangspec{\LWR@getexparray{LWR@colbangspec}{#1}}%
+ \ifdefempty{\LWR@atbangspec}%
+ {}%
+ {\addtocounter{LWR@tabhtmlcoltotal}{1}}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@tabularhtmlcolumns}
+% \marg{starting \LaTeX\ column} \marg{number \LaTeX\ columns}
+%
+% Compute the total number of \HTML\ columns being spanned, considering the
+% starting \LaTeX\ table column and the number of \LaTeX\ tabular columns being
+% spanned. Any |@| and |!| columns within this span are included in the total count.
+% The resulting number of \HTML\ columns is returned in the counter |LWR@tabhtmlcoltotal|.
+% \begin{macrocode}
+\newcommand*{\LWR@tabularhtmlcolumns}[2]{%
+% \end{macrocode}
+% Count the starting index, compute ending index,
+% and begin with the count being the \LaTeX\ span, to which additional |@| and |!|
+% columns may be added:
+% \begin{macrocode}
+\setcounter{LWR@tabhtmlcolindex}{#1}%
+\setcounter{LWR@tabhtmlcoltotal}{#2}%
+\setcounter{LWR@tabhtmlcolend}{#1}%
+\addtocounter{LWR@tabhtmlcolend}{#2}%
+% \end{macrocode}
+% If at the left edge, add the at/bang columns for the left edge:
+% \begin{macrocode}
+\ifnumcomp{\value{LWR@tabhtmlcolindex}}{=}{1}{%
+ \LWR@subtabularhtmlcolumns{leftedge}%
+}{}%
+% \end{macrocode}
+% Walk across the \LaTeX\ columns looking for |@| and |!| columns:
+% \begin{macrocode}
+\whileboolexpr{%
+ test {%
+ \ifnumcomp{\value{LWR@tabhtmlcolindex}}{<}{\value{LWR@tabhtmlcolend}}%
+ }%
+}%
+{%
+ \LWR@subtabularhtmlcolumns{\arabic{LWR@tabhtmlcolindex}}%
+ \addtocounter{LWR@tabhtmlcolindex}{1}%
+}% whiledo
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+%
+%
+% \subsection{Multirow if not loaded}
+%
+% A default defintion in case \pkg{multirow} is not loaded.
+% This is used during table parsing.
+% \begin{macrocode}
+\begin{warpHTML}
+\newcommand{\multirow}[2][c]{}
+\end{warpHTML}
+% \end{macrocode}
+%
+%
+% \subsection{Multicolumnrow}
+%
+% \label{sec:printmultirow}
+%
+% A print-mode version is defined here, and is also used during \HTML\ output
+% while inside a \env{lateximage}.
+%
+% See \cref{sec:multirow} for the \HTML\ versions.
+%
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+%
+% \begin{macro}{\multicolumnrow}
+% \marg{1:cols} \marg{2:halign}
+% \oarg{3:vpos} \marg{4:numrows} \oarg{5:bigstruts}
+% \marg{6:width} \oarg{7:fixup} \marg{8:text}
+%
+% For discussion of the use of \cs{DeclareExpandableDocumentCommand}, see: \\
+% \href
+% {https://tex.stackexchange.com/questions/168434/problem-with-abbreviation-of-multirow-and-multicolumn-latex}
+% {https://tex.stackexchange.com/questions/168434/\\%
+% problem-with-abbreviation-of-multirow-and-multicolumn-latex}
+%
+% \changes{v0.39}{2017/08/31}{Added.}
+% \changes{v0.40}{2017/09/22}{Fix: Adapts to older \pkg{multirow} and \pkg{xparse}.}
+% \changes{v0.57}{2018/06/01}{Improved print/\HTML\ output selection.}
+%
+% \cs{AtBeginDocument} to adjust after the user may have loaded \pkg{multirow},
+% which requires several tests to determine which version is loaded
+% and thus which options are available.
+% \begin{macrocode}
+\AtBeginDocument{
+% \end{macrocode}
+%
+% |\@ifundefined{@xmultirow}| determines if \pkg{multirow} was never loaded.
+%
+% Null action if not loaded:
+% \begin{macrocode}
+\@ifundefined{@xmultirow}
+{
+\DeclareExpandableDocumentCommand{\LWR@print@multicolumnrow}%
+ {+m +m +O{c} +m +O{0} +m +O{0pt} +m}%
+ {}%
+}% no version of multirow was loaded
+{% \@xmultirow defined, so some version of multirow was loaded
+% \end{macrocode}
+%
+% |\@ifpackageloaded{multirow}| determines if v2.0 or later of
+% \pkg{multirow} was used, which included the \cs{ProvidesPackage} macro.
+%
+% The print version:
+% \begin{macrocode}
+\@ifpackageloaded{multirow}{% v2.0 or newer
+\@ifpackagelater{multirow}{2016/09/01}% 2016/09/27 for v2.0
+{% v2.0+:
+\DeclareExpandableDocumentCommand{\LWR@print@multicolumnrow}%
+ {+m +m +O{c} +m +O{0} +m +O{0pt} +m}%
+ {\multicolumn{#1}{#2}{\@xmultirow[#3]{#4}[#5]{#6}[#7]{#8}}}%
+}
+{% loaded but older, probably not executed:
+\DeclareExpandableDocumentCommand{\LWR@print@multicolumnrow}%
+ {+m +m +O{c} +m +O{0} +m +O{0pt} +m}%
+ {\multicolumn{#1}{#2}{\@xmultirow{#4}[#5]{#6}[#7]{#8}}}%
+}
+}% packageloaded{multirow}
+% \end{macrocode}
+%
+% If not |\@ifpackageloaded{multirow}| but \cs{@xmultirow} is defined,
+% then this must be v1.6 or earlier, which did not |\ProvidesPackage{multirow}|,
+% and did not have the \optn{vposn} option.
+%
+% \begin{macrocode}
+{% v1.6 or older did not \ProvidePackage
+\DeclareExpandableDocumentCommand{\LWR@print@multicolumnrow}%
+ {+m +m +O{c} +m +O{0} +m +O{0pt} +m}%
+ {\multicolumn{#1}{#2}{\@xmultirow{#4}[#5]{#6}[#7]{#8}}}%
+}
+
+}% \@ifundefined{@xmultirow}
+
+\providecommand*{\multicolumnrow}{\LWR@print@multicolumnrow}
+
+}% AtBeginDocument
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+%
+%
+%
+% \subsection{Utility macros inside a table}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+% Used to prevent opening a tabular data cell if the following token is
+% one which does not create tabular data:
+% \begin{macrocode}
+\newcommand*{\LWR@donothing}{}
+% \end{macrocode}
+%
+% In case \pkg{array} is not loaded:
+% \changes{v0.58}{2018/06/21}{\pkg{memoir}: Fix for \cs{firsthlline}, \cs{lasthline}.}
+% \begin{macrocode}
+\let\firsthline\relax
+\let\lasthline\relax
+\newcommand*{\firsthline}{}
+\newcommand*{\lasthline}{}
+% \end{macrocode}
+%
+% In case \pkg{bigdelim} is not loaded:
+% \begin{macrocode}
+\newcommand*{\ldelim}{}
+\newcommand*{\rdelim}{}
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \subsection{Special-case tabular markers}
+
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+%
+% \begin{macro}{\TabularMacro}
+% Place this just before inserting a custom macro in a table data cell.
+% Doing so tells \pkg{lwarp} not to automatcally start a new \HTML\ table data cell yet.
+% See \cref{sec:limitstabular}.
+%
+% \changes{v0.39}{2017/08/29}{Added.}
+% \changes{v0.43}{2017/11/07}{\cs{newcommand} instead of \cs{relax} to fix \pkg{supertabular} and \pkg{xtab}.}
+% \begin{macrocode}
+\newcommand*{\TabularMacro}{}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+
+% \begin{macro}{\ResumeTabular} Used to resume tabular entries after resuming
+% an environment.
+%
+% \changes{v0.39}{2017/08/29}{Added.}
+%
+% \limitsresumetabular
+% \bigskip
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{macrocode}
+\newcommand*{\ResumeTabular}{%
+\global\boolfalse{LWR@exitingtabular}%
+\global\boolfalse{LWR@tabularmutemods}%
+\LWR@getmynexttoken%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+% \codeprint
+% \begin{macrocode}
+\begin{warpprint}
+% \end{macrocode}
+
+% \begin{macrocode}
+\newcommand*{\ResumeTabular}{}
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpprint}
+% \end{macrocode}
+
+
+
+% \subsection{Checking for a new table cell}
+
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% \DescribeBoolean{LWR@exitingtabular}
+% When \cs{end} is found, turns off the next opening data tag.
+% \begin{macrocode}
+\newbool{LWR@exitingtabular}
+% \end{macrocode}
+
+
+% \DescribeBoolean{LWR@tabularmutemods}
+% Mutes \HTML\ output for |@|, |!|, |<| and |>|.
+%
+% This is used while printing the final row to generate \cs{bottomrule}s.
+% \begin{macrocode}
+\newbool{LWR@tabularmutemods}
+% \end{macrocode}
+
+
+
+% \begin{macro}{\LWR@tabledatacolumntag}
+% Open a new \HTML\ table cell unless the next token is for a macro
+% which does not create data, such as \cs{hline}, \cs{toprule}, etc:
+%
+% \changes{v0.34}{2017/08/08}{\pkg{booktabs}: Works inside \env{lateximage}.}
+% \changes{v0.39}{2017/08/29}{Don't start a data cell if see \cs{TabularMacro}.}
+% \changes{v0.40}{2017/09/09}{Fix for \pkg{bigdelim}: \cs{ldelim}, \cs{rdelim}.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@tabledatacolumntag}%
+{%
+\LWR@traceinfo{LWR@tabledatacolumntag}%
+% \end{macrocode}
+% \hspace*{.5in} |\show\LWR@mynexttoken| to see what tokens to look for
+% \begin{macrocode}
+% \end{macrocode}
+% If not any of the below, start a new table cell:
+% \begin{macrocode}
+\global\let\LWR@mynextaction\LWR@tabledatasinglecolumntag%
+% \end{macrocode}
+% If exiting the tabular:
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\end}%
+ {\global\booltrue{LWR@exitingtabular}}{}%
+% \end{macrocode}
+% \env{longtable} can have a caption in a cell
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\caption}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% Look for other things which would not start a table cell:
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\multicolumn}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+\ifdefequal{\LWR@mynexttoken}{\multirow}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+\ifdefequal{\LWR@mynexttoken}{\multicolumnrow}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+\ifdefequal{\LWR@mynexttoken}{\noalign}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% If an \cs{mrowcell}, this is a cell to be skipped over:
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\mrowcell}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% If an \cs{mcolrowcell}, this is a cell to be skipped over:
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\mcolrowcell}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\TabularMacro}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\hline}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\firsthline}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\lasthline}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\toprule}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\midrule}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\cmidrule}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% \changes{v0.56}{2018/05/02}{Fix: \cs{morecmidrules}}
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\morecmidrules}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\specialrule}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\cline}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\bottomrule}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\rowcolor}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\arrayrulecolor}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\doublerulesepcolor}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\warpprintonly}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\warpHTMLonly}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\ldelim}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\rdelim}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% For \pkg{arydshln}:
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\hdashline}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\cdashline}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\firsthdashline}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\lasthdashline}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+% Ignore an empty line between rows:
+% \changes{v0.45}{2017/12/06}{Fix: Empty line between rows.}
+% \begin{macrocode}
+\ifdefequal{\LWR@mynexttoken}{\par}%
+ {\global\let\LWR@mynextaction\LWR@donothing}{}%
+% \end{macrocode}
+%
+% No action for an \cs{end} token.
+%
+% Add similar to the above for any other non-data tokens
+% which might appear in the table.
+%
+% Start the new table cell if was not any of the above:
+% \begin{macrocode}
+\LWR@traceinfo{LWR@tabledatacolumntag: about to do mynext}%
+\LWR@mynextaction%
+\LWR@traceinfo{LWR@tabledatacolumntag: done}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \subsection{\cs{mrowcell}}
+
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+
+% \begin{macro}{\mrowcell}
+% The user must insert \cs{mrowcell} into any \cs{multirow} cells which must be skipped.
+% This command has no action during print output.
+% \watchout[multirow cells]
+% \begin{macrocode}
+\newcommand*{\mrowcell}{}
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{\cs{mcolrowcell}}
+
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+
+% \begin{macro}{\mcolrowcell}
+% The user must insert \cs{mcolrowcell} into any \cs{multicolumnrow} cells
+% which must be skipped.
+% This command has no action during print output.
+% \watchout[multirow cells]
+% \changes{v0.41}{2017/10/05}{Added for \cs{multicolumrow} cells.}
+% \begin{macrocode}
+\newcommand*{\mcolrowcell}{}
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{\HTML\ \env{tabular} environment}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+%
+% These are default defininitions in case \pkg{booktabs} is not loaded,
+% and are not expected to used, but must exist as placeholders.
+% They are pre-deleted in case \pkg{memoir} has already loaded \pkg{booktabs}.
+%
+% \changes{v0.34}{2017/08/08}{\pkg{booktabs}: Works inside \env{lateximage}.}
+% \changes{v0.58}{2018/06/21}{\pkg{memoir}: Fix for \pkg{booktabs}.}
+% \begin{macrocode}
+\LetLtxMacro\toprule\relax
+\LetLtxMacro\midrule\relax
+\LetLtxMacro\cmidrule\cline
+\LetLtxMacro\bottomrule\relax
+\LetLtxMacro\addlinespace\relax
+\LetLtxMacro\morecmidrules\relax
+\LetLtxMacro\specialrule\relax
+
+\newcommand*{\toprule}[1][]{\hline}
+\newcommand*{\midrule}[1][]{\hline}
+\LetLtxMacro\cmidrule\cline
+\newcommand*{\bottomrule}[1][]{\hline}
+\newcommand*{\addlinespace}[1][]{}
+\newcommand*{\morecmidrules}{}
+\newcommand*{\specialrule}[3]{\hline}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\noalign} \marg{text}
+% Redefined for use inside \env{tabular}.
+% \changes{v0.49}{2018/02/18}{Fix: \cs{noalign} inside \env{tabular}.}
+% \begin{macrocode}
+\LetLtxMacro\LWR@orignoalign\noalign
+
+\newcommand{\LWR@tabularnoalign}[1]{%
+\begingroup%
+\global\advance\rownum\m@ne%
+\renewcommand*{\LWR@xcolorrowHTMLcolor}{}%
+\multicolumn{\value{LWR@tabletotalLaTeXcols}}{l}{#1} \\
+\endgroup%
+% \@rowc@lors%
+\LWR@getmynexttoken%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LWR@HTMLhline}
+% The definition of \cs{hline} depends on whether \pkg{tabls} has been loaded.
+% If so, optional space below the line may be specified, but will be ignored.
+%
+% \changes{v0.40}{2017/09/06}{Added.}
+% \changes{v0.42}{2017/10/19}{If \progcode{FormatWP} force explicit border.}
+%
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifpackageloaded{lwarp-tabls}
+{
+\newcommand*{\LWR@HTMLhline}[1][]{%
+ \ifbool{FormatWP}%
+ {\LWR@docmidrule{1-\arabic{LWR@tabletotalLaTeXcols}}}%
+ {\addtocounter{LWR@hlines}{1}}%
+ \LWR@getmynexttoken}%
+}
+{
+\newcommand*{\LWR@HTMLhline}{%
+ \ifbool{FormatWP}%
+ {\LWR@docmidrule{1-\arabic{LWR@tabletotalLaTeXcols}}}%
+ {\addtocounter{LWR@hlines}{1}}%
+ \LWR@getmynexttoken}%
+}
+}% AtBeginDocument
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@HTMLcline} \marg{columns}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTMLcline}{m}%
+{\LWR@docmidrule{#1}\LWR@getmynexttoken}%
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@tabular@warpprintonly} \marg{contents}
+%
+% Only process the contents if producing printed output.
+% Modified inside a \env{tabular} to grab the next token.
+% \changes{v0.68}{2019/03/01}{Added.}
+% \begin{macrocode}
+\newcommand{\LWR@tabular@warpprintonly}[1]{%
+ \ifbool{warpingprint}{#1}{}%
+ \LWR@getmynexttoken%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+
+
+% \begin{macro}{\LWR@nullifyNoAutoSpacing}
+% For \pkg{babel-french}, turn off auto spacing at the start of the tabular,
+% then nullify the autospacing commands inside the tabular,
+% since they were not compatible with the tabular column parsing code,
+% which uses \pkg{xstring}.
+% \changes{v0.41}{2017/10/06}{Fix: \cs{NoAutoSpacing} in a tabular
+% with \pkg{babel-french}.}
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifundefined{frenchbsetup}%
+{% no babel-french
+ \newcommand*{\LWR@nullifyNoAutoSpacing}{}
+}% no babel-french
+{% yes babel-french
+ \newcommand*{\LWR@nullifyNoAutoSpacing}{%
+ \NoAutoSpacing%
+ \renewcommand*{\NoAutoSpacing}{}%
+ \renewcommand*{\LWR@FBcancel}{}%
+ }
+}% yes babel-french
+}% AtBeginDocument
+% \end{macrocode}
+% \end{macro}
+
+%
+% \begin{environment}{tabular} |<direction>| \oarg{vertposition} \marg{colspecs}
+%
+% The |<direction>| is from \pkg{plext} for Japanese documents, and is ignored.
+%
+% \changes{v0.34}{2017/08/08}{\pkg{booktabs}: Works inside \env{lateximage}.}
+% \changes{v0.36}{2017/08/16}{Fix for \pkg{babel-french}.}
+% \changes{v0.65}{2018/12/15}{Added support for \pkg{plext}.}
+% \changes{v0.65}{2018/12/16}{Fix: \env{tabular*}.}
+% \changes{v0.73}{2019/06/26}{Fix and warning for \env{tabular} inside a \element{span}.}
+% \begin{macrocode}
+\StartDefiningTabulars
+
+\NewDocumentCommand{\LWR@HTML@@tabular}{d<> o m}
+{%
+\LWR@traceinfo{LWR@HTML@@tabular started}%
+% \end{macrocode}
+% In \LaTeX, a \env{tabular} may be placed inside a \env{minipage},
+% \watchout[\element{table} inside \element{span}]
+% but in \HTML\ a \element{table} may not be inside a \element{span}.
+% Since there may be several nested \element{span}s, with an unknown number
+% of other objects between, it is hard to undo all these \element{span}s before the
+% \element{table} then redo them after.
+% The broswer probably compensates for this situation,
+% but formatting may be lost inside the \element{table} because several
+% things are neutralized inside a \element{span}.
+% Furthermore, in the \HTML\ output, the entire \element{table} is placed
+% on a single line of \HTML\ code, since the line breaking commands are
+% neutralized inside a \element{span}. Since this is such a sloppy situation,
+% a warning is issued here instructing the user to please isolate the \element{span}
+% to print-only.
+% \begin{macrocode}
+\ifnumcomp{\value{LWR@spandepth}}{>}{0}{%
+ \PackageWarning{lwarp}{%
+ A tabular is being used inside a span such as\MessageBreak
+ a minipage. Some formatting may not be correct\MessageBreak
+ in the tabular.\MessageBreak
+ It is recommended to use \protect\warpprintonly\space or the\MessageBreak
+ warpprint environment to isolate the span to\MessageBreak
+ print-only,%
+ }
+}{}%
+\addtocounter{LWR@tabulardepth}{1}%
+% \end{macrocode}
+% Not yet started a table row:
+% \begin{macrocode}
+\global\boolfalse{LWR@startedrow}%
+% \end{macrocode}
+% Not yet doing any rules:
+% \begin{macrocode}
+\setcounter{LWR@hlines}{0}%
+\setcounter{LWR@hdashedlines}{0}%
+\global\boolfalse{LWR@doingtbrule}%
+\global\boolfalse{LWR@doingcmidrule}%
+% \end{macrocode}
+%
+% For \pkg{babel-french}, turn off auto spacing one time, then nullify
+% the autospacing commands since were not compatible with the tabular parsing code.
+%
+% \changes{v0.41}{2017/10/06}{Fix: \cs{NoAutoSpacing} in a tabular
+% with \pkg{babel-french}.}
+% \begin{macrocode}
+\LWR@nullifyNoAutoSpacing%
+% \end{macrocode}
+%
+% Have not yet found the end of tabular command.
+% Unmute the |@| and |!| columns.
+% \begin{macrocode}
+\global\boolfalse{LWR@exitingtabular}%
+\global\boolfalse{LWR@tabularmutemods}%
+% \end{macrocode}
+%
+% Error if failed to use \cs{mrowcell} or \cs{mcolrowcell} when needed.
+% \changes{v0.69}{2019/03/07}{Error if \cs{multirow} without \cs{mrowcell}.}
+% \begin{macrocode}
+\boolfalse{LWR@usedmultirow}
+\boolfalse{LWR@foundmrowcell}
+% \end{macrocode}
+%
+% Create the |table| tag:
+% \begin{macrocode}
+\global\booltrue{LWR@intabularmetadata}%
+\LWR@traceinfo{LWR@@tabular: About to LWR@forecenewpage.}%
+\LWR@forcenewpage
+\LWR@htmlblocktag{table}%
+% \end{macrocode}
+% Parse the table columns:
+% \begin{macrocode}
+\LWR@parsetablecols{#3}%
+% \end{macrocode}
+%
+% Table col spec is: \cs{LWR@tablecolspec} which is a string of |llccrr|, etc.
+%
+% Do not place the table inside a paragraph:
+% \begin{macrocode}
+\LWR@stoppars%
+% \end{macrocode}
+% Track column \#:
+% \begin{macrocode}
+\setcounter{LWR@tableLaTeXcolindex}{1}%
+% \end{macrocode}
+% Have not yet added data in this column:
+% \begin{macrocode}
+\global\boolfalse{LWR@tabularcelladded}%
+% \end{macrocode}
+% Start looking for midrules:
+% \begin{macrocode}
+\LWR@clearmidrules%
+% \end{macrocode}
+% |\\| becomes a macro to end the table row:
+% \begin{macrocode}
+\LetLtxMacro{\\}{\LWR@tabularendofline}%
+% \end{macrocode}
+%
+% \cs{warpprintonly} inside a \env{tabular} must grab the next token.
+% \changes{v0.68}{2019/03/01}{Fix: \cs{warpprintonly} inside \env{tabular}.}
+% \begin{macrocode}
+\LetLtxMacro\warpprintonly\LWR@tabular@warpprintonly%
+% \end{macrocode}
+%
+% The following adjust for \pkg{colortbl}.
+% \changes{v0.48}{2018/02/06}{\pkg{colortbl}: Added.}
+% \begin{macrocode}
+\LetLtxMacro\arrayrulecolor\arrayrulecolornexttoken%
+\LetLtxMacro\doublerulesepcolor\doublerulesepcolornexttoken%
+\gdef\LWR@columnHTMLcolor{}%
+\gdef\LWR@rowHTMLcolor{}%
+\gdef\LWR@cellHTMLcolor{}%
+\@rowcolors%
+% \end{macrocode}
+%
+% The vertical rules are set to the color active at the start of the tabular.
+% \cs{arrayrulecolor} will then affect horizontal rules inside the tabular,
+% but not the vertical rules.
+% \changes{v0.65}{2018/12/19}{Fix: Rule color.}
+% \begin{macrocode}
+\ifdefvoid{\LWR@ruleHTMLcolor}%
+ {\edef\LWR@vertruleHTMLcolor{black}}%
+ {\edef\LWR@vertruleHTMLcolor{\LWR@origpound\LWR@ruleHTMLcolor}}%
+% \end{macrocode}
+%
+% Tracking the depth of cell color \element{div}s:
+% \begin{macrocode}
+\setcounter{LWR@cellcolordepth}{0}%
+% \end{macrocode}
+%
+% The following may appear before a data cell is created,
+% so after doing their actions, we look ahead with \cs{LWR@getmynextoken}
+% to see if the next token might create a new data cell:
+%
+% The optional parameter for \cs{hline} supports the \pkg{tabls} package.
+% \begin{macrocode}
+\LWR@traceinfo{LWR@@HTML@tabular: redefining macros}%
+\LetLtxMacro\noalign\LWR@tabularnoalign%
+\LetLtxMacro\hline\LWR@HTMLhline%
+\LetLtxMacro\cline\LWR@HTMLcline%
+% \end{macrocode}
+% \begin{macrocode}
+\DeclareDocumentCommand{\hdashline}{o}{%
+ \ifbool{FormatWP}%
+ {\LWR@docdashline{1-\arabic{LWR@tabletotalLaTeXcols}}}%
+ {\addtocounter{LWR@hdashedlines}{1}}%
+ \LWR@getmynexttoken%
+}%
+% \end{macrocode}
+% \begin{macrocode}
+\DeclareDocumentCommand{\cdashline}{m}{%
+ \LWR@docdashline{##1}\LWR@getmynexttoken%
+}%
+% \end{macrocode}
+% \begin{macrocode}
+\DeclareDocumentCommand{\firsthdashline}{o}{%
+ \ifbool{FormatWP}%
+ {\LWR@docdashline{1-\arabic{LWR@tabletotalLaTeXcols}}}%
+ {\addtocounter{LWR@hdashedlines}{1}}%
+ \LWR@getmynexttoken%
+}%
+% \end{macrocode}
+% \begin{macrocode}
+\DeclareDocumentCommand{\lasthdashline}{o}{%
+ \ifbool{FormatWP}%
+ {\LWR@docdashline{1-\arabic{LWR@tabletotalLaTeXcols}}}%
+ {\addtocounter{LWR@hdashedlines}{1}}%
+ \LWR@getmynexttoken%
+}%
+% \end{macrocode}
+% The following create data cells and will have no more data in this cell,
+% so we do not want to look ahead for a possible data cell,
+% so do not want to use \cs{LWR@getmynexttoken}.
+% \changes{v0.69}{2019/03/07}{Error if \cs{multirow} without \cs{mrowcell}.}
+% \begin{macrocode}
+\renewcommand{\multicolumn}{\LWR@htmlmulticolumn}%
+\renewcommand*{\mrowcell}{%
+ \LWR@maybenewtablerow%
+ \LWR@tabularleftedge%
+ \global\booltrue{LWR@skippingmrowcell}%
+ \booltrue{LWR@foundmrowcell}%
+}%
+\renewcommand*{\mcolrowcell}{%
+ \LWR@maybenewtablerow%
+ \global\booltrue{LWR@skippingmcolrowcell}%
+ \booltrue{LWR@foundmrowcell}%
+}%
+\LetLtxMacro\caption\LWR@longtabledatacaptiontag%
+% \end{macrocode}
+% Reset for new processing:
+% \begin{macrocode}
+\global\boolfalse{LWR@tableparcell}%
+\global\boolfalse{LWR@skippingmrowcell}%
+\global\boolfalse{LWR@skippingmcolrowcell}%
+\global\boolfalse{LWR@skipatbang}%
+\global\boolfalse{LWR@emptyatbang}%
+% \end{macrocode}
+% Set |&| for its special meaning inside the tabular:
+% \begin{macrocode}
+\StartDefiningTabulars%
+\protected\gdef&{\LWR@tabularampersand}%
+% \end{macrocode}
+% Locally force any minipages to be fullwidth, until the end of the \env{tabular}:
+% \changes{v0.66}{2018/12/31}{Fix: Minipages inside \env{tabular}.}
+% \begin{macrocode}
+\booltrue{LWR@forceminipagefullwidth}
+% \end{macrocode}
+% Nest one level deeper of tabular paragraph handling:
+% \changes{v0.46}{2018/01/18}{Fix: Tabular empty lines.}
+% \begin{macrocode}
+\addtocounter{LWR@tabularpardepth}{1}%
+% \end{macrocode}
+% Look ahead for a possible table data cell:
+% \begin{macrocode}
+\LWR@traceinfo{LWR@@HTML@tabular: about to LWR@getmynexttoken}%
+\LWR@getmynexttoken%
+}%
+% \end{macrocode}
+%
+%
+%
+% Ending the environment:
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@endtabular}
+{%
+\LWR@traceinfo{LWR@HTML@endtabular}%
+% \end{macrocode}
+% Unnest one level of tabular paragraph handling:
+% \changes{v0.46}{2018/01/18}{Fix: Tabular empty lines.}
+% \begin{macrocode}
+\addtocounter{LWR@tabularpardepth}{-1}%
+\ifboolexpr{%
+ test {%
+ \ifnumcomp{\value{LWR@tableLaTeXcolindex}}{<}{\value{LWR@tabletotalLaTeXcols}}
+ } or %
+ (%
+ bool{LWR@intabularmetadata} and%
+ not bool{LWR@tabularcelladded} and%
+ test {%
+ \ifnumcomp{\value{LWR@tableLaTeXcolindex}}{=}{\value{LWR@tabletotalLaTeXcols}}%
+ }%
+ )%
+}%
+{%
+ \LWR@tabularfinishrow%
+}%
+{%
+ \LWR@closetabledatacell%
+}%
+\LWR@htmlblocktag{/tr}%
+% \end{macrocode}
+% \pkg{xcolor} row color support:
+% \begin{macrocode}
+\@rowc@lors%
+% \end{macrocode}
+% \begin{macrocode}
+\LWR@htmlblocktag{/table}%
+\global\boolfalse{LWR@intabularmetadata}%
+% \end{macrocode}
+%
+% Unnest one level of tabular:
+% \begin{macrocode}
+\addtocounter{LWR@tabulardepth}{-1}%
+% \end{macrocode}
+%
+% Restore |&| to its usual meaning:
+% \begin{macrocode}
+\protected\gdef&{\LWR@origampmacro}%
+\StopDefiningTabulars%
+% \end{macrocode}
+%
+% Error if used \cs{multirow} or \cs{multicolumnrow} without
+% using \cs{mrowcell} or \cs{mcolrowcell}.
+% \changes{v0.69}{2019/03/07}{Error if \cs{multirow} without \cs{mrowcell}.}
+% \begin{macrocode}
+\ifbool{LWR@usedmultirow}{%
+ \ifbool{LWR@foundmrowcell}%
+ {}%
+ {%
+ \PackageError{lwarp}%
+ {%
+ When using \protect\multirow, \protect\multicolumnrow,\MessageBreak
+ or the bigdelim package,\MessageBreak
+ place \protect\mrowcell\space or \protect\mcolrowcell\MessageBreak
+ in empty cells which are to be skipped.\MessageBreak
+ See the lwarp package documentation:\MessageBreak
+ "Special cases and limitations" -> "Tabular"
+ }%
+ {%
+ See the lwarp package documentation:\MessageBreak
+ "Special cases and limitations" -> "Tabular".
+ }%
+ }%
+}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\LWR@traceinfo{LWR@HTML@endtabular finished}%
+}
+
+\csletcs{LWR@HTML@endtabular*}{LWR@HTML@endtabular}
+
+\StopDefiningTabulars
+% \end{macrocode}
+%
+% \pkg{siunitx} may redefine \env{tabular}, so set the following later:
+% \begin{macrocode}
+\AtBeginDocument{
+ \LetLtxMacro\LWR@origendtabular\endtabular
+ \csletcs{LWR@origendtabular*}{endtabular*}
+ \LWR@formatted{@tabular}
+ \LWR@formatted{endtabular}
+ \LWR@formatted{endtabular*}
+}
+% \end{macrocode}
+% \end{environment}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+% \section{Cross-references}
+%
+% Sectioning commands have been emulated from scratch, so the cross-referencing
+% commands are custom-written for them.
+% Emulating both avoids several layers of patches.
+%
+% \DescribeFile{*_html.aux}
+% A new entry in \filenm{*_html.aux} is used to remember section name, file, and
+% lateximage depth and number for each label:
+% \begin{sourceverb}
+% \newlabel{<labelname>@lwarp}{{<section name>}{<filename>}
+% {<limagedepth>}{<limagenumber>}}
+% \end{sourceverb}
+%
+% \Cref{tab:crossrefdata} shows the data structures related to cross-referencing.
+%
+% \changes{v0.14}{2016/03/29}{Docs: Table: Cross-referencing data structures.}
+% \changes{v0.19}{2016/05/25}{Docs: Table: Cross-referencing data structures, updated.}
+% \begin{table}
+% \small
+% \caption{Cross-referencing data structures\label{tab:crossrefdata}}
+% \medskip
+% \hrule
+% \smallskip
+% \begin{description}[nosep]
+% \raggedright
+% \item [Original \LaTeX:] \hfill (print and \HTML)
+% \begin{description}
+% \item [\cs{refstepcounter}:] Steps the couunter and sets \cs{@currentlabel}.
+% \item [\cs{@currentlabel}:] \cs{p@<ctr>}\cs{the<ctr>} Updated by \cs{refstepcounter}.
+% \item [\cs{label}:] Writes to the |.aux| file:
+% \qquad |\newlabel{<label>}{{\@currentlabel}{\thepage}}|
+% \item [\cs{newlabel}:] When the |.aux| file is read, sets \cs{r@<label>}.
+% \item [\cs{r@<label>}:] Set to: |{{\@currentlabel}{\thepage}}|
+% \item [\cs{ref}:] Returns the first part of \cs{r@<label>}.
+% \item [\cs{pageref}:] Returns the second part of \cs{r@<label>}.
+% \end{description}
+% \item [Added by \pkg{lwarp}:] \hfill (\HTML\ only)
+% \begin{description}
+% \item [\cs{label}:] Adds \HTML\ tags (\cref{sec:labels}),
+% and another \filenm{.aux} entry (\cref{sec:lwarplabelsetup}).
+% \item [\cs{newlabel}:] Unchanged. When the |.aux| file is read, sets \cs{r@<label>@lwarp}.
+% \item [\cs{r@<label>@lwarp}:] Set to |{{section_name}{file_name}{depth}{number}}|:
+% \begin{description}
+% \item [\cs{LWR@nameref}:] The section name for this label.
+% \item [\cs{LWR@htmlfileref}:] The filenumber or name for this label.
+% \item [\cs{LWR@lateximagedepthref}:] The |lateximagedepth| for this label.
+% \item [\cs{LWR@lateximagenumberref}:] The |lateximagenumber| for this label.
+% \end{description}
+% \item [\cs{nameref}:] Emualted from \pkg{hyperref} for \pkg{lwarp}.
+% See \cref{sec:references}.
+% \item [\cs{ref} and \cs{nameref}:] Adds \HTML\ tags.
+% See \cref{sec:references}.
+% \end{description}
+% \item [Added by \pkg{amsmath}:] \hfill (print and \HTML)
+% \begin{description}
+% \item [\cs{label}:] Execution is delayed until the math environment is completed.
+% \item [\cs{ltx@label}:] \LaTeX\ \cs{label},
+% (\HTML: patched by \pkg{lwarp},) later patched by \pkg{cleveref}.
+% \end{description}
+% \item [Added by \pkg{cleveref}:] \hfill (print and \HTML)
+% \begin{description}
+% \item [\cs{refstepcounter:}] Added: sets \cs{cref@currentlabel}.
+% \item [\cs{cref@currentlabel}:] (|<type>|=|<ctr>| unless an alias is used):
+% \qquad |[<type>][\arabic{<ctr>}][<parent ctrs>]{\p@<ctr>\the<ctr>}|
+% Also see \cref{sec:footnotesregular} for use with footnotes.
+% \item [\cs{label}:] Writes to the |.aux| file:
+% \qquad |\newlabel{<label>@cref}{{\cref@currentlabel}{\thepage}}|
+% \item [\cs{newlabel}:] Unchanged. When the |.aux| file is read, sets \cs{r@<label>@cref}.
+% \item [\cs{r@<label>@cref}:] Set to: |{{\cref@currentlabel}{\thepage}}|
+% \item [Utility functions:] See \cs{cref@getlabel}, \cs{cref@gettype},
+% \cs{cref@getcounter}, \cs{cref@getprefix}.
+% \item [Cross-referencing names:] \cs{crefname} and \cs{Crefname} assign
+% human-readable names for references to this counter type.
+% \end{description}
+% \item [Additionally patched by \pkg{lwarp}:] \hfill (\HTML\ only)
+% \begin{description}
+% \item [\cs{cref}, etc.:] Modified for \pkg{lwarp}.
+% See \cref{sec:cleveref}.
+% \item [\cs{label} inside math:] See \cref{sec:amsmathsupport}.
+% \end{description}
+% \item [Footnotes:] See \cs{noteentry} in \cref{sec:footnotesregular}.
+% \end{description}
+% \hrule
+% \end{table}
+%
+%
+% ^^A % See:
+% ^^A %
+% ^^A % \href{http://tex.stackexchange.com/questions/85956/redefining-label-and-ref-when-using-hyperref}
+% ^^A % {\texttt{http://tex.stackexchange.com/questions/85956/redefining-label-and-ref-when-\\using-hyperref}}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% \subsection{Setup}
+
+%
+%
+% \begin{macro}{\@currentlabelname}
+% To remember the most recently defined section name,
+% description, or caption, for \cs{nameref}.
+%
+% \changes{v0.44}{2017/11/19}{Adjustment for \pkg{koma-script}.}
+% \begin{macrocode}
+\providecommand*{\@currentlabelname}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LWR@stripperiod} \marg{text} \oarg{.}
+%
+% Removes a trailing period.
+% \begin{macrocode}
+\def\LWR@stripperiod#1.\ltx@empty#2\@nil{#1}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@setlatestname} \marg{object name}
+%
+% Removes \cs{label}, strips any final period, and remembers the result.
+% \begin{macrocode}
+\newcommand*{\LWR@setlatestname}[1]{%
+% \end{macrocode}
+% Remove \cs{label} and other commands from the name, the strip any final period.
+% See \pkg{gettitlestring}.
+% \begin{macrocode}
+\GetTitleStringExpand{#1}%
+\edef\@currentlabelname{\detokenize\expandafter{\GetTitleStringResult}}%
+\edef\@currentlabelname{%
+ \expandafter\LWR@stripperiod\@currentlabelname%
+ \ltx@empty.\ltx@empty\@nil%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{New \pkg{lwarp} labels.}
+% \label{sec:lwarplabelsetup}
+%
+% \DescribeFile{*_html.aux}
+% A new entry in \filenm{*_html.aux} is used to remember section name, file, and
+% lateximage depth and number for each label:
+% \begin{sourceverb}
+% \newlabel{<labelname>@lwarp}{{<section name>}{<filename>}
+% {<limagedepth>}{<limagenumber>}}
+% \end{sourceverb}
+%
+%
+% See: \\
+% \href{http://tex.stackexchange.com/questions/57194/extract-section-number-from-equation-reference}
+% {\ttfamily http://tex.stackexchange.com/questions/57194/ \\
+% \fqquad\ extract-section-number-from-equation-reference}
+%
+%
+% \begin{macro}{\LWR@setref} \marg{args list} \marg{selector} \marg{label}
+%
+% \cs{@setref} without the \cs{null} (\cs{hbox}), and without the
+% warning messages.
+% Each caused problems with \pkg{lwarp} references.
+% The regular reference will cause the warning.
+%
+% \changes{v0.66}{2019/01/30}{No longer use \pkg{zref}.}
+% \begin{macrocode}
+\def\LWR@setref#1#2#3{%
+ \ifx#1\relax%
+ ??%
+ \else%
+ \expandafter#2#1%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@nameref} \marg{label}
+% Returns the section name for this label:
+% \changes{v0.66}{2019/01/27}{No longer use \pkg{zref}.}
+% \begin{macrocode}
+\newcommand*{\LWR@nameref}[1]{%
+ \expandafter\LWR@setref\csname r@#1@lwarp\endcsname\LWR@firstoffour{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@htmlfileref} \marg{label}
+% Returns the file number or name for this label:
+% \changes{v0.24}{2017/03/13}{Fix: Index links while \cs{tracinglwarp}.}
+% \changes{v0.66}{2019/01/27}{No longer use \pkg{zref}.}
+% \begin{macrocode}
+\newcommand*{\LWR@htmlfileref}[1]{%
+ \expandafter\LWR@setref\csname r@#1@lwarp\endcsname\LWR@secondoffour{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@lateximagedepthref} \marg{label}
+% Returns the |lateximagedepth| for this label:
+% \changes{v0.66}{2019/01/27}{No longer use \pkg{zref}.}
+% \begin{macrocode}
+\newcommand*{\LWR@lateximagedepthref}[1]{%
+ \expandafter\LWR@setref\csname r@#1@lwarp\endcsname\LWR@thirdoffour{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\LWR@lateximagenumberref} \marg{label}
+% Returns the |lateximagenumber| for this label:
+% \changes{v0.66}{2019/01/27}{No longer use \pkg{zref}.}
+% \begin{macrocode}
+\newcommand*{\LWR@lateximagenumberref}[1]{%
+ \expandafter\LWR@setref\csname r@#1@lwarp\endcsname\LWR@fourthoffour{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@lwarplabel} \marg{label}
+% Sanitize the name and then creates the label:
+% \changes{v0.66}{2019/01/27}{No longer use \pkg{zref}.}
+% \begin{macrocode}
+\newcommand*{\LWR@lwarplabel}[1]{%
+\LWR@traceinfo{LWR@lwarplabel !#1!}%
+\LWR@setlatestname{\@currentlabelname}%
+ \@bsphack%
+ \protected@write\@auxout{}%
+ {\string\newlabel{#1@lwarp}{%
+ {\@currentlabelname}%
+ {\ifbool{FileSectionNames}{\LWR@thisfilename}{\arabic{LWR@htmlfilenumber}}}%
+ {\arabic{LWR@lateximagedepth}}%
+ {\arabic{LWR@lateximagenumber}}%
+ }}%
+ \@esphack%
+}
+% \end{macrocode}
+% \end{macro}
+%
+
+
+
+% \subsection{Labels}
+% \label{sec:labels}
+
+
+% \begin{macro}{\LWR@sublabel} \marg{label} \quad
+% Creates an \HTML\ id tag.
+%
+% \cs{detokenize} is used to allow underscores in the labels.
+% \changes{v0.45}{2017/12/29}{Fix: Labels with underscores.}
+% \begin{macrocode}
+\newcommand*{\LWR@sublabel}[1]{%
+\LWR@traceinfo{LWR@sublabel !#1!}%
+% \end{macrocode}
+% Create an \HTML\ id tag unless are inside a lateximage,
+% since it would appear in the image:
+% \begin{macrocode}
+\ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
+{}%
+{% not lateximage
+% \end{macrocode}
+% If not doing a lateximage, create an \HTML\ ID tag:
+% \changes{v0.47}{2018/01/26}{Fix: Line wrap at \HTML\ hyphen.}
+% (To be factored\dots)
+% \begin{macrocode}
+ \LWR@sanitize{#1}%
+ \ifbool{LWR@doingstartpars}%
+ {% pars allowed
+ \ifbool{LWR@doingapar}%
+ {% par started
+ \LWR@htmltag{a \LWR@print@mbox{id="\LWR@sanitized"}}\LWR@htmltag{/a}%
+ }% par started
+ {% par not started
+ \LWR@stoppars%
+ \LWR@htmltag{a \LWR@print@mbox{id="\LWR@sanitized"}}\LWR@htmltag{/a}%
+ \LWR@startpars%
+ }% par not started
+ }% pars allowed
+ {% pars not allowed
+ \LWR@htmltag{a \LWR@print@mbox{id="\LWR@sanitized"}}\LWR@htmltag{/a}%
+ }% pars not allowed
+}% not lateximage
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@new@label} \parg{bookmark} \marg{label} \oarg{type}
+%
+% \cs{label} during \HTML\ output when not in \SVG\ math mode,
+% removing extra spaces around the label, as done by a regular \LaTeX\ \cs{label}.
+%
+% The is also used during a \env{lateximage}, including \SVG\ math, since
+% the special label handling is required, but \cs{LWR@sublabel} does not
+% generate \HTML\ tags inside a \env{lateximage}.
+%
+% \pkg{clevereref} later encases this to add its own cross-referencing.
+%
+% The optional \meta{bookmark} is per the \pkg{memoir} class, and is ignored.
+%
+% The optional \meta{type} is per the \pkg{ntheorem} package, and is ignored.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@new@label}{d() m o}{%
+\LWR@traceinfo{LWR@new@label: starting}%
+\LWR@traceinfo{LWR@new@label: !#2!}%
+% \@bsphack%
+% \end{macrocode}
+% Create a traditional \LaTeX\ label, as modified by \pkg{cleveref}:
+% \begin{macrocode}
+\LWR@orig@label{#2}%
+% \end{macrocode}
+% Create a special label which holds the section number,
+% |LWR@htmlfilenumber|, |LWR@lateximagedepth|, and |LWR@lateximagenumber|:
+% \begin{macrocode}
+\LWR@traceinfo{LWR@new@label: filesectionnames is \ifbool{FileSectionNames}{true}{false}}%
+\LWR@traceinfo{LWR@new@label: LWR@thisfilename is !\LWR@thisfilename!}%
+\LWR@traceinfo{LWR@new@label: LWR@htmlfilenumber is \arabic{LWR@htmlfilenumber}}%
+\LWR@lwarplabel{#2}%
+\LWR@sublabel{#2}%
+% \@esphack%
+\LWR@traceinfo{LWR@new@label: done}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \subsection{References}
+% \label{sec:references}
+
+% \begin{macro}{\LWR@startref} \marg{label} \quad
+% (Common code for \cs{ref} and \cs{nameref}.)
+%
+% Open an \HTML\ tag reference to a filename, \# character, and a label.
+%
+% \changes{v0.28}{2017/04/13}{Removed space.}
+% \changes{v0.47}{2018/01/26}{Fix: Line wrap at \HTML\ hyphen.}
+% \changes{v0.66}{2019/01/27}{No longer use \pkg{zref}.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@startref}[1]
+{%
+\LWR@sanitize{#1}%
+\LWR@traceinfo{LWR@startref A: !#1!}%
+% \end{macrocode}
+% Create the filename part of the link:
+% \begin{macrocode}
+\LWR@htmltag{a href="%
+\LWR@traceinfo{LWR@startref B}%
+\LWR@print@mbox{\LWR@htmlrefsectionfilename{#1}}%
+\LWR@traceinfo{LWR@startref C}%
+\LWR@origpound%
+% \end{macrocode}
+% Create the destination id:
+%
+% See if |LWR@lateximagedepth| is unknown:
+% \begin{macrocode}
+\LWR@traceinfo{LWR@startref D: !#1!}%
+\ifcsundef{r@#1@lwarp}%
+% \end{macrocode}
+% ``|??|'' if |LWR@lateximagedepth| is unknown,
+% so create a link with an unknown destination:
+% \begin{macrocode}
+{%
+ \LWR@traceinfo{LWR@startref D0: ??}%
+ ??%
+}%
+% \end{macrocode}
+% If |LWR@lateximagedepth| is known.
+% Use a lateximage if the depth is greater than zero,
+% or a regular link otherwise:
+% \begin{macrocode}
+{%
+ \ifthenelse{\cnttest{\LWR@lateximagedepthref{#1}}{>}{0}}%
+ {%
+ \LWR@ImagesName\LWR@lateximagenumberref{#1}%
+ }%
+ {%
+ \LWR@traceinfo{LWR@startref D3}%
+% \end{macrocode}
+% \cs{detokenize} is used to allow underscores in the labels:
+% \changes{v0.45}{2017/12/01}{Fix: Labels with underscores.}
+% \begin{macrocode}
+ \LWR@print@mbox{\LWR@sanitized}%
+ }%
+}%
+\LWR@traceinfo{LWR@startref E}%
+% \end{macrocode}
+% Closing quote:
+% \begin{macrocode}
+"}%
+\LWR@traceinfo{LWR@startref F}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@subnewref} \marg{label} \marg{label or sub@label}
+%
+% Factored for the \pkg{subfig} package.
+% Uses the original label for the hyper-reference,
+% but prints its own text, such as ``|1(b)|''.
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@subnewref}{m m}{%
+\LWR@traceinfo{LWR@subnewref #1 #2}%
+\LWR@startref{#1}%
+\LWR@print@ref{#2}%
+\LWR@htmltag{/a}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\ref} * \marg{label} \quad
+% \cs{ref} is redefined to \cs{LWR@HTML@ref},
+% except inside the text part of a \cs{hyperref},
+% where it is redefined to \cs{LWR@ref@ignorestar}.
+% \begin{macro}{\LWR@HTML@ref} * \marg{label}
+% Create an internal document reference link,
+% or without a link if starred per \pkg{hyperref}.
+%
+% \changes{v0.58}{2018/06/07}{Improved print/\HTML\ output selection.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@ref}{s m}{%
+\LWR@traceinfo{LWR@HTML@ref !#2!}%
+\IfBooleanTF{#1}%
+{\LWR@print@ref{#2}}%
+{\LWR@subnewref{#2}{#2}}%
+}
+
+\LWR@formatted{ref}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\LWR@ref@ignorestar} * \marg{label} \quad
+% For use inside \cs{hyperref}. Ignores the star, then uses the original \cs{ref}.
+%
+% \changes{v0.57}{2018/06/05}{\pkg{subcaption}: Fix: \cs{subref}.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@ref@ignorestar}{s m}{%
+ \LWR@print@ref{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \label{sec:pagerefpagefor}
+% \begin{macro}{\pagerefPageFor} Text for page references.
+%
+% \begin{macrocode}
+\newcommand*{\pagerefPageFor}{see }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\pageref} * \marg{label} \quad
+% Create an internal document reference,
+% or just the unlinked number if starred, per \pkg{hyperref}.
+%
+% \changes{v0.20}{2017/01/03}{Added.}
+%
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@new@pageref}{s m}{%
+\IfBooleanTF{#1}%
+{(\pagerefPageFor\LWR@print@ref{#2})}%
+{(\cpageref{#2})}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\nameref} \marg{label}
+%
+% \changes{v0.43}{2017/10/31}{Made robust.}
+% \begin{macrocode}
+\newrobustcmd*{\nameref}[1]{%
+\LWR@traceinfo{nameref}%
+\LWR@startref{#1}%
+\LWR@traceinfo{nameref B}%
+\LWR@nameref{#1}%
+\LWR@traceinfo{nameref C}%
+\LWR@htmltag{/a}%
+\LWR@traceinfo{nameref: done}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \begin{macro}{\Nameref} \marg{label}
+% In print, adds the page number. In \HTML, does not.
+% \begin{macrocode}
+\LetLtxMacro\Nameref\nameref
+% \end{macrocode}
+% \end{macro}
+
+% \subsection{Hyper-references}
+%
+% Note that the code currently only sanitizes the underscore character.
+% \watchout
+% Additional characters should be rendered inert as well.
+% See the |hyperref.sty| definition of \cs{gdef}\cs{hyper@normalise} for an example.
+%
+
+% \DescribePackage{hyperref}
+
+% Do not tell other packages that \pkg{hyperref} is emulated.
+% \watchout
+% Some packages patch various commands if \pkg{hyperref} is present,
+% which will probably break something, and the emulation already handles
+% whatever may be emulated anyhow.
+%
+% \begin{macrocode}
+% DO NOT TELL OTHER PACKAGES TO ASSUME HYPERREF, lest they attempt to patch it:
+% \EmulatesPackage{hyperref}[2015/08/01]% Disabled. Do not do this.
+% \end{macrocode}
+
+
+
+% Emulates \pkg{hyperref}:
+% \begin{macro}{\@currentHref} Added to support \pkg{backref}.
+% \changes{v0.45}{2018/01/14}{Added.}
+% \begin{macrocode}
+\AtBeginDocument{
+\def\@currentHref{%
+autopage-\theLWR@currentautosec%
+}
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \begin{macro}{\LWR@subhyperref} \marg{URL}
+%
+% Starts a link for \cs{LWR@hrefb}.
+% A group must have been opened first, with nullified catcodes.
+% The text name is printed afterwards, after the group is closed and catcodes restored.
+%
+% \changes{v0.18}{2016/04/14}{Improved \HTML\ output linebreaks.}
+% \changes{v0.45}{2017/12/29}{Improved URLs with underscores.}
+% \changes{v0.57}{2018/06/05}{Fix: Text catcodes.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@subhyperref}{m}{%
+\LWR@traceinfo{LWR@subhyperref !#1!}%
+\LWR@sanitize{#1}%
+\LWR@htmltag{%
+ a href="\LWR@sanitized" % space
+ target="\_{}blank" % space
+}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@subhyperreftext} \marg{text}
+%
+% Finishes the hyperref for \cs{LWR@hrefb}. Catcodes must have been restored already.
+% To be used after \cs{LWR@subhyperref}, and after its group has been closed.
+%
+% \changes{v0.57}{2018/06/05}{Fix: Text catcodes.}
+% \begin{macrocode}
+\newcommand{\LWR@subhyperreftext}[1]{%
+#1%
+\LWR@htmltag{/a}%
+\LWR@ensuredoingapar%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@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.}
+% \changes{v0.66}{2019/02/02}{Improved \HTML\ formatting.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@subhyperrefclass}{m +m m}{%
+\LWR@htmltag{%
+ a % space
+ href="\begingroup\@sanitize#1\endgroup" % space
+ class="#3" % space
+}\LWR@orignewline%
+#2\LWR@orignewline%
+\LWR@htmltag{/a}%
+\LWR@ensuredoingapar%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \begin{macro}{\href} \oarg{options} \marg{URL}
+%
+% Create a link with accompanying text:
+%
+% \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.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\LWR@hrefb}{O{} m}{%
+\LWR@ensuredoingapar%
+\LWR@subhyperref{#2}%
+\endgroup% restore catcodes
+\LWR@subhyperreftext%
+}
+
+\newrobustcmd*{\href}{%
+\begingroup%
+\catcode`\#=12%
+\catcode`\%=12%
+\catcode`\&=12%
+\catcode`\~=12%
+\catcode`\_=12%
+\LWR@hrefb%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\nolinkurl} \marg{URL}
+%
+% Print the name of the link without creating the link:
+% \changes{v0.43}{2017/10/31}{Made robust.}
+% \changes{v0.45}{2017/12/29}{Fix: Underscore in \URL.}
+% \changes{v0.52}{2018/03/26}{Fix: \progcode{\#}, \progcode{\%}, \progcode{\&}, \progcode{\~}, \progcode{\_} in \URL.}
+% \begin{macrocode}
+\newcommand*{\LWR@nolinkurlb}[1]{%
+\LWR@ensuredoingapar%
+\def\LWR@templink{#1}%
+\@onelevel@sanitize\LWR@templink%
+\LWR@templink%
+\endgroup%
+}
+
+\newrobustcmd*{\nolinkurl}{%
+\begingroup%
+\catcode`\#=12%
+\catcode`\%=12%
+\catcode`\&=12%
+\catcode`\~=12%
+\catcode`\_=12%
+\LWR@nolinkurlb%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\url} \marg{URL}
+%
+% Create a link whose text name is the address of the link.
+%
+% The \pkg{url} package may redefine \cs{url}, so it is \cs{let} to \cs{LWR@urla}here
+% and also redefined by \pkg{lwarp-url}.
+%
+% \changes{v0.43}{2017/10/31}{Made robust.}
+% \changes{v0.45}{2017/12/29}{Improved URLs with underscores.}
+% \changes{v0.49}{2018/02/18}{Fix: Adapt to classes.}
+% \changes{v0.52}{2018/03/26}{Fix: \progcode{\#}, \progcode{\%}, \progcode{\&}, \progcode{\~}, \progcode{\_} in \URL.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\LWR@urlb}{m}{%
+\LWR@ensuredoingapar%
+\def\LWR@templink{#1}%
+\@onelevel@sanitize\LWR@templink%
+\href{\LWR@templink}{\LWR@templink}%
+\endgroup%
+}
+
+\newrobustcmd*{\url}{%
+\begingroup%
+\catcode`\#=12%
+\catcode`\%=12%
+\catcode`\&=12%
+\catcode`\~=12%
+\catcode`\_=12%
+\LWR@urlb%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@subinlineimage} \oarg{alttag} \marg{class}
+% \marg{filename} \marg{extension} \marg{style}
+%
+% \changes{v0.18}{2016/05/18}{Suppress extra space.}
+% \changes{v0.66}{2019/02/02}{Improved \HTML\ formatting.}
+% \begin{macrocode}
+\newcommand*{\LWR@subinlineimage}[5][]{%
+\ifblank{#1}%
+{%
+ \LWR@htmltag{img \LWR@indentHTML
+ src="#3.#4" \LWR@indentHTML
+ alt="#3" \LWR@indentHTML
+ style="#5" \LWR@indentHTML
+ class="#2" \LWR@orignewline
+ }%
+}%
+{%
+ \LWR@htmltag{img \LWR@indentHTML
+ src="#3.#4" \LWR@indentHTML
+ alt="#1" \LWR@indentHTML
+ style="#5" \LWR@indentHTML
+ class="#2" \LWR@orignewline
+ }%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \clearpage
+
+% \section{Floats}
+% \label{sec:floats}
+
+% Floats are supported, although partially through emulation.
+%
+% \Cref{tab:floatdata} shows the data structure associated with each |<type>|
+% of float.
+
+% \changes{v0.14}{2016/03/28}{Docs: Table: Float data structures.}
+% \begin{table}
+% \caption{Float data structures\label{tab:floatdata}}
+%
+% \bigskip
+% For each |<type>| of float (figure, table, etc.) there exists the following:
+%
+% \hrule
+% \begin{description}
+% \item [counter \progcode{<type>}:] A counter called |<type>|, such as |figure|, |table|.
+% \item [\cs{<type>name}:] Name. \cs{figurename} prints ``Figure'', etc.%
+% \item [\cs{ext@<type>}:] File extension. \cs{ext@figure} prints ``lof'', etc.
+% \item [\cs{fps@<type>}:] Placement.
+% \item [\cs{the<type>}:] Number. \cs{thetable} prints the number of the table, etc.
+% \item [\cs{p@<type>}:] Parent's number.
+% Prints the number of the [within] figure, etc.
+% \item [\cs{fnum@<type>}:] Prints the figure number for the caption. \\
+% \cs{<type>name}~\cs{the<type>}, ``Figure 123''.
+% \item [\cs{<type>}:] Starts the float environment. |\figure| or |\begin{figure}|
+% \item [\cs{end<type>}:] Ends the float environment. |\endfigure| or |\end{figure}|
+% \item [\cs{tf@<ext>}:] The \LaTeX{} file identifier for the output file.
+% \item [\progcode{LWR@have<type>}:] A boolean remembering whether a \cs{listof} was
+% requested for a float of this type.
+% \item [File with extension \filenm{lo<f,t,a-z>}:] An output file containing
+% the commands to build the
+% \cs{listof<type>} ``table-of-contents'' structure.
+% \item [Cross-referencing names:] For \pkg{cleveref}'s \cs{cref} and related,
+% \cs{crefname} and \cs{Crefname} assign human-readable names for references to this float type.
+% \end{description}
+% \hrule
+% \end{table}
+%
+% \cs{@makecaption} is redefined to print the float number and caption text,
+% separated by \cs{CaptionSeparator}, which works with the \pkg{babel} package to
+% adjust the caption separator according to the language. French, for example,
+% uses an en-dash instead of a colon: ``Figure 123 -- Caption text''.
+
+
+% \subsection{Float environment}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@floatbegin} \marg{type} \oarg{placement} \qquad
+% Begins a \cs{newfloat} environment.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@floatbegin}{m o}{%
+\ifbool{FormatWP}{\newline}{}%
+\LWR@stoppars
+% \end{macrocode}
+% There is a new float, so increment the unique float counter:
+% \begin{macrocode}
+\addtocounter{LWR@thisautoid}{1}%
+\booltrue{LWR@freezethisautoid}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\begingroup%
+% \end{macrocode}
+% Settings while inside the environment:
+% \begin{macrocode}
+\LWR@print@raggedright%
+% \end{macrocode}
+% Open an \HTML\ |figure| tag.
+% The figure is assigned a \attribute{class} equal to its type,
+% and another class according to the \pkg{float} package style, if used.
+% Note that \cs{csuse} returns an empty string if \cs{LWR@floatstyle@<type>}
+% is not defined.
+% \changes{v0.42}{2017/10/26}{If \progcode{FormatWP} add a text frame.}
+% \changes{v0.47}{2018/01/26}{Fix: Line wrap at \HTML\ hyphen.}
+% \changes{v0.56}{2018/05/14}{Adds a \element{class} per \pkg{float} package style.}
+% \begin{macrocode}
+\LWR@htmltag{%
+ figure id="\LWR@print@mbox{autoid-\arabic{LWR@thisautoid}}" % space
+ class="#1 \@nameuse{LWR@floatstyle@#1}"%
+}%
+\ifbool{FormatWP}{%
+ \LWR@orignewline%
+ \LWR@BlockClassWP{}{}{wp#1}%
+}{}%
+% \end{macrocode}
+% Update the caption type:
+% \begin{macrocode}
+\renewcommand*{\@captype}{#1}%
+\caption@settype{#1}%
+% \end{macrocode}
+% Mark the float for a word processor conversion:
+% \begin{macrocode}
+\LWR@startpars%
+\ifboolexpr{bool{FormatWP} and bool{WPMarkFloats}}{%
+
+=== begin #1 ===
+
+}{}%
+% \end{macrocode}
+% Look for \cs{centering}, etc:
+% \changes{v0.54}{2018/04/19}{Honor \cs{centering}, etc. in floats.}
+% \changes{v0.55}{2018/04/24}{Fix: Float optional args.}
+% \begin{macrocode}
+\LWR@futurenonspacelet\LWR@mynexttoken\LWR@floatalignment%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% For \pkg{koma-script}. The following does not work for tables.
+% \changes{v0.55}{2018/04/25}{Fix: \cs{centering}, etc. for \pkg{koma-script}.}
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifpackageloaded{tocbasic}{
+\appto\figure@atbegin{%
+\LWR@futurenonspacelet\LWR@mynexttoken\LWR@floatalignment%
+}
+}{}
+}
+% \end{macrocode}
+%
+%
+%
+% \begin{macro}{\@float}
+% \begin{macro}{\@dlbfloat} Support packages which create floats directly.
+% \begin{macrocode}
+\let\@float\LWR@floatbegin
+\let\@dblfloat\LWR@floatbegin
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@floatend}
+%
+% Ends a \cs{newfloat} environment.
+% \begin{macrocode}
+\newcommand*{\LWR@floatend}{%
+% \end{macrocode}
+% If saw a \cs{centering}, finish the \env{center} environment:
+% \changes{v0.54}{2018/04/19}{Honor \cs{centering}, etc. in floats.}
+% \begin{macrocode}
+\LWR@endfloatalignment%
+% \end{macrocode}
+% Mark the float end for a word processor conversion:
+% \begin{macrocode}
+\ifboolexpr{bool{FormatWP} and bool{WPMarkFloats}}{%
+
+=== end ===
+
+}{}%
+\LWR@stoppars%
+% \end{macrocode}
+% Close an \HTML\ |figure| tag:
+% \changes{v0.42}{2017/10/26}{If \progcode{FormatWP} add a text frame.}
+% \begin{macrocode}
+\ifbool{FormatWP}{\endLWR@BlockClassWP}{}%
+\LWR@htmlelementend{figure}%
+\endgroup%
+\boolfalse{LWR@freezethisautoid}%
+\LWR@startpars%
+\ifbool{FormatWP}{\newline}{}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\end@float}
+% \begin{macro}{\end@dlbfloat} Support packages which create floats directly.
+% \begin{macrocode}
+\let\end@float\LWR@floatend
+\let\end@dblfloat\LWR@floatend
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+
+
+% \subsection{Float tracking}
+%
+% \DescribeCounter{LWR@thisautoid}
+% A sequential counter for all floats and theorems.
+% This is used to identify the float or theorem
+% then reference it from the List of Figures and
+% List of Tables.
+% \begin{macrocode}
+\newcounter{LWR@thisautoid}
+% \end{macrocode}
+
+% \DescribeCounter{LWR@thisautoidWP}
+% A sequential counter for all word processor conversion \element{div}s.
+% This is used to convince \brand{LibreOffice} to form a frame around this element.
+% \changes{v0.45}{2017/12/09}{Separate \ctr{LWR@thisautoidWP} for word processor \element{div}s.}
+% \begin{macrocode}
+\newcounter{LWR@thisautoidWP}
+% \end{macrocode}
+
+% \DescribeBoolean{LWR@freezethisautoid}
+% Prevents multiple increments of \cs{LWR@thisautoid} inside a float.
+% \begin{macrocode}
+\newbool{LWR@freezethisautoid}
+\boolfalse{LWR@freezethisautoid}
+% \end{macrocode}
+
+% \begin{macro}{\LWR@newautoidanchor}
+% Adds a new \element{autoid} anchor.
+% \changes{v0.45}{2017/12/07}{Fix: No anchor if frozen autoid.}
+% \changes{v0.47}{2018/01/26}{Fix: Line wrap at \HTML\ hyphen.}
+% \changes{v0.51}{2018/03/16}{Fix: No autoid is inside a \env{lateximage}.}
+% \begin{macrocode}
+\newcommand*{\LWR@newautoidanchor}{%
+\ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
+{}%
+{%
+ \ifbool{LWR@freezethisautoid}{}{%
+ \addtocounter{LWR@thisautoid}{1}%
+ \LWR@htmltag{a id="\LWR@print@mbox{autoid-\arabic{LWR@thisautoid}}"}%
+ \LWR@htmltag{/a}%
+ }%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\@captype}
+% Remembers which float type is in use.
+% \begin{macrocode}
+\newcommand*{\@captype}{}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@floatalignmentname}
+% Set to |center|, |flushleft|, or |flushright| if saw
+% \cs{centering}, \cs{raggedright}, or \cs{raggedleft}.
+% \begin{macrocode}
+\newcommand*{\LWR@floatalignmentname}{}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@floatalignment}
+% If sees a \cs{centering}, \cs{raggedleft}, or \cs{raggedright},
+% creates a \env{center}, \env{flushright}, or \env{flushleft} environment.
+% \changes{v0.54}{2018/04/19}{Honor \cs{centering}, etc. in floats.}
+% \begin{macrocode}
+\newcommand*{\LWR@floatalignment}{%
+\ifdefstrequal{\LWR@mynexttoken}{\centering}{%
+ \center%
+ \renewcommand*{\LWR@floatalignmentname}{center}%
+}{}%
+\ifdefstrequal{\LWR@mynexttoken}{\raggedright}{%
+ \flushleft%
+ \renewcommand*{\LWR@floatalignmentname}{flushleft}%
+}{}%
+\ifdefstrequal{\LWR@mynexttoken}{\raggedleft}{%
+ \flushright%
+ \renewcommand*{\LWR@floatalignmentname}{flushright}%
+}{}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@endfloatalignment}
+% Closes an environment from \cs{LWR@floatalignment}.
+% \changes{v0.54}{2018/04/19}{Honor \cs{centering}, etc. in floats.}
+% \begin{macrocode}
+\newcommand*{\LWR@endfloatalignment}{%
+\ifdefvoid{\LWR@floatalignmentname}{}{\@nameuse{end\LWR@floatalignmentname}}%
+\renewcommand*{\LWR@floatalignmentname}{}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Caption inside a float environment}
+
+% \begin{macro}{\CaptionSeparator} How to separate the float number and the caption text.
+% \changes{v0.13}{2016/03/23}{Fix for newer babel package.}
+% \begin{macrocode}
+\AtBeginDocument{\providecommand*{\CaptionSeparator}{:~}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@makecaption} \marg{name and num} \marg{text}
+%
+% Prints the float type and number, the caption separator, and the caption text.
+% \begin{macrocode}
+\AtBeginDocument{\renewcommand{\@makecaption}[2]{%
+ \LWR@traceinfo{@makecaption}%
+ \LWR@isolate{#1}\CaptionSeparator\LWR@isolate{#2}%
+ \LWR@traceinfo{@makecaption: done}%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Caption and \LOF\ linking and tracking}
+
+% When a new \HTML\ file is marked in the \LaTeX\ \PDF\ file,
+% the \LaTeX\ page number at that point is stored in |LWR@latestautopage|,
+% (and the associated filename is remembered by the special \LaTeX\ labels).
+% This page number is used to generate an |autopage| \HTML\ \element{id}
+% in the \HTML\ output at the start of the new \HTML\ file.
+% Meanwhile, there is a float counter used to generate an \HTML\ |autoid|
+% \element{id} at the start of the float itself in the \HTML\ file.
+% The |autopage| and |autoid| values to use for each float are written to the
+% |.lof|, etc. files just before each float's entry. These values are used
+% by \cs{l@figure}, etc. to create the \HTML\ links in the List of Figures, etc.
+%
+% \DescribeCounter{LWR@nextautoid} Tracks |autoid| for floats.
+% \DescribeCounter{LWR@nextautopage} Tracks |autopage| for floats.
+%
+% These are updated per float as the |.lof|, |.lot| file is read.
+% \begin{macrocode}
+\newcounter{LWR@nextautoid}
+\newcounter{LWR@nextautopage}
+% \end{macrocode}
+%
+%
+%
+% \begin{macro}{\LWRsetnextfloat} \marg{autopage} \marg{float autoid}
+%
+% \DescribeFile{*_html.lof}
+% \DescribeFile{*_html.lot}
+% This is written to the \filenm{*_html.lof} or \filenm{*_html.lot} file
+% just before each float's usual entry.
+% The |autopage| and the float's |autoid| are remembered for \cs{l@figure} to use when
+% creating the \HTML\ links.
+%
+% \begin{macrocode}
+\newcommand*{\LWRsetnextfloat}[2]{%
+ \setcounter{LWR@nextautopage}{#1}%
+ \setcounter{LWR@nextautoid}{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \DescribeCounter{LWR@latestautopage}
+% Updated each time a new \HTML\ file is begun.
+% \cs{LWRsetnextfloat} is written with this and the |autoid|
+% by the modified \cs{addcontentsline} just before each float's entry.
+% \begin{macrocode}
+\newcounter{LWR@latestautopage}
+\setcounter{LWR@latestautopage}{1}
+% \end{macrocode}
+
+
+% \begin{environment}{LWR@figcaption}
+%
+% An \HTML\ \element{figcaption} is not allowed in places where
+% \LaTeX\ does allow a figure caption, such as inside a \env{longtable}
+% where the tabular has already started, or inside a \env{center} environment.
+% Therefore, a \element{div} of class \attribute{figurecaption} is used
+% instead.
+% \changes{v0.42}{2017/10/20}{If \progcode{FormatWP} forces italic captions.}
+% \changes{v0.65}{2018/12/21}{Uses \element{figurecaption} instead of \element{figcaption}.}
+% \begin{macrocode}
+\newenvironment*{LWR@figcaption}
+ {
+ \ifbool{FormatWP}{%
+ \BlockClass[font-style:italic]{figurecaption}
+% \LWR@print@vspace*{\baselineskip}
+ }{
+ \BlockClass{figurecaption}
+ }%
+ }
+ {\endBlockClass}
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \begin{macro}{\LWR@HTML@caption@begin} \marg{type}
+%
+% Low-level code to create \HTML\ tags for captions.
+%
+% The print versions are from the \pkg{caption} package.
+%
+% \changes{v0.47}{2018/01/28}{Fix: Argument passed to \cs{LWR@origcaption@begin}.}
+% \changes{v0.58}{2018/06/07}{Improved print/\HTML\ output selection.}
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@caption@begin}[1]
+{%
+\LWR@traceinfo{LWR@HTML@caption@begin}%
+% \end{macrocode}
+% Keep par and minipage changes local:
+% \begin{macrocode}
+\begingroup%
+% \end{macrocode}
+% No need for a |minipage| or \cs{parbox} inside the caption:
+% \begin{macrocode}
+\RenewDocumentEnvironment{minipage}{O{t} o O{t} m}{}{}%
+\RenewDocumentCommand{\parbox}{O{t} O{} O{t} m +m}{##5}%
+% \end{macrocode}
+% Enclose the original caption code inside an \HTML\ tag:
+% \begin{macrocode}
+\LWR@figcaption%
+\LWR@traceinfo{LWR@HTML@caption@begin: about to LWR@origcaption@begin}%
+\LWR@print@caption@begin{#1}%
+\LWR@traceinfo{LWR@HTML@caption@begin: done}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@HTML@caption@end}
+% Low-level patches to create \HTML\ tags for captions.
+% \changes{v0.58}{2018/06/07}{Improved print/\HTML\ output selection.}
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@caption@end}
+{%
+\LWR@traceinfo{LWR@HTML@caption@end}%
+\LWR@print@caption@end%
+% \end{macrocode}
+% Closing tag:
+% \begin{macrocode}
+\endLWR@figcaption%
+\endgroup%
+% \leavevmode% avoid bad space factor (0) error
+\LWR@traceinfo{LWR@HTML@caption@end: done}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\caption@begin}
+% \begin{macro}{\caption@end}
+% Low-level patches to create \HTML\ tags for captions.
+% These are assigned \cs{AtBeginDocument} so that other packages
+% which modify captions will have already been loaded before saving the
+% print-mode version.
+% \begin{macrocode}
+\AtBeginDocument{
+\LWR@formatted{caption@begin}
+\LWR@formatted{caption@end}
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+
+
+% \begin{macro}{\captionlistentry}
+% Tracks the float number for this caption used outside a float.
+% Patched to create an \HTML\ anchor.
+% \changes{v0.47}{2018/01/26}{Fix: Line wrap at \HTML\ hyphen.}
+% \begin{macrocode}
+\let\LWR@origcaptionlistentry\captionlistentry
+
+\renewcommand*{\captionlistentry}{%
+\LWR@ensuredoingapar%
+\LWR@origcaptionlistentry%
+}
+
+\def\LWR@LTcaptionlistentry{%
+\LWR@ensuredoingapar%
+\LWR@htmltag{a id="\LWR@print@mbox{autoid-\arabic{LWR@thisautoid}}"}\LWR@htmltag{/a}%
+ \bgroup
+ \@ifstar{\egroup\LWR@LT@captionlistentry}% gobble *
+ {\egroup\LWR@LT@captionlistentry}}%
+\def\LWR@LT@captionlistentry#1{%
+ \caption@listentry\@firstoftwo[\LTcaptype]{#1}}%
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\addcontentsline}
+% Patched to write the |autopage| and |autoid| before each float's entry.
+% No changes if writing |.toc|
+% For a theorem, automatically defines \cs{ext@<type>} as needed, to
+% mimic and reuse the float mechanism.
+%
+% \changes{v0.25}{2017/03/16}{Handles theorems.}
+% \changes{v0.44}{2017/11/10}{Automatic \cs{LWR@newfloatanchor}.}
+%f
+% \begin{macrocode}
+\let\LWR@origaddcontentsline\addcontentsline
+
+\renewcommand*{\addcontentsline}[3]{%
+\ifstrequal{#1}{toc}{}{% not TOC
+% \end{macrocode}
+% \changes{v0.51}{2018/03/11}{No anchor ID if inside \SVG\ image.}
+% \begin{macrocode}
+\ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
+ {}%
+ {\LWR@newautoidanchor}%
+% \end{macrocode}
+% \changes{v0.51}{2018/03/11}{Add missing support for float mechanism if necessary.}
+% \begin{macrocode}
+ \ifcsvoid{ext@#2}{\csdef{ext@#2}{#1}}{}%
+% \end{macrocode}
+% \begin{macrocode}
+ \addtocontents{\@nameuse{ext@#2}}{%
+ \protect\LWRsetnextfloat%
+ {\arabic{LWR@latestautopage}}%
+ {\arabic{LWR@thisautoid}}%
+ }%
+}% not TOC
+\LWR@origaddcontentsline{#1}{#2}{#3}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \DescribePackage{capt-of}
+% \DescribePackage{caption} Either package provides \cs{captionof}, which
+% is later patched at the beginning of the document.
+%
+% \begin{macro}{\captionof}
+% Patched to handle paragraph tags.
+% \begin{macrocode}
+\AtBeginDocument{
+\let\LWR@origcaptionof\captionof
+
+\renewcommand*{\captionof}{%
+\LWR@stoppars%
+\LWR@origcaptionof%
+}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+
+% \section{Table of Contents, LOF, LOT}
+%
+% This section controls the generation of the \TOC, \LOF, and \LOT.
+%
+% The |.toc|, |.lof|, and |.lot| files are named by the source code \cs{jobname}.
+%
+% In \HTML, the printed tables are placed inside a \element{div}
+% of class \attribute{toc}, \attribute{lof}, or \attribute{lot}.
+%
+% A ``sidetoc'' is provided which prints a subset of the \TOC\ on the side of each page other
+% than the homepage.
+%
+% The regular \LaTeX{} infrastructure is used for \TOC,
+% along with some patches to generate \HTML\ output.
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% \subsection{Reading and printing the \TOC}
+
+% \begin{macro}{\LWR@myshorttoc} \marg{toc/lof/lot/sidetoc}
+% \changes{v0.18}{2016/05/19}{Reorganize \cs{HomeHTMLFilename} logic.}
+%
+% Reads in and prints the \TOC/\LOF/\LOT\ at the current position.
+% While doing so, makes the |@| character into a normal letter to allow
+% formatting commands in the section names.
+%
+% Unlike in regular \LaTeX{}, the file is not reset after being read, since
+% the side\TOC\ may be referred to again in each \HTML\ page.
+% \begin{macrocode}
+\newcommand*{\LWR@myshorttoc}[1]{%
+\LWR@traceinfo{LWR@myshorttoc: #1}%
+\LWR@ensuredoingapar%
+% \end{macrocode}
+% Only if the file exists:
+% \begin{macrocode}
+\IfFileExists{\jobname.#1}{%
+\LWR@traceinfo{LWR@myshorttoc: loading}%
+% \end{macrocode}
+%
+% Many of the commands in the file will have |@| characters in them, so |@|
+% \watchout
+% must be made a regular letter.
+% \begin{macrocode}
+\begingroup%
+\makeatletter%
+% \end{macrocode}
+% Read in the \TOC\ file:
+% \begin{macrocode}
+\@input{\jobname.#1}%
+\endgroup%
+}%
+{}%
+\LWR@traceinfo{LWR@myshorttoc: done}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@subtableofcontents} \marg{toc/lof/lot} \marg{sectionstarname}
+%
+% Places a \TOC/\LOF/\LOT\ at the current position.
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@subtableofcontents}{m m}{%
+% \end{macrocode}
+% Closes previous levels:
+% \begin{macrocode}
+\@ifundefined{chapter}
+{\LWR@closeprevious{section}}
+{\LWR@closeprevious{chapter}}
+% \end{macrocode}
+% Prints any pending footnotes so that they appear above the potentially
+% large \TOC:
+% \begin{macrocode}
+\LWR@printpendingfootnotes
+% \end{macrocode}
+% Place the list into its own chapter (if defined) or section:
+% \begin{macrocode}
+\@ifundefined{chapter}{\section*{#2}}{\chapter*{#2}}
+% \end{macrocode}
+% Create a new \HTML\ |nav| containing the \TOC/\LOF/\LOT:
+% \begin{macrocode}
+\LWR@htmlelementclass{nav}{#1}
+% \end{macrocode}
+% Create the actual list:
+% \begin{macrocode}
+\LWR@myshorttoc{#1}
+% \end{macrocode}
+% Close the |nav|:
+% \begin{macrocode}
+\LWR@htmlelementclassend{nav}{#1}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@starttoc} \marg{ext}
+%
+% Patch \cs{@starttoc} to encapsulate the \TOC\ inside \HTML\ tags:
+% \begin{macrocode}
+\let\LWR@orig@starttoc\@starttoc
+
+\renewcommand{\@starttoc}[1]{
+\LWR@htmlelementclass{nav}{#1}
+\LWR@orig@starttoc{#1}
+\LWR@htmlelementclassend{nav}{#1}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \DescribeBoolean{LWR@copiedsidetoc} Used to only copy the
+% \TOC\ file to the sidetoc a single time.
+%
+% (\pkg{listings} and perhaps other packages would re-use \cs{tableofcontents}
+% for their own purposes, causing the sidetoc to be copied more than once, and
+% thus end up empty.)
+% \changes{v0.45}{2017/12/09}{Fix: Empty sidetoc.}
+% \begin{macrocode}
+\newbool{LWR@copiedsidetoc}
+\boolfalse{LWR@copiedsidetoc}
+% \end{macrocode}
+%
+%
+%
+% \begin{macro}{\tableofcontents}
+% Patch \cs{tableofcontents}, etc. to print footnotes first.
+% \pkg{newfloat} uses \cs{listoffigures} for all future float types.
+% \changes{v0.45}{2017/12/07}{Fix: Patch \cs{AtBeginDocument}.}
+% \changes{v0.45}{2017/12/09}{Fix: Empty sidetoc.}
+% \begin{macrocode}
+\AtBeginDocument{
+\let\LWR@origtableofcontents\tableofcontents
+
+\renewcommand*{\tableofcontents}{%
+% \end{macrocode}
+% Do not print the table of contents if formatting for a word processor,
+% which will presumably auto-generate its own updated table of contents:
+% \changes{v0.42}{2017/10/18}{Added boolean \progcode{WPMarkTOC}.}
+% \begin{macrocode}
+\ifboolexpr{bool{FormatWP} and bool{WPMarkTOC}}{
+
+=== table of contents ===
+
+}
+{
+% \end{macrocode}
+% Copy the |.toc| file to |.sidetoc| for printing the side\TOC.
+% The original |.toc| file is renewed when \cs{tableofcontents} is finished.
+% \begin{macrocode}
+ \ifbool{LWR@copiedsidetoc}{}{%
+ \LWR@copyfile{\jobname.toc}{\jobname.sidetoc}%
+ \booltrue{LWR@copiedsidetoc}%
+ }%
+ \LWR@printpendingfootnotes
+ \LWR@origtableofcontents
+}
+}% \tableofcontents
+}% AtBeginDocument
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\listoffigures}
+% \changes{v0.42}{2017/10/18}{Added boolean \progcode{WPMarkLOFT}.}
+% \begin{macrocode}
+\let\LWR@origlistoffigures\listoffigures
+
+\renewcommand*{\listoffigures}{
+\ifboolexpr{bool{FormatWP} and bool{WPMarkLOFT}}{
+
+=== list of figures ===
+
+}
+{
+ \LWR@printpendingfootnotes
+ \LWR@origlistoffigures
+}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\listoftables}
+% \changes{v0.42}{2017/10/18}{Added boolean \progcode{WPMarkLOFT}.}
+% \begin{macrocode}
+\let\LWR@origlistoftables\listoftables
+
+\renewcommand*{\listoftables}{
+\ifboolexpr{bool{FormatWP} and bool{WPMarkLOFT}}{
+
+=== list of tables ===
+
+}
+{
+ \LWR@printpendingfootnotes
+ \LWR@origlistoftables
+}
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{High-level \TOC\ commands}
+
+% \label{sec:listof}
+% \begin{macro}{\listof} \marg{type} \marg{title}
+%
+% Emulate the \cs{listof} command from the \pkg{float} package (\cref{sec:newfloat}).
+% Used to create lists of custom float types. Also used to redefine
+% the standard \LaTeX{} \cs{listoffigures} and \cs{listoftables} commands.
+%
+% \changes{v0.57}{2018/05/26}{Fix: Provide \cs{l@name} if not defined.}
+% \changes{v0.61}{2018/09/26}{Fix: \pkg{newfloat} lists.}
+% \begin{macrocode}
+\NewDocumentCommand{\listof}{m +m}{%
+\@ifundefined{l@#1}{%
+ \csdef{l@#1}##1##2{\hypertocfloat{1}{#1}{\@nameuse{ext@#1}}{##1}{##2}}%
+}{}%
+\LWR@subtableofcontents{\@nameuse{ext@#1}}{#2}
+\expandafter\newwrite\csname tf@\csname ext@#1\endcsname\endcsname
+\immediate\openout \csname tf@\csname ext@#1\endcsname\endcsname
+ \jobname.\@nameuse{ext@#1}\relax
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Side \TOC}
+% \label{sec:sidetoc}
+
+% The ``side \TOC'' is a table-of-contents positioned to the side.
+%
+% It may be renamed by redefining \cs{sidetocname}, and may contain paragraphs.
+%
+% \CSS\ may be used to format the side\TOC:
+%
+% \begin{docsidebar}[CSS related to side\TOC:]
+% \vspace*{-\baselineskip}
+% \begin{description}[parsep=0ex]
+% \vspace*{-\baselineskip}
+% \item [|div.sidetoccontainer|:] The entire side\TOC.
+% \item [|div.sidetoctitle|:] The title.
+% \item [|div.sidetoccontents|:] The table of contents.
+% \end{description}
+% \vspace*{-\baselineskip}
+% \end{docsidebar}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+
+% \DescribeCounter{SideTOCDepth}
+% Controls how deep the side-TOC gets. Use a standard \LaTeX{} section level
+% similar to |tocdepth|.
+% \begin{macrocode}
+\newcounter{SideTOCDepth}
+\setcounter{SideTOCDepth}{1}
+% \end{macrocode}
+
+% \begin{macro}{\sidetocname}
+% Holds the default name for the side\TOC.
+%
+% \begin{macrocode}
+\newcommand{\sidetocname}{Contents}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{macro}{\LWR@sidetoc}
+% Creates the actual side-TOC.
+% \begin{macrocode}
+\newcommand*{\LWR@sidetoc}{
+\LWR@forcenewpage
+\LWR@stoppars
+
+% \end{macrocode}
+% The entire side\TOC\ is placed into a |nav| of class |sidetoc|.
+% \begin{macrocode}
+\LWR@htmlelementclass{div}{sidetoccontainer}
+\LWR@htmlelementclass{nav}{sidetoc}
+
+\setcounter{tocdepth}{\value{SideTOCDepth}}
+
+% \end{macrocode}
+% The title is placed into a \element{div} of class \attribute{sidetoctitle}, and may
+% contain paragraphs.
+% \begin{macrocode}
+\begin{BlockClass}{sidetoctitle}
+\ifcsvoid{thetitle}{}{\InlineClass{sidetocthetitle}{\thetitle}\par}
+\sidetocname
+\end{BlockClass}
+% \end{macrocode}
+% The table of contents is placed into a \element{div} of class \attribute{sidetoccontents}.
+% \begin{macrocode}
+\begin{BlockClass}{sidetoccontents}
+\LinkHome
+
+\LWR@myshorttoc{sidetoc}
+\end{BlockClass}
+\LWR@htmlelementclassend{nav}{sidetoc}
+\LWR@htmlelementclassend{div}{sidetoccontainer}
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+
+% \subsection{Low-level \TOC\ line formatting}
+
+% \begin{macro}{\numberline} \marg{number}
+%
+% (Called from each line in the |.aux|, |.lof| files.)
+%
+% Record this section number for further use:
+%
+% \changes{v0.38}{2017/08/21}{Added trailing \cs{quad}.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@numberline}[1]{%
+\LWR@sectionnumber{#1}\quad%
+}
+
+\LetLtxMacro\numberline\LWR@numberline
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@maybetocdata} Replaced by \pkg{tocdata}. Adds author name.
+% \changes{v0.69}{2019/03/21}{Added support for \pkg{tocdata}.}
+% \begin{macrocode}
+\newcommand*{\LWR@maybetocdata}{}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\hypertoc} \marg{1: depth} \marg{2: type} \marg{3: name} \marg{4: page}
+%
+% Called by \cs{l@section}, etc. to create a hyperlink to a section.
+%
+% The |autopage| label is always created just after the section opens.
+%
+% \begin{description}
+% \item[\#1] is depth
+% \item[\#2] is |section|, |subsection|, etc.
+% \item[\#3] the text of the caption
+% \item[\#4] page number
+% \end{description}
+% \begin{macrocode}
+\NewDocumentCommand{\hypertoc}{m m +m m}{%
+\LWR@traceinfo{hypertoc !#1!#2!#3!#4!}%
+% \end{macrocode}
+% Respond to |tocdepth|:
+% \begin{macrocode}
+\ifthenelse{\cnttest{#1}{<=}{\value{tocdepth}}}%
+ {%
+ \LWR@startpars%
+% \end{macrocode}
+%
+% Create an \HTML\ link to |<filename>#autosec-(page)|, with the name,
+% of the given \HTML\ class.
+%
+% \cs{BaseJobname} is added to the label in case \pkg{xr} or \pkg{xr-hyper} are used.
+%
+% \changes{v0.47}{2018/01/26}{Fix: Line wrap at \HTML\ hyphen.}
+% \changes{v0.72}{2019/06/05}{Fix: References for \pkg{xr}, \pkg{xr-hyper}.}
+% \begin{macrocode}
+ \LWR@subhyperrefclass{%
+ \LWR@htmlrefsectionfilename{\BaseJobname-autopage-#4}%
+ \LWR@origpound\LWR@print@mbox{autosec-#4}%
+ }{#3}{toc#2}%
+% \end{macrocode}
+% \changes{v0.69}{2019/03/21}{Added support for \pkg{tocdata}.}
+% \begin{macrocode}
+ \LWR@maybetocdata%
+% \end{macrocode}
+% \begin{macrocode}
+ \LWR@stoppars%
+ }%
+ {}%
+\LWR@traceinfo{hypertoc done}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \DescribeCounter{lofdepth} \TOC\ depth for figures.
+% \begin{macrocode}
+\@ifclassloaded{memoir}{}{
+\newcounter{lofdepth}
+\setcounter{lofdepth}{1}
+}
+% \end{macrocode}
+
+% \DescribeCounter{lotdepth} \TOC\ depth for tables.
+% \begin{macrocode}
+\@ifclassloaded{memoir}{}{
+\newcounter{lotdepth}
+\setcounter{lotdepth}{1}
+}
+% \end{macrocode}
+
+
+% \begin{macro}{\hypertocfloat} \marg{1: depth} \marg{2: type}
+% \marg{3: ext of parent} \marg{4: caption} \marg{5: page}
+%
+% \begin{description}
+% \item[\#1] is depth
+% \item[\#2] is |figure|, |table|, etc.
+% \item[\#3] is |lof|, |lot|, of the parent.
+% \item[\#4] the text of the caption
+% \item[\#5] page number
+% \end{description}
+%
+% \changes{v0.24}{2017/03/06}{List of floats responds to \progcode{lofdepth}, \progcode{lotdepth}.}
+%
+% \begin{macrocode}
+\newcommand{\hypertocfloat}[5]{%
+\LWR@startpars
+% \end{macrocode}
+% If some float-creation package has not yet defined
+% the float type's |lofdepth| counter, etc, define it here:
+% \begin{macrocode}
+\@ifundefined{c@#3depth}{%
+\newcounter{#3depth}%
+\setcounter{#3depth}{1}%
+}{}%
+% \end{macrocode}
+% Respond to |lofdepth|, etc.:
+% \begin{macrocode}
+\LWR@traceinfo{hypertocfloat depth is #1 #3depth is \arabic{#3depth}}%
+\ifthenelse{\cnttest{#1}{<=}{\arabic{#3depth}}}%
+ {%
+ \LWR@startpars%
+% \end{macrocode}
+%
+% Create an \HTML\ link to
+% filename\#autoid-(float number), with text of the caption,
+% of the given \HTML\ class.
+%
+% \cs{BaseJobname} is added to the label in case \pkg{xr} or \pkg{xr-hyper} are used.
+%
+% \changes{v0.47}{2018/01/26}{Fix: Line wrap at \HTML\ hyphen.}
+% \changes{v0.72}{2019/06/05}{Fix: References for \pkg{xr}, \pkg{xr-hyper}.}
+% \begin{macrocode}
+ \LWR@subhyperrefclass{%
+ \LWR@htmlrefsectionfilename{%
+ \BaseJobname-autopage-\arabic{LWR@nextautopage}%
+ }%
+ \LWR@origpound\LWR@print@mbox{autoid-\arabic{LWR@nextautoid}}}%
+ {#4}{toc#2}%
+% \end{macrocode}
+% \changes{v0.69}{2019/03/21}{Added support for \pkg{tocdata}.}
+% \begin{macrocode}
+ \LWR@maybetocdata%
+% \end{macrocode}
+% \begin{macrocode}
+ \LWR@stoppars%
+ }%
+ {}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% Automatically called by \cs{contentsline}:
+%
+% \begin{macro}{\l@book} \marg{name} \marg{page}
+%
+% Uses \cs{DeclareDocumentCommand} in case the class does not happen to have a \cs{book}.
+% \changes{v0.73}{2019/06/21}{Added \cs{book} for \pkg{memoir}.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\l@book}{m m}{\hypertoc{-2}{book}{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\l@part} \marg{name} \marg{page}
+%
+% Uses \cs{DeclareDocumentCommand} in case the class does not happen to have a \cs{part}.
+% \changes{v0.48}{2018/02/03}{Adapts to classes without \cs{part}.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\l@part}{m m}{\hypertoc{-1}{part}{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\l@chapter} \marg{name} \marg{page}
+%
+% Uses \cs{DeclareDocumentCommand} in case the class does not happen to have a \cs{chapter}.
+% \changes{v0.62}{2018/11/17}{Don't define if no \cs{chapter}.
+% Fix for \pkg{algorithm2e}.}
+% \begin{macrocode}
+\@ifundefined{chapter}
+{}
+{
+\DeclareDocumentCommand{\l@chapter}{m m}
+ {\hypertoc{0}{chapter}{#1}{#2}}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\l@section} \marg{name} \marg{page}
+% \begin{macrocode}
+\renewcommand{\l@section}[2]{\hypertoc{1}{section}{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\l@subsection} \marg{name} \marg{page}
+% \begin{macrocode}
+\renewcommand{\l@subsection}[2]{\hypertoc{2}{subsection}{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\l@subsubsection} \marg{name} \marg{page}
+% \begin{macrocode}
+\renewcommand{\l@subsubsection}[2]{\hypertoc{3}{subsubsection}{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\l@paragraph} \marg{name} \marg{page}
+% \begin{macrocode}
+\renewcommand{\l@paragraph}[2]{\hypertoc{4}{paragraph}{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\l@subparagraph} \marg{name} \marg{page}
+% \begin{macrocode}
+\renewcommand{\l@subparagraph}[2]{\hypertoc{5}{subparagraph}{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\l@figure} \marg{name} \marg{page}
+% \begin{macrocode}
+\renewcommand{\l@figure}[2]{\hypertocfloat{1}{figure}{lof}{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\l@table} \marg{name} \marg{page}
+% \begin{macrocode}
+\renewcommand{\l@table}[2]{\hypertocfloat{1}{table}{lot}{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+% \section{Index and glossary}
+% \label{sec:index}
+
+% See:\\
+% \href{http://tex.stackexchange.com/questions/187038/how-to-mention-section-number-in-index-created-by-imakeidx}
+% {\texttt{http://tex.stackexchange.com/questions/187038/\\
+% \fqquad\ how-to-mention-section-number-in-index-created-by-imakeidx}}
+
+% Index links are tracked by the counter |LWR@autoindex|.
+% This counter is used to create a label for each index entry, and
+% a reference to this label for each entry in the index listing.
+% This method allows each index entry to link directly to its exact position in the document.
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% \begin{macrocode}
+\newcounter{LWR@autoindex}
+\setcounter{LWR@autoindex}{0}
+
+\newcounter{LWR@autoglossary}
+\setcounter{LWR@autoglossary}{0}
+% \end{macrocode}
+
+
+
+% \begin{environment}{theindex}
+% \begin{macrocode}
+\@ifundefined{chapter}
+{\newcommand*{\LWR@indexsection}[1]{\section*{#1}}}
+{\newcommand*{\LWR@indexsection}[1]{\chapter*{#1}}}
+
+\AtBeginDocument{
+\renewenvironment*{theindex}{%
+ \LWR@indexsection{\indexname}%
+ \let\item\LWR@indexitem%
+ \let\subitem\LWR@indexsubitem%
+ \let\subsubitem\LWR@indexsubsubitem%
+}{}
+}% AtBeginDocument
+% \end{macrocode}
+% \end{environment}
+
+
+% \begin{macro}{\LWR@indexitem} \oarg{index key} \qquad
+% The optional argument is added to support \pkg{repeatindex}.
+%
+% \changes{v0.58}{2018/06/21}{Accepts optional arg for \pkg{repeatindex}.}
+% \changes{v0.73}{2019/06/24}{Fix: Avoid empty \element{span}.}
+% \begin{macrocode}
+\newcommand{\LWR@indexitem}[1][\@empty]{
+
+\InlineClass{indexitem}{\LWR@htmlcomment{}}#1%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@indexsubitem}
+% \changes{v0.73}{2019/06/24}{Fix: Avoid empty \element{span}.}
+% \begin{macrocode}
+\newcommand{\LWR@indexsubitem}{
+
+\InlineClass{indexsubitem}{\LWR@htmlcomment{}}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@indexsubsubitem}
+% \changes{v0.73}{2019/06/24}{Fix: Avoid empty \element{span}.}
+% \begin{macrocode}
+\newcommand{\LWR@indexsubsubitem}{
+
+\InlineClass{indexsubsubitem}{\LWR@htmlcomment{}}
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\@wrindex} \marg{term} \qquad
+% Redefined to write the |LWR@autoindex| counter instead of |page|.
+% \changes{v0.28}{2017/04/13}{Improved indexing.}
+% \begin{macrocode}
+\def\LWR@wrindex#1{%
+\addtocounter{LWR@autoindex}{1}%
+\LWR@new@label{LWRindex-\arabic{LWR@autoindex}}%
+\protected@write\@indexfile{}%
+{\string\indexentry{#1}{\arabic{LWR@autoindex}}}%
+\endgroup
+\@esphack}
+
+\AtBeginDocument{
+\let\@wrindex\LWR@wrindex
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\@wrglossary} \marg{term} \qquad
+% Redefined to write the |LWR@latestautopage| counter instead of |page|.
+% \begin{macrocode}
+\def\@wrglossary#1{%
+\addtocounter{LWR@autoglossary}{1}%
+\LWR@new@label{LWRglossary-\theLWR@autoglossary}%
+\protected@write\@glossaryfile{}%
+{\string\glossaryentry{#1}{\theLWR@autoglossary}}%
+\endgroup
+\@esphack}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@indexnameref} \marg{LWR@autoindex}
+%
+% Creates a hyperlink based on the given entry's autoindex.
+% \begin{macrocode}
+\newcommand*{\LWR@indexnameref}[1]{\nameref{LWRindex-#1}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@doindexentry} \marg{LWR@autoindex, or macros.}
+%
+% Creates a hyperlink, or handles \cs{see}, \cs{textbf}, etc.
+%
+% \changes{v0.58}{2018/06/17}{Adds support for \cs{see}, \cs{seealso}, \cs{emph}, \cs{textbf}, etc.}
+% \begin{macrocode}
+\newrobustcmd{\LWR@doindexentry}[1]{%
+\IfInteger{#1}%
+ {\LWR@indexnameref{#1}}%
+ {#1}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@hyperindexrefnullified}
+% Handles macros commonly seen inside an \cs{index} entry.
+% Each macro is redefined to create and format a link to its entry.
+%
+% To handle additional macros:
+% \trouble[index formatting]{index>formatting}
+% \gindex{index>formatting}
+% \begin{sourcedisplay}
+% \cs{appto}\cs{LWR@hyperindexrefnullified}\{\dots\}
+% \end{sourcedisplay}
+%
+% \changes{v0.58}{2018/06/17}{Adds support for \cs{see}, \cs{seealso}, \cs{emph}, \cs{textbf}, etc.}
+% \changes{v0.61}{2018/09/27}{Made robust,}
+% \changes{v0.65}{2018/12/09}{Added \cs{textsi}.}
+% \begin{macrocode}
+\newcommand{\LWR@hyperindexrefnullified}{%
+\renewrobustcmd{\emph}[1]{\LWR@HTML@emph{\LWR@doindexentry{##1}}}%
+\renewrobustcmd{\textbf}[1]{\LWR@HTML@textbf{\LWR@doindexentry{##1}}}%
+\renewrobustcmd{\texteb}[1]{\LWR@HTML@texteb{\LWR@doindexentry{##1}}}%
+\renewrobustcmd{\textlg}[1]{\LWR@HTML@textlg{\LWR@doindexentry{##1}}}%
+\renewrobustcmd{\textrm}[1]{\LWR@HTML@textrm{\LWR@doindexentry{##1}}}%
+\renewrobustcmd{\textsf}[1]{\LWR@HTML@textsf{\LWR@doindexentry{##1}}}%
+\renewrobustcmd{\texttt}[1]{\LWR@HTML@texttt{\LWR@doindexentry{##1}}}%
+\renewrobustcmd{\textup}[1]{\LWR@HTML@textup{\LWR@doindexentry{##1}}}%
+\renewrobustcmd{\textsc}[1]{\LWR@HTML@textsc{\LWR@doindexentry{##1}}}%
+\renewrobustcmd{\textulc}[1]{\LWR@HTML@textulc{\LWR@doindexentry{##1}}}%
+\renewrobustcmd{\textsi}[1]{\LWR@HTML@textsi{\LWR@doindexentry{##1}}}%
+\renewrobustcmd{\textit}[1]{\LWR@HTML@textit{\LWR@doindexentry{##1}}}%
+\renewrobustcmd{\textsl}[1]{\LWR@HTML@textsl{\LWR@doindexentry{##1}}}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\hyperindexref} \marg{LWR@autoindex}
+%
+% |\hyperindexref{LWR@autoindex}| is inserted into |*.ind| by
+% the \pkg{makeindex} style file \filenm{lwarp.ist} or
+% the \pkg{xindy} style file \filenm{lwarp.xdy}.
+%
+% \changes{v0.20}{2016/12/19}{Print mode provided in case \pkg{hyperref} not used.}
+% \changes{v0.28}{2017/04/13}{Improved indexing.}
+% \changes{v0.58}{2018/06/17}{Adds support for \cs{see}, \cs{seealso}, \cs{emph}, \cs{textbf}, etc.}
+% \changes{v0.66}{2019/02/05}{Fix: Long index entries.}
+% \begin{macrocode}
+\newcommand{\hyperindexref}[1]{%
+% \end{macrocode}
+% In long index lines with numerous entries,
+% \prog{makeindex} can insert a newline before the page number,
+% resulting in an extra space before the first digit.
+% If the first character is a space, remove it first.
+% ^^A Or use the trimspaces package.
+% \begin{macrocode}
+\def\LWR@tempone{#1}%
+\IfBeginWith{\LWR@tempone}{ }{%
+ \StrGobbleLeft{\LWR@tempone}{1}[\LWR@tempone]%
+}{}%
+% \end{macrocode}
+% If a numeric entry, create a link.
+% If not numeric, such as \cs{see}, use the entry as-is.
+% \cs{emph}, \cs{textit}, etc. have been redefined above to create and
+% format the entry.
+% \begin{macrocode}
+\IfInteger{\LWR@tempone}%
+ {\LWR@indexnameref{\LWR@tempone}}%
+ {%
+ \begingroup%
+ \LWR@hyperindexrefnullified
+ #1%
+ \endgroup%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \codeprint
+%
+% A null command for print mode, in case \pkg{hyperref} was not used:
+% \begin{macrocode}
+\begin{warpprint}
+\newcommand{\hyperindexref}[1]{#1}
+\end{warpprint}
+% \end{macrocode}
+
+
+
+% \codeall
+%
+% For the \pkg{glossaries} package, try to prevent an error where
+% \cs{glo@name} was not found:
+%
+% \changes{v0.32}{2017/06/08}{\pkg{glossaries}: Prevent error with \cs{glo@name} not defined.}
+% \begin{macrocode}
+\begin{warpall}
+\providecommand{\glo@name}{}
+\end{warpall}
+% \end{macrocode}
+%
+%
+%
+%
+% \section{Bibliography presentation}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\bibliography} \marg{filenames}
+%
+% Modified to use the base jobname instead of the |_html| jobname.
+% \changes{v0.48}{2018/02/04}{Fix: \cs{BaseJobname} for bibliography.}
+% \begin{macrocode}
+\def\bibliography#1{%
+ \if@filesw
+ \immediate\write\@auxout{\string\bibdata{#1}}%
+ \fi
+% \@input@{\jobname.bbl}% original
+ \begingroup%
+ \@input@{\BaseJobname.bbl}% lwarp
+ \endgroup%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@biblabel} \marg{text-refnumber}
+%
+% \changes{v0.48}{2018/02/04}{Improved bibliography label.}
+% \begin{macrocode}
+\renewcommand{\@biblabel}[1]{[#1]\quad}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{environment}{thebibliography}
+% To emphasize document titles in the bibliography,
+% the following redefines \cs{em} inside \env{thebibliography}
+% to gather everything until the next closing brace,
+% then display these tokens with \cs{textit}.
+%
+% {
+% \footnotesize
+% \textit{Adapted from |embracedef.sty|, which is by \textup{\textsc{Takayuki YATO}}:} \\
+% \fqquad\url{https://gist.github.com/zr-tex8r/b72555e3e7ad2f0a37f1}
+% }
+%
+% \changes{v0.45}{2018/01/13}{Patched to emphasize titles.}
+% \begin{macrocode}
+\AtBeginDocument{
+\AtBeginEnvironment{thebibliography}{
+\providecommand*{\LWR@newem}[1]{\textit{#1}}
+
+\renewrobustcmd{\em}{%
+ \begingroup
+ \gdef\LWR@em@after{\LWR@em@finish\LWR@newem}%
+ \afterassignment\LWR@em@after
+ \toks@\bgroup
+}
+
+\def\LWR@em@finish#1{%
+ \xdef\LWR@em@after{\noexpand#1{\the\toks@}}%
+ \endgroup
+ \LWR@em@after\egroup
+}
+}% \AtBeginEnvironment{thebibliography}
+}% \AtBeginDocument
+% \end{macrocode}
+% \end{environment}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+% \section{Restoring original formatting}
+%
+% \begin{macro}{\LWR@restoreorigformatting}
+% Used to temporarily restore
+% the print-mode meaning of a number of formatting, graphics, and symbols-related
+% macros while generating \SVG\ math or a \env{lateximage}.
+%
+% Must be used inside a group.
+%
+% Sets \cs{LWR@formatting} to |print| until the end of the group.
+%
+% A number of packages will \cs{appto} additional actions to this macro.
+%
+% Various packages add to this macro using \cs{appto}.
+%
+% \label{sec:restoreorigformatting}
+%
+% \changes{v0.34}{2017/08/05}{Improved font control.}
+% \changes{v0.34}{2017/08/08}{\pkg{booktabs}: Works inside \env{lateximage}.}
+% \changes{v0.36}{2017/08/16}{\pkg{siunitx}: Improved super/subscripts in a \env{lateximage}.}
+% \changes{v0.39}{2017/09/01}{Appended with \cs{appto} instead of calling various macros.}
+% \changes{v0.40}{2017/09/09}{Improved symbols inside a \env{lateximage}.}
+% \changes{v0.40}{2017/09/09}{Improved \protect\LaTeX\ logos inside a \env{lateximage}.}
+% \changes{v0.40}{2017/09/09}{Nullified \cs{InlineClass}, etc. inside a \env{lateximage}.}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{macrocode}
+\newcommand*{\LWR@restoreorigformatting}{%
+\LWR@traceinfo{LWR@restoreorigformatting}%
+% \end{macrocode}
+% Numerous macros change their print/\HTML\ meaning depending on \cs{LWR@formatting}:
+% \begin{macrocode}
+\renewcommand*{\LWR@formatting}{print}%
+\linespread{1}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\let\par\LWR@origpar%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LWR@select@print@hspace%
+% \end{macrocode}
+%
+% \changes{v0.48}{2018/02/04}{Fix: Spacing in \SVG\ math, \env{lateximage}, \tikz.}
+% \begin{macrocode}
+\LetLtxMacro\hfil\LWR@orighfil%
+\let\hss\LWR@orighss%
+\let\llap\LWR@origllap%
+\let\rlap\LWR@origrlap%
+\let\hfilneg\LWR@orighfilneg%
+% \end{macrocode}
+% \begin{macrocode}
+\let\,\LWR@origcomma% disable HTML short unbreakable space
+\let\thinspace\LWR@origthinspace% disable HTML short unbreakable space
+\let\negthinspace\LWR@orignegthinspace% disable HTML negative short unbreakable space
+\let\textellipsis\LWR@origtextellipsis%
+\let\textless\LWR@origtextless%
+\let\textgreater\LWR@origtextgreater%
+% \end{macrocode}
+% \changes{v0.70}{2019/03/28}{Fix: \cs{\&} in a lateximage.}
+% \begin{macrocode}
+\let\&\LWR@origampersand%
+% \end{macrocode}
+% \changes{v0.72}{2019/05/24}{Use \cs{LWR@formatted} for \cs{bfseries}, etc.}
+% \begin{macrocode}
+\LetLtxMacro\em\LWR@origem%
+\LetLtxMacro\normalfont\LWR@orignormalfont%
+\let\sp\LWR@origsp%
+\let\sb\LWR@origsb%
+\LetLtxMacro\textsuperscript\LWR@origtextsuperscript%
+\LetLtxMacro\@textsuperscript\LWR@orig@textsuperscript%
+\LetLtxMacro\textsubscript\LWR@origtextsubscript%
+\LetLtxMacro\@textsubscript\LWR@orig@textsubscript%
+\LetLtxMacro\underline\LWR@origunderline%
+\let~\LWR@origtilde%
+\let\enskip\LWR@origenskip%
+\let\quad\LWR@origquad%
+\let\qquad\LWR@origqquad%
+% \end{macrocode}
+%
+% \cs{endtabular} must be restored to its original,
+% instead of relying on \pkg{lwarp}'s \cs{LWR@formatted} mechanism:
+% \changes{v0.65}{2018/12/16}{Fix: \env{tabular*}.}
+% \begin{macrocode}
+\LetLtxMacro\endtabular\LWR@origendtabular%
+\csletcs{endtabular*}{LWR@origendtabular*}%
+% \end{macrocode}
+% \begin{macrocode}
+\LetLtxMacro\noalign\LWR@orignoalign%
+\LetLtxMacro\hline\LWR@orighline%
+% \end{macrocode}
+% \begin{macrocode}
+\let\newline\LWR@orignewline%
+\LetLtxMacro\includegraphics\LWR@origincludegraphics%
+% \end{macrocode}
+% \changes{v0.42}{2017/10/16}{Improved \cs{ensuremath}.}
+% \begin{macrocode}
+\LetLtxMacro\@ensuredmath\LWR@origensuredmath%
+%
+\LWR@restoreorigaccents%
+\LWR@restoreoriglists%
+%
+\LWR@FBcancel%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+%
+%
+%
+% \section{Math}
+% \label{sec:math}
+%
+%
+%
+% \subsection{Limitations}
+%
+% \limitsmath
+%
+% \subsubsection{Catcode changes}
+% \limitsmathcatcode
+%
+% \subsubsection{Complicated inline math objects}
+% \limitsmathinline
+%
+% \subsubsection{Complicated display math objects}
+%
+% \limitsmathdisplay
+
+
+% \subsection{\HTML\ \attribute{alt} tag names}
+%
+% Redefinable names for the \HTML\ \attribute{alt} tags,
+% for translation according to the reader's native language.
+%
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+
+% \begin{macro}{\mathimagename} The \HTML\ \attribute{alt} tag for
+% an \SVG\ math image. \\
+% \DescribeDefault{``math image''}
+% \changes{v0.57}{2018/05/22}{Added.}
+% \begin{macrocode}
+\newcommand*{\mathimagename}{math image}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\packagediagramname} Appended to the \env{lateximage}
+% \HTML\ \attribute{alt} tag for the images generated by many packages.
+% \DescribeDefault{``diagram''}
+% \changes{v0.57}{2018/05/22}{Added.}
+% \begin{macrocode}
+\newcommand*{\packagediagramname}{diagram}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+% \subsection{Inline and display math}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+% \DescribeCounter{LWR@externalfilecnt}
+% Counter for the external files which are generated and then referenced from the \HTML:
+% \begin{macrocode}
+\newcounter{LWR@externalfilecnt}
+% \end{macrocode}
+
+
+% \DescribeBoolean{LWR@indisplaymathimage}
+% True if processing display math for \SVG\ output.
+% Inside a \env{lateximage}, display math is only set to print-mode output
+% if |LWR@indisplaymathimage| is false.
+% Used to avoid nullifying display math before it has been completed.
+% \begin{macrocode}
+\newbool{LWR@indisplaymathimage}
+% \end{macrocode}
+
+
+% \DescribeBoolean{LWR@xfakebold}
+% True if \pkg{xfakebold} \cs{setBold} is in use.
+% \changes{v0.67}{2019/02/17}{\pkg{xfakebold}: Added support.}
+% \begin{macrocode}
+\newbool{LWR@xfakebold}
+\boolfalse{LWR@xfakebold}
+% \end{macrocode}
+
+% \begin{macro}{\LWR@orig@setBold}
+% Redefined by \pkg{lwarp-xfakebold}.
+% \begin{macrocode}
+\newcommand*{\LWR@orig@setBold}{}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@orig@unsetBold}
+% Redefined by \pkg{lwarp-xfakebold}.
+% \begin{macrocode}
+\newcommand*{\LWR@orig@unsetBold}{}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@applyxfakebold}
+% Redefined by \pkg{lwarp-xfakebold}.
+% \begin{macrocode}
+\newcommand*{\LWR@applyxfakebold}{}
+% \end{macrocode}
+% \end{macro}
+
+
+% \DescribeMacro{\$}
+% Plain dollar signs appearing in the \HTML\ output may be interpreted
+% by \brand{MathJax} to be math shifts.
+% For a plain text dollar |\$|, use an \HTML\ entity to avoid
+% it being interpreted by \brand{MathJax}, unless are inside a lateximage,
+% in which case it will not be seen by \brand{MathJax}.
+% \changes{v0.19}{2016/06/08}{Avoids \brand{MathJax}.}
+% \changes{v0.26}{2017/03/30}{Dollar span avoided in a lateximage.}
+% \changes{v0.51}{2018/03/23}{Named \HTML\ entity used for text dollar.}
+% \changes{v0.73}{2019/06/24}{Numbered \HTML\ entity used for text dollar.}
+% \begin{macrocode}
+\let\LWR@origtextdollar\$
+
+\renewcommand*{\$}{%
+\ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
+{\LWR@origtextdollar}%
+{\HTMLunicode{00024}}%
+}
+% \end{macrocode}
+
+
+% \DescribeFile{lwarp_baseline_marker.png}
+% \DescribeFile{lwarp_baseline_marker.eps}
+% A marker to be used to help \prog{pdfcrop} identify the inline math baseline
+% and width. If either \pkg{graphicx} or \pkg{graphics} is loaded, this marker is
+% placed at the lower left and lower right corners of the inline math.
+% \prog{pdfcrop} is then able to identify the width of the image, and also
+% the height of an image such as a horizontal dash which does not
+% otherwise touch the baseline.
+%
+% A marker with alpha or opacity of 0\% is not registered by \prog{pdfcrop}, so
+% the marker is a small square block of 1\% alpha, which seems to work while still being
+% effectively invisible in the final SVG image.
+%
+% If \pkg{graphicx} is loaded, this marker is sized as a tiny 1\,sp square.
+% If \pkg{graphics} is loaded, this marker is used at its default size of around
+% .25\,pt.
+% If neither graphics package is loaded, the marker is replaced by a 10\,sp horizontal
+% space, and there is no assistance for determining baseline or width of the inline
+% math image.
+% The best results are obtained when using \pkg{graphicx}.
+%
+% \begin{macro}{\LWR@addbaselinemarker} Places a small marker in an \SVG\ inline image.
+% If \pkg{graphics} or \pkg{graphicx} are loaded, the marker is a mostly transparent
+% image.
+% If neither is loaded, no marker is used.
+% \changes{v0.51}{2018/03/16}{Improved \SVG\ math baseline.}
+% \changes{v0.52}{2018/03/24}{Warnings if \filenm{lwarp_baseline_marker.png} is not present
+% or if graphicx/s not loaded.}
+% \changes{v0.59}{2018/09/02}{Uses \filenm{.eps} if \DVI\ \prog{latex}.}
+% \changes{v0.73}{2019/06/30}{Improved warning messages.}
+% \begin{macrocode}
+\AtBeginDocument{
+
+\ifpdf
+ \newcommand*{\LWR@baselinename}{lwarp_baseline_marker.png}
+\else
+ \ifXeTeX
+ \newcommand*{\LWR@baselinename}{lwarp_baseline_marker.png}
+ \else
+ \newcommand*{\LWR@baselinename}{lwarp_baseline_marker.eps}
+ \fi
+\fi
+
+\IfFileExists{\LWR@baselinename}%
+{
+ \@ifpackageloaded{graphicx}{
+ \newcommand*{\LWR@addbaselinemarker}{%
+ \LWR@origincludegraphics{\LWR@baselinename}%
+ }
+ }{
+ \@ifpackageloaded{graphics}{
+ \newcommand*{\LWR@addbaselinemarker}{%
+ \LWR@origincludegraphics{\LWR@baselinename}%
+ }
+ }{
+ \PackageWarningNoLine{lwarp}{Load graphicx or graphics
+ for improved\MessageBreak
+ SVG math baselines%
+ }
+ \newcommand*{\LWR@addbaselinemarker}{}
+ }
+ }
+}{% lwarp_baseline_marker.png or .eps is not present
+ \PackageWarningNoLine{lwarp}{File \LWR@baselinename\space is not installed\MessageBreak
+ alongside the lwarp-*.sty files,\MessageBreak
+ so SVG math baselines may not be accurate}
+ \newcommand*{\LWR@addbaselinemarker}{}
+}
+
+}% AtBeginDocument
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@subsingledollar} * \marg{2: alt text} \marg{3: add'l hashing}
+% \marg{4: math expression}
+%
+% For inline math.
+% Uses MathJax, or for \SVG\ math the image is measured and ajusted to the baseline
+% of the \HTML\ output, and placed inside a \env{lateximage}.
+%
+% \describehashing
+%
+% \changes{v0.19}{2016/05/25}{\brand{MathJax} support.}
+% \changes{v0.42}{2017/10/26}{If \progcode{FormatWP} print LaTeX expression.}
+% \changes{v0.47}{2018/01/24}{Added \SVG\ math image baseline adjust and em sizing.}
+% \changes{v0.50}{2018/02/23}{Fix: Use \env{lateximage} even if MathJax.}
+% \changes{v0.50}{2018/02/24}{Improved \SVG\ math \attribute{alt} tags.}
+% \begin{macrocode}
+\newlength{\LWR@singledollarwidth}
+\newlength{\LWR@singledollarheight}
+\newlength{\LWR@singledollardepth}
+
+\newsavebox{\LWR@singledollarbox}
+
+\NewDocumentCommand{\LWR@subsingledollar}{s m m m}{%
+\LWR@traceinfo{LWR@subsingledollar}%
+% \end{macrocode}
+% \begin{macrocode}
+\ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
+{%
+\LWR@traceinfo{LWR@subsingledollar: already in a lateximage}%
+ #4% contents
+}%
+{% not in a lateximage
+\begingroup%
+% \end{macrocode}
+% Support for \pkg{xfakebold}:
+% \changes{v0.67}{2019/02/17}{\pkg{xfakebold}: Added support.}
+% \begin{macrocode}
+\LWR@applyxfakebold%
+% \end{macrocode}
+% MathJax cannot parse the often complicated \TeX\ expressions which
+% appear in the various uses of \cs{ensuredmath}.
+% \cs{ensuremath} forces the \attribute{alt} tag to ``|(math image)|'', as
+% translated according to \cs{mathimagename}.
+% If this is the case, force the use of a \env{lateximage} even if MathJax.
+% Likewise for \pkg{siunitx} if |parse-numbers=false|.
+%
+% If MathJax, or if formatting math for a word processor, and not \cs{ensuredmath},
+% and not a dynamic math expression, print the math expression:
+% \changes{v0.51}{2018/03/11}{Fix: \cs{ensuredmath} inside \SVG\ image.}
+% \changes{v0.57}{2018/05/23}{Fix: Dynamic inline math expressions.}
+% \begin{macrocode}
+\ifboolexpr{%
+ (
+ bool{mathjax} or
+ ( bool{FormatWP} and bool{WPMarkMath} )
+ ) and
+ ( not test { \ifstrequal {#2} {(\mathimagename)} } ) and % from \ensuredmath
+ ( not bool{LWR@dynamicmath} )
+}%
+% \end{macrocode}
+% For \brand{MathJax}, print the math between |\(| and |\)|:
+% \begin{macrocode}
+{%
+ \LWR@traceinfo{LWR@subsingledollar: Mathjax}%
+ {\textbackslash(\LWR@HTMLsanitize{#4}\textbackslash)}%
+}% mathjax
+% \end{macrocode}
+% For SVG, print the math inside a \env{lateximage},
+% with an \element{alt} tag of the \LaTeX\ code,
+% and a \CSS\ style to control the baseline adjustment.
+% \begin{macrocode}
+{% not mathjax
+\LWR@traceinfo{LWR@subsingledollar: NOT mathjax, or is ensuremath, or is dynamic}%
+% \end{macrocode}
+% Measure the depth, width, and height of the math image:
+% \changes{v0.51}{2018/03/04}{Fix: SVG math with enclosed \env{lateximage}.}
+% \begin{macrocode}
+ \begingroup%
+% \end{macrocode}
+% Temporarily disable formatting while measuring the image parameters:
+% \begin{macrocode}
+ \LWR@restoreorigformatting%
+ \RenewDocumentEnvironment{lateximage}{s o o o}{}{}% inside group
+ \LWR@print@normalsize%
+% \end{macrocode}
+% Temporarily set font for the \HTML\ \PDF\ output:
+% \changes{v0.51}{2018/03/14}{Fix: Honors text font around \SVG\ math.}
+% \begin{macrocode}
+ \LWR@traceinfo{Using font family \LWR@f@family}%
+ \@nameuse{LWR@orig\LWR@f@family family}%
+ \LWR@traceinfo{Using font series \LWR@f@series}%
+ \@nameuse{LWR@orig\LWR@f@series series}%
+ \LWR@traceinfo{Using font shape \LWR@f@shape}%
+ \@nameuse{LWR@orig\LWR@f@shape shape}%
+ \LWR@traceinfo{Using font caps shape \LWR@f@shapecaps}%
+ \@nameuse{LWR@orig\LWR@f@shapecaps shape}%
+% \end{macrocode}
+% |lateximagedepth| must be nested to avoid generating paragraph tags.
+% \AmS\ math modifies the \cs{text} macro such that \cs{addtocounter} does not
+% always occur as expected. Lower-level code is used instead.
+% \begin{macrocode}
+ \global\advance\c@LWR@lateximagedepth 1\relax%
+% \end{macrocode}
+% Typeset and save the contents, depending on how they were generated:
+% \begin{description}
+% \item [SVG math:] \cs{LWR@origensuredmath} is part of argument \#4.
+% \item [SVG math \cs{ensuremath}:] \cs{LWR@origensuredmath} is part of argument \#4.
+% \item [SVG dynamic math:] \cs{LWR@origensuredmath} is part of argument \#4.
+% \item [Mathjax:] Argument \#4 is the contents of the math expression
+% without \cs{LWR@origensuredmath}. This case is handled above.
+% \item [Mathjax \cs{ensuremath}:] \cs{LWR@origensuredmath} is part of argument \#4.
+% \item [Mathjax dynamic math:] Argument \#4 is the contents of the math expression
+% without \cs{LWR@origensuredmath}, so \cs{LWR@origensuredmath} is added below.\
+% \item [\cs{ifmmode}:] Included ``just in case''.
+% \end{description}
+%
+% \changes{v0.51}{2018/03/07}{Fix: \env{lateximage} inside \AmS\ \cs{text}.}
+% \changes{v0.51}{2018/03/12}{Typeset \SVG\ math only once during measurement.}
+% \changes{v0.57}{2018/05/23}{Fix: Dynamic inline math expressions.}
+% \begin{macrocode}
+ \ifmmode%
+ \global\sbox{\LWR@singledollarbox}{#4}%
+ \else%
+ \ifbool{LWR@dynamicmath}{%
+ \ifbool{mathjax}{%
+ \global\sbox{\LWR@singledollarbox}{\LWR@origensuredmath{#4}}%
+ }{%
+ \global\sbox{\LWR@singledollarbox}{#4}%
+ }%
+ }{%
+ \global\sbox{\LWR@singledollarbox}{#4}%
+ }%
+ \fi%
+% \end{macrocode}
+% Add a small and almost transparent marker at the depth of the image.
+%
+% A math minus sign has the same depth as a plus, even though it does not draw
+% anything below the baseline. This means that \prog{pdfcrop} would crop the image
+% without depth. The marker below the baseline is seen by \prog{pdfcrop}
+% and preserves the depth.
+% \changes{v0.51}{2018/03/16}{Improved \SVG\ math baseline.}
+% \begin{macrocode}
+ \global\sbox{\LWR@singledollarbox}{%
+ \usebox{\LWR@singledollarbox}%
+ \raisebox{-\dp\LWR@singledollarbox}{%
+ \LWR@addbaselinemarker%
+ }%
+ }%
+% \end{macrocode}
+% More low-level code to undo the counter change.
+% \begin{macrocode}
+ \global\advance\c@LWR@lateximagedepth -1\relax% Due to AmS \text macro.
+% \end{macrocode}
+% Measure the depth:
+% \changes{v0.52}{2018/03/24}{Added user-adjustable \SVG\ math font scaling.}
+% \begin{macrocode}
+ \setlength{\LWR@singledollardepth}{%
+ \LateximageFontScale\dp\LWR@singledollarbox%
+ }%
+% \end{macrocode}
+% Make the length a global change:
+% \begin{macrocode}
+ \global\LWR@singledollardepth=\LWR@singledollardepth%
+% \end{macrocode}
+% Likewise for width:
+% \begin{macrocode}
+ \setlength{\LWR@singledollarwidth}{%
+ \LateximageFontScale\wd\LWR@singledollarbox%
+ }%
+ \global\LWR@singledollarwidth=\LWR@singledollarwidth%
+% \end{macrocode}
+% Likewise for total height:
+% \begin{macrocode}
+ \setlength{\LWR@singledollarheight}{%
+ \LateximageFontScale\ht\LWR@singledollarbox%
+ }%
+ \addtolength{\LWR@singledollarheight}{%
+ \LateximageFontScale\dp\LWR@singledollarbox%
+ }%
+ \global\LWR@singledollarheight=\LWR@singledollarheight%
+% \end{macrocode}
+% \begin{macrocode}
+ \endgroup%
+% \end{macrocode}
+%
+% Set a style for the the height or width.
+% The |em| unit is used so that the math scales according to the
+% user's selected font size.
+%
+% Start with the greater of the width or the height, biased towards the width:
+% \begin{macrocode}
+ \ifdimgreater{\LWR@singledollarwidth}{.7\LWR@singledollarheight}{%
+ \def\LWR@singledollarstyle{%
+ width:\LWR@convertto{em}{\the\LWR@singledollarwidth} em%
+ }%
+ }{%
+ \def\LWR@singledollarstyle{%
+ height:\LWR@convertto{em}{\the\LWR@singledollarheight} em%
+ }%
+ }%
+% \end{macrocode}
+% If a very narrow width, use the height.
+% \begin{macrocode}
+ \ifdimless{\LWR@singledollarwidth}{.2em}%
+ {%
+ \def\LWR@singledollarstyle{%
+ height:\LWR@convertto{em}{\the\LWR@singledollarheight} em%
+ }%
+ }%
+ {}%
+% \end{macrocode}
+% If very wide and short, use the width:
+% \begin{macrocode}
+ \ifdimless{\LWR@singledollarheight}{.2em}%
+ {%
+ \def\LWR@singledollarstyle{%
+ width:\LWR@convertto{em}{\the\LWR@singledollarwidth} em%
+ }%
+ }%
+ {}%
+% \end{macrocode}
+% If there is significant text depth, add the depth to the style.
+% \changes{v0.47}{2018/01/26}{Fix: Line wrap at \HTML\ hyphen.}
+% \begin{macrocode}
+ \ifdimgreater{\LWR@singledollardepth}{0.05ex}{%
+ \def\LWR@singledollardepthstyle{%
+ \ ; % extra space
+ \LWR@print@mbox{%
+ vertical-align:-\LWR@convertto{em}{\the\LWR@singledollardepth} em%
+ } % extra space
+ }%
+ }{%
+ \def\LWR@singledollardepthstyle{}%
+ }%
+% \end{macrocode}
+% Create the \env{lateximage} using the alternate tag and the computed
+% size and depth.
+% The star causes \env{lateximage} to use an MD5 hash as the filename.
+% When hashing, also include the current font and color in the hash.
+% \changes{v0.50}{2018/02/22}{MD5 hash avoids duplicate \SVG\ math.}
+% \changes{v0.57}{2018/05/23}{Fix: Dynamic inline math expressions.}
+% \begin{macrocode}
+ \ifbool{LWR@dynamicmath}{%
+ \LWR@traceinfo{subsingledollar: dynamic}%
+ \begin{lateximage}% no hashing
+ [(\mathimagename)]% alt tag
+ []% no add'l hashing
+ [\LWR@singledollarstyle \LWR@singledollardepthstyle]% CSS
+ }{%
+ \LWR@traceinfo{subsingledollar: static}%
+ \IfValueTF{#1}{%
+ \LWR@findcurrenttextcolor% sets \LWR@tempcolor
+% \end{macrocode}
+% Support for \pkg{xfakebold}:
+% \changes{v0.67}{2019/02/17}{\pkg{xfakebold}: Added support.}
+% \begin{macrocode}
+ \ifbool{LWR@xfakebold}%
+ {\def\LWR@tempone{Y}}%
+ {\def\LWR@tempone{N}}%
+% \end{macrocode}
+% \begin{macrocode}
+ \begin{lateximage}*% use hashing
+ [#2]% alt
+ [% addl' hashing
+ #3%
+ FM\LWR@f@family%
+ SR\LWR@f@series%
+ SH\LWR@f@shape%
+ SHC\LWR@f@shapecaps%
+ CL\LWR@tempcolor%
+ FB\LWR@tempone% xfakebold
+ ]%
+ [\LWR@singledollarstyle \LWR@singledollardepthstyle]% CSS
+ }{%
+ \begin{lateximage}% no hashing
+ [#2]% alt
+ []% no add'l hashing
+ [\LWR@singledollarstyle \LWR@singledollardepthstyle]% CSS
+ }%
+ }%
+% \end{macrocode}
+% Place small and almost transparent markers on the baseline
+% at the left and right edges of the image.
+% These markers are seen by \prog{pdfcrop},
+% and force vertically-centered objects such as a dash
+% to be raised off the baseline in the cropped image,
+% and also force the total width and left \Slash right margins to be correct.
+% (Except that in some fonts a character may exceed the bounding box, and thus
+% may appear wider than expected when converted to an image.)
+% \changes{v0.51}{2018/03/10}{SVG math baseline improved with invisible rule at corner.}
+% \begin{macrocode}
+ \LWR@addbaselinemarker%
+% \end{macrocode}
+% Support for \pkg{xfakebold}:
+% \changes{v0.67}{2019/02/17}{\pkg{xfakebold}: Added support.}
+% \begin{macrocode}
+ \LWR@applyxfakebold%
+% \end{macrocode}
+% Typeset the contents:
+% \begin{macrocode}
+ \usebox{\LWR@singledollarbox}%
+% \end{macrocode}
+% The closing baseline marker:
+% \begin{macrocode}
+ \LWR@addbaselinemarker%
+% \end{macrocode}
+% \begin{macrocode}
+ \end{lateximage}%
+%
+}% not mathjax
+\endgroup%
+}% not in a lateximage
+\LWR@traceinfo{LWR@subsingledollar: done}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macrocode}
+\LetLtxMacro\LWR@origdollar$
+\LetLtxMacro\LWR@secondorigdollar$% balance for editor syntax highlighting
+% \end{macrocode}
+
+% \begin{macrocode}
+\LetLtxMacro\LWR@origopenparen\(
+\LetLtxMacro\LWR@origcloseparen\)
+\LetLtxMacro\LWR@origopenbracket\[
+\LetLtxMacro\LWR@origclosebracket\]
+% \end{macrocode}
+
+% \DescribeObject{\$}
+% \DescribeObject{\$\$}
+% Redefine the dollar sign to place math inside a \env{lateximage},
+% or use \brand{MathJax}:
+% \begin{macrocode}
+\begingroup
+\catcode`\$=\active%
+\protected\gdef${\@ifnextchar$\LWR@doubledollar\LWR@singledollar}%
+% \end{macrocode}
+
+% Used by \pkg{chemformula} to escape single-dollar math:
+% \begin{macrocode}
+\protected\gdef\LWR@newsingledollar{\@ifnextchar$\LWR@doubledollar\LWR@singledollar}%
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@doubledollar}
+%
+% \changes{v0.42}{2017/10/16}{Improved \cs{ensuremath}.}
+%
+% Redefine the double dollar sign to place math inside a \env{lateximage}, or use \brand{MathJax}:
+% \begin{macrocode}
+\protected\gdef\LWR@doubledollar$#1$${%
+% \end{macrocode}
+% If \brand{MathJax} or formatting for a word processor, print the \LaTeX\ expression:
+% \changes{v0.19}{2016/05/25}{\brand{MathJax} support.}
+% \changes{v0.42}{2017/10/26}{If \progcode{FormatWP} print LaTeX expression.}
+% \begin{macrocode}
+\ifboolexpr{bool{mathjax} or ( bool{FormatWP} and bool{WPMarkMath} ) }%
+% \end{macrocode}
+% For \brand{MathJax}, print the math between |\[| and |\]|:
+% \changes{v0.42}{2017/10/16}{Improved line spacing with mathjax.}
+% \begin{macrocode}
+{
+
+ \textbackslash[%
+ \LWR@HTMLsanitize{#1}%
+ \textbackslash]
+
+}% mathjax
+% \end{macrocode}
+% For SVG, print the math inside a \env{lateximage},
+% with an \element{alt} tag of the \LaTeX\ code:
+% \changes{v0.50}{2018/02/24}{Improved \SVG\ math \attribute{alt} tags.}
+% \changes{v0.50}{2018/03/02}{Improved \SVG\ math display.}
+% \changes{v0.51}{2018/03/11}{Fix: \cs{addcontentsline} inside \SVG\ math. Provides an autoid anchor.}
+% \begin{macrocode}
+{% not mathjax
+ \begin{BlockClass}{displaymath}%
+ \LWR@newautoidanchor%
+ \booltrue{LWR@indisplaymathimage}%
+ \begin{lateximage}%
+ [%
+ \textbackslash{[} % extra space
+ \LWR@HTMLsanitize{#1} % extra space
+ \textbackslash{]}%
+ ]%
+% \end{macrocode}
+% Support for \pkg{xfakebold}:
+% \changes{v0.67}{2019/02/17}{\pkg{xfakebold}: Added support.}
+% \begin{macrocode}
+ \LWR@applyxfakebold%
+% \end{macrocode}
+% \begin{macrocode}
+ \LWR@origdollar\LWR@origdollar#1\LWR@origdollar\LWR@origdollar%
+ \end{lateximage}%
+ \end{BlockClass}%
+}% not mathjax
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\LWR@singledollar} \marg{alt text} \marg{math expression}
+% \begin{macrocode}
+\protected\gdef\LWR@singledollar#1${%
+\ifbool{mathjax}{%
+ \LWR@subsingledollar*%
+ {% alt tag
+ \textbackslash( %
+ \LWR@HTMLsanitize{#1} % extra space
+ \textbackslash)%
+ }%
+ {singledollar}% add'l hashing
+ {#1}% contents
+}{% not mathjax
+ \LWR@subsingledollar*%
+ {% alt tag
+ \textbackslash( %
+ \LWR@HTMLsanitize{#1} % extra space
+ \textbackslash)%
+ }%
+ {singledollar}% add'l hashing
+ {\LWR@origensuredmath{#1}}% contents
+}% not mathjax
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\(}
+% \begin{macro}{\[}
+% Redefine to the above dollar macros.
+% \begin{macrocode}
+\AtBeginDocument{
+\protected\gdef\(#1\){$#1$}
+\protected\gdef\[#1\]{$$#1$$}
+}
+
+\endgroup
+% \end{macrocode}
+% \changes{v0.59}{2018/08/23}{Fix with \cs{displaymathnormal}.}
+% \begin{macrocode}
+\AtBeginDocument{
+\LetLtxMacro\LWR@openbracketnormal\[
+\LetLtxMacro\LWR@closebracketnormal\]
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+
+
+% \begin{macro}{\@ensuredmath} \marg{expression}
+%
+% If MathJax, a \env{lateximage} is used, since \cs{ensuremath} is
+% often used for complex \TeX\ expressions which MathJax may not render.
+% If \SVG\ math, a hashed file is used with a simple \attribute{alt} tag, but
+% additional hashing provided by the contents.
+%
+% \changes{v0.51}{2018/02/24}{Hashes \cs{ensuremath}.}
+% \changes{v0.42}{2017/10/16}{Improved \cs{ensuremath}.}
+% \changes{v0.50}{2018/02/23}{Fix: Use \env{lateximage} even if MathJax.}
+% \changes{v0.50}{2018/02/24}{Improved \SVG\ math \attribute{alt} tags.}
+% \changes{v0.52}{2018/03/25}{Improved hashing expansion.}
+% \begin{macrocode}
+\LetLtxMacro\LWR@origensuredmath\@ensuredmath
+
+\renewcommand{\@ensuredmath}[1]{%
+\ifbool{mathjax}{%
+ \LWR@subsingledollar*{(\mathimagename)}{%
+ \protect\LWR@HTMLsanitize{\detokenize\expandafter{#1}}%
+ }{\relax%
+ \LWR@origensuredmath{#1}%
+ }%
+}{% SVG math
+% \end{macrocode}
+% If already inside a \env{lateximage} in math mode, continue as-is.
+% \begin{macrocode}
+\ifmmode%
+ \LWR@origensuredmath{#1}%
+\else%
+% \end{macrocode}
+% Create an inline math \env{lateximage} with a simple \attribute{alt} tag
+% and additional hashing according to the contents.
+% \begin{macrocode}
+ \ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
+ {\LWR@origensuredmath{#1}}%
+ {%
+ \LWR@subsingledollar*{(\mathimagename)}{%
+ \protect\LWR@HTMLsanitize{\detokenize\expandafter{#1}}%
+ }{%
+ \LWR@origensuredmath{#1}%
+ }%
+ }%
+\fi%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% Remove the old |math| and |displaymath| environments:
+% \begin{macrocode}
+\let\math\relax
+\let\endmath\relax
+\let\displaymath\relax
+\let\enddisplaymath\relax
+% \end{macrocode}
+
+% \begin{environment}{math}
+% Set math mode then typeset the body of what was between the begin/end.
+% See the \pkg{environ} package for \cs{BODY}.
+% \begin{macrocode}
+\NewEnviron{math}{\expandafter\(\BODY\)}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{LWR@displaymathnormal}
+% Set math mode then typeset the body of what was between the begin/end.
+% See the \pkg{environ} package for \cs{BODY}.
+% \begin{macrocode}
+\NewEnviron{LWR@displaymathnormal}{\expandafter\[\BODY\]\@ignoretrue}
+% \end{macrocode}
+% \end{environment}
+
+
+% Set the default displaymath to the normal version:
+% \begin{macrocode}
+\LetLtxMacro\[\LWR@openbracketnormal%
+\LetLtxMacro\]\LWR@closebracketnormal%
+\LetLtxMacro\displaymath\LWR@displaymathnormal%
+\LetLtxMacro\enddisplaymath\endLWR@displaymathnormal%
+% \end{macrocode}
+%
+%
+% \begin{environment}{LWR@displaymathother}
+% A version of \env{displaymath} which can handle complicated objects,
+% but does not supply \brand{MathJax} or \HTML\ \attribute{alt} tags.
+% \changes{v0.51}{2018/03/21}{Processing for complicated display math.}
+% \begin{macrocode}
+\newenvironment{LWR@displaymathother}
+{%
+ \begin{BlockClass}{displaymath}%
+ \LWR@newautoidanchor%
+ \booltrue{LWR@indisplaymathimage}%
+ \begin{lateximage}%
+ [(display math)]%
+ \LWR@origdollar\LWR@origdollar%
+}
+{%
+ \LWR@origdollar\LWR@origdollar%
+ \end{lateximage}%
+ \end{BlockClass}%
+}
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \begin{environment}{LWR@equationother}
+% A version of \env{displaymath} which can handle complicated objects,
+% but does not supply \brand{MathJax} or \HTML\ \attribute{alt} tags.
+% \changes{v0.51}{2018/03/21}{Processing for complicated display math.}
+% \begin{macrocode}
+\newenvironment{LWR@equationother}
+{%
+ \begin{BlockClass}{displaymathnumbered}%
+ \LWR@newautoidanchor%
+ \booltrue{LWR@indisplaymathimage}%
+ \begin{lateximage}%
+ [(display math)]%
+ \LWR@origequation%
+}
+{%
+ \LWR@origendequation%
+ \end{lateximage}%
+ \end{BlockClass}%
+}
+% \end{macrocode}
+% \end{environment}
+
+
+% \subsection{\brand{MathJax} support}
+% \changes{v0.19}{2016/05/25}{\brand{MathJax} support added.}
+%
+% \DescribeCounter{LWR@nextequation} Used to add one to compute the next equation number.
+% \begin{macrocode}
+\newcounter{LWR@nextequation}
+% \end{macrocode}
+%
+%
+%
+% \begin{macro}{\LWR@syncmathjax} Sets the \brand{MathJax} equation format
+% and number for the following equations.
+%
+% These \brand{MathJax} commands are printed inside ``\cs{(}'' and ``\cs{)}'' characters.
+% They are printed to \HTML\ output, not interpreted by \LaTeX.
+% \begin{macrocode}
+\newcommand*{\LWR@syncmathjax}{%
+% \end{macrocode}
+% If using chapters, place the chapter number in front of the equation.
+% Otherwise, use the simple equation number.
+% \begin{macrocode}
+\ifcsdef{thechapter}{
+ \InlineClass{hidden}{
+ \textbackslash(
+ \textbackslash{}seteqsection \{\thechapter\}
+ \textbackslash)
+ }
+}
+{}% not using chapters
+% \end{macrocode}
+% \brand{MathJax} doesn't allow setting the equation number to 1:
+% \begin{macrocode}
+\ifthenelse{\cnttest{\value{equation}}>0}
+{
+% \end{macrocode}
+% Tell \brand{MathJax} that the next set of equations begins with the current \LaTeX{} equation
+% number, plus one.
+% \begin{macrocode}
+ \setcounter{LWR@nextequation}{\value{equation}}
+ \addtocounter{LWR@nextequation}{1}
+% \end{macrocode}
+% Place the \brand{MathJax} command inside ``\cs{(}'' and ``\cs{)}'' characters,
+% to be printed to \HTML, not interpreted by \LaTeX.
+% \begin{macrocode}
+ \InlineClass{hidden}{
+ \textbackslash(
+ \textbackslash{}seteqnumber \{\arabic{LWR@nextequation}\}
+ \textbackslash)
+ }
+}{}% not eq > 0
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@hidelatexequation} \marg{environment} \marg{contents}
+%
+% Creates the \LaTeX{} version of the equation
+% inside an \HTML\ comment.
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@hidelatexequation}{m +m}{%
+% \end{macrocode}
+% Stop \HTML\ paragraph handling and open an \HTML\ comment:
+% \begin{macrocode}
+\LWR@stoppars
+\LWR@htmlopencomment
+
+% \end{macrocode}
+% Start the \LaTeX\ math environment inside the \HTML\ comment:
+% \begin{macrocode}
+\begingroup
+\@nameuse{LWR@orig#1}
+% \end{macrocode}
+% While in the math environment,
+% restore various commands to their \LaTeX\ meanings.
+% \begin{macrocode}
+\LWR@restoreorigformatting
+% \end{macrocode}
+% ^^A When a label is encountered, the \HTML\ comment is closed,
+% ^^A the label is generated in an \HTML-output context,
+% ^^A then the \HTML\ comment is opened again.
+% See \cs{LWR@htmlmathlabel} in \cref{sec:amsmathsupport}.
+%
+% Print the contents of the equation:
+% \begin{macrocode}
+#2
+% \end{macrocode}
+% End the \LaTeX{} math environment inside the \HTML\ comment:
+% \begin{macrocode}
+\@nameuse{LWR@origend#1}
+\endgroup
+
+% \end{macrocode}
+% Close the \HTML\ comment and resume \HTML\ paragraph handling:
+% \begin{macrocode}
+\LWR@htmlclosecomment
+\LWR@startpars
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@addmathjax} \marg{environment} \marg{contents}
+%
+% Given the name of a math environment and its contents,
+% create a \brand{MathJax} instance.
+% The contents are printed to \HTML\ output, not interpreted by \LaTeX.
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@addmathjax}{m +m}{%
+% \end{macrocode}
+% Enclose the \brand{MathJax} environment inside printed ``\cs{(}'' and ``\cs{)}'' characters.
+% \begin{macrocode}
+\LWR@origtilde\LWR@orignewline
+\textbackslash{}begin\{#1\}
+% \end{macrocode}
+% Print the contents, sanitizing for \HTML\ special characters.
+% \begin{macrocode}
+\LWR@HTMLsanitizeexpand{\detokenize\expandafter{#2}}
+% \end{macrocode}
+% Close the \brand{MathJax} environment:
+% \begin{macrocode}
+\textbackslash{}end\{#1\}
+\LWR@orignewline
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Equation environment}
+%
+% Remember existing \env{equation} environment,
+% after redefined by \pkg{amsmath}, if loaded.
+% \begin{macrocode}
+\AtBeginDocument{
+\let\LWR@origequation\equation
+\let\LWR@origendequation\endequation
+\csletcs{LWR@origequation*}{equation*}
+\csletcs{LWR@origendequation*}{endequation*}
+}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\LWR@doequation} \marg{env contents} \marg{env name}
+%
+% \changes{v0.19}{2016/05/25}{\brand{MathJax} support.}
+% \changes{v0.52}{2018/03/28}{Fix: \env{equation*} with \env{split}.}
+%
+% For \SVG\ math output,
+% the contents are typeset using the original \env{equation}
+% inside a \env{lateximage}, along with an \element{alt} tag
+% containing a detokenized copy of the \LaTeX\ source for
+% the math.
+%
+% For \brand{MathJax} output, the contents are typeset in an
+% original \env{equation} environment placed inside a \HTML\
+% comment, with special processing for \cs{label}s.
+% The contents are also printed to the \HTML\ output
+% for processing by the \brand{MathJax} script.
+% \begin{macrocode}
+\newcommand*{\LWR@doequation}[2]{%
+
+% \end{macrocode}
+% If |mathjax| or |FormatWP|, print the \LaTeX\ expression:
+% \changes{v0.42}{2017/10/26}{If \progcode{FormatWP} print LaTeX expression.}
+% \begin{macrocode}
+\ifboolexpr{bool{mathjax} or ( bool{FormatWP} and bool{WPMarkMath} ) }%
+% \end{macrocode}
+% \brand{MathJax} output:
+% \begin{macrocode}
+{
+% \end{macrocode}
+% Print commands to syncronize \brand{MathJax}'s equation number and format
+% to the current \LaTeX\ chapter/section and equation number:
+% \begin{macrocode}
+ \LWR@syncmathjax
+% \end{macrocode}
+% Print the \LaTeX\ math inside an \HTML\ comment:
+% \begin{macrocode}
+ \LWR@hidelatexequation{#2}{#1}
+}
+% \end{macrocode}
+% SVG output:
+% Create the |lateximage| along with an \HTML\ \element{alt} tag
+% having an equation number, the \LaTeX{} equation environment
+% commmands, and the contents of the environment's \cs{BODY}.
+% \begin{macrocode}
+{% not mathjax
+% \end{macrocode}
+% Begin the \env{lateximage} with an \element{alt} tag containing the math source:
+% \changes{v0.50}{2018/03/02}{Improved \SVG\ math display.}
+% \changes{v0.51}{2018/03/11}{Fix: \cs{addcontentsline} inside \SVG\ math. Provides an autoid anchor.}
+% \changes{v0.52}{2018/03/31}{Fix: \env{equation*} now based on \env{equation} instead of \env{displaymath}.}
+% \begin{macrocode}
+ \ifstrequal{#2}{equation*}{%
+ \begin{BlockClass}{displaymath}%
+ }{%
+ \begin{BlockClass}{displaymathnumbered}%
+ }%
+ \LWR@newautoidanchor%
+ \booltrue{LWR@indisplaymathimage}%
+ \begin{lateximage}[%
+ \ifstrequal{#2}{equation*}{%
+ \ifdefequal{\LWR@equationtag}{\theequation}{%
+% no tag was given
+ }{%
+ (\LWR@equationtag) % tag was given
+ }%
+ }{%
+ (\LWR@equationtag) % automatic numbering
+ }%
+ \textbackslash{begin\{#2\}} % extra space
+ \LWR@HTMLsanitizeexpand{\detokenize\expandafter{#1}} % extra space
+ \textbackslash{end\{#2\}}%
+ ]% alt tag
+% \end{macrocode}
+% Support for \pkg{xfakebold}:
+% \changes{v0.67}{2019/02/17}{\pkg{xfakebold}: Added support.}
+% \begin{macrocode}
+ \LWR@applyxfakebold%
+% \end{macrocode}
+% Create the actual \LaTeX-formatted equation inside
+% the |lateximage| using the contents of the environment.
+% \begin{macrocode}
+ \@nameuse{LWR@orig#2}%
+ #1% contents collected by \collect@body
+ \@nameuse{LWR@origend#2}%
+ \end{lateximage}%
+ \end{BlockClass}%
+}% not mathjax
+}
+% \end{macrocode}
+%
+%
+% After the environment, if \brand{MathJax}, print the math to the \HTML\ output
+% for \brand{MathJax} processing:
+% \begin{macrocode}
+\newcommand*{\LWR@doendequation}[1]{%
+ \ifboolexpr{bool{mathjax} or ( bool{FormatWP} and bool{WPMarkMath} ) }%
+ {%
+ \LWR@addmathjax{#1}{\BODY}%
+ }{}%
+
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% Remove existing \env{equation} environment:
+% \begin{macrocode}
+\AtBeginDocument{
+\let\equation\relax
+\let\endequation\relax
+\csletcs{equation*}{relax}
+\csletcs{endequation*}{relax}
+}
+% \end{macrocode}
+
+
+% \begin{environment}{equation}
+% The new \env{equation} environment is created with
+% \cs{NewEnviron} (from the \pkg{environ} package),
+% which stores the contents of its environment in a
+% macro called \cs{BODY}.
+% \begin{macrocode}
+\AtBeginDocument{
+\NewEnviron{equation}%
+{\LWR@doequation{\BODY}{equation}}%
+[\LWR@doendequation{equation}]
+
+\LetLtxMacro\LWR@equationnormal\equation
+\LetLtxMacro\endLWR@equationnormal\endequation
+}
+% \end{macrocode}
+% \end{environment}
+
+
+% \begin{environment}{equation*}
+% \begin{macrocode}
+\AtBeginDocument{
+\NewEnviron{equation*}%
+{\LWR@doequation{\BODY}{equation*}}%
+[\LWR@doendequation{equation*}]
+
+\csletcs{LWR@equationnormalstar}{equation*}
+\csletcs{LWR@endequationnormalstar}{endequation*}
+}
+% \end{macrocode}
+% \end{environment}
+
+
+% Remember the ``less'' version of \env{equation}, which uses \brand{MathJax}
+% and \attribute{alt} tags, but does not support complicated contents such as
+% some \tikz\ expressions.
+% \begin{macrocode}
+\AtBeginDocument{
+\LetLtxMacro\LWR@equationless\equation
+\LetLtxMacro\endLWR@equationless\endequation
+\csletcs{LWR@equationlessstar}{equation*}
+\csletcs{LWR@endequationlessstar}{endequation*}
+}
+% \end{macrocode}
+
+
+% \subsection{\cs{displaymathnormal} and \cs{displaymathother}}
+%
+% \limitsmathdisplay
+%
+% \begin{macro}{\displaymathnormal} Use when display math environments have simple
+% math which is to sent to \brand{MathJax} or included in \HTML\ \attribute{alt} tags.
+% \margintag{simple math objects}
+% \changes{v0.51}{2018/03/21}{Processing for complicated display math.}
+% \begin{macrocode}
+\newcommand*{\displaymathnormal}{%
+\ifbool{LWR@origmathjax}{\booltrue{mathjax}}{\boolfalse{mathjax}}%
+\LetLtxMacro\[\LWR@openbracketnormal%
+\LetLtxMacro\]\LWR@closebracketnormal%
+\LetLtxMacro\displaymath\LWR@displaymathnormal%
+\LetLtxMacro\enddisplaymath\endLWR@displaymathnormal%
+\LetLtxMacro\equation\LWR@equationnormal%
+\LetLtxMacro\endequation\endLWR@equationnormal%
+\csletcs{equation*}{LWR@equationnormalstar}%
+\csletcs{endequation*}{LWR@endequationnormalstar}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\displaymathother} Use when display math environments have complicated
+% objects which will not work with MathJax or should not be
+% included in \HTML\ \attribute{alt} tags. \margintag{complicated math objects}
+% Complicated contents are more likely to compile correctly.
+% \changes{v0.51}{2018/03/21}{Processing for complicated display math.}
+% \begin{macrocode}
+\newcommand*{\displaymathother}{%
+\boolfalse{mathjax}%
+\LetLtxMacro\displaymath\LWR@displaymathother%
+\LetLtxMacro\enddisplaymath\endLWR@displaymathother%
+\LetLtxMacro\[\LWR@displaymathother%
+\LetLtxMacro\]\endLWR@displaymathother%
+\LetLtxMacro\equation\LWR@equationother%
+\LetLtxMacro\endequation\endLWR@equationother%
+\csletcs{equation*}{displaymath}%
+\csletcs{endequation*}{enddisplaymath}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \codeprint
+% \begin{macrocode}
+\begin{warpprint}
+% \end{macrocode}
+
+% Print-mode versions:
+% \begin{macrocode}
+\newcommand*{\displaymathnormal}{}
+\newcommand*{\displaymathother}{}
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpprint}
+% \end{macrocode}
+
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% \subsection{AMS Math environments}
+% \changes{v0.19}{2016/05/25}{\brand{MathJax} support added.}
+%
+% \subsubsection{Support macros}
+% \label{sec:amsmathsupport}
+%
+% \DescribeBoolean{LWR@amsmultline} True if processing a multline environment.
+%
+% To compensate for \env{multline}-spefific code,
+% |LWR@amsmultline| is used to add extra horizontal space in \cs{LWR@htmlmathlabel} if
+% is used in an \pkg{amsmath} environment which is
+% not a \env{multline} environment and not an \env{equation}.
+% \begin{macrocode}
+\newbool{LWR@amsmultline}
+\boolfalse{LWR@amsmultline}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@htmlmathlabel} \marg{label}
+% \gindex{label>math environment}
+%
+% \pkg{lwarp} points \cs{ltx@label} here.
+% This is used by \cs{label} when inside a
+% \LaTeX\ AMS math environment's math display environment.
+%
+% \cs{LWR@origltx@label} points to the \LaTeX\ original,
+% modified by \pkg{lwarp}, then by \pkg{amsmath},
+% then by \pkg{cleveref}.
+% \begin{macrocode}
+\newcommand*{\LWR@htmlmathlabel}[1]{%
+\LWR@traceinfo{LWR@htmlmathlabelb #1}%
+% \end{macrocode}
+% If |mathjax| or |FormatWP|, print the \LaTeX\ expression:
+% \changes{v0.42}{2017/10/26}{If \progcode{FormatWP} print LaTeX expression.}
+% \begin{macrocode}
+\ifboolexpr{bool{mathjax} or ( bool{FormatWP} and bool{WPMarkMath} ) }%
+{%
+% \end{macrocode}
+% The combined \LaTeX\ \& \HTML\ label is printed in a \cs{text} field:
+% \begin{macrocode}
+ \text{%
+% \end{macrocode}
+% Shift the label over to the right side of the environment to avoid
+% over-printing the math:
+% \begin{macrocode}
+ \ifbool{LWR@amsmultline}{}{\hspace*{\totwidth@}}%
+% \end{macrocode}
+% Temporarily end the \HTML\ comment,
+% insert the \LaTeX{} \& \HTML\ label, then
+% resume the \HTML\ comment.
+% \cs{@firstofone} is required to remove extra braces
+% introduced by the \pkg{amsmath} package.)
+% \begin{macrocode}
+ \LWR@htmlclosecomment%
+ \LWR@origltx@label{#1}%
+ \LWR@htmlopencomment%
+ }% text
+}% mathjax
+{%
+ \LWR@origltx@label{#1}%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \begin{macro}{\LWR@beginhideamsmath}
+% Starts hiding \LaTeX\ math inside an \HTML\ comment.
+% \begin{macrocode}
+\newcommand*{\LWR@beginhideamsmath}{
+\LWR@stoppars
+\LWR@origtilde\LWR@orignewline
+\LWR@htmlopencomment
+
+\begingroup
+\LWR@restoreorigformatting
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@endhideamsmath}
+% Ends hiding \LaTeX\ math inside an \HTML\ comment.
+% \begin{macrocode}
+\newcommand*{\LWR@endhideamsmath}{
+\endgroup
+
+\LWR@htmlclosecomment
+\LWR@orignewline
+\LWR@startpars
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+
+% \subsubsection{Environment patches}
+%
+% \changes{v0.19}{2016/05/25}{\brand{MathJax} support added.}
+% \changes{v0.33}{2017/06/20}{Fix: Incorrectly-inline math environments.}
+% \changes{v0.34}{2017/07/29}{Fix: Added the \env{eqnarray} environments.}
+%
+% The \pkg{amsmath} environments already collect their contents
+% in \cs{@envbody} for further processing. \env{eqnarray} is not an \AmS\ package,
+% and thus requires special handling.
+%
+% For \SVG\ math: Each envrionment is encapsulated inside a \env{lateximage} environment,
+% along with a special optional argument of \cs{LWR@amsmathbody}
+% or \cs{LWR@amsmathbodynumbered}
+% telling \env{lateximage} to use as the \HTML\ \element{alt} tag
+% the environment's contents which
+% were automatically captured by the \AmS{} environment.
+%
+% For \brand{MathJax}: Each environment is syched with \LaTeX's equation numbers,
+% typeset with \LaTeX\ inside an \HTML\ comment, then
+% printed to \HTML\ output for \brand{MathJax} to process.
+%
+
+
+% \begin{environment}{eqnarray}
+%
+% This environmnet is not an \AmS\ environment and thus its body is not
+% automatically captured, so the \pkg{environ} package is used to
+% capture the environment into \cs{BODY}.
+% \begin{macrocode}
+\let\LWR@origeqnarray\eqnarray
+\let\LWR@origendeqnarray\endeqnarray
+% \end{macrocode}
+%
+% To remember whether the starred environment was used, and thus
+% whether to number the equations:
+% \begin{macrocode}
+\newbool{LWR@numbereqnarray}
+\booltrue{LWR@numbereqnarray}
+% \end{macrocode}
+%
+% Common code used by \env{eqnarray} and \env{Beqnarray} (from \pkg{fancybox}):
+% \begin{macrocode}
+\newcommand{\LWR@eqnarrayfactor}{%
+% \end{macrocode}
+%
+% If |mathjax| or |FormatWP|, print the \LaTeX\ expression:
+% \changes{v0.42}{2017/10/26}{If \progcode{FormatWP} print LaTeX expression.}
+% \begin{macrocode}
+\ifboolexpr{bool{mathjax} or ( bool{FormatWP} and bool{WPMarkMath} ) }%
+{%
+% \end{macrocode}
+%
+% If \brand{MathJax}, the environment contents (the \cs{BODY}) are executed in a
+% \HTML\ comment to trigger the correct equation number increment (if not starred),
+% then are included verbatim in the output for \brand{MathJax} to interpret:
+% \begin{macrocode}
+ \LWR@syncmathjax
+ \boolfalse{LWR@amsmultline}
+ \ifbool{LWR@numbereqnarray}
+ {
+% \end{macrocode}
+%
+% If numbering the equations, execute a copy inside an \HTML\ comment block:
+% \begin{macrocode}
+ \LWR@beginhideamsmath
+ \LWR@origeqnarray
+ \BODY
+ \LWR@origendeqnarray
+ \LWR@endhideamsmath
+% \end{macrocode}
+%
+% Then print the (sanitized) contents to the output for \brand{MathJax} to interpret:
+% \begin{macrocode}
+ \LWR@addmathjax{eqnarray}{\BODY}
+ }%
+ {% not LWR@numbereqnarray
+% \end{macrocode}
+%
+% If not numbering equations, just create the contents for \brand{MathJax}:
+% \begin{macrocode}
+ \LWR@addmathjax{eqnarray*}{\BODY}
+ }% LWR@numbereqnarray
+}% mathjax
+{% not mathjax
+ \ifbool{LWR@numbereqnarray}
+ {
+% \end{macrocode}
+%
+% For numbered \SVG\ equations, first create a \env{lateximage} with
+% an \attribute{alt} attribute containing sanitized copy of the source code:
+% \changes{v0.42}{2017/10/12}{Fix: Numbering and naming AMS math environments.}
+% \changes{v0.50}{2018/03/02}{Improved \SVG\ math display.}
+% \changes{v0.51}{2018/03/11}{Fix: \cs{addcontentsline} inside \SVG\ math. Provides an autoid anchor.}
+% \begin{macrocode}
+ \begin{BlockClass}{displaymathnumbered}%
+ \LWR@newautoidanchor%
+ \booltrue{LWR@indisplaymathimage}%
+ \begin{lateximage}[(\LWR@startingequationtag--\LWR@equationtag)
+ \LWR@addmathjax{eqnarray}{\BODY}]
+% \end{macrocode}
+% Support for \pkg{xfakebold}:
+% \changes{v0.67}{2019/02/17}{\pkg{xfakebold}: Added support.}
+% \begin{macrocode}
+ \LWR@applyxfakebold%
+% \end{macrocode}
+% Create the image contents using an actual \env{eqnarray}:
+% \begin{macrocode}
+ \LWR@origeqnarray
+ \BODY
+ \LWR@origendeqnarray
+ \end{lateximage}
+ \end{BlockClass}
+ }%
+ {% not LWR@numbereqnarray
+% \end{macrocode}
+% If not numbered, do the same, but an extra \cs{nonumber} seems to be required:
+% \changes{v0.50}{2018/03/02}{Improved \SVG\ math display.}
+% \changes{v0.51}{2018/03/11}{Fix: \cs{addcontentsline} inside \SVG\ math. Provides an autoid anchor.}
+% \begin{macrocode}
+ \begin{BlockClass}{displaymath}
+ \LWR@newautoidanchor%
+ \booltrue{LWR@indisplaymathimage}%
+ \begin{lateximage}[\LWR@addmathjax{eqnarray*}{\BODY}]
+% \end{macrocode}
+% Support for \pkg{xfakebold}:
+% \changes{v0.67}{2019/02/17}{\pkg{xfakebold}: Added support.}
+% \begin{macrocode}
+ \LWR@applyxfakebold%
+% \end{macrocode}
+% \begin{macrocode}
+ \LWR@origeqnarray
+ \BODY
+ \nonumber
+ \LWR@origendeqnarray
+ \end{lateximage}
+ \end{BlockClass}
+ }% LWR@numbereqnarray
+}% not mathjax
+% \end{macrocode}
+%
+% Default to number equations in the future:
+% \begin{macrocode}
+\booltrue{LWR@numbereqnarray}
+}
+% \end{macrocode}
+%
+% \env{eqnarray} itself is made with a blank line before and after to
+% force it to be on its own line:
+% \begin{macrocode}
+\RenewEnviron{eqnarray}
+{%
+
+\LWR@eqnarrayfactor
+
+}
+% \end{macrocode}
+%
+% The starred version is patched to turn off the numbering:
+% \begin{macrocode}
+\csgpreto{eqnarray*}{\boolfalse{LWR@numbereqnarray}}
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+
+% \section{Lateximages}
+%
+% \subsection{Description}
+%
+% \DescribeEnv{lateximage}
+% A \env{lateximage} is a piece of the document which is typeset in
+% \LaTeX\ then included in the \HTML\ output as an image.
+% This is used for math if \SVG\ math is chosen, and also
+% for the \env{picture}, \env{tikzpicture}, and other environments.
+%
+% Before typesetting the \env{lateximage} a large number of formatting,
+% graphics, and symbols-related macros are temporarily restored
+% to their print-mode meaning by \cs{LWR@restoreorigformatting}.
+% (See \cref{sec:restoreorigformatting}.)
+%
+% A \env{lateximage} is typeset on its own \PDF\ page inside an \HTML\ comment
+% which starts on the preceeding page and ends on following page, and instructions are written to
+% |lateximage.txt| for \prog{lwarpmk} to extract the \env{lateximage} from the page of the \PDF\ file
+% then generate an accompanying |.svg| file image file. Meanwhile, instructions to
+% show this image are placed into the \HTML\ file after the comment.
+%
+% An \HTML\ \element{span} is created to hold both the \HTML\ comment,
+% which will have the \prog{pdftotext} conversion,
+% and also the link to the final |.svg| image.
+%
+% A \LaTeX\ label is used to remember which \PDF\ page has the image.
+% A label is used because footnotes, endnotes, and pagenotes may cause the image to appear
+% at a later time. The label is declared along with the image, and so it correctly remembers
+% where the image finally ended up.
+%
+% The \HTML\ \attribute{alt} tag is set to the \LaTeX\ source for \SVG\ math,
+% \margintag{\HTML\ \attribute{alt} tag}
+% some chemistry expressions, and perhaps some other expressions which make sense
+% for text copy/paste. In some other cases, the \attribute{alt} tag is set
+% according to the package name.
+%
+% \describemathimagename
+%
+% \describepackagediagramname
+%
+% \limitslateximagefontsize
+%
+%
+%
+% \subsection{Support counters and macros}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+%
+% \DescribeCounter{LWR@lateximagenumber}
+% Sequence the images.
+% \begin{macrocode}
+\newcounter{LWR@lateximagenumber}
+\setcounter{LWR@lateximagenumber}{0}
+% \end{macrocode}
+% \DescribeCounter{LWR@lateximagedepth}
+% Do not create \cs{lateximage} inside of \cs{lateximage}.
+% \begin{macrocode}
+\newcounter{LWR@lateximagedepth}
+\setcounter{LWR@lateximagedepth}{0}
+% \end{macrocode}
+
+% A few utility macros to write special characters:
+% \begin{macrocode}
+\edef\LWR@hashmark{\string#} % for use in \write
+\edef\LWR@percent{\@percentchar} % for use in \write
+% \end{macrocode}
+%
+%
+% \DescribeCounter{LWR@LIpage}
+% Used to reference the \PDF\ page number of a lateximage
+% to be written into |<project>-images.txt|.
+% \begin{macrocode}
+\newcounter{LWR@LIpage}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \subsection{Font size}
+% \label{sec:mathfontscale}
+%
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+
+% \begin{macro}{\LateximageFontSizeName}
+% Declares how large to write text in \cs{lateximage}s. The |.svg| file text size
+% should blend well with the surrounding \HTML\ text size.
+%
+% \emph{Do not include the leading backslash in the name.}
+% \trouble[no backslash]{LateximageFontSizeName=\cs{LateximageFontSizeName}}
+%
+% \changes{v0.19}{2016/05/29}{Add: User-adjustable math/lateximage font size.}
+% \changes{v0.54}{2018/04/16}{Defaults to \progcode{normalsize}.}
+% \begin{macrocode}
+\newcommand*{\LateximageFontSizeName}{normalsize}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LateximageFontScale}
+% \changes{v0.52}{2018/03/24}{Added user-adjustable \SVG\ math font scaling.}
+% Declares how large to scale inline \SVG\ math images. The |.svg| file text size
+% should blend well with the surrounding \HTML\ text size.
+% The default is .75, but it may be redefined as needed depending on the
+% \HTML\ font.
+%
+% \begin{macrocode}
+\newcommand*{\LateximageFontScale}{.75}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+% \subsection{Sanitizing math expressions for \HTML}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{macro}{\LWR@HTMLsanitize} \marg{text}
+%
+% Math expressions are converted to |lateximage|s,
+% and some math environments may contain
+% |&|, |<|, or |>|, which should not be allowed
+% inside an \HTML\ \element{alt} tag, so must convert them to \HTML\ entities.
+%
+% Two versions follow, depending on expansion needs.
+% There may be a better way\dots
+%
+% \changes{v0.36}{2017/08/16}{Fix for \pkg{babel-french}.}
+% \changes{v0.51}{2018/03/07}{Fix: Escapes double quotes.}
+% \begin{macrocode}
+\newrobustcmd{\LWR@HTMLsanitize}[1]{%
+% \end{macrocode}
+% Cancel French \pkg{babel} character handling,
+% and fully expand the strings:
+% \begin{macrocode}
+\begingroup%
+\LWR@FBcancel%
+\fullexpandarg%
+% \end{macrocode}
+% The |&|, |<|, and |>| may be interpreted by the browser:
+% \begin{macrocode}
+\protect\StrSubstitute{\detokenize{#1}}%
+{\detokenize{&}}{\detokenize{&amp;}}[\LWR@strresult]%
+% \end{macrocode}
+% \begin{macrocode}
+\protect\StrSubstitute{\detokenize\expandafter{\LWR@strresult}}%
+{\detokenize{<}}{\detokenize{&lt;}}[\LWR@strresult]%
+% \end{macrocode}
+% \begin{macrocode}
+\protect\StrSubstitute{\detokenize\expandafter{\LWR@strresult}}%
+{\detokenize{>}}{\detokenize{&gt;}}[\LWR@strresult]%
+% \end{macrocode}
+% The double quote occasionally causes problems.
+% \begin{macrocode}
+\protect\StrSubstitute{\detokenize\expandafter{\LWR@strresult}}%
+{\detokenize{"}}{\detokenize{&quot;}}[\LWR@strresult]%
+% \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 |#|.
+% This must be done after all the above changes.
+% Attempting another conversion after this causes an error upon further expansion.
+% \begin{macrocode}
+\protect\StrSubstitute{\detokenize\expandafter{\LWR@strresult}}%
+{\detokenize{##}}{\LWR@origpound}[\LWR@strresult]%
+% \end{macrocode}
+% \begin{macrocode}
+\LWR@strresult%
+\endgroup%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@HTMLsanitizeexpand} \marg{text}
+%
+% This version expands the argument before sanitizing it.
+%
+% \changes{v0.36}{2017/08/16}{Fix for \pkg{babel-french}.}
+% \changes{v0.51}{2018/03/07}{Fix: Escapes double quotes.}
+% \begin{macrocode}
+\newrobustcmd{\LWR@HTMLsanitizeexpand}[1]{%
+% \end{macrocode}
+% Cancel French \pkg{babel} character handling,
+% and fully expand the strings:
+% \begin{macrocode}
+\begingroup%
+\LWR@FBcancel%
+\fullexpandarg%
+% \end{macrocode}
+% The difference between this and \cs{LWR@HTMLsanitize} (without ``expand'')
+% is the following \cs{expandafter}:
+% \begin{macrocode}
+\protect\StrSubstitute{\detokenize\expandafter{#1}}%
+{\detokenize{&}}{\detokenize{&amp;}}[\LWR@strresult]%
+% \end{macrocode}
+% \begin{macrocode}
+\protect\StrSubstitute{\detokenize\expandafter{\LWR@strresult}}%
+{\detokenize{<}}{\detokenize{&lt;}}[\LWR@strresult]%
+% \end{macrocode}
+% \begin{macrocode}
+\protect\StrSubstitute{\detokenize\expandafter{\LWR@strresult}}%
+{\detokenize{>}}{\detokenize{&gt;}}[\LWR@strresult]%
+% \end{macrocode}
+% \begin{macrocode}
+\protect\StrSubstitute{\detokenize\expandafter{\LWR@strresult}}%
+{\detokenize{"}}{\detokenize{&quot;}}[\LWR@strresult]%
+% \end{macrocode}
+% \cs{LWR@HTMLsanitizeexpand} is not used for defining new MathJax macros,
+% so the |##| conversion is not needed here.
+% \begin{macrocode}
+\LWR@strresult%
+\endgroup%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Equation numbers}
+
+% \DescribeCounter{LWR@startingequation}
+% For use with |lateximage| and multi-line numbered equations.
+% Remembers the next equation number so that it may be printed
+% in the alt tag.
+%
+% \changes{v0.42}{2017/10/12}{Fix: Numbering and naming AMS math environments.}
+%
+% \begin{macrocode}
+\newcounter{LWR@startingequation}
+
+\@ifundefined{chapter}
+{
+\renewcommand{\theLWR@startingequation}{%
+\arabic{LWR@startingequation}%
+}
+}
+{% chapter defined
+\renewcommand{\theLWR@startingequation}{%
+\ifnumcomp{\value{chapter}}{>}{0}{\arabic{chapter}.}{}%
+\arabic{LWR@startingequation}%
+}
+}
+% \end{macrocode}
+
+% \DescribeBoolean{LWR@isstartingequation}
+% True for the first equation tag, false for later tags in the same environment.
+% \begin{macrocode}
+\newbool{LWR@isstartingequation}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@startingequationtag} \quad
+% Prints the starting equation number or tag.
+% \begin{macrocode}
+\let\LWR@startingequationtag\theLWR@startingequation
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@equationtag} \quad
+% Prints the ending equation number or tag.
+%
+% This is reset by \env{lateximage},
+% may be temporarily overwritten by \cs{tag} calling \cs{LWR@remembertag}.
+% \begin{macrocode}
+\newcommand*{\LWR@equationtag}{}
+% \end{macrocode}
+% \end{macro}
+
+
+% Only if \SVG\ math, patch \cs{tag} after packages have loaded,
+% in case someone else modified \cs{tag}.
+% \begin{macrocode}
+\AtBeginDocument{
+
+\ifbool{mathjax}{}{% not mathjax
+% \end{macrocode}
+
+% \begin{macro}{\LWR@remembertag} \marg{tag}
+%
+% For use inside the math environments while using \SVG\ math.
+% Sets \cs{theLWR@startingequation} and \cs{theequation}
+% to the given tag.
+%
+% \changes{v0.42}{2017/10/12}{Fix: Numbering and naming AMS math environments.}
+%
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@remembertag}{m}{%
+\ifbool{LWR@isstartingequation}%
+{%
+ \global\boolfalse{LWR@isstartingequation}%
+ \xdef\LWR@startingequationtag{#1}%
+}{}%
+\xdef\LWR@equationtag{#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+}% not mathjax
+}% AtBeginDocument
+% \end{macrocode}
+
+
+% \subsection{\HTML\ \attribute{alt} tags}
+
+% \begin{macro}{\LWR@amsmathbody} \marg{envname} \qquad
+% For use inside the optional argument to a \env{lateximage}
+% to add the contents of a AMS math environment to the \element{alt} tag.
+%
+% \changes{v0.42}{2017/10/12}{Fix: Numbering and naming AMS math environments.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@amsmathbody}[1]
+{%
+\textbackslash\{begin\}\{#1\} % extra space
+\LWR@HTMLsanitizeexpand{\detokenize\expandafter{\the\@envbody}}%
+\textbackslash\{end\}\{#1\}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@amsmathbodynumbered} \marg{envname} \qquad
+% For use inside the optional argument to a \env{lateximage}
+% to add the contents of a AMS math environment to the \attribute{alt} tag,
+% prefixed by the equation numbers.
+%
+% \changes{v0.42}{2017/10/12}{Fix: Numbering and naming AMS math environments.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@amsmathbodynumbered}[1]
+{%
+\ifnumcomp{\value{LWR@startingequation}}{=}{\value{equation}}%
+{(\LWR@equationtag)}%
+{(\LWR@startingequationtag--\LWR@equationtag)} % extra space
+\LWR@amsmathbody{#1} % extra space
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{\env{lateximage} environment}
+
+% \begin{environment}{lateximage} * \oarg{2: \element{alt} tag}
+% \oarg{3: add'l hashing} \oarg{4: \CSS\ style}
+%
+% Typesets the contents and then renders the result as an \SVG\ file.
+% Star causes the image to be hashed for reuse.
+%
+% The optional \element{alt} tag is included in the \HTML\ code for use with copy/paste.
+%
+% \describehashing
+%
+% \DescribeFile{*_html.aux}
+% A new label is placed into the file \filenm{*_html.aux}:
+% \begin{sourceverb}
+% \newlabel{LWRlateximage-<BaseJobname>-<number>}{{<x>}{<y>}}
+% \end{sourceverb}
+% This is used to find the image in the \PDF\ file, according to its name.
+%
+% \DescribeFile{*-images.txt}
+% A list of images to generate is created in \filenm{<jobname>-images.txt}.
+% Each line has three pipe-delimited fields,
+% containing the \PDF\ page number from \filenm{<jobname>_html.pdf}, where the image
+% is located, a boolean indicating whether the image is hashed, and
+% the filename of the image.
+% The last line has ``end'' in each field, and is used to detect
+% an incomplete compile.
+%
+%
+% \changes{v0.18}{2016/05/18}{Suppress extra space.}
+% \changes{v0.18}{2016/05/18}{pdfcrop: -{}-hires added.}
+% \changes{v0.18}{2016/05/19}{Reorganize \cs{HomeHTMLFilename} logic.}
+% \changes{v0.26}{2017/03/22}{Print mode now uses a \env{minipage} of \cs{linewidth}.}
+% \changes{v0.26}{2017/03/29}{Labels track page numbers of lateximages.}
+% \changes{v0.34}{2017/07/29}{Fix: \env{lateximage} with
+% \env{minipage}, \cs{parbox}, \cs{makebox}, \cs{fbox}, \cs{framebox},
+% \cs{raisebox}, \cs{scalebox}, \cs{reflectbox}.}
+% \changes{v0.36}{2017/08/16}{Footnotes appear in regular text instead of
+% the \protect\env{lateximage} \protect\env{minipage}.}
+% \changes{v0.47}{2018/01/24}{Added \CSS\ style option.}
+% \changes{v0.51}{2018/03/07}{Added additional hashing option.}
+% \changes{v0.66}{2019/01/27}{Adds \cs{BaseJobname} for multiple projects.}
+%
+% \begin{macrocode}
+\catcode`\$=\active%
+
+\NewDocumentEnvironment{lateximage}{s O{(image)} O{} O{}}
+{%
+\LWR@traceinfo{lateximage: starting on \jobname.pdf page \arabic{page}}%
+\LWR@traceinfo{lateximage: entering depth is \arabic{LWR@lateximagedepth}}%
+% \end{macrocode}
+% Nested |lateximage|s remain one large |lateximage|:
+% \begin{macrocode}
+\ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
+% \end{macrocode}
+% If nesting inside an already-existing lateximage, simply record one more level.
+% \AmS\ packages redefine \cs{addtocounter} to do nothing if inside a \cs{text},
+% so lower-level \TeX\ macros are used for tracking nested \env{lateximage}s.
+% \changes{v0.51}{2018/03/07}{Fix: \env{lateximage} inside \AmS\ \cs{text}.}
+% \begin{macrocode}
+{%
+% \addtocounter{LWR@lateximagedepth}{1}%
+ \global\advance\c@LWR@lateximagedepth 1\relax% Due to AmS \text macro.
+}%
+% \end{macrocode}
+% Otherwise, this is the outer-most lateximage:
+% \begin{macrocode}
+{% start of outer-most lateximage
+% \end{macrocode}
+% Remember the next equation number to be allocated, in case it must be
+% printed in a multi-equation environment:
+% \changes{v0.42}{2017/10/12}{Fix: Numbering and naming AMS math environments.}
+% \begin{macrocode}
+\LWR@traceinfo{lateximage: starting outer-most lateximage}%
+ \setcounter{LWR@startingequation}{\value{equation}}%
+ \addtocounter{LWR@startingequation}{1}%
+ \booltrue{LWR@isstartingequation}%
+ \let\LWR@startingequationtag\theLWR@startingequation%
+% \end{macrocode}
+% The default equation tag, unless overwritten by \cs{tag}:
+% \begin{macrocode}
+ \let\LWR@equationtag\theequation%
+% \end{macrocode}
+% Starting a new lateximage:
+% \begin{macrocode}
+ \addtocounter{LWR@lateximagenumber}{1}%
+ \LWR@traceinfo{lateximage: LWR@lateximagenumber is \arabic{LWR@lateximagenumber}}%
+% \end{macrocode}
+% While inside a lateximage, locally do not use mathjax:
+% \begin{macrocode}
+ \boolfalse{mathjax}%
+% \end{macrocode}
+% Be sure that are doing a paragraph:
+% \begin{macrocode}
+ \LWR@ensuredoingapar%
+% \end{macrocode}
+% Next file:
+% \begin{macrocode}
+ \addtocounter{LWR@externalfilecnt}{1}%
+ \LWR@traceinfo{lateximage: LWR@externalfilecnt is \arabic{LWR@externalfilecnt}}%
+% \end{macrocode}
+% Figure out what the next page number will be.
+% \cs{setcounterpageref} assigns |LWR@LIpage| to the page number for
+% the reference |LWRlateximage-BaseJobname-XXX|:
+% \begin{macrocode}
+ \setcounterpageref{LWR@LIpage}{%
+ LWRlateximage-\BaseJobname-\arabic{LWR@lateximagenumber}%
+ }%
+ \LWR@traceinfo{lateximage: LWR@LIpage is \arabic{LWR@LIpage}}%
+% \end{macrocode}
+% Create an \HTML\ span which will hold the comment which contains the \prog{pdftotext} translation
+% of the image's page, and also will hold the link to the |.svg| file:
+% \changes{v0.66}{2019/02/02}{Improved \HTML\ formatting.}
+% \begin{macrocode}
+ \LWR@htmltag{span\LWR@indentHTML%
+ id="lateximage-\BaseJobname-\arabic{LWR@lateximagenumber}"\LWR@indentHTML
+ class="lateximagesource"\LWR@orignewline
+ }%
+% \end{macrocode}
+% Write instructions to the |<ImagesDirectory>.txt| file:
+% \changes{v0.50}{2018/02/22}{MD5 hash avoids duplicate \SVG\ math.}
+% \begin{macrocode}
+ \LWR@traceinfo{lateximage: about to write to \BaseJobname-images.txt}%
+ \IfBooleanTF{#1}% starred
+ {% hash
+ \LWR@traceinfo{lateximage: hash true, adding %
+ !\detokenize\expandafter{#2}!\detokenize\expandafter{#3}!}%
+% \end{macrocode}
+% Compute and save the hashed file name for later use:
+% \changes{v0.52}{2018/03/25}{Fix for hash expansion.}
+% \begin{macrocode}
+ \edef\LWR@hashedname{%
+ \LWR@mdfive{\detokenize\expandafter{#2}-!-#3}%
+ }%
+ \LWR@traceinfo{lateximage: hash is \LWR@hashedname}%
+% \end{macrocode}
+% Write the page, hashing, and hashed name:
+% \begin{macrocode}
+ \immediate\write\LWR@lateximagesfile{%
+ |\arabic{LWR@LIpage}|true|\LWR@hashedname|%
+ }%
+ }% hash
+ {% no hash
+% \end{macrocode}
+% No hash, so write the page, no hashing, and the image number:
+% \begin{macrocode}
+ \LWR@traceinfo{lateximage: hash false}%
+ \immediate\write\LWR@lateximagesfile{%
+ |\arabic{LWR@LIpage}|false|\LWR@ImagesName\arabic{LWR@externalfilecnt}|%
+ }%
+ }% no hash
+% \end{macrocode}
+% Place an open comment tag.
+% This will hide any traces of the lateximage \PDF\ page which were picked up by
+% \prog{pdftotext}.
+% \begin{macrocode}
+ \LWR@traceinfo{lateximage: about to create open comment}%
+ \LWR@htmlopencomment%
+% \end{macrocode}
+% One level deeper. At this outer-most \env{lateximage}, it is known
+% that this is not being used inside an \AmS\ \cs{text}, since the outer-most
+% level will never be in math mode.
+% \begin{macrocode}
+ \addtocounter{LWR@lateximagedepth}{1}%
+% \end{macrocode}
+% Start the new \PDF\ page:
+% \begin{macrocode}
+ \LWR@traceinfo{lateximage: about to create a new page}%
+ \LWR@orignewpage%
+% \end{macrocode}
+% Typeset the image in a ``standard'' width page and font size:
+% \begin{macrocode}
+ \LWR@traceinfo{lateximage: about to create minipage}%
+ \LWR@print@minipage{6in}%
+ \@nameuse{LWR@print@\LateximageFontSizeName}%
+% \end{macrocode}
+% Temporarily restore formatting to its \PDF\ definitions:
+% Do not produce \HTML\ tags for \cs{hspace}, etc. inside a lateximage.
+% \begin{macrocode}
+ \LWR@traceinfo{lateximage: about to temporarily restore formatting}%
+ \LWR@restoreorigformatting%
+% \end{macrocode}
+% Use full-page footnotes instead of minipage footnotes.
+% These become \HTML\ footnotes.
+% \begin{macrocode}
+ \def\@mpfn{footnote}%
+ \def\thempfn{\thefootnote}%
+ \LetLtxMacro\@footnotetext\LWR@footnotetext%
+% \end{macrocode}
+% Create the |LWRlateximage<number>| label:
+% \begin{macrocode}
+ \LWR@traceinfo{lateximage: about to create label}%
+ \LWR@orig@label{LWRlateximage-\BaseJobname-\arabic{LWR@lateximagenumber}}%
+ \LWR@traceinfo{lateximage: finished creating the label}%
+% \end{macrocode}
+% Enable print-mode math functions:
+% \changes{v0.50}{2018/02/20}{Fix: SVG math in a section name.}
+% \begin{macrocode}
+ \LetLtxMacro$\LWR@origdollar%
+ \catcode`\$=3% math shift
+ \LetLtxMacro\(\LWR@origopenparen%
+ \LetLtxMacro\)\LWR@origcloseparen%
+% \end{macrocode}
+% Only enable print-mode display math if are not already inside display math:
+% \changes{v0.51}{2018/03/21}{Processing for complicated display math.}
+% \begin{macrocode}
+ \ifbool{LWR@indisplaymathimage}{}{% not in display math
+ \LetLtxMacro\[\LWR@origopenbracket%
+ \LetLtxMacro\]\LWR@origclosebracket%
+ \let\equation\LWR@origequation%
+ \let\endequation\LWR@origendequation%
+ \csletcs{equation*}{LWR@origequation*}%
+ \csletcs{endequation*}{LWR@origendequation*}%
+ }% not in display math
+% \end{macrocode}
+% For \pkg{chemformula}:
+% \begin{macrocode}
+ \LetLtxMacro\LWR@newsingledollar$%
+ \LetLtxMacro\LWR@newsingledollar$% syntax highlighting
+% \end{macrocode}
+% \begin{macrocode}
+}% end of outer-most lateximage
+\LWR@traceinfo{lateximage: finished start of environment}%
+}% end of \begin{lateximage}
+% \end{macrocode}
+%
+% When the environment closes:
+% \margintag{\cs{endlateximage}}
+%
+% \begin{macrocode}
+{% start of \end{lateximage}
+\LWR@traceinfo{lateximage: starting end of lateximage}%
+% \end{macrocode}
+% Nested more than one deep?
+% \begin{macrocode}
+\LWR@traceinfo{lateximage: internal depth was \arabic{LWR@lateximagedepth}}%
+\ifnumcomp{\value{LWR@lateximagedepth}}{>}{1}%
+% \end{macrocode}
+% If nesting inside an already existing lateximage, simply record one less level.
+% Uses a lower-level \TeX\ macro due to \AmS\ \cs{text} change of \cs{addtocounter}.
+% \begin{macrocode}
+{%
+ \LWR@traceinfo{lateximage: unnesting}%
+ \global\advance\c@LWR@lateximagedepth -1\relax%
+}%
+% \end{macrocode}
+% If this is the outer-most lateximage:
+% \begin{macrocode}
+{% end of outer-most lateximage
+% \end{macrocode}
+% Finish the lateximage minipage and start a new \PDF\ page:
+% \changes{v0.69}{2019/03/14}{Fix for \prog{pdftotext} errors from font size change.}
+% \begin{macrocode}
+\LWR@traceinfo{lateximage: ending outer-most lateximage}%
+ \endLWR@print@minipage%
+ \LWR@orignewpage%
+% \end{macrocode}
+% Close the \HTML\ comment which encapsulated any traces of the lateximage picked up by \prog{pdftotext}:
+% \begin{macrocode}
+ \LWR@print@vspace*{.5\baselineskip}%
+ \LWR@htmlclosecomment%
+ \LWR@traceinfo{lateximage: The page after the image is \arabic{page}}%
+% \end{macrocode}
+% Create a link to the lateximage, allowing its natural height:
+% \changes{v0.47}{2018/01/26}{Fix: Line wrap at \HTML\ hyphen.}
+% \changes{v0.50}{2018/02/22}{MD5 hash avoids duplicate \SVG\ math.}
+% \begin{macrocode}
+ \IfBooleanTF{#1}% starred
+ {% hash
+ \LWR@subinlineimage[#2]{lateximage}%
+ {%
+ \LWR@ImagesDirectory\OSPathSymbol%
+ \LWR@print@mbox{\LWR@hashedname}%
+ }{svg}{#4}%
+ }% hash
+ {% no hash
+ \LWR@subinlineimage[#2]{lateximage}%
+ {%
+ \LWR@ImagesDirectory\OSPathSymbol%
+ \LWR@print@mbox{\LWR@ImagesName\theLWR@externalfilecnt}%
+ }{svg}{#4}%
+ }% no hash
+% \end{macrocode}
+% Be sure that are doing a paragraph:
+% \begin{macrocode}
+ \LWR@ensuredoingapar%
+% \end{macrocode}
+% Close the \HTML\ span which has the \prog{pdftotext} comment and also the link to the |.svg| image:
+% \begin{macrocode}
+ \LWR@htmltag{/span}%
+ \ifbool{HTMLDebugComments}{%
+ \LWR@htmlcomment{End of lateximage}%
+ }{}%
+% \end{macrocode}
+% Undo one lateximage level.
+% This is not inside an \AmS\ \cs{text}, so regular \cs{addtocounter} may be used here.
+% \begin{macrocode}
+ \addtocounter{LWR@lateximagedepth}{-1}%
+}% end of outer-most lateximage
+\LWR@traceinfo{lateximage: exiting depth is \arabic{LWR@lateximagedepth}}%
+\LWR@traceinfo{lateximage: done}%
+}%
+\catcode`\$=3% math shift
+\end{warpHTML}
+% \end{macrocode}
+% \end{environment}
+
+% \codeprint
+% \begin{macrocode}
+\begin{warpprint}
+% \end{macrocode}
+
+% \begin{environment}{lateximage} \oarg{\element{alt} tag} \oarg{\CSS\ style}
+%
+% \env{varwidth} is used to create a box of the natural width of its contents.
+%
+% \changes{v0.48}{2018/02/02}{Print mode boxed to natural width.}
+% \begin{macrocode}
+\NewDocumentEnvironment{lateximage}{s o o o}
+ {\begin{varwidth}[b]{\linewidth}}
+ {\end{varwidth}}
+% \end{macrocode}
+% \end{environment}
+
+% \begin{macrocode}
+\end{warpprint}
+% \end{macrocode}
+
+
+
+
+% \section{\env{center}, \env{flushleft}, \env{flushright}}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{environment}{center}
+% Replace \env{center} functionality with \CSS\ tags:
+% \changes{v0.42}{2017/10/26}{If \progcode{FormatWP} use explicit \attribute{text-align}.}
+% \changes{v0.47}{2018/01/26}{Fix: Line wrap at \HTML\ hyphen.}
+% \begin{macrocode}
+\renewenvironment*{center}
+{
+\LWR@forcenewpage
+\ifbool{FormatWP}
+{\BlockClass[\LWR@print@mbox{text-align:center}]{center}}
+{\BlockClass{center}}
+}
+{\endBlockClass}
+% \end{macrocode}
+% \end{environment}
+
+
+% \begin{environment}{flushright}
+% \changes{v0.47}{2018/01/26}{Fix: Line wrap at \HTML\ hyphen.}
+% \begin{macrocode}
+\renewenvironment*{flushright}
+{
+\LWR@forcenewpage
+\ifbool{FormatWP}
+{\BlockClass[\LWR@print@mbox{text-align:right}]{flushright}}
+{\BlockClass{flushright}}
+}
+{\endBlockClass}
+% \end{macrocode}
+% \end{environment}
+
+% \begin{environment}{flushleft}
+% \changes{v0.47}{2018/01/26}{Fix: Line wrap at \HTML\ hyphen.}
+% \begin{macrocode}
+\renewenvironment*{flushleft}
+{
+\LWR@forcenewpage
+\ifbool{FormatWP}
+{\BlockClass[\LWR@print@mbox{text-align:left}]{flushleft}}
+{\BlockClass{flushleft}}
+}
+{\endBlockClass}
+% \end{macrocode}
+% \end{environment}
+
+
+% \cs{centering}, \cs{raggedleft}, and \cs{raggedright} usually have no effect
+% on the \HTML\ output, but they may be used to compare with the next token
+% to identify their use at the start of a float. See \cs{LWR@floatalignment}.
+
+% \begin{macro}{\centering}
+% \changes{v0.54}{2018/04/19}{Added debug comment.}
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@centering}{%
+\ifbool{HTMLDebugComments}{%
+ \LWR@htmlcomment{centering}%
+}{}%
+}
+\LWR@formatted{centering}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\raggedleft}
+% \changes{v0.54}{2018/04/19}{Added debug comment.}
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@raggedleft}{%
+\ifbool{HTMLDebugComments}{%
+ \LWR@htmlcomment{raggedleft}%
+}{}%
+}
+\LWR@formatted{raggedleft}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\raggedright}
+% \changes{v0.54}{2018/04/19}{Added debug comment.}
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@raggedright}{%
+\ifbool{HTMLDebugComments}{%
+ \LWR@htmlcomment{raggedright}%
+}{}%
+}
+\LWR@formatted{raggedright}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\leftline} \marg{text}
+% \changes{v0.48}{2018/02/03}{Added.}
+% \begin{macrocode}
+\renewcommand{\leftline}[1]{\begin{flushleft}#1\end{flushleft}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\centerline} \marg{text}
+% \changes{v0.48}{2018/02/03}{Added.}
+% \begin{macrocode}
+\renewcommand{\centerline}[1]{\begin{center}#1\end{center}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\rightline} \marg{text}
+% \changes{v0.48}{2018/02/03}{Added.}
+% \begin{macrocode}
+\renewcommand{\rightline}[1]{\begin{flushright}#1\end{flushright}}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+
+
+% ^^A *preloaded
+% \section{Preloaded packages}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+%
+% If the given package was loaded before or by \pkg{lwarp},
+% load the \pkg{lwarp} version as well.
+% \begin{macro}{\LWR@PreloadedPackage} \marg{packagename}
+% \changes{v0.62}{2018/11/17}{Added.}
+% \changes{v0.65}{2018/12/21}{\cs{AtBeginDocument} to avoid option clashes.}
+% \begin{macrocode}
+\newcommand*{\LWR@PreloadedPackage}[1]{%
+ \@ifpackageloaded{#1}%
+ {%
+ \AtBeginDocument{
+ \LWR@origRequirePackage{lwarp-#1}%
+ }
+ }%
+ {}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% If \pkg{inputtrc} was loaded before \pkg{lwarp},
+% as is usually done,
+% explicitly load the lwarp patches now:
+% \begin{macrocode}
+\LWR@PreloadedPackage{inputtrc}
+% \end{macrocode}
+
+% If \pkg{textcomp} was loaded before \pkg{lwarp},
+% perhaps as part of the font-related packages,
+% explicitly load the lwarp patches now:
+% \begin{macrocode}
+\LWR@PreloadedPackage{textcomp}
+% \end{macrocode}
+
+% If \pkg{xunicode} was loaded before \pkg{lwarp},
+% perhaps as part of the font-related packages,
+% explicitly load the lwarp patches now:
+% \begin{macrocode}
+\LWR@PreloadedPackage{xunicode}
+% \end{macrocode}
+
+% If \pkg{graphics} or \pkg{graphicx} were loaded before \pkg{lwarp},
+% perhaps by \pkg{xunicode}, explicitly load the lwarp patches now:
+% \begin{macrocode}
+\LWR@PreloadedPackage{graphics}
+\LWR@PreloadedPackage{graphicx}
+% \end{macrocode}
+
+% \pkg{fontaxes} must be preloaded so that \pkg{lwarp} may patch it for \HTML.
+% \begin{macrocode}
+\LWR@PreloadedPackage{fontaxes}
+% \end{macrocode}
+
+% \pkg{nfssext-cfr} may be preloaded by \pkg{cfm-lm} or related font packages.
+% \begin{macrocode}
+\LWR@PreloadedPackage{nfssext-cfr}
+% \end{macrocode}
+
+% \pkg{ulem} may be preloaded by \pkg{ctex}, \pkg{ctexart}, and related classes.
+% \begin{macrocode}
+\LWR@PreloadedPackage{ulem}
+% \end{macrocode}
+
+% \pkg{xetexko-vertical} may be preloaded by \pkg{xetexko}.
+% \begin{macrocode}
+\LWR@PreloadedPackage{xetexko-vertical}
+% \end{macrocode}
+
+% \pkg{geometry} is preloaded by \pkg{lwarp}, and perhaps by various classes.
+% \begin{macrocode}
+\LWR@PreloadedPackage{geometry}
+% \end{macrocode}
+
+% \pkg{plext} is preloaded by some CJK classes.
+% \begin{macrocode}
+\LWR@PreloadedPackage{plext}
+% \end{macrocode}
+
+% \pkg{stfloats} is preloaded by \pkg{ltj*} classes.
+% \begin{macrocode}
+\LWR@PreloadedPackage{stfloats}
+% \end{macrocode}
+
+% \pkg{lltjext} is preloaded by \pkg{ltj*} classes.
+% \begin{macrocode}
+\LWR@PreloadedPackage{lltjext}
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+
+
+% \section{\pkg{siunitx}}
+% \label{sec:siunitx}
+
+% \DescribePackage{siunitx}
+% The \pkg{lwarp} core passes a few options to \pkg{siunitx}.
+
+% \limitssiunitx
+%
+% \changes{v0.36}{2017/08/16}{\pkg{siunitx}: Fix for \pkg{babel-french}.}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% Options for siunitx:
+% \changes{v0.50}{2018/02/24}{\pkg{siunitx}: Improved units.}
+% \begin{macrocode}
+\newrobustcmd{\LWR@siunitx@textcelsius}{\HTMLentity{deg}C}
+\newrobustcmd{\LWR@siunitx@textdegree}{\HTMLentity{deg}}
+\newrobustcmd{\LWR@siunitx@textprime}{\HTMLunicode{2032}}
+\newrobustcmd{\LWR@siunitx@textdblprime}{\HTMLunicode{2033}}
+\newrobustcmd{\LWR@siunitx@textplanckbar}{\text{\textit{\HTMLunicode{0127}}}}
+
+\appto\LWR@restoreorigformatting{%
+\renewrobustcmd{\LWR@siunitx@textcelsius}{\text{\ensuremath{^\circ}C}}%
+\renewrobustcmd{\LWR@siunitx@textdegree}{\text{\ensuremath{^\circ}}}%
+\renewrobustcmd{\LWR@siunitx@textprime}{\text{\ensuremath{^\prime}}}%
+\renewrobustcmd{\LWR@siunitx@textdblprime}{\text{\ensuremath{^{\prime\prime}}}}%
+\renewrobustcmd{\LWR@siunitx@textplanckbar}{\text{\ensuremath{\hbar}}}%
+}
+
+\PassOptionsToPackage{
+ detect-mode=true,
+ per-mode=symbol, % fraction is not seen by pdftotext
+ text-celsius = {\LWR@siunitx@textcelsius},
+ text-degree = {\LWR@siunitx@textdegree},
+ text-arcminute = {\LWR@siunitx@textprime} ,
+ text-arcsecond = {\LWR@siunitx@textdblprime} ,
+}{siunitx}
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+
+% \section{Graphics print-mode modifications}
+%
+% \gindex{image>graphicx package}
+%
+% \subsection{General limitations}
+% \limitsgraphics
+%
+% \subsection{Print-mode modifications}
+% \label{sec:graphicsprint}
+%
+% \codeprint
+%
+% For print output, accept and then discard the new |class| key:
+% \changes{v0.65}{2018/12/19}{\pkg{graphics}: Added \cs{includegraphics} \attribute{alt} key.}
+% \begin{macrocode}
+\begin{warpprint}
+\define@key{Gin}{class}{}
+\define@key{Gin}{alt}{}
+% \end{macrocode}
+%
+% Print-mode additions for the \pkg{overpic} package.
+% See \cref{sec:overpic} for the \HTML\ version.
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifpackageloaded{overpic}{
+\newcommand*{\overpicfontsize}{12}
+\newcommand*{\overpicfontskip}{14}
+}{}
+}
+\end{warpprint}
+% \end{macrocode}
+
+
+% \section{\pkg{xcolor} boxes}
+%
+% \label{sec:xcolorpatches}
+%
+% \DescribePackage{xcolor}
+% A few new definitions are provided for enhanced \HTML\ colored boxes,
+% and \cs{fcolorbox} is slightly modified.
+% Print-mode version are also provided.
+%
+%
+% Print-mode versions of new \pkg{xcolor} defintions.
+% These are defined inside \env{warpall} because they are also used
+% for \HTML\ while inside a \env{lateximage}.
+% They are defined \cs{AtBeginDocument} so that the \pkg{xcolor} originals
+% may first be loaded and saved for reuse.
+%
+% The framed versions are modified to allow a background color of |none|, in which
+% case only the frame is drawn, allowing the background page color to show.
+%
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+%
+%
+% \textred{After \pkg{xparse} may have been loaded \dots}
+% \begin{macrocode}
+\AtBeginDocument{
+% \end{macrocode}
+% \textred{\dots\ and \emph{only} if \pkg{xcolor} was loaded:}
+% \begin{macrocode}
+\@ifpackageloaded{xcolor}{
+\LWR@traceinfo{patching xcolor}
+% \end{macrocode}
+%
+%
+% The print version:
+% \begin{macro}{\colorboxBlock}
+% \cs{colorboxBlock} is the same as \cs{colorbox}:
+% \begin{macrocode}
+\LetLtxMacro\colorboxBlock\colorbox
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% The original definition is reused by the new versions:
+% \begin{macrocode}
+\LetLtxMacro\LWR@orig@print@fcolorbox\fcolorbox
+% \end{macrocode}
+
+% \begin{macro}{\fcolorbox}
+% \oarg{framemodel} \marg{framecolor} \oarg{boxmodel} \marg{boxcolor} \marg{text}
+%
+% In print mode, \cs{fcolorbox} is modified to accept a background color of |none|.
+%
+% (\cs{fcolorbox} is particular about its optional arguments, thus the
+% elaborate combinations of \cs{ifthenelse}.)
+% \begin{macrocode}
+\newsavebox{\LWR@colorminipagebox}
+
+\NewDocumentCommand{\LWR@print@fcolorbox}{o m o m +m}{%
+\LWR@traceinfo{LWR@print@fcolorbox #2 #4}%
+% \end{macrocode}
+% Pre-load the contents into an LR box so that they can
+% be used inside a \cs{fcolorbox}:
+% \begin{macrocode}
+\begin{lrbox}{\LWR@colorminipagebox}%
+#5%
+\end{lrbox}%
+% \end{macrocode}
+% Sort out the various optional arguments and the background color of |none|.
+% In each case, the LRbox is placed inside a \cs{fcolorbox}.
+%
+% The current color is remembered, then set to the frame, then the current
+% color is used for the contents.
+% \changes{v0.62}{2018/10/18}{Fix: No longer requires \pkg{xifthen}.}
+% \begin{macrocode}
+\ifstrequal{#4}{none}%
+{% #4 none
+ \LWR@traceinfo{background is none}%
+ {% scope the \colorlet
+ \colorlet{LWR@currentcolor}{.}%
+ \color{#2}%
+ \fbox{%
+ \color{LWR@currentcolor}%
+ \usebox{\LWR@colorminipagebox}%
+ }% fbox
+ }% colorlet
+}% #4 none
+{% #4 not none
+\LWR@traceinfo{background not none}%
+\IfValueTF{#1}%
+{%
+ \IfValueTF{#3}%
+ {\LWR@orig@print@fcolorbox[#1]{#2}[#3]{#4}{\usebox{\LWR@colorminipagebox}}}%
+ {\LWR@orig@print@fcolorbox[#1]{#2}{#4}{\usebox{\LWR@colorminipagebox}}}%
+}%
+{% no value #1
+ \IfValueTF{#3}%
+ {\LWR@orig@print@fcolorbox{#2}[#3]{#4}{\usebox{\LWR@colorminipagebox}}}%
+ {\LWR@orig@print@fcolorbox{#2}{#4}{\usebox{\LWR@colorminipagebox}}}%
+}% no value #1
+}% #4 not none
+\LWR@traceinfo{LWR@print@fcolorbox done}%
+}
+
+\renewcommand*{\fcolorbox}{\LWR@print@fcolorbox}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\fcolorboxBlock}
+% \oarg{framemodel} \marg{framecolor} \oarg{boxmodel} \marg{boxcolor} \marg{text}
+%
+% In print mode, \cs{fcolorboxBlock} is the same as \cs{fcolorbox}.
+% \begin{macrocode}
+\newcommand*{\LWR@print@fcolorboxBlock}{\LWR@print@fcolorbox}
+\newcommand*{\fcolorboxBlock}{\LWR@print@fcolorboxBlock}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{environment}{fcolorminipage}
+% \oarg{1:framemodel} \marg{2:framecolor} \oarg{3:boxmodel} \marg{4:boxcolor}
+% \oarg{5:align} \oarg{6:height} \oarg{7:inner-align} \marg{8:width}
+%
+% In print mode, becomes a \cs{fcolorbox} containing a \env{minipage}:
+% \begin{macrocode}
+\NewDocumentEnvironment{LWR@print@fcolorminipage}{o m o m O{c} O{} o m}
+{%
+\LWR@traceinfo{*** fcolorminipage: #2 #4 #8}%
+% \end{macrocode}
+% Pre-load the contents into an LR box so that they can
+% be used inside a \cs{fcolorbox}:
+% \begin{macrocode}
+\begin{lrbox}{\LWR@colorminipagebox}%
+% \end{macrocode}
+% If inner alignment is not given, use the outer alignment instead:
+% \begin{macrocode}
+\IfValueTF{#7}%
+{\begin{minipage}[#5][#6][#7]{#8}}%
+{\begin{minipage}[#5][#6][#5]{#8}}%
+}%
+{%
+\end{minipage}%
+\end{lrbox}%
+\LWR@traceinfo{*** starting end fcolorminipage #1 #2 #3 #4 #8}%
+% \end{macrocode}
+% Sort out the various optional arguments and the background color of |none|.
+% In each case, the LRbox is placed inside a \cs{fcolorbox}.
+%
+% The current color is remembered, then set to the frame, then the current
+% color is used for the contents.
+% \changes{v0.62}{2018/10/18}{Fix: No longer requires \pkg{xifthen}.}
+% \begin{macrocode}
+\ifstrequal{#4}{none}%
+{% #4 none
+ {% scope the \colorlet
+ \colorlet{LWR@currentcolor}{.}%
+ \color{#2}%
+ \fbox{%
+ \color{LWR@currentcolor}%
+ \usebox{\LWR@colorminipagebox}%
+ }% fbox
+ }% colorlet
+}% #4 none
+{% #4 not none
+ \IfValueTF{#1}%
+ {%
+ \IfValueTF{#3}%
+ {\LWR@orig@print@fcolorbox[#1]{#2}[#3]{#4}{\usebox{\LWR@colorminipagebox}}}%
+ {\LWR@orig@print@fcolorbox[#1]{#2}{#4}{\usebox{\LWR@colorminipagebox}}}%
+ }%
+ {% no value #1
+ \IfValueTF{#3}%
+ {\LWR@orig@print@fcolorbox{#2}[#3]{#4}{\usebox{\LWR@colorminipagebox}}}%
+ {\LWR@orig@print@fcolorbox{#2}{#4}{\usebox{\LWR@colorminipagebox}}}%
+ }% no value #1
+}% #4 not none
+\LWR@traceinfo{*** finished end fcolorminipage}%
+}
+
+\newenvironment*{fcolorminipage}
+ {\LWR@print@fcolorminipage}
+ {\endLWR@print@fcolorminipage}
+% \end{macrocode}
+% \end{environment}
+
+% \begin{macrocode}
+\LWR@traceinfo{xcolor patches done}
+}{}% xcolor loaded
+}% AtBeginDocument
+% \end{macrocode}
+%
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+
+% \section{\pkg{chemmacros} environments}
+% \label{sec:chemmacrosprintenvs}
+%
+% \cs{makepolymerdelims} and redox reactions must be enclosed in a \env{lateximage}
+% during \HTML\ output.
+% These environments are provided here in print mode, and in the \pkg{chemmacros}
+% code in \HTML\ mode, as a high-level semantic syntax which automatically embeds the
+% contents in a \env{lateximage} with an appropriate \attribute{alt} tag.
+%
+% \codeprint
+%
+% \begin{macrocode}
+\begin{warpprint}
+% \end{macrocode}
+
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifpackageloaded{chemmacros}{
+% \end{macrocode}
+%
+% \begin{noindenvironment}{polymerdelims}
+% \begin{macrocode}
+\DeclareDocumentEnvironment{polymerdelims}{}
+ {}{}
+% \end{macrocode}
+% \end{noindenvironment}
+
+% \begin{noindenvironment}{redoxreaction} \marg{space above} \marg{space below}
+%
+% For print output, extra space is include above and below the image, and
+% a \env{lateximage} is not necessary.
+% This extra space must be enforced, even inside a float, so zero-width rules are used.
+%
+% For the \HTML\ version, see \cref{sec:chemmacroshtmlenvs}.
+% \begin{macrocode}
+\DeclareDocumentEnvironment{redoxreaction}{m m}
+ {\rule{0pt}{#1}}{\rule[-#2]{0pt}{#2}}
+% \end{macrocode}
+% \end{noindenvironment}
+%
+% \begin{macrocode}
+}{}% chemmacros
+}% AtBeginDocument
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpprint}
+% \end{macrocode}
+
+
+
+
+% \section{\pkg{cleveref}}
+% \label{sec:cleveref}
+
+% \DescribePackage{cleveref}
+% \pkg{cleveref} package is used as-is with minor patches.
+%
+% \limitscpageref
+%
+% \pkg{cleveref} and the following associated macro patches are
+% \margintag{loading order}
+% automatically preloaded at the end of the preamble via \cs{AtEndPreamble}
+% and \cs{AfterEndPreamble}.
+% This is done because the \HTML\ conversion requires \pkg{cleveref}.
+% The user's document may not require \pkg{cleveref}, thus the user
+% may never explicitly load it, so during \HTML\ output \pkg{lwarp} loads it last.
+% If the user's document preamble uses \pkg{cleveref} options, or functions such as
+% \cs{crefname}, then \pkg{cleveref} may be loaded in the user's preamble near the
+% end, and \pkg{lwarp}'s additional loading of \pkg{cleveref} will have no effect.
+%
+% \Cref{tab:crossrefdata} on page \pageref{tab:crossrefdata}
+% shows the data structure of the label/reference system
+% as revised by \pkg{lwarp} and \pkg{cleveref}.
+
+
+% A few patches allow \pkg{cleveref} to work as-is:
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+% \cs{AtEndPreable} forces \pkg{cleveref} to be loaded last:
+%
+% \changes{v0.19}{2016/06/06}{cleveref: Loaded \cs{AtEndPreamble}.}
+% \changes{v0.33}{2017/06/18}{cleveref: Fix: Loaded \cs{AtEndPreamble}.}
+%
+% \begin{macrocode}
+\AtEndPreamble{
+ \RequirePackage{cleveref}
+}
+% \end{macrocode}
+%
+%
+% \changes{v0.20}{2017/01/05}{\pkg{cleveref} and referencing patches:
+% Applied \cs{AfterEndPreamble}.}
+%
+% \begin{flushleft}
+% The following patches are applied after \pkg{cleveref} has loaded,
+% and after \cs{AtBeginDocument}. Print-mode versions are not required
+% since they all come down to \cs{ref} eventually, and \cs{ref} has a print-mode
+% version.
+% \end{flushleft}
+% \begin{macrocode}
+\AfterEndPreamble{
+\LWR@traceinfo{Patching cleveref.}
+% \end{macrocode}
+
+% \begin{macro}{\@@@setcref} \marg{kindofref} \marg{label}
+%
+% \cs{@templabel} becomes the section number.
+%
+% \changes{v0.48}{2018/02/10}{Fix for new v0.21 of \pkg{cleveref}.}
+% \begin{macrocode}
+\def\LWR@orig@@@setcref#1#2{\cref@getlabel{#2}{\@templabel}#1{\@templabel}{}{}}%
+
+\ifdefequal{\@@setcref}{\LWR@orig@@@setcref}{% before v0.21
+ \renewcommand*{\@@setcref}[2]{#1{\ref{#2}}{}{}}
+}{
+ \ifdefequal{\@@@setcref}{\LWR@orig@@@setcref}{% as of v0.21
+ \renewcommand*{\@@@setcref}[2]{#1{\ref{#2}}{}{}}
+ }{
+ \PackageWarning{lwarp-cleveref}{
+ Unknown version of cleveref.
+ \protect\cref\space will fail.
+ }%
+ }
+}
+% \end{macrocode}
+% \end{macro}
+
+%\begin{macro}{\@@@setcrefrange} \marg{text} \marg{label} \marg{label}
+% \changes{v0.48}{2018/02/10}{Fix for new v0.21 of \pkg{cleveref}.}
+% \begin{macrocode}
+\def\LWR@orig@@@setcrefrange#1#2#3{%
+ \cref@getlabel{#2}{\@labela}%
+ \cref@getlabel{#3}{\@labelb}%
+ #1{\@labela}{\@labelb}{}{}{}{}}%
+
+\ifdefequal{\@@setcrefrange}{\LWR@orig@@@setcrefrange}{
+ \renewcommand{\@@setcrefrange}[3]{%
+ #1{\ref{#2}}{\ref{#3}}{}{}{}{}%
+ }
+}{
+ \ifdefequal{\@@@setcrefrange}{\LWR@orig@@@setcrefrange}{
+ \renewcommand{\@@@setcrefrange}[3]{%
+ #1{\ref{#2}}{\ref{#3}}{}{}{}{}%
+ }
+ }{
+ \PackageWarning{lwarp-cleveref}{
+ Unknown version of cleveref.
+ \protect\crefrange\space will fail.
+ }
+ }
+}
+
+% \end{macrocode}
+% \end{macro}
+
+% ^^A orig:
+% ^^A \def\@@setcpageref#1#2{%
+% ^^A \cref@getpageref{#2}{\@temppage}#1{\@temppage}{}{}}
+
+
+% \label{sec:cpagereffor}
+% \begin{macro}{\cpagerefFor} Redefinable word between ``page(s)'' and the page numbers.
+%
+% \changes{v0.20}{2017/01/03}{User-redefinable word for page references.}
+%
+% \begin{macrocode}
+\newcommand*{\cpagerefFor}{for}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@@@setcpageref} \marg{typeofref} \marg{label},
+% where typeofref is ``page'' or ``pages''
+%
+% \changes{v0.48}{2018/02/10}{Fix for new v0.21 of \pkg{cleveref}.}
+% \begin{macrocode}
+\def\LWR@orig@@setcpageref#1#2{% before v0.21
+ \cref@getpageref{#2}{\@temppage}#1{\@temppage}{}{}}%
+
+\def\LWR@orig@@@setcpageref#1#2{% as of v0.21
+ \cpageref@getlabel{#2}{\@temppage}#1{\@temppage}{}{}}%
+
+\ifdefequal{\@@setcpageref}{\LWR@orig@@setcpageref}{
+ \renewcommand*{\@@setcpageref}[2]{%
+ #1{\cpagerefFor\ \cref{#2}}{}{}%
+ }
+}{
+ \ifdefequal{\@@@setcpageref}{\LWR@orig@@@setcpageref}{
+ \renewcommand*{\@@@setcpageref}[2]{%
+ #1{\cpagerefFor\ \cref{#2}}{}{}%
+ }
+ }
+ {
+ \PackageWarning{lwarp-cleveref}{
+ Unknown version of cleveref.
+ \protect\cpageref\space will fail.
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% ^^A orig:
+% ^^A \def\@@setcpagerefrange#1#2#3{%
+% ^^A \cref@getpageref{#2}{\@pagea}%
+% ^^A \cref@getpageref{#3}{\@pageb}%
+% ^^A #1{\@pagea}{\@pageb}{}{}{}{}}
+
+% \begin{macrocode}
+\def\LWR@orig@@setcpagerefrange#1#2#3{% before v0.21
+ \cref@getpageref{#2}{\@pagea}%
+ \cref@getpageref{#3}{\@pageb}%
+ #1{\@pagea}{\@pageb}{}{}{}{}}%
+
+\def\LWR@orig@@@setcpagerefrange#1#2#3{% as of v0.21
+ \cpageref@getlabel{#2}{\@pagea}%
+ \cpageref@getlabel{#3}{\@pageb}%
+ #1{\@pagea}{\@pageb}{}{}{}{}}%
+
+\ifdefequal{\@@setcpagerefrange}{\LWR@orig@@setcpagerefrange}{
+ \renewcommand*{\@@setcpagerefrange}[3]{%
+ #1{\cpagerefFor\ \cref{#2}}{\cref{#3}}{}{}{}{}%
+ }
+}{
+ \ifdefequal{\@@@setcpagerefrange}{\LWR@orig@@@setcpagerefrange}{
+ \renewcommand*{\@@@setcpagerefrange}[3]{%
+ #1{\cpagerefFor\ \cref{#2}}{\cref{#3}}{}{}{}{}%
+ }
+ }
+ {
+ \PackageWarning{lwarp-cleveref}{
+ Unknown version of cleveref.
+ \protect\cpagerefrange\space will fail.
+ }
+ }
+}
+
+}% AfterEndPreamble
+% \end{macrocode}
+
+
+%
+% Remember and patch some label-related defintions.
+% These will be further encased and patched by other packages later.
+%
+% \cs{label} and \cs{pageref} do NOT change their behavior according to
+% print or \HTML\ output, and thus do not use the \cs{LWR@formatted} system.
+%
+% \begin{macrocode}
+\LetLtxMacro\LWR@orig@label\label
+\RenewDocumentCommand{\label}{}{\LWR@new@label}
+
+\LetLtxMacro\LWR@orig@pageref\pageref
+\RenewDocumentCommand{\pageref}{}{\LWR@new@pageref}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+% \section{\env{picture} environment}
+% \label{sec:picture}
+
+% \DescribeEnv{picture} The \env{picture} environment is enclosed
+% inside a \cs{lateximage}.
+%
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{environment}{picture}
+% \changes{v0.24}{2017/03/13}{Fix for inline images.}
+% \changes{v0.26}{2017/03/30}{Fix for \cs{makebox} in \env{picture}.}
+% \changes{v0.44}{2017/11/16}{\pkg{overpic}: Fix: Groups for lateximages.}
+% \changes{v0.59}{2018/09/05}{Added an \attribute{alt} tag.}
+% \begin{macrocode}
+\BeforeBeginEnvironment{picture}{\begin{lateximage}[(picture)]}
+
+\AfterEndEnvironment{picture}{\end{lateximage}}
+% \end{macrocode}
+% \end{environment}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+
+% \section{Minipages and Boxes}
+%
+% A \CSS\ flexbox is used for minipages and parboxes,
+% allowing external and internal vertical positioning.
+%
+%
+% \limitsminipage
+%
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \subsection{Counters and lengths}
+
+% \DescribeCounter{LWR@minipagedepth}
+% Used to only reset the line width at the outermost minipage.
+% \begin{macrocode}
+\newcounter{LWR@minipagedepth}
+\setcounter{LWR@minipagedepth}{0}
+% \end{macrocode}
+
+
+%
+% \DescribeLength{\LWR@minipagewidth}
+% Used to convert the width into printable units.
+% \begin{macrocode}
+\newlength{\LWR@minipagewidth}
+% \end{macrocode}
+% \DescribeLength{\LWR@minipageheight}
+% Used to convert the height into printable units.
+% \begin{macrocode}
+\newlength{\LWR@minipageheight}
+% \end{macrocode}
+%
+%
+%
+% \subsection{Footnote handling}
+%
+% Also see \cref{sec:footnotes} for other forms of footnotes.
+% Minipage footnotes are gathered in \cref{sec:footnotesminipage},
+% and then placed into the document in \cref{sec:footnotesminipageplaced}.
+%
+%
+%
+% \subsection{Minipage handling}
+% \label{sec:footnotesminipageplaced}
+%
+%
+% \DescribeBoolean{LWR@minipagefullwidth} Should the next minipage
+% have no \HTML\ |width|?
+% \begin{macrocode}
+\newbool{LWR@minipagefullwidth}
+\boolfalse{LWR@minipagefullwidth}
+% \end{macrocode}
+%
+%
+% \DescribeBoolean{LWR@forceminipagefullwidth} Should the next minipage
+% have no \HTML\ |width|? Used to force full width for all minipages
+% in an environment such as \env{tabular} or \env{multicols},
+% where the actual width depends on the browser width.
+% Controlled by \cs{useminipagewidths} and \cs{ignoreminipagewidths}.
+% \begin{macrocode}
+\newbool{LWR@forceminipagefullwidth}
+\boolfalse{LWR@forceminipagefullwidth}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\minipagefullwidth} Requests that the next minipage
+% have no |width| tag in \HTML:
+% \changes{v0.19}{2016/05/28}{Added: No width tag for the next minipage in HTML.}
+% \changes{v0.66}{2018/12/28}{Made \cs{global}.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\newcommand*{\minipagefullwidth}{\global\booltrue{LWR@minipagefullwidth}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\UseMinipageWidths} Locally requests that minipage widths be
+% honored.
+% \changes{v0.66}{2018/12/31}{Added,}
+% \begin{macrocode}
+\newcommand*{\UseMinipageWidths}{\boolfalse{LWR@forceminipagefullwidth}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\IgnoreMinipageWidths} Locally requests that minipage widths be
+% ignored.
+% \changes{v0.66}{2018/12/31}{Added,}
+% \begin{macrocode}
+\newcommand*{\IgnoreMinipageWidths}{\booltrue{LWR@forceminipagefullwidth}}
+\end{warpHTML}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \codeprint
+%
+% \begin{macrocode}
+\begin{warpprint}
+\newcommand*{\minipagefullwidth}{}
+\newcommand*{\UseMinipageWidths}{}
+\newcommand*{\IgnoreMinipageWidths}{}
+\end{warpprint}
+% \end{macrocode}
+%
+%
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+% \DescribeBoolean{LWR@minipagethispar}
+% Has a minipage been seen this paragraph?
+% If true, prevents paragraph tags around horizontal space
+% between minipages.
+% \begin{macrocode}
+\newbool{LWR@minipagethispar}
+\boolfalse{LWR@minipagethispar}
+% \end{macrocode}
+%
+%
+% \begin{environment}{minipage} \oarg{vert position} \oarg{height}
+% \oarg{inner vert position} \marg{width}
+% \changes{v0.18}{2016/05/17}{Fix: \cs{linewidth}, \cs{textwidth}, \cs{textheight} inside a minipage.}
+% \changes{v0.57}{2018/05/28}{Improved print/\HTML\ output selection.}
+% \changes{v0.65}{2018/12/17}{Refactored to later allow Japanese \textless{}t/y\textgreater{} argument.}
+%
+% The vertical positions may be 'c', 't', or 'b'.
+% The inner position may also be 's'.
+%
+% When using \cs{linewidth}, \cs{textwidth}, or \cs{textheight}, these are scaled proportionally to a
+% 6\texttimes{}9 inch text area.
+%
+% \begin{macrocode}
+\NewDocumentEnvironment{LWR@HTML@sub@minipage}{m m m m}
+{%
+\LWR@traceinfo{minipage}%
+% \end{macrocode}
+%
+% Temporarily open a group, in which width and height is
+% computed based on a virtual page size instead of
+% the extra-large \PDF\ page used during \HTML\ tag generation.
+%
+% The following used to be an actual \LaTeX\ minipage.
+% \changes{v0.45}{2017/12/01}{Fix: Improper \cs{prevdepth}.}
+% \begin{macrocode}
+\begingroup
+% \end{macrocode}
+% Compute width, adjusted for frames:
+% \begin{macrocode}
+\setlength{\LWR@minipagewidth}{#4}%
+\ifthenelse{\cnttest{\value{LWR@minipagedepth}}{=}{0}}{%
+% \end{macrocode}
+% Only create a new page if not yet nested:
+% \begin{macrocode}
+ \LWR@orignewpage%
+% \end{macrocode}
+% Adjust virtual page size:
+% \begin{macrocode}
+ \addtolength{\LWR@minipagewidth}{3em}% room for frames
+ \setlength{\linewidth}{6in}%
+ \setlength{\textwidth}{6in}%
+ \setlength{\textheight}{9in}%
+}{}%
+\LWR@traceinfo{computed width is \LWR@printlength{\LWR@minipagewidth}}%
+% \end{macrocode}
+% Compute height:
+% \begin{macrocode}
+\setlength{\LWR@minipageheight}{\textheight}% default unless specified
+\ifblank{#2}{}{\setlength{\LWR@minipageheight}{#2}}%
+% \end{macrocode}
+% Track nesting depth:
+% \begin{macrocode}
+\addtocounter{LWR@minipagedepth}{1}%
+% \end{macrocode}
+% \LaTeX{} wants to start a paragraph for the virtual minipage,
+% then start a paragraph again for the contents of the minipage,
+% so cancel the paragraph tag handling until the minipage has begun.
+% \begin{macrocode}
+\ifbool{FormatWP}{\newline}{}%
+\LWR@stoppars%
+% \end{macrocode}
+% If |FormatWP|, add a text frame:
+% \changes{v0.42}{2017/10/26}{If \progcode{FormatWP} add a text frame.}
+% \changes{v0.47}{2018/01/26}{Fix: Line wrap at \HTML\ hyphen.}
+% \begin{macrocode}
+\ifbool{FormatWP}{%
+
+\addtocounter{LWR@thisautoidWP}{1}%
+\LWR@htmltag{%
+ div id="\LWR@print@mbox{autoidWP-\arabic{LWR@thisautoidWP}}" %
+ class="wpminipage"%
+}%
+
+}{}%
+% \end{macrocode}
+% Create the \element{div} tag with optional alignment style:
+% \changes{v0.47}{2018/01/26}{Fix: Line wrap at \HTML\ hyphen.}
+% \begin{macrocode}
+\LWR@traceinfo{minipage: creating div class}%
+\LWR@htmltag{div class="minipage" style="%
+\ifthenelse{\equal{#1}{t}}{\LWR@print@mbox{vertical-align:bottom} ; }{}%
+\ifthenelse{\equal{#1}{c}}{\LWR@print@mbox{vertical-align:middle} ; }{}%
+\ifthenelse{\equal{#1}{b}}{\LWR@print@mbox{vertical-align:top} ; }{}%
+\ifthenelse{\equal{#3}{t}}{\LWR@print@mbox{justify-content:flex-start} ; }{}%
+\ifthenelse{\equal{#3}{c}}{\LWR@print@mbox{justify-content:center} ; }{}%
+\ifthenelse{\equal{#3}{b}}{\LWR@print@mbox{justify-content:flex-end} ; }{}%
+\ifthenelse{\equal{#3}{s}}{\LWR@print@mbox{justify-content:space-between} ; }{}%
+% \end{macrocode}
+% Print the width and optional height styles:
+% \changes{v0.66}{2018/12/31}{Honor \cs{LWR@forceminipagefullwidth}.}
+% \begin{macrocode}
+\LWR@traceinfo{minipage: about to print the width of \LWR@printlength{\LWR@minipagewidth}}%
+\ifbool{LWR@minipagefullwidth}%
+{\global\boolfalse{LWR@minipagefullwidth}}%
+{%
+ \ifbool{LWR@forceminipagefullwidth}%
+ {}%
+ {%
+ \ifdimequal{#4}{\linewidth}%
+ {}%
+ {width:\LWR@printlength{\LWR@minipagewidth} ; }%
+ }%
+}%
+\LWR@traceinfo{minipage: about to print the height}%
+\ifblank{#2}{}{height:\LWR@printlength{\LWR@minipageheight} ; }%
+"}%
+% \end{macrocode}
+% Finish with an empty line to start the contents on a new line.
+% \begin{macrocode}
+
+% The preceding empty line is required.
+% \end{macrocode}
+% Set the user-accessible line and text width and height values
+% inside the virtual minipage.
+% These do not affect the actual size of the \PDF\ output,
+% but are used by any reference to \cs{linewidth}, etc.
+% inside the virtual minipage being created here.
+% \begin{macrocode}
+\setlength{\linewidth}{#4}% the original width
+\setlength{\textwidth}{6in}%
+\setlength{\textheight}{9in}%
+% \end{macrocode}
+% \cs{raggedright} cancels hyphenation, which will be done by \HTML\ instead.
+% \begin{macrocode}
+\LWR@print@raggedright%
+% \end{macrocode}
+% Set minipage footnotes:
+% \begin{macrocode}
+\def\@mpfn{mpfootnote}%
+\def\thempfn{\thempfootnote}\c@mpfootnote\z@%
+\let\@footnotetext\@mpfootnotetext%
+% \end{macrocode}
+% Resume paragraph tag handling for the contents of the minipage:
+% \changes{v0.42}{2017/10/18}{Added boolean \progcode{WPMarkMinipages}.}
+% \begin{macrocode}
+\LWR@startpars%
+\ifboolexpr{bool{FormatWP} and bool{WPMarkMinipages}}{%
+
+=== begin minipage ===
+
+}{}%
+\LWR@traceinfo{minipage: finished starting the minipage}%
+}% finished \minipage
+{% \endminipage
+% \end{macrocode}
+% Print pending minipage footnotes:
+% \changes{v0.45}{2017/12/01}{Fix: Improper \cs{prevdepth}.}
+% \begin{macrocode}
+\LWR@printpendingmpfootnotes%
+% \end{macrocode}
+% End the environment with closing tag:
+% \changes{v0.42}{2017/10/18}{Added boolean \progcode{WPMarkMinipages}.}
+% \begin{macrocode}
+\ifboolexpr{bool{FormatWP} and bool{WPMarkMinipages}}{%
+
+=== end minipage ===
+
+}{}%
+\LWR@stoppars%
+% \end{macrocode}
+% The following used to be an actual \LaTeX\ minipage.
+% \changes{v0.45}{2017/12/01}{Fix: Improper \cs{prevdepth}.}
+% \begin{macrocode}
+\endgroup%
+
+\ifbool{FormatWP}{%
+
+\LWR@htmlelementend{div}%
+
+}{}%
+\LWR@htmldivclassend{minipage}%
+
+\addtocounter{LWR@minipagedepth}{-1}%
+\LWR@startpars%
+\ifbool{FormatWP}{\newline}{}%
+% \end{macrocode}
+% Prevent paragraph tags around horizontal white space
+% until the start of the next paragraph:
+% \begin{macrocode}
+\global\booltrue{LWR@minipagethispar}%
+\LWR@traceinfo{LWR@minipage: done}%
+}
+
+\NewDocumentEnvironment{LWR@HTML@minipage}{O{t} O{} O{t} m}
+ {\LWR@HTML@sub@minipage{#1}{#2}{#3}{#4}}
+ {\endLWR@HTML@sub@minipage}
+
+\LWR@formattedenv{minipage}
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsection{\cs{parbox}, \cs{mbox}, \cs{makebox}, \cs{framebox}, \cs{fbox}, \cs{raisebox}}
+%
+% \codehtml
+%
+% \null
+%
+% \begin{macro}{\parbox} \oarg{pos} \oarg{height} \oarg{inner-pos} \marg{width} \marg{text}
+%
+% A parbox uses the minipage code:
+%
+% \changes{v0.57}{2018/05/28}{Improved print/\HTML\ output selection.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@parbox}{O{t} O{} O{t} m +m}
+{
+\LWR@traceinfo{parbox of width #4}%
+\begin{minipage}[#1][#2][#3]{#4}%
+#5
+\end{minipage}%
+}
+
+\LWR@formatted{parbox}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\mbox} \marg{text}
+% \qquad Nullified for \HTML.
+% \changes{v0.48}{2018/02/04}{Nullified for \HTML.}
+% \changes{v0.57}{2018/05/28}{Improved print/\HTML\ output selection.}
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@mbox}[1]{#1}
+
+\LWR@formatted{mbox}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@@makebox@paren} \marg{width} , \marg{height}
+%
+% Adds to the style in \cs{LWR@temptwo}.
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@@makebox@paren}{m m}{%
+\IfValueTF{#2}{%
+ \setlength{\LWR@tempwidth}{#1\unitlength}%
+ \setlength{\LWR@tempheight}{#2\unitlength}%
+ \appto{\LWR@temptwo}{%
+ \LWR@print@mbox{width:\LWR@printlength{\LWR@tempwidth}} ; % space
+ \LWR@print@mbox{height:\LWR@printlength{\LWR@tempheight}} ; % space
+ }%
+}{%
+ \PackageError{lwarp}%
+ {(width,height) is missing a comma ',' character}%
+ {\protect\makebox\space and \protect\framebox\space accept
+ a size in the format (width,height).}%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LWR@@makebox@align} \marg{alignment character}
+%
+% Adds to the style in \cs{LWR@temptwo}.
+% \begin{macrocode}
+\newcommand*{\LWR@@makebox@align}[1]{%
+ \def\LWR@align{center}%
+ \ifstrequal{#1}{l}{\def\LWR@align{left}}{}%
+ \ifstrequal{#1}{r}{\def\LWR@align{right}}{}%
+ \ifstrequal{#1}{s}{\def\LWR@align{justify}}{}%
+ \appto{\LWR@temptwo}{%
+ \LWR@print@mbox{text-align:\LWR@align} ; %
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\makebox} \parg{width,height} \oarg{width} \oarg{pos} \marg{text}
+%
+% \changes{v0.34}{2017/07/31}{Fix: Handles paren arg.}
+% \changes{v0.36}{2017/08/15}{Fix: Handles width and horiz position.}
+% \changes{v0.57}{2018/05/28}{Improved print/\HTML\ output selection.}
+% \changes{v0.69}{2019/03/09}{Fix: Handle paren arg.}
+% \changes{v0.70}{2019/04/02}{Fix: Accept long arg.}
+% \changes{v0.70}{2019/04/02}{Fix: No width given.}
+% \changes{v0.70}{2019/04/02}{Fix: Ignore width of 0pt.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@makebox}{>{\SplitArgument{1}{,}}d() o o +m}{%
+% \end{macrocode}
+%
+% Build the style depending on arguments:
+% \begin{macrocode}
+{% scope
+ \def\LWR@temptwo{}%
+ \IfValueTF{#1}%
+ {% (width,height) ..
+ \LWR@@makebox@paren #1%
+ \IfValueT{#2}%
+ {% (width,height) [posn]
+ \LWR@@makebox@align{#2}%
+ }%
+ }%
+ {% [width]
+ \IfValueT{#2}% [width]
+ {%
+ \setlength{\LWR@tempwidth}{#2}%
+ \ifdimgreater{\LWR@tempwidth}{0pt}{%
+ \appto{\LWR@temptwo}{%
+ width:\LWR@printlength{\LWR@tempwidth} ; % space
+ }%
+ }{}%
+ }%
+ }%
+ \IfValueT{#3}%
+ {% [width] [posn]
+ \LWR@@makebox@align{#3}%
+ }%
+ \InlineClass[%
+ \LWR@print@mbox{display:inline-block} ; %
+ \LWR@temptwo%
+ ]%
+ {makebox}%
+ {#4}%
+}% scope
+}
+\LWR@formatted{makebox}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\framebox} \parg{width,height} \oarg{width} \oarg{pos} \marg{text}
+% \changes{v0.36}{2017/08/15}{Fix: Handles width and horiz position.}
+% \changes{v0.57}{2018/05/28}{Improved print/\HTML\ output selection.}
+% \changes{v0.69}{2019/03/09}{Fix: Handle paren arg.}
+% \changes{v0.70}{2019/04/02}{Fix: Accept long arg.}
+%
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@framebox}{d() o o +m}{%
+ \fbox{\makebox(#1)[#2][#3]{#4}}%
+}
+
+\LWR@formatted{framebox}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{\LWR@forceminwidth} \marg{legth}
+%
+% Sets \cs{LWR@atleastonept} to be at least 1pt.
+% \begin{macrocode}
+\newlength{\LWR@atleastonept}
+
+\newcommand*{\LWR@forceminwidth}[1]{%
+\setlength{\LWR@atleastonept}{#1}%
+\ifthenelse{%
+ \lengthtest{\LWR@atleastonept>0pt}\AND%
+ \lengthtest{\LWR@atleastonept<1pt}%
+}%
+ {\setlength{\LWR@atleastonept}{1pt}}%
+ {}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+
+% \begin{macro}{\LWR@fboxstyle}
+% Prints the \HTML\ attributes for a black border and padding.
+%
+% \cs{LWR@forceminwidth} must be used first in order to set the border width.
+%
+% \changes{v0.66}{2019/02/04}{Use current text color.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@fboxstyle}{%
+\LWR@findcurrenttextcolor%
+border:\LWR@printlength{\LWR@atleastonept} solid \LWR@origpound\LWR@tempcolor ; %
+padding:\LWR@printlength{\fboxsep} ; %
+color:\LWR@origpound\LWR@tempcolor%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\fbox} \marg{text}
+%
+% Creates a framed inline span enclosing the text.
+%
+% \changes{v0.36}{2017/08/10}{Fix: Uses \cs{fboxrule} and \cs{fboxsep}.}
+% \changes{v0.66}{2019/02/02}{Fix: Removed extra space.}
+%
+% Create a new \HTML\ version, but don't use it until after \pkg{xcolor}
+% may have loaded:
+% \begin{macrocode}
+\newcommand{\LWR@HTML@fbox}[1]{%
+\LWR@traceinfo{HTML fbox}%
+\LWR@forceminwidth{\fboxrule}%
+\InlineClass[%
+ \LWR@print@mbox{display:inline-block} ; %
+ \LWR@fboxstyle%
+]{fbox}{#1}%
+}
+% \end{macrocode}
+% \pkg{xcolor} \cs{let}s things to \cs{fbox} when it is loaded,
+% and this must remain even for \HTML\ output while in a \env{lateximage},
+% so \cs{fbox} is not modified until \cs{AtBeginDocument}:
+% \begin{macrocode}
+\AtBeginDocument{\LWR@formatted{fbox}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\fboxBlock} \marg{text}
+% Creates a framed \HTML\ \element{div} of the text.
+%
+% First, a print-mode version.
+% This is newly defined for print mode, so it is defined inside \env{warpall}.
+%
+% \codeall
+% \begin{macrocode}
+\end{warpHTML}
+\begin{warpall}
+\let\fboxBlock\fbox
+\end{warpall}
+
+\begin{warpHTML}
+% \end{macrocode}
+% \codehtml
+%
+% Next, an \HTML\ version:
+% \changes{v0.34}{2017/07/31}{Added.}
+% \changes{v0.57}{2018/05/28}{Improved print/\HTML\ output selection.}
+% \changes{v0.73}{2019/06/24}{Fix: Paragraph tags.}
+%
+% \begin{macrocode}
+\newcommand{\LWR@HTML@fboxBlock}[1]{%
+\LWR@forceminwidth{\fboxrule}%
+\LWR@stoppars%
+\begin{BlockClass}[%
+\LWR@fboxstyle%
+]{fboxBlock}
+#1
+\end{BlockClass}
+\LWR@startpars%
+}
+
+\LWR@formatted{fboxBlock}
+
+\end{warpHTML}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{environment}{fminipage} \oarg{align} \oarg{height} \oarg{align} \marg{width}
+%
+% Creates a framed \HTML\ \element{div} around its contents.
+% \changes{v0.34}{2017/07/31}{Added.}
+% \changes{v0.57}{2018/05/28}{Improved print/\HTML\ output selection.}
+%
+% Print version:
+% \codeall \\
+%
+% \begin{macrocode}
+\begin{warpall}
+
+\newsavebox{\LWR@fminipagebox}
+
+\NewDocumentEnvironment{LWR@print@fminipage}{O{t} o O{t} m}
+{%
+% \end{macrocode}
+% An outer minipage will be used for vertical alignment.
+% An inner minipage will be framed with \cs{fbox}.
+%
+% If the optional inner alignment is not given, use the outer instead:
+% \begin{macrocode}
+\IfValueTF{#3}%
+{\def\LWR@thisalign{#3}}
+{\def\LWR@thisalign{#1}}%
+% \end{macrocode}
+% Form the outer minipage depending on whether a height was given.
+% Make the outer minipage larger to compensate for the frame.
+% \begin{macrocode}
+\IfValueTF{#2}%
+{\minipage[#1][#2+2\fboxsep+2\fboxrule][\LWR@thisalign]{#4+2\fboxsep+2\fboxrule}}%
+{\minipage[#1]{#4+2\fboxsep+2\fboxrule}}%
+% \end{macrocode}
+% Capture the contents of the environment:
+% \begin{macrocode}
+\begin{lrbox}{\LWR@fminipagebox}%
+% \end{macrocode}
+% Nest the contents inside an inner minipage of the desired size:
+% \begin{macrocode}
+\IfValueTF{#2}%
+{\minipage[#1][#2][\LWR@thisalign]{#4}}%
+{\minipage[#1]{#4}}%
+}
+{%
+% \end{macrocode}
+% Close the inner minipage and the LR box with the contents:
+% \begin{macrocode}
+\endminipage%
+\end{lrbox}%
+% \end{macrocode}
+% Create a frame around the contents of the environment:
+% \begin{macrocode}
+\fbox{\usebox{\LWR@fminipagebox}}%
+% \end{macrocode}
+% The entire thing is placed inside the outer minipage:
+% \begin{macrocode}
+\endminipage%
+}
+
+\LetLtxMacro\fminipage\LWR@print@fminipage
+\LetLtxMacro\endfminipage\endLWR@print@fminipage
+% \newenvironment{fminipage}{\LWR@print@fminipage}{\endLWR@print@fminipage}
+
+\end{warpall}
+% \end{macrocode}
+%
+% \HTML\ version:
+%
+% \codehtml
+% \changes{v0.69}{2019/03/09}{Honors \cs{minipagefullwidth}.}
+% \begin{macrocode}
+\begin{warpHTML}
+
+\NewDocumentEnvironment{LWR@HTML@fminipage}{O{t} o O{t} m}
+{%
+\LWR@traceinfo{fminipage #1 #2 #3 #4}%
+\LWR@forceminwidth{\fboxrule}%
+\setlength{\LWR@tempwidth}{#4}%
+\IfValueT{#2}{\setlength{\LWR@tempheight}{#2}}%
+% \end{macrocode}
+% \changes{v0.62}{2018/11/11}{Fix: Horiz white space.}
+% \begin{macrocode}
+\LWR@stoppars%
+% \end{macrocode}
+% \begin{macrocode}
+\begin{BlockClass}[%
+\LWR@fboxstyle ; %
+\IfValueT{#2}{height:\LWR@printlength{\LWR@tempheight} ; }%
+\ifbool{LWR@minipagefullwidth}%
+{\global\boolfalse{LWR@minipagefullwidth}}%
+{%
+ \ifbool{LWR@forceminipagefullwidth}%
+ {}%
+ {%
+ \ifdimequal{\LWR@tempwidth}{\linewidth}%
+ {}%
+ {width:\LWR@printlength{\LWR@tempwidth} ; }%
+ }%
+}%
+]{fminipage}%
+}
+{%
+\end{BlockClass}%
+% \end{macrocode}
+% Prevent paragraph tags around horizontal white space
+% until the start of the next paragraph:
+% \changes{v0.62}{2018/11/11}{Fix: Horiz white space.}
+% \begin{macrocode}
+\global\booltrue{LWR@minipagethispar}%
+\LWR@traceinfo{fminipage done}%
+}
+
+\LWR@formattedenv{fminipage}
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \begin{macro}{\raisebox} \marg{raiselen} \oarg{height} \oarg{depth} \marg{text}
+% \changes{v0.57}{2018/05/28}{Improved print/\HTML\ output selection.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@raisebox}{m o o m}{%
+#4%
+}
+
+\LWR@formatted{raisebox}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+% \section{Direct formatting}
+% \label{sec:directformatting}
+%
+% \limitstext
+%
+% For high-level block and inline custom \CSS\ classes,
+% see \cref{sec:highlevelclasses}.
+
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% \changes{v0.34}{2017/08/05}{Improved font control.}
+% \changes{v0.35}{2017/08/08}{Fix: \cs{textbf} and related.}
+% \changes{v0.42}{2017/10/20}{\cs{textbf} and related: If \progcode{FormatWP}, use explicit styles for
+% \cs{textsc}, etc.}
+% \changes{v0.62}{2018/11/11}{\cs{textbf} and related: Improved font detection.}
+
+% \begin{macro}{\emph} \marg{text}
+% \begin{macrocode}
+\DeclareRobustCommand{\LWR@HTML@emph}[1]{%
+ {%
+ \itshape%
+ \LWR@htmlspan{em}{#1}%
+ }%
+}
+
+\LWR@formatted{emph}
+
+\newcommand{\LWR@null@emph}[1]{#1}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\textmd} \marg{text}
+% \begin{macrocode}
+\DeclareRobustCommand{\LWR@HTML@textmd}[1]{%
+ {%
+ \mdseries%
+ \InlineClass(font-weight:normal){textmd}{#1}%
+ }%
+}
+
+\LWR@formatted{textmd}
+
+\newcommand{\LWR@null@textmd}[1]{#1}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\textbf} \marg{text}
+% \begin{macrocode}
+\DeclareRobustCommand{\LWR@HTML@textbf}[1]{%
+ {%
+ \bfseries%
+ \LWR@htmlspan{b}{#1}%
+ }%
+}
+
+\LWR@formatted{textbf}
+
+\newcommand{\LWR@null@textbf}[1]{#1}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\texteb} \marg{text} \qquad From \pkg{nfssext-cfr}.
+% \changes{v0.72}{2019/05/26}{\pkg{nfssext-cfr}: Added.}
+% \begin{macrocode}
+\DeclareRobustCommand{\LWR@HTML@texteb}[1]{%
+ {%
+ \ebweight%
+ \InlineClass{texteb}{#1}%
+ }%
+}
+
+\LWR@formatted{texteb}
+
+\newcommand{\LWR@null@texteb}[1]{#1}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\textlg} \marg{text} \qquad From \pkg{nfssext-cfr}.
+% \changes{v0.72}{2019/05/26}{\pkg{nfssext-cfr}: Added.}
+% \begin{macrocode}
+\DeclareRobustCommand{\LWR@HTML@textlg}[1]{%
+ {%
+ \lgweight%
+ \InlineClass{textlg}{#1}%
+ }%
+}
+
+\LWR@formatted{textlg}
+
+\newcommand{\LWR@null@textlg}[1]{#1}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\textrm} \marg{text}
+% \begin{macrocode}
+\DeclareRobustCommand{\LWR@HTML@textrm}[1]{%
+ {%
+ \rmfamily%
+ \InlineClass(font-family:serif){textrm}{#1}%
+ }%
+}
+
+\LWR@formatted{textrm}
+
+\newcommand{\LWR@null@textrm}[1]{#1}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\textsf} \marg{text}
+% \begin{macrocode}
+\DeclareRobustCommand{\LWR@HTML@textsf}[1]{%
+ {%
+ \sffamily%
+ \InlineClass(font-family:sans){textsf}{#1}%
+ }%
+}
+
+\LWR@formatted{textsf}
+
+\newcommand{\LWR@null@textsf}[1]{#1}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\texttt} \marg{text}
+% \begin{macrocode}
+\DeclareRobustCommand{\LWR@HTML@texttt}[1]{%
+ {%
+ \ttfamily%
+ \LWR@htmlspan{kbd}{#1}%
+ }%
+}
+
+\LWR@formatted{texttt}
+
+\newcommand{\LWR@null@texttt}[1]{#1}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\textup} \marg{text}
+% \changes{v0.28}{2017/04/13}{Fixed span class.}
+% \changes{v0.62}{2018/11/11}{Fixed WP span class.}
+% \begin{macrocode}
+\DeclareRobustCommand{\LWR@HTML@textup}[1]{%
+ {%
+ \upshape%
+ \InlineClass(font-style:normal){textup}{#1}%
+ }%
+}
+
+\LWR@formatted{textup}
+
+\newcommand{\LWR@null@textup}[1]{#1}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\textit} \marg{text}
+% \begin{macrocode}
+\DeclareRobustCommand{\LWR@HTML@textit}[1]{%
+ {%
+ \itshape%
+ \LWR@htmlspan{i}{#1}%
+ }%
+}
+
+\LWR@formatted{textit}
+
+\newcommand{\LWR@null@textit}[1]{#1}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\textsc} \marg{text}
+% \begin{macrocode}
+\DeclareRobustCommand{\LWR@HTML@textsc}[1]{%
+ {%
+ \scshape%
+ \InlineClass{textsc}{#1}%
+ }%
+}
+
+\LWR@formatted{textsc}
+
+\newcommand{\LWR@null@textsc}[1]{#1}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\textulc} \marg{text} \qquad From \pkg{fontaxes}.
+% \changes{v0.72}{2019/05/27}{\pkg{fontaxes}: Added.}
+% \begin{macrocode}
+\DeclareRobustCommand{\LWR@HTML@textulc}[1]{%
+ {%
+ \ulcshape%
+ \InlineClass{textulc}{#1}%
+ }%
+}
+
+\LWR@formatted{textulc}
+
+\newcommand{\LWR@null@textulc}[1]{#1}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\textsi} \marg{text}
+% \changes{v0.65}{2018/12/09}{Added.}
+% \begin{macrocode}
+\@ifundefined{textsi}{
+ \LetLtxMacro\LWR@print@textsi\LWR@print@textsc
+}{}
+
+\DeclareRobustCommand{\LWR@HTML@textsi}[1]{%
+ {%
+ \sishape%
+ \textsc{\textit{#1}}%
+% \InlineClass(
+% font-style: italic;
+% font-variant: small-caps ;
+% font-variant-numeric: oldstyle-nums ;
+% ){textsi}{#1}%
+ }%
+}
+
+\LWR@formatted{textsi}
+
+\newcommand{\LWR@null@textsi}[1]{#1}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\textsl} \marg{text}
+% \begin{macrocode}
+\DeclareRobustCommand{\LWR@HTML@textsl}[1]{%
+ {%
+ \slshape%
+ \InlineClass(font-style:oblique){textsl}{#1}%
+ }%
+}
+
+\LWR@formatted{textsl}
+
+\newcommand{\LWR@null@textsl}[1]{#1}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\textnormal} \marg{text}
+% \begin{macrocode}
+\DeclareRobustCommand{\LWR@HTML@textnormal}[1]{\textmd{\textrm{\textup{#1}}}}
+
+\LWR@formatted{textnormal}
+
+\newcommand{\LWR@null@textnormal}[1]{#1}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macrocode}
+\newcommand{\LWR@null@rmfamily}{}
+\newcommand{\LWR@null@sffamily}{}
+\newcommand{\LWR@null@ttfamily}{}
+\newcommand{\LWR@null@bfseries}{}
+\newcommand{\LWR@null@ebweight}{}
+\newcommand{\LWR@null@lgweight}{}
+\newcommand{\LWR@null@mdseries}{}
+\newcommand{\LWR@null@upshape}{}
+\newcommand{\LWR@null@slshape}{}
+\newcommand{\LWR@null@scshape}{}
+\newcommand{\LWR@null@itshape}{}
+\newcommand{\LWR@null@normalfont}{}
+% \end{macrocode}
+%
+% \changes{v0.62}{2018/11/17}{Fix for \cs{em}.}
+% \begin{macrocode}
+\newcommand{\LWR@null@em}{}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@nullfonts} Removes formatting during filename operations,
+% file references, and \HTML\ comments.
+%
+% \textred{Use only inside a group.}\watchout
+%
+% The following are \emph{not} made robust,
+% since they must be expanded to their nullified versions.
+%
+% \changes{v0.34}{2017/08/05}{Improved font control.}
+% \changes{v0.36}{2017/08/15}{Fix: Filenames while using \brand{MathJax}.}
+% \changes{v0.40}{2017/09/21}{Fix: Long arguments for expandable command.}
+% \changes{v0.43}{2017/10/31}{Fix: Nullify dollar inside filesnames.}
+% \changes{v0.48}{2018/02/04}{Fix: \cs{newline} in title.}
+% \changes{v0.65}{2018/12/09}{Added \cs{textsi}.}
+% \begin{macrocode}
+\catcode`\$=\active% redefining $ below
+\catcode`\_=12% redefining \_ below
+\newcommand*{\LWR@nullfonts}{%
+\LetLtxMacro\emph\LWR@null@emph%
+\LetLtxMacro\textmd\LWR@null@textmd%
+\LetLtxMacro\textbf\LWR@null@textbf%
+\LetLtxMacro\textrm\LWR@null@textrm%
+\LetLtxMacro\textsf\LWR@null@textsf%
+\LetLtxMacro\texttt\LWR@null@texttt%
+\LetLtxMacro\textup\LWR@null@textup%
+\LetLtxMacro\textit\LWR@null@textit%
+\LetLtxMacro\textsc\LWR@null@textsc%
+\LetLtxMacro\textulc\LWR@null@textulc%
+\LetLtxMacro\textsi\LWR@null@textsi%
+\LetLtxMacro\textsl\LWR@null@textsl%
+\LetLtxMacro\textnormal\LWR@null@textnormal%
+\LetLtxMacro\rmfamily\LWR@null@rmfamily%
+\LetLtxMacro\sffamily\LWR@null@sffamily%
+\LetLtxMacro\ttfamily\LWR@null@ttfamily%
+\LetLtxMacro\bfseries\LWR@null@bfseries%
+\LetLtxMacro\mdseries\LWR@null@mdseries%
+\LetLtxMacro\upshape\LWR@null@upshape%
+\LetLtxMacro\slshape\LWR@null@slshape%
+\LetLtxMacro\scshape\LWR@null@scshape%
+\LetLtxMacro\ulcshape\LWR@null@ulcshape%
+% \end{macrocode}
+% \changes{v0.65}{2018/12/10}{Added \cs{sishape}.}
+% \begin{macrocode}
+\LetLtxMacro\sishape\LWR@null@sishape%
+% \end{macrocode}
+% \begin{macrocode}
+\LetLtxMacro\itshape\LWR@null@itshape%
+\LetLtxMacro\normalfont\LWR@null@normalfont%
+\LetLtxMacro\em\LWR@null@em%
+% \end{macrocode}
+% Various built-in symbols.
+% \changes{v0.67}{2019/02/13}{Add'l symbols.}
+% \begin{macrocode}
+\renewcommand*{\$}{-}%
+\renewcommand*{\%}{-}%
+\renewcommand*{\_}{-}%
+\renewcommand*{\}}{-}%
+\renewcommand*{\{}{-}%
+\renewcommand*{\&}{and}%
+\renewcommand*{\#}{-}%
+\renewcommand*{\,}{-}%
+\renewcommand*{~}{-}%
+\renewcommand*{\^}[1]{-}%
+\renewcommand*{\~}[1]{-}%
+\renewcommand*{\newline}{-}%
+\renewcommand*{\textasciicircum}{-}%
+\renewcommand*{\textasciitilde}{-}%
+\renewcommand*{\textasteriskcentered}{-}%
+\renewcommand*{\textbackslash}{-}%
+\renewcommand*{\textbar}{-}%
+\renewcommand*{\textbardbl}{-}%
+\renewcommand*{\textbigcircle}{-}%
+\renewcommand*{\textbraceleft}{-}%
+\renewcommand*{\textbraceright}{-}%
+\renewcommand*{\textbullet}{-}%
+\renewcommand*{\textcopyright}{-}%
+\renewcommand*{\textdagger}{-}%
+\renewcommand*{\textdaggerdbl}{-}%
+\renewcommand*{\textdollar}{-}%
+\renewcommand*{\textellipsis}{-}%
+\renewcommand*{\textemdash}{-}%
+\renewcommand*{\textendash}{-}%
+\renewcommand*{\textexclamdown}{-}%
+\renewcommand*{\textgreater}{-}%
+\renewcommand*{\textless}{-}%
+\renewcommand*{\textordfeminine}{-}%
+\renewcommand*{\textordmasculine}{-}%
+\renewcommand*{\textparagraph}{-}%
+\renewcommand*{\textperiodcentered}{-}%
+\renewcommand*{\textpertenthousand}{-}%
+\renewcommand*{\textperthousand}{-}%
+\renewcommand*{\textquestiondown}{-}%
+\renewcommand*{\textquotedblleft}{-}%
+\renewcommand*{\textquotedblright}{-}%
+\renewcommand*{\textquoteleft}{-}%
+\renewcommand*{\textquoteright}{-}%
+\renewcommand*{\textregistered}{-}%
+\renewcommand*{\textsection}{-}%
+\renewcommand*{\textsterling}{-}%
+\renewcommand*{\texttrademark}{-}%
+\renewcommand*{\textunderscore}{-}%
+\renewcommand*{\textvisiblespace}{-}%
+\renewcommand*{\copyright}{-}%
+\renewcommand*{\dag}{-}%
+\renewcommand*{\ddag}{-}%
+\renewcommand*{\dots}{-}%
+\renewcommand*{\P}{-}%
+\renewcommand*{\pounds}{-}%
+\renewcommand*{\S}{-}%
+\renewcommand*{\aa}{a}%
+\renewcommand*{\AA}{A}%
+\renewcommand*{\AE}{AE}%
+\renewcommand*{\ae}{ae}%
+\renewcommand*{\dh}{d}%
+\renewcommand*{\DH}{D}%
+\renewcommand*{\DJ}{D}%
+\renewcommand*{\dj}{d}%
+\renewcommand*{\IJ}{IJ}%
+\renewcommand*{\ij}{ij}%
+\renewcommand*{\L}{L}%
+\renewcommand*{\l}{l}%
+\renewcommand*{\NG}{NG}%
+\renewcommand*{\ng}{ng}%
+\renewcommand*{\O}{O}%
+\renewcommand*{\o}{o}%
+\renewcommand*{\oe}{oe}%
+\renewcommand*{\OE}{OE}%
+\renewcommand*{\ss}{ss}%
+\renewcommand*{\SS}{SS}%
+\renewcommand*{\th}{th}%
+\renewcommand*{\TH}{TH}%
+\renewcommand*{\guillemotleft}{}%
+\renewcommand*{\guilsinglleft}{}%
+\renewcommand*{\quotedblbase}{}%
+\renewcommand*{\textquotedbl}{}%
+\renewcommand*{\guillemotright}{}%
+\renewcommand*{\guilsinglright}{}%
+\renewcommand*{\quotesinglbase}{}%
+% \end{macrocode}
+% \begin{macrocode}
+\renewcommand*{\HTMLunicode}[1]{}%
+\renewcommand*{\HTMLentity}[1]{}%
+% \end{macrocode}
+% \begin{macrocode}
+\renewcommand{\textsuperscript}[1]{##1}%
+\renewcommand{\textsubscript}[1]{##1}%
+% \end{macrocode}
+% \changes{v0.50}{2018/02/20}{Fix: \cs{underline} in sectioning file name.}
+% \begin{macrocode}
+\renewcommand{\underline}[1]{##1}%
+% \end{macrocode}
+% \changes{v0.73}{2019/06/24}{Fix: \cs{hspace} in sectioning file name.}
+% \begin{macrocode}
+\RenewDocumentCommand{\hspace}{s m}{}
+% \end{macrocode}
+% \begin{macrocode}
+\RenewDocumentCommand{\LWR@htmlspanclass}{o m +m}{##3}%
+\DeclareExpandableDocumentCommand{\InlineClass}{D{(}{)}{} o m +m}{##4}%
+% \end{macrocode}
+% Nullify math macros.
+% \changes{v0.55}{2018/04/24}{Removed extraneous space which appeared in file links.}
+% \begin{macrocode}
+\def\(##1\){}%
+\def\[##1\]{}%
+\RenewDocumentCommand{\LWR@subsingledollar}{s m m m}{}%
+\protected\def$##1${}%
+% \end{macrocode}
+% Nullify logos:
+% \changes{v0.66}{2019/02/01}{Logos.}
+% \begin{macrocode}
+\renewcommand*{\TeX}{TeX}%
+\renewcommand*{\LaTeX}{LaTeX}%
+\renewcommand*{\LaTeXe}{LaTeX2e}%
+\renewcommand*{\LuaTeX}{LuaTeX}%
+\renewcommand*{\LuaLaTeX}{LuaLaTeX}%
+\renewcommand*{\XeTeX}{XeTeX}%
+\renewcommand*{\XeLaTeX}{XeLaTeX}%
+\renewcommand*{\ConTeXt}{ConTeXt}%
+\renewcommand*{\BibTeX}{BibTeX}%
+\renewcommand*{\MakeIndex}{MakeIndex}%
+\renewcommand*{\AmS}{AmS}%
+\renewcommand*{\MiKTeX}{MiKTeX}%
+\renewcommand*{\LyX}{LyX}%
+% \end{macrocode}
+% Use the simpler form with \cs{texorpdfstring}:
+% \changes{v0.52}{2018/03/31}{Fix: \cs{texorpdfstring} in section names.}
+% \begin{macrocode}
+\let\texorpdfstring\relax%
+\newcommand{\texorpdfstring}[2]{##2}%
+}
+\catcode`\$=3%
+\catcode`\_=8%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\FilenameNullify} \marg{redefinitions}
+%
+% Adds more nullifying definitions for filename generation.
+%
+% \changes{v0.67}{2019/02/13}{Added.}
+% \begin{macrocode}
+\newcommand*{\FilenameNullify}[1]{%
+ \appto{\LWR@nullfonts}{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \changes{v0.48}{2018/02/02}{Improved font control.}
+% \changes{v0.72}{2019/05/27}{\pkg{fontaxes}: Added.}
+
+% Remembers the current font family, series, and shape.
+% \pkg{fontaxes} support is integrated here.
+% \begin{macrocode}
+\newcommand*{\LWR@f@family}{rm}
+\newcommand*{\LWR@f@series}{md}
+\newcommand*{\LWR@f@shape}{up}
+\newcommand*{\LWR@f@shapecaps}{ulc}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@textcurrentfont} \marg{text}
+%
+% Prints the text with the current font choices.
+% Avoids nesting repeated font selections.
+%
+% \changes{v0.48}{2018/02/02}{Added. Improves font control.}
+% \changes{v0.56}{2018/04/27}{Added \attribute{span.textbf}, etc.}
+% \changes{v0.62}{2018/11/15}{Tracks depth to avoid nesting repeated font changes.}
+% \begin{macrocode}
+\newcounter{LWR@textcurrentfontdepth}
+\setcounter{LWR@textcurrentfontdepth}{0}
+
+\newcommand*{\LWR@textcurrentfont}[1]{%
+ \ifnumcomp{\value{LWR@textcurrentfontdepth}}{>}{0}%
+ {%
+ \addtocounter{LWR@textcurrentfontdepth}{1}%
+ #1%
+ \addtocounter{LWR@textcurrentfontdepth}{-1}%
+ }%
+ {%
+ \addtocounter{LWR@textcurrentfontdepth}{1}%
+ \InlineClass{%
+ text\LWR@f@family\LWR@origtilde{}%
+ text\LWR@f@series\LWR@origtilde{}%
+ text\LWR@f@shape\LWR@origtilde{}%
+ text\LWR@f@shapecaps%
+ }%
+ {#1}%
+ \addtocounter{LWR@textcurrentfontdepth}{-1}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{environment}{LWR@blocktextcurrentfont}
+%
+% Prints the contents with the current font choices.
+%
+% \changes{v0.56}{2018/05/09}{Added \attribute{div.textbf}, etc.}
+% \changes{v0.73}{2019/06/25}{Fix: Paragraph tags.}
+% \begin{macrocode}
+\newenvironment*{LWR@blocktextcurrentfont}{%
+\LWR@stoppars%
+\BlockClass{%
+ text\LWR@f@family\LWR@origtilde{}%
+ text\LWR@f@series\LWR@origtilde{}%
+ text\LWR@f@shape\LWR@origtilde{}%
+ text\LWR@f@shapecaps%
+ }%
+}{\endBlockClass\LWR@startpars}
+% \end{macrocode}
+% \end{environment}
+
+
+% \changes{v0.48}{2018/02/02}{Improved font control.}
+% \changes{v0.50}{2018/02/20}{Robustify macros.}
+% \changes{v0.72}{2019/05/24}{Use \cs{LWR@formatted} for \cs{bfseries}, etc.}
+%
+% \begin{macro}{\mdseries}
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@mdseries}{\renewcommand*{\LWR@f@series}{md}}
+\LWR@formatted{mdseries}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\bfseries}
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@bfseries}{\renewcommand*{\LWR@f@series}{bf}}
+\LWR@formatted{bfseries}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\ebweight} From \pkg{nfssext-cfr}.
+% \changes{v0.72}{2019/05/26}{\pkg{nfssext-cfr}: Added.}
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@ebweight}{\renewcommand*{\LWR@f@series}{eb}}
+\LWR@formatted{ebweight}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\lgweight} From \pkg{nfssext-cfr}.
+% \changes{v0.72}{2019/05/26}{\pkg{nfssext-cfr}: Added.}
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@lgweight}{\renewcommand*{\LWR@f@series}{lg}}
+\LWR@formatted{lgweight}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\rmfamily}
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@rmfamily}{\renewcommand*{\LWR@f@family}{rm}}
+\LWR@formatted{rmfamily}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\sffamily}
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@sffamily}{\renewcommand*{\LWR@f@family}{sf}}
+\LWR@formatted{sffamily}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\ttfamily}
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@ttfamily}{\renewcommand*{\LWR@f@family}{tt}}
+\LWR@formatted{ttfamily}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\upshape}
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@upshape}{\renewcommand*{\LWR@f@shape}{up}}
+\LWR@formatted{upshape}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\itshape}
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@itshape}{\renewcommand*{\LWR@f@shape}{it}}
+\LWR@formatted{itshape}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\scshape}
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@scshape}{\renewcommand*{\LWR@f@shapecaps}{sc}}
+\LWR@formatted{scshape}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\ulcshape} From \pkg{fontaxes}.
+% \changes{v0.72}{2019/05/27}{\pkg{fontaxes}: Added.}
+% \begin{macrocode}
+\@ifundefined{ulcshape}{
+ \LetLtxMacro\ulcshape\upshape
+}{}
+\newrobustcmd*{\LWR@HTML@ulcshape}{\renewcommand*{\LWR@f@shapecaps}{ulc}}
+\LWR@formatted{ulcshape}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\sishape}
+% \changes{v0.65}{2018/12/10}{Added \cs{sishape}.}
+% \begin{macrocode}
+\@ifundefined{sishape}{
+ \LetLtxMacro\sishape\scshape
+}{}
+\newrobustcmd*{\LWR@HTML@sishape}{%
+ \renewcommand*{\LWR@f@shape}{it}
+ \renewcommand*{\LWR@f@shapecaps}{sc}%
+}
+\LWR@formatted{sishape}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\slshape}
+% \changes{v0.62}{2018/11/11}{Added.}
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@slshape}{\renewcommand*{\LWR@f@shape}{sl}}
+\LWR@formatted{slshape}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\normalfont}
+% \begin{macrocode}
+\renewrobustcmd*{\normalfont}{\rmfamily\mdseries\upshape\ulcshape}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \begin{macro}{\sp} \marg{text}
+
+% For \pkg{siunitx}. Must work in math mode.
+% \begin{macrocode}
+\renewcommand{\sp}[1]{\text{<sup>#1</sup>}{}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\sb} \marg{text}
+
+% For \pkg{siunitx}. Must work in math mode.
+% \begin{macrocode}
+\renewcommand{\sb}[1]{\text{<sub>#1</sub>}{}}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\textsuperscript} \marg{text}
+% \changes{v0.50}{2018/02/20}{Robustify macros.}
+% \begin{macrocode}
+\renewrobustcmd{\textsuperscript}[1]{\LWR@htmlspan{sup}{#1}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@textsuperscript} \marg{text}
+% \changes{v0.42}{2017/10/16}{Added.}
+% \begin{macrocode}
+\renewcommand{\@textsuperscript}[1]{\LWR@htmlspan{sup}{#1}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\textsubscript} \marg{text}
+% \changes{v0.50}{2018/02/20}{Robustify macros.}
+% \begin{macrocode}
+\AtBeginDocument{
+\renewrobustcmd{\textsubscript}[1]{\LWR@htmlspan{sub}{#1}}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@textsubscript} \marg{text}
+% \changes{v0.42}{2017/10/16}{Added.}
+% \begin{macrocode}
+\AtBeginDocument{
+\renewcommand{\@textsubscript}[1]{\LWR@htmlspan{sub}{#1}}
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \begin{macro}{\up} \marg{text} Prints superscript.
+%
+% This is \cs{let} at the beginning of the document in case some other package
+% has changed the definition.
+% \begin{macrocode}
+\AtBeginDocument{\let\up\textsuperscript}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\fup} \marg{text} Prints superscript.
+%
+% Supports \pkg{fmtcount} package.
+%
+% This is \cs{let} at the beginning of the document in case some other package
+% has changed the definition.
+% \begin{macrocode}
+\AtBeginDocument{\let\fup\textsuperscript}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\underline} \marg{text}
+% \changes{v0.40}{2017/09/12}{Added.}
+% \changes{v0.42}{2017/10/20}{If \progcode{FormatWP}, use explicit styles for
+% \cs{underline}, etc.}
+% \begin{macrocode}
+\renewcommand{\underline}[1]{%
+ \InlineClass%
+ (text-decoration:underline; text-decoration-skip: auto)%
+ {underline}{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@overline} \marg{text}
+% \changes{v0.50}{2018/02/21}{Added.}
+% \begin{macrocode}
+\newcommand{\LWR@overline}[1]{%
+ \InlineClass%
+ (text-decoration:overline; text-decoration-skip: auto)%
+ {overline}{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@currenttextcolor}
+% The color to use for text and \cs{rule}, defaulting to black:
+%
+% \changes{v0.36}{2017/08/16}{Fix for \cs{rule} when \pkg{xcolor} not loaded.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@currenttextcolor}{black}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LWR@tempcolor}
+% \begin{macro}{\LWR@tempcolortwo}
+% The color converted to \HTML\ colorspace.
+% \begin{macrocode}
+\newcommand*{\LWR@tempcolor}{}
+\newcommand*{\LWR@tempcolortwo}{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@findcurrenttextcolor}
+% \changes{v0.51}{2018/03/14}{Added \cs{LWR@findcurrenttextcolor} when no \pkg{xcolor}.}
+% Sets \cs{LWR@tempcolor} to the current color.
+% \changes{v0.66}{2019/02/04}{Fix: Color if \pkg{xcolor} not loaded.}
+% \begin{macrocode}
+\newcommand*{\LWR@findcurrenttextcolor}{%
+\renewcommand{\LWR@tempcolor}{000000}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@textcurrentcolor} \marg{text}
+% Like \cs{textcolor} but uses the current \cs{color} instead.
+% \changes{v0.51}{2018/03/11}{\pkg{xcolor}: \cs{LWR@textcurrentcolor} if \pkg{xcolor} not loaded.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@textcurrentcolor}{m}{%
+ \renewcommand*{\LWR@currenttextcolor}{black}%
+ #1%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+% \codeprint
+% \begin{macrocode}
+\begin{warpprint}
+% \end{macrocode}
+
+% \begin{macro}{\LWR@textcurrentfont} \marg{text}
+%
+% Prints the text with the current font choices.
+%
+% \changes{v0.62}{2018/11/11}{Added print version.}
+% \begin{macrocode}
+\newcommand*{\LWR@textcurrentfont}[1]{#1}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{environment}{LWR@blocktextcurrentfont}
+%
+% Prints the contents with the current font choices.
+%
+% \changes{v0.62}{2018/11/11}{Added print version.}
+% \begin{macrocode}
+\newenvironment*{LWR@blocktextcurrentfont}{}{}
+% \end{macrocode}
+% \end{environment}
+
+% \begin{macro}{\FilenameNullify} \marg{macros to nullify}
+% \changes{v0.67}{2019/02/13}{Added.}
+% \begin{macrocode}
+\newcommand*{\FilenameNullify}[1]{}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpprint}
+% \end{macrocode}
+
+
+
+% \section{Skips, spaces, font sizes}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+% \cs{,} and \cs{thinspace} may be redefined by other packages, so
+% are redefined \cs{AtBeginDocument} here.
+%
+% Direct-formatting space commands become \HTML\ entities:
+%
+% \changes{v0.45}{2017/12/29}{Improved: Robust \cs{\,}, \cs{~}, and \cs{textellipsis} commands.}
+% \changes{v0.56}{2018/05/09}{Added \cs{thinspace}.}
+% \changes{v0.61}{2018/09/23}{Spaces redefined \cs{AtBeginDocument}.}
+% \begin{macrocode}
+\AtBeginDocument{
+\renewrobustcmd*{\,}{\HTMLunicode{202f}} % HTML thin non-breakable space
+\renewrobustcmd*{\thinspace}{\HTMLunicode{202f}} % HTML thin non-breakable space
+\renewrobustcmd*{\negthinspace}{\HTMLunicode{202f}} % HTML thin non-breakable space
+\renewrobustcmd*{~}{\HTMLentity{nbsp}}
+\renewrobustcmd*{\textellipsis}{\HTMLunicode{2026}}
+}
+% \end{macrocode}
+%
+% Direct-formatting font sizes are ignored:
+%
+% \changes{v0.58}{2018/06/07}{Improved print/\HTML\ output selection.}
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@normalsize}{}
+\LWR@formatted{normalsize}
+
+\newrobustcmd*{\LWR@HTML@small}{}
+\LWR@formatted{small}
+
+\newrobustcmd*{\LWR@HTML@footnotesize}{}
+\LWR@formatted{footnotesize}
+
+\newrobustcmd*{\LWR@HTML@scriptsize}{}
+\LWR@formatted{scriptsize}
+
+\newrobustcmd*{\LWR@HTML@tiny}{}
+\LWR@formatted{tiny}
+
+\newrobustcmd*{\LWR@HTML@large}{}
+\LWR@formatted{large}
+
+\newrobustcmd*{\LWR@HTML@Large}{}
+\LWR@formatted{Large}
+
+\newrobustcmd*{\LWR@HTML@LARGE}{}
+\LWR@formatted{LARGE}
+
+\newrobustcmd*{\LWR@HTML@huge}{}
+\LWR@formatted{huge}
+
+\newrobustcmd*{\LWR@HTML@Huge}{}
+\LWR@formatted{Huge}
+% \end{macrocode}
+%
+% \changes{v0.49}{2018/02/18}{Fix: Adapt to classes.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\onecolumn}{}{}
+
+\DeclareDocumentCommand{\twocolumn}{O{}}{
+
+#1
+
+}
+% \end{macrocode}
+
+
+% \begin{macro}{\hfill}
+% \changes{v0.20}{2016/12/12}{Inserts a \cs{qquad}.}
+% \changes{v0.58}{2018/06/07}{Improved print/\HTML\ output selection.}
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@hfill}{\qquad}
+\LWR@formatted{hfill}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\hrulefill}
+% \changes{v0.20}{2017/01/19}{Inserts a short rule.}
+% \changes{v0.58}{2018/06/07}{Improved print/\HTML\ output selection.}
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@hrulefill}{\rule{1in}{1pt}}
+\LWR@formatted{hrulefill}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\dotfill}
+% \changes{v0.20}{2017/01/19}{Inserts an ellipsis.}
+% \changes{v0.58}{2018/06/07}{Improved print/\HTML\ output selection.}
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@dotfill}{\dots}
+\LWR@formatted{dotfill}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\newpage}
+% \changes{v0.45}{2018/01/12}{Added.}
+% \begin{macrocode}
+\renewcommand*{\newpage}{
+
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\newline}
+% Uses the \HTML\ \element{br /} element.
+% \changes{v0.50}{2018/02/20}{Robustify macros.}
+% \begin{macrocode}
+\newrobustcmd*{\LWR@newlinebr}{\unskip\LWR@htmltag{br /}\LWR@orignewline}%
+\LetLtxMacro\newline\LWR@newlinebr
+% \end{macrocode}
+% \end{macro}
+
+
+% \DescribeMacro{\\} Redefined to \cs{LWR@endofline} or \cs{LWR@tabularendofline}.
+%
+% \begin{macro}{\LWR@endofline} * \oarg{len}
+% \changes{v0.20}{2016/08/20}{Fix: \protect\textbackslash\protect\textbackslash}
+%
+% |\\| is assigned to \cs{LWR@endofline} at \cs{LWR@LwarpStart}.
+%
+% Inside |tabular|, |\\| is temporarily changed to \cs{LWR@tabularendofline}.
+% \begin{macrocode}
+\LetLtxMacro\LWR@origendofline\\
+\NewDocumentCommand{\LWR@endofline}{s O{0pt}}
+{%
+\newline%
+% \end{macrocode}
+% \changes{v0.62}{2018/10/14}{Extra space if optional arg.}
+% \begin{macrocode}
+\setlength{\LWR@templengthone}{#2}%
+\ifdimgreater{\LWR@templengthone}{0pt}{\newline}{}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+
+
+% \begin{macro}{\LWR@minipagestartpars}
+% \changes{v0.19}{2016/05/31}{Suppresses paragraph tags between minipages.}
+% \gindex{minipage>horizontal space between}
+% \gindex{space>horizontal>between minipages}
+% \gindex{horizontal space>between minipages}
+% \trouble{minipage>horizontal space between}
+% Minipages are often placed side-by-side inside figures, with a bit of
+% horizontal space to separate them. Since \HTML\ does not allow
+% a \element{div} to be inside a |p|, paragraphs must be turned off during the
+% generation of the minipage, then turned on after the minipage is complete.
+% When this occurs between side-by-side minipages, |lwarp| correctly
+% suppresses the paragraph tags between the minipages, unless some other
+% text is between the minipages. Such text forms its own paragraph, resulting
+% in text after a minipage to be on its own line. Since people often place
+% \DescribeMacro{\hspace}
+% \DescribeMacro{\enskip}
+% \DescribeMacro{\quad}
+% \DescribeMacro{\qquad}
+% small horizontal space between minipages, it is desirable to maintain this
+% space if possible. |lwarp| tries to do this by remembering that a minipage
+% has been seen, in which case paragraph tags are suppressed around
+% \cs{hspace}, \cs{enskip}, \cs{quad}, and \cs{qquad} until the end of the paragraph, when
+% the closing |p| tag is created.
+%
+% When a minipage is seen, the boolean
+% |LWR@minipagethispar| is set, telling the following horizontal
+% whitespace commands to try to suppress their surrounding paragraph
+% tags. |LWR@minipagethispar| is cleared at the next
+% end of paragraph, when the \HTML\ paragraph closing tag is
+% generated.
+%
+% Placed just before \cs{hspace}, \cs{quad}, or \cs{qquad}'s \HTML\ output.
+% \begin{macrocode}
+\newcommand*{\LWR@minipagestartpars}{%
+\ifbool{LWR@minipagethispar}{\LWR@startpars}{}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@minipagestoppars}
+% Placed just after \cs{hspace}, \cs{quad}, or \cs{qquad}'s \HTML\ output.
+% \begin{macrocode}
+\newcommand*{\LWR@minipagestoppars}{%
+\ifbool{LWR@minipagethispar}{\LWR@stoppars}{}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\quad}
+% Handles special minipage \& horizontal space interactions.
+% Uses |2003 EM SPACE| to pass validation.
+% \changes{v0.64}{2018/12/08}{Made robust.}
+% \changes{v0.65}{2018/12/22}{Changed to Unicode EM SPACE.}
+% \begin{macrocode}
+\renewrobustcmd*{\quad}{%
+\LWR@minipagestoppars%
+\HTMLunicode{2003}%
+\LWR@minipagestartpars%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\qquad}
+% Handles special minipage \& horizontal space interactions.
+% \changes{v0.64}{2018/12/08}{Made robust.}
+% \begin{macrocode}
+\renewrobustcmd*{\qquad}{\quad\quad}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\enskip}
+% Handles special minipage \& horizontal space interactions.
+% \changes{v0.64}{2018/12/08}{Made robust.}
+% \changes{v0.65}{2018/12/22}{Changed to Unicode EN SPACE.}
+% \begin{macrocode}
+\renewrobustcmd*{\enskip}{%
+\LWR@minipagestoppars%
+\HTMLunicode{2002}%
+\LWR@minipagestartpars%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \DescribeLength{\LWR@tempwidth}
+% \DescribeLength{\LWR@tempheight}
+% \DescribeLength{\LWR@tempraise}
+% Used to compute span width, height, raise for \cs{hspace} and \cs{rule}:
+% \begin{macrocode}
+\newlength{\LWR@tempwidth}
+\newlength{\LWR@tempheight}
+\newlength{\LWR@tempraise}
+% \end{macrocode}
+%
+
+% \begin{macro}{\LWR@select@html@hspace}
+%
+% \begin{macro}{\hspace} * \marg{length} * \marg{length}
+%
+% Handles special minipage \& horizontal space interactions.
+% \changes{v0.18}{2016/05/13}{\cs{hspace} supported.}
+% \changes{v0.19}{2016/05/29}{Fix: \cs{hspace} length computations.}
+% \changes{v0.20}{2016/08/22}{Add: Supports \HTML\ thin breakable space.}
+% \changes{v0.24}{2017/03/14}{Add: \cs{hspace} \cs{fill} converts to 2em}
+%
+% Prints a span of a given width. Ignores the optional star.
+%
+% |\hspace{\fill}| is converted to |\hspace{2em}|, equal to \cs{qquad}.
+% \begin{macrocode}
+\newcommand{\LWR@select@html@hspace}{%
+\RenewDocumentCommand{\hspace}{s m}{%
+\setlength{\LWR@tempwidth}{##2}%
+% \end{macrocode}
+% If \cs{fill}, change to \cs{qquad}:
+% \begin{macrocode}
+\ifnum\gluestretchorder\LWR@tempwidth>0%
+\setlength{\LWR@tempwidth}{2em}%
+\fi%
+% \end{macrocode}
+% Only if the width is not zero:
+% \begin{macrocode}
+\ifdimcomp{\LWR@tempwidth}{=}{0pt}{}{%
+% \end{macrocode}
+% If had a minipage this paragraph, try to inline the
+% white space without generating paragraph tags:
+% \begin{macrocode}
+ \LWR@minipagestoppars%
+% \end{macrocode}
+% Support the \HTML\ thin wrappable space:
+% \begin{macrocode}
+ \ifdimcomp{\LWR@tempwidth}{=}{.16667em}%
+ {%
+ \HTMLunicode{2009}% thin breakable space
+ }%
+% \end{macrocode}
+% Print the span with the converted width. Not rounded.
+% \begin{macrocode}
+ {%
+ \LWR@htmltagc{%
+ span style="width:\LWR@printlength{\LWR@tempwidth}; % extra space
+ display:inline-block"%
+ }%
+% \end{macrocode}
+% If formatting for a word processor, approximate with a number of \cs{quad}s,
+% in case a span of a given width is not supported:
+% \changes{v0.42}{2017/10/27}{If \progcode{FormatWP} add \cs{quad}s.}
+% \begin{macrocode}
+ \ifbool{FormatWP}{%
+ \setlength{\LWR@templengthone}{\LWR@tempwidth}%
+ \whiledo{\lengthtest{\LWR@templengthone>1em}}{%
+ \quad%
+ \addtolength{\LWR@templengthone}{-1em}%
+ }%
+ }%
+% \end{macrocode}
+% If NOT formatting for a word processor,
+% include an empty comment to avoid an empty span:
+% \changes{v0.73}{2019/06/24}{Fix: Avoid empty \element{span}.}
+% \begin{macrocode}
+ {\LWR@htmlcomment{}}%
+% \end{macrocode}
+% Close the span:
+% \begin{macrocode}
+ \LWR@htmltagc{/span}%
+ }%
+% \end{macrocode}
+% If had a minipage this paragraph, try to inline the
+% white space without generating paragraph tags:
+% \begin{macrocode}
+ \LWR@minipagestartpars%
+}% width not 0
+}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\LWR@select@html@nohspace}
+%
+% \begin{macro}{\hspace} * \marg{length}
+%
+% Used to disable \cs{hspace} while creating |description| \cs{item}s.
+% \begin{macrocode}
+\newcommand{\LWR@select@html@nohspace}{%
+ \RenewDocumentCommand{\hspace}{s m}{}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+
+% \begin{macro}{\LWR@select@print@hspace}
+% \begin{macrocode}
+\newcommand*{\LWR@select@print@hspace}{%
+ \renewrobustcmd\hspace{\@ifstar\@hspacer\@hspace}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+%
+%
+% \begin{macro}{\hspace} * \marg{length}
+%
+% Handles special minipage \& horizontal space interactions.
+% \begin{macrocode}
+\LWR@select@html@hspace
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@vspace} * \marg{length} Nullified vspace.
+%
+% \changes{v0.33}{2017/06/21}{Add: \cs{vspace} nullified.}
+% \changes{v0.50}{2018/02/20}{Robustify macros.}
+% \changes{v0.57}{2018/05/28}{Improved print/\HTML\ output selection.}
+%
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@vspace}{s m}{}
+
+\LWR@formatted{vspace}
+% \end{macrocode}
+% \end{macro}
+%
+%
+
+
+% \begin{macro}{\linebreak} \oarg{num} \qquad
+% Inserts an \HTML\ |br| tag.
+% \begin{macrocode}
+\renewcommand*{\linebreak}[1][]{\newline}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\nolinebreak} \oarg{num}
+% \begin{macrocode}
+\renewcommand*{\nolinebreak}[1][]{}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\pagebreak} \oarg{num} \qquad
+% Starts a new paragraph.
+% \begin{macrocode}
+\renewcommand*{\pagebreak}[1][]{
+
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\nopagebreak} \oarg{num}
+% \begin{macrocode}
+\renewcommand*{\nopagebreak}[1][]{}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\enlargethispage} * \marg{len}
+% \begin{macrocode}
+\RenewDocumentCommand{\enlargethispage}{s m}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\clearpage}
+% \begin{macro}{\cleardoublepage}
+% \begin{macrocode}
+\renewcommand*{\clearpage}{}
+\renewcommand*{\cleardoublepage}{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{\rule} \oarg{raise} \marg{width} \marg{height}
+%
+% Handles special minipage \& horizontal space interactions.
+%
+% Creates a span of a given width and height. Ignores the optional star.
+%
+% \cs{fill} is zero-width, so |\hspace{\fill}| is ignored.
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@rule}[3][]{%
+% \end{macrocode}
+% The width is copied into a temporary \LaTeX\ length, from which
+% comparisons and conversions may be made:
+% \begin{macrocode}
+\setlength{\LWR@tempwidth}{#2}%
+% \end{macrocode}
+% If it's zero-width then skip the entire rule:
+% \begin{macrocode}
+\ifthenelse{\lengthtest{\LWR@tempwidth=0pt}}%
+{}% zero- width
+{% non-zero width
+% \end{macrocode}
+% If it's non-zero width, set a minimal thickness so that it
+% more reliably shows in the browser:
+% \begin{macrocode}
+ \ifthenelse{%
+ \lengthtest{\LWR@tempwidth>0pt}\AND%
+ \lengthtest{\LWR@tempwidth<1pt}%
+ }%
+ {\setlength{\LWR@tempwidth}{1pt}}%
+ {}%
+% \end{macrocode}
+% Likewise with height:
+% \begin{macrocode}
+ \setlength{\LWR@tempheight}{#3}%
+ \ifthenelse{%
+ \lengthtest{\LWR@tempheight>0pt}\AND%
+ \lengthtest{\LWR@tempheight<1pt}%
+ }%
+ {\setlength{\LWR@tempheight}{1pt}}%
+ {}%
+% \end{macrocode}
+% If had a minipage this paragraph, try to inline the
+% rule without generating paragraph tags:
+% \begin{macrocode}
+ \LWR@minipagestoppars%
+% \end{macrocode}
+% Print the span with the converted width and height.
+% The width and height are NOT rounded, since a height of
+% less than 1pt is quite common in \LaTeX\ code.
+% \changes{v0.57}{2018/06/02}{Fix: Colored rules.}
+% \changes{v0.66}{2019/02/02}{Improved \HTML\ formatting.}
+% \begin{macrocode}
+ \LWR@findcurrenttextcolor%
+ \LWR@htmltagc{%
+ span\LWR@indentHTML%
+ style="%
+% \end{macrocode}
+% The \HTML\ background color is used to draw the filled rule according
+% to the \LaTeX\ foreground color set by \cs{textcolor}.
+% \begin{macrocode}
+ \ifbool{FormatWP}{}{background:\LWR@currenttextcolor ; }%
+% \end{macrocode}
+% The width and height are printed, converted to PT:
+% \begin{macrocode}
+ width:\LWR@printlength{\LWR@tempwidth} ; %
+ height:\LWR@printlength{\LWR@tempheight} ; %
+% \end{macrocode}
+% The raise height is converted to a \CSS\ transform.
+% The |*2| raise multiplier is to approximately match \HTML\ output's X height.
+% Conversion to a \LaTeX\ length allows a typical \LaTeX\ expression to be
+% used as an argument for the raise, whereas printing the raise argument
+% directly to \HTML\ output without conversion to a \LaTeX\ length
+% limits the allowable syntax. To do:\ A superior method would compute a
+% ratio of \LaTeX\ ex height, then print that to \HTML\ with an ex unit.
+% \begin{macrocode}
+ \ifblank{#1}%
+ {}%
+ {%
+ \setlength{\LWR@tempraise}{0pt-#1}%
+ \setlength{\LWR@tempraise}{\LWR@tempraise*2}%
+ \LWR@indentHTML%
+ -ms-transform: translate(0pt,\LWR@printlength{\LWR@tempraise}); %
+ \LWR@indentHTML%
+ -webkit-transform: translate(0pt,\LWR@printlength{\LWR@tempraise}); %
+ \LWR@indentHTML%
+ transform: translate(0pt,\LWR@printlength{\LWR@tempraise}); %
+ \LWR@indentHTML%
+ }%
+% \end{macrocode}
+% Display inline-block to place the span inline with the text:
+% \begin{macrocode}
+ display:inline-block;"\LWR@orignewline%
+ }%
+% \end{macrocode}
+% If formatting for a word processor, approximate with a number of underscores,
+% in case a span of a given width is not supported:
+% \changes{v0.42}{2017/10/27}{If \progcode{FormatWP} add \cs{quad}s.}
+% \begin{macrocode}
+ \ifbool{FormatWP}{%
+ \setlength{\LWR@templengthone}{\LWR@tempwidth}%
+ \whiledo{\lengthtest{\LWR@templengthone>1em}}{%
+ \_{}%
+ \addtolength{\LWR@templengthone}{-1em}%
+ }%
+ }%
+% \end{macrocode}
+% If NOT formatting for a word processor,
+% add a comment to avoid an empty \element{span}:
+% \changes{v0.73}{2019/06/24}{Fix: Avoid empty \element{span}.}
+% \begin{macrocode}
+ {\LWR@htmlcomment{}}%
+% \end{macrocode}
+% Close the span:
+% \begin{macrocode}
+ \LWR@htmltagc{/span}%
+% \end{macrocode}
+% If had a minipage this paragraph, try to inline the
+% white space without generating paragraph tags:
+% \begin{macrocode}
+ \LWR@minipagestartpars%
+}% non-zero width
+}
+
+\LWR@formatted{rule}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+% \section{\cs{phantomsection}}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{macro}{\phantomsection}
+% Emulate the \pkg{hyperref} \cs{phantomsection} command,
+% often used to insert the bibliography into the table of contents.
+% Ignores \cs{ForceHTMLTOC}.
+% \changes{v0.55}{2018/04/26}{Fix: \cs{ForceHTMLTOC} with \cs{phantomsection}.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\phantomsection}{}{%
+\begingroup%
+\boolfalse{LWR@forcinghtmltoc}%
+\section*{}%
+\endgroup%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+
+% \section{\cs{LaTeX} and other logos}
+
+% Logos for \HTML\ and print modes:
+%
+% Some of these logos may be redefined in a later package,
+% so after loading other packages, and at the beginning of the document,
+% their definitions are finally set by \cs{LWR@formatted}.
+%
+% For \CSS\ conversions, see: \\
+% \url{http://edward.oconnor.cx/2007/08/tex-poshlet} \\
+% \url{http://nitens.org/taraborelli/texlogo} \\
+% and the spacing described in the \pkg{metafont} package documentation.
+%
+% \changes{v0.62}{2018/10/23}{Logos: CSS instead of \element{sup}, \element{sub}.}
+% \changes{v0.62}{2018/10/23}{Logos: Improved CSS.}
+% \changes{v0.62}{2018/10/23}{Logos: Made robust.}
+% \changes{v0.70}{2019/03/30}{Logos: Improved for \pkg{metalogox}, \env{lateximage}s.}
+%
+%
+% \changes{v0.62}{2018/10/23}{Logos: Fix for \XeTeX\ logo if \pkg{graphics} is not loaded.}
+%
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+\newrobustcmd*{\Xe}
+ {X\hspace{-.1667em}\raisebox{-.5ex}{E}}
+
+\AtBeginDocument{
+\@ifpackageloaded{graphics}{
+ \@ifpackageloaded{metalogo}{}{
+ \renewrobustcmd*{\Xe}
+ {X\hspace{-.1667em}\raisebox{-.5ex}{\reflectbox{E}}}
+ }
+}{
+ \PackageWarningNoLine{lwarp}{Load graphicx or graphics
+ for improved XeTeX logo}
+}
+}
+
+\providerobustcmd*{\XeTeX}{\mbox{\Xe\hspace{-.125em}\TeX}}
+\providerobustcmd*{\XeLaTeX}{\mbox{\Xe\hspace{-.125em}\LaTeX}}
+\providerobustcmd*{\AmS}{%
+ \leavevmode\hbox{$\mathcal A\kern-.2em\lower.376ex%
+ \hbox{$\mathcal M$}\kern-.2em\mathcal S$}%
+}
+\newrobustcmd*{\LyX}{\textsf{LyX}}
+\providerobustcmd*{\LuaTeX}{\mbox{Lua\TeX}}
+\providerobustcmd*{\LuaLaTeX}{\mbox{Lua\LaTeX}}
+\providerobustcmd*{\BibTeX}{\mbox{B\textsc{ib}\TeX}}
+\providerobustcmd*{\MakeIndex}{\mbox{\textit{MakeIndex}}}
+\providerobustcmd*{\ConTeXt}{\mbox{Con\TeX{}t}}
+\providerobustcmd*{\MiKTeX}{\mbox{MiK\TeX}}
+\end{warpall}
+% \end{macrocode}
+%
+%
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+% The print-mode versions of the following may be changed by \pkg{metalogo},
+% so their print formatting is recorded \cs{AtBeginDocument}.
+%
+% \begin{macro}{\TeX} \TeX
+% \nopagebreak
+%
+% |latexlogo| is a \CSS\ class used to properly typeset the E and A in \LaTeX{} and friends.
+%
+% |latexlogofont| is a \CSS\ class used to select the font for the rest of the logo in
+% \LaTeX, \LuaTeX, \ConTeXt, etc.
+% \changes{v0.42}{2017/10/20}{If \progcode{FormatWP} use explicit style.}
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@TeX}
+{%
+ \InlineClass{latexlogofont}%
+ {%
+ \InlineClass{latexlogo}%
+ {%
+ T%
+ \InlineClass{latexlogosub}{e}%
+ X%
+ }%
+ }%
+}
+\AtBeginDocument{\LWR@formatted{TeX}}% may have been patched by metalogo
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LaTeX}
+% \changes{v0.42}{2017/10/20}{If \progcode{FormatWP} use explicit style.}
+% \begin{macro}{\LaTeXe} \LaTeX, \LaTeXe
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@LaTeX}
+{%
+ \InlineClass{latexlogofont}%
+ {%
+ \InlineClass{latexlogo}%
+ {%
+ L%
+ \InlineClass{latexlogosup}{a}%
+ T%
+ \InlineClass{latexlogosub}{e}%
+ X%
+ }%
+ }%
+}
+
+\AtBeginDocument{\LWR@formatted{LaTeX}}% may have been patched by metalogo
+
+
+\newrobustcmd*{\LWR@HTML@LaTeXe}
+{%
+ \LaTeX%
+ \InlineClass{latexlogofont}{%
+ \InlineClass{latexlogotwoe}{%
+ 2%
+ \InlineClass{latexlogotwoesub}{\HTMLunicode{03B5}}%
+ }%
+ }%
+}
+\AtBeginDocument{\LWR@formatted{LaTeXe}}% may have been patched by metalogo
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\LuaTeX}
+% \begin{macro}{\LuaLaTeX} \LuaTeX, \LuaLaTeX
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@LuaTeX}{\InlineClass{latexlogofont}{Lua}\TeX}
+\AtBeginDocument{\LWR@formatted{LuaTeX}}% may have been patched by metalogo
+
+\newrobustcmd*{\LWR@HTML@LuaLaTeX}{\InlineClass{latexlogofont}{Lua}\LaTeX}
+\AtBeginDocument{\LWR@formatted{LuaLaTeX}}% may have been patched by metalogo
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\XeTeX}
+% \begin{macro}{\XeLaTeX} \XeTeX, \XeLaTeX
+% \nopagebreak
+%
+% |xetexlogo| is a \CSS\ class which aligns the backwards E in \XeTeX{} and spaces \TeX{}
+% appropriately.
+%
+% |xelatexlogo| is a \CSS\ class which aligns the backwards E in \XeLaTeX{} and spaces
+% \LaTeX{} appropriately.
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@Xe}
+ {%
+ X%
+ \InlineClass{xelatexlogosub}{\HTMLunicode{18e}}%
+ }
+\AtBeginDocument{\LWR@formatted{Xe}}% may have been patched by metalogo
+
+\newrobustcmd*{\LWR@HTML@XeTeX}{\InlineClass{xelatexlogo}{\Xe}\TeX}
+\AtBeginDocument{\LWR@formatted{XeTeX}}% may have been patched by metalogo
+
+\newrobustcmd*{\LWR@HTML@XeLaTeX}{\InlineClass{xelatexlogo}{\Xe}\LaTeX}
+\AtBeginDocument{\LWR@formatted{XeLaTeX}}% may have been patched by metalogo
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\ConTeXt} \ConTeXt
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@ConTeXt}{%
+ \InlineClass{latexlogofont}{Con}\TeX{}%
+ \InlineClass{latexlogofont}{t}%
+}
+\LWR@formatted{ConTeXt}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\BibTeX}
+% \begin{macro}{\MakeIndex} \BibTeX, \MakeIndex
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@BibTeX}
+ {\InlineClass{latexlogofont}{B\textsc{ib}}\TeX}
+\LWR@formatted{BibTeX}
+
+\newrobustcmd*{\LWR@HTML@MakeIndex}
+ {\InlineClass{latexlogofont}{\textit{MakeIndex}}}
+\LWR@formatted{MakeIndex}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\AmS} \AmS
+% \nopagebreak
+%
+% |amslogo| is a \CSS\ class used for the \AmS\ logo.
+% \begin{macrocode}
+\AtBeginDocument{%
+\newrobustcmd*{\LWR@HTML@AmS}
+{%
+ \InlineClass{amslogo}{%
+ \textit{%
+ A%
+ \InlineClass{latexlogosub}{M}%
+ S%
+ }%
+ }%
+}%
+\LWR@formatted{AmS}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\MiKTeX} \MiKTeX
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@MiKTeX}{\InlineClass{latexlogofont}{MiK}\TeX}
+\LWR@formatted{MiKTeX}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LyX} \LyX
+% \nopagebreak
+%
+% |lyxlogo| is a \CSS\ class used for the \LyX\ logo.
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@LyX}{\InlineClass{lyxlogo}{LyX}}
+\LWR@formatted{LyX}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+%
+%
+
+
+% \section{\cs{AtBeginDocument}, \cs{AtEndDocument}}
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{macro}{\LWR@LwarpStart}
+% \begin{macro}{\LWR@LwarpEnd}
+% Automatically sets up the \HTML-related actions for the start and end of the
+% document.
+% \begin{macrocode}
+\AfterEndPreamble{\LWR@LwarpStart}
+\AtEndDocument{\LWR@LwarpEnd}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+
+% \section{Loading \brand{Koma-script} class patches}
+%
+% Load patches to \pkg{koma-script}.
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@ifclassloaded{scrbook}{\RequirePackage{lwarp-patch-komascript}}{}
+\@ifclassloaded{scrartcl}{\RequirePackage{lwarp-patch-komascript}}{}
+\@ifclassloaded{scrreprt}{\RequirePackage{lwarp-patch-komascript}}{}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \section{Loading \brand{Memoir} class patches}
+%
+% Load patches to \pkg{memoir}.
+%
+% \changes{v0.45}{2017/12/03}{\pkg{memoir}: Added.}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@ifclassloaded{memoir}{\RequirePackage{lwarp-patch-memoir}}{}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+
+% \section{\pkg{ut*} class patches}
+%
+% Load patches to \pkg{uj*} and \pkg{ut*} classes, as well as \pkg{ltj*} classes.
+%
+% \changes{v0.64}{2018/12/07}{\pkg{ujarticle} and related: Improved \cs{today}.}
+% \changes{v0.64}{2018/12/07}{Added \pkg{utarticle} and related.}
+% \changes{v0.65}{2018/12/15}{Fix for \cs{rensuji}.}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@patchujtclasses}{
+% \end{macrocode}
+%
+% \pkg{uj/t} does not use \cs{partname}
+% \begin{macrocode}
+ \def\@partnameformat{}
+% \end{macrocode}
+% \begin{macrocode}
+ \def\@partcntformat##1{%
+ \prepartname%
+ \csname the##1\endcsname%
+ \postpartname%
+ \quad%
+ }
+ \@ifundefined{chapter}{}{
+ \def\@chapcntformat##1{%
+ \prechaptername%
+ \csname the##1\endcsname%
+ \postchaptername%
+ \quad%
+ }
+ }
+% \end{macrocode}
+% Use decimal points instead of centered dots:
+% \begin{macrocode}
+ \renewcommand{\thepart}{\@Roman\c@part}
+ \@ifundefined{chapter}{
+ \renewcommand{\thesection}{\@arabic\c@section}
+ }{
+ \renewcommand{\thechapter}{\@arabic\c@chapter}
+ \renewcommand{\thesection}{\thechapter.\@arabic\c@section}
+ }
+ \renewcommand{\thesubsection}{\thesection.\@arabic\c@subsection}
+ \renewcommand{\thesubsubsection}{%
+ \thesubsection.\@arabic\c@subsubsection}
+ \renewcommand{\theparagraph}{%
+ \thesubsubsection.\@arabic\c@paragraph}
+ \renewcommand{\thesubparagraph}{%
+ \theparagraph.\@arabic\c@subparagraph}
+ \@ifundefined{chapter}{
+ \renewcommand{\thefigure}{\@arabic\c@figure}
+ \renewcommand{\thetable}{\@arabic\c@table}
+ }{
+ \renewcommand{\thefigure}{%
+ \ifnum\c@chapter>\z@\thechapter.\fi\@arabic\c@figure}
+ \renewcommand{\thetable}{%
+ \ifnum\c@chapter>\z@\thechapter.\fi\@arabic\c@table}
+ }
+}
+
+\@ifclassloaded{ujarticle}{\LWR@patchujtclasses}{}
+\@ifclassloaded{ujbook}{\LWR@patchujtclasses}{}
+\@ifclassloaded{ujreport}{\LWR@patchujtclasses}{}
+\@ifclassloaded{utarticle}{\LWR@patchujtclasses}{}
+\@ifclassloaded{utbook}{\LWR@patchujtclasses}{}
+\@ifclassloaded{utreport}{\LWR@patchujtclasses}{}
+\@ifclassloaded{ltjarticle}{\LWR@patchujtclasses}{}
+\@ifclassloaded{ltjbook}{\LWR@patchujtclasses}{}
+\@ifclassloaded{ltjreport}{\LWR@patchujtclasses}{}
+\@ifclassloaded{ltjsarticle}{\LWR@patchujtclasses}{}
+\@ifclassloaded{ltjsbook}{\LWR@patchujtclasses}{}
+\@ifclassloaded{ltjsreport}{\LWR@patchujtclasses}{}
+\@ifclassloaded{ltjskiyou}{\LWR@patchujtclasses}{}
+\@ifclassloaded{ltjspf}{\LWR@patchujtclasses}{}
+\@ifclassloaded{ltjtarticle}{\LWR@patchujtclasses}{}
+\@ifclassloaded{ltjtbook}{\LWR@patchujtclasses}{}
+\@ifclassloaded{ltjtreport}{\LWR@patchujtclasses}{}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% ^^A *ctex
+% \section{C\TeX\ patches}
+%
+% Patches for \pkg{ctex} and related classes,
+% which are loaded before \pkg{lwarp}.
+%
+% All C\TeX\ classes and the \pkg{ctex} package seem to
+% load \pkg{ctexpatch}, so its presence is used to
+% decide whether to have \pkg{lwarp} patch C\TeX.
+%
+% \changes{v0.62}{2018/11/17}{\pkg{ctexpatch}: Added patch.}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+% \cs{AtBeginDocument} in case the user set |FileSectionNames| in the preamble.
+%
+% \begin{macrocode}
+\AtBeginDocument{
+ \@ifpackageloaded{ctexpatch}{%
+ \def\@partcntformat#1{%
+ \LWR@isolate{\CTEX@partname}~%
+ \CTEX@part@aftername%
+ }%
+
+ \def\@partnameformat{}
+
+ \def\@chapcntformat#1{%
+ \LWR@isolate{\CTEX@chaptername}~%
+ \CTEX@chapter@aftername%
+ }%
+ }{}
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+%
+%
+%
+% ^^A *kotexutf
+% \section{\pkg{kotexutf} patches}
+%
+% Patch for \pkg{kotexutf}, which is loaded before \pkg{lwarp}.
+%
+% \pkg{kotexutf}'s \cs{@setref} was conflicting with \pkg{lwarp}'s
+% cross references.
+%
+% \changes{v0.66}{2019/01/29}{\pkg{kotexutf}: Patch for references.}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+% If \pkg{kotexutf}'s version of \cs{@setref} is detected,
+% it is reverted to the original.
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifpackageloaded{kotexutf}{%
+ \def\LWR@kotexutf@setref#1#2#3{%
+ \@setref@dhucs@orig{#1}{#2}{#3}%
+ \ifx#1\relax\else
+ \bgroup
+ \dhucs@make@cjkchar@null
+ \edef\@temp{\expandafter#2#1}\global\josatoks\expandafter{\@temp}%
+ \egroup
+ \fi%
+ }%
+
+ \ifdefequal{\@setref}{\LWR@kotexutf@setref}{
+ \let\@setref\@setref@dhucs@orig
+ }{}
+}{}
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+%
+%
+% \iffalse
+%</package>
+% \fi
+%
+%
+%
+%
+%
+%
+%
+%
+% \changes{v0.20}{2016/12/12}{Code factored into independent \filenm{lwarp_html} files.}
+%
+% ^^A The following adjustments apply to the lwarp-* package listings:
+%
+% \addtocontents{toc}{\protect\setcounter{tocdepth}{0}}
+%
+% \titleformat{\part}[hang]
+% {\hrule\nopagebreak[4]\large\ttfamily\bfseries}{}{0pt}{}[\marginpar{\hfill{}File\,\thepart}]
+% \titlespacing*{\part}{0pt}{*4}{0ex}
+%
+% \titleformat{\section}[hang]
+% {\LARGE\sffamily\bfseries}{}{0pt}{}[\marginpar{\hfill\textsection\,\thesection \qquad Package}]
+% \titlespacing*{\section}{0pt}{0ex}{0ex}
+%
+% \titleformat{\subsection}[hang]
+% {\large\rmfamily\bfseries}{}{0pt}{}[\marginpar{\hfill\textsection\,\thesubsection}]
+% \titlespacing*{\subsection}{0pt}{0ex}{0ex}
+%
+% \titleformat{\subsubsection}[hang]
+% {\normalsize\rmfamily\bfseries}{}{0pt}{}[\marginpar{\hfill\textsection\,\thesubsubsection}]
+% \titlespacing*{\subsection}{0pt}{0ex}{0ex}
+%
+% \renewcommand{\bottomtitlespace}{.2\textheight}
+%
+%
+% \clearpage
+%
+%
+%
+% \changes{v0.66}{2018/12/29}{Package dates added where possible.}
+%
+%
+% \iffalse
+%<*2in1>
+% \fi
+%
+% \part{lwarp-2in1.sty}
+%
+% \section{2in1}
+%
+% \DescribePackage{2in1}
+% \pkg{2in1} is ignored.
+%
+% \changes{v0.62}{2018/10/16}{\pkg{2in1}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{2in1}
+% \end{macrocode}
+%
+% \iffalse
+%</2in1>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*2up>
+% \fi
+%
+% \part{lwarp-2up.sty}
+%
+% \section{2up}
+%
+% \DescribePackage{2up}
+% \pkg{2up} is ignored.
+%
+% \changes{v0.60}{2018/09/18}{\pkg{2up}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{2up}[2010/05/15]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\source#1#2#3{}
+\def\target#1#2#3{}
+\def\targetlayout#1{}
+\newdimen\pageseplength
+\newdimen\pagesepwidth
+\newdimen\pagesepoffset
+\def\twoupemptypage{}
+\def\twoupclearpage{}
+\def\twoupeject{}
+\def\twouparticle{}
+\def\twoupplain{}
+\def\twouplegaltarget{}
+\def\twouplandscape{}
+\def\TwoupWrites{}
+% \end{macrocode}
+%
+% \iffalse
+%</2up>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*a4>
+% \fi
+%
+% \part{lwarp-a4.sty}
+%
+% \section{a4}
+%
+% \DescribePackage{a4}
+% \pkg{a4} is ignored.
+%
+% \changes{v0.39}{2017/08/27}{\pkg{a4}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{a4}[2004/04/15]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\WideMargins}{}
+% \end{macrocode}
+%
+% \iffalse
+%</a4>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*a4wide>
+% \fi
+%
+% \part{lwarp-a4wide.sty}
+%
+% \section{a4wide}
+%
+% \DescribePackage{a4wide}
+% \pkg{a4wide} is ignored.
+%
+% \changes{v0.39}{2017/08/27}{\pkg{a4wide}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{a4wide}[1994/08/30]
+% \end{macrocode}
+%
+%
+% \iffalse
+%</a4wide>
+% \fi
+%
+%
+%
+% \iffalse
+%<*a5comb>
+% \fi
+%
+% \part{lwarp-a5comb.sty}
+%
+% \section{a5comb}
+%
+% \DescribePackage{a5comb}
+% \pkg{a5comb} is ignored.
+%
+% \changes{v0.39}{2017/08/27}{\pkg{a5comb}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{a5comb}
+% \end{macrocode}
+%
+%
+% \iffalse
+%</a5comb>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*abstract>
+% \fi
+%
+% \part{lwarp-abstract.sty}
+%
+% \section{abstract}
+%
+% \credits{Peter Wilson}
+%
+% \DescribePackage{abstract}
+% \pkg{abstract} is supported and patched by \pkg{lwarp}.
+%
+% \limitsabstract
+%
+% \changes{v0.22}{2017/03/01}{\pkg{abstract}: Added.}
+%
+% \codehtml
+%
+% \pkg{memoir} provides an \env{abstract} environment even though it
+% is not an \pkg{article} or \pkg{report} class.
+% Meanwhile, \pkg{lwarp} loads \pkg{book} to
+% emulate \pkg{memoir}, but \pkg{book} does not have an \env{abstract}
+% environment, so when the \pkg{abstract} package is loaded for emulation there
+% is no pre-existing \env{abstract} to redefine, which would cause an error.
+% Thus, a null \env{abstract} is provide here:
+% \begin{macrocode}
+\ProvideDocumentEnvironment{abstract}{}{}{}
+% \end{macrocode}
+%
+% Accept all options for \pkg{lwarp-abstract}:
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{abstract}[2009/06/08]
+% \end{macrocode}
+
+
+% \begin{macrocode}
+\AtBeginDocument{
+\BeforeBeginEnvironment{abstract}{
+\LWR@forcenewpage
+\BlockClass{abstract}
+}
+\AfterEndEnvironment{abstract}{\endBlockClass}
+}
+
+\renewcommand{\@bsrunintitle}{%
+\hspace*{\abstitleskip}%
+{\abstractnamefont%
+\InlineClass{abstractrunintitle}{\abstractname}%
+\@bslabeldelim}%
+}
+
+\@ifclassloaded{memoir}
+{
+ \renewenvironment{abstract}{%
+% \titlepage
+ \null\vfil
+ \@beginparpenalty\@lowpenalty
+ \if@bsrunin
+ \else
+ \if@bsstyle
+ \abstitlestyle{\BlockClassSingle{abstracttitle}{\abstractname}}
+ \else
+ \ifnumber@bs
+ \num@bs
+ \else
+ \begin{\absnamepos}%
+ \abstractnamefont \BlockClassSingle{abstracttitle}{\abstractname}
+ \@endparpenalty\@M
+ \end\absnamepos%
+%% \vspace{\abstitleskip}%
+ \fi
+ \fi
+ \vspace{\abstitleskip}%
+ \fi
+ \put@bsintoc%
+ \begin{@bstr@ctlist}\if@bsrunin\@bsrunintitle\fi\abstracttextfont}%
+ {\par\end{@bstr@ctlist}\vfil\null%\endtitlepage
+ }
+}{% not memoir
+\if@titlepage
+ \renewenvironment{abstract}{%
+% \titlepage
+ \null\vfil
+ \@beginparpenalty\@lowpenalty
+ \if@bsrunin
+ \else
+ \if@bsstyle
+ \abstitlestyle{\BlockClassSingle{abstracttitle}{\abstractname}}
+ \else
+ \ifnumber@bs
+ \num@bs
+ \else
+ \begin{\absnamepos}%
+ \abstractnamefont \BlockClassSingle{abstracttitle}{\abstractname}
+ \@endparpenalty\@M
+ \end\absnamepos%
+%% \vspace{\abstitleskip}%
+ \fi
+ \fi
+ \vspace{\abstitleskip}%
+ \fi
+ \put@bsintoc%
+ \begin{@bstr@ctlist}\if@bsrunin\@bsrunintitle\fi\abstracttextfont}%
+ {\par\end{@bstr@ctlist}\vfil\null%\endtitlepage
+ }
+\else
+ \renewenvironment{abstract}{%
+ \if@bsrunin
+ \else
+ \if@bsstyle
+ \abstitlestyle{\BlockClassSingle{abstracttitle}{\abstractname}}
+ \else
+ \ifnumber@bs
+ \num@bs
+ \else
+\begin{\absnamepos}%
+\abstractnamefont\BlockClassSingle{abstracttitle}{\abstractname}%
+\end\absnamepos%
+%% \vspace{\abstitleskip}%
+ \fi
+ \fi
+ \vspace{\abstitleskip}%
+ \fi
+ \put@bsintoc%
+ \begin{@bstr@ctlist}\if@bsrunin\@bsrunintitle\fi\abstracttextfont}%
+ {\par\end{@bstr@ctlist}}
+\fi
+}% not memoir
+% \end{macrocode}
+
+% \iffalse
+%</abstract>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*academicons>
+% \fi
+%
+% \part{lwarp-academicons.sty}
+%
+% \section{academicons}
+%
+% \credits{Diogo A. B. Fernandes}
+%
+% \DescribePackage{academicons}
+% \pkg{academicons} is patched for use by \pkg{lwarp}.
+%
+% If \cs{aiicon} is used, the name of the icon is used in the \attribute{alt} tag.
+% Otherwise, for each of the individual icon macros, a generic \attribute{alt} tag is used.
+%
+% \changes{v0.67}{2019/02/23}{\pkg{academicons}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{academicons}[2018/06/27]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LetLtxMacro\LWR@orig@symbol\symbol
+
+\let\LWR@academicons@orig@AI\AI
+
+\newcommand*{\LWR@academicons@symbol}[1]{%
+ \begin{lateximage}*[(academicon)][academicons#1]%
+ \begingroup%
+ \LWR@academicons@orig@AI%
+ \LWR@orig@symbol{#1}%
+ \endgroup%
+ \end{lateximage}%
+}
+
+\renewcommand*{\AI}{%
+ \LetLtxMacro\symbol\LWR@academicons@symbol%
+}
+
+\renewcommand*{\aiicon}[1]
+{%
+ \begin{lateximage}*[(#1 icon)][academicons#1]%
+ \AI\csname aiicon@#1\endcsname%
+ \end{lateximage}%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</academicons>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*accsupp>
+% \fi
+%
+% \part{lwarp-accsupp.sty}
+%
+% \section{accsupp}
+%
+% \DescribePackage{accsupp}
+% \pkg{accsupp} is ignored.
+%
+% \changes{v0.59}{2018/07/25}{\pkg{accsupp}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{accsupp}[2018/03/28]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\BeginAccSupp}[1]{}
+\newcommand*{\EndAccSupp}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</accsupp>
+% \fi
+%
+%
+%
+% \iffalse
+%<*acro>
+% \fi
+%
+% \part{lwarp-acro.sty}
+
+% \section{acro}
+%
+% \credits{Clemens Niederberger}
+%
+% \DescribePackage{acro}
+% \pkg{acro} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.48}{2018/02/02}{\pkg{acro}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{acro}[2017/01/30]
+% \end{macrocode}
+
+
+% \cs{DeclareAcronym} is used in the preamble,
+% where \pkg{lwarp} has not yet made the dollar active,
+% so temporarily enable \pkg{lwarp} math catcode just for this
+% definition:
+% \begin{macrocode}
+\ExplSyntaxOn
+\NewDocumentCommand \LWR@DeclareAcronym {mm}
+{
+ \acro_declare_acronym:nn {#1} {#2}
+ \catcode`\$=3% lwarp
+}
+\ExplSyntaxOff
+
+\RenewDocumentCommand{\DeclareAcronym}{}{
+ \catcode`\$=\active% lwarp
+ \LWR@DeclareAcronym
+}
+% \end{macrocode}
+
+% Modified to activate the current font:
+% \begin{macrocode}
+\ExplSyntaxOn
+\cs_gset_protected:Npn \acro_write_short:nn #1#2
+ {
+ \mode_if_horizontal:F { \leavevmode }
+ \group_begin:
+ \bool_if:NTF \l__acro_custom_format_bool
+ { \l__acro_custom_format_tl }
+ { \l__acro_short_format_tl }
+ {\LWR@textcurrentfont{#2}}% lwarp
+ \group_end:
+ }
+
+\cs_gset_protected:Npn \acro_write_alt:nn #1#2
+ {
+ \mode_if_horizontal:F { \leavevmode }
+ \group_begin:
+ \bool_if:NTF \l__acro_custom_format_bool
+ { \l__acro_custom_format_tl }
+ { \l__acro_alt_format_tl }
+ {\LWR@textcurrentfont{#2}}% lwarp
+ \group_end:
+ }
+
+\cs_gset_protected:Npn \acro_write_long:nn #1#2
+ {
+ \mode_if_horizontal:F { \leavevmode }
+ \group_begin:
+ \bool_if:NTF \l__acro_custom_long_format_bool
+ { \l__acro_custom_long_format_tl }
+ { \use:n }
+ {
+ \use:x
+ {
+ \exp_not:n {#1}
+ {
+ \bool_if:NTF \l__acro_first_upper_bool
+ { \exp_not:N \__acro_first_upper_case:n { \exp_not:n {
+ \LWR@textcurrentfont{#2}% lwarp
+ } } }
+ { \exp_not:n {\LWR@textcurrentfont{#2}} }% lwarp
+ }
+ }
+ }
+ \group_end:
+ }
+\ExplSyntaxOff
+% \end{macrocode}
+
+% \iffalse
+%</acro>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*acronym>
+% \fi
+%
+% \part{lwarp-acronym.sty}
+
+% \section{acronym}
+%
+% \credits{Tobias Oetiker}
+%
+% \DescribePackage{acronym}
+% \pkg{acronym} is patched for use by \pkg{lwarp}.
+%
+% \cs{acresetall} does not work with \pkg{cleveref},
+% \trouble[multiply-defined labels]{multiply-defined labels>acronym=\pkg{acronym}}
+% \trouble{acronym=\pkg{acronym}>multiply-defined labels}
+% causing multiply-defined labels.
+% \pkg{lwarp} patches \pkg{acronym} for \HTML, but not for print mode.
+%
+% \changes{v0.48}{2018/02/02}{\pkg{acronym}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{acronym}[2015/03/21]
+% \end{macrocode}
+
+% Uses \cs{textit} instead of \cs{itshape}:
+% \begin{macrocode}
+\renewcommand{\acfia}[1]{%
+ {\textit{\AC@acl{#1}}} (\ifAC@starred\acs*{#1}\else\acs{#1}\fi)}
+% \end{macrocode}
+
+
+% Removes the mbox to allow math inside:
+% \begin{macrocode}
+\renewcommand*\AC@acs[1]{%
+% \mbox{
+ \expandafter\AC@get\csname fn@#1\endcsname\@firstoftwo{#1}}
+% }
+% \end{macrocode}
+
+% Fix for acronym labels in the captions of floats.
+% \changes{v0.66}{2019/01/28}{\pkg{acronym}: Fix for acronym in caption.}
+% \begin{macrocode}
+\renewcommand{\@starttoc}[1]{
+\LWR@htmlelementclass{nav}{#1}
+\LetLtxMacro\@verridelabel\@gobble
+\LWR@orig@starttoc{#1}
+\LWR@htmlelementclassend{nav}{#1}
+}
+% \end{macrocode}
+
+
+% Modified for \pkg{cleveref} and \pkg{lwarp}:
+% \changes{v0.66}{2019/01/27}{\pkg{acronym}: No longer uses \pkg{zref}.}
+% \begin{macrocode}
+\renewcommand*\AC@und@newl@bel[3]{%
+ \@ifundefined{#1@#3}%
+ {%
+ \global\expandafter\let\csname#2@#3\endcsname\@nnil
+ \global\expandafter\let\csname#2@#3@lwarp\endcsname\@nnil% lwarp
+ \global\expandafter\let\csname#2@#3@cref\endcsname\@nnil% lwarp
+ }%
+ {%
+ \global\expandafter\let\csname#1@#3\endcsname\relax
+ \global\expandafter\let\csname#1@#3@lwarp\endcsname\relax% lwarp
+ \global\expandafter\let\csname#1@#3@cref\endcsname\relax% lwarp
+ }%
+}%
+% \end{macrocode}
+
+% \iffalse
+%</acronym>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*adjmulticol>
+% \fi
+%
+% \part{lwarp-adjmulticol.sty}
+%
+% \section{adjmulticol}
+%
+% \credits{Boris Veytsman}
+%
+% \DescribePackage{adjmulticol}
+% \pkg{adjmulticol} is emulated.
+%
+% Emulation similar to \pkg{multicols} is used, with adjusted margins.
+% If the number of columns is specified as 1, it is set so, but if
+% two or greater are used, \pkg{lwarp} allows a variable number of columns
+% up to three.
+%
+% \changes{v0.40}{2017/09/06}{\pkg{adjmulticol}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{adjmulticol}[2012/01/20]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\RequirePackage{multicol}
+% \end{macrocode}
+
+
+% * \marg{numcols} \marg{left margi} \marg{right margin}
+% \marginpar{\hfill\env{adjmulticols}}
+% \begin{macrocode}
+\NewDocumentEnvironment{adjmulticols}{s m m m}
+{%
+% \end{macrocode}
+% Compute the margins, and limit to positive only:
+% \begin{macrocode}
+\setlength{\LWR@templengthone}{#3}%
+\ifdimcomp{\LWR@templengthone}{<}{0pt}{\setlength{\LWR@templengthone}{0pt}}{}%
+\setlength{\LWR@templengthtwo}{#4}
+\ifdimcomp{\LWR@templengthtwo}{<}{0pt}{\setlength{\LWR@templengthtwo}{0pt}}{}%
+% \end{macrocode}
+% If one column is specified, use a \element{div} of class \attribute{singlecolumn},
+% else use \attribute{multicols}:
+% \begin{macrocode}
+\newcommand*{\LWR@mcolstype}{multicols}%
+\ifnumcomp{#2}{=}{1}{\renewcommand*{\LWR@mcolstype}{singlecolumn}}{}%
+% \end{macrocode}
+% Help avoid page overflow:
+% \begin{macrocode}
+\LWR@forcenewpage%
+% \end{macrocode}
+% Create the \element{div} with the given margin and class:
+% \changes{v0.47}{2018/01/26}{\pkg{adjmulticol}: Fix: Line wrap at \HTML\ hyphen.}
+% \begin{macrocode}
+\BlockClass[%
+\LWR@print@mbox{margin-left:\LWR@printlength{\LWR@templengthone}} ; %
+\LWR@print@mbox{margin-right:\LWR@printlength{\LWR@templengthtwo}}%
+]{\LWR@mcolstype}%
+}
+{\endBlockClass}
+% \end{macrocode}
+%
+% \iffalse
+%</adjmulticol>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*addlines>
+% \fi
+%
+% \part{lwarp-addlines.sty}
+%
+% \section{addlines}
+%
+% \credits{Will Robertson}
+%
+% \DescribePackage{addlines}
+% \pkg{addlines} is ignored.
+%
+% \changes{v0.39}{2017/08/27}{\pkg{addlines}: Added.}
+% \changes{v0.64}{2018/12/06}{\pkg{addlines}: Updated to v0.3.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{addlines}[2018/12/05]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand\addlines{\@ifstar\addlines@a\addlines@a}
+\newcommand\addlines@a[1][1]{}
+\let\addline\addlines
+\newcommand\removelines{\@ifstar\removelines@a\removelines@a}
+\newcommand\removelines@a[1][1]{}
+\let\removeline\removelines
+\newcommand\squeezepage[1][0]{}
+% \end{macrocode}
+%
+% \iffalse
+%</addlines>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*afterpage>
+% \fi
+%
+% \part{lwarp-afterpage.sty}
+%
+% \section{afterpage}
+%
+% \credits{David Carlisle}
+%
+% \DescribePackage{afterpage} \pkg{afterpage} is emulated.
+%
+% \changes{v0.20}{2017/01/11}{\pkg{afterpage}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-afterpage}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{afterpage}[2014/10/28]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\afterpage}[1]{#1}
+% \end{macrocode}
+%
+% \iffalse
+%</afterpage>
+% \fi
+%
+%
+%
+% \iffalse
+%<*algorithm2e>
+% \fi
+%
+% \part{lwarp-algorithm2e.sty}
+
+% \section{algorithm2e}
+%
+% \credits{Christophe Fiorio}
+%
+% \DescribePackage{algorithm2e}
+% \pkg{algorithm2e} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.57}{2018/05/20}{\pkg{algorithm2e}: Added.}
+%
+% For print output, captions are placed according to package options,
+% but for \HTML\ output captions are placed where used.
+% Therefore, to have captions appear at the top of the algorithms for both
+% print and \HTML, place each captions at the top of each algorithm.
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{algorithm2e}[2017/07/18]
+% \end{macrocode}
+
+% For the list-of entries:
+% \begin{macrocode}
+\renewcommand{\l@algocf}[2]{\hypertocfloat{1}{algocf}{loa}{#1}{#2}}
+% \end{macrocode}
+%
+%
+% Select the \pkg{lwarp} float style according to the \pkg{algorithm2e} style:
+% \begin{macrocode}
+\newcommand*{\LWR@floatstyle@algocf}{ruled}
+
+\ifdefstring{\algocf@style}{boxed}{%
+\renewcommand*{\LWR@floatstyle@algocf}{boxed}
+}{}
+
+\ifdefstring{\algocf@style}{boxruled}{%
+\renewcommand*{\LWR@floatstyle@algocf}{boxruled}
+}{}
+
+\ifdefstring{\algocf@style}{plain}{%
+\renewcommand*{\LWR@floatstyle@algocf}{plain}
+}{}
+% \end{macrocode}
+%
+%
+% Paragraph handling to allow line numbers under certain conditions:
+% \begin{macrocode}
+\newbool{LWR@algocf@dopars}
+\booltrue{LWR@algocf@dopars}
+
+\renewcommand{\algocf@everypar}{%
+\ifbool{LWR@algocf@dopars}{%
+ \ifbool{LWR@doingstartpars}{%
+ \ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
+ {}%
+ {%
+ \algocf@everyparnl\algocf@everyparhanging%
+ }%
+ }{}%
+}{}%
+}
+% \end{macrocode}
+%
+%
+% \pkg{lwarp} caption handling:
+% \begin{macrocode}
+\renewcommand{\algocf@makecaption}[2]{%
+\LWR@HTML@caption@begin{algocf}%
+\LWR@isolate{\algocf@captiontext{#1}{#2}}%
+\LWR@HTML@caption@end%
+}
+% \end{macrocode}
+%
+%
+% Print any caption where it is declared:
+% \begin{macrocode}
+\renewcommand{\algocf@makecaption@plain}[2]{%
+ \LWR@HTML@caption@begin{algocf}%
+ \LWR@isolate{\algocf@captiontext{#1}{#2}}%
+ \LWR@HTML@caption@end%
+}
+
+\renewcommand{\algocf@makecaption@boxed}[2]{%
+ \LWR@HTML@caption@begin{algocf}%
+ \LWR@isolate{\algocf@captiontext{#1}{#2}}%
+ \LWR@HTML@caption@end%
+}
+
+\renewcommand{\algocf@makecaption@ruled}[2]{%
+ \LWR@HTML@caption@begin{algocf}%
+ \LWR@isolate{\algocf@captiontext{#1}{#2}}%
+ \LWR@HTML@caption@end%
+}
+% \end{macrocode}
+%
+%
+% Turn off line numbering while making the caption:
+% \begin{macrocode}
+\long\def\algocf@latexcaption#1[#2]#3{% original definition of caption
+\boolfalse{LWR@algocf@dopars}% lwarp
+ \par%
+ \addcontentsline{\csname ext@#1\endcsname}{#1}%
+ {\protect\numberline{\csname the#1\endcsname}{\ignorespaces \LWR@isolate{#2}}}%
+ \begingroup%
+ \@parboxrestore%
+ \if@minipage%
+ \@setminipage%
+ \fi%
+ \normalsize%
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par%
+ \endgroup%
+\booltrue{LWR@algocf@dopars}% lwarp
+}
+% \end{macrocode}
+%
+%
+% Line numbers are printed in a \element{span} of class \attribute{alg2elinenumber}:
+% \begin{macrocode}
+\renewcommand{\algocf@printnl}[1]{%
+ \InlineClass{alg2elinenumber}{\NlSty{#1}}~%
+}%
+% \end{macrocode}
+%
+%
+% While initializing an algorithm environment,
+% locally declare the style of a regular figure to be the same as the algorithm style,
+% in case the \optn{figure} option was used.
+% \begin{macrocode}
+\preto\@algocf@init{%
+ \edef\LWR@floatstyle@figure{\LWR@floatstyle@algocf}%
+}
+% \end{macrocode}
+%
+%
+% For \pkg{lwarp}, the algorithm is not assembled inside a box,
+% since \env{lateximage}s would not work, so the captions are
+% printed where declared.
+% \begin{macrocode}
+\renewcommand{\@algocf@start}{%
+ \let\@mathsemicolon=\;\def\;{\ifmmode\@mathsemicolon\else\@endalgoln\fi}%
+% \raggedright%
+ \AlFnt{}%
+ \booltrue{LWR@algocf@dopars}% lwarp
+}
+
+\renewcommand{\@algocf@finish}{%
+ \boolfalse{LWR@algocf@dopars}% lwarp
+ \lineskip\normallineskip\setlength{\skiptotal}{\@defaultskiptotal}%
+ \let\;=\@mathsemicolon%
+ \let\]=\@emathdisplay%
+}
+% \end{macrocode}
+%
+%
+% Use an \HTML\ break:
+% \begin{macrocode}
+\renewcommand{\BlankLine}{%
+\LWR@stoppars%
+\LWR@htmltagc{br /}%
+\LWR@startpars%
+}
+% \end{macrocode}
+%
+%
+% Simplified for \HTML.
+% The paragraph handling must be preserved.
+% \begin{macrocode}
+\renewcommand{\SetKwInOut}[2]{%
+ \algocf@newcommand{#1}[1]{%
+ \ifthenelse{\boolean{algocf@hanginginout}}%
+ {\relax}%
+ {\algocf@seteveryparhanging{\relax}}%
+ \ifthenelse{\boolean{algocf@inoutnumbered}}%
+ {\relax}%
+ {\algocf@seteveryparnl{\relax}}%
+ {%
+ \KwSty{#2\algocf@typo:}%
+ ~##1\par%
+ }%
+ \algocf@linesnumbered% reset the numbering of the lines
+ \ifthenelse{\boolean{algocf@hanginginout}}%
+ {\relax}%
+ {\algocf@reseteveryparhanging}%
+ }%
+}%
+
+\renewcommand{\ResetInOut}[1]{}%
+% \end{macrocode}
+%
+%
+% Each of the following creates a \element{div} of a given class,
+% and turns off line numbering while creating the \element{div} tags:
+% \begin{macrocode}
+\renewcommand{\algocf@Vline}[1]{%
+\boolfalse{LWR@algocf@dopars}%
+\begin{BlockClass}{alg2evline}
+\booltrue{LWR@algocf@dopars}%
+#1
+\boolfalse{LWR@algocf@dopars}%
+\end{BlockClass}
+\booltrue{LWR@algocf@dopars}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand{\algocf@Vsline}[1]{%
+\boolfalse{LWR@algocf@dopars}%
+\begin{BlockClass}{alg2evsline}
+\booltrue{LWR@algocf@dopars}%
+#1
+\boolfalse{LWR@algocf@dopars}%
+\end{BlockClass}
+\booltrue{LWR@algocf@dopars}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand{\algocf@Noline}[1]{%
+\boolfalse{LWR@algocf@dopars}%
+\begin{BlockClass}{alg2enoline}
+\booltrue{LWR@algocf@dopars}%
+#1
+\boolfalse{LWR@algocf@dopars}%
+\end{BlockClass}
+\booltrue{LWR@algocf@dopars}%
+}
+% \end{macrocode}
+%
+%
+% The |[H]| environment is converted to a regular float, which in \HTML\
+% is placed where declared. Reusing the regular float allows the |[H]|
+% version to reuse the ruled and boxed options.
+% \begin{macrocode}
+\LetLtxMacro\algocf@Here\algocf
+\LetLtxMacro\endalgocf@Here\endalgocf
+% \end{macrocode}
+
+% \iffalse
+%</algorithm2e>
+% \fi
+%
+%
+%
+% \iffalse
+%<*algorithmicx>
+% \fi
+%
+% \part{lwarp-algorithmicx.sty}
+%
+% \section{algorithmicx}
+% \label{sec:algorithmicx}
+%
+% \credits{Sz\'{a}sz J\'{a}nos}
+%
+% \DescribePackage{algorithmicx}
+% \pkg{algorithmicx} is supported with minor adjustments.
+%
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{algorithmicx}[2005/04/27]
+% \end{macrocode}
+%
+%
+% Inside the \env{algorithmic} environment, level indenting is converted to a \element{span}
+% of the required length, and comments are placed inside a \element{span} which is floated right.
+%
+% \limitscombiningfloats
+%
+% \changes{v0.42}{2017/10/27}{\pkg{algorithmicx}: If \progcode{FormatWP} add \cs{quad}s.}
+% \changes{v0.44}{2017/11/16}{\pkg{algorithmicx}: Improved comment symbol.}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{macrocode}
+\AtBeginEnvironment{algorithmic}{%
+%
+\let\origALG@doentity\ALG@doentity%
+%
+\renewcommand*{\ALG@doentity}{%
+\origALG@doentity%
+\LWR@htmltagc{%
+span style="width:\LWR@printlength{\ALG@thistlm}; display:inline-block;"%
+}%
+\ifbool{FormatWP}{%
+\setlength{\LWR@templengthone}{\the\ALG@thistlm}%
+\whiledo{\lengthtest{\LWR@templengthone>1em}}{%
+\quad%
+\addtolength{\LWR@templengthone}{-1em}%
+}%
+}{}%
+\LWR@htmltagc{/span}%
+}%
+
+\let\LWR@origComment\Comment%
+
+\renewcommand{\Comment}[1]{%
+ \InlineClass{floatright}{\LWR@origComment{#1}}%
+}%
+}
+
+\renewcommand\algorithmiccomment[1]{%
+\hfill\HTMLunicode{25B7} #1% white right triangle
+}%
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+% \iffalse
+%</algorithmicx>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*alltt>
+% \fi
+%
+% \part{lwarp-alltt.sty}
+%
+% \section{alltt}
+%
+% \credits{Johannes Braams}
+%
+% \DescribePackage{alltt}
+% \pkg{alltt} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.20}{2017/01/11}{\pkg{alltt}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{alltt}[1997/06/16]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\AfterEndPreamble{
+\LWR@traceinfo{Patching alltt.}
+\AtBeginEnvironment{alltt}{%
+\LWR@forcenewpage
+\LWR@atbeginverbatim{3}{alltt}%
+}
+\AfterEndEnvironment{alltt}{%
+ \LWR@afterendverbatim{2}%
+}
+}
+% \end{macrocode}
+%
+% \iffalse
+%</alltt>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*amsmath>
+% \fi
+%
+% \part{lwarp-amsmath.sty}
+%
+% \section{amsmath}
+%
+% \credits{American Mathematical Society, \LaTeX3 Project}
+%
+% \DescribePackage{amsmath}
+% \pkg{amsmath} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.33}{2016/06/21}{\pkg{amsmath}: Removed \optn{fleqn} option.}
+% \changes{v0.59}{2018/07/13}{\pkg{amsmath}: Moved from the \pkg{lwarp} core.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{amsmath}[2017/09/02]
+% \end{macrocode}
+%
+% Patches to allow \cs{eqref} inside a caption:
+%
+% \changes{v0.49}{2018/02/18}{\pkg{amsmath}: Fix: Patches for \cs{eqref}.}
+% \changes{v0.50}{2018/03/02}{\pkg{amsmath}: Fix: Upright tags for \SVG math.}
+% \begin{macrocode}
+\def\maketag@@@#1{\text{#1}}
+\def\tagform@#1{\maketag@@@{(\ignorespaces#1\unskip)}}
+% \end{macrocode}
+
+% Patches for \AmS\ math \cs{tag} macro to remember the first tag:
+% \begin{macrocode}
+\ifbool{mathjax}{}{% not mathjax
+
+\LetLtxMacro\LWR@origmake@df@tag@@\make@df@tag@@
+\LetLtxMacro\LWR@origmake@df@tag@@@\make@df@tag@@@
+
+\renewcommand*{\make@df@tag@@}[1]{%
+\LWR@remembertag{#1}%
+\LWR@origmake@df@tag@@{#1}%
+}
+
+\renewcommand*{\make@df@tag@@@}[1]{%
+\LWR@remembertag{#1}%
+\LWR@origmake@df@tag@@@{#1}%
+}
+
+}% not mathjax
+% \end{macrocode}
+%
+% The following \AmS\ environments are patched in-place:
+%
+% \changes{v0.44}{2017/11/16}{AMS environments: Fix: Groups for \env{lateximage}s.}
+% \changes{v0.50}{2018/03/01}{AMS environments: Improved \SVG\ math display.}
+% \changes{v0.51}{2018/03/11}{AMS environments: Fix: \cs{addcontentsline} inside \SVG\ math. Provides an autoid anchor.}
+% \changes{v0.67}{2019/02/17}{AMS environments: Added \pkg{xfakebold} support.}
+% \changes{v0.70}{2019/03/29}{AMS environments: Refactored.}
+% \changes{v0.73}{2019/06/25}{AMS environments: Fix: \attribute{alt} tags.}
+% \changes{v0.73}{2019/06/25}{AMS environments: Fix: Paragraph tags.}
+%
+% \begin{noindmacro}{\LWR@amsmathenv@@before} \marg{environment name}
+%
+% Embeds the environment inside a \env{lateximage}.
+% \begin{macrocode}
+\newcommand*{\LWR@amsmathenv@@before}[1]{%
+ \begin{BlockClass}{displaymathnumbered}
+ \LWR@newautoidanchor%
+ \booltrue{LWR@indisplaymathimage}%
+ \begin{lateximage}[\LWR@amsmathbodynumbered{#1}]
+ \LWR@applyxfakebold%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindmacro}{\LWR@amsmathenv@before} \marg{environment name}
+%
+% Embeds the environment with \brand{MathJax} or a \env{lateximage}.
+% \begin{macrocode}
+\newcommand*{\LWR@amsmathenv@before}[1]{%
+ \LWR@stoppars%
+ \ifboolexpr{bool{mathjax} or ( bool{FormatWP} and bool{WPMarkMath} ) }%
+ {
+ \LWR@syncmathjax
+ \boolfalse{LWR@amsmultline}
+ \ifstrequal{#1}{multline}{\booltrue{LWR@amsmultline}}{}
+ \ifstrequal{#1}{multline*}{\booltrue{LWR@amsmultline}}{}
+% \end{macrocode}
+% \pkg{autonum}'s ``+'' environments are not supported by \brand{MathJax}.
+% \watchout
+% \begin{macrocode}
+ \LWR@beginhideamsmath
+ }
+ {
+ \LWR@amsmathenv@@before{#1}
+ }
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindmacro}{\LWR@amsmathenv@@after}
+%
+% Embeds the environment inside a \env{lateximage}.
+% \changes{v0.73}{2019/06/25}{AMS environments: Fix: Paragraph tags.}
+% \begin{macrocode}
+\newcommand*{\LWR@amsmathenv@@after}{%
+ \end{lateximage}\end{BlockClass}\LWR@startpars%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindmacro}{\LWR@amsmathenv@after} \marg{environment name}
+%
+% Embeds the environment with \brand{MathJax} or a \env{lateximage}.
+% \begin{macrocode}
+\newcommand*{\LWR@amsmathenv@after}[1]{%
+ \ifboolexpr{bool{mathjax} or ( bool{FormatWP} and bool{WPMarkMath} ) }%
+ {
+ \LWR@endhideamsmath
+ \boolfalse{LWR@amsmultline}
+ \LWR@addmathjax{#1}{\the\@envbody}
+ }
+ {\LWR@amsmathenv@@after}
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{environment}{multline}
+% \begin{macrocode}
+\BeforeBeginEnvironment{multline}{\LWR@amsmathenv@before{multline}}
+
+\AfterEndEnvironment{multline}{\LWR@amsmathenv@after{multline}}
+% \end{macrocode}
+% \end{environment}
+
+
+% \begin{environment}{multline*}
+% \begin{macrocode}
+\BeforeBeginEnvironment{multline*}{\LWR@amsmathenv@before{multline*}}
+
+\AfterEndEnvironment{multline*}{\LWR@amsmathenv@after{multline*}}
+
+% \end{macrocode}
+% \end{environment}
+
+
+% \begin{environment}{gather}
+% \begin{macrocode}
+\BeforeBeginEnvironment{gather}{\LWR@amsmathenv@before{gather}}
+
+\AfterEndEnvironment{gather}{\LWR@amsmathenv@after{gather}}
+% \end{macrocode}
+% \end{environment}
+
+% \begin{environment}{gather*}
+% \begin{macrocode}
+\BeforeBeginEnvironment{gather*}{\LWR@amsmathenv@before{gather*}}
+
+\AfterEndEnvironment{gather*}{\LWR@amsmathenv@after{gather*}}
+% \end{macrocode}
+% \end{environment}
+
+
+% \begin{environment}{align}
+% \begin{macrocode}
+\BeforeBeginEnvironment{align}{\LWR@amsmathenv@before{align}}
+
+\AfterEndEnvironment{align}{\LWR@amsmathenv@after{align}}
+% \end{macrocode}
+% \end{environment}
+
+
+% \begin{environment}{align*}
+% \begin{macrocode}
+\BeforeBeginEnvironment{align*}{\LWR@amsmathenv@before{align*}}
+
+\AfterEndEnvironment{align*}{\LWR@amsmathenv@after{align*}}
+% \end{macrocode}
+% \end{environment}
+
+
+% \begin{environment}{flalign}
+% \begin{macrocode}
+\BeforeBeginEnvironment{flalign}{\LWR@amsmathenv@before{flalign}}
+
+\AfterEndEnvironment{flalign}{\LWR@amsmathenv@after{flalign}}
+% \end{macrocode}
+% \end{environment}
+
+
+% \begin{environment}{flalign*}
+% \begin{macrocode}
+\BeforeBeginEnvironment{flalign*}{\LWR@amsmathenv@before{flalign*}}
+
+\AfterEndEnvironment{flalign*}{\LWR@amsmathenv@after{flalign*}}
+% \end{macrocode}
+% \end{environment}
+
+
+% \begin{environment}{alignat}
+% \changes{v0.51}{2018/03/11}{Fix: Added.}
+% \begin{macrocode}
+\BeforeBeginEnvironment{alignat}{\LWR@amsmathenv@before{alignat}}
+
+\AfterEndEnvironment{alignat}{\LWR@amsmathenv@after{alignat}}
+% \end{macrocode}
+% \end{environment}
+
+
+% \begin{environment}{alignat*}
+% \begin{macrocode}
+\BeforeBeginEnvironment{alignat*}{\LWR@amsmathenv@before{alignat*}}
+
+\AfterEndEnvironment{alignat*}{\LWR@amsmathenv@after{alignat*}}
+% \end{macrocode}
+% \end{environment}
+%
+% \iffalse
+%</amsmath>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*amsthm>
+% \fi
+
+% \part{lwarp-amsthm.sty}
+
+% \section{amsthm}
+%
+% \credits{Publications Technical Group \Dash American Mathematical Society}
+%
+% The original source code is located in |amsclass.dtx|, and printed in
+% |amsclass.pdf|.
+%
+% \DescribePackage{amsthm}
+% \pkg{amsthm} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.25}{2017/03/15}{\pkg{amsthm}: Added.}
+%
+% \begin{table}[ht]
+% \hrule\smallskip
+% \caption{\pkg{amsthm} package \Dash \CSS\ styling of theorems and proofs}
+% \begin{description}
+% \item [Theorem:] \element{div} of class |amsthmbody<theoremstyle>|
+% \item [Theorem Name:] \element{span} of class |amsthmname<theoremtyle>|
+% \item [Theorem Number:] \element{span} of class |amsthmnumber<theoremstyle>|
+% \item [Theorem Note:] \element{span} of class |amsthmnote<theoremstyle>|
+% \item [Proof:] \element{div} of class |amsthmproof|
+% \item [Proof Name:] \element{span} of class |amsthmproofname|
+% \end{description}
+% where |<theoremstyle>| is |plain|, |definition|, etc.
+% \smallskip
+% \hrule
+% \end{table}
+%
+%
+% \codehtml
+%
+% \pkg{amsthm} must be loaded before \pkg{mdframed}:
+% \changes{v0.63}{2018/12/01}{\pkg{amsthm}, \pkg{mdframed}: Fix for enforced load order.}
+% \begin{macrocode}
+\@ifpackageloaded{mdframed}{
+ \PackageError{lwarp}
+ {Package mdframed must be loaded after package amsthm}
+ {%
+ Move \detokenize{\usepackage}{amsthm} before
+ \detokenize{\usepackage}{mdframed}.\MessageBreak
+ Package amsthm may be loaded by something else,\MessageBreak
+ which must also be moved before mdframed.%
+ }
+}
+{}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{amsthm}[2017/10/31]
+% \end{macrocode}
+
+% Storage for the style being used for new theorems:
+% \begin{macrocode}
+\newcommand{\LWR@newtheoremstyle}{plain}
+% \end{macrocode}
+
+% Patched to remember the style being used for new theorems:
+% \begin{macrocode}
+\renewcommand{\theoremstyle}[1]{%
+ \@ifundefined{th@#1}{%
+ \PackageWarning{amsthm}{Unknown theoremstyle `#1'}%
+ \thm@style{plain}%
+ \renewcommand{\LWR@newtheoremstyle}{plain}% lwarp
+ }{%
+ \thm@style{#1}%
+ \renewcommand{\LWR@newtheoremstyle}{#1}% lwarp
+ }%
+}
+% \end{macrocode}
+
+% Patched to remember the style for this theorem type:
+% \begin{macrocode}
+\def\@xnthm#1#2{%
+ \csedef{LWR@thmstyle#2}{\LWR@newtheoremstyle}% lwarp
+ \let\@tempa\relax
+ \@xp\@ifdefinable\csname #2\endcsname{%
+ \global\@xp\let\csname end#2\endcsname\@endtheorem
+ \ifx *#1% unnumbered, need to get one more mandatory arg
+ \edef\@tempa##1{%
+ \gdef\@xp\@nx\csname#2\endcsname{%
+ \@nx\@thm{\@xp\@nx\csname th@\the\thm@style\endcsname}%
+ {}{##1}}}%
+ \else % numbered theorem, need to check for optional arg
+ \def\@tempa{\@oparg{\@ynthm{#2}}[]}%
+ \fi
+ \AtBeginEnvironment{#2}{\edef\LWR@thisthmstyle{\@nameuse{LWR@thmstyle#2}}}% lwarp
+ }%
+ \@tempa
+}
+% \end{macrocode}
+
+% Patched to enclose with \CSS:
+% \begin{macrocode}
+\newcommand{\LWR@haveamsthmname}{
+\renewcommand{\thmname}[1]{\InlineClass{amsthmname\LWR@thisthmstyle}{##1}}
+}
+
+\newcommand{\LWR@haveamsthmnumber}{
+\renewcommand{\thmnumber}[1]{\InlineClass{amsthmnumber\LWR@thisthmstyle}{##1}}
+}
+
+\newcommand{\LWR@haveamsthmnote}{
+\renewcommand{\thmnote}[1]{\InlineClass{amsthmnote\LWR@thisthmstyle}{##1}}
+}
+
+\LWR@haveamsthmname
+\LWR@haveamsthmnumber
+\LWR@haveamsthmnote
+% \end{macrocode}
+%
+% Patches for \CSS:
+% \begin{macrocode}
+\def\@begintheorem#1#2[#3]{%
+ \item[
+% \deferred@thm@head{
+% \the\thm@headfont \thm@indent
+ \@ifempty{#1}{\let\thmname\@gobble}{\LWR@haveamsthmname}% lwarp
+ \@ifempty{#2}{\let\thmnumber\@gobble}{\LWR@haveamsthmnumber}% lwarp
+ \@ifempty{#3}{\let\thmnote\@gobble}{\LWR@haveamsthmnote}% lwarp
+ \thm@swap\swappedhead\thmhead{#1}{#2}{#3}%
+ \the\thm@headpunct~
+ \thmheadnl % possibly a newline.
+ \hskip\thm@headsep
+% }%
+ ]
+ \ignorespaces}
+% \end{macrocode}
+%
+% Patched for \CSS:
+% \changes{v0.46}{2018/01/22}{\pkg{amsthm}: Adapted to \env{trivlist} changes.}
+% \begin{macrocode}
+\def\@thm#1#2#3{%
+ \ifhmode\unskip\unskip\par\fi
+ \normalfont
+ \LWR@forcenewpage% lwarp
+ \BlockClass{amsthmbody\LWR@thisthmstyle}% lwarp
+ \trivlist
+ \let\thmheadnl\relax
+ \let\thm@swap\@gobble
+ \thm@notefont{\fontseries\mddefault\upshape}%
+ \thm@headpunct{.}% add period after heading
+ \thm@headsep 5\p@ plus\p@ minus\p@\relax
+ \thm@space@setup
+ #1% style overrides
+ \@topsep \thm@preskip % used by thm head
+ \@topsepadd \thm@postskip % used by \@endparenv
+ \def\@tempa{#2}\ifx\@empty\@tempa
+ \def\@tempa{\@oparg{\@begintheorem{#3}{}}[]}%
+ \else
+ \refstepcounter{#2}%
+ \def\@tempa{\@oparg{\@begintheorem{#3}{\csname the#2\endcsname}}[]}%
+ \fi
+ \@tempa
+}
+% \end{macrocode}
+% \pkg{cleveref} patches \cs{@thm} to do \cs{cref@thmoptarg} if an optional
+% argument is given. \pkg{lwarp} then patches \cs{cref@thmoptarg}
+% \cs{AtBeginDocument}.
+% \begin{macrocode}
+\AtBeginDocument{%
+\def\cref@thmoptarg[#1]#2#3#4{%
+ \ifhmode\unskip\unskip\par\fi%
+ \normalfont%
+ \LWR@forcenewpage% lwarp
+ \BlockClass{amsthmbody\LWR@thisthmstyle}% lwarp
+ \trivlist%
+ \let\thmheadnl\relax%
+ \let\thm@swap\@gobble%
+ \thm@notefont{\fontseries\mddefault\upshape}%
+ \thm@headpunct{.}% add period after heading
+ \thm@headsep 5\p@ plus\p@ minus\p@\relax%
+ \thm@space@setup%
+ #2% style overrides
+ \@topsep \thm@preskip % used by thm head
+ \@topsepadd \thm@postskip % used by \@endparenv
+ \def\@tempa{#3}\ifx\@empty\@tempa%
+ \def\@tempa{\@oparg{\@begintheorem{#4}{}}[]}%
+ \else%
+ \refstepcounter[#1]{#3}% <<< cleveref modification
+ \def\@tempa{\@oparg{\@begintheorem{#4}{\csname the#3\endcsname}}[]}%
+ \fi%
+ \@tempa
+}%
+}% AtBeginDocument
+
+\def\@endtheorem{\endtrivlist\endBlockClass\@endpefalse }
+% \end{macrocode}
+%
+%
+%
+%
+% Proof QED symbol:
+% \changes{v0.55}{2018/04/24}{Fix: QED symbols in \env{lateximage}.}
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifundefined{LWR@orig@openbox}{
+\LetLtxMacro\LWR@orig@openbox\openbox
+\LetLtxMacro\LWR@orig@blacksquare\blacksquare
+\LetLtxMacro\LWR@orig@Box\Box
+
+\def\openbox{\text{\HTMLunicode{25A1}}}% UTF-8 white box
+\def\blacksquare{\text{\HTMLunicode{220E}}}% UTF-8 end-of-proof
+\def\Box{\text{\HTMLunicode{25A1}}}% UTF-8 white box
+
+\appto\LWR@restoreorigformatting{%
+\LetLtxMacro\openbox\LWR@orig@openbox%
+\LetLtxMacro\blacksquare\LWR@orig@blacksquare%
+\LetLtxMacro\Box\LWR@orig@Box%
+}% appto
+}{}% @ifundefined
+}% AtBeginDocument
+% \end{macrocode}
+%
+% Patched for \CSS:
+% \begin{macrocode}
+\renewenvironment{proof}[1][\proofname]{\par
+\LWR@forcenewpage% lwarp
+ \BlockClass{amsthmproof}% lwarp
+ \pushQED{\qed}%
+ \normalfont \topsep6\p@\@plus6\p@\relax
+ \trivlist
+ \item[
+ \InlineClass{amsthmproofname}{#1\@addpunct{.}}]\ignorespaces% changes
+}{%
+ \InlineClass{theoremendmark}{\popQED}\endtrivlist%
+ \endBlockClass% lwarp
+ \@endpefalse
+}
+% \end{macrocode}
+
+
+% \iffalse
+%</amsthm>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*anonchap>
+% \fi
+%
+% \part{lwarp-anonchap.sty}
+%
+% \section{anonchap}
+%
+% \credits{Peter Wilson}
+%
+% \DescribePackage{anonchap}
+% \pkg{anonchap} is emulated.
+%
+% \limitstocloft
+%
+% The code is shared by \pkg{tocbibind}.
+%
+% \changes{v0.40}{2017/09/12}{\pkg{anonchap}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{anonchap}[2009/08/03]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\simplechapter}[1][\@empty]{%
+ \def\@chapcntformat##1{%
+ #1~\csname the##1\endcsname\simplechapterdelim\quad%
+ }%
+}
+
+\newcommand{\restorechapter}{%
+\let\@chapcntformat\@seccntformat%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</anonchap>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*anysize>
+% \fi
+%
+% \part{lwarp-anysize.sty}
+%
+% \section{anysize}
+%
+% \credits{Michael Salzenberg, Thomas Esser}
+%
+% \DescribePackage{anysize}
+% \pkg{anysize} is ignored.
+%
+% \changes{v0.39}{2017/08/27}{\pkg{anysize}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{anysize}[1994/08/13]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\papersize#1#2{}
+\def\marginsize#1#2#3#4{}
+% \end{macrocode}
+%
+% \iffalse
+%</anysize>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*appendix>
+% \fi
+%
+% \part{lwarp-appendix.sty}
+%
+% \section{appendix}
+%
+% \credits{Peter Wilson}
+%
+% \DescribePackage{appendix}
+% \pkg{appendix} is patched for use by \pkg{lwarp}.
+%
+% \limitsappendix
+%
+% \changes{v0.38}{2017/08/21}{\pkg{appendix}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{appendix}[2009/09/02]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand*{\@chap@pppage}{%
+\part*{\appendixpagename}
+ \if@dotoc@pp
+ \addappheadtotoc
+ \fi
+}
+
+\renewcommand*{\@sec@pppage}{%
+\part*{\appendixpagename}
+ \if@dotoc@pp
+ \addappheadtotoc
+ \fi
+}
+% \end{macrocode}
+%
+% \iffalse
+%</appendix>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*ar>
+% \fi
+%
+% \part{lwarp-ar.sty}
+%
+% \section{ar}
+%
+% \credits{Agostino De Marco}
+%
+% \DescribePackage{ar}
+% \pkg{ar} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.66}{2018/12/31}{\pkg{ar}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{ar}[2012/01/23]
+% \end{macrocode}
+%
+% Measure and print the width of the supplied glyph.
+% \begin{macrocode}
+\newlength{\LWR@ar@width}
+
+\newcommand*{\LWR@ar@printwidth}[1]{%
+ \setlength{\LWR@ar@width}{\widthof{#1}}%
+ width:%
+ \LWR@convertto{em}{\the\LWR@ar@width}em%
+}
+% \end{macrocode}
+%
+% The \HTML\ version of \cs{AR}:
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@AR}{%
+% \end{macrocode}
+% Start a hashed \env{lateximage}, additionally hashed by the font series,
+% with a width depending on the given glyph:
+% \begin{macrocode}
+ \begin{lateximage}*[AR][\LWR@f@series][\LWR@ar@printwidth{\LWR@print@AR}]%
+% \end{macrocode}
+% For text mode, set the font series according to the \HTML\ font series:
+% \begin{macrocode}
+ \ifmmode\else\csuse{LWR@orig\LWR@f@series series}\fi%
+% \end{macrocode}
+% Print the original glyph using the newly set font series:
+% \begin{macrocode}
+ \LWR@print@AR%
+% \end{macrocode}
+% Done.
+% \begin{macrocode}
+ \end{lateximage}%
+}
+% \end{macrocode}
+%
+% Combine the print and \HTML\ versions:
+% \begin{macrocode}
+\LWR@formatted{AR}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@ARb}{%
+ \begin{lateximage}*[AR][b][\LWR@ar@printwidth{\LWR@print@ARb}]%
+ \LWR@print@ARb%
+ \end{lateximage}%
+}
+\LWR@formatted{ARb}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@ARss}{%
+ \begin{lateximage}*[ARss][\LWR@f@series][\LWR@ar@printwidth{\LWR@print@ARss}]%
+ \ifmmode\else\csuse{LWR@orig\LWR@f@series series}\fi%
+ \LWR@print@ARss%
+ \end{lateximage}%
+}
+\LWR@formatted{ARss}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@ARssb}{%
+ \begin{lateximage}*[AR][ssb][\LWR@ar@printwidth{\LWR@print@ARssb}]%
+ \LWR@print@ARssb%
+ \end{lateximage}%
+}
+\LWR@formatted{ARssb}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newrobustcmd*{\LWR@HTML@ARtt}{%
+ \begin{lateximage}*[AR][tt][\LWR@ar@printwidth{\LWR@print@ARtt}]%
+ \LWR@print@ARtt%
+ \end{lateximage}%
+}
+\LWR@formatted{ARtt}
+% \end{macrocode}
+%
+% \iffalse
+%</ar>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*arabicfront>
+% \fi
+%
+% \part{lwarp-arabicfront.sty}
+%
+% \section{arabicfront}
+%
+% \DescribePackage{arabicfront}
+% \pkg{arabicfront} is ignored.
+%
+% \changes{v0.38}{2017/08/25}{\pkg{arabicfront}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{arabicfront}[2006/09/03]
+% \end{macrocode}
+%
+%
+% \iffalse
+%</arabicfront>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*array>
+% \fi
+%
+% \part{lwarp-array.sty}
+%
+% \section{array}
+%
+% \DescribePackage{array}
+% \pkg{array} is used as-is for print output, and emulated for \HTML.
+%
+% \pkg{plarray} and \pkg{plextarray} do not affect \cs{firsthline} or
+% \cs{lasthline}, and so are not affected by the following.
+%
+% \changes{v0.45}{2017/12/03}{\pkg{array}: Added.}
+% \changes{v0.58}{2018/06/07}{\pkg{array}: Improved print/\HTML\ output selection.}
+%
+% \codehtml
+%
+% Remove the default nullfied macros:
+% \begin{macrocode}
+\let\firsthline\relax
+\let\lasthline\relax
+
+\LWR@ProvidesPackagePass{array}[2018/12/30]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@firsthline}{\LWR@HTMLhline}%
+\LWR@expandableformatted{firsthline}
+
+\newcommand*{\LWR@HTML@lasthline}{\LWR@HTMLhline}%
+\LWR@expandableformatted{lasthline}
+% \end{macrocode}
+%
+% \changes{v0.69}{2019/03/09}{\pkg{array}: Fix for \cs{tabularnewline}.}
+% \begin{macrocode}
+\providecommand*{\LWR@HTML@tabularnewline}{\LWR@tabularendofline}
+\LWR@formatted{tabularnewline}
+% \end{macrocode}
+%
+% \iffalse
+%</array>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*arydshln>
+% \fi
+%
+% \part{lwarp-arydshln.sty}
+
+% \section{arydshln}
+%
+% \credits{Hiroshi Nakashima}
+%
+% \DescribePackage{arydshln}
+% \pkg{arydshln} heavily patches tabular code, so the
+% actual package is not used.
+% \pkg{arydshln} is emulated for \HTML\ \env{tabular},
+% and reverts to solid rules for \SVG\ math \env{array}
+% and \env{tabular} in a \env{lateximage}.
+%
+% \CSS\ is not able to display a double-dashed border, so
+% a single-dashed rule is displayed as a single-dashed border, and
+% a double-dashed rule is displayed as a thicker single-dashed border.
+%
+% \changes{v0.56}{2018/05/02}{\pkg{arydshln}: Added.}
+%
+% \codehtml
+%
+% \pkg{array} is required to allow \cs{newcolumn} below.
+% \begin{macrocode}
+\RequirePackage{array}
+% \end{macrocode}
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{arydshln}[2018/09/26]
+% \end{macrocode}
+%
+% Ignored, but included for source compatibility:
+% \begin{macrocode}
+\newdimen\dashlinedash \dashlinedash4pt %
+\newdimen\dashlinegap \dashlinegap4pt %
+\let\hdashlinewidth\dashlinedash
+\let\hdashlinegap\dashlinegap
+
+\def\ADLnullwide{}
+\def\ADLsomewide{}
+\def\ADLnullwidehline{}
+\def\ADLsomewidehline{}
+
+\def\ADLactivate{}
+\def\ADLinactivate{}
+\newcommand*{\ADLdrawingmode}[1]{}
+\newcommand*{\ADLnoshorthanded}{}
+\newcommand*{\dashgapcolor}[2][]{}
+\newcommand*{\nodashgapcolor}{}
+% \end{macrocode}
+%
+%
+% In a \env{lateximage}, revert to solid vertical rules:
+% \begin{macrocode}
+\appto\LWR@restoreorigformatting{%
+\newcolumntype{:}{|}%
+\newcolumntype{;}[1]{|}%
+\LetLtxMacro\hdashline\hline%
+}
+% \end{macrocode}
+%
+%
+% Some of these macros are already defined as temporary placeholders in the
+% \pkg{lwarp} core, so they must be redefined here.
+%
+% The emulated defaults also work for an emulated print mode inside a \env{lateximage}:
+% \begin{macrocode}
+\def\hdashline{
+% \adl@hdashline\adl@ihdashline
+ \adl@hdashline\adl@inactivehdl
+}
+\def\adl@hdashline#1{\noalign{\ifnum0=`}\fi
+% \ifadl@zwhrule \vskip-\arrayrulewidth
+% \else
+% \adl@hline\adl@connect\arrayrulewidth
+ \hrule \@height \arrayrulewidth% lwarp
+% \fi
+ \@ifnextchar[%]
+ {#1}%
+ {#1[%
+% \dashlinedash/\dashlinegap
+ 1pt/1pt
+ ]}}
+% \def\adl@ihdashline[#1/#2]{\ifnum0=`{\fi}%
+% \multispan{\adl@columns}\unskip \adl@hcline\z@[#1/#2]%
+% \noalign{\ifnum0=`}\fi
+% \futurelet\@tempa\adl@xhline}
+\def\adl@inactivehdl[#1/#2]{
+% \ifadl@zwhrule \vskip-\arrayrulewidth \fi
+ \hrule\@height\arrayrulewidth
+ \futurelet\@tempa\adl@xhline}
+\def\adl@xhline{\ifx\@tempa\hline \adl@ixhline\fi
+ \ifx\@tempa\hdashline \adl@ixhline\fi
+ \ifnum0=`{\fi}}
+\def\adl@ixhline{\vskip\doublerulesep \adl@hline\relax\doublerulesep}
+\def\adl@hline#1#2{%
+% \@tempcnta#2
+% \global\advance\adl@totalheight\@tempcnta
+% \xdef\adl@rowsL{\adl@rowsL
+% (#1/\number\@tempcnta);}%
+% \xdef\adl@rowsR{\adl@rowsR
+% (#1/\number\@tempcnta);}
+}
+
+\def\cdashline#1{\noalign{\ifnum0=`}\fi
+ \@ifnextchar[%]
+% {\adl@cdline[#1]}%
+% {\adl@cdline[#1][\dashlinedash/\dashlinegap]}
+ {\adl@inactivecdl[#1]}%
+ {\adl@inactivecdl[#1][\dashlinedash/\dashlinegap]}
+}
+
+\def\adl@inactivecdl[#1-#2][#3]{\ifnum0=`{\fi}\cline{#1-#2}}
+% \end{macrocode}
+
+% \iffalse
+%</arydshln>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*asymptote>
+% \fi
+%
+% \part{lwarp-asymptote.sty}
+%
+% \section{asymptote}
+%
+% \credits{Andy Hammerlindl, John Bowman, Tom Prince}
+%
+% \DescribePackage{asymptote}
+% \pkg{asymptote} is patched for use by \pkg{lwarp}.
+%
+% \needspace{3\baselineskip}
+% \limitsasymptote
+%
+% \changes{v0.59}{2018/07/10}{\pkg{asymptote}: Added.}
+% \changes{v0.62}{2018/10/16}{\pkg{asymptote}: Improved \attribute{alt} tags.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{asymptote}[2016/11/26]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\BeforeBeginEnvironment{asy}{\begin{lateximage}[(-asymptote-~\packagediagramname)]}
+\AfterEndEnvironment{asy}{\end{lateximage}}
+
+\xpatchcmd{\asyinclude}
+ {\begingroup}
+ {\begin{lateximage}[(-asymptote-~\packagediagramname)]}
+ {}
+ {\LWR@patcherror{asymptote}{asyinclude-begingroup}}
+
+\xpatchcmd{\asyinclude}
+ {\endgroup}
+ {\end{lateximage}}
+ {}
+ {\LWR@patcherror{asymptote}{asyinclude-endgroup}}
+% \end{macrocode}
+%
+% \iffalse
+%</asymptote>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*atbegshi>
+% \fi
+%
+% \part{lwarp-atbegshi.sty}
+%
+% \section{atbegshi}
+%
+% \credits{Heiko Oberdiek}
+%
+% \DescribePackage{atbegshi} \pkg{atbegshi} is ignored.
+%
+% \changes{v0.44}{2017/11/10}{\pkg{atbegshi}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-atbegshi}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{atbegshi}[2011/10/05]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\AtBeginShipout}[1]{}
+\newbox\AtBeginShipoutBox
+\newcommand*{\AtBeginShipoutNext}[1]{}
+\newcommand*{\AtBeginShipoutFirst}[1]{}
+\newcommand*{\AtBeginShipoutDiscard}{}
+\newcommand*{\AtBeginShipoutInit}{}
+\newcommand*{\AtBeginShipoutAddToBox}[1]{}
+\newcommand*{\AtBeginShipoutAddToBoxForeground}[1]{}
+\newcommand*{\AtBeginShipoutUpperLeft}[1]{}
+\newcommand*{\AtBeginShipoutUpperLeftForeground}[1]{}
+\newcommand*{\AtBeginShipoutOriginalShipout}[1]{}
+\def\AtBeginShipoutBoxWidth{0pt}
+\def\AtBeginShipoutBoxHeight{0pt}
+\def\AtBeginShipoutBoxDepth{0pt}
+
+% \end{macrocode}
+%
+% \iffalse
+%</atbegshi>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*attachfile>
+% \fi
+%
+% \part{lwarp-attachfile.sty}
+
+% \section{attachfile}
+%
+% \credits{Scott Pakin}
+%
+% \DescribePackage{attachfile}
+% \pkg{attachfile} is patched for use by \pkg{lwarp}.
+%
+% Metadata is ignored for now.\watchout
+%
+% \changes{v0.58}{2018/06/08}{\pkg{attachfile}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{attachfile}[2016/09/18]
+% \end{macrocode}
+%
+% Encloses each icon:
+% \begin{macrocode}
+\newenvironment*{LWR@attachfile@icon}
+{
+ \begin{lateximage}*%
+ [-attachfile-]%
+ [%
+ \detokenize\expandafter{\atfi@icon@icon}-%
+ \detokenize\expandafter{\atfi@color@rgb}%
+ ]%
+}
+{
+ \end{lateximage}
+}
+% \end{macrocode}
+%
+% Each icon is enclosed inside a \env{LWR@attachfile@icon} environment:
+% \begin{macrocode}
+\xpretocmd{\atfi@acroGraph}{\LWR@attachfile@icon}{}{}
+\xapptocmd{\atfi@acroGraph}{\endLWR@attachfile@icon}{}{}
+
+\xpretocmd{\atfi@acroPaperclip}{\LWR@attachfile@icon}{}{}
+\xapptocmd{\atfi@acroPaperclip}{\endLWR@attachfile@icon}{}{}
+
+\xpretocmd{\atfi@acroPushPin}{\LWR@attachfile@icon}{}{}
+\xapptocmd{\atfi@acroPushPin}{\endLWR@attachfile@icon}{}{}
+
+\xpretocmd{\atfi@acroTag}{\LWR@attachfile@icon}{}{}
+\xapptocmd{\atfi@acroTag}{\endLWR@attachfile@icon}{}{}
+% \end{macrocode}
+%
+% Disable \PDF\ file embedding:
+% \begin{macrocode}
+\DeclareRobustCommand{\atfi@embedfile}[1]{}
+% \end{macrocode}
+%
+% The displayed output for an \cs{attachfile} reference:
+% \begin{macrocode}
+\newcommand*{\LWR@attachfile@appearance}{}
+
+\DeclareRobustCommand{\atfi@set@appearance}[1]{%
+ \def\LWR@attachfile@appearance{#1}%
+}
+% \end{macrocode}
+%
+% A file annotation becomes a reference:
+% \begin{macrocode}
+\DeclareRobustCommand{\atfi@insert@file@annot}[1]{%
+ \href{#1}{\LWR@attachfile@appearance}%
+}
+% \end{macrocode}
+
+% \iffalse
+%</attachfile>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*attachfile2>
+% \fi
+%
+% \part{lwarp-attachfile2.sty}
+
+% \section{attachfile2}
+%
+% \credits{Heiko Oberdiek}
+%
+% \DescribePackage{attachfile2}
+% \pkg{attachfile2} is patched for use by \pkg{lwarp}.
+%
+% Metadata is ignored for now.\watchout
+%
+% \changes{v0.58}{2018/06/08}{\pkg{attachfile2}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{attachfile2}[2016/05/16]
+% \end{macrocode}
+%
+% Adds memory of the selected color:
+% \begin{macrocode}
+\def\LWR@attachfiletwo@color{}%
+
+\define@key{AtFi}{color}{%
+ \def\LWR@attachfiletwo@color{#1}% lwarp
+ \HyColor@AttachfileColor{#1}%
+ \atfi@color@tex\atfi@color@inline\atfi@color@annot
+ {attachfile2}{color}%
+}
+% \end{macrocode}
+%
+% Encloses each icon:
+% \begin{macrocode}
+\newenvironment*{LWR@attachfile@icon}
+{
+ \begin{lateximage}*%
+ [-attachfile-]%
+ [%
+ \detokenize\expandafter{\atfi@icon@icon}-%
+ \detokenize\expandafter{\LWR@attachfiletwo@color}%
+ ]%
+}
+{
+ \end{lateximage}
+}
+% \end{macrocode}
+%
+% Each icon is enclosed inside a \env{LWR@attachfile@icon} environment:
+% \begin{macrocode}
+\xpretocmd{\atfi@acroGraph}{\LWR@attachfile@icon}{}{}
+\xapptocmd{\atfi@acroGraph}{\endLWR@attachfile@icon}{}{}
+
+\xpretocmd{\atfi@acroPaperclip}{\LWR@attachfile@icon}{}{}
+\xapptocmd{\atfi@acroPaperclip}{\endLWR@attachfile@icon}{}{}
+
+\xpretocmd{\atfi@acroPushPin}{\LWR@attachfile@icon}{}{}
+\xapptocmd{\atfi@acroPushPin}{\endLWR@attachfile@icon}{}{}
+
+\xpretocmd{\atfi@acroTag}{\LWR@attachfile@icon}{}{}
+\xapptocmd{\atfi@acroTag}{\endLWR@attachfile@icon}{}{}
+% \end{macrocode}
+%
+% Disable \PDF\ file embedding:
+% \begin{macrocode}
+\DeclareRobustCommand{\atfi@embedfile}[1]{}
+% \end{macrocode}
+%
+% The displayed output for an \cs{attachfile} reference:
+% \begin{macrocode}
+\newcommand*{\LWR@attachfile@appearance}{}
+
+\def\atfi@set@appearance@icon{%
+ \atfi@set@appearance{\csname atfi@acro\atfi@icon@icon\endcsname}%
+}
+
+\DeclareRobustCommand{\atfi@set@appearance}[1]{%
+ \def\LWR@attachfile@appearance{#1}%
+}
+% \end{macrocode}
+%
+% A file annotation becomes a reference:
+% \begin{macrocode}
+\DeclareRobustCommand{\atfi@insert@file@annot}[1]{%
+ \href{#1}{\LWR@attachfile@appearance}%
+}
+% \end{macrocode}
+%
+% Modified for text color:
+% \begin{macrocode}
+\DeclareRobustCommand{\notextattachfile}[2][]{%
+ \begingroup
+ \atfi@setup{#1}%
+ \ifatfi@print
+ \leavevmode
+ \begingroup
+ \HyColor@UseColor\atfi@color@tex
+ \LWR@textcurrentcolor{#2}% lwarp
+% \strut
+ \endgroup
+% \else
+% \sbox\ltx@zero{#2\strut}%
+% \makebox[\wd0]{}%
+ \fi
+ \endgroup
+}
+% \end{macrocode}
+%
+% Modified to draw the icon:
+% \begin{macrocode}
+\DeclareRobustCommand{\noattachfile}[1][]{%
+ \begingroup
+ \atfi@setup{#1}%
+ \atfi@set@appearance@icon
+ \ifatfi@print
+ \LWR@attachfile@appearance% lwarp
+% \expandafter
+% \atfi@refxform\csname atfi@appobj@\atfi@icon@icon\endcsname
+% \else
+% \makebox[\atfi@appearancewidth]{}%
+ \fi
+ \endgroup
+}
+% \end{macrocode}
+
+% \iffalse
+%</attachfile2>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*authblk>
+% \fi
+%
+% \part{lwarp-authblk.sty}
+%
+% \section{authblk}
+%
+% \credits{Patrick W. Daly}
+%
+% \DescribePackage{authblk}
+% \pkg{authblk} is patched for \HTML.
+%
+% \changes{v0.39}{2017/08/31}{\pkg{authblk}: Added.}
+%
+% \limitstitlepage
+%
+% \credits{Patrick W. Daly}
+%
+% \codehtml
+%
+% Require that \pkg{authblk} be loaded before \pkg{titling}:
+% \begin{macrocode}
+\@ifpackageloaded{titling}{
+\PackageError{lwarp-authblk}
+{Package authblk must be loaded before titling}
+{Titling appends authblk's author macro, so authblk must be loaded first.}
+}
+{}
+% \end{macrocode}
+%
+% Load \pkg{authblk}:
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{authblk}[2001/02/27]
+% \end{macrocode}
+%
+% Patch to add a class for the affiliation:
+% \begin{macrocode}
+\LetLtxMacro\LWRAB@affil\affil
+
+\renewcommand{\affil}[2][]{%
+\LWRAB@affil[#1]{\protect\InlineClass{affiliation}{#2}}
+}
+% \end{macrocode}
+% Create an \HTML\ break for an \cs{authorcr}:
+% \begin{macrocode}
+\renewcommand*{\authorcr}{\protect\LWR@newlinebr}
+% \end{macrocode}
+%
+% \iffalse
+%</authblk>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*autonum>
+% \fi
+%
+% \part{lwarp-autonum.sty}
+%
+% \section{autonum}
+%
+% \DescribePackage{autonum}
+% \pkg{autonum} is ignored.
+%
+% All equations are numbered in \HTML\ output.
+% \trouble[numbering]{autonum=\pkg{autonum}}
+%
+% \brand{MathJax} does not support the ``+'' environments.
+%
+% \changes{v0.70}{2019/03/28}{\pkg{autonum}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{autonum}[2015/01/18]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\RequirePackage{amsmath}
+
+
+\newenvironment{equation+}{\equation}{\endequation}
+
+
+\newenvironment{gather+}{\gather}{\endgather}
+
+\BeforeBeginEnvironment{gather+}{\LWR@amsmathenv@@before{gather+}}
+
+\AfterEndEnvironment{gather+}{\LWR@amsmathenv@@after}
+
+
+\newenvironment{multline+}{\multline}{\endmultline}
+
+\BeforeBeginEnvironment{multline+}{\LWR@amsmathenv@@before{multline+}}
+
+\AfterEndEnvironment{multline+}{\LWR@amsmathenv@@after}
+
+
+\newenvironment{flalign+}{\flalign}{\endflalign}
+
+\BeforeBeginEnvironment{flalign+}{\LWR@amsmathenv@@before{flaline+}}
+
+\AfterEndEnvironment{flalign+}{\LWR@amsmathenv@@after}
+
+
+\newenvironment{align+}{\align}{\endalign}
+
+\BeforeBeginEnvironment{align+}{\LWR@amsmathenv@@before{aline+}}
+
+\AfterEndEnvironment{align+}{\LWR@amsmathenv@@after}
+
+
+\newenvironment{alignat+}{\alignat}{\endalignat}
+
+\BeforeBeginEnvironment{alignat+}{\LWR@amsmathenv@@before{alineat+}}
+
+\AfterEndEnvironment{alignat+}{\LWR@amsmathenv@@after}
+
+
+\newenvironment{split+}{\split}{\endsplit}
+% \end{macrocode}
+%
+% \iffalse
+%</autonum>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*axessibility>
+% \fi
+%
+% \part{lwarp-axessibility.sty}
+%
+% \section{axessibility}
+%
+% \DescribePackage{axessibility}
+% \pkg{axessibility} is ignored.
+%
+% \changes{v0.59}{2018/07/25}{\pkg{axessibility}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{axessibility}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\wrap}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</axessibility>
+% \fi
+%
+%
+% \iffalse
+%<*axodraw2>
+% \fi
+%
+% \part{lwarp-axodraw2.sty}
+
+% \section{axodraw2}
+%
+% \credits{John C. Collins, J.A.M. Vermaseren}
+%
+% \DescribePackage{axodraw2}
+% \pkg{axodraw2} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.50}{2018/02/22}{\pkg{axodraw2}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{axodraw2}[2018/02/15]
+% \end{macrocode}
+
+% \begin{macrocode}
+\BeforeBeginEnvironment{axopicture}{\begin{lateximage}[(-axopicture-~\packagediagramname)]}
+
+\AfterEndEnvironment{axopicture}{\end{lateximage}}
+% \end{macrocode}
+
+% \iffalse
+%</axodraw2>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*backnaur>
+% \fi
+%
+% \part{lwarp-backnaur.sty}
+%
+% \section{backnaur}
+%
+% \credits{Adrian P. Robson}
+%
+% \DescribePackage{backnaur}
+% \pkg{backnaur} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.72}{2019/05/20}{\pkg{backnaur}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{backnaur}[2019/06/18]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewenvironment{bnf}{\eqnarray}{\endeqnarray}
+\renewenvironment{bnf*}{\csuse{eqnarray*}}{\csuse{endeqnarray*}}
+% \end{macrocode}
+%
+% ^^A % For HTML without SVG images, but also without equation numbering:
+% ^^A %
+% ^^A % A purely \HTML\ text output is generated, without math images.
+% ^^A %
+% ^^A % The various instances of \cs{LWR@stoppars} are added because the
+% ^^A % print version uses the \env{eqnarray} environment
+% ^^A % with \cs{\textbackslash} between
+% ^^A % lines. For \HTML, paragraph handling must be turned off so that these
+% ^^A % \cs{\textbackslash} macros are converted to \element{br} elements
+% ^^A % without extra paragraph space.
+% ^^A %
+% ^^A % \begin{macrocode}
+% ^^A % \renewenvironment*{bnf}{%
+% ^^A % \BlockClass{backnaur}%
+% ^^A % \LWR@stoppars%
+% ^^A % }{\endBlockClass}
+% ^^A %
+% ^^A % \renewenvironment*{bnf*}{%
+% ^^A % \BlockClass{backnaur}%
+% ^^A % \LWR@stoppars%
+% ^^A % }{\endBlockClass}
+% ^^A %
+% ^^A % \renewcommand{\bnfpn}[1]{\HTMLunicode{27e8}#1\HTMLunicode{27e9}}% \langle, rangle
+% ^^A % \renewcommand{\bnfor}{ \HTMLunicode{7c} }% \mid
+% ^^A % \renewcommand{\bnfsp}{ }
+% ^^A % \renewcommand{\bnfes}{\HTMLunicode{3bb}}% \lambda
+% ^^A % \renewcommand{\bnftd}[1]{\textnormal{\textit{#1}}}
+% ^^A % \renewcommand{\bnfsk}{\HTMLunicode{2026} }% \dots, ellipsis
+% ^^A % \renewcommand{\bnfpo}{\HTMLunicode{22a8}}% \models
+% ^^A %
+% ^^A % \RenewDocumentCommand{\bnfprod}{s m m}{%
+% ^^A % \begin{BlockClass}{backnaurprod}\bnfpn{#2} \bnfpo \end{BlockClass}%
+% ^^A % \begin{BlockClass}{backnaurdesc}#3\end{BlockClass}%
+% ^^A % \LWR@stoppars%
+% ^^A % }%
+% ^^A %
+% ^^A % \RenewDocumentCommand{\bnfmore}{s m}{%
+% ^^A % \begin{BlockClass}{backnaurprod}\end{BlockClass}
+% ^^A % \begin{BlockClass}{backnaurdesc}#2\end{BlockClass}
+% ^^A % \LWR@stoppars%
+% ^^A % }
+% ^^A %
+% ^^A % \@ifpackagewith{backnaur}{perp}{\renewcommand{\bnfes}{\HTMLunicode{27c2}}}{}% \perp
+% ^^A % \@ifpackagewith{backnaur}{epsilon}{\renewcommand{\bnfes}{\HTMLunicode{3f5}}}{}% \epsilon
+% ^^A % \end{macrocode}
+%
+% \iffalse
+%</backnaur>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*backref>
+% \fi
+%
+% \part{lwarp-backref.sty}
+
+% \section{backref}
+%
+% \credits{David Carlisle and Sebastian Rahtz}
+%
+% \DescribePackage{backref}
+% \pkg{backref} is patched for use by \pkg{lwarp}.
+%
+% Note that \pkg{backref} must be explicitly loaded,
+% \trouble[loading]{backref}
+% and is not automatically loaded by \pkg{hyperref} when
+% generating \HTML\ output.
+%
+% \changes{v0.45}{2018/01/14}{\pkg{backref}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{backref}[2016/05/21]
+% \end{macrocode}
+
+% Force the \optn{hyperref} option:
+% \begin{macrocode}
+\def\backref{}\let\backrefxxx\hyper@section@backref
+% \end{macrocode}
+
+% \iffalse
+%</backref>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*balance>
+% \fi
+%
+% \part{lwarp-balance.sty}
+%
+% \section{balance}
+%
+% \credits{Patrick W. Daly}
+%
+% \DescribePackage{balance} \pkg{balance} is ignored.
+%
+% \changes{v0.34}{2017/07/27}{\pkg{balance}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-balance}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{balance}[1999/02/23]
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\newcommand*{\balance}{}
+\newcommand*{\nobalance}{}
+% \end{macrocode}
+%
+%
+% \iffalse
+%</balance>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*bbding>
+% \fi
+%
+% \part{lwarp-bbding.sty}
+%
+% \section{bbding}
+%
+% \credits{Karel Horak, Peter Møller Neergaard}
+%
+% \DescribePackage{bbding}
+% \pkg{bbding} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.67}{2019/02/20}{\pkg{bbding}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{bbding}[1999/04/15]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@bbdingsymbol}[2]{\HTMLunicode{#2}}
+
+\newcommand{\LWR@HTML@ScissorRightBrokenBottom}{\LWR@bbdingsymbol{000} {2701}}
+\newcommand{\LWR@HTML@ScissorRight}{\LWR@bbdingsymbol{001} {2702}}
+\newcommand{\LWR@HTML@ScissorRightBrokenTop}{\LWR@bbdingsymbol{002} {2703}}
+\newcommand{\LWR@HTML@ScissorLeftBrokenBottom}{\LWR@bbdingsymbol{003} {2701}}
+\newcommand{\LWR@HTML@ScissorLeft}{\LWR@bbdingsymbol{004} {2702}}
+\newcommand{\LWR@HTML@ScissorLeftBrokenTop}{\LWR@bbdingsymbol{005} {2703}}
+\newcommand{\LWR@HTML@ScissorHollowRight}{\LWR@bbdingsymbol{006} {2704}}
+\newcommand{\LWR@HTML@ScissorHollowLeft}{\LWR@bbdingsymbol{007} {2704}}
+\newcommand{\LWR@HTML@Phone}{\LWR@bbdingsymbol{010} {260E}}
+\newcommand{\LWR@HTML@PhoneHandset}{\LWR@bbdingsymbol{011} {2706}}
+\newcommand{\LWR@HTML@Tape}{\LWR@bbdingsymbol{012} {2707}}
+\newcommand{\LWR@HTML@Plane}{\LWR@bbdingsymbol{013} {2708}}
+\newcommand{\LWR@HTML@Envelope}{\LWR@bbdingsymbol{014} {2709}}
+\newcommand{\LWR@HTML@HandCuffRight}{\LWR@bbdingsymbol{015} {261B}}
+\newcommand{\LWR@HTML@HandCuffLeft}{\LWR@bbdingsymbol{016} {261A}}
+\newcommand{\LWR@HTML@HandCuffRightUp}{\LWR@bbdingsymbol{017} {261D}}
+\newcommand{\LWR@HTML@HandCuffLeftUp}{\LWR@bbdingsymbol{020} {261F}}
+\newcommand{\LWR@HTML@HandRight}{\LWR@bbdingsymbol{021} {261E}}
+\newcommand{\LWR@HTML@HandLeft}{\LWR@bbdingsymbol{022} {261C}}
+\newcommand{\LWR@HTML@HandRightUp}{\LWR@bbdingsymbol{023} {261D}}
+\newcommand{\LWR@HTML@HandLeftUp}{\LWR@bbdingsymbol{024} {261F}}
+\newcommand{\LWR@HTML@Peace}{\LWR@bbdingsymbol{025} {270C}}
+\newcommand{\LWR@HTML@HandPencilLeft}{\LWR@bbdingsymbol{026} {270D}}
+\newcommand{\LWR@HTML@PencilRight}{\LWR@bbdingsymbol{027} {270F}}
+\newcommand{\LWR@HTML@PencilLeft}{\LWR@bbdingsymbol{030} {270F}}
+\newcommand{\LWR@HTML@PencilRightUp}{\LWR@bbdingsymbol{031} {2710}}
+\newcommand{\LWR@HTML@PencilLeftUp}{\LWR@bbdingsymbol{032} {2710}}
+\newcommand{\LWR@HTML@PencilRightDown}{\LWR@bbdingsymbol{033} {270E}}
+\newcommand{\LWR@HTML@PencilLeftDown}{\LWR@bbdingsymbol{034} {270E}}
+\newcommand{\LWR@HTML@NibRight}{\LWR@bbdingsymbol{035} {2711}}
+\newcommand{\LWR@HTML@NibLeft}{\LWR@bbdingsymbol{036} {2711}}
+\newcommand{\LWR@HTML@NibSolidRight}{\LWR@bbdingsymbol{037} {2712}}
+\newcommand{\LWR@HTML@NibSolidLeft}{\LWR@bbdingsymbol{040} {2712}}
+\newcommand{\LWR@HTML@Checkmark}{\LWR@bbdingsymbol{041} {2713}}
+\newcommand{\LWR@HTML@CheckmarkBold}{\LWR@bbdingsymbol{042} {2714}}
+\newcommand{\LWR@HTML@XSolid}{\LWR@bbdingsymbol{043} {2715}}
+\newcommand{\LWR@HTML@XSolidBold}{\LWR@bbdingsymbol{044} {2716}}
+\newcommand{\LWR@HTML@XSolidBrush}{\LWR@bbdingsymbol{045} {2717}}
+\newcommand{\LWR@HTML@PlusOutline}{\LWR@bbdingsymbol{046} {2719}}
+\newcommand{\LWR@HTML@Plus}{\LWR@bbdingsymbol{047} {271A}}
+\newcommand{\LWR@HTML@PlusCenterOpen}{\LWR@bbdingsymbol{050} {271C}}
+\newcommand{\LWR@HTML@PlusThinCenterOpen}{\LWR@bbdingsymbol{051} {271B}}
+\newcommand{\LWR@HTML@Cross}{\LWR@bbdingsymbol{052} {271D}}
+\newcommand{\LWR@HTML@CrossOpenShadow}{\LWR@bbdingsymbol{053} {271E}}
+\newcommand{\LWR@HTML@CrossOutline}{\LWR@bbdingsymbol{054} {271F}}
+\newcommand{\LWR@HTML@CrossBoldOutline}{\LWR@bbdingsymbol{055} {271F}}
+\newcommand{\LWR@HTML@CrossMaltese}{\LWR@bbdingsymbol{056} {2720}}
+\newcommand{\LWR@HTML@DavidStarSolid}{\LWR@bbdingsymbol{057} {2721}}
+\newcommand{\LWR@HTML@DavidStar}{\LWR@bbdingsymbol{060} {2721}}
+\newcommand{\LWR@HTML@FourAsterisk}{\LWR@bbdingsymbol{061} {2722}}
+\newcommand{\LWR@HTML@JackStar}{\LWR@bbdingsymbol{062} {2723}}
+\newcommand{\LWR@HTML@JackStarBold}{\LWR@bbdingsymbol{063} {2724}}
+\newcommand{\LWR@HTML@CrossClowerTips}{\LWR@bbdingsymbol{064} {2725}}
+\newcommand{\LWR@HTML@FourStar}{\LWR@bbdingsymbol{065} {2726}}
+\newcommand{\LWR@HTML@FourStarOpen}{\LWR@bbdingsymbol{066} {2727}}
+\newcommand{\LWR@HTML@FiveStarLines}{\LWR@bbdingsymbol{067} {2729}}
+\newcommand{\LWR@HTML@FiveStar}{\LWR@bbdingsymbol{070} {2605}}
+\newcommand{\LWR@HTML@FiveStarOpen}{\LWR@bbdingsymbol{071} {2729}}
+\newcommand{\LWR@HTML@FiveStarOpenCircled}{\LWR@bbdingsymbol{072} {272A}}
+\newcommand{\LWR@HTML@FiveStarCenterOpen}{\LWR@bbdingsymbol{073} {272B}}
+\newcommand{\LWR@HTML@FiveStarOpenDotted}{\LWR@bbdingsymbol{074} {272C}}
+\newcommand{\LWR@HTML@FiveStarOutline}{\LWR@bbdingsymbol{075} {272D}}
+\newcommand{\LWR@HTML@FiveStarOutlineHeavy}{\LWR@bbdingsymbol{076} {272E}}
+\newcommand{\LWR@HTML@FiveStarConvex}{\LWR@bbdingsymbol{077} {272F}}
+\newcommand{\LWR@HTML@FiveStarShadow}{\LWR@bbdingsymbol{100} {2730}}
+\newcommand{\LWR@HTML@AsteriskBold}{\LWR@bbdingsymbol{101} {2731}}
+\newcommand{\LWR@HTML@AsteriskCenterOpen}{\LWR@bbdingsymbol{102} {2732}}
+\newcommand{\LWR@HTML@AsteriskThin}{\LWR@bbdingsymbol{103} {273B}}
+\newcommand{\LWR@HTML@AsteriskThinCenterOpen}{\LWR@bbdingsymbol{104} {273C}}
+\newcommand{\LWR@HTML@EightStarTaper}{\LWR@bbdingsymbol{105} {2733}}
+\newcommand{\LWR@HTML@EightStarConvex}{\LWR@bbdingsymbol{106} {2735}}
+\newcommand{\LWR@HTML@SixStar}{\LWR@bbdingsymbol{107} {2736}}
+\newcommand{\LWR@HTML@EightStar}{\LWR@bbdingsymbol{110} {2737}}
+\newcommand{\LWR@HTML@EightStarBold}{\LWR@bbdingsymbol{111} {2738}}
+\newcommand{\LWR@HTML@TwelweStar}{\LWR@bbdingsymbol{112} {2739}}
+\newcommand{\LWR@HTML@SixteenStarLight}{\LWR@bbdingsymbol{113} {273A}}
+\newcommand{\LWR@HTML@SixFlowerPetalRemoved}{\LWR@bbdingsymbol{114} {273B}}
+\newcommand{\LWR@HTML@SixFlowerOpenCenter}{\LWR@bbdingsymbol{115} {273C}}
+\newcommand{\LWR@HTML@Asterisk}{\LWR@bbdingsymbol{116} {273D}}
+\newcommand{\LWR@HTML@SixFlowerAlternate}{\LWR@bbdingsymbol{117} {273E}}
+\newcommand{\LWR@HTML@FiveFlowerPetal}{\LWR@bbdingsymbol{120} {273F}}
+\newcommand{\LWR@HTML@SixFlowerPetalDotted}{\LWR@bbdingsymbol{121} {2740}}
+\newcommand{\LWR@HTML@FiveFlowerOpen}{\LWR@bbdingsymbol{122} {2740}}
+\newcommand{\LWR@HTML@EightFlowerPetal}{\LWR@bbdingsymbol{123} {2741}}
+\newcommand{\LWR@HTML@SunshineOpenCircled}{\LWR@bbdingsymbol{124} {2742}}
+\newcommand{\LWR@HTML@SixFlowerAltPetal}{\LWR@bbdingsymbol{125} {2743}}
+\newcommand{\LWR@HTML@FourClowerOpen}{\LWR@bbdingsymbol{126} {273F}}
+\newcommand{\LWR@HTML@FourClowerSolid}{\LWR@bbdingsymbol{127} {273F}}
+\newcommand{\LWR@HTML@AsteriskRoundedEnds}{\LWR@bbdingsymbol{130} {2749}}
+\newcommand{\LWR@HTML@EightFlowerPetalRemoved}{\LWR@bbdingsymbol{131} {274A}}
+\newcommand{\LWR@HTML@EightAsterisk}{\LWR@bbdingsymbol{132} {274B}}
+\newcommand{\LWR@HTML@SixFlowerRemovedOpenPetal}{\LWR@bbdingsymbol{133} {2740}}
+\newcommand{\LWR@HTML@SparkleBold}{\LWR@bbdingsymbol{134} {2748}}
+\newcommand{\LWR@HTML@Sparkle}{\LWR@bbdingsymbol{135} {2747}}
+\newcommand{\LWR@HTML@SnowflakeChevron}{\LWR@bbdingsymbol{136} {2744}}
+\newcommand{\LWR@HTML@SnowflakeChevronBold}{\LWR@bbdingsymbol{137} {2746}}
+\newcommand{\LWR@HTML@Snowflake}{\LWR@bbdingsymbol{140} {2744}}
+\newcommand{\LWR@HTML@CircleSolid}{\LWR@bbdingsymbol{141} {25CF}}
+\newcommand{\LWR@HTML@Ellipse}{\LWR@bbdingsymbol{142} {274D}}
+\newcommand{\LWR@HTML@EllipseSolid}{\LWR@bbdingsymbol{143} {25CF}}
+\newcommand{\LWR@HTML@CircleShadow}{\LWR@bbdingsymbol{144} {274D}}
+\newcommand{\LWR@HTML@EllipseShadow}{\LWR@bbdingsymbol{145} {274D}}
+\newcommand{\LWR@HTML@Square}{\LWR@bbdingsymbol{146} {25A1}}
+\newcommand{\LWR@HTML@SquareSolid}{\LWR@bbdingsymbol{147} {25A0}}
+\newcommand{\LWR@HTML@SquareShadowBottomRight}{\LWR@bbdingsymbol{150} {2751}}
+\newcommand{\LWR@HTML@SquareShadowTopRight}{\LWR@bbdingsymbol{151} {2752}}
+\newcommand{\LWR@HTML@SquareShadowTopLeft}{\LWR@bbdingsymbol{152} {2752}}
+\newcommand{\LWR@HTML@SquareCastShadowBottomRight}{\LWR@bbdingsymbol{153} {2751}}
+\newcommand{\LWR@HTML@SquareCastShadowTopRight}{\LWR@bbdingsymbol{154} {2752}}
+\newcommand{\LWR@HTML@SquareCastShadowTopLeft}{\LWR@bbdingsymbol{155} {2752}}
+\newcommand{\LWR@HTML@TriangleUp}{\LWR@bbdingsymbol{156} {25B2}}
+\newcommand{\LWR@HTML@TriangleDown}{\LWR@bbdingsymbol{157} {25BC}}
+\newcommand{\LWR@HTML@DiamondSolid}{\LWR@bbdingsymbol{160} {25C6}}
+\newcommand{\LWR@HTML@OrnamentDiamondSolid}{\LWR@bbdingsymbol{161} {2756}}
+\newcommand{\LWR@HTML@HalfCircleRight}{\LWR@bbdingsymbol{162} {25D7}}
+\newcommand{\LWR@HTML@HalfCircleLeft}{\LWR@bbdingsymbol{163} {25D6}}
+\newcommand{\LWR@HTML@RectangleThin}{\LWR@bbdingsymbol{164} {2758}}
+\newcommand{\LWR@HTML@Rectangle}{\LWR@bbdingsymbol{165} {2759}}
+\newcommand{\LWR@HTML@RectangleBold}{\LWR@bbdingsymbol{166} {275A}}
+\newcommand{\LWR@HTML@ArrowBoldRightStrobe}{\LWR@bbdingsymbol{167} {27A0}}
+\newcommand{\LWR@HTML@ArrowBoldUpRight}{\LWR@bbdingsymbol{170} {27A6}}
+\newcommand{\LWR@HTML@ArrowBoldDownRight}{\LWR@bbdingsymbol{171} {27A5}}
+\newcommand{\LWR@HTML@ArrowBoldRightShort}{\LWR@bbdingsymbol{172} {27A7}}
+\newcommand{\LWR@HTML@ArrowBoldRightCircled}{\LWR@bbdingsymbol{173} {27B2}}
+
+
+\LWR@formatted{ScissorRightBrokenBottom}
+\LWR@formatted{ScissorRight}
+\LWR@formatted{ScissorRightBrokenTop}
+\LWR@formatted{ScissorLeftBrokenBottom}
+\LWR@formatted{ScissorLeft}
+\LWR@formatted{ScissorLeftBrokenTop}
+\LWR@formatted{ScissorHollowRight}
+\LWR@formatted{ScissorHollowLeft}
+\LWR@formatted{Phone}
+\LWR@formatted{PhoneHandset}
+\LWR@formatted{Tape}
+\LWR@formatted{Plane}
+\LWR@formatted{Envelope}
+\LWR@formatted{HandCuffRight}
+\LWR@formatted{HandCuffLeft}
+\LWR@formatted{HandCuffRightUp}
+\LWR@formatted{HandCuffLeftUp}
+\LWR@formatted{HandRight}
+\LWR@formatted{HandLeft}
+\LWR@formatted{HandRightUp}
+\LWR@formatted{HandLeftUp}
+\LWR@formatted{Peace}
+\LWR@formatted{HandPencilLeft}
+\LWR@formatted{PencilRight}
+\LWR@formatted{PencilLeft}
+\LWR@formatted{PencilRightUp}
+\LWR@formatted{PencilLeftUp}
+\LWR@formatted{PencilRightDown}
+\LWR@formatted{PencilLeftDown}
+\LWR@formatted{NibRight}
+\LWR@formatted{NibLeft}
+\LWR@formatted{NibSolidRight}
+\LWR@formatted{NibSolidLeft}
+\LWR@formatted{Checkmark}
+\LWR@formatted{CheckmarkBold}
+\LWR@formatted{XSolid}
+\LWR@formatted{XSolidBold}
+\LWR@formatted{XSolidBrush}
+\LWR@formatted{PlusOutline}
+\LWR@formatted{Plus}
+\LWR@formatted{PlusCenterOpen}
+\LWR@formatted{PlusThinCenterOpen}
+\LWR@formatted{Cross}
+\LWR@formatted{CrossOpenShadow}
+\LWR@formatted{CrossOutline}
+\LWR@formatted{CrossBoldOutline}
+\LWR@formatted{CrossMaltese}
+\LWR@formatted{DavidStarSolid}
+\LWR@formatted{DavidStar}
+\LWR@formatted{FourAsterisk}
+\LWR@formatted{JackStar}
+\LWR@formatted{JackStarBold}
+\LWR@formatted{CrossClowerTips}
+\LWR@formatted{FourStar}
+\LWR@formatted{FourStarOpen}
+\LWR@formatted{FiveStarLines}
+\LWR@formatted{FiveStar}
+\LWR@formatted{FiveStarOpen}
+\LWR@formatted{FiveStarOpenCircled}
+\LWR@formatted{FiveStarCenterOpen}
+\LWR@formatted{FiveStarOpenDotted}
+\LWR@formatted{FiveStarOutline}
+\LWR@formatted{FiveStarOutlineHeavy}
+\LWR@formatted{FiveStarConvex}
+\LWR@formatted{FiveStarShadow}
+\LWR@formatted{AsteriskBold}
+\LWR@formatted{AsteriskCenterOpen}
+\LWR@formatted{AsteriskThin}
+\LWR@formatted{AsteriskThinCenterOpen}
+\LWR@formatted{EightStarTaper}
+\LWR@formatted{EightStarConvex}
+\LWR@formatted{SixStar}
+\LWR@formatted{EightStar}
+\LWR@formatted{EightStarBold}
+\LWR@formatted{TwelweStar}
+\LWR@formatted{SixteenStarLight}
+\LWR@formatted{SixFlowerPetalRemoved}
+\LWR@formatted{SixFlowerOpenCenter}
+\LWR@formatted{Asterisk}
+\LWR@formatted{SixFlowerAlternate}
+\LWR@formatted{FiveFlowerPetal}
+\LWR@formatted{SixFlowerPetalDotted}
+\LWR@formatted{FiveFlowerOpen}
+\LWR@formatted{EightFlowerPetal}
+\LWR@formatted{SunshineOpenCircled}
+\LWR@formatted{SixFlowerAltPetal}
+\LWR@formatted{FourClowerOpen}
+\LWR@formatted{FourClowerSolid}
+\LWR@formatted{AsteriskRoundedEnds}
+\LWR@formatted{EightFlowerPetalRemoved}
+\LWR@formatted{EightAsterisk}
+\LWR@formatted{SixFlowerRemovedOpenPetal}
+\LWR@formatted{SparkleBold}
+\LWR@formatted{Sparkle}
+\LWR@formatted{SnowflakeChevron}
+\LWR@formatted{SnowflakeChevronBold}
+\LWR@formatted{Snowflake}
+\LWR@formatted{CircleSolid}
+\LWR@formatted{Ellipse}
+\LWR@formatted{EllipseSolid}
+\LWR@formatted{CircleShadow}
+\LWR@formatted{EllipseShadow}
+\LWR@formatted{Square}
+\LWR@formatted{SquareSolid}
+\LWR@formatted{SquareShadowBottomRight}
+\LWR@formatted{SquareShadowTopRight}
+\LWR@formatted{SquareShadowTopLeft}
+\LWR@formatted{SquareCastShadowBottomRight}
+\LWR@formatted{SquareCastShadowTopRight}
+\LWR@formatted{SquareCastShadowTopLeft}
+\LWR@formatted{TriangleUp}
+\LWR@formatted{TriangleDown}
+\LWR@formatted{DiamondSolid}
+\LWR@formatted{OrnamentDiamondSolid}
+\LWR@formatted{HalfCircleRight}
+\LWR@formatted{HalfCircleLeft}
+\LWR@formatted{RectangleThin}
+\LWR@formatted{Rectangle}
+\LWR@formatted{RectangleBold}
+\LWR@formatted{ArrowBoldRightStrobe}
+\LWR@formatted{ArrowBoldUpRight}
+\LWR@formatted{ArrowBoldDownRight}
+\LWR@formatted{ArrowBoldRightShort}
+\LWR@formatted{ArrowBoldRightCircled}
+% \end{macrocode}
+%
+% \iffalse
+%</bbding>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*biblatex>
+% \fi
+%
+% \part{lwarp-biblatex.sty}
+%
+% \section{biblatex}
+%
+% \credits{Philipp Lehman}
+%
+% \DescribePackage{biblatex}
+% When \pkg{biblatex} is used, modifications from \pkg{newfloat} may have to
+% be undone.
+%
+% \changes{v0.64}{2018/12/08}{\pkg{biblatex}: Added patch for C\TeX.}
+%
+% \codehtml
+%
+% \begin{enumerate}
+% \item \pkg{lwarp} uses \pkg{newfloat}.
+% \item For classes with chapters which \pkg{newfloat} does not know about,
+% such as C\TeX-related classes, \pkg{newfloat} may modify
+% \cs{addtocontents}.
+% \item \pkg{biblatex}, though, wants to patch \cs{addtocontents},
+% which causes an error if \cs{addtocontents} has been changed.
+% \item Therefore, \cs{addtocontents} is restored to its original here,
+% since \pkg{biblatex} is about to be loaded.
+% \item This means that the \pkg{newfloat}'s \optn{chapterlistsgaps}
+% option may no longer work.
+% \end{enumerate}
+%
+% \begin{macrocode}
+\ifdef{\newfloat@addtocontents@ORI}{
+ \let\addtocontents\newfloat@addtocontents@ORI
+}{}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{biblatex}[2018/03/04]
+% \end{macrocode}
+%
+%
+% \iffalse
+%</biblatex>
+% \fi
+%
+%
+%
+% \iffalse
+%<*bibunits>
+% \fi
+%
+% \part{lwarp-bibunits.sty}
+
+% \section{bibunits}
+%
+% \credits{Thorsten Hansen}
+%
+% \DescribePackage{bibunits}
+% \pkg{bibunits} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.54}{2018/03/09}{\pkg{bibunits}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{bibunits}[2004/05/12]
+% \end{macrocode}
+
+% \begin{macrocode}
+\def\bu@bibdata{\BaseJobname}
+% \end{macrocode}
+
+% \iffalse
+%</bibunits>
+% \fi
+%
+%
+%
+% \iffalse
+%<*bigdelim>
+% \fi
+%
+% \part{lwarp-bigdelim.sty}
+%
+% \section{bigdelim}
+% \label{sec:bigdelim}
+%
+% \credits{Piet van Oostrum, Øystein Bache, Jerry Leichter}
+%
+% \DescribePackage{bigdelim}
+% \pkg{bigdelim} is used as-is for print or \env{lateximage}, and
+% patched for \HTML.
+%
+% The delimiters are displayed in \HTML\
+% by printing the delimiter, the text, and a thick border across the side of
+% the \cs{multirow} which indicates the actual height of the delimiter.
+% The delimiter character is given a \element{span} class of \attribute{ldelim} or
+% \attribute{rdelim}, and the default \CSS\ sets this to \attribute{font-size:200\%}
+%
+% \limitsbigdelim\bigskip
+%
+% \changes{v0.39}{2017/08/31}{\pkg{bigdelim}: Added.}
+% \changes{v0.40}{2017/09/09}{\pkg{bigdelim}: Improved documentation.}
+% \changes{v0.57}{2018/06/01}{\pkg{bigdelim}: Improved print/\HTML\ output selection.}
+%
+% \codehtml
+%
+% First, remove the temporary definitions of \cs{ldelim} and \cs{rdelim}, which were
+% previously defined for tabular scanning in case \pkg{bigdelim} was not loaded:
+% \begin{macrocode}
+\let\ldelim\relax
+\let\rdelim\relax
+% \end{macrocode}
+%
+% Next, load the package's new definitions:
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{bigdelim}[2018/08/03]
+% \end{macrocode}
+%
+%
+% \marg{1:delimiter} \marg{2:\#rows} \marg{3:width} \oarg{4:text}
+% \marginpar{\hfill\cs{ldelim}}\marginpar{\hfill\cs{rdelim}}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@ldelim}{m m m O{}}{%
+\renewcommand{\LWR@multirowborder}{right}%
+\multirow{#2}{#3}{#4 \InlineClass{ldelim}{#1}}%
+}
+
+\LWR@formatted{ldelim}
+
+\NewDocumentCommand{\LWR@HTML@rdelim}{m m m O{}}{%
+\renewcommand{\LWR@multirowborder}{left}%
+\multirow{#2}{#3}{\InlineClass{rdelim}{#1} #4}%
+}
+
+\LWR@formatted{rdelim}
+% \end{macrocode}
+%
+% \iffalse
+%</bigdelim>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*bigfoot>
+% \fi
+%
+% \part{lwarp-bigfoot.sty}
+%
+% \section{bigfoot}
+%
+% \DescribePackage{bigfoot}
+% \pkg{bigfoot} is emulated.
+%
+% \changes{v0.68}{2019/03/05}{\pkg{bigfoot}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{bigfoot}[2015/08/30]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\RequirePackage{manyfoot}
+\RequirePackage{perpage}
+
+\def\RestyleFootnote#1#2{}
+\def\FootnoteSpecific#1{}
+\def\DefineFootnoteStack#1{}
+\def\PushFootnoteMark#1{}
+\def\PopFootnoteMark#1{}
+\def\hfootfraction{0.9}
+\def\vtypefraction{0.7}
+\def\FootnoteMinimum{1sp}
+\def\FootnoteMainMinimum{0pt}
+\newcount\bigfoottolerance
+\bigfoottolerance=100
+\providecommand\footnotecarryratio{2}
+% \end{macrocode}
+%
+% \iffalse
+%</bigfoot>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*bigstrut>
+% \fi
+%
+% \part{lwarp-bigstrut.sty}
+%
+% \section{bigstrut}
+%
+% \credits{Piet van Oostrum, Øystein Bache, Jerry Leichter}
+%
+% \DescribePackage{bigstrut}
+% \pkg{bigstrut} is used as-is for print or \env{lateximage}, and
+% patched for \HTML.
+%
+% \changes{v0.39}{2017/08/31}{\pkg{bigstrut}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{bigstrut}[2018/08/03]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LetLtxMacro\LWR@origbigstrut\bigstrut
+
+\renewcommand\bigstrut[1][x]{}
+
+\appto\LWR@restoreorigformatting{%
+\LetLtxMacro\bigstrut\LWR@origbigstrut%
+}
+% \end{macrocode}
+%
+%
+% \iffalse
+%</bigstrut>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*bitpattern>
+% \fi
+%
+% \part{lwarp-bitpattern.sty}
+%
+% \section{bitpattern}
+%
+% \credits{Jean-Marc Bourguet}
+%
+% \DescribePackage{bitpattern}
+% \pkg{bitpattern} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.62}{2018/10/16}{\pkg{bitpattern}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{bitpattern}[2015/12/11]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\xpatchcmd{\bitpattern}
+ {\begingroup}
+ {\begin{lateximage}[(-bitpattern-~\packagediagramname)]}
+ {}
+ {\LWR@patcherror{bitpattern}{bitpattern}}
+
+\xpatchcmd{\bp@Done}
+ {\endgroup}
+ {\end{lateximage}}
+ {}
+ {\LWR@patcherror{bitpattern}{bp@Done}}
+% \end{macrocode}
+%
+% \iffalse
+%</bitpattern>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*blowup>
+% \fi
+%
+% \part{lwarp-blowup.sty}
+%
+% \section{blowup}
+%
+% \DescribePackage{blowup}
+% \pkg{blowup} is ignored.
+%
+% \changes{v0.47}{2018/01/25}{\pkg{blowup}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{blowup}[2018/01/02]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*\blowUp[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</blowup>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*booklet>
+% \fi
+%
+% \part{lwarp-booklet.sty}
+%
+% \section{booklet}
+%
+% \credits{Peter Wilson}
+%
+% \DescribePackage{booklet}
+% \pkg{booklet} is ignored.
+%
+% \changes{v0.60}{2018/09/18}{\pkg{booklet}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{booklet}[2009/09/02]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newdimen\pageseplength
+\newdimen\pagesepwidth
+\newdimen\pagesepoffset
+\newif\ifsidebyside \sidebysidetrue
+\newif\ifuselandscape \uselandscapefalse
+\newif\ifprintoption \printoptionfalse
+\newcommand*{\pagespersignature}[1]{}
+\def\magstepminus#1{}
+\newcommand*{\target}[3]{}
+\newcommand*{\source}[3]{}
+\newcommand*{\setpdftargetpages}{}
+\newcommand*{\setdvipstargetpages}{}
+\newcommand*{\targettopbottom}{}
+\newcommand*{\twoupemptypage}{}
+\newcommand*{\twoupclearpage}{}
+\newcommand*{\checkforlandscape}{}
+% \end{macrocode}
+%
+% \iffalse
+%</booklet>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*bookmark>
+% \fi
+
+% \part{lwarp-bookmark.sty}
+
+% \section{bookmark}
+%
+% \credits{Heiko Oberdiek}
+%
+% \DescribePackage{bookmark}
+% \pkg{bookmark} is ignored.
+
+% \changes{v0.20}{2017/01/03}{\pkg{bookmark}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-bookmark}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{bookmark}[2016/05/17]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\bookmarksetup}[1]{}
+\newcommand*{\bookmarksetupnext}[1]{}
+\newcommand*{\bookmark}[2][]{}
+\newcommand*{\bookmarkdefinestyle}[2]{}
+\newcommand*{\bookmarkget}[1]{}
+\newcommand{\BookmarkAtEnd}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</bookmark>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*booktabs>
+% \fi
+%
+% \part{lwarp-booktabs.sty}
+%
+% \section{booktabs}
+% \label{sec:booktabs}
+%
+% \credits{Simon Fear}
+%
+% \DescribePackage{booktabs}
+% \pkg{booktabs} is emulated during \HTML\ output, and
+% used as-is during print output and inside an \HTML\ \env{lateximage}.
+%
+% \changes{v0.34}{2017/08/08}{\pkg{booktabs}: Works inside \env{lateximage}.}
+%
+% \codehtml
+%
+% First, forget the placeholder macros:
+% \begin{macrocode}
+\LetLtxMacro\toprule\relax
+\LetLtxMacro\midrule\relax
+\LetLtxMacro\cmidrule\cline
+\LetLtxMacro\bottomrule\relax
+\LetLtxMacro\addlinespace\relax
+\LetLtxMacro\morecmidrules\relax
+\LetLtxMacro\specialrule\relax
+
+\LWR@ProvidesPackagePass{booktabs}[2016/04/27]
+% \end{macrocode}
+%
+% \changes{v0.41}{2017/10/03}{Improved rules.}
+% \changes{v0.42}{2017/10/19}{If \progcode{FormatWP} force explicit border.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\LWR@HTML@toprule}{o d()}%
+ {%
+ \IfValueTF{#1}%
+ {\LWR@docmidrule[#1](){1-\arabic{LWR@tabletotalLaTeXcols}}}%
+ {%
+ \ifbool{FormatWP}%
+ {\LWR@docmidrule[#1](){1-\arabic{LWR@tabletotalLaTeXcols}}}%
+ {\global\booltrue{LWR@doingtbrule}}%
+ }%
+ \LWR@getmynexttoken}
+
+\LWR@expandableformatted{toprule}
+
+\DeclareDocumentCommand{\LWR@HTML@midrule}{o d()}%
+ {%
+ \IfValueTF{#1}%
+ {\LWR@docmidrule[#1](){1-\arabic{LWR@tabletotalLaTeXcols}}}%
+ {%
+ \ifbool{FormatWP}%
+ {\LWR@docmidrule[#1](){1-\arabic{LWR@tabletotalLaTeXcols}}}%
+ {\addtocounter{LWR@hlines}{1}}%
+ }%
+ \LWR@getmynexttoken}
+
+\LWR@expandableformatted{midrule}
+
+\DeclareDocumentCommand{\LWR@HTML@cmidrule}{O{\LWR@cmidrulewidth} d() m}{%
+ \LWR@docmidrule[#1](#2){#3}%
+ \LWR@getmynexttoken%
+}%
+
+\LWR@expandableformatted{cmidrule}
+
+\DeclareDocumentCommand{\LWR@HTML@bottomrule}{o d()}{%
+ \IfValueTF{#1}%
+ {\LWR@docmidrule[#1](){1-\arabic{LWR@tabletotalLaTeXcols}}}%
+ {%
+ \ifbool{FormatWP}%
+ {\LWR@docmidrule[#1](){1-\arabic{LWR@tabletotalLaTeXcols}}}%
+ {\global\booltrue{LWR@doingtbrule}}%
+ }%
+ \LWR@getmynexttoken%
+}%
+
+\LWR@expandableformatted{bottomrule}
+
+\DeclareDocumentCommand{\LWR@HTML@addlinespace}{o}{}%
+
+\LWR@expandableformatted{addlinespace}
+
+\DeclareDocumentCommand{\LWR@HTML@morecmidrules}{}{}%
+
+\LWR@expandableformatted{morecmidrules}
+
+\DeclareDocumentCommand{\LWR@HTML@specialrule}{m m m d()}%
+ {\LWR@docmidrule[#1](){1-\arabic{LWR@tabletotalLaTeXcols}}\LWR@getmynexttoken}%
+
+\LWR@expandableformatted{specialrule}
+% \end{macrocode}
+%
+% \iffalse
+%</booktabs>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*bophook>
+% \fi
+%
+% \part{lwarp-bophook.sty}
+%
+% \section{bophook}
+%
+% \DescribePackage{bophook}
+% \pkg{bophook} is ignored.
+%
+% \changes{v0.60}{2018/09/19}{\pkg{bophook}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{bophook}[2001/03/29]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\AtBeginPage}[1]{}
+\newcommand*{\PageLayout}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</bophook>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*bounddvi>
+% \fi
+%
+% \part{lwarp-bounddvi.sty}
+%
+% \section{bounddvi}
+%
+% \DescribePackage{bounddvi}
+% \pkg{bounddvi} is ignored.
+%
+% \changes{v0.65}{2018/12/18}{\pkg{bounddvi}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{bounddvi}[2016/12/28]
+% \end{macrocode}
+%
+% \iffalse
+%</bounddvi>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*boxedminipage2e>
+% \fi
+
+% \part{lwarp-boxedminipage2e.sty}
+
+% \section{boxedminipage2e}
+%
+% \credits{Scott Pakin}
+%
+% \DescribePackage{boxedminipage2e}
+% \pkg{boxedminipage2e} is emulated for \HTML, and used as-is for \env{lateximage}s.
+%
+% \changes{v0.34}{2017/07/26}{\pkg{boxedminipage2e}: Added.}
+% \changes{v0.72}{2019/06/07}{\pkg{boxedminipage2e}: Added support for \env{lateximage}s.}
+% \changes{v0.73}{2019/06/24}{\pkg{boxedminipage2e}: Fix: Paragraph tags.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-boxedminipage2e}:
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{boxedminipage2e}[2015/03/09]
+% \end{macrocode}
+
+% \begin{macrocode}
+\newenvironment{LWR@HTML@boxedminipage}{%
+ \LWR@stoppars%
+ \begin{BlockClass}{framebox}%
+ \minipage%
+}
+{%
+ \endminipage%
+ \end{BlockClass}%
+ \LWR@startpars%
+}
+\LWR@formattedenv{boxedminipage}
+% \end{macrocode}
+
+% \iffalse
+%</boxedminipage2e>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*breakurl>
+% \fi
+%
+% \part{lwarp-breakurl.sty}
+%
+% \section{breakurl}
+%
+% \credits{Vilar Camara Neto}
+%
+% \DescribePackage{breakurl}
+% \pkg{breakurl} is emulated.
+%
+% \changes{v0.43}{2017/10/31}{\pkg{breakurl}: Added.}
+% \changes{v0.45}{2017/12/29}{\pkg{breakurl}: Fix: Underscore in \URL.}
+% \changes{v0.52}{2018/03/26}{\pkg{breakurl}: Fix: \progcode{\#}, \progcode{\%}, \progcode{\&}, \progcode{\~}, \progcode{\_} in \URL.}
+% \changes{v0.57}{2018/06/05}{\pkg{breakurl}: Fix: Text catcodes.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{breakurl}[2013/04/10]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LetLtxMacro\burl\url
+
+\NewDocumentCommand{\LWR@burlaltb}{O{} +m m}{%
+\LWR@ensuredoingapar%
+\LWR@subhyperref{#2}%
+\LWR@subhyperreftext{#3}%
+\endgroup% restore catcodes
+}
+
+\newrobustcmd*{\burlalt}{%
+\begingroup%
+\catcode`\#=12%
+\catcode`\%=12%
+\catcode`\&=12%
+\catcode`\~=12%
+\catcode`\_=12%
+\LWR@burlaltb%
+}
+
+\LetLtxMacro\urlalt\burlalt
+% \end{macrocode}
+%
+% \iffalse
+%</breakurl>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*breqn>
+% \fi
+%
+% \part{lwarp-breqn.sty}
+%
+% \section{breqn}
+%
+% \credits{Michael J. Downes, Morten Høgholm}
+%
+% \DescribePackage{breqn}
+% \pkg{breqn} is patched for use by \pkg{lwarp}.
+%
+% \env{darray} is not supported.
+% \trouble[\env{darray}]{breqn=\pkg{breqn}>darray}
+%
+% MathJax does not support \pkg{breqn}.
+% \trouble[\brand{MathJax}]{breqn=\pkg{breqn}>MathJax=\brand{MathJax}}
+% \trouble{MathJax=\brand{MathJax}>breqn=\pkg{breqn}}
+%
+% \changes{v0.59}{2018/07/25}{\pkg{breqn}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{breqn}[2017/01/27]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\setkeys{breqn}{spread={5pt}}
+
+\def\eqnumside{R}
+% \def\eqnumplace{T}
+
+\BeforeBeginEnvironment{dmath}{
+ \begin{BlockClass}{displaymathnumbered}
+ \LWR@newautoidanchor%
+ \booltrue{LWR@indisplaymathimage}%
+ \begin{lateximage}[-breqn dmath- \mathimagename]
+}
+
+\AfterEndEnvironment{dmath}{
+ \end{lateximage}\end{BlockClass}
+}
+
+\BeforeBeginEnvironment{dmath*}{
+ \begin{BlockClass}{displaymath}
+ \LWR@newautoidanchor%
+ \booltrue{LWR@indisplaymathimage}%
+ \begin{lateximage}[-breqn dmath*- \mathimagename]
+}
+
+\AfterEndEnvironment{dmath*}{
+ \end{lateximage}\end{BlockClass}
+}
+
+\BeforeBeginEnvironment{dseries}{
+ \begin{BlockClass}{displaymathnumbered}
+ \LWR@newautoidanchor%
+ \booltrue{LWR@indisplaymathimage}%
+ \begin{lateximage}[-breqn dseries- \mathimagename]
+}
+
+\AfterEndEnvironment{dseries}{
+ \end{lateximage}\end{BlockClass}
+}
+
+\BeforeBeginEnvironment{dseries*}{
+ \begin{BlockClass}{displaymath}
+ \LWR@newautoidanchor%
+ \booltrue{LWR@indisplaymathimage}%
+ \begin{lateximage}[-breqn dseries*- \mathimagename]
+}
+
+\AfterEndEnvironment{dseries*}{
+ \end{lateximage}\end{BlockClass}
+}
+
+\BeforeBeginEnvironment{dgroup}{
+ \begin{BlockClass}{displaymath}
+ \LWR@newautoidanchor%
+ \booltrue{LWR@indisplaymathimage}%
+ \begin{lateximage}[-breqn dgroup- \mathimagename]
+}
+
+\AfterEndEnvironment{dgroup}{
+ \end{lateximage}\end{BlockClass}
+}
+
+\BeforeBeginEnvironment{dgroup*}{
+ \begin{BlockClass}{displaymath}
+ \LWR@newautoidanchor%
+ \booltrue{LWR@indisplaymathimage}%
+ \begin{lateximage}[-breqn dgroup*- \mathimagename]
+}
+
+\AfterEndEnvironment{dgroup*}{
+ \end{lateximage}\end{BlockClass}
+}
+% \end{macrocode}
+%
+% \iffalse
+%</breqn>
+% \fi
+%
+%
+%
+% \iffalse
+%<*bsheaders>
+% \fi
+%
+% \part{lwarp-bsheaders.sty}
+%
+% \section{bsheaders}
+%
+% \DescribePackage{bsheaders}
+% \pkg{bsheaders} is ignored.
+%
+% \changes{v0.64}{2018/12/07}{\pkg{bsheaders}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{bsheaders}[1997/10/06]
+% \end{macrocode}
+%
+% \iffalse
+%</bsheaders>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*bxpapersize>
+% \fi
+%
+% \part{lwarp-bxpapersize.sty}
+%
+% \section{bxpapersize}
+%
+% \DescribePackage{bxpapersize}
+% \pkg{bxpapersize} is ignored.
+%
+% \changes{v0.59}{2018/09/06}{\pkg{bxpapersize}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{bxpapersize}[2017/10/08]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\providecommand*\papersizesetup{\bxpapersizesetup}
+\newcommand*\bxpapersizesetup[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</bxpapersize>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*bytefield>
+% \fi
+%
+% \part{lwarp-bytefield.sty}
+
+% \section{bytefield}
+%
+% \credits{Scott Pakin}
+%
+% \DescribePackage{bytefield}
+% \pkg{bytefield} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.50}{2018/02/22}{\pkg{bytefield}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{bytefield}[2017/09/15]
+% \end{macrocode}
+
+% \begin{macrocode}
+\BeforeBeginEnvironment{bytefield}{\begin{lateximage}[(-bytefield-~\packagediagramname)]}
+
+\AfterEndEnvironment{bytefield}{\end{lateximage}}
+% \end{macrocode}
+
+% \iffalse
+%</bytefield>
+% \fi
+%
+%
+%
+% \iffalse
+%<*cancel>
+% \fi
+%
+% \part{lwarp-cancel.sty}
+%
+% \section{cancel}
+%
+% \DescribePackage{cancel}
+% \pkg{cancel} is used as-is for SVG math, and emulated for \HTML\ text output.
+%
+% \changes{v0.44}{2017/11/16}{\pkg{cancel}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@origRequirePackage{lwarp-xcolor}% for \convertcolorspec
+\LWR@ProvidesPackagePass{cancel}[2013/04/12]
+% \end{macrocode}
+%
+%
+%
+% \cs{cancelto} is math-only, so is used as-is.
+% \begin{macrocode}
+\LetLtxMacro\LWR@origcancel\cancel
+\LetLtxMacro\LWR@origbcancel\bcancel
+\LetLtxMacro\LWR@origxcancel\xcancel
+
+\appto\LWR@restoreorigformatting{%
+\LetLtxMacro\cancel\LWR@origcancel%
+\LetLtxMacro\bcancel\LWR@origbcancel%
+\LetLtxMacro\xcancel\LWR@origxcancel%
+}
+% \end{macrocode}
+
+
+% \begin{noindmacro}{\LWR@cancelcolor}
+% \marg{text} \marg{color} \marg{class} \marg{colorstyle} \marg{FormatWPstyle}
+%
+% Add colors if not empty:
+% \begin{macrocode}
+\newcommand{\LWR@cancelcolor}[5]{%
+\ifcsempty{#2}%
+{\InlineClass(#5){#3}{#1}}%
+{\LWR@htmlspanclass[#5;#4:\LWR@origpound\LWR@tempcolor]{#3}{#1}}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\cancel} \marg{text}
+% \begin{macrocode}
+\DeclareRobustCommand{\cancel}[1]{%
+\begingroup%
+\CancelColor%
+\LWR@findcurrenttextcolor%
+\color{black}%
+\LWR@cancelcolor{#1}{LWR@tempcolor}{sout}{text-decoration-color}%
+ {text-decoration:line-through}%
+\endgroup%
+}
+
+\LetLtxMacro\bcancel\cancel
+\LetLtxMacro\xcancel\cancel
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \iffalse
+%</cancel>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*canoniclayout>
+% \fi
+%
+% \part{lwarp-canoniclayout.sty}
+%
+% \section{canoniclayout}
+%
+% \DescribePackage{canoniclayout}
+% \pkg{canoniclayout} is ignored.
+%
+% \changes{v0.59}{2018/07/10}{\pkg{canoniclayout}: Added.}
+%
+% \codehtml
+s%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{canoniclayout}[2011/11/05]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\currentfontletters}{}
+\newcommand*{\charactersperpage}{}
+% \end{macrocode}
+%
+% \iffalse
+%</canoniclayout>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*caption>
+% \fi
+%
+% \part{lwarp-caption.sty}
+
+% \section{caption}
+%
+% \credits{Axel Sommerfeldt}
+%
+% \DescribePackage{caption}
+% \pkg{caption} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.47}{2018/01/25}{\pkg{caption}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{caption}[2018/10/05]
+% \end{macrocode}
+
+% \begin{macrocode}
+\renewcommand\caption@ibox[3]{%
+ \@testopt{\caption@iibox{#1}{#2}{#3}}{%
+% \wd\@tempboxa%
+ \linewidth% lwarp
+ }%
+% \LWR@traceinfo{caption@ibox: done}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\long\def\caption@iibox#1#2#3[#4]{%
+ \@testopt{\caption@iiibox{#1}{#2}{#3}{#4}}\captionbox@hj@default
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\long\def\caption@iiibox#1#2#3#4[#5]#6{%
+% \setbox\@tempboxa\hbox{#6}%
+ \begingroup
+ #1*% set \caption@position
+ \caption@iftop{%
+ \LWR@traceinfo{caption@iiibox top}%
+ \endgroup
+ \parbox[t]{#4}{%
+ #1\relax
+ \caption@setposition t%
+% \vbox{\caption#2{#3}}%
+ {\caption#2{#3}}% lwarp
+% \captionbox@hrule
+% \csname caption@hj@#5\endcsname
+% \unhbox\@tempboxa
+ #6% lwarp
+ }%
+ }{%
+ \LWR@traceinfo{caption@iiibox bottom}%
+ \endgroup
+ \parbox[b]{#4}{%
+ #1\relax
+ \caption@setposition b%
+% \csname caption@hj@#5\endcsname
+% \unhbox\@tempboxa
+ #6% lwarp
+% \captionbox@hrule
+% \vtop{\caption#2{#3}}}%
+ {\caption#2{#3}}% lwarp
+ }%
+ }%
+\LWR@traceinfo{caption@iiibox: done}%
+}
+
+% \def\caption@caption{%
+% \caption@iftype
+% {%
+% \caption@checkgrouplevel\@empty\caption
+% \caption@star
+% {\caption@refstepcounter\@captype}%
+% {\caption@dblarg{\@caption\@captype}}}%
+% {\caption@Error{\noexpand\caption outside float}%
+% \caption@gobble}%
+% }
+
+\long\def\caption@@caption#1[#2]#3{%
+% \end{macrocode}
+% \begin{macrocode}
+ \ifcaption@star
+ \else
+ \caption@prepareanchor{#1}{#2}%
+ \memcaptioninfo{#1}{\csname the#1\endcsname}{#2}{#3}%
+ \@nameuse{nag@hascaptiontrue}%
+ \fi
+% \end{macrocode}
+% \begin{macrocode}
+ \par
+ \caption@beginex{#1}{#2}{#3}%
+ \caption@setfloatcapt{%
+ \caption@boxrestore
+ \if@minipage
+ \@setminipage
+ \fi
+ \caption@normalsize
+% \end{macrocode}
+% \changes{v0.73}{2019/07/11}{\pkg{caption}: Fix for starred captions.}
+% \begin{macrocode}
+ \ifcaption@star
+ \let\caption@makeanchor\@firstofone
+ #3% lwarp
+ \else% lwarp
+ \@makecaption{\csname fnum@#1\endcsname}%
+ {\ignorespaces\caption@makeanchor{#3}}%
+ \fi% lwarp
+% \end{macrocode}
+% \changes{v0.70}{2019/03/24}{\pkg{caption}: Fix: Extra par tags.}
+% \begin{macrocode}
+% \par
+ \caption@if@minipage\@minipagetrue\@minipagefalse}%
+ \caption@end%
+}
+% \end{macrocode}
+
+% \begin{noindmacro}{\caption@@@make}
+% \marg{caption label} \marg{caption text}
+% \begin{macrocode}
+\renewcommand\caption@@@make[2]{%
+\LWR@traceinfo{caption@@@make}%
+% \sbox\@tempboxa{#1}%
+% \ifdim\wd\@tempboxa=\z@
+% \let\caption@lsep\relax
+% \fi
+ \caption@ifempty{#2}{%
+ \let\caption@lsep\@empty
+ \let\caption@tfmt\@firstofone
+ }%
+ \caption@applyfont
+% \end{macrocode}
+% \cs{caption@fmt} with \optn{plain} format is defined as |{#1#2#3\par}|:
+% \begin{macrocode}
+% \caption@fmt
+ {\ifcaption@star\else
+ \begingroup
+ \captionlabelfont
+ #1%
+ \endgroup
+ \fi}%
+ {\ifcaption@star\else
+ \begingroup
+ \caption@iflf\captionlabelfont
+ \relax
+ \caption@lsep
+ \endgroup
+ \fi}%
+ {{%
+ \captiontextfont
+% \caption@ifstrut
+% {\vrule\@height\ht\strutbox\@width\z@}%
+% {}%
+% \nobreak\hskip\z@skip % enable hyphenation
+ \caption@tfmt{#2}%
+% \caption@ifstrut
+% {\ifhmode\@finalstrut\strutbox\fi}%
+% {}%
+ }}%
+\LWR@traceinfo{caption@@@make done}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\caption@@make@} \marg{} \marg{}
+% \begin{macrocode}
+\renewcommand{\caption@@make@}[2]{%
+ \caption@stepthecounter
+ \caption@beginhook
+ \caption@@@make{#1}{#2}%
+ \caption@endhook
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\caption@makecaption}
+% \changes{v0.71}{2019/04/08}{Reduced underfull \cs{hbox} warnings.}
+% \begin{macrocode}
+\long\def\caption@makecaption#1#2{%
+% \caption@iftop
+% {\vskip\belowcaptionskip}%
+% {\caption@rule\vskip\abovecaptionskip}%
+ \caption@@make{#1}{#2}%
+% \caption@iftop
+% {\vskip\abovecaptionskip\caption@rule}%
+% {\vskip\belowcaptionskip}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{macrocode}
+% \DeclareCaptionBox{none}{#2}
+\DeclareCaptionBox{parbox}{%
+#2%
+}
+\DeclareCaptionBox{colorbox}{%
+#2%
+}
+% \end{macrocode}
+
+% \iffalse
+%</caption>
+% \fi
+%
+%
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*cases>
+% \fi
+%
+% \part{lwarp-cases.sty}
+%
+% \section{cases}
+%
+% \credits{Donald Arseneau}
+%
+% \DescribePackage{cases}
+% \pkg{cases} is patched for use by \pkg{lwarp}.
+%
+%
+%
+% MathJax does not support \pkg{cases}.
+% \trouble[\brand{MathJax}]{cases=\pkg{cases}>MathJax=\brand{MathJax}}
+% \trouble{MathJax=\brand{MathJax}>cases=\pkg{cases}}
+%
+% \changes{v0.58}{2018/06/08}{\pkg{cases}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{cases}[2002/05/02]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\BeforeBeginEnvironment{numcases}{
+ \begin{BlockClass}{displaymathnumbered}
+ \LWR@newautoidanchor%
+ \booltrue{LWR@indisplaymathimage}%
+ \begin{lateximage}[-cases- \mathimagename]
+}
+
+\AfterEndEnvironment{numcases}{
+ \end{lateximage}\end{BlockClass}
+}
+
+\BeforeBeginEnvironment{subnumcases}{
+ \begin{BlockClass}{displaymathnumbered}
+ \LWR@newautoidanchor%
+ \booltrue{LWR@indisplaymathimage}%
+ \begin{lateximage}[-cases- \mathimagename]
+}
+
+\AfterEndEnvironment{subnumcases}{
+ \end{lateximage}\end{BlockClass}
+}
+% \end{macrocode}
+%
+% \iffalse
+%</cases>
+% \fi
+%
+%
+%
+% \iffalse
+%<*changebar>
+% \fi
+%
+% \part{lwarp-changebar.sty}
+%
+% \section{changebar}
+%
+% \DescribePackage{changebar}
+% \pkg{changebar} is ignored.
+%
+% \changes{v0.45}{2017/12/15}{\pkg{changebar}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{changebar}[2018/03/09]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\cbstart}{}
+\newcommand*{\cbend}{}
+\newenvironment*{\changebar}{}{}
+\newcommand*{\cbdelete}{}
+\newcommand*{\nochnagebars}{}
+\newcommand*{\cbcolor}[1]{}
+\newlength{\changebarwidth}
+\newlength{\deletebarwidth}
+\newlength{\changebarsep}
+\newcounter{changebargrey}
+% \end{macrocode}
+%
+% \iffalse
+%</changebar>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*changelayout>
+% \fi
+%
+% \part{lwarp-changelayout.sty}
+%
+% \section{changelayout}
+%
+% \credits{Ahmed Musa}
+%
+% \DescribePackage{changelayout}
+% \pkg{changelayout} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.70}{2019/04/02}{\pkg{changelayout}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{changelayout}[2009/10/07]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewrobustcmd\cpl@backtodefaults{}
+
+\renewrobustcmd\cpl@checkifoddpage{%
+ \cpl@oddpagefalse%
+}
+
+\renewrobustcmd\changepagelayout[1]{%
+ \setkeys[KV]{changelay}{#1}%
+}
+
+\renewrobustcmd{\changetextlayout}[1]{\changepagelayout{#1}}
+
+\renewrobustcmd\adjustpagelayout[1]{%
+ \setkeys[KV@X]{changelay}{#1}%
+}
+
+\renewrobustcmd{\adjusttextlayout}[1]{\adjustpagelayout{#1}}
+
+\renewrobustcmd\adjusttextwidth[1]{%
+ \setkeys[KV]{changelay}{#1}%
+ \begin{BlockClass}[color:\LWR@colorstyle{named}{\cpl@textcolor}]{changelayout}
+ \color{\cpl@textcolor}%
+ \cpl@content
+ \end{BlockClass}
+}
+% \end{macrocode}
+%
+% \iffalse
+%</changelayout>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*changepage>
+% \fi
+
+% \part{lwarp-changepage.sty}
+
+% \section{changepage}
+%
+% \credits{Peter Wilson}
+%
+% \DescribePackage{changepage}
+% \pkg{changepage} is ignored.
+%
+% \changes{v0.22}{2017/03/02}{\pkg{changepage}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-changepage}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{changepage}[2009/10/20]
+% \end{macrocode}
+
+% \begin{macrocode}
+\newif\ifoddpage
+\DeclareRobustCommand{\checkoddpage}{\oddpagetrue}
+\DeclareRobustCommand{\changetext}[5]{}
+\DeclareRobustCommand{\changepage}[9]{}
+
+\@ifundefined{adjustwidth}{
+\newenvironment{adjustwidth}[2]{}{}
+\newenvironment{adjustwidth*}[2]{}{}
+}{
+\renewenvironment{adjustwidth}[2]{}{}
+\renewenvironment{adjustwidth*}[2]{}{}
+}
+% \end{macrocode}
+
+% \changes{v0.44}{2017/11/13}{\pkg{changepage}: Additional options.}
+% \changes{v0.47}{2018/01/30}{\pkg{changepage}: Fix for pagecheck macros.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\strictpagecheck}{}{}
+\DeclareDocumentCommand{\easypagecheck}{}{}
+% \end{macrocode}
+
+% \iffalse
+%</changepage>
+% \fi
+%
+%
+%
+% \iffalse
+%<*changes>
+% \fi
+%
+% \part{lwarp-changes.sty}
+%
+% \section{changes}
+%
+% \credits{Ekkart Kleinod}
+%
+% \DescribePackage{changes}
+% \pkg{changes} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.67}{2019/02/15}{\pkg{changes}: Added.}
+% \changes{v0.70}{2019/03/24}{\pkg{changes}: Updated to v3.1.2.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{changes}[2019/01/26]
+% \end{macrocode}
+%
+% \cs{BaseJobname} is added to the label in case \pkg{xr} or \pkg{xr-hyper} are used.
+%
+% \changes{v0.72}{2019/06/05}{\pkg{changes}: Fix references for \pkg{xr}, \pkg{xr-hyper}.}
+% \begin{macrocode}
+\renewcommand{\ChangesListline}[4]{%
+ \IfSubStr{\Changes@loc@show}{#1}{%
+ \LWR@startpars%
+ #2: #3 \qquad
+ \nameref{\BaseJobname-autopage-#4}%
+ \LWR@stoppars%
+ }{}%
+}
+
+\renewcommand{\Changes@summaryline}[4]{%
+ \IfSubStr{\Changes@loc@show}{#1}{%
+ \ifthenelse{\not\equal{\Changes@loc@style}{compactsummary} \or #2 > 0}%
+ {%
+ #3:~#2#4%
+ }{}%
+ }{}%
+}
+
+\xpatchcmd{\listofchanges}
+ {{\changesauthorname: \changesanonymousname}}
+ {{\LWR@textcurrentcolor{\changesauthorname: \changesanonymousname}}}
+ {}
+ {\LWR@patcherror{changes}{listofchanges A}}
+
+\xpatchcmd{\listofchanges}
+ {\changesauthorname: \Changes@InID}
+ {\LWR@textcurrentcolor{\changesauthorname: \Changes@InID}}
+ {}
+ {\LWR@patcherror{changes}{listofchanges B}}
+
+\xpatchcmd{\listofchanges}
+ {(\Changes@InName)}
+ {\LWR@textcurrentcolor{(\Changes@InName)}}
+ {}
+ {\LWR@patcherror{changes}{listofchanges C}}
+
+\xpatchcmd{\listofchanges}
+ {\parbox{\Changes@summary@width}}
+ {}
+ {}
+ {\LWR@patcherror{changes}{listofchanges D}}
+
+\xpatchcmd{\Changes@Markup@comment}
+ {%
+ \ifthenelse{\isAnonymous{#2}}%
+ {\textbf{[\arabic{Changes@commentCount#2}]:} }%
+ {\textbf{[#3~\arabic{Changes@commentCount#2}]:} }%
+ #1%
+ }
+ {%
+ \LWR@textcurrentcolor{% lwarp
+ \ifthenelse{\isAnonymous{#2}}%
+ {\textbf{[\arabic{Changes@commentCount#2}]:} }%
+ {\textbf{[#3~\arabic{Changes@commentCount#2}]:} }%
+ #1%
+ }% lwarp
+ }
+ {}
+ {\LWR@patcherror{changes}{\Changes@Markup@comment A}}
+
+\xpatchcmd{\Changes@Markup@comment}
+ {%
+ \uwave{%
+ \ifthenelse{\isAnonymous{#2}}%
+ {\textbf{[\arabic{Changes@commentCount#2}]:} }%
+ {\textbf{[#3~\arabic{Changes@commentCount#2}]:} }%
+ #1%
+ }%
+ }
+ {%
+ \LWR@textcurrentcolor{% lwarp
+ \uwave{%
+ \ifthenelse{\isAnonymous{#2}}%
+ {\textbf{[\arabic{Changes@commentCount#2}]:} }%
+ {\textbf{[#3~\arabic{Changes@commentCount#2}]:} }%
+ #1%
+ }%
+ }% lwarp
+ }
+ {}
+ {\LWR@patcherror{changes}{\Changes@Markup@comment B}}
+
+\xpatchcmd{\Changes@output}
+ {\Changes@Markup@author{\Changes@output@author{#2}{left}}}
+ {\LWR@textcurrentcolor{\Changes@Markup@author{\Changes@output@author{#2}{left}}}}
+ {}
+ {\LWR@patcherror{changes}{Changes@output A}}
+
+\xpatchcmd{\Changes@output}
+ {%
+ \ifthenelse{\equal{#1}{added}}{\Changes@Markup@added{#3}}{}%
+ \ifthenelse{\equal{#1}{deleted}}{\Changes@Markup@deleted{#4}}{}%
+ \ifthenelse{\equal{#1}{replaced}}{%
+ {\Changes@Markup@added{#3}}\allowbreak\Changes@Markup@deleted{#4}%
+ }{}%
+ \ifthenelse{\equal{#1}{highlight}}{\Changes@Markup@highlight{#3}}{}%
+ }
+ {%
+ \LWR@textcurrentcolor{%
+ \ifthenelse{\equal{#1}{added}}{\Changes@Markup@added{#3}}{}%
+ \ifthenelse{\equal{#1}{deleted}}{\Changes@Markup@deleted{#4}}{}%
+ \ifthenelse{\equal{#1}{replaced}}{%
+ {\Changes@Markup@added{#3}}\allowbreak\Changes@Markup@deleted{#4}%
+ }{}%
+ \ifthenelse{\equal{#1}{highlight}}{\Changes@Markup@highlight{#3}}{}%
+ }%
+ }
+ {}
+ {\LWR@patcherror{changes}{Changes@output B}}
+
+\xpatchcmd{\Changes@output}
+ {\Changes@Markup@author{\Changes@output@author{#2}{right}}}
+ {\LWR@textcurrentcolor{\Changes@Markup@author{\Changes@output@author{#2}{right}}}}
+ {}
+ {\LWR@patcherror{changes}{Changes@output C}}
+% \end{macrocode}
+%
+% \iffalse
+%</changes>
+% \fi
+%
+%
+%
+% \iffalse
+%<*chappg>
+% \fi
+%
+% \part{lwarp-chappg.sty}
+%
+% \section{chappg}
+%
+% \credits{Robin Fairbairns}
+%
+% \DescribePackage{chappg}
+% \pkg{chappg} is ignored.
+%
+% \changes{v0.38}{2017/08/25}{\pkg{chappg}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{chappg}[2006/05/09]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand{\pagenumbering}[2][]{}
+\providecommand{\chappgsep}{--}
+% \end{macrocode}
+%
+% \iffalse
+%</chappg>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*chapterbib>
+% \fi
+%
+% \part{lwarp-chapterbib.sty}
+
+% \section{chapterbib}
+%
+% \credits{Donald Arseneau}
+%
+% \DescribePackage{chapterbib}
+% \pkg{chapterbib} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.48}{2018/02/05}{\pkg{chapterbib}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{chapterbib}[2010/09/18]
+% \end{macrocode}
+
+% \begin{macrocode}
+\xdef\@savedjobname{\BaseJobname}
+\let\@currentipfile\@savedjobname
+% \end{macrocode}
+
+% \iffalse
+%</chapterbib>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*chemfig>
+% \fi
+%
+% \part{lwarp-chemfig.sty}
+
+% \section{chemfig}
+%
+% \credits{Christian Tellechea}
+%
+% \DescribePackage{chemfig}
+% \pkg{chemfig} is patched for use by \pkg{lwarp}.
+%
+% \limitschemfig
+%
+% The images are not hashed because they depend on external settings which
+% may be changed at any time, and are unlikely to be reused inline anyhow.
+%
+% \changes{v0.51}{2018/03/04}{\pkg{chemfig}: Added.}
+% \changes{v0.71}{2019/04/25}{\pkg{chemfig}: Updated for v1.4.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{chemfig}
+% \end{macrocode}
+
+% \begin{macrocode}
+
+\catcode`\_=11
+
+\@ifpackagelater{chemfig}{2019/04/18}%
+{% 2019/04/18 or newer
+
+ \LetLtxMacro\LWR@chemfig@origchemfig\chemfig
+
+ \renewcommand*{\chemfig}[2][]{%
+ \begin{lateximage}[(-chemfig-~\packagediagramname)]%
+ \LWR@chemfig@origchemfig[#1]{#2}%
+ \end{lateximage}%
+ }
+
+ \GlobalLetLtxMacro\LWR@chemfig@origCF_lewisc\CF_lewisc
+ \gdef\CF_lewisc#1,#2\_nil{%
+ \begin{lateximage}[(-chemfig-~\packagediagramname)]%
+ \LWR@chemfig@origCF_lewisc#1,#2\_nil
+ \end{lateximage}
+ }
+
+ \gpreto{\schemestart}{\begin{lateximage}[(-chemfig-~\packagediagramname)]}
+ \gappto{\CF_schemestop}{\end{lateximage}}
+
+}% 2019/04/18 or newer
+{% older than 2019/04/18
+
+ \LetLtxMacro\LWR@chemfig@origchemfig\chemfig
+
+ \DeclareDocumentCommand\chemfig{s O{} O{} m}{%
+ \begin{lateximage}[(-chemfig-~\packagediagramname)]%
+ \IfBooleanTF{#1}{%
+ \LWR@chemfig@origchemfig*[#2][#3]{#4}%
+ }{%
+ \LWR@chemfig@origchemfig[#2][#3]{#4}%
+ }
+ \end{lateximage}%
+ }
+
+ \LetLtxMacro\LWR@chemfig@origCF@lewis@b\CF@lewis@b
+
+ \def\CF@lewis@b#1#2{%
+ \begin{lateximage}[(-chemfig-~\packagediagramname)]%
+ \LWR@chemfig@origCF@lewis@b{#1}{#2}%
+ \end{lateximage}%
+ }
+
+ \preto{\schemestart}{\begin{lateximage}[(-chemfig-~\packagediagramname)]}
+ \appto{\CF@schemestop}{\end{lateximage}}
+
+}% older than 2019/04/18
+
+\catcode`\_=8%
+
+
+
+\LetLtxMacro\LWR@chemfig@origchemleft\chemleft
+
+\def\chemleft#1#2\chemright#3{%
+\begin{lateximage}[(-chemfig-~\packagediagramname)]%
+\LWR@chemfig@origchemleft#1#2\chemright#3%
+\end{lateximage}%
+}
+
+\LetLtxMacro\LWR@chemfig@origchemup\chemup
+
+\def\chemup#1#2\chemdown#3{%
+\begin{lateximage}[(-chemfig-~\packagediagramname)]%
+\LWR@chemfig@origchemup#1#2\chemdown#3%
+\end{lateximage}%
+}
+% \end{macrocode}
+
+% \iffalse
+%</chemfig>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*chemformula>
+% \fi
+%
+% \part{lwarp-chemformula.sty}
+
+% \section{chemformula}
+%
+% \credits{Clemens Niederberger}
+%
+% \DescribePackage{chemformula}
+% \pkg{chemformula} is patched for use by \pkg{lwarp}.
+%
+% The \SVG\ images are hashed according to contents and local options.
+% Global options are assumed to be constant document-wide.
+%
+% \limitschemformula
+%
+% \changes{v0.51}{2018/03/05}{\pkg{chemformula}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{chemformula}[2017/03/23]
+% \end{macrocode}
+
+% \begin{macrocode}
+\ExplSyntaxOn
+% \end{macrocode}
+%
+% \begin{noindmacro}{\ch}
+% Enclose in an inline \SVG\ image or MathJax.
+% The \attribute{alt} tag is is the contents of the \cs{ch} expression.
+% The filename is hashed, and also has additional hashing information based on
+% the local options.
+% \begin{macrocode}
+\RenewDocumentCommand \ch { O{}m }
+ {%
+% \end{macrocode}
+% To work inside \env{align} with \cs{displaymathother}, a simple version
+% must be used to work with \pkg{chemformula}'s adaptation to \env{align}.
+% \begin{macrocode}
+ \ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}% lwarp
+ {
+ \chemformula_ch:nn {#1} {#2}% original
+ }
+% \end{macrocode}
+% If used as the outer level, must temporarily ensure \brand{MathJax} is disabled:
+% \begin{macrocode}
+ {
+ \begingroup%
+ \boolfalse{mathjax}%
+% \end{macrocode}
+% An inline image is used, adjusted for the baseline:
+% \begin{macrocode}
+ \LWR@subsingledollar*{% lwarp
+ \textbackslash{}ch\{\LWR@HTMLsanitize{#2}\}% alt text
+ }{%
+ \protect\LWR@HTMLsanitize{\detokenize\expandafter{#1}}% add'l hashing
+ }%
+ {%
+ \chemformula_ch:nn {#1} {#2}% original
+ }%
+ \endgroup%
+ }
+ }
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\chcpd}
+% Similar to \cs{ch}.
+% \begin{macrocode}
+\cs_gset_protected:Npn \chemformula_chcpd:nn #1#2
+ {
+ \begingroup%
+ \boolfalse{mathjax}%
+ \LWR@subsingledollar*{% lwarp
+ \textbackslash{}chcpd\{\LWR@HTMLsanitize{#2}\}%
+ }{%
+ \protect\LWR@HTMLsanitize{\detokenize\expandafter{#1}}%
+ }{% original
+ \group_begin:
+ \tl_if_blank:nF {#2}
+ {
+ \keys_set:nn {chemformula} {#1}
+ \__chemformula_save_catcodes:
+ \__chemformula_sanitize:Nn
+ \l__chemformula_chemformula_tmpa_tl
+ {#2}
+ \__chemformula_input_compound_no_check:NV
+ \l__chemformula_compound_tl
+ \l__chemformula_chemformula_tmpa_tl
+ \__chemformula_prepare_output:N \l__chemformula_compound_tl
+ \chemformula_write:V \l__chemformula_compound_tl
+ }
+ \group_end:
+ }
+ \endgroup
+ }
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\charrow}
+% If standalone, appears in a regular \env{lateximage}.
+% \begin{macrocode}
+\RenewDocumentCommand \charrow { mO{}O{} }
+{
+ \begin{lateximage}[(-chemformula- charrow)]
+ \group_begin:
+ \__chemformula_draw_arrow:nnn {#1} {#2} {#3}
+ \group_end:
+ \end{lateximage}
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\chname}
+% If standalone, appears in a regular \env{lateximage}, hashed according to contents.
+% \begin{macrocode}
+\RenewDocumentCommand \chname { R(){}R(){} }
+ {
+ \begin{lateximage}*[%
+ \textbackslash{}chname(\LWR@HTMLsanitize{#1})(\LWR@HTMLsanitize{#2})
+ ]%
+ \chemformula_chwritebelow:nn {#1} {#2}
+ \end{lateximage}
+ }
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\chlewis}
+% Placed inline, hashed according to contents and options.
+% \begin{macrocode}
+\RenewDocumentCommand \chlewis { O{}mm }
+ {
+ \begingroup%
+ \boolfalse{mathjax}%
+ \LWR@subsingledollar*{\textbackslash{}chlewis\{#2\}\{#3\}}%
+ {
+ \protect\LWR@HTMLsanitize{\detokenize\expandafter{#1}}%
+ }{
+ \chemformula_lewis:nnn {#1} {#2} {#3}
+ }
+ \endgroup%
+ }
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \pkg{lwarp} redefines the |$| character, so special handling is required
+% to escape math expressions inside \cs{ch}.
+%
+% This boolean tracks a new kind of escaped math:
+% \begin{macrocode}
+\bool_new:N \l__chemformula_first_last_LWRdollar_bool
+% \end{macrocode}
+%
+% \begin{noindmacro}{\chemformula\_input\_escape\_math} \\
+%
+% Adds additional escaping for the new dollar definition:
+% \begin{macrocode}
+\cs_gset_protected:Npn \__chemformula_input_escape_math:n #1
+ {
+ \__chemformula_first_last_math:n {#1}
+ \bool_if:NT \l__chemformula_first_last_dollar_bool
+ {
+ \bool_set_true:N \l__chemformula_first_last_math_bool
+ \__chemformula_read_escape_dollar:w #1 \q_nil
+ }
+ \bool_if:NT \l__chemformula_first_last_mathbraces_bool
+ {
+ \bool_set_true:N \l__chemformula_first_last_math_bool
+ \__chemformula_read_escape_mathbraces:w #1 \q_nil
+ }
+% \end{macrocode}
+% Added by \pkg{lwarp}:
+% \begin{macrocode}
+ \bool_if:NT \l__chemformula_first_last_LWRdollar_bool% lwarp
+ {
+ \bool_set_true:N \l__chemformula_first_last_math_bool% lwarp
+ \__chemformula_read_escape_LWRdollar:w #1 \q_nil% lwarp
+ }
+ }
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\chemformula\_read\_escape\_LWRdollar} \\
+%
+% The following parses the contents inside the new dollars.
+%
+% \pkg{lwarp} keeps the dollar as its original math shift until the document
+% starts.
+% While \pkg{chemmacros} is being patched, the dollar must temporarily
+% be set to its new meaning during the following definition.
+%
+% \begin{macrocode}
+\begingroup
+\catcode`\$=\active
+
+\cs_new_protected:Npn \__chemformula_read_escape_LWRdollar:w $#1$ \q_nil
+{
+ \__chemformula_read_escape_math:n {#1}
+}
+
+\endgroup
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindmacro}{\chemformula\_bool\_set\_if\_first\_last} \\
+%
+% The following looks at the first and last tokens for delimiters to escape
+% math inside \cs{ch}.
+% The original definition is modified to look for the
+% control sequences which are used by the new meaning of |$|.
+% \begin{macrocode}
+\cs_new_protected:Npn \__chemformula_bool_cs_set_if_first_last:NnNN #1#2#3#4
+ {
+ \int_zero:N \l__chemformula_tmpa_int
+ \int_zero:N \l__chemformula_tmpb_int
+ \int_set:Nn \l__chemformula_tmpa_int { \tl_count:n {#2} }
+ \tl_map_inline:nn {#2}
+ {
+ \int_incr:N \l__chemformula_tmpb_int
+ \int_compare:nT { \l__chemformula_tmpb_int = 1 }
+ {
+% \end{macrocode}
+% At the start, the |cs_| version compares control sequences:
+% \begin{macrocode}
+ \ifdefstrequal{##1}{#3}% lwarp
+ {
+ \bool_set_true:N #1
+ }% lwarp
+ {}
+ }
+% \end{macrocode}
+% At the end, compare more control sequences:
+% \begin{macrocode}
+ \int_compare:nT { \l__chemformula_tmpb_int = \l__chemformula_tmpa_int }
+ {
+ \ifdefstrequal{##1}{#4}
+ {}
+ {
+ \bool_set_false:N #1
+ }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindmacro}{\chemformula\_first\_last\_math} \\
+%
+% Modified to check for the new meaning of |$| at first/last:
+% \begin{macrocode}
+\cs_gset_protected:Npn \__chemformula_first_last_math:n #1
+ {
+ \bool_set_false:N \l__chemformula_first_last_math_bool
+ \bool_set_false:N \l__chemformula_first_last_dollar_bool
+ \bool_set_false:N \l__chemformula_first_last_LWRdollar_bool% lwarp
+ \bool_set_false:N \l__chemformula_first_last_mathbraces_bool
+ \__chemformula_bool_set_if_first_last:Nnnn
+ \l__chemformula_first_last_dollar_bool
+ {#1}
+ { $ } { $ }
+ \bool_if:NF \l__chemformula_first_last_dollar_bool
+ {
+ \__chemformula_bool_set_if_first_last:Nnnn
+ \l__chemformula_first_last_mathbraces_bool
+ {#1}
+ { \( } { \) }
+% \end{macrocode}
+% Added by \pkg{lwarp}:
+% \begin{macrocode}
+ \bool_if:NF \l__chemformula_first_last_mathbraces_bool% lwarp
+ {
+ \__chemformula_bool_cs_set_if_first_last:NnNN
+ \l__chemformula_first_last_LWRdollar_bool
+ {#1}
+ { \LWR@newsingledollar } { \LWR@newsingledollar }
+ }% lwarp
+ }
+ }
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{macrocode}
+\ExplSyntaxOff
+% \end{macrocode}
+%
+% \iffalse
+%</chemformula>
+% \fi
+%
+%
+%
+% \iffalse
+%<*chemgreek>
+% \fi
+%
+% \part{lwarp-chemgreek.sty}
+
+% \section{chemgreek}
+%
+% \credits{Clemens Niederberger}
+%
+% \DescribePackage{chemgreek}
+% \pkg{chemgreek} is patched for use by \pkg{lwarp}.
+%
+% To use text-mode symbols, \margintag{Greek symbols}
+% use packages \pkg{textalpha} or \pkg{textgreek}.
+% Using the other packages supported by \pkg{chemgreek}
+% \trouble[package selection]{Greek packages}
+% \trouble{chemgreek=\pkg{chemgreek}>text-mode symbols}
+% will result in math-mode greek characters,
+% which will result in \SVG\ images being used.
+% These images will be hashed.
+% \gindex{chemistry>Greek symbols}
+% \gindex{Greek>chemistry symbols}
+%
+% If using \XeLaTeX\ or \LuaLaTeX, select the |fontspec| mapping:
+% \trouble[\XeLaTeX, \LuaLaTeX]{chemgreek=\pkg{chemgreek}>fontspec mapping}
+% \begin{sourcedisplay}
+% \cs{selectchemgreekmapping}\{fontspec\}
+% \end{sourcedisplay}
+%
+%
+% \changes{v0.51}{2018/03/08}{\pkg{chemgreek}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{chemgreek}[2016/02/10]
+% \end{macrocode}
+
+% \begin{macrocode}
+\ExplSyntaxOn
+
+\cs_gset_protected:Npn \chemgreek_text:n #1
+ { { \text {#1} } }
+
+\appto\LWR@restoreorigformatting{%
+\cs_set_protected:Npn \chemgreek_text:n #1%
+ { \ensuremath { \text {#1} } }%
+}
+
+\ExplSyntaxOff
+% \end{macrocode}
+
+% \iffalse
+%</chemgreek>
+% \fi
+%
+%
+% \addtocontents{toc}{\protect\setcounter{tocdepth}{2}}
+%
+%
+% \iffalse
+%<*chemmacros>
+% \fi
+%
+% \part{lwarp-chemmacros.sty}
+
+% \section{chemmacros}
+%
+% \credits{Clemens Niederberger}
+%
+% \DescribePackage{chemmacros}
+% \pkg{chemmacros} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.51}{2018/03/13}{\pkg{chemmacros}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{chemmacros}[2017/08/28]
+% \end{macrocode}
+%
+% SVG file hashing assumes that the relevent options are constant for the entire document.
+%
+% \subsection{Changes to the user's document}
+%
+% When using \cs{makepolymerdelims},
+% \trouble[\cs{makepolymerdelims}]{chemmacros=\pkg{chemmacros}>makepolymerdelims=\cs{makepolymerdelims}}
+% enclose the entire expression inside a \env{polymerdelims} environment,
+% such as (from the \pkg{chemmacros} manual):
+%
+% \begin{Verbatim}[gobble=2]
+% \begin{polymerdelims}
+% \chemfig{-[@{op,.75}]CH_2-CH(-[6]Cl)-[@{cl,0.25}]}
+% \makepolymerdelims{5pt}[27pt]{op}{cl}
+% \end{polymerdelims}
+% \end{Verbatim}
+%
+% \hrule
+%
+% Redox reactions must be enclosed inside
+% a \env{redoxreaction} environment.
+% \trouble[redox reactions]{chemmacros=\pkg{chemmacros}>redox reactions}
+% For print output, extra space must be included above and/or below the result,
+% so they are declared as arguments to the environment, instead of
+% being manually entered as per the \pkg{chemmacros} manual.
+% For \HTML\ output, the extra space is ignored and a \env{lateximage} is used instead.
+% \begin{Verbatim}[gobble=2]
+% \begin{redoxreaction}{7mm}{7mm}
+% \OX{a,Na} $\rightarrow$ \OX{b,Na}\pch\redox(a,b){oxidation}
+% \end{redoxreaction}
+% \end{Verbatim}
+%
+% \subsection{Code}
+%
+%
+% \subsection{Loading modules}
+%
+% Patching \pkg{chemmacros} modules must be done \cs{AtBeginDocument},
+% since modules are invoked by the user in the preamble, and each patch is
+% only done if the module is loaded.
+%
+% \begin{macrocode}
+\ExplSyntaxOn
+
+\newcommand{\@ifchemmacrosmoduleloaded}[1]{%
+\@ifl@aded{\c__chemmacros_module_extension_tl}{\c__chemmacros_module_prefix_tl.#1}%
+}
+
+\ExplSyntaxOff
+% \end{macrocode}
+%
+%
+% \subsection{New environments}
+% \label{sec:chemmacroshtmlenvs}
+%
+% \cs{makepolymerdelims} and redox reactions must be enclosed in a \env{lateximage}
+% during \HTML\ output.
+% These environments are provided here in \HTML\ mode, and in the \pkg{lwarp} core
+% in print mode, as a high-level semantic syntax which automatically embeds the
+% contents in a \env{lateximage} with an appropriate \attribute{alt} tag.
+%
+% \begin{noindenvironment}{polymerdelims}
+% \begin{macrocode}
+\DeclareDocumentEnvironment{polymerdelims}{}
+{\begin{lateximage}[(-chemmacros- polymer)]}
+{\end{lateximage}}
+% \end{macrocode}
+% \end{noindenvironment}
+
+% \begin{noindenvironment}{redoxreaction} \marg{space above} \marg{space below}
+%
+% For \HTML\ output, the above and below space is ignored, and a \env{lateximage}
+% is used instead.
+% For the print output version, see \cref{sec:chemmacrosprintenvs}.
+% \begin{macrocode}
+\DeclareDocumentEnvironment{redoxreaction}{m m}
+{\begin{lateximage}[(-chemmacros- redoxreaction)]}
+{\end{lateximage}}
+% \end{macrocode}
+% \end{noindenvironment}
+%
+%
+% \begin{macrocode}
+\ExplSyntaxOn
+% \end{macrocode}
+%
+%
+% \subsection{Acid-base}
+%
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifchemmacrosmoduleloaded{acid-base}{
+\PackageInfo{lwarp}{Patching~chemmacros~module~acid-base}
+
+\cs_gset_protected:Npn \chemmacros_p:n #1
+ {
+ \begingroup
+ \boolfalse{mathjax}
+ \LWR@subsingledollar*{
+ \textbackslash{}p\{\LWR@HTMLsanitize{#1}\}
+ }{
+ chemmacrosp\protect\LWR@HTMLsanitize{\detokenize\expandafter{#1}}%
+ }{
+ \group_begin:
+ \mbox
+ {
+ \chemmacros_p_style:n {p}
+ \ensuremath {#1}
+ }
+ \group_end:
+ }
+ \endgroup
+ }
+
+\RenewDocumentCommand \pH {} {
+ \begingroup
+ \boolfalse{mathjax}
+ \LWR@subsingledollar*{\textbackslash{}pH}{chemmacros}{
+ \chemmacros_p:n { \chemmacros_chemformula:n {H} }
+ }
+ \endgroup
+}
+
+\RenewDocumentCommand \pOH {} {
+ \begingroup
+ \boolfalse{mathjax}
+ \LWR@subsingledollar*{\textbackslash{}pOH}{chemmacros}{
+ \chemmacros_p:n { \chemmacros_chemformula:n {OH} }
+ }
+ \endgroup
+}
+
+\RenewDocumentCommand \pKa {O{}}
+ {
+ \begingroup
+ \boolfalse{mathjax}
+ \LWR@subsingledollar*{\textbackslash{}pKa{[}#1{]}}{chemmacros #1}{
+ \chemmacros_p:n
+ {
+ \Ka \ifblank {#1} {}
+ { {} \c_math_subscript_token { \chemmacros_bold:n {#1} } }
+ }
+ }
+ \endgroup
+ }
+
+\RenewDocumentCommand \pKb {O{}}
+ {
+ \begingroup
+ \boolfalse{mathjax}
+ \LWR@subsingledollar*{\textbackslash{}pKb{[}#1{]}}{chemmacros #1}{
+ \chemmacros_p:n
+ {
+ \Kb \ifblank {#1} {}
+ { {} \c_math_subscript_token { \chemmacros_bold:n {#1} } }
+ }
+ }
+ \endgroup
+ }
+
+\LetLtxMacro\LWR@chemmacros@origKa\Ka
+\renewcommand*{\Ka}{%
+ \begingroup
+ \boolfalse{mathjax}
+ \LWR@subsingledollar*{\textbackslash{}Ka}{chemmacros}{%
+ \LWR@chemmacros@origKa%
+ }%
+ \endgroup
+}
+
+\LetLtxMacro\LWR@chemmacros@origKb\Kb
+\renewcommand*{\Kb}{%
+ \begingroup
+ \boolfalse{mathjax}
+ \LWR@subsingledollar*{\textbackslash{}Kb}{chemmacros}{%
+ \LWR@chemmacros@origKb%
+ }%
+ \endgroup
+}
+
+\LetLtxMacro\LWR@chemmacros@origKw\Kw
+\renewcommand*{\Kw}{%
+ \begingroup
+ \boolfalse{mathjax}
+ \LWR@subsingledollar*{\textbackslash{}Kw}{chemmacros}{
+ \LWR@chemmacros@origKw
+ }
+ \endgroup
+}
+
+}{}% \@ifchemmacrosmoduleloaded
+}% AtBeginDocument
+% \end{macrocode}
+%
+%
+% \subsection{Charges}
+%
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifchemmacrosmoduleloaded{charges}{
+\PackageInfo{lwarp}{Patching~chemmacros~module~charges}
+
+\cs_gset_protected:Npn \fplus {
+ \begingroup
+ \boolfalse{mathjax}
+ \LWR@subsingledollar*{\textbackslash{}fplus}{chemmacros}
+ { \LWR@origensuredmath{\chemformula_fplus:} }
+ \endgroup
+}
+\cs_gset_protected:Npn \fminus {
+ \begingroup
+ \boolfalse{mathjax}
+ \LWR@subsingledollar*{\textbackslash{}fminus}{chemmacros}
+ { \LWR@origensuredmath{\chemformula_fminus:} }
+ \endgroup
+}
+
+}{}% \@ifchemmacrosmoduleloaded
+}% AtBeginDocument
+% \end{macrocode}
+%
+%
+% \subsection{Nomenclature}
+%
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifchemmacrosmoduleloaded{nomenclature}{
+\PackageInfo{lwarp}{Patching~chemmacros~module~nomenclature}
+
+\cs_gset_protected:Npn \chemmacros_charge:n #1
+ {
+ \ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}
+ {\chemmacros_chemformula:n { {}^{#1} }}
+ {
+ \ifmmode
+ {\chemmacros_chemformula:n { {}^{#1} }}
+ \else
+ { \textsuperscript{\ensuremath{#1}} }
+ \fi
+ }
+ }
+
+
+\LetLtxMacro\LWR@chemmacros@origchemprime\chemprime
+
+\protected\def\chemprime { \HTMLunicode{2032} }
+
+\appto\LWR@restoreorigformatting{%
+\LetLtxMacro\chemprime\LWR@chemmacros@origchemprime%
+}
+% \end{macrocode}
+%
+% ^^A \RenewChemIUPAC \chemprime { \HTMLunicode{2032} }
+%
+% \begin{macrocode}
+\ChemCompatibilityFrom{5.8}
+\cs_gset_protected:Npn \__chemmacros_cip:n #1
+ {
+ \tl_set:Nn \l__chemmacros_tmpa_tl {#1}
+ \int_step_inline:nnnn {0} {1} {9}
+ {
+ \tl_replace_all:Nnn \l__chemmacros_tmpa_tl
+ {##1}
+ { { \l__chemmacros_cip_number_tl ##1} }
+ }
+ {
+ \l__chemmacros_cip_inner_tl
+ \LWR@textcurrentcolor{\LWR@textcurrentfont{% lwarp
+ \l__chemmacros_tmpa_tl
+ }}% lwarp
+ }
+ }
+\EndChemCompatibility
+% \end{macrocode}
+%
+% \begin{macrocode}
+\RenewDocumentCommand \Sconf { O{S} } {
+\begin{lateximage}[\textbackslash{}Sconf{[}#1{]}]
+ \chemmacros_sconf:n {#1}
+\end{lateximage}
+}
+
+\RenewDocumentCommand \Rconf { O{R} } {
+\begin{lateximage}[\textbackslash{}Rconf{[}#1{]}]
+ \chemmacros_rconf:n {#1}
+\end{lateximage}
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_gset_protected:Npn \chemmacros_hapto:n #1
+ {
+ \begingroup
+ \boolfalse{mathjax}
+ \LWR@subsingledollar*{\textbackslash{}hapto\{#1\}}{chemmacros}{
+ \chemmacros_coordination_symbol:nnnn
+ { \l__chemmacros_coord_use_hyphen_bool }
+ {
+ \chemmacros_if_compatibility:nnTF {>} {5.7}
+ { \c_true_bool }
+ { \c_false_bool }
+ }
+ { \chemeta }
+ {#1}
+ }
+ \endgroup
+ }
+
+\cs_gset_protected:Npn \chemmacros_dento:n #1
+ {
+ \begingroup
+ \boolfalse{mathjax}
+ \LWR@subsingledollar*{\textbackslash{}dento\{#1\}}{chemmacros}{
+ \chemmacros_coordination_symbol:nnnn
+ { \l__chemmacros_coord_use_hyphen_bool }
+ {
+ \chemmacros_if_compatibility:nnTF {>} {5.7}
+ { \c_true_bool }
+ { \c_false_bool }
+ }
+ { \chemkappa }
+ {#1}
+ }
+ \endgroup
+ }
+
+\cs_gset_protected:Npn \chemmacros_bridge:n #1
+ {
+ \begingroup
+ \boolfalse{mathjax}
+ \LWR@subsingledollar*{\textbackslash{}bridge\{#1\}}{chemmacros}{
+ \chemmacros_coordination_symbol:nnnn
+ { \l__chemmacros_coord_use_hyphen_bool }
+ { \l__chemmacros_bridge_super_bool }
+ { \chemmu }
+ {#1}
+ }
+ \endgroup
+ }
+}{}% \@ifchemmacrosmoduleloaded
+}% AtBeginDocument
+% \end{macrocode}
+%
+%
+% \subsection{Particles}
+%
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifchemmacrosmoduleloaded{particles}{
+\PackageInfo{lwarp}{Patching~chemmacros~module~particles}
+
+\cs_gset_protected:Npn \chemmacros_declare_nucleophile:Nn #1#2
+ {
+ \cs_set_protected:cpn {__chemmacros_ \chemmacros_remove_backslash:N #1:}
+ {
+ \bool_if:NTF \l__chemmacros_nucleophile_elpair_bool
+ {
+ \chemmacros_elpair:n { #2 }
+ \chemmacros_if_compatibility:nnT {>=} {5.3}
+ { \skip_horizontal:N \l__chemmacros_nucleophile_dim }
+ \chemmacros_chemformula:n { {}^{-} }
+ }
+ { \chemmacros_chemformula:n { #2^{-} } }
+ }
+ \DeclareDocumentCommand #1 {o}
+ {%
+ \begin{lateximage}%
+ \group_begin:%
+ \IfNoValueF {##1}%
+ { \chemmacros_set_keys:nn {particles} {##1} }%
+ \use:c {__chemmacros_ \chemmacros_remove_backslash:N #1:}%
+ \group_end:%
+ \end{lateximage}%
+ }
+ }
+
+\RenewChemNucleophile \Nuc {Nu}
+\RenewChemNucleophile \ba {ba}
+
+}{}% \@ifchemmacrosmoduleloaded
+}% AtBeginDocument
+% \end{macrocode}
+%
+%
+% \subsection{Phases}
+%
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifchemmacrosmoduleloaded{phases}{
+\PackageInfo{lwarp}{Patching~chemmacros~module~phases}
+
+\cs_undefine:N \chemmacros_phase:n
+\cs_new_protected:Npn \chemmacros_phase:n #1
+ {
+ \chemmacros_leave_vmode:
+ \bool_if:NTF \l__chemmacros_phases_sub_bool
+ {
+ \ifnumequal{\value{LWR@lateximagedepth}}{0}
+ {
+ \textsubscript{ (#1) }
+ }
+ {
+ \chemformula_subscript:n { (#1) }
+ }
+ }
+ {
+ \skip_horizontal:N \l__chemmacros_phases_space_dim
+ \chemmacros_text:n { (#1) }
+ }
+ }
+
+}{}% \@ifchemmacrosmoduleloaded
+}% AtBeginDocument
+% \end{macrocode}
+%
+% \subsection{Mechanisms}
+%
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifchemmacrosmoduleloaded{mechanisms}{
+\PackageInfo{lwarp}{Patching~chemmacros~module~mechanisms}
+
+\chemmacros_define_keys:nn {textmechanisms}
+ {
+ type .choice: ,
+ type / .code:n =
+ {
+ \__chemmacros_set_mechanisms:nnn { S }
+ {
+ \textsubscript{N}
+ }
+ { }
+ } ,
+ type / 1 .code:n =
+ {
+ \__chemmacros_set_mechanisms:nnn { S }
+ {
+ \textsubscript{N}
+ 1
+ }
+ { }
+ } ,
+ type / 2 .code:n =
+ {
+ \__chemmacros_set_mechanisms:nnn { S }
+ {
+ \textsubscript{N}
+ 2
+ }
+ { }
+ } ,
+ type / se .code:n =
+ {
+ \__chemmacros_set_mechanisms:nnn { S }
+ {
+ \textsubscript{E}
+ }
+ { }
+ } ,
+ type / 1e .code:n =
+ {
+ \__chemmacros_set_mechanisms:nnn { S }
+ {
+ \textsubscript{E}
+ 1
+ }
+ { }
+ } ,
+ type / 2e .code:n =
+ {
+ \__chemmacros_set_mechanisms:nnn { S }
+ {
+ \textsubscript{E}
+ 2
+ }
+ { }
+ } ,
+ type / ar .code:n =
+ {
+ \__chemmacros_set_mechanisms:nnn { S }
+ {
+ \textsubscript{E}
+ }
+ { Ar - }
+ } ,
+ type / e .code:n =
+ { \__chemmacros_set_mechanisms:nnn { E } { } { } } ,
+ type / e1 .code:n =
+ { \__chemmacros_set_mechanisms:nnn { E } { 1 } { } } ,
+ type / e2 .code:n =
+ { \__chemmacros_set_mechanisms:nnn { E } { 2 } { } } ,
+ type / cb .code:n =
+ {
+ \__chemmacros_set_mechanisms:nnn { E }
+ {
+ 1
+ \textsubscript{cb}
+ }
+ { }
+ } ,
+ type .default:n =
+ }
+
+\cs_gset_protected:Npn \chemmacros_mechanisms:n #1
+ {
+ \tl_if_blank:nTF {#1}
+ { \chemmacros_set_keys:nn {textmechanisms} { type } }
+ { \chemmacros_set_keys:nn {textmechanisms} { type = #1 } }
+ \mbox
+ {
+ \tl_use:N \l__chemmacros_mechanisms_ar_tl
+ \tl_use:N \l__chemmacros_mechanisms_type_tl
+ \tl_use:N \l__chemmacros_mechanisms_mol_tl
+ }
+ }
+
+\appto\LWR@restoreorigformatting{%
+\cs_set_protected:Npn \chemmacros_mechanisms:n #1%
+ {%
+ \tl_if_blank:nTF {#1}%
+ { \chemmacros_set_keys:nn {mechanisms} { type } }%
+ { \chemmacros_set_keys:nn {mechanisms} { type = #1 } }%
+ \mbox%
+ {%
+ \tl_use:N \l__chemmacros_mechanisms_ar_tl%
+ \tl_use:N \l__chemmacros_mechanisms_type_tl%
+ \tl_use:N \l__chemmacros_mechanisms_mol_tl%
+ }%
+ }%
+}
+
+}{}% \@ifchemmacrosmoduleloaded
+}% AtBeginDocument
+% \end{macrocode}
+%
+% \subsection{Newman}
+%
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifchemmacrosmoduleloaded{newman}{
+\PackageInfo{lwarp}{Patching~chemmacros~module~newman}
+
+\RenewDocumentCommand \newman {od()m}%
+ {
+ \IfValueTF{#2}
+ {\begin{lateximage}[\textbackslash{}newman(#2)\{#3\}]}
+ {\begin{lateximage}[\textbackslash{}newman\{#3\}]}
+ \group_begin:
+ \IfNoValueF {#1} { \chemmacros_set_keys:nn {newman} {#1} }
+ \IfNoValueTF {#2}
+ { \chemmacros_newman:nn { } {#3} }
+ { \chemmacros_newman:nn {#2} {#3} }
+ \group_end:
+ \end{lateximage}
+ }%
+
+}{}% \@ifchemmacrosmoduleloaded
+}% AtBeginDocument
+% \end{macrocode}
+%
+% \subsection{Orbital}
+%
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifchemmacrosmoduleloaded{orbital}{
+\PackageInfo{lwarp}{Patching~chemmacros~module~orbital}
+
+\RenewDocumentCommand \orbital {om}
+ {
+ \IfValueTF{#1}
+ {
+ \begin{lateximage}[%
+ \textbackslash{}orbital{[}\LWR@HTMLsanitize{#1}{]}\{#2\}%
+ ][][margin-left: 1em ; margin-right: 1em]
+ }
+ {
+ \begin{lateximage}[%
+ \textbackslash{}orbital\{#2\}%
+ ][][margin-left: 1em ; margin-right: 1em]
+ }
+ \group_begin:
+ \chemmacros_set_keys:nn {orbital/type} {#2}
+ \IfNoValueTF {#1}
+ { \chemmacros_orbital:n { } }
+ { \chemmacros_orbital:n {#1} }
+ \group_end:
+ \end{lateximage}
+ }
+
+}{}% \@ifchemmacrosmoduleloaded
+}% AtBeginDocument
+% \end{macrocode}
+%
+%
+% \subsection{Reactions}
+%
+% \begin{noindmacro}{\chemmacros\_declare\_reaction\_env} \\
+% \fqquad \marg{chem} \marg{math} \marg{args number} \marg{argument list (\{\#2\}\{\#3\}...)}
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifchemmacrosmoduleloaded{reactions}{
+\PackageInfo{lwarp}{Patching~chemmacros~module~reactions}
+
+\cs_gset_protected:Npn \chemmacros_declare_reaction_env:nnnn #1#2#3#4
+ {
+ \exp_args:Nnx \DeclareDocumentEnvironment {#1} { O{} \prg_replicate:nn {#3+0} {m} }
+ {
+ \boolfalse{mathjax}% lwarp
+ \chemmacros_add_reaction_description:n {##1}
+ \__chemmacros_begin_reaction:
+ \chemmacros_reaction_read:nnw {#2} {#4}
+ }
+ {
+ \__chemmacros_end_reaction:
+ }
+ }
+\cs_generate_variant:Nn \chemmacros_declare_reaction_env:nnnn {nnnV}
+
+\RenewChemReaction {reaction} {equation}
+\RenewChemReaction {reaction*} {equation*}
+\RenewChemReaction {reactions} {align}
+\RenewChemReaction {reactions*} {align*}
+
+}{}% \@ifchemmacrosmoduleloaded
+}% AtBeginDocument
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \subsection{Redox}
+%
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifchemmacrosmoduleloaded{redox}{
+\PackageInfo{lwarp}{Patching~chemmacros~module~redox}
+
+\NewDocumentCommand \LWR@chemmacros@ox { s m >{\SplitArgument{1}{,}}m }
+ {
+ \IfBooleanTF {#1}
+ { \chemmacros_ox:nnnn {#1} {#2} #3 }
+ { \chemmacros_ox:nnnn { } {#2} #3 }
+ }
+
+\RenewDocumentCommand \ox { s O{} m }
+ {
+ \begingroup
+ \boolfalse{mathjax}
+ \IfBooleanTF {#1}
+ {
+ \LWR@subsingledollar*{% yes hash
+ \textbackslash{}ox*\{\LWR@HTMLsanitize{#3}\}% alt
+ }{%
+ star \protect\LWR@HTMLsanitize{\detokenize\expandafter{#2}}%
+ }{%
+ \LWR@chemmacros@ox* {#2} {#3}% contents
+ }%
+ }
+ {
+ \LWR@subsingledollar*{% yes hash
+ \textbackslash{}ox*\{\LWR@HTMLsanitize{#3}\}% alt
+ }{%
+ \protect\LWR@HTMLsanitize{\detokenize\expandafter{#2}}%
+ }{%
+ \LWR@chemmacros@ox {#2} {#3}% contents
+ }%
+ }
+ \endgroup
+ }
+
+}{}% \@ifchemmacrosmoduleloaded
+}% AtBeginDocument
+% \end{macrocode}
+%
+% \subsection{Scheme}
+%
+% Fix for \pkg{chemmacros} as of v5.8b, when using \pkg{newfloat} and \pkg{babel}:
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifchemmacrosmoduleloaded{scheme}{
+\PackageInfo{lwarp}{Patching~chemmacros~module~scheme}
+
+\ifdefstring{\schemename}{los}{
+\SetupFloatingEnvironment{scheme}{
+name = \chemmacros_translate:n {scheme-name}
+}
+}{}
+
+}{}% \@ifchemmacrosmoduleloaded
+}% AtBeginDocument
+% \end{macrocode}
+%
+% \subsection{Spectroscopy}
+%
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifchemmacrosmoduleloaded{spectroscopy}{
+\PackageInfo{lwarp}{Patching~chemmacros~module~spectroscopy}
+
+\ChemCompatibilityTo{5.8}
+\cs_gset_protected:Npn \__chemmacros_nmr_base:nn #1#2
+ {
+ \tl_if_blank:VF \g__chemmacros_nmr_element_coupled_tl
+ {
+ \tl_put_left:Nn \g__chemmacros_nmr_element_coupled_tl { \{ }
+ \tl_put_right:Nn \g__chemmacros_nmr_element_coupled_tl { \} }
+ }
+ \tl_put_left:Nn \g__chemmacros_nmr_element_coupled_tl {#2}
+% \chemmacros_chemformula:n { ^{#1} }
+ \textsuperscript{#1}
+ \bool_if:NTF \l__chemmacros_nmr_parse_bool
+ { \chemformula_ch:nV {} \g__chemmacros_nmr_element_coupled_tl }
+ { \chemmacros_chemformula:V \g__chemmacros_nmr_element_coupled_tl }
+ \tl_use:N \l__chemmacros_nmr_element_method_connector_tl
+ \tl_use:N \l__chemmacros_nmr_method_tl
+ }
+\EndChemCompatibility
+\ChemCompatibilityFrom{5.8}
+\cs_gset_protected:Npn \__chemmacros_nmr_base:nn #1#2
+ {
+ \group_begin:
+ \tl_use:N \l__chemmacros_nmr_base_format_tl
+ \tl_if_blank:VF \g__chemmacros_nmr_element_coupled_tl
+ {
+ \tl_put_left:Nn \g__chemmacros_nmr_element_coupled_tl { \{ }
+ \tl_put_right:Nn \g__chemmacros_nmr_element_coupled_tl { \} }
+ }
+ \tl_put_left:Nn \g__chemmacros_nmr_element_coupled_tl {#2}
+% \chemmacros_chemformula:n { ^{#1} }
+ \textsuperscript{#1}
+ \tl_if_blank:VF \g__chemmacros_nmr_element_coupled_tl
+ {
+ \bool_if:NTF \l__chemmacros_nmr_parse_bool
+ { \chemformula_ch:nV {} \g__chemmacros_nmr_element_coupled_tl }
+ { \chemmacros_chemformula:V \g__chemmacros_nmr_element_coupled_tl }
+ }
+ \tl_use:N \l__chemmacros_nmr_element_method_connector_tl
+ \tl_use:N \l__chemmacros_nmr_method_tl
+ \group_end:
+ }
+\EndChemCompatibility
+
+
+\cs_gset_protected:Npn \chemmacros_nmr_position:n #1
+ {
+ \chemmacros_chemformula:x
+ {
+ \exp_not:V \g__chemmacros_nmr_element_tl
+ \bool_if:NF \l__chemmacros_nmr_position_side_bool
+ {
+ \tl_if_eq:NnTF \l__chemmacros_nmr_position_tl {^}% lwarp
+ { \textsuperscript{\exp_not:n { {#1} }} }% lwarp
+ { \textsubscript{\exp_not:n { {#1} }} }% lwarp
+% \exp_not:V \l__chemmacros_nmr_position_tl
+% \exp_not:n { {#1} }
+ }
+ }
+ \bool_if:NT \l__chemmacros_nmr_position_side_bool
+ {
+ \tl_use:N \l__chemmacros_nmr_position_tl
+ \__chemmacros_nmr_position:n {#1}
+ }
+ }
+
+\cs_gset_protected:Npn \__chemmacros_nmr_coupling:w (#1;#2)
+ {
+ \tl_set:Nn \l__chemmacros_nmr_coupling_bonds_tl
+ {
+ \l__chemmacros_nmr_coupling_bonds_pre_tl
+ #1
+ \l__chemmacros_nmr_coupling_bonds_post_tl
+ }
+ \bool_if:NTF \l__chemmacros_nmr_coupling_nuclei_sub_bool
+ {
+ \tl_set:Nn \l__chemmacros_nmr_coupling_nuclei_tl
+ {
+% \c_math_subscript_token
+ \textsubscript% lwarp
+ {
+ \l__chemmacros_nmr_coupling_nuclei_pre_tl
+ \chemmacros_chemformula:n {#2}
+ \l__chemmacros_nmr_coupling_nuclei_post_tl
+ }
+ }
+ }
+ {
+ \tl_set:Nn \l__chemmacros_nmr_coupling_nuclei_tl
+ {
+ \l__chemmacros_nmr_coupling_nuclei_pre_tl
+ \chemmacros_chemformula:n {#2}
+ \l__chemmacros_nmr_coupling_nuclei_post_tl
+ }
+ }
+ \__chemmacros_nmr_coupling_aux_i:w
+ }
+
+\AfterEndPreamble{% After \AtBeginDocument
+% \NMR{<num>,<elem>}(<num>,<unit>)[<solvent>] ALL arguments are optional
+% \NMR* same but without ": $\delta$" at end
+\cs_gset_protected:Npn \chemmacros_nmr:nnnn #1#2#3#4
+ {
+ \bool_if:NT \l__chemmacros_nmr_list_bool { \item \scan_stop: }
+ \group_begin:
+ \chemmacros_leave_vmode:
+ \bool_set_false:N \l__chemmacros_nmr_frequency_bool
+ \bool_set_false:N \l__chemmacros_nmr_solvent_bool
+ \tl_if_empty:nF {#3}
+ { \bool_set_true:N \l__chemmacros_nmr_frequency_bool }
+ \tl_if_empty:nF {#4}
+ { \bool_set_true:N \l__chemmacros_nmr_solvent_bool }
+ \bool_if:nT
+ {
+ \l__chemmacros_nmr_frequency_bool
+ ||
+ \l__chemmacros_nmr_solvent_bool
+ }
+ { \bool_set_true:N \l__chemmacros_nmr_delimiters_bool }
+ \bool_if:nT
+ {
+ \l__chemmacros_nmr_frequency_bool
+ &&
+ \l__chemmacros_nmr_solvent_bool
+ }
+ { \bool_set_true:N \l__chemmacros_nmr_comma_bool }
+ \tl_if_empty:nTF {#2}
+ {
+ \__chemmacros_nmr_nucleus:VV
+ \l__chemmacros_nmr_isotope_default_tl
+ \l__chemmacros_nmr_element_default_tl
+ }
+ { \__chemmacros_nmr_nucleus:w #2 \q_stop }
+ \mode_if_math:TF
+ {
+ \text
+ {
+ \group_begin:
+ \tl_use:N \l__chemmacros_nmr_format_tl
+\LWR@textcurrentcolor{\LWR@textcurrentfont{% lwarp
+ \__chemmacros_nmr_base:VV
+ \g__chemmacros_nmr_isotope_tl
+ \g__chemmacros_nmr_element_tl
+ \bool_if:NT \l__chemmacros_nmr_delimiters_bool
+ { ~ ( }
+ \bool_if:NT \l__chemmacros_nmr_frequency_bool
+ { \__chemmacros_nmr_frequency:n {#3} }
+ \bool_if:NT \l__chemmacros_nmr_comma_bool
+ { , ~ }
+ \bool_if:NT \l__chemmacros_nmr_solvent_bool
+ { \chemmacros_chemformula:n {#4} }
+ \bool_if:NT \l__chemmacros_nmr_delimiters_bool
+ { ) }
+ \tl_if_blank:nT {#1} {:~}
+}}% lwarp
+ \group_end:
+ }
+ \tl_if_blank:nT {#1}
+ {
+ \delta
+ \text { \l__chemmacros_nmr_delta_tl }
+ \bool_if:NT \l__chemmacros_nmr_use_equal_bool {=}
+ }
+ }
+ {
+ \group_begin:
+ \tl_use:N \l__chemmacros_nmr_format_tl
+\LWR@textcurrentcolor{\LWR@textcurrentfont{% lwarp
+ \__chemmacros_nmr_base:VV
+ \g__chemmacros_nmr_isotope_tl
+ \g__chemmacros_nmr_element_tl
+ \bool_if:NT \l__chemmacros_nmr_delimiters_bool
+ {~(}
+ \bool_if:NT \l__chemmacros_nmr_frequency_bool
+ { \__chemmacros_nmr_frequency:n {#3} }
+ \bool_if:NT \l__chemmacros_nmr_comma_bool
+ {,~}
+ \bool_if:NT \l__chemmacros_nmr_solvent_bool
+ {
+ \bool_if:NTF \l__chemmacros_nmr_parse_bool
+% \end{macrocode}
+% \changes{v0.59}{2018/08/30}{\pkg{chemformula}: Fix for \cs{NMR}.}
+% \begin{macrocode}
+% { \chemformula_ch:nn { } {#4} }% original
+ {\ch{#4}}% lwarp
+ {#4}
+ }
+ \bool_if:NT \l__chemmacros_nmr_delimiters_bool
+ {)}
+}}% lwarp
+ \tl_if_blank:nT {#1} {:}
+ \group_end:
+ \tl_if_blank:nT {#1}
+ {
+ \tl_use:N \c_space_tl
+ \c_math_toggle_token
+ \delta
+ \c_math_toggle_token
+ \l__chemmacros_nmr_delta_tl
+ \bool_if:NT \l__chemmacros_nmr_use_equal_bool {~=}
+ }
+ }
+ \group_end:
+ }
+}% AfterEndPremble
+
+
+\RenewDocumentCommand \chemmacros_data:w { smo }
+ {
+ \bool_if:NT \l__chemmacros_nmr_list_bool { \item }
+ {
+% \tl_use:N \l__chemmacros_nmr_format_tl #2
+ \tl_use:N \l__chemmacros_nmr_format_tl
+ \LWR@textcurrentcolor{\LWR@textcurrentfont{% lwarp
+ #2
+ \IfNoValueF {#3} { ~ ( #3 ) }
+ \IfBooleanT {#1} { \bool_if:NT \l__chemmacros_nmr_use_equal_bool { : } }
+ }}% lwarp
+ }
+ \IfBooleanF {#1} { \bool_if:NT \l__chemmacros_nmr_use_equal_bool { ~ = } }
+ }
+
+}{}% \@ifchemmacrosmoduleloaded
+}% AtBeginDocument
+% \end{macrocode}
+%
+% \subsection{Thermodynamics}
+%
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifchemmacrosmoduleloaded{thermodynamics}{
+\PackageInfo{lwarp}{Patching~chemmacros~module~thermodynamics}
+
+\cs_gset_protected:Npn \chemmacros_state:nn #1#2
+ {
+ \group_begin:
+ \boolfalse{mathjax}
+ \chemmacros_set_keys:nn {thermodynamics} {#1}
+ \LWR@subsingledollar*{% yes hashing
+ \textbackslash{}state\{\LWR@HTMLsanitize{#2}\}% alt
+ }{%
+ chemmacros_state% add'l hashing
+ #1% options
+ LSP \tl_use:N \l__chemmacros_state_sp_left_tl% super/subscripts
+ LSB \tl_use:N \l__chemmacros_state_sb_left_tl
+ RSP \tl_use:N \l__chemmacros_state_sp_right_tl
+ RSB \tl_use:N \l__chemmacros_state_sb_right_tl
+ }
+ {
+ \LWR@origensuredmath{
+ \chemmacros_text:V \l__chemmacros_state_pre_tl
+ \c_math_superscript_token
+ { \chemmacros_text:V \l__chemmacros_state_sp_left_tl }
+% \end{macrocode}
+% Only add the subscripts if they are being used.
+% This avoids causing an incorrect depth, as the empty subscript will be
+% measured by \TeX\ but cropped out by \prog{pdfcrop}.
+% \begin{macrocode}
+ \tl_if_empty:NTF \l__chemmacros_state_sb_left_tl
+ {}
+ {
+ \c_math_subscript_token
+ { \chemmacros_text:V \l__chemmacros_state_sb_left_tl }
+ }
+ #2
+ \c_math_superscript_token
+ { \chemmacros_text:V \l__chemmacros_state_sp_right_tl }
+ \tl_if_empty:NTF \l__chemmacros_state_sb_right_tl
+ {}
+ {
+ \c_math_subscript_token
+ { \chemmacros_text:V \l__chemmacros_state_sb_right_tl }
+ }
+ \chemmacros_text:V \l__chemmacros_state_post_tl
+ }
+ }
+ \group_end:
+ }
+\cs_generate_variant:Nn \chemmacros_state:nn { nV }
+
+\cs_gset_protected:Npn \chemmacros_declare_state:Nn #1#2
+ {
+ \chemmacros_define_keys:xn
+ {thermodynamics/\chemmacros_remove_backslash:N #1}
+ {
+ pre .meta:nn = {chemmacros/thermodynamics} { pre = ##1 } ,
+ post .meta:nn = {chemmacros/thermodynamics} { post = ##1 } ,
+ superscript-left .meta:nn = {chemmacros/thermodynamics} { superscript-left = ##1 } ,
+ superscript-right .meta:nn = {chemmacros/thermodynamics} { superscript-right = ##1 } ,
+ superscript .meta:n = { superscript-right = ##1 } ,
+ subscript-left .meta:nn = {chemmacros/thermodynamics} { subscript-left = ##1 } ,
+ subscript-right .meta:nn = {chemmacros/thermodynamics} { subscript-right = ##1 } ,
+ subscript .meta:n = { subscript-left = ##1 } ,
+ subscript-pos .choices:nn =
+ { left , right }
+ { \tl_set_eq:NN \l__chemmacros_state_sb_pos_tl \l_keys_choice_tl } ,
+ symbol .tl_set:N = \l__chemmacros_state_symbol_tl ,
+ unit .tl_set:N = \l__chemmacros_state_unit_tl
+ }
+ \DeclareDocumentCommand #1 { sO{}D(){}m }
+ {
+ \group_begin:
+ \chemmacros_set_keys:xn
+ {thermodynamics/\chemmacros_remove_backslash:N #1}
+ {#2}
+ \tl_if_blank:nF {##3}
+ {
+ \chemmacros_set_keys:nx {thermodynamics}
+ { subscript-\l__chemmacros_state_sb_pos_tl = \exp_not:n {##3} }
+ }
+ \chemmacros_state:nV {##2} \l__chemmacros_state_symbol_tl
+ \chemmacros_set_keys_groups:nnn {thermodynamics} {variables} {##2}
+ \IfBooleanF {##1} { = ~ \SI {##4} { \l__chemmacros_state_unit_tl } }
+ \group_end:
+ }
+ }
+% \end{macrocode}
+%
+% The pre-existing macros are redefined with the new definition:
+% \begin{macrocode}
+\RenewChemState \enthalpy { symbol = H , unit = \kilo\joule\per\mole }
+\RenewChemState \entropy { symbol = S , unit = \joule\per\kelvin\per\mole , pre = }
+\RenewChemState \gibbs { symbol = G , unit = \kilo\joule\per\mole }
+
+}{}% \@ifchemmacrosmoduleloaded
+}% AtBeginDocument
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ExplSyntaxOff
+% \end{macrocode}
+
+% \iffalse
+%</chemmacros>
+% \fi
+%
+%
+% \addtocontents{toc}{\protect\setcounter{tocdepth}{0}}
+%
+%
+% \iffalse
+%<*chemnum>
+% \fi
+%
+% \part{lwarp-chemnum.sty}
+
+% \section{chemnum}
+%
+% \credits{Clemens Niederberger}
+%
+% \DescribePackage{chemnum}
+% \pkg{chemnum} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.51}{2018/03/04}{\pkg{chemnum}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{chemnum}[2016/04/14]
+% \end{macrocode}
+
+% \begin{macrocode}
+\ExplSyntaxOn
+
+\cs_gset_protected:Npn \chemnum_compound_write:n #1
+ {
+ \chemnum_get_compound_property:nn {#1} {pre-main-label-code}
+ \group_begin:
+ \bool_if:NTF \l__chemnum_compound_local_bool
+ { \l__chemnum_local_label_format_tl }
+ { \chemnum_get_compound_property:nn {#1} {label-format} }
+ {
+ \LWR@textcurrentfont{
+ \chemnum_get_compound_property:nn {#1} {counter-representation}
+ }
+ }
+ \group_end:
+ \chemnum_get_compound_property:nn {#1} {post-main-label-code}
+ }
+
+\cs_gset_protected:Npn \chemnum_subcompound_write:nn #1#2
+ {
+ \group_begin:
+ \bool_if:NTF \l__chemnum_compound_local_bool
+ { \l__chemnum_local_label_format_tl }
+ { \chemnum_get_compound_property:nn {#1} {label-format} }
+ {
+ \LWR@textcurrentfont{
+ \chemnum_get_subcompound_property:nnn {#1} {#2}
+ {counter-representation}
+ }
+ }
+ \group_end:
+ }
+
+\ExplSyntaxOff
+% \end{macrocode}
+
+% \iffalse
+%</chemnum>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*chkfloat>
+% \fi
+%
+% \part{lwarp-chkfloat.sty}
+%
+% \section{chkfloat}
+%
+% \DescribePackage{chkfloat}
+% \pkg{chkfloat} is ignored.
+%
+% \changes{v0.61}{2018/10/05}{\pkg{chkfloat}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{chkfloat}[2012/08/19]
+% \end{macrocode}
+%
+% \iffalse
+%</chkfloat>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*chngpage>
+% \fi
+
+% \part{lwarp-chngpage.sty}
+
+% \section{chngpage}
+%
+% \credits{Peter Wilson}
+%
+% \DescribePackage{chngpage}
+% \pkg{chngpage} is ignored.
+%
+% \changes{v0.54}{2018/04/19}{\pkg{chngpage}: Added.}
+% \changes{v0.62}{2018/10/18}{\pkg{chngpage}: Fix: Loads \pkg{lwarp-chngpage}.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-chngpage}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{chngpage}[2009/10/20]
+\LWR@origRequirePackage{lwarp-changepage}
+% \end{macrocode}
+
+% \iffalse
+%</chngpage>
+% \fi
+%
+%
+%
+% \iffalse
+%<*cite>
+% \fi
+%
+% \part{lwarp-cite.sty}
+
+% \section{cite}
+%
+% \credits{Donald Arseneau}
+%
+% \DescribePackage{cite}
+% \pkg{cite} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.45}{2018/01/13}{\pkg{cite}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{cite}[2015/02/27]
+% \end{macrocode}
+
+% For the [super] option, the \cs{kern} must be removed:
+% \begin{macrocode}
+\def\LWRCT@biblabel#1{\@citess{#1}\kern-\labelsep\,}
+
+\ifdefstrequal{\@biblabel}{\LWRCT@biblabel}
+{
+ \def\@biblabel#1{\@citess{#1}}
+}{}
+% \end{macrocode}
+
+% For the [super] option, \cs{textsuperscript} is used instead of math superscript:
+% \begin{macrocode}
+\def\@citess#1{\textsuperscript{#1}}
+
+\DeclareDocumentCommand\citepunct{}{,\,\relax}
+% \end{macrocode}
+
+% \iffalse
+%</cite>
+% \fi
+%
+%
+%
+% \iffalse
+%<*CJK>
+% \fi
+%
+% \part{lwarp-CJK.sty}
+%
+% \section{CJK}
+%
+% \DescribePackage{CJK}
+% \pkg{CJK} does not work with \pkg{lwarp} unless called from \pkg{ctex}.
+%
+% \changes{v0.62}{2018/11/18}{\pkg{CJK}: Prevented unless \pkg{xeCJK}.}
+%
+% \codehtml
+% \begin{macrocode}
+\@ifpackageloaded{xeCJK}{}{
+ \LWR@loadnever{CJK}{ctex, xeCJK}
+}
+
+\LWR@ProvidesPackagePass{CJK}[2015/04/18]
+% \end{macrocode}
+%
+% \iffalse
+%</CJK>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*CJKutf8>
+% \fi
+%
+% \part{lwarp-CJKutf8.sty}
+%
+% \section{CJKutf8}
+%
+% \DescribePackage{CJKutf8}
+% \pkg{CJKutf8} does not work with \pkg{lwarp} unless called from \pkg{ctex}.
+%
+% \changes{v0.62}{2018/11/18}{\pkg{CJKutf8}: Prevented unless \pkg{xeCJK}.}
+%
+% \codehtml
+% \begin{macrocode}
+\@ifpackageloaded{xeCJK}{}{
+ \LWR@loadnever{CJKutf8}{ctex, xeCJK}
+}
+
+\LWR@ProvidesPackagePass{CJKutf8}[2015/04/18]
+% \end{macrocode}
+%
+% \iffalse
+%</CJKutf8>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*clrdblpg>
+% \fi
+%
+% \part{lwarp-clrdblpg.sty}
+%
+% \section{clrdblpg}
+%
+% \DescribePackage{clrdblpg}
+% \pkg{clrdblpg} is ignored.
+%
+% \changes{v0.55}{2018/04/24}{\pkg{clrdblpg}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{clrdblpg}[2018/04/21]
+% \end{macrocode}
+%
+% \iffalse
+%</clrdblpg>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*cmdtrack>
+% \fi
+%
+% \part{lwarp-cmdtrack.sty}
+%
+% \section{cmdtrack}
+%
+% \DescribePackage{cmdtrack}
+% \pkg{cmdtrack} is ignored.
+%
+% \changes{v0.61}{2018/10/05}{\pkg{cmdtrack}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{cmdtrack}[2012/12/18]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\untrack}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</cmdtrack>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*color>
+% \fi
+%
+% \part{lwarp-color.sty}
+%
+% \section{color}
+%
+% \DescribePackage{color} Allowed but ignored.
+% \pkg{xcolor} is then required as well.
+%
+% \limitscolor
+%
+% \changes{v0.37}{2017/08/18}{\pkg{color}: Prevented.}
+% \changes{v0.38}{2017/08/25}{\pkg{color}: Forces \pkg{xcolor} as well.}
+% \changes{v0.67}{2019/02/12}{\pkg{color}: Fix for version number.}
+%
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{color}[2016/07/10]
+\RequirePackage{xcolor}
+% \end{macrocode}
+%
+% \iffalse
+%</color>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*colortbl>
+% \fi
+%
+% \part{lwarp-colortbl.sty}
+%
+% \section{colortbl}
+%
+% \DescribePackage{colortbl}
+% \pkg{colortbl} is used as-is for print output,
+% and emulated for \HTML.
+%
+% \changes{v0.48}{2018/02/05}{\pkg{colortbl}: Added.}
+%
+% \limitscolortbl
+%
+%
+% \codehtml
+%
+% A placeholder definition is forgotten first:
+% \begin{macrocode}
+\let\rowcolor\relax
+
+\LWR@ProvidesPackagePass{colortbl}[2018/12/12]
+% \end{macrocode}
+%
+%
+% The following \cs{LWR@HTML} versions are used inside an \HTML\ \env{tabular}.
+%
+% \begin{noindmacro}{\columncolor} \oarg{model} \marg{color} \oarg{left overhang} \oarg{right overhang}
+%
+% \cs{LWR@getmynexttoken} is not used here because \cs{columncolor} is not used
+% inside the data area of the tabular.
+%
+% \changes{v0.57}{2018/06/02}{\pkg{colortbl}: New system for switching print and \HTML\ outputs.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@columncolor}{O{named} m o o}{%
+\convertcolorspec{#1}{#2}{HTML}\LWR@columnHTMLcolor%
+\LWR@addtabularcellcolor%
+}
+
+\AtBeginDocument{\LWR@formatted{columncolor}}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \cs{LWR@getmynexttoken} is used for \cs{rowcolor} because it is used
+% inside the data area of the tabular.
+%
+%
+% \begin{noindmacro}{\rowcolor} \oarg{model} \marg{color} \oarg{left overhang} \oarg{right overhang}
+%
+% \changes{v0.57}{2018/06/02}{\pkg{colortbl}: New system for switching print and \HTML\ outputs.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@rowcolor}{O{named} m o o}{%
+\convertcolorspec{#1}{#2}{HTML}\LWR@rowHTMLcolor%
+\LWR@getmynexttoken%
+}
+
+\AtBeginDocument{\LWR@expandableformatted{rowcolor}}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindmacro}{\cellcolor} \oarg{model} \marg{color} \oarg{left overhang} \oarg{right overhang}
+%
+% \changes{v0.57}{2018/06/02}{\pkg{colortbl}: New system for switching print and \HTML\ outputs.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@cellcolor}{O{named} m o o}{%
+\convertcolorspec{#1}{#2}{HTML}\LWR@cellHTMLcolor%
+\LWR@addtabularcellcolor%
+}
+
+\AtBeginDocument{\LWR@formatted{cellcolor}}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\arrayrulecolor} \oarg{model} \marg{color}
+%
+% The \HTML\ version for use outside a \env{tabular}.
+% Inside a \env{tabular}, \cs{LWR@HTML@arrayrulecolornexttoken} is used instead.
+%
+% \changes{v0.57}{2018/06/02}{\pkg{colortbl}: New system for switching print and \HTML\ outputs.}
+% \begin{macrocode}
+\newcommand{\LWR@HTML@arrayrulecolor}[2][named]{%
+\convertcolorspec{#1}{#2}{HTML}\LWR@ruleHTMLcolor%
+}
+
+\AtBeginDocument{\LWR@expandableformatted{arrayrulecolor}}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\LWR@arrayrulecolornexttoken} \oarg{model} \marg{color}
+%
+% The \HTML\ version for use inside a \env{tabular}.
+%
+% \changes{v0.57}{2018/06/02}{\pkg{colortbl}: New system for switching print and \HTML\ outputs.}
+% \begin{macrocode}
+\newcommand{\LWR@HTML@arrayrulecolornexttoken}[2][named]{%
+\convertcolorspec{#1}{#2}{HTML}\LWR@ruleHTMLcolor%
+\LWR@getmynexttoken%
+}
+
+\AtBeginDocument{\LWR@expandableformatted{arrayrulecolornexttoken}}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\doublerulesepcolor} \oarg{model} \marg{color}
+%
+% The version for use outside a \env{tabular}.
+% \begin{macrocode}
+\newcommand{\LWR@HTML@doublerulesepcolor}[2][named]{}
+
+\AtBeginDocument{\LWR@expandableformatted{doublerulesepcolor}}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\LWR@doublerulesepcolornexttoken} \oarg{model} \marg{color}
+%
+% The version for use inside a \env{tabular}.
+% \begin{macrocode}
+\newcommand{\LWR@HTML@doublerulesepcolornexttoken}[2][named]{\LWR@getmynexttoken}
+
+\AtBeginDocument{\LWR@expandableformatted{doublerulesepcolornexttoken}}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \iffalse
+%</colortbl>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*continue>
+% \fi
+%
+% \part{lwarp-continue.sty}
+%
+% \section{continue}
+%
+% \DescribePackage{continue}
+% \pkg{continue} is ignored.
+%
+% \changes{v0.45}{2017/12/19}{\pkg{continue}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{continue}}[2018/12/09]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\flagcont}{}
+\newcommand*{\flagend}{}
+\newcommand*{\flagword}{}
+\newcommand*{\preflagword}{}
+\newcommand*{\postflagword}{}
+\newlength\contsep
+\newlength\contdrop
+% \end{macrocode}
+%
+% \iffalse
+%</continue>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*copyrightbox>
+% \fi
+%
+% \part{lwarp-copyrightbox.sty}
+%
+% \section{copyrightbox}
+%
+% \credits{Thomas Fischer, Ives van der Flaas}
+%
+% \DescribePackage{copyrightbox}
+% \pkg{copyrightbox} is emulated for use by \pkg{lwarp}.
+%
+% The entire copyright box is placed inside a \element{div} of class \attribute{copyrightbox}.
+%
+% The contents are placed inside a \element{div} of class \attribute{copyrightboxcontents}.
+%
+% The copyright notice is placed inside a \element{div} of class \attribute{copyrightboxnote}.
+%
+% \changes{v0.61}{2018/09/23}{\pkg{copyrightbox}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{copyrightbox}[2011/11/27]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\copyrightbox}[3][r]{%
+\begin{BlockClass}[
+ display: inline-flex;
+ flex-direction: column ;
+]{copyrightbox}
+\begin{BlockClass}{copyrightboxcontents}
+#2
+\end{BlockClass}
+\begin{BlockClass}{copyrightboxnote}
+#3
+\end{BlockClass}
+\end{BlockClass}
+}
+
+\newcommand{\CRB@setcopyrightfont}{}
+\newcommand{\CRB@setcopyrightparagraphstyle}{}
+% \end{macrocode}
+%
+% \iffalse
+%</copyrightbox>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*crop>
+% \fi
+%
+% \part{lwarp-crop.sty}
+%
+% \section{crop}
+%
+% \credits{Melchior FRANZ}
+%
+% \DescribePackage{crop} \pkg{crop} is ignored.
+%
+% \changes{v0.34}{2017/08/03}{\pkg{crop}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-crop}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{crop}[2003/05/20]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\crop}[1][]{}
+\newcommand*{\cropdef}[6][]{}
+% \end{macrocode}
+%
+% \iffalse
+%</crop>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*ctable>
+% \fi
+%
+% \part{lwarp-ctable.sty}
+%
+% \section{ctable}
+%
+% \credits{Wybo Dekker}
+%
+% \DescribePackage{ctable}
+% \pkg{ctable} is patched for use by \pkg{lwarp}.
+%
+% \limitsctable
+%
+% \changes{v0.69}{2019/03/09}{\pkg{ctable}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{ctable}[2015/10/17]
+% \end{macrocode}
+%
+% The following is in the original:
+% \begin{macrocode}
+\newcommand{\LWR@HTML@ctable}[4][]{%
+ \let\@CTtaborfig \@dfltCTtaborfig
+ \let\@CTalign \@dfltCTalign
+ \let\@CTsideways \@dfltCTsideways
+ \let\@CTcontinued \empty
+ \let\@CTpos \@dfltCTpos
+ \let\@CTcaption \empty
+ \let\@CTcap \undefined
+ \let\@CTlabel \empty
+ \let\@CTbotcap \@dfltCTbotcap
+ \let\@CTstarred \@dfltCTstarred
+ \let\@CTsuper \@dfltCTsuper
+ \let\@CTnotespar \@dfltCTnotespar
+ \let\@CTdoinside \@dfltCTdoinside
+ \let\@CTbgopacity \@dfltCTbgopacity
+ \@CTframerule \@dfltCTframerule
+ \@CTcaptionskip \@dfltCTcaptionskip
+ \@CTframesep \@dfltCTframesep
+ \@CTwidth \@dfltCTwidth
+ \@CTmaxwidth \@dfltCTmaxwidth
+ \@CTmincapwidth \@dfltCTmincapwidth
+ \@CTfooterwidth \@dfltCTfooterwidth
+ \def\@CTfgactual {@dfltCTframefg}%
+ \def\@CTbgactual {@dfltCTframebg}%
+ \def\@CTbeg {\begin{\@CTsideways\@CTtaborfig\@CTstarred}}%
+ \def\@CTbegin {\@CTbeg}%
+ \def\@CTend {\end{\@CTsideways\@CTtaborfig\@CTstarred}}%
+ \setkeys{CT}{#1}%
+ \ifx\@CTcap\undefined\let\@CTcap\@CTcaption\fi
+ \ifx\@CTcap\empty
+ \if@CTcaptionloaded\else
+ \PackageWarningNoLine{lwarp-ctable}{\MessageBreak
+ An empty cap= option prevents lot/loc entry only\MessageBreak
+ if the caption package is loaded!}
+ \fi
+ \fi
+ \if@CTinmemoir\else
+ \ifx\@CTbotcap\undefined
+ \PackageError{lwarp-ctable}{\MessageBreak
+ You can, currently, use the sidecap option only with\MessageBreak
+ memoir documents. Use topcap or botcap only}
+ \fi
+ \fi
+ \ifdim\@CTwidth=0pt\else
+ \ifdim\@CTmaxwidth=0pt\else
+ \PackageError{lwarp-ctable}{\MessageBreak
+ You may not use the width and maxwidth options together\MessageBreak
+ Use either width or maxwidth}
+ \fi
+ \fi
+ \ifx\@CTpos\empty
+ \ifx\@CTsideways\empty\else
+ \PackageError{lwarp-ctable}{\MessageBreak
+ You may not use the pos and sideways options together\MessageBreak
+ Rotated tables and figures are always typeset on a separate page}
+ \fi
+ \fi
+ \ifx\@CTcaption\empty
+ \ifx\@CTlabel\empty\else
+ \PackageError{lwarp-ctable}{\MessageBreak
+ You may not label a captionless table\MessageBreak
+ Such a label can't be referenced}
+ \fi
+ \fi
+% \end{macrocode}
+%
+% Some of the original, regarding computing the width of \cs{CT@t}, is removed here.
+%
+% \begin{macrocode}
+ \@CTbegin
+ \ifx\@CTcontinued\empty\else\addtocounter{\@CTtaborfig}{-1}\fi
+ \@CTalign
+% \end{macrocode}
+%
+% \pkg{lwarp}'s patches begin here:
+% \begin{macrocode}
+ \begin{center}
+ \setlength{\fboxrule}{\@CTframerule}
+ \setlength{\fboxsep}{\@CTframesep}
+ \LWR@forceminwidth{\fboxrule}% lwarp
+ \convertcolorspec{named}{\@CTbgactual}{HTML}\LWR@tempcolor% lwarp
+ \begin{BlockClass}[% lwarp
+ border:
+ \LWR@printlength{\LWR@atleastonept}
+ solid
+ \LWR@colorstyle{named}{\@CTfgactual} ; %
+ padding:\LWR@printlength{\fboxsep} ; %
+ \ifdefstring{\LWR@tempcolor}{FFFFFF}{}{%
+ background: \LWR@colorstyle{named}{\@CTbgactual} ; %
+ }%
+ ]{fminipage}% lwarp
+ \ifx\@CTbotcap\@CTfalse\@CTCaption\vskip\@CTcaptionskip\fi
+ \ifx\@CTbotcap\undefined%
+ \begin{sidecaption}[\@CTcap]{\@CTcaption}[\@CTlabel]
+ \fi
+ \@CTdoinside
+ \begin{tabularx}{\linewidth}{#2}% lwarp
+ #4%
+ \end{tabularx}% lwarp
+ \def\@CTfootnotes{#3}%
+ \ifx#3\empty\else{% append footnotes, if any
+ \begin{BlockClass}{tnotes}% lwarp
+ #3
+ \end{BlockClass}% lwarp
+ }
+ \fi
+ \ifx\@CTbotcap\undefined\end{sidecaption}\fi
+ \ifx\@CTbotcap\@CTtrue\vskip\@CTcaptionskip\@CTCaption\fi
+ \end{BlockClass}
+ \end{center}
+ \@CTend
+}
+\LWR@formatted{ctable}
+% \end{macrocode}
+%
+% Required to properly detect the toprule:
+% \begin{macrocode}
+\LetLtxMacro\FL\toprule
+% \end{macrocode}
+%
+% Table notes are redefined for \HTML:
+% \begin{macrocode}
+\newcommand{\LWR@HTML@tmark}[1][a]{%
+ \textsuperscript{\textrm{\textit{#1}}}
+}
+\LWR@formatted{tmark}
+
+\newcommand{\LWR@HTML@tnote}[2][a]{%
+ \tmark[#1]\,#2\par
+}
+\LWR@formatted{tnote}
+% \end{macrocode}
+%
+% \iffalse
+%</ctable>
+% \fi
+%
+%
+%
+% \iffalse
+%<*cuted>
+% \fi
+%
+% \part{lwarp-cuted.sty}
+%
+% \section{cuted}
+%
+% \credits{Sigitas Tolu\v{s}is}
+%
+% \DescribePackage{cuted}
+% \pkg{cuted} is ignored.
+%
+% \changes{v0.40}{2017/09/07}{\pkg{cuted}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{cuted}[2012/10/04]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newenvironment{strip}{}{}
+\newskip\stripsep
+\def\oldcolsbreak#1{}
+% \end{macrocode}
+%
+% \iffalse
+%</cuted>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*cutwin>
+% \fi
+%
+% \part{lwarp-cutwin.sty}
+%
+% \section{cutwin}
+%
+% \credits{Peter Wilson and Alan Hoenig}
+%
+% \DescribePackage{cutwin} \pkg{cutwin} is emulated.
+%
+% \changes{v0.26}{2017/03/30}{\pkg{cutwin}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-cutwin}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{cutwin}[2010/09/29]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\opencutleft}{}
+\newcommand*{\opencutright}{}
+\newcommand*{\opencutcenter}{}
+\newcommand*{\cutfuzz}{}
+
+\newenvironment{cutout}[4]
+{\marginpar{\windowpagestuff}}
+{}
+
+\newcommand*{\windowpagestuff}{}
+
+\newcommand*{\pageinwindow}{%
+% \begin{minipage}{.3\linewidth}
+\windowpagestuff
+% \end{minipage}
+}
+
+\newenvironment{shapedcutout}[3]
+{\marginpar{\picinwindow}}
+{}
+
+\newcommand*{\putstuffinpic}{}
+
+\newcommand*{\picinwindow}{%
+\begin{picture}(0,0)
+\putstuffinpic
+\end{picture}}
+% \end{macrocode}
+%
+% \iffalse
+%</cutwin>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*dblfloatfix>
+% \fi
+%
+% \part{lwarp-dblfloatfix.sty}
+%
+% \section{dblfloatfix}
+%
+% \DescribePackage{dblfloatfix}
+% \pkg{dblfloatfix} is ignored.
+%
+% \changes{v0.50}{2018/02/20}{\pkg{dblfloatfix}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{dblfloatfix}[2012/12/31]
+% \end{macrocode}
+%
+% \iffalse
+%</dblfloatfix>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*dblfnote>
+% \fi
+%
+% \part{lwarp-dblfnote.sty}
+%
+% \section{dblfnote}
+%
+% \credits{Hiroshi Nakashima}
+%
+% \DescribePackage{dblfnote}
+% \pkg{dblfnote} is ignored.
+%
+% \changes{v0.40}{2017/09/06}{\pkg{dblfnote}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{dblfnote}[1999/07/14]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcounter{DFNsloppiness}
+\newdimen\DFNcolumnsep
+\newdimen\DFNcolumnwidth
+\def\DFNallowcbreak{}
+\def\DFNinhibitcbreak{}
+\def\DFNtrysingle{}
+\def\DFNalwaysdouble{}
+\def\DFNruleboth{}
+\def\DFNruleleft{}
+% \end{macrocode}
+%
+% \iffalse
+%</dblfnote>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*dcolumn>
+% \fi
+%
+% \part{lwarp-dcolumn.sty}
+%
+% \section{dcolumn}
+% \label{sec:dcolumn}
+%
+% \changes{v0.22}{2017/02/24}{\pkg{dcolumn}: Added.}
+%
+% \DescribePackage{dcolumn}
+% \pkg{dcolumn} is emulated by the \pkg{lwarp} core.
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{dcolumn}[2014/10/28]
+% \end{macrocode}
+%
+% \iffalse
+%</dcolumn>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*diagbox>
+% \fi
+%
+% \part{lwarp-diagbox.sty}
+
+% \section{diagbox}
+%
+% \credits{Leo Liu}
+%
+% \DescribePackage{diagbox}
+% \pkg{diagbox} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.50}{2018/02/21}{\pkg{diagbox}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{diagbox}[2016/12/28]
+% \end{macrocode}
+%
+% To restore print-mode inside a \env{lateximage}:
+% \begin{macrocode}
+\LetLtxMacro\LWR@origdiagbox@double\diagbox@double
+\LetLtxMacro\LWR@origdiagbox@triple\diagbox@triple
+
+\appto\LWR@restoreorigformatting{%
+\LetLtxMacro\diagbox@double\LWR@origdiagbox@double%
+\LetLtxMacro\diagbox@triple\LWR@origdiagbox@triple%
+}
+% \end{macrocode}
+
+% \begin{noindmacro}{\LWR@diagbox@AB} \marg{E/W} \marg{A} \marg{E/W} \marg{B}
+% \begin{macrocode}
+\newcommand{\LWR@diagbox@AB}[4]{
+\begingroup%
+\LetLtxMacro\\\newline%
+\BlockClassSingle{diagbox#1}{#2}%
+\BlockClassSingle{diagbox#3}{#4}%
+\endgroup%
+\LWR@stoppars%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\LWR@diagboxNW} \marg{A} \marg{B}
+% \begin{macrocode}
+\newcommand{\LWR@diagboxNW}[2]{%
+\LWR@diagbox@AB{E}{#2}{W}{#1}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% Likewise for NE, SW, SE:
+% \begin{macrocode}
+\newcommand{\LWR@diagboxNE}[2]{%
+\LWR@diagbox@AB{W}{#1}{E}{#2}%
+}
+
+\let\LWR@diagboxSW\LWR@diagboxNE
+\let\LWR@diagboxSE\LWR@diagboxNW
+% \end{macrocode}
+
+% \begin{noindmacro}{\diagbox@double} \marg{keys} \marg{A} \marg{B}
+% \begin{macrocode}
+\def\diagbox@double#1#2#3{%
+\setkeys{diagbox}{dir=NW,#1}%
+\@nameuse{LWR@diagbox\diagbox@dir}{#2}{#3}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\LWR@diagboxTNW} \marg{title} \marg{A} \marg{B}
+% \begin{macrocode}
+\newcommand{\LWR@diagboxTNW}[3]{%
+\BlockClassSingle{diagboxtitleN}{#1}
+\LWR@diagboxNW{#2}{#3}
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% Likewise for NE, SW, SE:
+% \changes{v0.60}{2018/09/17}{\pkg{diagbox}: Fix for par tags.}
+% \begin{macrocode}
+\newcommand{\LWR@diagboxTNE}[3]{%
+\BlockClassSingle{diagboxtitleN}{#1}
+\LWR@diagboxNE{#2}{#3}
+}
+
+\newcommand{\LWR@diagboxTSW}[3]{%
+\LWR@diagboxSW{#2}{#3}
+\BlockClassSingle{diagboxtitleS}{#1}
+\LWR@stoppars%
+}
+
+\newcommand{\LWR@diagboxTSE}[3]{%
+\LWR@diagboxSE{#2}{#3}
+\BlockClassSingle{diagboxtitleS}{#1}
+\LWR@stoppars%
+}
+% \end{macrocode}
+%
+% \begin{noindmacro}{\diagbox@triple} \marg{keys} \marg{A} \marg{T} \marg{B}
+% \begin{macrocode}
+\def\diagbox@triple#1#2#3#4{%
+\setkeys{diagbox}{dir=NW,#1}%
+\@nameuse{LWR@diagboxT\diagbox@dir}{#3}{#2}{#4}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \iffalse
+%</diagbox>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*dingbat>
+% \fi
+%
+% \part{lwarp-dingbat.sty}
+%
+% \section{dingbat}
+%
+% \credits{Scott Pakin}
+%
+% \DescribePackage{dingbat}
+% \pkg{dingbat} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.67}{2019/02/22}{\pkg{dingbat}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{dingbat}[2001/04/27]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@dingbatsymbol}[1]{\HTMLunicode{#1}}
+
+\newcommand{\LWR@HTML@rightpointright}{\LWR@dingbatsymbol{261E}}
+\newcommand{\LWR@HTML@leftpointright}{\LWR@dingbatsymbol{261E}}
+\newcommand{\LWR@HTML@leftthumbsdown}{\LWR@dingbatsymbol{1F44E}}
+\newcommand{\LWR@HTML@leftthumbsup}{\LWR@dingbatsymbol{1F44D}}
+\newcommand{\LWR@HTML@rightpointleft}{\LWR@dingbatsymbol{261C}}
+\newcommand{\LWR@HTML@rightthumbsdown}{\LWR@dingbatsymbol{1F44E}}
+\newcommand{\LWR@HTML@rightthumbsup}{\LWR@dingbatsymbol{1F44D}}
+\newcommand{\LWR@HTML@squarewithdots}{\LWR@dingbatsymbol{25C7}}
+\newcommand{\LWR@HTML@filledsquarewithdots}{\LWR@dingbatsymbol{25C6}}
+\newcommand{\LWR@HTML@Sborder}{\LWR@dingbatsymbol{271A}}
+\newcommand{\LWR@HTML@Zborder}{\LWR@dingbatsymbol{274B}}
+\newcommand{\LWR@HTML@largepencil}{\LWR@dingbatsymbol{270E}}
+\newcommand{\LWR@HTML@anchor}{\LWR@dingbatsymbol{2693}}
+\newcommand{\LWR@HTML@carriagereturn}{\LWR@dingbatsymbol{23CE}}
+\newcommand{\LWR@HTML@checkmark}{\LWR@dingbatsymbol{2713}}
+\newcommand{\LWR@HTML@eye}{\LWR@dingbatsymbol{1F441}}
+\newcommand{\LWR@HTML@satellitedish}{\LWR@dingbatsymbol{1F4E1}}
+\newcommand{\LWR@HTML@smallpencil}{\LWR@dingbatsymbol{270E}}
+
+\LWR@formatted{rightpointright}
+\LWR@formatted{leftpointright}
+\LWR@formatted{leftthumbsdown}
+\LWR@formatted{leftthumbsup}
+\LWR@formatted{rightpointleft}
+\LWR@formatted{rightthumbsdown}
+\LWR@formatted{rightthumbsup}
+\LWR@formatted{squarewithdots}
+\LWR@formatted{filledsquarewithdots}
+\LWR@formatted{Sborder}
+\LWR@formatted{Zborder}
+\LWR@formatted{largepencil}
+\LWR@formatted{anchor}
+\LWR@formatted{carriagereturn}
+\LWR@formatted{checkmark}
+\LWR@formatted{eye}
+\LWR@formatted{satellitedish}
+\LWR@formatted{smallpencil}
+% \end{macrocode}
+%
+% \iffalse
+%</dingbat>
+% \fi
+%
+%
+%
+% \iffalse
+%<*dprogress>
+% \fi
+%
+% \part{lwarp-dprogress.sty}
+%
+% \section{dprogress}
+%
+% \DescribePackage{dprogress}
+% \pkg{dprogress} is ignored.
+%
+% \changes{v0.61}{2018/10/05}{\pkg{dprogress}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{dprogress}[2008/02/21]
+% \end{macrocode}
+%
+% \iffalse
+%</dprogress>
+% \fi
+%
+%
+%
+% \iffalse
+%<*draftcopy>
+% \fi
+%
+% \part{lwarp-draftcopy.sty}
+%
+% \section{draftcopy}
+%
+% \DescribePackage{draftcopy}
+% \pkg{draftcopy} is ignored.
+%
+% \changes{v0.59}{2018/09/06}{\pkg{draftcopy}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{draftcopy}[2002/02/25]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\draftcopyVersion}[1]{}
+\newcommand{\draftcopySetGrey}[1]{}
+\newcommand{\draftcopySetScale}[1]{}
+\newcommand{\draftcopySetScaleFactor}[1]{}
+\newcommand{\draftcopyFirstPage}[1]{}
+\newcommand{\draftcopyLastPage}[1]{}
+\newcommand{\draftcopyName}[2]{}
+\newcommand{\draftcopyPageTransform}[1]{}
+\newcommand{\draftcopyBottomTransform}[1]{}
+\newcommand{\draftcopyPageX}[1]{}
+\newcommand{\draftcopyPageY}[1]{}
+\newcommand{\draftcopyBottomX}[1]{}
+\newcommand{\draftcopyBottomY}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</draftcopy>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*draftfigure>
+% \fi
+%
+% \part{lwarp-draftfigure.sty}
+%
+% \section{draftfigure}
+%
+% \DescribePackage{draftfigure}
+% \pkg{draftfigure} is ignored.
+%
+% \changes{v0.60}{2018/09/18}{\pkg{draftfigure}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{draftfigure}[2017/07/19]
+\RequirePackage{xkeyval}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\define@key{draftfigure}{code}{}
+\define@key{draftfigure}{noframe}[true]{}
+\define@key{draftfigure}{filename}[true]{}
+\define@key{draftfigure}{content}[]{}
+\define@key{draftfigure}{style}[normal]{}
+\define@key{draftfigure}{position}[left]{}
+\define@key{draftfigure}{size}[normal]{}
+\newcommand\setdf[1]{\setkeys{draftfigure}{#1}}
+% \end{macrocode}
+%
+% \iffalse
+%</draftfigure>
+% \fi
+%
+%
+%
+% \iffalse
+%<*draftwatermark>
+% \fi
+
+% \part{lwarp-draftwatermark.sty}
+
+% \section{draftwatermark}
+% \label{sec:draftwatermark}
+%
+% \credits{Sergio Callegari}
+%
+% \changes{v0.20}{2017/01/11}{\pkg{draftwatermark}: Added.}
+%
+% \DescribePackage{draftwatermark}
+% \pkg{draftwatermark} is ignored.
+
+% \codehtml
+
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{draftwatermark}[2015/02/19]
+% \end{macrocode}
+
+% \begin{macrocode}
+\newcommand{\SetWatermarkAngle}[1]{}
+\newcommand{\SetWatermarkColor}[1]{}
+\newcommand{\SetWatermarkLightness}[1]{}
+\newcommand{\SetWatermarkFontSize}[1]{}
+\newcommand{\SetWatermarkScale}[1]{}
+\newcommand{\SetWatermarkHorCenter}[1]{}
+\newcommand{\SetWatermarkVertCenter}[1]{}
+\newcommand{\SetWatermarkText}[1]{}
+% \end{macrocode}
+
+% \iffalse
+%</draftwatermark>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*easy-todo>
+% \fi
+%
+% \part{lwarp-easy-todo.sty}
+
+% \section{easy-todo}
+%
+% \credits{Juan Rada-Vilela}
+%
+% \DescribePackage{easy-todo}
+% \pkg{easy-todo} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.44}{2017/11/10}{\pkg{easy-todo}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{easy-todo}[2014/01/01]
+% \end{macrocode}
+
+% \begin{noindmacro}{\listoftodos}
+% Modified to correct buggy use of \cs{flushright}.
+% \begin{macrocode}
+\let\LWR@origlistoftodos\listoftodos
+
+\renewcommand{\listoftodos}{%
+\begingroup
+\renewcommand{\flushright}{}
+\LWR@origlistoftodos
+\endgroup
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\todoii}
+% Modified to use \cs{textcolor} instead of \cs{color}.
+% \begin{macrocode}
+\renewcommand{\todoii}[2]{%
+\ifthenelse{\equal{\@todoobeyfinal}{true}}%
+ {%
+ \ifoptionfinal{\todoenable{false}}{\todoenable{true}}%
+ }%
+ {}%
+\ifthenelse{\equal{\@todoenable}{true}}%
+ {%
+ \refstepcounter{todos}%
+ \noindent{%
+ \todocolor%
+ \LWR@textcurrentcolor{%
+ \normalfont\scriptsize{\bfseries{\thetodos.#1}}%
+ }%
+ }%
+ \addcontentsline{lod}{todos}{\protect{\thetodos. }\LWR@isolate{#2}}%
+ }%
+ {}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \iffalse
+%</easy-todo>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*ebook>
+% \fi
+%
+% \part{lwarp-ebook.sty}
+%
+% \section{ebook}
+%
+% \credits{Jørgen Steensgaard}
+%
+% \DescribePackage{ebook}
+% \pkg{ebook} is ignored.
+%
+% \changes{v0.39}{2017/08/27}{\pkg{ebook}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{ebook}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\setcounter{secnumdepth}{0}
+\setcounter{tocdepth}{2}
+
+\providecommand{\pagefill}[1][0.001mm]{\noindent}
+
+\providecommand{\ebook}{
+\setcounter{secnumdepth}{0}
+\setcounter{tocdepth}{2}
+}
+% \end{macrocode}
+%
+% \iffalse
+%</ebook>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*ed>
+% \fi
+%
+% \part{lwarp-ed.sty}
+%
+% \section{ed}
+%
+% \credits{Michael Kohlhase}
+%
+% \DescribePackage{ed}
+% \pkg{ed} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.66}{2019/02/05}{\pkg{ed}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{ed}[2012/01/29]
+% \end{macrocode}
+%
+% Bugs:
+% \begin{enumerate}
+% \item \env{todolist} fails with the \optn{hide} option, as does \cs{edexplanation}.
+% \item \cs{edstubURI} is actually \cs{edstuURI}.
+% \end{enumerate}
+%
+% \begin{macrocode}
+\RequirePackage{xcolor}
+
+\renewenvironment{edstub}[2][The following blue text]
+{%
+ \def\@test{#1}%
+ \begin{center}%
+ \huge%
+ \textcolor{red}{%
+ #1 is only a provisional stub\\\Large
+ the Office document
+ \ifx\ed@stubURI\@empty{#2}\else\href{\ed@stubURI}{#2}\fi\
+ contains more text\\which will be merged for the final document%
+ }%
+ \end{center}%
+ \BlockClass[color:blue]{edstub}%
+}
+{\endBlockClass}
+% \end{macrocode}
+%
+% \iffalse
+%</ed>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*ellipsis>
+% \fi
+
+% \part{lwarp-ellipsis.sty}
+
+% \section{ellipsis}
+% \label{sec:ellipsis}
+%
+% \credits{Peter J. Heslin}
+%
+% \changes{v0.25}{2017/03/16}{\pkg{ellipsis}: Added.}
+% \changes{v0.57}{2018/05/15}{\pkg{ellipsis}: Added \cs{midwordellipsis}.}
+%
+% \DescribePackage{ellipsis}
+% \pkg{ellipsis} is emulated.
+
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{ellipsis}[2004/09/28]
+
+\newcommand{\ellipsisgap}{0.1em}
+
+\newcommand*{\midwordellipsis}{\,\textellipsis\,}
+% \end{macrocode}
+
+% \iffalse
+%</ellipsis>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*embrac>
+% \fi
+%
+% \part{lwarp-embrac.sty}
+%
+% \section{embrac}
+%
+% \credits{Clemens Niederberger}
+%
+% \DescribePackage{embrac}
+% \pkg{embrac} is nullfied for \HTML\, and used as-is for print.
+%
+% \changes{v0.65}{2018/12/10}{\pkg{embrac}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{embrac}[2017/07/04]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LetLtxMacro\LWR@orig@HTML@emph\LWR@HTML@emph
+\RenewDocumentCommand{\LWR@HTML@emph}{s m}{\LWR@orig@HTML@emph{#2}}
+
+\LetLtxMacro\LWR@orig@HTML@textit\LWR@HTML@textit
+\RenewDocumentCommand{\LWR@HTML@textit}{s m}{\LWR@orig@HTML@textit{#2}}
+
+\LetLtxMacro\LWR@orig@HTML@textsl\LWR@HTML@textsl
+\RenewDocumentCommand{\LWR@HTML@textsl}{s m}{\LWR@orig@HTML@textsl{#2}}
+
+\ifxetexorluatex
+ \LetLtxMacro\LWR@orig@HTML@textsi\LWR@HTML@textsi
+ \RenewDocumentCommand{\LWR@HTML@textsi}{s m}{%
+ \LWR@orig@HTML@textsi{#2}}
+\fi
+
+\AtBeginDocument{
+ \LWR@formatted{emph}
+ \LWR@formatted{textit}
+ \LWR@formatted{textsl}
+ \ifxetexorluatex
+ \LWR@formatted{textsi}
+ \fi
+}
+
+\newcommand{\LWR@HTML@EmbracOff}{}
+\LWR@formatted{EmbracOff}
+
+\newcommand{\LWR@HTML@EmbracOn}{}
+\LWR@formatted{EmbracOn}
+% \end{macrocode}
+%
+% \iffalse
+%</embrac>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*emptypage>
+% \fi
+
+% \part{lwarp-emptypage.sty}
+
+% \section{emptypage}
+%
+% \DescribePackage{emptypage}
+% \pkg{emptypage} is ignored.
+%
+% \changes{v0.25}{2017/03/22}{\pkg{emptypage}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-emptypage}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{emptypage}[2010/05/30]
+% \end{macrocode}
+
+% \iffalse
+%</emptypage>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*endfloat>
+% \fi
+%
+% \part{lwarp-endfloat.sty}
+%
+% \section{endfloat}
+%
+% \DescribePackage{endfloat}
+% \pkg{endfloat} is ignored.
+%
+% \changes{v0.45}{2017/12/19}{\pkg{endfloat}: Added.}
+% \changes{v0.52}{2018/03/26}{\pkg{endfloat}: Updated for v2.6.}
+% \changes{v0.71}{2019/04/25}{\pkg{endfloat}: Updated for v2.7.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{endfloat}[2019/04/15]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand\figureplace{}
+\newcommand\tableplace{}
+\newcommand\floatplace[1]{}
+\newcounter{posttable}
+\newcounter{postfigure}
+\newcommand*{\theposttbl}{}
+\newcommand*{\thepostfig}{}
+\newcommand{\AtBeginFigures}[1]{}
+\newcommand{\AtBeginTables}[1]{}
+\newcommand{\AtBeginDelayedFloats}[1]{}
+\newcommand*{\processdelayedfloats}{}
+\newcommand*{\efloatseparator}{}
+\def\efloattype{}
+\providecommand\efloatheading[1]{}
+\providecommand\efloatpreamble{}
+\providecommand\efloatpostamble{}
+\NewDocumentCommand{\addtodelayedfloat}{s m m}{}
+\providecommand{\efloatbegin}{}
+\providecommand{\efloatend}{}
+\providecommand{\efloatbeginlist}{}
+\providecommand{\efloatendlist}{}
+% \end{macrocode}
+%
+% \iffalse
+%</endfloat>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*endheads>
+% \fi
+%
+% \part{lwarp-endheads.sty}
+%
+% \section{endheads}
+%
+% \DescribePackage{endheads}
+% \pkg{endheads} is ignored.
+%
+% \changes{v0.47}{2018/01/25}{\pkg{endheads}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{endheads}[2017/04/06]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\changesinglepageabbrev}[1]{}
+\newcommand{\changemultiplepageabbrev}[1]{}
+\newcommand{\changenotesname}[1]{}
+\newcommand{\changenotesheader}[1]{}
+\newcommand{\changenotescontentsname}[1]{}
+\newcommand{\changechapternotesline}[1]{}
+\newcommand{\checknoteheaders}{}
+\newif\ifnotesincontentson \notesincontentsonfalse
+\newcommand{\notesincontents}{\notesincontentsontrue}
+\newif\ifendnoteheaderson \endnoteheadersonfalse
+\newcommand{\setupendnoteheaders}{%
+ \endnoteheadersontrue%
+}
+\newif\iftitleinnotes \titleinnotestrue
+\newcommand{\styleforchapternotebegin}{}
+\newcommand{\styleforchapternoteend}{}
+\newcommand{\setstyleforchapternotebegin}[1]{%
+ \renewcommand{\styleforchapternotebegin}{#1}%
+}
+\newcommand{\setstyleforchapternoteend}[1]{%
+ \renewcommand{\styleforchapternoteend}{#1}%
+}
+\newcommand{\resetendnotes}{}
+\newif\ifnotesbychapteron \notesbychapteronfalse
+\newcommand{\notesbychapter}{\notesbychapterontrue}
+% \end{macrocode}
+%
+% \iffalse
+%</endheads>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*endnotes>
+% \fi
+
+% \part{lwarp-endnotes.sty}
+%
+% \section{endnotes}
+%
+% \credits{John Lavagnino}
+%
+% \DescribePackage{endnotes} Used as-is.
+%
+% \limitsendnotes
+%
+% \bigskip
+%
+% \changes{v0.26}{2017/03/27}{\pkg{endnotes}: Added.}
+%
+%
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{endnotes}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\enoteformat{%
+% \rightskip\z@ \leftskip\z@ \parindent=1.8em
+\leavevmode
+% \llap{
+\makeenmark
+% }
+}
+
+\def\@makeenmark{\hbox{\LWR@htmlspan{sup}{\normalfont\theenmark}}}
+\def\makeenmark{\@makeenmark}
+% \end{macrocode}
+%
+% \iffalse
+%</endnotes>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*enumerate>
+% \fi
+%
+% \part{lwarp-enumerate.sty}
+%
+% \section{enumerate}
+% \label{sec:enumerate}
+%
+% \DescribePackage{enumerate}
+% \pkg{enumerate} is supported with no changes.
+
+% This package is only required because it was used in the past to drop
+% and then emulate the package.
+% It cannot be removed because an older version which dropped the
+% package may still remain, for example in a local vs. distribution directory,
+% but it is now supported directly by \pkg{lwarp} and thus must no longer be dropped.
+%
+% \changes{v0.34}{2017/07/27}{\pkg{enumerate}: Added.}
+%
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{enumerate}[2015/07/23]
+% \end{macrocode}
+%
+%
+% \iffalse
+%</enumerate>
+% \fi
+%
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*enumitem>
+% \fi
+%
+% \part{lwarp-enumitem.sty}
+%
+% \section{enumitem}
+% \label{sec:enumitem}
+%
+% \credits{Javier Bezos}
+%
+% \DescribePackage{enumitem}
+% \pkg{enumitem} is supported with minor adjustments.
+%
+% \changes{v0.34}{2017/07/27}{\pkg{enumitem}: Added, no longer required.}
+% \changes{v0.63}{2018/12/02}{\pkg{emumitem}: v3.6: Nullifiy \cs{DrawEnumitemLabel}.}
+%
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{enumitem}[2018/11/30]
+% \end{macrocode}
+%
+%
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% \cs{newlist} \marg{name} \marg{type} \marg{maxdepth} \\
+% \cs{renewlist} \marg{name} \marg{type} \marg{maxdepth}
+%
+% For \pkg{enumitem} lists, new lists must have the start and end actions assigned to
+% the new environment. Renewed lists already have their actions assigned, and
+% thus need no changes.
+% \begin{macrocode}
+\let\LWR@enumitem@orignewlist\newlist
+
+\renewcommand*{\newlist}[3]{%
+\LWR@enumitem@orignewlist{#1}{#2}{#3}%
+\AtBeginEnvironment{#1}{\@nameuse{LWR@#2start}}%
+\AtEndEnvironment{#1}{\@nameuse{LWR@#2end}}%
+}
+
+\def\DrawEnumitemLabel{}
+% \end{macrocode}
+
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+% \iffalse
+%</enumitem>
+% \fi
+%
+%
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*epigraph>
+% \fi
+
+% \part{lwarp-epigraph.sty}
+
+% \section{epigraph}
+% \label{sec:epigraph}
+%
+% \credits{Peter Wilson}
+%
+% \DescribePackage{epigraph}
+% \pkg{epigraph} is emulated.
+%
+% \changes{v0.42}{2017/10/27}{\pkg{epigraph}: If \progcode{FormatWP} add \HTML\ styles.}
+%
+% \codehtml
+
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{epigraph}[2009/09/02]
+% \end{macrocode}
+
+% \changes{v0.73}{2019/06/25}{\pkg{epigraph}: Fix: Paragraph tags.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\qitem}{m m}
+{
+\begin{BlockClass}{qitem}
+#1
+\LWR@stoppars%
+\ifbool{FormatWP}
+{\begin{BlockClass}[border-top:1px solid gray]{epigraphsource}}
+{\begin{BlockClass}{epigraphsource}}
+#2
+\end{BlockClass}
+\end{BlockClass}
+}
+% \end{macrocode}
+
+% \changes{v0.47}{2018/01/26}{\pkg{epigraph}: Fix: Line wrap at \HTML\ hyphen.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\epigraph}{m m}
+{
+\begin{LWR@BlockClassWP}{\LWR@print@mbox{text-align:right}}{}{epigraph}
+\qitem{#1}{#2}
+\end{LWR@BlockClassWP}
+}
+
+\DeclareDocumentEnvironment{epigraphs}{}
+{\LWR@BlockClassWP{\LWR@print@mbox{text-align:right}}{}{epigraph}}
+{\endLWR@BlockClassWP}
+% \end{macrocode}
+%
+% Use \CSS\ to format epigraphs.
+%
+% The following are null commands for source compatibility:
+% \begin{macrocode}
+\newenvironment*{flushepinormal}{}{}
+% \end{macrocode}
+%
+% \changes{v0.45}{2017/12/22}{\pkg{epigraph}: Support for \pkg{memoir}.}
+% \begin{macrocode}
+\@ifclassloaded{memoir}{
+\setlength{\epigraphwidth}{.5\linewidth}
+\renewcommand{\textflush}{flushepinormal}
+\renewcommand{\epigraphhead}[2][0]{#2}
+\renewcommand{\dropchapter}[1]{}
+\renewcommand*{\undodrop}{}
+}{% not memoir
+\newlength{\epigraphwidth}
+\setlength{\epigraphwidth}{.5\linewidth}
+\newcommand{\textflush}{flushepinormal}
+\newcommand{\epigraphflush}{flushright}
+\newcommand{\sourceflush}{flushright}
+\newcommand*{\epigraphsize}{\small}
+\newlength{\epigraphrule}
+\newlength{\beforeepigraphskip}
+\newlength{\afterepigraphskip}
+\newcommand{\epigraphhead}[2][0]{#2}
+\newcommand{\dropchapter}[1]{}
+\newcommand*{\undodrop}{}
+}% not memoir
+
+\let\cleartoevenpage\relax% also in nextpage
+\newcommand{\cleartoevenpage}[1][]{}
+% \end{macrocode}
+%
+% \iffalse
+%</epigraph>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*epsfig>
+% \fi
+%
+% \part{lwarp-epsfig.sty}
+%
+% \section{epsfig}
+%
+% \DescribePackage{epsfig}
+% \pkg{epsfig} is emulated for use by \pkg{lwarp}.
+%
+% Only the \LaTeX 2e syntax is emulated.
+% \watchout
+%
+% \changes{v0.61}{2018/10/01}{\pkg{epsfig}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{epsfig}[2017/06/25]
+% \end{macrocode}
+%
+% A few additional keys to capture the filename:
+% \begin{macrocode}
+\RequirePackage{graphics}
+
+\define@key{igraph}{file}{%
+ \xdef\LWR@epsfig@filename{#1}%
+}
+
+\define@key{igraph}{figure}{%
+ \xdef\LWR@epsfig@filename{#1}%
+}
+
+\define@key{igraph}{prolog}{}
+
+\define@key{igraph}{silent}[]{}
+% \end{macrocode}
+%
+% The captured filename is used as the argument to \cs{includegraphics}:
+% \begin{macrocode}
+\newcommand{\epsfig}[1]{\includegraphics[#1]{\LWR@epsfig@filename}}
+
+\newcommand{\psfig}[1]{\includegraphics[#1]{\LWR@epsfig@filename}}
+% \end{macrocode}
+%
+% \iffalse
+%</epsfig>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*epstopdf>
+% \fi
+%
+% \part{lwarp-epstopdf.sty}
+%
+% \section{epstopdf}
+%
+% \DescribePackage{epstopdf}
+% Previous versions of \pkg{lwarp} had a nullfied version, but
+% now \pkg{epstopdf-base} is supported.
+% \pkg{lwarp-epstopdf} becomes a placeholder to overwrite
+% previous versions.
+%
+% See package \pkg{epstopdf-base} for details.
+%
+% \changes{v0.50}{2018/02/21}{\pkg{epstopdf}: Added.}
+% \changes{v0.59}{2018/08/27}{\pkg{epstopdf}: Improved.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{epstopdf}[2016/05/15]
+% \end{macrocode}
+%
+% \iffalse
+%</epstopdf>
+% \fi
+%
+%
+%
+% \iffalse
+%<*epstopdf-base>
+% \fi
+%
+% \part{lwarp-epstopdf-base.sty}
+%
+% \section{epstopdf-base}
+%
+% \DescribePackage{epstopdf-base}
+%
+% \limitsepstopdf
+%
+% \changes{v0.51}{2018/03/03}{\pkg{epstopdf-base}: Added.}
+% \changes{v0.59}{2018/08/27}{\pkg{epstopdf-base}: Improved.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{epstopdf-base}[2016/05/15]
+% \end{macrocode}
+%
+% Redefine to remember the image filename, replacing |.pdf| with |.svg|.
+% Use the \pkg{epstopdf} print version inside a \env{lateximage}.
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@ETE@OrgGin@setfile}[3]{%
+ \edef\LWR@tempone{#3}%
+ \StrSubstitute{\LWR@tempone}{.pdf}{.svg}[\LWR@tempone]%
+ \StrSubstitute{\LWR@tempone}{.PDF}{.SVG}[\LWR@tempone]%
+ \xdef\LWR@parsedfilename{\LWR@tempone}%
+}
+
+\LWR@formatted{ETE@OrgGin@setfile}
+% \end{macrocode}
+%
+% \cs{includegraphics} in \HTML\ mode redefines \cs{Gin@setfile} to
+% be \cs{LWR@HTML@Gin@setfile}, which is now redirected to \pkg{epstopdf}'s version:
+% \begin{macrocode}
+\renewcommand*{\LWR@HTML@Gin@setfile}[3]{%
+ \ETE@Gin@setfile{#1}{#2}{#3}%
+}
+% \end{macrocode}
+%
+% Allow \filenm{.eps} images to be found if a suffix is not provided:
+% \begin{macrocode}
+\AtBeginDocument{
+\DeclareGraphicsExtensions{%
+ .eps,.EPS,.svg,.SVG,.gif,.GIF,.png,.PNG,.jpg,.JPG,.jpeg,.JPEG%
+}
+\DeclareGraphicsRule{.svg}{svg}{.svg}{}
+\DeclareGraphicsRule{.SVG}{svg}{.SVG}{}
+}
+% \end{macrocode}
+%
+% Likewise when inside a \env{lateximage}:
+% \begin{macrocode}
+\appto\LWR@restoreorigformatting{%
+\DeclareGraphicsExtensions{%
+ .eps,.EPS,.pdf,.PDF,.gif,.GIF,.png,.PNG,.jpg,.JPG,.jpeg,.JPEG%
+}%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</epstopdf-base>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*eqlist>
+% \fi
+%
+% \part{lwarp-eqlist.sty}
+%
+% \section{eqlist}
+%
+% \DescribePackage{eqlist}
+% \pkg{eqlist} is emulated.
+%
+% \changes{v0.69}{2019/03/08}{\pkg{eqlist}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{eqlist}[2002/08/15]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newenvironment{eqlist}[1][]{\description}{\enddescription}
+\newenvironment{eqlist*}[1][]{\description}{\enddescription}
+\newenvironment{Eqlist}[2][]{\description}{\enddescription}
+\newenvironment{Eqlist*}[2][]{\description}{\enddescription}
+\newcommand*{\longitem}[1][]{\item[#1]}
+\newcommand*{\eqlistinit}{}
+\newcommand*{\eqliststarinit}{}
+\newcommand*{\eqlistinitpar}{}
+\def\eqlistlabel#1{#1}
+\newcommand{\eqlistauto}[1]{}
+\newcommand{\eqlistnoauto}{}
+% \end{macrocode}
+%
+% \iffalse
+%</eqlist>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*eqparbox>
+% \fi
+%
+% \part{lwarp-eqparbox.sty}
+%
+% \section{eqparbox}
+%
+% \credits{Scott Pakin}
+%
+% \DescribePackage{eqparbox}
+% \pkg{eqparbox} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.69}{2019/03/08}{\pkg{eqparbox}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{eqparbox}[2017/09/03]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@eqparbox}{O{t} O{} O{t} m +m}{%
+ {%
+ \minipagefullwidth%
+ \parbox[#1][#2][#3]{\linewidth}{#5}%
+ }%
+}
+\LWR@formatted{eqparbox}
+
+\NewDocumentCommand{\LWR@HTML@eqmakebox}{o o m}{%
+ \makebox[#2]{#3}%
+}
+\LWR@formatted{eqmakebox}
+
+\NewDocumentCommand{\LWR@HTML@eqframebox}{o o m}{%
+ \framebox[#2]{#3}%
+}
+\LWR@formatted{eqframebox}
+
+\NewDocumentEnvironment{LWR@HTML@eqminipage}{O{t} O{} O{t} m}
+{%
+ \begingroup%
+ \minipagefullwidth%
+ \minipage[#1][#2][#3]{\linewidth}%
+}%
+{%
+ \endminipage%
+ \endgroup%
+}
+
+\newcommand*{\LWR@HTML@eqboxwidth}[1]{.25\linewidth}
+\LWR@formatted{eqboxwidth}
+
+\newcommand*{\LWR@HTML@eqsetminwidth}[2]{}
+\newcommand*{\LWR@HTML@eqsetmaxwidth}[2]{}
+
+\newcommand*{\LWR@HTML@eqsetminwidthto}[2]{}
+\newcommand*{\LWR@HTML@eqsetmaxwidthto}[2]{}
+% \end{macrocode}
+%
+% \iffalse
+%</eqparbox>
+% \fi
+%
+%
+%
+% \iffalse
+%<*errata>
+% \fi
+%
+% \part{lwarp-errata.sty}
+
+% \section{errata}
+%
+% \credits{Michael Kohlhase}
+%
+% \DescribePackage{errata}
+% \pkg{errata} is patched for use by \pkg{lwarp}.
+%
+% This is for v0.3 of \pkg{errata}.
+% A newer version of \pkg{errata} with more features is under development,
+% at which time the \pkg{lwarp} version will have to be updated.
+%
+% \changes{v0.57}{2018/05/23}{\pkg{errata}: Added.}
+%
+% \codehtml
+%
+% Macros are being defined with the math dollar,
+% so enable the \HTML\ version during package loading:
+% \begin{macrocode}
+\StartDefiningMath
+% \end{macrocode}
+
+% Now load the package:
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{errata}[2006/11/12]
+% \end{macrocode}
+
+% Patches for dynamic inline math:
+% \begin{macrocode}
+\xpatchcmd{\erratumAdd}
+ {$_a^{\arabic{erratum}}$}
+% {\inlinemathother$_a^{\arabic{erratum}}$\inlinemathnormal}
+ {\textsubscript{a}\textsuperscript{\arabic{erratum}}}
+ {}
+ {\LWR@patcherror{erratum}{erratumAdd}}
+
+\xpatchcmd{\erratumDelete}
+ {$_d^{\arabic{erratum}}$}
+% {\inlinemathother$_d^{\arabic{erratum}}$\inlinemathnormal}
+ {\textsubscript{d}\textsuperscript{\arabic{erratum}}}
+ {}
+ {\LWR@patcherror{erratum}{erratumDelete}}
+
+\xpatchcmd{\erratumReplace}
+ {$_r^{\arabic{erratum}}$}
+% {\inlinemathother$_r^{\arabic{erratum}}$\inlinemathnormal}
+ {\textsubscript{r}\textsuperscript{\arabic{erratum}}}
+ {}
+ {\LWR@patcherror{erratum}{erratumReplace}}
+
+\xpatchcmd{\erratum}
+ {$_a$}
+% {\inlinemathother$_a$\inlinemathnormal}
+ {\textsubscript{a}}
+ {}
+ {\LWR@patcherror{erratum}{erratumDelete}}
+
+\xpatchcmd{\erratum}
+ {$_d^{\@thefnmark}$}
+% {\inlinemathother$_d^{\@thefnmark}$\inlinemathnormal}
+ {\textsubscript{d}\textsuperscript{\@thefnmark}}
+ {}
+ {\LWR@patcherror{erratum}{eDelete}}
+
+\xpatchcmd{\erratum}
+ {$_r^{\@thefnmark}$}
+% {\inlinemathother$_r^{\@thefnmark}$\inlinemathnormal}
+ {\textsubscript{r}\textsuperscript{\@thefnmark}}
+ {}
+ {\LWR@patcherror{erratum}{eReplace}}
+% \end{macrocode}
+
+% Finish the current page's errata before closing and reloading the list:
+% \begin{macrocode}
+\preto\PrintErrata{\LWR@orignewpage}
+% \end{macrocode}
+
+% No longer defining math macros with the \HTML\ |$|:
+% \begin{macrocode}
+\StopDefiningMath
+% \end{macrocode}
+
+% \iffalse
+%</errata>
+% \fi
+%
+%
+%
+% \iffalse
+%<*eso-pic>
+% \fi
+%
+% \part{lwarp-eso-pic.sty}
+
+% \section{eso-pic}
+% \label{sec:eso-pic}
+%
+% \credits{Rolf Niepraschk}
+%
+% \changes{v0.20}{2017/01/11}{\pkg{eso-pic}: Added.}
+%
+% \DescribePackage{eso-pic}
+% \pkg{eso-pic} is ignored.
+
+% \codehtml
+
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{eso-pic}[2018/04/12]
+% \end{macrocode}
+
+% \begin{macrocode}
+\newcommand*{\LenToUnit}{}
+\newcommand{\AtPageUpperLeft}[1]{}
+\newcommand{\AtPageLowerLeft}[1]{}
+\newcommand{\AtPageCenter}[1]{}
+\newcommand{\AtStockLowerLeft}[1]{}
+\newcommand{\AtStockUpperLeft}[1]{}
+\newcommand{\AtStockCenter}[1]{}
+\newcommand{\AtTextUpperLeft}[1]{}
+\newcommand{\AtTextLowerLeft}[1]{}
+\newcommand{\AtTextCenter}[1]{}
+\NewDocumentCommand{\AddToShipoutPictureBG}{s +m}{}
+% \end{macrocode}
+% \changes{v0.49}{2018/02/18}{\pkg{eso-pic}: Fix for \cs{AddToShipoutPicture}.}
+% \begin{macrocode}
+\newcommand{\AddToShipoutPicture}{\AddToShipoutPictureBG}
+\NewDocumentCommand{\AddToShipoutPictureFG}{s +m}{}
+\newcommand*{\ClearShipoutPictureBG}{}
+\newcommand*{\ClearShipoutPicture}{}
+\newcommand*{\ClearShipoutPictureFG}{}
+\newcommand{\gridSetup}[6][]{}
+% \end{macrocode}
+
+% \iffalse
+%</eso-pic>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*eurosym>
+% \fi
+%
+% \part{lwarp-eurosym.sty}
+%
+% \section{eurosym}
+%
+% \credits{Henrik Theiling}
+%
+% \DescribePackage{eurosym}
+% \pkg{eurosym} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.67}{2019/02/20}{\pkg{eurosym}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{eurosym}[1998/08/06]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewrobustcmd\officialeuro{\HTMLentity{euro}}
+\let\geneuro\officialeuro
+\let\geneuronarrow\officialeuro
+\let\geneurowide\officialeuro
+\let\euro\officialeuro
+\renewrobustcmd\eurobars{}
+\renewrobustcmd\eurobarsnarrow{}
+\renewrobustcmd\eurobarswide{}
+% \end{macrocode}
+%
+% \iffalse
+%</eurosym>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*everypage>
+% \fi
+
+% \part{lwarp-everypage.sty}
+
+% \section{everypage}
+% \label{sec:everypage}
+%
+% \credits{Sergio Callegari}
+%
+% \changes{v0.20}{2017/01/11}{\pkg{everypage}: Added.}
+%
+% \DescribePackage{everypage}
+% \pkg{everypage} is ignored.
+
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{everypage}[2007/06/20]
+% \end{macrocode}
+
+% \begin{macrocode}
+\newcommand*{\AddEverypageHook}[1]{}
+\newcommand*{\AddThispageHook}[1]{}
+% \end{macrocode}
+
+% \iffalse
+%</everypage>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*everyshi>
+% \fi
+%
+% \part{lwarp-everyshi.sty}
+%
+% \section{everyshi}
+%
+% \credits{Martin Schr\"{o}der}
+%
+% \DescribePackage{everyshi} ignored.
+%
+% \changes{v0.34}{2017/08/03}{\pkg{everyshi}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-everyshi}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{everyshi}[2001/05/15]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\EveryShipout}[1]{}
+\newcommand*{\AtNextShipout}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</everyshi>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*extramarks>
+% \fi
+
+% \part{lwarp-extramarks.sty}
+
+% \section{extramarks}
+%
+% \credits{Piet van Oostrum}
+%
+% \DescribePackage{extramarks}
+% \pkg{extramarks} is ignored.
+%
+% \changes{v0.20}{2017/01/11}{\pkg{extramarks}: Added.}
+% \changes{v0.66}{2019/02/02}{\pkg{extramarks}: Updated to v3.10.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-extramarks}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{extramarks}[2019/01/31]
+% \end{macrocode}
+
+% \begin{macrocode}
+\newcommand*{\extramarks}[2]{}
+\newcommand*{\firstleftxmark}{}
+\newcommand*{\lastleftxmark}{}
+\newcommand*{\firstrightxmark}{}
+\newcommand*{\lastrightxmark}{}
+\newcommand*{\firstxmark}{}
+\newcommand*{\lastxmark}{}
+\newcommand*{\topxmark}{}
+\newcommand*{\topleftxmark}{}
+\newcommand*{\toprightxmark}{}
+\newcommand*{\firstleftmark}{}
+\newcommand*{\lastrightmark}{}
+\newcommand*{\firstrightmark}{}
+\newcommand*{\lastleftmark}{}
+% \end{macrocode}
+
+% \iffalse
+%</extramarks>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*fancybox>
+% \fi
+%
+% \part{lwarp-fancybox.sty}
+%
+% \section{fancybox}
+% \label{sec:fancybox}
+%
+% \credits{Timothy Van Zandt}
+%
+% \DescribePackage{fancybox}
+% \pkg{fancybox} is supported with some patches.
+%
+% \limitsfancybox
+%
+% \limitsverbatimfootnotes
+%
+% \changes{v0.34}{2017/07/27}{\pkg{fancybox}: Added.}
+% \changes{v0.42}{2017/10/27}{\pkg{fancybox}: If \progcode{FormatWP} add \HTML\ styles.}
+% \changes{v0.52}{2018/03/29}{\pkg{fancyvrb}: Initial support for \cs{VerbatimFootnotes}.}
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{fancybox}[2010/05/15]
+% \end{macrocode}
+%
+% After the preamble is loaded, after any patches to \env{Verbatim}:
+% \begin{macrocode}
+\AfterEndPreamble{
+\LWR@traceinfo{Patching fancybox.}
+% \end{macrocode}
+%
+% \begin{noindmacro}{\VerbatimFootnotes}
+% Patched to use the new version.
+% \begin{macrocode}
+\def\VerbatimFootnotes{%
+\let\@footnotetext\V@footnotetext%
+\let\LWR@footnotetext\V@footnotetext% lwarp
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\V@@footnotetext}
+% Patches in a subset of \pkg{lwarp}'s \cs{LWR@footnotetext} to the
+% \pkg{fancyvrb} version of \cs{V@@footnotetext}.
+% \begin{macrocode}
+\def\V@@footnotetext{%
+\LWR@traceinfo{V@footnotetext}%
+\global\setbox\LWR@footnotebox=\vbox\bgroup%
+% \end{macrocode}
+% Add to any current footnotes:
+% \begin{macrocode}
+ \unvbox\LWR@footnotebox%
+% \end{macrocode}
+% Remember the footnote number for \cs{ref}:
+% \begin{macrocode}
+ \protected@edef\@currentlabel{%
+ \csname p@footnote\endcsname\@thefnmark%
+ }% @currentlabel
+% \end{macrocode}
+% Use \HTML\ superscripts in the footnote even inside a \env{lateximage}:
+% \begin{macrocode}
+ \renewrobustcmd{\textsuperscript}[1]{\LWR@htmlspan{sup}{##1}}%
+% \end{macrocode}
+% Use paragraph tags if in a tabular data cell or a \env{lateximage}:
+% \changes{v0.66}{2019/02/02}{\pkg{fancyvrb}: Improved \HTML\ formatting.}
+% \begin{macrocode}
+ \ifthenelse{%
+ \boolean{LWR@doingstartpars} \AND%
+ \cnttest{\value{LWR@lateximagedepth}}{=}{0}%
+ }%
+ {}%
+ {\LWR@htmltagc{\LWR@tagregularparagraph}\LWR@orignewline}%
+% \end{macrocode}
+% Append the footnote to the list:
+% \begin{macrocode}
+ \@makefntext{}%
+% \end{macrocode}
+% The footnote text will follow after \cs{V@@@footnotetext} has completed.
+% \begin{macrocode}
+ \bgroup%
+ \aftergroup{\V@@@footnotetext}%
+ \ignorespaces%
+}%
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{macrocode}
+}% AfterEndPreamble
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\renewcommand*{\@shadowbox}[1]{%
+\ifbool{FormatWP}%
+{\InlineClass[border:1px solid black]{shadowbox}{#1}}%
+{\InlineClass{shadowbox}{#1}}%
+}
+
+\renewcommand*{\@doublebox}[1]{%
+\ifbool{FormatWP}%
+{\InlineClass[border:1px double black]{doublebox}{#1}}%
+{\InlineClass{doublebox}{#1}}%
+}
+
+\renewcommand*{\@ovalbox}[2]{%
+\ifbool{FormatWP}%
+{\InlineClass[border:1px solid black; border-radius:1ex]{ovalbox}{#2}}%
+{%
+ \ifthenelse{\isequivalentto{#1}{\thinlines}}%
+ {\InlineClass{ovalbox}{#2}}%
+ {\InlineClass{Ovalbox}{#2}}%
+}%
+}
+% \end{macrocode}
+%
+%
+% Convert minipages, parboxes, and lists into linear text
+% using the |LWR@nestspan| environment:
+% \begin{macrocode}
+\let\LWR@origSbox\Sbox
+
+\def\Sbox{\LWR@origSbox\LWR@nestspan}
+
+
+\let\LWR@origendSbox\endSbox
+
+\def\endSbox{\endLWR@nestspan\LWR@origendSbox}
+% \end{macrocode}
+%
+% \env{Beqnarray} is adapted for \brand{MathJax} or enclosed inside a \env{lateximage}:
+%
+% \begin{macrocode}
+\RenewEnviron{Beqnarray}
+{\LWR@eqnarrayfactor}
+
+\csgpreto{Beqnarray*}{\boolfalse{LWR@numbereqnarray}}
+% \end{macrocode}
+%
+% \cs{GenericCaption} is enclosed in an \HTML\ block:
+%
+% \begin{macrocode}
+\renewcommand{\GenericCaption}[1]{%
+\LWR@figcaption%
+\LWR@isolate{#1}%
+\endLWR@figcaption%
+}
+% \end{macrocode}
+%
+% \env{Btrivlist} is enclosed in an \HTML\ block.
+% 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.}
+% \begin{macrocode}
+\RenewDocumentEnvironment{Btrivlist}{m o}
+{%
+ \LWR@stoppars%
+ \begin{BlockClass}{Btrivlist}%
+ \tabular{#1}%
+}
+{%
+ \endtabular%
+ \end{BlockClass}%
+ \LWR@startpars%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \env{Btrivlist} is also neutralized when used inside a span:
+%
+% \begin{macrocode}
+\AtBeginEnvironment{LWR@nestspan}{%
+\RenewDocumentEnvironment{Btrivlist}{m o}{}{}%
+}
+% \end{macrocode}
+%
+% \pkg{lwarp}'s handling of \cs{item} is patched to accept
+% \pkg{fancybox}'s optional arguments:
+%
+% \begin{macrocode}
+\let\LWRFB@origitemizeitem\LWR@itemizeitem
+\let\LWRFB@origdescitem\LWR@descitem
+
+\RenewDocumentCommand{\LWR@itemizeitem}{d()o}{%
+ \IfValueTF{#2}{%
+ \LWRFB@origitemizeitem[#2]%
+ }{%
+ \LWRFB@origitemizeitem%
+ }%
+}
+
+\RenewDocumentCommand{\LWR@descitem}{d()o}{%
+ \IfValueTF{#2}{%
+ \LWRFB@origdescitem[#2]~%
+ }{%
+ \LWRFB@origdescitem%
+ }%
+}
+% \end{macrocode}
+%
+% \changes{v0.51}{2018/03/17}{\pkg{fancybox}: Fix: Optional tag for \cs{item} in a span.}
+% \begin{macrocode}
+\RenewDocumentCommand{\LWR@nestspanitem}{d()}{%
+\if@newlist\else{\LWR@htmltagc{br /}}\fi%
+\LWR@origitem%
+}
+% \end{macrocode}
+%
+% The various boxed lists become regular lists:
+%
+% \begin{macrocode}
+\renewenvironment{Bitemize}[1][]{\begin{itemize}}{\end{itemize}}
+\renewenvironment{Benumerate}[1][]{\begin{enumerate}}{\end{enumerate}}
+\renewenvironment{Bdescription}[1][]{\begin{description}}{\end{description}}
+% \end{macrocode}
+%
+% \cs{boxput} simply prints one then the other argument,
+% side-by-side instead of above and behind:
+%
+% \begin{macrocode}
+\RenewDocumentCommand{\boxput}{s d() m m}{%
+\IfBooleanTF{#1}{#3\quad#4}{#4\quad#3}%
+}
+% \end{macrocode}
+%
+% Neutralized commands:
+%
+% \begin{macrocode}
+\RenewDocumentCommand{\fancyput}{s d() m}{}
+\RenewDocumentCommand{\thisfancyput}{s d() m}{}
+
+\RenewDocumentCommand{\fancypage}{m m}{}
+\RenewDocumentCommand{\thisfancypage}{m m}{}
+
+\def\LandScape#1{}
+\def\endLandScape{}
+\def\@Landscape#1#2#3{}
+\def\endLandscape{}
+% \end{macrocode}
+%
+% Low-level patches for \env{UseVerbatim} and friends:
+%
+% \begin{macrocode}
+\let\LWRFB@UseVerbatim\UseVerbatim
+\renewcommand*{\UseVerbatim}[1]{%
+\LWR@atbeginverbatim{3}{Verbatim}%
+\LWRFB@UseVerbatim{#1}%
+\LWR@afterendverbatim{.5}%
+}
+
+\let\LWRFB@LUseVerbatim\LUseVerbatim
+
+\renewcommand*{\LUseVerbatim}[1]{%
+\LWR@atbeginverbatim{3}{LVerbatim}%
+\noindent%
+\LWRFB@LUseVerbatim{#1}%
+\LWR@afterendverbatim{.5}%
+}
+
+\def\@BUseVerbatim[#1]#2{%
+\LWR@atbeginverbatim{3}{BVerbatim}%
+\LWRFB@UseVerbatim{#2}%
+\LWR@afterendverbatim{.5}%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</fancybox>
+% \fi
+%
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*fancyhdr>
+% \fi
+
+% \part{lwarp-fancyhdr.sty}
+
+% \section{fancyhdr}
+%
+% \credits{Piet van Oostrum}
+%
+% \DescribePackage{fancyhdr}
+% \pkg{fancyhdr} is ignored.
+%
+% \changes{v0.20}{2017/01/11}{\pkg{fancyhdr}: Added.}
+% \changes{v0.33}{2017/06/18}{\pkg{fancyhdr}: Fix: Optional args for \cs{lhead}, etc.}
+% \changes{v0.66}{2019/02/02}{\pkg{fancyhdr}: Updated to v3.10.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-fancyhdr}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{fancyhdr}[2019/01/31]
+% \end{macrocode}
+
+% \begin{macrocode}
+\newcommand*{\fancyhead}[2][]{}
+\newcommand*{\fancyfoot}[2][]{}
+\newcommand*{\fancyhf}[2][]{}
+\newcommand*{\fancypagestyle}[2]{}
+\newcommand*{\lhead}[2][]{}
+\newcommand*{\chead}[2][]{}
+\newcommand*{\rhead}[2][]{}
+\newcommand*{\lfoot}[2][]{}
+\newcommand*{\cfoot}[2][]{}
+\newcommand*{\rfoot}[2][]{}
+\newcommand*{\headrulewidth}{}
+\newcommand*{\footrulewidth}{}
+\newcommand*{\headrule}{}
+\newcommand*{\footrule}{}
+\newlength{\headwidth}
+\newcommand*{\fancyheadoffset}[2][]{}
+\newcommand*{\fancyfootoffset}[2][]{}
+\newcommand*{\fancyhfoffset}[2][]{}
+\newcommand*{\iffloatpage}[2]{#2}
+\newcommand*{\ifftopfloat}[2]{#2}
+\newcommand*{\iffbotfloat}[2]{#2}
+\newcommand*{\iffootnote}[2]{#2}
+% \end{macrocode}
+
+% \iffalse
+%</fancyhdr>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*fancyref>
+% \fi
+%
+% \part{lwarp-fancyref.sty}
+%
+% \section{fancyref}
+%
+% \DescribePackage{fancyref}
+% \pkg{fancyref} is emulated.
+%
+% \changes{v0.44}{2017/11/22}{\pkg{fancyref}: Added.}
+% \changes{v0.48}{2018/02/04}{\pkg{fancyref}: Now directly supported.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{fancyref}[1999/02/03]
+% \end{macrocode}
+%
+% To remove the \optn{margin} option, if \cs{fancyrefhook} is anything
+% other than the \optn{paren} option, then force it to the default instead.
+% (Comparing to the \optn{margin} option was not possible since \pkg{lwarp} has
+% revised the meaning of \cs{mbox} so the comparison failed.)
+% \begin{macrocode}
+\newcommand*{\LWRfref@parenfancyrefhook}[1]{(#1)}
+
+\ifdefstrequal{\fancyrefhook}{\LWRfref@parenfancyrefhook}
+{}{
+ \renewcommand*{\fancyrefhook}[1]{#1}%
+}
+% \end{macrocode}
+
+% Modified to ignore the page number and \pkg{varioref}.
+% \begin{macrocode}
+\renewcommand*{\@f@ref}[4]{%
+ \@ifundefined{#1r@#2@#3}{%
+ \PackageError{lwarp-fancyref}{%
+ \backslashchar#1ref\space format ``#2''
+ undefined\MessageBreak
+ for label type ``#3''%
+ }{%
+ The format ``#2'' was not defined for the label type
+ ``#3''\MessageBreak
+ and the \backslashchar#1ref\space command. Perhaps
+ you have only misspelled its name.\MessageBreak
+ Otherwise you will have to define it with
+ \protect\new#1refformat\MessageBreak
+ prior to using it.%
+ }%
+ }{%
+ \fancyrefhook{%
+ \@nameuse{#1r@#2@#3}%
+ {\ref{#3\fancyrefargdelim#4}}%
+% {\pageref{#3\fancyrefargdelim#4}}% original
+% {\@fancyref@page@ref{#3\fancyrefargdelim#4}}% original
+ {}% lwarp
+ {}% lwarp
+ }%
+ }%
+}%
+% \end{macrocode}
+%
+% \iffalse
+%</fancyref>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*fancytabs>
+% \fi
+%
+% \part{lwarp-fancytabs.sty}
+%
+% \section{fancytabs}
+%
+% \DescribePackage{fancytabs}
+% \pkg{fancytabs} is ignored.
+%
+% \changes{v0.60}{2018/09/19}{\pkg{fancytabs}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{fancytabs}[2016/03/29]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\fancytab}[3][RIGHT]{}
+\newcommand{\fancytabsStyle}[1]{}
+\newcommand{\fancytabsHeight}[1]{}
+\newcommand{\fancytabsWidth}[1]{}
+\newcommand{\fancytabsCount}[1]{}
+\newcommand{\fancytabsLeftColor}[1]{}
+\newcommand{\fancytabsRightColor}[1]{}
+\newcommand{\fancytabsTop}[1]{}
+\newcommand{\fancytabsTextVPos}[1]{}
+\newcommand{\fancytabsTextHPos}[1]{}
+\newcommand{\fancytabsGap}[1]{}
+\newcommand{\fancytabsFloor}[1]{}
+\newcommand{\fancytabsRotate}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</fancytabs>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*fancyvrb>
+% \fi
+%
+% \part{lwarp-fancyvrb.sty}
+%
+% \section{fancyvrb}
+% \label{sec:fancyvrb}
+%
+% \credits{Timothy Van Zandt}
+%
+% \DescribePackage{fancyvrb}
+% \pkg{fancyvrb} is supported with some patches.
+%
+% The fancy verbatim environment is placed inside
+% \margintag{\HTML\ classes}
+% a \element{div} of class \attribute{fancyvrb}.
+% 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}.
+%
+% \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}.}
+%
+%
+% \begin{macrocode}
+\RequirePackage{xcolor}% for \convertcolorspec
+
+\LWR@ProvidesPackagePass{fancyvrb}[2008/02/07]
+% \end{macrocode}
+%
+% Initial default patch for fancyvrb:
+% \begin{macrocode}
+\fvset{frame=none}%
+% \end{macrocode}
+%
+% After the preamble is loaded, after any patches to \env{Verbatim}:
+% \begin{macrocode}
+\AfterEndPreamble{
+\LWR@traceinfo{Patching fancyvrb.}
+% \end{macrocode}
+%
+%
+% \begin{noindmacro}{\VerbatimFootnotes}
+% Patched to use the new version.
+% \begin{macrocode}
+\def\VerbatimFootnotes{%
+\let\@footnotetext\V@footnotetext%
+\let\footnote\V@footnote%
+\let\LWR@footnotetext\V@footnotetext% lwarp
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\V@@footnotetext}
+% Patches in a subset of \pkg{lwarp}'s \cs{LWR@footnotetext} to the
+% \pkg{fancyvrb} version of \cs{V@@footnotetext}.
+% \begin{macrocode}
+\def\V@@footnotetext{%
+\LWR@traceinfo{V@footnotetext}%
+\global\setbox\LWR@footnotebox=\vbox\bgroup%
+% \end{macrocode}
+% Add to any current footnotes:
+% \begin{macrocode}
+ \unvbox\LWR@footnotebox%
+% \end{macrocode}
+% Remember the footnote number for \cs{ref}:
+% \begin{macrocode}
+ \protected@edef\@currentlabel{%
+ \csname p@footnote\endcsname\@thefnmark%
+ }% @currentlabel
+% \end{macrocode}
+% Use \HTML\ superscripts in the footnote even inside a \env{lateximage}:
+% \begin{macrocode}
+ \renewrobustcmd{\textsuperscript}[1]{\LWR@htmlspan{sup}{##1}}%
+% \end{macrocode}
+% Use paragraph tags if in a tabular data cell or a \env{lateximage}:
+% \changes{v0.66}{2019/02/02}{Improved \HTML\ formatting.}
+% \begin{macrocode}
+ \ifthenelse{%
+ \boolean{LWR@doingstartpars} \AND%
+ \cnttest{\value{LWR@lateximagedepth}}{=}{0}%
+ }%
+ {}%
+ {\LWR@htmltagc{\LWR@tagregularparagraph}\LWR@orignewline}%
+% \end{macrocode}
+% Append the footnote mark to the list:
+% \begin{macrocode}
+ \@makefntext{}%
+% \end{macrocode}
+% The footnote text will follow after \cs{V@@@footnotetext} has completed.
+% \begin{macrocode}
+ \bgroup%
+ \aftergroup{\V@@@footnotetext}%
+ \ignorespaces%
+}%
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \changes{v0.45}{2018/01/07}{\pkg{fancyvrb}: Improvements.}
+% \begin{macrocode}
+\preto\FVB@Verbatim{\LWR@forcenewpage}
+\preto\FVB@LVerbatim{\LWR@forcenewpage}
+% \preto\FVB@BVerbatim{\LWR@forcenewpage}% Fails, so done below.
+% \end{macrocode}
+%
+% Simplified to remove \PDF\ formatting:
+% \changes{v0.45}{2018/01/07}{\pkg{fancyvrb}: Improvements.}
+% \begin{macrocode}
+\def\FV@BeginListFrame@Single{%
+ \FV@SingleFrameLine{\z@}%
+}
+
+\def\FV@EndListFrame@Single{%
+ \FV@SingleFrameLine{\@ne}%
+}
+
+\def\FV@BeginListFrame@Lines{%
+ \FV@SingleFrameLine{\z@}%
+}
+
+\def\FV@EndListFrame@Lines{%
+ \FV@SingleFrameLine{\@ne}%
+}
+
+\renewcommand*{\FV@SingleFrameSep}{}
+% \end{macrocode}
+%
+% Adds \HTML\ formatting:
+% \begin{macrocode}
+\def\FV@BUseVerbatim#1{%
+ \LWR@atbeginverbatim{0}{verbatim}%
+ \FV@BVerbatimBegin#1\FV@BVerbatimEnd%
+ \LWR@afterendverbatim{0}%
+}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@FVstyle} Holds the style of the verbatim.
+% \begin{macrocode}
+\newcommand*{\LWR@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.
+% \changes{v0.73}{2019/06/26}{\pkg{fancyvrb}: Fix: Nested \element{div}/\element{pre}.}
+% \begin{macrocode}
+\newcommand*{\LWR@fvstartnone}{%
+\LWR@traceinfo{fvstartnone}%
+% \hbox to\z@{
+\BlockClass[\LWR@FVstyle]{fancyvrb}
+\LWR@stoppars
+\ifx\FV@LabelPositionTopLine\relax\else
+ \ifx\FV@LabelBegin\relax\else
+ \FancyVerbRuleColor{\LWR@FVfindbordercolor}
+ \LWR@htmltagc{%
+ div class="fancyvrblabel" % extra space
+ style="color: \LWR@origpound\LWR@tempcolor"%
+ }
+ \LWR@print@textrm{\FV@LabelBegin}% \textrm preserves emdash
+ \LWR@htmltagc{/div}\LWR@orignewline%
+ \fi
+\fi
+\LWR@atbeginverbatim{0}{verbatim}%
+% }%
+}
+
+\newcommand*{\LWR@fvendnone}{%
+\LWR@traceinfo{fvendnone}%
+% \hbox to\z@{
+\LWR@afterendverbatim{0}%
+\LWR@stoppars%
+\ifx\FV@LabelPositionBottomLine\relax\else
+ \ifx\FV@LabelEnd\relax\else
+ \FancyVerbRuleColor{\LWR@FVfindbordercolor}
+ \LWR@htmltagc{%
+ div class="fancyvrblabel" % extra space
+ style="color: \LWR@origpound\LWR@tempcolor"%
+ }
+ \LWR@print@textrm{\FV@LabelEnd}
+ \LWR@htmltagc{/div}\LWR@orignewline%
+ \fi
+\fi
+\endBlockClass
+}
+
+\newcommand*{\LWR@fvstartsingle}{%
+\LWR@traceinfo{fvstartsingle}%
+\LWR@fvstartnone%
+\FV@BeginListFrame@Single%
+}
+
+\newcommand*{\LWR@fvendsingle}{%
+\LWR@traceinfo{fvendsingle}%
+\FV@EndListFrame@Single%
+\LWR@fvendnone%
+}
+
+\newcommand*{\LWR@fvstartline}{%
+\LWR@traceinfo{fvstartline}%
+\LWR@fvstartnone%
+% \setlength{\LWR@templengthone}{\baselineskip}%
+\FV@BeginListFrame@Lines%
+% \setlength{\baselineskip}{\LWR@templengthone}%
+% \setlength{\baselineskip}{5pt}%
+}
+
+\newcommand*{\LWR@fvendline}{%
+\LWR@traceinfo{fvendline}%
+\FV@EndListFrame@Lines%
+\LWR@fvendnone%
+}
+% \end{macrocode}
+%
+% 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@FVfindbordercolor}{%
+\FancyVerbRuleColor%
+\LWR@findcurrenttextcolor%
+\color{black}%
+}
+
+% border width of \FV@FrameRule
+\newcommand*{\LWR@FVborderstyle}[1]{%
+padding#1: \strip@pt\dimexpr \FV@FrameSep\relax\relax pt ; % space
+\LWR@FVfindbordercolor\LWR@indentHTMLtwo%
+border#1: \strip@pt\dimexpr \FV@FrameRule\relax\relax pt % space
+solid {\FancyVerbRuleColor{\LWR@origpound\LWR@tempcolor}} ; % space
+}
+
+\def\FV@Frame@none{%
+\renewcommand*{\LWR@FVstyle}{\LWR@currenttextcolorstyle}%
+\let\FV@BeginListFrame\LWR@fvstartnone%
+\let\FV@LeftListFrame\relax%
+\let\FV@RightListFrame\relax%
+\let\FV@EndListFrame\LWR@fvendnone}
+
+\FV@Frame@none% default values
+
+\def\FV@Frame@single{%
+\renewcommand*{\LWR@FVstyle}{%
+ \LWR@currenttextcolorstyle\LWR@indentHTMLtwo%
+ \LWR@FVborderstyle{}%
+}%
+\let\FV@BeginListFrame\LWR@fvstartsingle%
+\let\FV@LeftListFrame\FV@LeftListFrame@Single%
+\let\FV@RightListFrame\FV@RightListFrame@Single%
+\let\FV@EndListFrame\LWR@fvendsingle}
+
+\def\FV@Frame@lines{%
+\renewcommand*{\LWR@FVstyle}{%
+ \LWR@currenttextcolorstyle\LWR@indentHTMLtwo%
+ \LWR@FVborderstyle{-top}%
+ \LWR@indentHTMLtwo%
+ \LWR@FVborderstyle{-bottom}%
+}%
+\let\FV@BeginListFrame\LWR@fvstartline%
+\let\FV@LeftListFrame\relax%
+\let\FV@RightListFrame\relax%
+\let\FV@EndListFrame\LWR@fvendline}
+
+\def\FV@Frame@topline{%
+\renewcommand*{\LWR@FVstyle}{%
+ \LWR@currenttextcolorstyle\LWR@indentHTMLtwo%
+ \LWR@FVborderstyle{-top}%
+}%
+\let\FV@BeginListFrame\LWR@fvstartline%
+\let\FV@LeftListFrame\relax%
+\let\FV@RightListFrame\relax%
+\let\FV@EndListFrame\LWR@fvendnone}
+
+\def\FV@Frame@bottomline{%
+\renewcommand*{\LWR@FVstyle}{%
+ \LWR@currenttextcolorstyle\LWR@indentHTMLtwo%
+ \LWR@FVborderstyle{-bottom}%
+}%
+\let\FV@BeginListFrame\LWR@fvstartnone%
+\let\FV@LeftListFrame\relax%
+\let\FV@RightListFrame\relax%
+\let\FV@EndListFrame\LWR@fvendline}
+
+\def\FV@Frame@leftline{%
+\renewcommand*{\LWR@FVstyle}{%
+ \LWR@currenttextcolorstyle\LWR@indentHTMLtwo%
+ \LWR@FVborderstyle{-left}%
+}%
+% To define the \FV@FrameFillLine macro (from \FV@BeginListFrame)
+\ifx\FancyVerbFillColor\relax%
+\let\FV@FrameFillLine\relax%
+\else%
+\@tempdima\FV@FrameRule\relax%
+\multiply\@tempdima-\tw@%
+\edef\FV@FrameFillLine{%
+{\noexpand\FancyVerbFillColor{\vrule\@width\number\@tempdima sp}%
+\kern-\number\@tempdima sp}}%
+\fi%
+\let\FV@BeginListFrame\LWR@fvstartnone%
+\let\FV@LeftListFrame\FV@LeftListFrame@Single%
+\let\FV@RightListFrame\relax%
+\let\FV@EndListFrame\LWR@fvendnone}
+% \end{macrocode}
+%
+% 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@SingleFrameLine#1{%
+% \hbox to\z@{%
+% \kern\leftmargin
+ \ifnum#1=\z@\relax
+ \let\FV@Label\FV@LabelBegin
+ \else
+ \let\FV@Label\FV@LabelEnd
+ \fi
+ \ifx\FV@Label\relax
+% \FancyVerbRuleColor{\vrule \@width\linewidth \@height\FV@FrameRule}%
+ \else
+ \ifnum#1=\z@
+% \setbox\z@\hbox{\strut\enspace\FV@LabelBegin\enspace\strut}%
+ \ifx\FV@LabelPositionTopLine\relax
+ \else
+ \fi
+ \else
+% \setbox\z@\hbox{\strut\enspace\FV@LabelEnd\enspace\strut}%
+ \ifx\FV@LabelPositionBottomLine\relax
+ \else
+ \fi
+ \fi
+ \fi
+% \hss
+% }
+}
+% \end{macrocode}
+%
+% Processes each line, adding optional line numbers.
+% Original code is from the \pkg{fancyvrb} package.
+% \begin{macrocode}
+\def\FV@ListProcessLine#1{%
+ \hbox to \hsize{%
+% \kern\leftmargin
+ \hbox to \VerbatimHTMLWidth {%
+ \ifcsvoid{FV@LeftListNumber}{}{\kern 2.5em}%
+ \FV@LeftListNumber%
+% \FV@LeftListFrame
+ \FancyVerbFormatLine{#1}%
+ \hss%
+% \FV@RightListFrame
+ \FV@RightListNumber%
+ }%
+ \hss% required to avoid underfull hboxes
+}
+}
+% \end{macrocode}
+
+% \begin{environment}{BVerbatim}
+% \begin{macrocode}
+\AtBeginEnvironment{BVerbatim}
+{%
+\LWR@forcenewpage% instead of \preto
+\LWR@atbeginverbatim{0}{bverbatim}%
+}
+
+\AfterEndEnvironment{BVerbatim}
+{%
+\LWR@afterendverbatim{0}%
+}
+% \end{macrocode}
+% \end{environment}
+
+% End of the modifications to make at the end of the preamble:
+% \begin{macrocode}
+} % \AfterEndPreamble
+% \end{macrocode}
+
+% \iffalse
+%</fancyvrb>
+% \fi
+%
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*figcaps>
+% \fi
+%
+% \part{lwarp-figcaps.sty}
+%
+% \section{figcaps}
+%
+% \credits{Patrick W. Daly}
+%
+% \DescribePackage{figcaps} \pkg{{figcaps}} is ignored.
+%
+% \changes{v0.34}{2017/07/27}{\pkg{figcaps}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-figcaps}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{figcaps}[1999/02/23]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\figcapson}{}
+\newcommand*{\figcapsoff}{}
+\newcommand*{\printfigures}{}
+\newcommand*{\figmarkon}{}
+\newcommand*{\figmarkoff}{}
+\def\figurecapname{Figure Captions}
+\def\tablepagename{Tables}
+\def\figurepagename{Figures}
+% \end{macrocode}
+%
+% \iffalse
+%</figcaps>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*figsize>
+% \fi
+%
+% \part{lwarp-figsize.sty}
+%
+% \section{figsize}
+%
+% \credits{Anthony A. Tanbakuchi}
+%
+% \DescribePackage{figsize}
+% \pkg{figsize} is emulated.
+%
+% \changes{v0.49}{2018/02/15}{\pkg{figsize}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{figsize}[2002/03/18]
+% \end{macrocode}
+%
+% Emulates a virtual 6\texttimes9 inch textsize.
+% \begin{macrocode}
+\newlength{\figwidth}
+\newlength{\figheight}
+
+\newcommand{\SetFigLayout}[3][0]{%
+\setlength{\figheight}{8in}%
+\setlength{\figheight}{\figheight / #2}%
+%
+\setlength{\figwidth}{5.5in}%
+\setlength{\figwidth}{\figwidth / #3}%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</figsize>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*fitbox>
+% \fi
+%
+% \part{lwarp-fitbox.sty}
+%
+% \section{fitbox}
+%
+% \DescribePackage{fitbox}
+% \pkg{fitbox} is ignored.
+%
+% \changes{v0.67}{2019/02/23}{\pkg{fitbox}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{fitbox}[2019/02/20]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand{\fitbox}{s o m}{%
+ \begin{BlockClass}{fitbox}
+ #3
+ \end{BlockClass}
+}
+
+\newcommand*{\fitboxset}[1]{}
+
+\newdimen\fitboxnatheight
+\newdimen\fitboxnatwidth
+
+\newcommand\SetFitboxLayout[3][]{}
+% \end{macrocode}
+%
+% \iffalse
+%</fitbox>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*fix2col>
+% \fi
+%
+% \part{lwarp-fix2col.sty}
+%
+% \section{fix2col}
+%
+% \DescribePackage{fix2col}
+% \pkg{fix2col} is ignored.
+%
+% \changes{v0.38}{2017/08/25}{\pkg{fix2col}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{fix2col}[2015/11/13]
+% \end{macrocode}
+%
+%
+% \iffalse
+%</fix2col>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*fixme>
+% \fi
+%
+% \part{lwarp-fixme.sty}
+
+% \section{fixme}
+%
+% \credits{Didier Verna}
+%
+% \DescribePackage{fixme}
+% \pkg{fixme} is patched for use by \pkg{lwarp}.
+%
+% \limitsfixme
+%
+% \changes{v0.44}{2017/11/13}{\pkg{fixme}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{fixme}[2017/03/05]
+% \end{macrocode}
+%
+% Restore \pkg{lwarp}'s version of \cs{@wrindex},
+% ignoring the \pkg{fixme} package's \optn{target} option:
+% \begin{macrocode}
+\let\@wrindex\LWR@wrindex
+% \end{macrocode}
+%
+% Float-related macros required by \pkg{lwarp}:
+% \begin{macrocode}
+\newcommand{\ext@fixme}{lox}
+
+\renewcommand{\l@fixme}[2]{\hypertocfloat{1}{fixme}{lox}{#1}{#2}}
+% \end{macrocode}
+%
+% Other modifications:
+% \begin{macrocode}
+\def\FXFaceInlineHTMLStyle{font-weight:bold}
+
+\renewcommand*\FXLayoutInline[3]{ %
+\InlineClass[\FXFaceInlineHTMLStyle]{fixmeinline}%
+ {\@fxtextstd{#1}{#2}{#3}}%
+}
+
+\def\FXFaceEnvHTMLStyle{font-weight:bold}
+
+\renewcommand*\FXEnvLayoutPlainBegin[2]{%
+\BlockClass[\FXFaceEnvHTMLStyle]{fixmebold}
+\ignorespaces#2 \fxnotename{#1}: \ignorespaces}
+
+\renewcommand*\FXEnvLayoutPlainEnd[2]{\endBlockClass}
+
+\renewcommand*\FXEnvLayoutSignatureBegin[2]{%
+\BlockClass[\FXFaceEnvHTMLStyle]{fixmebold}
+\fxnotename{#1}: \ignorespaces}
+
+\renewcommand*\FXEnvLayoutSignatureEnd[2]{\@fxsignature{#2}\endBlockClass}
+
+\def\FXFaceSignatureHTMLStyle{font-style:italic}
+
+\DeclareRobustCommand*\@fxsignature[1]{%
+\ifthenelse{\equal{#1}{}}%
+ {}%
+ { -- {\InlineClass[\FXFaceSignatureHTMLStyle]{fixmesignature}{#1}}}%
+}
+
+
+\def\FXFaceTargetHTMLStyle{font-style:italic}
+
+\renewcommand\FXTargetLayoutPlain[2]{%
+ \InlineClass[\FXFaceTargetHTMLStyle]{fixmetarget}{#2}%
+}
+% \end{macrocode}
+
+% \iffalse
+%</fixme>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*fixmetodonotes>
+% \fi
+%
+% \part{lwarp-fixmetodonotes.sty}
+
+% \section{fixmetodonotes}
+%
+% \credits{Gioele Barabucci}
+%
+% \DescribePackage{fixmetodonotes}
+% \pkg{fixmetodonotes} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.44}{2017/11/10}{\pkg{fixmetodonotes}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{fixmetodonotes}[2013/04/28]
+% \end{macrocode}
+
+% \begin{macrocode}
+\renewcommand{\NOTES@addtolist}[2]{%
+ \refstepcounter{NOTES@note}%
+% \phantomsection% REMOVED
+ \addcontentsline{notes}{NOTES@note}{%
+ \protect\numberline{\theNOTES@note}{{#1}: {#2}}%
+ }%
+}
+
+\renewcommand{\NOTES@marker}[2]{\fbox{%
+ \textcolor{#2}{% WAS \color
+ \textbf{#1}}%
+ }}
+
+\renewcommand{\NOTES@colorline}[2]{%
+ \bgroup%
+ \ULon{\LWR@backgroundcolor{#1}{#2}}%
+}
+% \end{macrocode}
+
+% \iffalse
+%</fixmetodonotes>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*flafter>
+% \fi
+%
+% \part{lwarp-flafter.sty}
+%
+% \section{flafter}
+%
+% \DescribePackage{flafter}
+% \pkg{flafter} is ignored.
+%
+% \changes{v0.45}{2017/12/02}{\pkg{flafter}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{flafter}[2018/01/08]
+\providecommand\fl@trace[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</flafter>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*flippdf>
+% \fi
+%
+% \part{lwarp-flippdf.sty}
+%
+% \section{flippdf}
+%
+% \DescribePackage{flippdf}
+% \pkg{flippdf} is ignored.
+%
+% \changes{v0.62}{2018/10/18}{\pkg{flippdf}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{flippdf}[2006/06/30]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand\FlipPDF{}
+\newcommand\UnFlipPDF{}
+% \end{macrocode}
+%
+% \iffalse
+%</flippdf>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*float>
+% \fi
+
+% \part{lwarp-float.sty}
+
+% \section{float}
+% \label{sec:newfloat}
+% \label{sec:float}
+%
+% \credits{Anselm Lingnau}
+%
+% \DescribePackage{float}
+% \pkg{float} is emulated.
+%
+% Float styles |boxed| and |ruled| are emulated by \CSS\ and a float class according
+% to style.
+%
+% The \HTML\ \element{figure} \attribute{class} is set to the float type,
+% so \CSS\ may also be used to format the float and its caption, according to
+% float type.
+% Furthermore, an additional class is set to the float style: |plain|, |plaintop|,
+% |boxed|, or |ruled|, so \CSS\ may be used to format by float style as well.
+% Default formatting by \CSS\ is provided for |ruled| and |boxed| styles.
+%
+% \changes{v0.20}{2017/01/22}{\pkg{float}: Improved float caption type handling.}
+%
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{float}[2001/11/08]
+% \end{macrocode}
+
+% \begin{noindmacro}{\listof}
+% See \cref{sec:listof} for the \cs{listof} command.
+% \end{noindmacro}
+
+% \begin{macro}{\LWR@floatstyle}
+% The default float style:
+% \begin{macrocode}
+\newcommand*{\LWR@floatstyle}{plain}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{noindmacro}{\newfloat} \marg{1: type} \marg{2: placement}
+% \marg{3: ext} \oarg{4: within}
+%
+% Emulates the \cs{newfloat} command from the \pkg{float} package.
+%
+% ``placement'' is ignored.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\newfloat}{m m m o}{%
+\IfValueTF{#4}%
+{\DeclareFloatingEnvironment[fileext=#3,within=#4]{#1}}%
+{\DeclareFloatingEnvironment[fileext=#3]{#1}}%
+% \end{macrocode}
+% Remember the float style:
+% \changes{v0.57}{2018/05/14}{\pkg{float}: Added float styles.}
+% \begin{macrocode}
+\csedef{LWR@floatstyle@#1}{\LWR@floatstyle}%
+% \end{macrocode}
+% \pkg{newfloat} package automatically creates the \cs{listof} command
+% for new floats, but \pkg{float} does not,
+% so remove \cs{listof} here in case it is manually created later.
+% \begin{macrocode}
+\cslet{listof#1s}\relax%
+\cslet{listof#1es}\relax%
+% \end{macrocode}
+% Likesize, \pkg{newfloat} also creates \cs{l@<type>}, but \pkg{float} does not,
+% so remove it here:
+% \changes{v0.57}{2018/05/26}{\pkg{float}: Fix: Do not pre-define \cs{l@name}.}
+% \begin{macrocode}
+\cslet{l@#1}\relax%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\floatname} \marg{type} \marg{name}
+%
+% Sets the text name of the float, such as ``Figure''.
+% \begin{macrocode}
+\NewDocumentCommand{\floatname}{m +m}{%
+ \SetupFloatingEnvironment{#1}{name=#2}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\floatplacement} \marg{type} \marg{placement}
+%
+% Float placement is ignored.
+% \begin{macrocode}
+\newcommand*{\floatplacement}[2]{%
+ \SetupFloatingEnvironment{#1}{placement=#2}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\floatstyle} \marg{style}
+%
+% Remember the style for future floats:
+% \begin{macrocode}
+\newcommand{\floatstyle}[1]{%
+ \def\LWR@floatstyle{#1}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\restylefloat} * \marg{type}
+%
+% Remember the style for this float:
+% \begin{macrocode}
+\NewDocumentCommand{\restylefloat}{s m}{%
+ \csedef{LWR@floatstyle@#2}{\LWR@floatstyle}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \iffalse
+%</float>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*floatflt>
+% \fi
+%
+% \part{lwarp-floatflt.sty}
+%
+% \section{floatflt}
+%
+% \credits{Mats Dahlgren}
+%
+% \DescribePackage{floatflt} \pkg{floatflt} is emulated.
+%
+% \changes{v0.26}{2017/03/30}{\pkg{floatflt}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-floatflt}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{floatflt}[1997/07/16]
+% \end{macrocode}
+%
+%
+%
+% \begin{noindenvironment} \oarg{offset} \marg{type} \marg{width}
+% Borrowed from the \pkg{lwarp} version of \pkg{keyfloat}:
+% \changes{v0.42}{2017/10/26}{\pkg{floatflt}: Added width.}
+% \begin{macrocode}
+\NewDocumentEnvironment{KFLTfloatflt@marginfloat}{O{-1.2ex} m m}
+{%
+\setlength{\LWR@templengthone}{#3}%
+\LWR@BlockClassWP{%
+ float:right; %
+ width:\LWR@printlength{\LWR@templengthone}; % extra space
+ margin:10pt%
+}{%
+ width:\LWR@printlength{\LWR@templengthone}%
+}%
+{marginblock}%
+\captionsetup{type=#2}%
+}
+{%
+\endLWR@BlockClassWP%
+}
+% \end{macrocode}
+% \end{noindenvironment}
+%
+% \begin{noindenvironment}{floatingfigure} \oarg{placement} \marg{width}
+% \begin{macrocode}
+\DeclareDocumentEnvironment{floatingfigure}{o m}
+ {\begin{KFLTfloatflt@marginfloat}{figure}{#2}}
+ {\end{KFLTfloatflt@marginfloat}}
+% \end{macrocode}
+% \end{noindenvironment}
+%
+% \begin{noindenvironment}{floatingtable} \oarg{placement}
+% \begin{macrocode}
+\DeclareDocumentEnvironment{floatingtable}{o}
+ {\begin{KFLTfloatflt@marginfloat}{table}{1.5in}}
+ {\end{KFLTfloatflt@marginfloat}}
+% \end{macrocode}
+% \end{noindenvironment}
+%
+% \iffalse
+%</floatflt>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*floatpag>
+% \fi
+%
+% \part{lwarp-floatpag.sty}
+%
+% \section{floatpag}
+%
+% \credits{Vytas Statulevi\v{c}ius and Sigitas Tolu\v{s}is}
+%
+% \DescribePackage{floatpag} \pkg{floatpag} is ignored.
+%
+% \changes{v0.34}{2017/08/03}{\pkg{floatpag}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-floatpag}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{floatpag}[2012/05/29]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\floatpagestyle}[1]{}
+\newcommand*{\rotfloatpagestyle}[1]{}
+\newcommand*{\thisfloatpagestyle}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</floatpag>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*floatrow>
+% \fi
+
+% \part{lwarp-floatrow.sty}
+
+% \section{floatrow}
+% \label{sec:floatrow}
+%
+% \credits{Olga Lapko}
+%
+% \DescribePackage{floatrow}
+% \pkg{floatrow} is emulated.
+
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{floatrow}[2008/08/02]
+% \end{macrocode}
+
+% \changes{v0.14}{2016/03/31}{\pkg{floatrow}: Added.}
+% \changes{v0.24}{2017/03/15}{\pkg{floatrow}: Support for \pkg{subfig}.}
+
+% \limitsfloatrow
+
+% After everything has loaded, remember whether \pkg{subcaption} was loaded.
+% If not, it is assumed that \pkg{subfig} is used instead:
+% \begin{macrocode}
+\newbool{LWR@subcaptionloaded}
+
+\AtBeginDocument{
+\@ifpackageloaded{subcaption}
+{\booltrue{LWR@subcaptionloaded}}
+{\boolfalse{LWR@subcaptionloaded}}
+}
+% \end{macrocode}
+
+% \begin{noindmacro}{\floatbox}
+% \oarg{1 preamble} \marg{2 captype}
+% \oarg{3 width} \oarg{4 height} \oarg{5 vert pos}
+% \marg{6 caption} \marg{7 object}
+%
+% Only parameters for captype, width, caption, and object are used.
+%
+% |LWR@insubfloatrow| is true if inside a \env{subfloatrow} environment.
+%
+% There are two actions, depending on the use of \pkg{subcaption} or \pkg{subfig}.
+% \begin{macrocode}
+\NewDocumentCommand{\floatbox}{o m o o o +m +m}{%
+\ifbool{LWR@subcaptionloaded}%
+{% subcaption
+% \end{macrocode}
+% For \pkg{subcaption}:
+% \begin{macrocode}
+ \ifbool{LWR@insubfloatrow}%
+ {% subcaption in a subfloatrow
+% \end{macrocode}
+% \env{subfigure} and \env{subtable} environments take width as an argument.
+% \begin{macrocode}
+ \IfValueTF{#3}%
+ {\@nameuse{sub#2}{#3}}%
+ {\@nameuse{sub#2}{\linewidth}}%
+ }% subcaption in a subfloatrow
+ {% subcaption not in subfloatrow
+% \end{macrocode}
+% \env{figure} and \env{table} environments do not take a width argument.
+% \begin{macrocode}
+ \@nameuse{#2}%
+ }% subcaption not in subfloatrow
+ #6
+
+ #7
+% \end{macrocode}
+% End the environments:
+% \begin{macrocode}
+ \ifbool{LWR@insubfloatrow}%
+ {\@nameuse{endsub#2}}%
+ {\@nameuse{end#2}}%
+}% subcaption
+{% assume subfig
+% \end{macrocode}
+% For \pkg{subfig}:
+% \begin{macrocode}
+\ifbool{LWR@insubfloatrow}%
+{% subfig in a subfloatrow
+% \end{macrocode}
+% \cs{subfloat} is a macro, not an environment.
+%
+% Package \pkg{subfig}'s \cs{subfloat} command takes an optional argument which is the
+% caption, but \cs{floatbox} argument \#6 contains commands to create
+% the caption and label, not the caption itself. Thus, \cs{caption}
+% is temporarily disabled to return its own argument without braces.
+% \begin{macrocode}
+ \begingroup
+ \let\caption\@firstofone
+ \subfloat[#6]{#7}
+ \endgroup
+}% subfig in a subfloatrow
+{% subfig package, but not a subfig
+% \end{macrocode}
+% \env{figure} and \env{table} are environments:
+% \begin{macrocode}
+\@nameuse{#2}
+#6
+
+#7
+\@nameuse{end#2}
+}% subfig package, but not a subfig
+}% assume subfig
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% Not used:
+% \begin{macrocode}
+\newcommand*{\nocapbeside}{}
+\newcommand*{\capbeside}{}
+\newcommand*{\captop}{}
+\newlength{\FBwidth}
+\setlength{\FBwidth}{.3\linewidth}
+\newlength{\FBheight}
+\setlength{\FBheight}{2in}
+\newcommand*{\useFCwidth}{}
+\newcommand{\floatsetup}[2][]{}
+\newcommand{\thisfloatsetup}[1]{}
+\newcommand{\clearfloatsetup}[1]{}
+\newcommand*{\killfloatstyle}{}
+% \end{macrocode}
+
+
+% \begin{noindmacro}{\newfloatcommand} \marg{1 command} \marg{2 captype}
+% \oarg{3 preamble} \oarg{4 default width}
+%
+% Preamble and default width are ignored.
+% \begin{macrocode}
+\NewDocumentCommand{\newfloatcommand}{m m o o}{%
+\@namedef{#1}{
+\floatbox{#2}
+}
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\renewfloatcommand} \marg{1 command} \marg{2 captype}
+% \oarg{3 preamble} \oarg{4 default width}
+%
+% Preamble and default width are ignored.
+% \begin{macrocode}
+\NewDocumentCommand{\renewfloatcommand}{m m o o}{%
+\@namedef{#1}{%
+\floatbox{#2}
+}
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\ffigbox} \oarg{width} \oarg{height} \oarg{vposn}
+% \marg{caption commands} \marg{contents}
+% \begin{macrocode}
+\newfloatcommand{ffigbox}{figure}[\nocapbeside][]
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\ttabbox} \oarg{width} \oarg{height} \oarg{vposn}
+% \marg{caption commands} \marg{contents}
+% \changes{v0.15}{2016/03/31}{Fixed \& handling.}
+% \begin{macrocode}
+\newfloatcommand{ttabbox}{table}[\captop][\FBwidth]
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\fcapside} \oarg{width} \oarg{height} \oarg{vposn}
+% \marg{caption commands} \marg{contents}
+% \begin{macrocode}
+\newfloatcommand{fcapside}{figure}[\capbeside][]
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindenvironment}{floatrow} \oarg{numfloats}
+% \changes{v0.20}{2016/08/20}{Fix: \cs{linewidth} in a floatrow.}
+%
+% The row of floats is placed into a \element{div} of class |floatrow|.
+% \begin{macrocode}
+\newenvironment*{floatrow}[1][2]
+{
+\LWR@forcenewpage
+\BlockClass{floatrow}
+% \end{macrocode}
+% While inside the floatrow, divide the \cs{linewidth} by the number of floats.
+% \begin{macrocode}
+\booltrue{LWR@infloatrow}
+\setlength{\linewidth}{6in/#1}
+}
+{
+\boolfalse{LWR@infloatrow}
+\endBlockClass
+}
+% \end{macrocode}
+% \end{noindenvironment}
+%
+% Keys for \cs{DeclareNewFloatType}:
+% \begin{macrocode}
+\newcommand*{\LWR@frowkeyplacement}{}
+\newcommand*{\LWR@frowkeyname}{}
+\newcommand*{\LWR@frowkeyfileext}{}
+\newcommand*{\LWR@frowkeywithin}{}
+\newcommand*{\LWR@frowkeycapstyle}{}
+
+\define@key{frowkeys}{placement}{}%
+\define@key{frowkeys}{name}{\renewcommand{\LWR@frowkeyname}{#1}}%
+\define@key{frowkeys}{fileext}{\renewcommand{\LWR@frowkeyfileext}{#1}}%
+\define@key{frowkeys}{within}{\renewcommand{\LWR@frowkeywithin}{#1}}%
+\define@key{frowkeys}{relatedcapstyle}{}%
+% \end{macrocode}
+
+% \begin{noindmacro}{\DeclareNewFloatType} \marg{type} \marg{options}
+%
+% Use |\listof{type}{Title}| to print a list of the floats.
+% \begin{macrocode}
+\newcommand*{\DeclareNewFloatType}[2]{%
+% \end{macrocode}
+% Reset key values:
+% \begin{macrocode}
+\renewcommand*{\LWR@frowkeyplacement}{}%
+\renewcommand*{\LWR@frowkeyname}{}%
+\renewcommand*{\LWR@frowkeyfileext}{}%
+\renewcommand*{\LWR@frowkeywithin}{}%
+\renewcommand*{\LWR@frowkeycapstyle}{}%
+% \end{macrocode}
+% Read new key values:
+% \begin{macrocode}
+\LWR@traceinfo{about to setkeys frowkeys}%
+\setkeys{frowkeys}{#2}%
+\LWR@traceinfo{finished setkeys frowkeys}%
+% \end{macrocode}
+% Create a new float with optional [within]:
+% \begin{macrocode}
+\ifthenelse{\equal{\LWR@frowkeywithin}{}}%
+{%
+ \LWR@traceinfo{about to newfloat #1 \LWR@frowkeyplacement\ %
+ \LWR@frowkeyfileext}%
+ \newfloat{#1}{\LWR@frowkeyplacement}{\LWR@frowkeyfileext}%
+}%
+{%
+ \LWR@traceinfo{about to newfloat #1\ \LWR@frowkeyplacement\ %
+ \LWR@frowkeyfileext\ \LWR@frowkeywithin}%
+ \newfloat{#1}{\LWR@frowkeyplacement}%
+ {\LWR@frowkeyfileext}[\LWR@frowkeywithin]%
+ \LWR@traceinfo{finished newfloat #1}%
+}%
+% \end{macrocode}
+% Rename the float if a name was given:
+% \begin{macrocode}
+\ifthenelse{\equal{\LWR@frowkeyname}{}}%
+ {}%
+ {\floatname{#1}{\LWR@frowkeyname}}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% Not used:
+% \begin{macrocode}
+\newcommand{\buildFBBOX}[2]{}
+\newcommand*{\CenterFloatBoxes}{}
+\newcommand*{\TopFloatBoxes}{}
+\newcommand*{\BottomFloatBoxes}{}
+\newcommand*{\PlainFloatBoxes}{}
+
+\newcommand{\capsubrowsettings}{}
+
+\NewDocumentCommand{\RawFloats}{o o}{}
+% \end{macrocode}
+
+% \begin{noindmacro}{\RawCaption} \marg{text}
+%
+% \changes{v0.15}{2016/03/31}{Fix: steps counter}
+%
+% To be used inside a minipage or parbox.
+% \begin{macrocode}
+\newcommand{\RawCaption}[1]{#1}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\floatfoot} \marg{text}
+%
+% Places additional text inside a float,
+% inside a \CSS\ \element{div} of class |floatfoot|.
+% \begin{macrocode}
+\NewDocumentCommand{\floatfoot}{s +m}{%
+\begin{BlockClass}{floatfoot}
+#2
+\end{BlockClass}
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% ^^A \DescribeBoolean{LWR@insubfloatrow}
+% Used to compute \cs{linewidth}.
+% \begin{macrocode}
+\newbool{LWR@insubfloatrow}
+\boolfalse{LWR@insubfloatrow}
+% \end{macrocode}
+
+% \begin{noindenvironment}{subfloatrow} \oarg{num\_floats}
+% \changes{v0.15}{2016/04/01}{Added.}
+% \begin{macrocode}
+\newenvironment*{subfloatrow}[1][2]
+{
+% \end{macrocode}
+% The row of floats is placed into a \element{div} of class |floatrow|:
+% \begin{macrocode}
+\LWR@forcenewpage
+\BlockClass{floatrow}
+% \end{macrocode}
+% While inside the floatrow, |LWR@insubfloatrow| is set true,
+% which tells \cs{floatbox} to use \cs{subfigure} or \cs{subtable}.
+% \begin{macrocode}
+\begingroup
+\booltrue{LWR@insubfloatrow}
+}
+{
+\endgroup
+\endBlockClass
+\boolfalse{LWR@insubfloatrow}
+}
+% \end{macrocode}
+% \end{noindenvironment}
+
+% \iffalse
+%</floatrow>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*fltrace>
+% \fi
+%
+% \part{lwarp-fltrace.sty}
+%
+% \section{fltrace}
+%
+% \DescribePackage{fltrace}
+% \pkg{fltrace} is ignored.
+%
+% \changes{v0.45}{2017/12/02}{\pkg{fltrace}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{fltrace}[2018/01/08]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\tracefloats{}
+\def\tracefloatsoff{}
+\def\tracefloatvals{}
+% \end{macrocode}
+%
+% \iffalse
+%</fltrace>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*flushend>
+% \fi
+%
+% \part{lwarp-flushend.sty}
+%
+% \section{flushend}
+%
+% \credits{Sigitas Tolu\v{s}is}
+%
+% \DescribePackage{flushend} \pkg{flushend} is ignored.
+%
+% \changes{v0.34}{2017/07/27}{\pkg{flushend}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-flushend}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{flushend}[2017/03/27]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\flushend}{}
+\newcommand*{\raggedend}{}
+\newcommand*{\flushcolsend}{}
+\newcommand*{\raggedcolsend}{}
+\newcommand*{\atColsBreak}[1]{}
+\newcommand*{\atColsEnd}[1]{}
+\newcommand*{\showcolsendrule}{}
+% \end{macrocode}
+%
+% \iffalse
+%</flushend>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*fnbreak>
+% \fi
+%
+% \part{lwarp-fnbreak.sty}
+%
+% \section{fnbreak}
+%
+% \DescribePackage{fnbreak}
+% \pkg{fnbreak} is ignored.
+%
+% \changes{v0.59}{2018/07/09}{\pkg{fnbreak}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{fnbreak}[2012/01/01]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\fnbreakverbose}{}
+\newcommand*{\fnbreaknonverbose}{}
+\newcommand*{\fnbreaklabel}{}
+\newcommand*{\fnbreaknolabel}{}
+% \end{macrocode}
+%
+% \iffalse
+%</fnbreak>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*fncychap>
+% \fi
+
+% \part{lwarp-fncychap.sty}
+
+% \section{fncychap}
+%
+% \credits{Ulf A. Lindgren}
+%
+% \DescribePackage{fncychap}
+% \pkg{fncychap} is ignored.
+%
+% \changes{v0.38}{2017/08/24}{\pkg{fncychap}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-fncychap}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{fncychap}[2007/07/30]
+% \end{macrocode}
+
+% \begin{macrocode}
+\def\mghrulefill#1{}
+\def\ChNameLowerCase{}
+\def\ChNameUpperCase{}
+\def\ChNameAsIs{}
+\def\ChTitleLowerCase{}
+\def\ChTitleUpperCase{}
+\def\ChTitleAsIs{}
+\newcommand{\ChRuleWidth}[1]{}
+\newcommand{\ChNameVar}[1]{}
+\newcommand{\ChNumVar}[1]{}
+\newcommand{\ChTitleVar}[1]{}
+\newcommand{\TheAlphaChapter}{}
+\newcommand{\DOCH}{}
+\newcommand{\DOTI}[1]{}
+\newcommand{\DOTIS}[1]{}
+\newlength{\mylen}
+\newlength{\myhi}
+\newlength{\px}
+\newlength{\py}
+\newlength{\pyy}
+\newlength{\pxx}
+\newlength{\RW}
+\newcommand{\FmN}[1]{#1}
+\newcommand{\FmTi}[1]{#1}
+% \end{macrocode}
+
+% \iffalse
+%</fncychap>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*fnlineno>
+% \fi
+%
+% \part{lwarp-fnlineno.sty}
+%
+% \section{fnlineno}
+%
+% \DescribePackage{fnlineno}
+% \pkg{fnlineno} is ignored.
+%
+% \changes{v0.49}{2018/02/19}{\pkg{fnlineno}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{fnlineno}[2011/01/07]
+% \end{macrocode}
+%
+% \iffalse
+%</fnlineno>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*fnpara>
+% \fi
+%
+% \part{lwarp-fnpara.sty}
+%
+% \section{fnpara}
+%
+% \DescribePackage{fnpara}
+% \pkg{fnpara} is ignored.
+%
+% \changes{v0.68}{2019/02/28}{\pkg{fnpara}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{fnpara}
+% \end{macrocode}
+%
+% \iffalse
+%</fnpara>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*fnpos>
+% \fi
+%
+% \part{lwarp-fnpos.sty}
+%
+% \section{fnpos}
+%
+% \credits{Hiroshi Nakashima}
+%
+% \DescribePackage{fnpos}
+% \pkg{fnpos} is ignored.
+%
+% \changes{v0.40}{2017/09/06}{\pkg{fnpos}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{fnpos}[1999/07/14]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\makeFNbottom}{}
+\newcommand*{\makeFNmid}{}
+\newcommand*{\makeFNbelow}{}
+\newcommand*{\makeFNabove}{}
+% \end{macrocode}
+%
+% \iffalse
+%</fnpos>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*fontawesome>
+% \fi
+%
+% \part{lwarp-fontawesome.sty}
+%
+% \section{fontawesome}
+%
+% \credits{Xavier Danaux}
+%
+% \DescribePackage{fontawesome}
+% \pkg{fontawesome} is patched for use by \pkg{lwarp}.
+%
+% Hashed inline images are used, as there may not be Unicode support for all icons.
+%
+% If using pdf\LaTeX, \prog{poppler} may issue a syntax warning
+% \trouble[\prog{poppler} syntax warning]{poppler=\prog{poppler}>Syntax Warning (ligature)}
+% \trouble{Syntax Warning (ligature)}
+% regarding parsing a ligature component.
+% \XeLaTeX\ or \LuaLaTeX\ may be used to avoid this warning.
+%
+% In the following, the general strategy is to intercept \cs{symbol} and
+% embed it inside a \env{lateximage}. These changes are done inside a local group.
+%
+% For pdf\LaTeX, the \attribute{alt} tag includes the icon (symbol) number.
+% For \XeLaTeX\ and \LuaLaTeX, the \attribute{alt} tag is generic.
+%
+% \changes{v0.67}{2019/02/22}{\pkg{fontawesome}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{fontawesome}[2016/05/15]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LetLtxMacro\LWR@orig@symbol\symbol
+
+\ifxetexorluatex
+
+\newfontfamily{\LWR@orig@FA}{FontAwesome}
+
+\newcommand*{\LWR@fontawesome@xelatex@symbol}[1]{%
+\begin{lateximage}*[(icon)][fontawesomexetex#1]%
+\begingroup%
+\LWR@orig@FA%
+\LWR@orig@symbol{#1}%
+\endgroup%
+\end{lateximage}%
+}
+
+\RenewDocumentCommand{\FA}{}{%
+ \LetLtxMacro\symbol\LWR@fontawesome@xelatex@symbol%
+}
+
+\else
+
+\newcommand*{\LWR@fontawesome@symbolone}[1]{%
+\begin{lateximage}*[(icon #1)][fontawesomeone#1]%
+\begingroup%
+\fontencoding{U}\fontfamily{fontawesomeone}\selectfont%
+\LWR@orig@symbol{#1}%
+\endgroup%
+\end{lateximage}%
+}
+
+\newcommand*{\LWR@fontawesome@symboltwo}[1]{%
+\begin{lateximage}*[(icon #1)][fontawesometwo#1]%
+\begingroup%
+\fontencoding{U}\fontfamily{fontawesometwo}\selectfont%
+\LWR@orig@symbol{#1}%
+\endgroup%
+\end{lateximage}%
+}
+
+\newcommand*{\LWR@fontawesome@symbolthree}[1]{%
+\begin{lateximage}*[(icon #1)][fontawesomethree#1]%
+\begingroup%
+\fontencoding{U}\fontfamily{fontawesomeonethree}\selectfont%
+\LWR@orig@symbol{#1}%
+\endgroup%
+\end{lateximage}%
+}
+
+\renewrobustcmd\FAone{%
+ \LetLtxMacro\symbol\LWR@fontawesome@symbolone%
+}
+
+\renewrobustcmd\FAtwo{%
+ \LetLtxMacro\symbol\LWR@fontawesome@symboltwo%
+}
+
+\renewrobustcmd\FAthree{%
+ \LetLtxMacro\symbol\LWR@fontawesome@symbolthree%
+}
+\fi
+% \end{macrocode}
+%
+% \iffalse
+%</fontawesome>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*fontawesome5>
+% \fi
+%
+% \part{lwarp-fontawesome5.sty}
+%
+% \section{fontawesome5}
+%
+% \credits{Marcel Kr\"uger}
+%
+% \DescribePackage{fontawesome5}
+% \pkg{fontawesome5} is patched for use by \pkg{lwarp}.
+%
+% Hashed inline images are used, as there may not be Unicode support for all icons.
+%
+% The \attribute{alt} tag has the name of the icon.
+%
+% \changes{v0.67}{2019/02/22}{\pkg{fontawesome5}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{fontawesome5}[2018/07/27]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ExplSyntaxOn
+\cs_set:Nn\fontawesome_use_icon:nn{
+ \cs_if_exist:cTF{c__fontawesome_slot_#2_tl}{
+ \begin{lateximage}*[(#2)][#1]
+ \exp_last_unbraced:Nv
+ \__fontawesome_icon_at:nnnn
+ {c__fontawesome_slot_#2_tl}
+ {#1}{#2}
+ \end{lateximage}
+ }{
+ \msg_error:nnxx{fontawesome5}{icon-not-found}{#2}{#1}
+ }
+}
+\ExplSyntaxOff
+% \end{macrocode}
+%
+% \iffalse
+%</fontawesome5>
+% \fi
+%
+%
+%
+% \iffalse
+%<*fontaxes>
+% \fi
+%
+% \part{lwarp-fontaxes.sty}
+%
+% \section{fontaxes}
+%
+% \credits{Andreas B\"{u}hmann, Michael Ummels}
+%
+% \DescribePackage{fontaxes}
+% \pkg{fontaxes} is emulated for \HTML, and used as-is for print output.
+%
+% Functionality for small caps is in the \pkg{lwarp} core.
+% Swashes and figure styles are ignored for \HTML.
+%
+% \changes{v0.72}{2019/05/27}{\pkg{fontaxes}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{fontaxes}[2014/03/23]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newrobustcmd{\LWR@HTML@sscshape}{\LWR@HTML@scshape}
+\LWR@formatted{sscshape}
+\newcommand*{\LWR@null@sscshape}{}
+
+\newrobustcmd{\LWR@HTML@textssc}[1]{\textsc{#1}}
+\LWR@formatted{textssc}
+\newcommand*{\LWR@null@textssc}[1]{#1}
+
+\ifdef{\LWR@HTML@swshape}{}{% duplicated by nfssext-cfr
+ \newcommand{\LWR@HTML@swshape}{}
+ \LWR@formatted{swshape}
+ \newcommand*{\LWR@null@swshape}{}
+
+ \newcommand{\LWR@HTML@textsw}[1]{#1}
+ \LWR@formatted{textsw}
+ \newcommand*{\LWR@null@textsw}[1]{#1}
+}
+
+\appto{\LWR@nullfonts}{%
+\LetLtxMacro\sscshape\LWR@null@sscshape%
+\LetLtxMacro\textssc\LWR@null@textssc%
+\LetLtxMacro\swshape\LWR@null@swshape%
+\LetLtxMacro\textsw\LWR@null@textsw%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</fontaxes>
+% \fi
+%
+%
+%
+% \iffalse
+%<*fontenc>
+% \fi
+%
+% \part{lwarp-fontenc.sty}
+%
+% \section{fontenc}
+%
+% \DescribePackage{fontenc}
+% If using pdf\LaTeX, \pkg{lwarp} used to require \pkg{fontenc} be loaded
+% before \pkg{lwarp},
+% but now \pkg{lwarp} itself loads \cs{fontenc} with T1 encoding, which
+% \pkg{lwarp} requires. \pkg{fontenc} is now allowed to be loaded with another
+% encoding after \pkg{lwarp}.
+%
+% \pkg{lwarp-fontenc} is no longer necessary, but is still provided to overwrite
+% older versions.
+%
+% \changes{v0.21}{2017/02/22}{\pkg{fontenc}: Added.}
+% \changes{v0.44}{2017/11/16}{\pkg{fontenc}: Allowed after \pkg{lwarp}.}
+%
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{fontenc}[2017/04/05]
+% \end{macrocode}
+%
+% \iffalse
+%</fontenc>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*footmisc>
+% \fi
+%
+% \part{lwarp-footmisc.sty}
+%
+% \section{footmisc}
+% \label{sec:footmisc}
+%
+% \credits{Robin Fairbairns}
+%
+% \changes{v0.26}{2017/03/27}{\pkg{footmisc}: Added.}
+%
+% \DescribePackage{footmisc}
+% \pkg{footmisc} is emulated.
+%
+% \pkg{lwarp} incidentally happens to emulate the \optn{stable} option.
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{footmisc}[2011/06/06]
+% \end{macrocode}
+%
+% Some nullified commands:
+% \begin{macrocode}
+\newcommand{\footnotelayout}{}
+\newcommand{\setfnsymbol}[1]{}
+\NewDocumentCommand{\DefineFNsymbols}{s m o m}{}
+
+\newdimen\footnotemargin
+\footnotemargin1.8em\relax
+
+\newcommand*\hangfootparskip{0.5\baselineskip}
+\newcommand*\hangfootparindent{0em}%
+
+\let\pagefootnoterule\footnoterule
+\let\mpfootnoterule\footnoterule
+\def\splitfootnoterule{\kern-3\p@ \hrule \kern2.6\p@}
+
+\providecommand*{\multiplefootnotemarker}{3sp}
+\providecommand*{\multfootsep}{,}
+% \end{macrocode}
+%
+% Using \pkg{cleveref}:
+% \begin{macrocode}
+\providecommand*{\footref}[1]{\labelcref{#1}}
+% \end{macrocode}
+%
+% The following work as-is:
+% \begin{macrocode}
+\newcommand\mpfootnotemark{%
+ \@ifnextchar[%
+ \@xmpfootnotemark%
+ {%
+ \stepcounter\@mpfn%
+ \protected@xdef\@thefnmark{\thempfn}%
+ \@footnotemark%
+ }%
+}
+\def\@xmpfootnotemark[#1]{%
+ \begingroup%
+ \csname c@\@mpfn\endcsname #1\relax%
+ \unrestored@protected@xdef\@thefnmark{\thempfn}%
+ \endgroup%
+ \@footnotemark%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</footmisc>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*footnote>
+% \fi
+%
+% \part{lwarp-footnote.sty}
+%
+% \section{footnote}
+%
+% \credits{Mark Wooding}
+%
+% \DescribePackage{footnote}
+% \pkg{footnote} is used with minor patches.
+%
+% \changes{v0.26}{2017/03/26}{\pkg{footnote}: Added.}
+% \changes{v0.36}{2017/08/15}{\pkg{footnote}: Extra \protect\HTML\ source space after paragraphs.}
+%
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{footnote}[1997/01/28]
+% \end{macrocode}
+%
+% Removed print-version formatting:
+% \begin{macrocode}
+\def\fn@startnote{%
+% \@parboxrestore%
+ \protected@edef\@currentlabel{\csname p@\@mpfn\endcsname\@thefnmark}%
+% \color@begingroup% *** conflicts with lwarp
+}
+
+% \let\fn@endnote\color@endgroup% *** conflicts with lwarp
+\def\fn@endnote{%
+\LWR@htmltagc{/\LWR@tagregularparagraph}%
+\LWR@orignewline%
+}
+% \end{macrocode}
+%
+% Removed print-version formatting:
+% \begin{macrocode}
+\def\fn@startfntext{%
+ \setbox\z@\vbox\bgroup%
+ \fn@startnote%
+ \ignorespaces%
+}
+% \end{macrocode}
+%
+% Removed print-version formatting, added closing paragraph tag:
+% \begin{macrocode}
+\def\fn@endfntext{%
+ \LWR@htmltagc{/\LWR@tagregularparagraph}%
+ \LWR@orignewline%
+ \egroup%
+ \begingroup%
+ \let\@makefntext\@empty%
+ \let\@finalstrut\@gobble%
+ \LetLtxMacro\rule\@gobbletwo% *8* also the optional argument?
+ \@footnotetext{\unvbox\z@}%
+ \endgroup%
+}
+% \end{macrocode}
+%
+% These have been redefined, so re-\cs{let} them again:
+% \begin{macrocode}
+\let\endfootnote\fn@endfntext
+\let\endfootnotetext\endfootnote
+% \end{macrocode}
+%
+%
+% \iffalse
+%</footnote>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*footnotebackref>
+% \fi
+%
+% \part{lwarp-footnotebackref.sty}
+%
+% \section{footnotebackref}
+%
+% \DescribePackage{footnotebackref}
+% \pkg{footnotebackref} is ignored.
+%
+% \changes{v0.68}{2019/03/01}{\pkg{footnotebackref}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{footnotebackref}[2012/07/01]
+% \end{macrocode}
+%
+% \iffalse
+%</footnotebackref>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*footnotehyper>
+% \fi
+
+% \part{lwarp-footnotehyper.sty}
+
+% \section{footnotehyper}
+%
+% \DescribePackage{footnotehyper}
+% \pkg{footnotehyper} is a \pkg{hyperref}-safe version of \pkg{footnote}.
+% For \pkg{lwarp}, \pkg{footnotehyper} is emulated.
+%
+% \changes{v0.26}{2017/03/23}{\pkg{footnotehyper}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-footnotehyper}:
+% \begin{macrocode}
+\RequirePackage{footnote}
+\LWR@ProvidesPackageDrop{footnotehyper}[2018/01/23]
+% \end{macrocode}
+%
+%
+% \iffalse
+%</footnotehyper>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*footnoterange>
+% \fi
+%
+% \part{lwarp-footnoterange.sty}
+%
+% \section{footnoterange}
+%
+% \credits{H.-Martin Münch}
+%
+% \DescribePackage{footnoterange}
+% \pkg{footnoterange} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.65}{2018/12/10}{\pkg{footnoterange}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{footnoterange}[2012/02/17]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\csletcs{footnoterange}{footnoterange*}
+\csletcs{endfootnoterange}{endfootnoterange*}
+% \end{macrocode}
+%
+% \iffalse
+%</footnoterange>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*footnpag>
+% \fi
+%
+% \part{lwarp-footnpag.sty}
+%
+% \section{footnpag}
+%
+% \DescribePackage{footnpag}
+% \pkg{footnpag} is ignored.
+%
+% \changes{v0.45}{2017/12/19}{\pkg{footnpag}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{footnpag}
+% \end{macrocode}
+%
+% \iffalse
+%</footnpag>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*foreign>
+% \fi
+%
+% \part{lwarp-foreign.sty}
+%
+% \section{foreign}
+%
+% \credits{Philip G. Ratcliffe}
+%
+% \DescribePackage{foreign}
+% \pkg{foreign} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.67}{2019/02/17}{\pkg{foreign}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{foreign}[2012/09/25]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand\foreignabbrfont{\emph}
+% \end{macrocode}
+%
+% \iffalse
+%</foreign>
+% \fi
+%
+%
+%
+% \iffalse
+%<*forest>
+% \fi
+%
+% \part{lwarp-forest.sty}
+
+% \section{forest}
+%
+% \credits{Sa\v{s}o \v{Z}ivanovi\'{c}}
+%
+% \DescribePackage{forest}
+% \pkg{forest} is patched for use by \pkg{lwarp}.
+%
+% The starred version of the macro \cs{Forest*} is not supported.
+% \trouble[\cs{Forest*}]{forest=\pkg{forest}}
+% \pkg{lwarp} encases each \env{lateximage} in an environment, so the
+% global results of the starred \cs{Forest*} are lost.
+%
+% \changes{v0.54}{2018/04/14}{\pkg{forest}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{forest}[2017/07/14]
+% \end{macrocode}
+
+% \begin{macrocode}
+\BeforeBeginEnvironment{forest}{\begin{lateximage}[forest]}
+
+\AfterEndEnvironment{forest}{\end{lateximage}}
+
+\RenewDocumentCommand{\Forest}{s D(){} m}{%
+ \forest@config{#2}%
+ \IfBooleanTF{#1}{%
+ \PackageError{lwarp-forest}%
+ {Starred \Forest is not supported}%
+ {Lwarp uses an environment for images, but \Forest* cannot work in an environment.}%
+ \let\forest@next\forest@env%
+ }{\let\forest@next\forest@group@env}%
+ \begin{lateximage}[forest]% lwarp
+ \forest@next{#3}%
+ \end{lateximage}% lwarp
+}
+% \end{macrocode}
+
+% \iffalse
+%</forest>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*framed>
+% \fi
+
+% \part{lwarp-framed.sty}
+%
+% \section{framed}
+%
+% \credits{Donald Arseneau}
+%
+% \DescribePackage{framed}
+% \pkg{framed} is supported and patched by \pkg{lwarp}.
+%
+% \changes{v0.25}{2017/03/19}{\pkg{framed}: Added.}
+%
+% \codehtml
+%
+% Accept all options for \pkg{lwarp-framed}:
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{framed}[2011/10/22]
+\RequirePackage{xcolor}% for \convertcolorspec
+% \end{macrocode}
+
+
+% \begin{macrocode}
+
+\renewenvironment{framed}{%
+\LWR@forcenewpage
+\BlockClass{framed}%
+}
+{\endBlockClass}
+
+\renewenvironment{oframed}{%
+\LWR@forcenewpage
+\BlockClass{framed}%
+}
+{\endBlockClass}
+
+
+\renewenvironment{shaded}{%
+\convertcolorspec{named}{shadecolor}{HTML}\LWR@tempcolor%
+\LWR@forcenewpage
+\BlockClass[background: \LWR@origpound\LWR@tempcolor]{shaded}%
+}
+{\endBlockClass}
+
+\renewenvironment{shaded*}{%
+\convertcolorspec{named}{shadecolor}{HTML}\LWR@tempcolor%
+\LWR@forcenewpage
+\BlockClass[background: \LWR@origpound\LWR@tempcolor]{shaded}%
+}
+{\endBlockClass}
+
+
+\renewenvironment{leftbar}{%
+\LWR@forcenewpage
+ \BlockClass{framedleftbar}
+ \def\FrameCommand{}%
+ \MakeFramed {}
+}%
+ {\endMakeFramed\endBlockClass}
+
+
+\renewenvironment{snugshade}{%
+\convertcolorspec{named}{shadecolor}{HTML}\LWR@tempcolor%
+\LWR@forcenewpage
+\BlockClass[background: \LWR@origpound\LWR@tempcolor]{snugframed}%
+}
+{\endBlockClass}
+
+\renewenvironment{snugshade*}{%
+\convertcolorspec{named}{shadecolor}{HTML}\LWR@tempcolor%
+\LWR@forcenewpage
+\BlockClass[background: \LWR@origpound\LWR@tempcolor]{snugframed}%
+}
+{\endBlockClass}
+
+\let\oframed\framed
+\let\endoframed\endframed
+
+
+\RenewEnviron{titled-frame}[1]{%
+\CustomFBox{#1}{}{0pt}{0pt}{0pt}{0pt}{\BODY}
+}
+% \end{macrocode}
+
+
+
+% \cs{CustomFBox} \marg{toptitle} \marg{bottitle}
+% \marg{thicknesstop} \marg{bottom} \marg{left} \marg{right}
+% \marg{text contents}
+% \begin{macrocode}
+\renewcommand{\CustomFBox}[7]{%
+\convertcolorspec{named}{TFFrameColor}{HTML}\LWR@tempcolor%
+\LWR@forcenewpage
+\begin{BlockClass}[border: 3px solid \LWR@origpound\LWR@tempcolor]{framed}%
+\ifthenelse{\isempty{#1}}{}{% not empty
+ \begin{BlockClass}[background: \LWR@origpound\LWR@tempcolor]{framedtitle}%
+ \textcolor{TFTitleColor}{\textbf{#1}}%
+ \end{BlockClass}
+}% not empty
+
+#7
+
+\ifthenelse{\isempty{#2}}{}{% not empty
+ \convertcolorspec{named}{TFFrameColor}{HTML}\LWR@tempcolor%
+ \begin{BlockClass}[background: \LWR@origpound\LWR@tempcolor]{framedtitle}%
+ \textcolor{TFTitleColor}{\textbf{#2}}%
+ \end{BlockClass}
+}% not empty
+\end{BlockClass}
+}
+% \end{macrocode}
+
+% \cs{TitleBarFrame} \oarg{marker} \marg{title} \marg{contents}
+% \begin{macrocode}
+\renewcommand\TitleBarFrame[3][]{
+\CustomFBox
+ {#2}{}%
+ \fboxrule\fboxrule\fboxrule\fboxrule
+ {#3}%
+}
+% \end{macrocode}
+
+
+% \begin{macrocode}
+\renewcommand{\TF@Title}[1]{#1}
+% \end{macrocode}
+
+
+% \env{MakeFramed} \marg{settings}
+% \begin{macrocode}
+\let\MakeFramed\relax
+\let\endMakeFramed\relax
+
+\NewEnviron{MakeFramed}[1]{%
+\FrameCommand{\begin{minipage}{\linewidth}\BODY\end{minipage}}%
+}
+% \end{macrocode}
+
+
+% \cs{fb@put@frame} \marg{frame cmd no split} \marg{frame cmd split}
+% \begin{macrocode}
+\renewcommand*{\fb@put@frame}[2]{%
+\relax%
+\@tempboxa%
+}
+% \end{macrocode}
+
+% \iffalse
+%</framed>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*ftcap>
+% \fi
+%
+% \part{lwarp-ftcap.sty}
+%
+% \section{ftcap}
+%
+% \DescribePackage{ftcap}
+% \pkg{ftcap} is ignored.
+%
+% \changes{v0.69}{2019/03/17}{\pkg{ftcap}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{ftcap}
+% \end{macrocode}
+%
+% \iffalse
+%</ftcap>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*ftnright>
+% \fi
+
+% \part{lwarp-ftnright.sty}
+
+% \section{ftnright}
+%
+% \DescribePackage{ftnright}
+% \pkg{ftnright} is ignored.
+%
+% \changes{v0.22}{2017/03/01}{\pkg{ftnright}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-ftnright}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{ftnright}[2014/10/28]
+% \end{macrocode}
+
+% \iffalse
+%</ftnright>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*fullminipage>
+% \fi
+%
+% \part{lwarp-fullminipage.sty}
+%
+% \section{fullminipage}
+%
+% \DescribePackage{fullminipage}
+% \pkg{fullminipage} is ignored.
+%
+% \changes{v0.60}{2018/09/18}{\pkg{fullminipage}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{fullminipage}[2014/07/06]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newenvironment{fullminipage}[1][]{}{}
+% \end{macrocode}
+%
+% \iffalse
+%</fullminipage>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*fullpage>
+% \fi
+%
+% \part{lwarp-fullpage.sty}
+%
+% \section{fullpage}
+%
+% \DescribePackage{fullpage} \pkg{fullpage} is ignored.
+%
+% \changes{v0.34}{2017/07/27}{\pkg{fullpage}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-fullpage}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{fullpage}[1994/06/01]
+% \end{macrocode}
+%
+%
+% \iffalse
+%</fullpage>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*fullwidth>
+% \fi
+%
+% \part{lwarp-fullwidth.sty}
+%
+% \section{fullwidth}
+%
+% \credits{Marco Daniel}
+%
+% \DescribePackage{fullwidth}
+% \pkg{fullwidth} is emulated.
+%
+% A minipage is used, of no \HTML\ width.
+%
+% \changes{v0.39}{2017/08/27}{\pkg{fullwidth}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{fullwidth}[2011/11/18]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newenvironment*{fullwidth}[1][]{%
+\minipagefullwidth%
+\minipage{\linewidth}%
+}
+{%
+\endminipage%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</fullwidth>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*fwlw>
+% \fi
+%
+% \part{lwarp-fwlw.sty}
+%
+% \section{fwlw}
+%
+% \DescribePackage{fwlw}
+% \pkg{fwlw} is ignored.
+%
+% \changes{v0.45}{2017/12/19}{\pkg{fwlw}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{fwlw}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newbox\FirstWordBox \global\setbox\FirstWordBox\hbox{}
+\newbox\NextWordBox \global\setbox\NextWordBox\hbox{}
+\newbox\LastWordBox \global\setbox\LastWordBox\hbox{}
+\def\ps@fwlwhead{}
+\def\ps@NextWordFoot{}
+% \end{macrocode}
+%
+% \iffalse
+%</fwlw>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*gentombow>
+% \fi
+%
+% \part{lwarp-gentombow.sty}
+%
+% \section{gentombow}
+%
+% \DescribePackage{gentombow}
+% \pkg{gentombow} is ignored.
+%
+% \changes{v0.65}{2018/12/18}{\pkg{gentombow}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{gentombow}[2018/05/17]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\settombowbanner}[1]{}
+\newcommand{\settombowbannerfont}[1]{}
+\newcommand{\settombowwidth}[1]{}
+\newcommand{\settombowbleed}[1]{}
+\newcommand{\settombowcolor}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</gentombow>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*geometry>
+% \fi
+
+% \part{lwarp-geometry.sty}
+
+% \section{geometry}
+%
+% \credits{Hideo Umeki}
+%
+% \DescribePackage{geometry}
+% \pkg{geometry} is preloaded by \pkg{lwarp}, but must be nullified
+% as seen by the user's source code.
+%
+% \changes{v0.22}{2017/03/01}{\pkg{geometry}: Nullified commands.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-geometry}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{geometry}[2018/04/16]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand*{\geometry}[1]{}
+\renewcommand*{\newgeometry}[1]{}
+\renewcommand*{\restoregeometry}{}
+\renewcommand*{\savegeometry}[1]{}
+\renewcommand*{\loadgeometry}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</geometry>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*gloss>
+% \fi
+%
+% \part{lwarp-gloss.sty}
+%
+% \section{gloss}
+%
+% \credits{Jose Luis D\'iiaz, Javier Bezos}
+%
+% \DescribePackage{gloss}
+% \pkg{gloss} is patched for use by \pkg{lwarp}.
+%
+% \limitsgloss
+%
+% \changes{v0.67}{2019/02/19}{\pkg{gloss}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{gloss}[2002/07/26]
+% \end{macrocode}
+%
+% \cs{BaseJobname} is added to the label in case \pkg{xr} or \pkg{xr-hyper} are used.
+%
+% \changes{v0.72}{2019/06/05}{\pkg{gloss}: Fix references for \pkg{xr}, \pkg{xr-hyper}.}
+% \begin{macrocode}
+\xpatchcmd{\gls@gloss@iii}
+ {\thepage}
+ {\theLWR@previousautopagelabel}
+ {}
+ {\LWR@patcherror{gloss}{gls@gloss@iii}}
+
+\def\gls@page@i#1#2{%
+ \endgroup%
+ \global\@namedef{glsp@#1}{\nameref{\BaseJobname-autopage-#2}}}%
+% \end{macrocode}
+%
+% \iffalse
+%</gloss>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*glossaries>
+% \fi
+%
+% \part{lwarp-glossaries.sty}
+
+% \section{glossaries}
+%
+% \credits{Nicola L.C. Talbot}
+%
+% \DescribePackage{glossaries}
+% \limitsglossaries
+%
+% \changes{v0.28}{2017/04/14}{\pkg{glossaries}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\PassOptionsToPackage{xindy}{glossaries}
+
+\LWR@ProvidesPackagePass{glossaries}[2018/07/23]
+
+\setupglossaries{nonumberlist}
+\setglossarystyle{index}
+% \end{macrocode}
+%
+% Patched to fix \TOC\ pointing to the previous page:
+% \begin{macrocode}
+\renewcommand*{\@p@glossarysection}[2]{%
+ \glsclearpage
+ \phantomsection
+ \ifdefempty\@@glossarysecstar
+ {%
+ \csname\@@glossarysec\endcsname{#2}%
+ }%
+ {%
+% \end{macrocode}
+% In the original, the \TOC\ entry was made before the section,
+% thus linking to the phantomsection in the printed version, but for
+% \HTML, this caused the link to point to the page before the glossaries,
+% which could be a different \HTML\ file.
+% Here, the \TOC\ entry is made after the section is created:
+% \begin{macrocode}
+ \csname\@@glossarysec\endcsname*{#2}%
+ \@gls@toc{#1}{\@@glossarysec}% Moved after the previous line.
+ }%
+ \@@glossaryseclabel
+}
+% \end{macrocode}
+%
+% \pkg{lwarp}'s sectioning commands cannot handle robust macros when
+% splitting \HTML\ into named filenames.
+% \pkg{glossaries} uses \cs{translate} in sectioning names, and \cs{translate}
+% is robust and cannot be expanded.
+% The following pre-expands the translations at this moment, making use
+% of \cs{translatelet}.
+%
+% \changes{v0.54}{2018/04/21}{\pkg{glossaries}: Fix when
+% not using \pkg{babel} or \pkg{polyglossia}.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@comp@glossaryname}{\translate{Glossary}}
+
+\ifdefstrequal{\glossaryname}{\LWR@comp@glossaryname}{
+ \translatelet\LWR@translatetemp{Glossary}
+ \edef\glossaryname{\LWR@translatetemp}
+}{}
+
+\newcommand*{\LWR@comp@acronymname}{\translate{Acronym}}
+
+\ifdefstrequal{\acronymname}{\LWR@comp@acronymname}{
+ \translatelet\LWR@translatetemp{Acronym}
+ \edef\acronymname{\LWR@translatetemp}
+}{}
+
+\newcommand*{\LWR@comp@glssymbolsgroupname}{\translate{Symbols (glossaries)}}
+
+\ifdefstrequal{\glssymbolsgroupname}{\LWR@comp@glssymbolsgroupname}{
+ \translatelet\LWR@translatetemp{Symbols (glossaries)}
+ \edef\glssymbolsgroupname{\LWR@translatetemp}
+}{}
+
+\newcommand*{\LWR@comp@glsnumbersgroupname}{\translate{Numbers (glossaries)}}
+
+\ifdefstrequal{\glsnumbersgroupname}{\LWR@comp@glsnumbersgroupname}{
+ \translatelet\LWR@translatetemp{Numbers (glossaries)}
+ \edef\glsnumbersgroupname{\LWR@translatetemp}
+}{}
+% \end{macrocode}
+%
+% \iffalse
+%</glossaries>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*gmeometric>
+% \fi
+%
+% \part{lwarp-gmeometric.sty}
+%
+% \section{gmeometric}
+%
+% \DescribePackage{gmeometric}
+% \pkg{gmeometric} is ignored.
+%
+% \changes{v0.64}{2018/12/07}{\pkg{gmeometric}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{gmeometric}[2008/11/22]
+% \end{macrocode}
+%
+% \iffalse
+%</gmeometric>
+% \fi
+%
+%
+% \addtocontents{toc}{\protect\setcounter{tocdepth}{2}}
+%
+%
+% \iffalse
+%<*graphics>
+% \fi
+
+% \part{lwarp-graphics.sty}
+
+% \section{graphics}
+%
+% \credits{D. P. Carlisle}
+%
+% \DescribePackage{graphics}
+% \pkg{graphics} is emulated.
+%
+% \changes{v0.28}{2017/04/12}{\pkg{graphics}: Added.}
+% \changes{v0.40}{2017/09/07}{\pkg{graphics}: Moved out of the \pkg{lwarp} core.}
+% \changes{v0.40}{2017/09/07}{\pkg{graphics}: Restores \cs{includegraphics}
+% and \cs{DeclareGraphicsExtensions} in a \env{lateximage}.}
+%
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{graphics}[2017/06/25]
+% \end{macrocode}
+
+
+% \subsection{Graphics extensions}
+
+% \begin{macro}{\DeclareGraphicsExtensions} \marg{list}
+%
+% \cs{AtBeginDocument} allow \SVG\ files instead of \PDF:
+% \begin{macrocode}
+\AtBeginDocument{
+\DeclareGraphicsExtensions{.svg,.SVG,.gif,.GIF,.png,.PNG,.jpg,.JPG,.jpeg,.JPEG}
+\DeclareGraphicsRule{.svg}{svg}{.svg}{}
+\DeclareGraphicsRule{.SVG}{svg}{.SVG}{}
+}
+% \end{macrocode}
+% Inside a \env{lateximage}, allow \PDF\ instead of \SVG:
+% \changes{v0.61}{2018/10/06}{Fix: \EPS\ for \DVI\ \LaTeX.}
+% \begin{macrocode}
+\ifpdf
+\appto\LWR@restoreorigformatting{%
+\DeclareGraphicsExtensions{.pdf,.PDF,.gif,.GIF,.png,.PNG,.jpg,.JPG,.jpeg,.JPEG}%
+}
+\else% \ifpdf
+ \ifXeTeX
+\appto\LWR@restoreorigformatting{%
+\DeclareGraphicsExtensions{.pdf,.PDF,.gif,.GIF,.png,.PNG,.jpg,.JPG,.jpeg,.JPEG}%
+}
+ \else
+\appto\LWR@restoreorigformatting{%
+\DeclareGraphicsExtensions{.eps,.EPS,.gif,.GIF,.png,.PNG,.jpg,.JPG,.jpeg,.JPEG}%
+}
+ \fi
+\fi
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Length conversions and graphics options}
+%
+% A scaled image in \LaTeX{} by default takes only as much space
+% on the page as it
+% requires, but \HTML\ browsers use as much space as the
+% \trouble[whitespace]{graphics>scaled}
+% original unscaled image would have taken,
+% with the scaled image over- or under-flowing the area.
+
+% Used to store the user's selected dimensions and \HTML\ class.
+%
+% The class defaults to ``inlineimage'' unless changed by a \optn{class=xyx} option.
+% \begin{macrocode}
+\newlength{\LWR@igwidth}
+\newlength{\LWR@igheight}
+\newcommand*{\LWR@igwidthstyle}{}
+\newcommand*{\LWR@igheightstyle}{}
+\newcommand*{\LWR@igorigin}{}
+\newcommand*{\LWR@igangle}{}
+\newcommand*{\LWR@igxscale}{1}
+\newcommand*{\LWR@igyscale}{1}
+\newcommand*{\LWR@igclass}{inlineimage}
+% \end{macrocode}
+% \changes{v0.65}{2018/12/19}{\pkg{graphics}: Added \cs{includegraphics} \attribute{alt} key.}
+% \begin{macrocode}
+\newcommand*{\LWR@igalt}{(image)}
+% \end{macrocode}
+
+% Set the actions of each of the key/value combinations for
+% \cs{includegraphics}. Many are ignored.
+%
+% If an optional width was given, set an \HTML\ style:
+% \begin{macrocode}
+\define@key{igraph}{width}{%
+\setlength{\LWR@igwidth}{#1}%
+\ifthenelse{\lengthtest{\LWR@igwidth > 0pt}}%
+{%
+% \end{macrocode}
+% Default to use the converted fixed length given:
+% \begin{macrocode}
+ \renewcommand*{\LWR@igwidthstyle}{width:\LWR@printlength{\LWR@igwidth}}%
+% \end{macrocode}
+% If ex or em dimensions were given, use those instead:
+% \begin{macrocode}
+ \IfEndWith{#1}{ex}%
+ {\renewcommand*{\LWR@igwidthstyle}{width:#1}}% yes ex
+ {}% not ex
+ \IfEndWith{#1}{em}%
+ {\renewcommand*{\LWR@igwidthstyle}{width:#1}}% yes em
+ {}% not em
+ \IfEndWith{#1}{\%}%
+ {\renewcommand*{\LWR@igwidthstyle}{width:#1}}% yes percent
+ {}% not percent
+ \IfEndWith{#1}{px}%
+ {\renewcommand*{\LWR@igwidthstyle}{width:#1}}% yes px
+ {}% not px
+}{}% end of length > 0pt
+}
+% \end{macrocode}
+%
+% If an optional height was given, set an \HTML\ style:
+% \begin{macrocode}
+\define@key{igraph}{height}{%
+\setlength{\LWR@igheight}{#1}%
+\ifthenelse{\lengthtest{\LWR@igheight > 0pt}}%
+{%
+% \end{macrocode}
+% Default to use the converted fixed length given:
+% \begin{macrocode}
+ \renewcommand*{\LWR@igheightstyle}{%
+ height:\LWR@printlength{\LWR@igheight} % extra space
+ }%
+% \end{macrocode}
+% If ex or em dimensions were given, use those instead:
+% \begin{macrocode}
+ \IfEndWith{#1}{ex}%
+ {\renewcommand*{\LWR@igheightstyle}{height:#1}}% yes ex
+ {}% not ex
+ \IfEndWith{#1}{em}%
+ {\renewcommand*{\LWR@igheightstyle}{height:#1}}% yes em
+ {}% not em
+ \IfEndWith{#1}{\%}%
+ {\renewcommand*{\LWR@igheightstyle}{height:#1}}% yes percent
+ {}% not percent
+ \IfEndWith{#1}{px}%
+ {\renewcommand*{\LWR@igheightstyle}{height:#1}}% yes px
+ {}% not px
+}{}% end of length > 0pt
+}
+% \end{macrocode}
+%
+%
+% Handle origin key:
+% \changes{v0.52}{2018/03/27}{pkg{graphics}: Added defaults.}
+% \begin{macrocode}
+\define@key{igraph}{origin}[c]{%
+ \renewcommand*{\LWR@igorigin}{#1}%
+}
+% \end{macrocode}
+%
+%
+% Handle angle key:
+% \begin{macrocode}
+\define@key{igraph}{angle}{\renewcommand*{\LWR@igangle}{#1}}
+% \end{macrocode}
+%
+%
+% Handle class key:
+% \begin{macrocode}
+\define@key{igraph}{class}{\renewcommand*{\LWR@igclass}{#1}}
+% \end{macrocode}
+%
+% Handle alt key:
+% \changes{v0.65}{2018/12/19}{\pkg{graphics}: Added \cs{includegraphics} \attribute{alt} key.}
+% \begin{macrocode}
+\define@key{igraph}{alt}{\renewcommand*{\LWR@igalt}{#1}}
+% \end{macrocode}
+%
+% ^^A \define@key{igraph}{xscale}{\renewcommand*{\LWR@igxscale}{#1}}
+% ^^A \define@key{igraph}{yscale}{\renewcommand*{\LWR@igyscale}{#1}}
+% It appears that \pkg{graphicx} does not have separate keys for
+% |xscale| and |yscale|. |scale| adjusts both at the same time.
+% \changes{v0.69}{2019/03/10}{\pkg{graphics}: Warning if using \optn{scale} option.}
+% \begin{macrocode}
+\define@key{igraph}{scale}{%
+ \ifthenelse{\equal{#1}{1}}{}{% must expand #1
+ \PackageWarning{lwarp}{%
+ It is recommended to use\MessageBreak
+ [width=xx\protect\linewidth]\MessageBreak
+ instead of [scale=yy],%
+ }%
+ }%
+ \renewcommand*{\LWR@igxscale}{#1}%
+ \renewcommand*{\LWR@igyscale}{#1}%
+}
+% \end{macrocode}
+%
+% Numerous ignored keys:
+% \changes{v0.52}{2018/03/27}{pkg{graphics}: Added defaults.}
+% \begin{macrocode}
+\define@key{igraph}{bb}{}
+\define@key{igraph}{bbllx}{}
+\define@key{igraph}{bblly}{}
+\define@key{igraph}{bburx}{}
+\define@key{igraph}{bbury}{}
+\define@key{igraph}{natwidth}{}
+\define@key{igraph}{natheight}{}
+\define@key{igraph}{hiresbb}[true]{}
+\define@key{igraph}{viewport}{}
+\define@key{igraph}{trim}{}
+\define@key{igraph}{totalheight}{}
+\define@key{igraph}{keepaspectratio}[true]{}
+\define@key{igraph}{clip}[true]{}
+\define@key{igraph}{draft}[true]{}
+\define@key{igraph}{type}{}
+\define@key{igraph}{ext}{}
+\define@key{igraph}{read}{}
+\define@key{igraph}{command}{}
+% \end{macrocode}
+% New in v1.1a:
+% \changes{v0.52}{2018/03/27}{pkg{graphicx}: Updated for v1.1a.}
+% \begin{macrocode}
+\define@key{igraph}{quite}{}
+\define@key{igraph}{page}{}
+\define@key{igraph}{pagebox}{}
+\define@key{igraph}{interpolate}[true]{}
+% \end{macrocode}
+% New in v1.1b:
+% \changes{v0.52}{2018/03/27}{pkg{graphicx}: Updated for v1.1b.}
+% \begin{macrocode}
+\define@key{igraph}{decodearray}{}
+% \end{macrocode}
+
+
+% \subsection{Printing \HTML\ styles}
+
+% \begin{macro}{\LWR@rotstyle} \marg{prefix} \marg{degrees}
+%
+% Prints the rotate style with the given prefix.
+%
+% |prefix| is |-ms-| or |-webkit-| or nothing, and is used to generate
+% three versions of the |transform:rotate| style.
+% \begin{macrocode}
+\newcommand*{\LWR@rotstyle}[2]{%
+ #1transform:rotate(-#2deg);
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@scalestyle} \marg{prefix} \marg{xscale} \marg{yscale}
+%
+% Prints the scale style with the given prefix.
+%
+% |prefix| is |-ms-| or |-webkit-| or nothing, and is used to generate
+% three versions of the |transform:scale| style.
+% \begin{macrocode}
+\newcommand*{\LWR@scalestyle}[3]{%
+ #1transform:scale(#2,#3);
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+
+% \subsection{\cs{includegraphics}}
+
+% \DescribeBoolean{LWR@infloatrow}
+% Used to compute \cs{linewidth}.
+% \begin{macrocode}
+\newbool{LWR@infloatrow}
+\boolfalse{LWR@infloatrow}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@opacity} For \HTML, used only for \cs{includegraphics}.
+%
+% \cs{LWR@opacity} may be set by the \pkg{transparent} package.
+% \begin{macrocode}
+\def\LWR@opacity{1}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@imagesizebox}
+% Used to determine the actual image size if needed.
+% \begin{macrocode}
+\newsavebox{\LWR@imagesizebox}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@HTML@Gin@setfile} \marg{w} \marg{h} \marg{filename}
+% Sets the parsed filename for \HTML\ output.
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@Gin@setfile}[3]{%
+ \xdef\LWR@parsedfilename{#3}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \DescribeKey[Gin]{class} \CSS\ class for the image.
+%
+% Define the new class key for the print-mode version of \cs{includegraphics},
+% which is enabled inside a \env{lateximage}.
+% \changes{v0.42}{2017/10/24}{\pkg{includegraphics}: Fix: Class key.}
+% \changes{v0.65}{2018/12/19}{\pkg{graphics}: Added \cs{includegraphics} \attribute{alt} key.}
+% \begin{macrocode}
+\AtBeginDocument{
+\define@key{Gin}{class}{}
+\define@key{Gin}{alt}{}
+}
+% \end{macrocode}
+
+
+% \begin{macro}{\LWR@replaceEPSSVG}
+%
+% Usually, references to \EPS\ files become \SVG\ files,
+% but if the \pkg{epstopdf} package is being used, it automatically
+% converts \EPS\ to \PDF, and the following must NOT be done.
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifpackageloaded{epstopdf}
+{
+ \newcommand*{\LWR@replaceEPSSVG}{}
+}{%
+ \newcommand*{\LWR@replaceEPSSVG}{%
+ \StrSubstitute{\LWR@tempone}{.eps}{.svg}[\LWR@tempone]%
+ \StrSubstitute{\LWR@tempone}{.EPS}{.SVG}[\LWR@tempone]%
+ }
+}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@includegraphicsb} * \oarg{2: options} \oarg{3: options} \marg{4: filename}
+%
+% \pkg{graphics} syntax is \cs{includegraphics} * \oarg{llx,lly} \oarg{urx,ury} \marg{file}
+%
+% \pkg{graphicx} syntax is \cs{includegraphics} \oarg{key values} \marg{file}
+%
+% If |#3| is empty, only one optional argument was given, thus \pkg{graphicx} syntax.
+%
+% If using \cs{epsfig} or \cs{psfig} from the \pkg{epsfig} package,
+% |#4| will be \cs{LWR@epsfig@filename}, which will have been set by the |file| or |figure| keys.
+% Therefore, |#4| must not be used until after the keys have been processed.
+%
+% \changes{v0.18}{2016/04/14}{Improved \HTML\ output linebreaks.}
+% \changes{v0.18}{2016/05/17}{Fix: \cs{linewidth}, \cs{textwidth}, \cs{textheight}
+% inside a minipage.}
+% \changes{v0.18}{2016/05/17}{em, ex, \%, px dimensions preserved.}
+% \changes{v0.18}{2016/05/17}{Add: svgz file extension.}
+% \changes{v0.20}{2016/08/20}{Fix: \cs{linewidth} in a floatrow.}
+% \changes{v0.20}{2017/01/12}{Fix: Expands filename.}
+% \changes{v0.28}{2017/04/12}{Adapts to \pkg{graphics} syntax.}
+% \changes{v0.29}{2017/04/15}{Fix: Error when no optional arguments.}
+% \changes{v0.40}{2017/09/08}{Add: Full \cs{graphicspath} support.}
+% \changes{v0.42}{2017/10/26}{Fix: Filename expansion.}
+% \changes{v0.45}{2017/12/29}{Improved URLs with underscores.}
+% \changes{v0.59}{2018/09/07}{Now works with \filenm{.pdf} and \filenm{.eps}
+% filename extensions.}
+% \changes{v0.66}{2019/02/02}{Improved \HTML\ formatting.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@includegraphicsb}{s o o m}
+{%
+% \end{macrocode}
+% Start the image tag on a new line, allow \PDF\ output word wrap:
+% \begin{macrocode}
+\LWR@origtilde \LWR@orignewline%
+% \end{macrocode}
+% Temporarily compute \cs{linewidth}, \cs{textwidth}, \cs{textheight} arguments with a 6x9 inch size
+% until the next \cs{endgroup}.
+% \changes{v0.48}{2018/02/11}{Fix: Virtual page size limited to a group.}
+% \begin{macrocode}
+\begingroup%
+\ifthenelse{\cnttest{\value{LWR@minipagedepth}}{=}{0}}%
+{%
+ \ifbool{LWR@infloatrow}%
+ {}
+ {% not in a minipage or a floatrow:
+ \setlength{\linewidth}{6in}%
+ \setlength{\textwidth}{6in}%
+ \setlength{\textheight}{9in}%
+ }%
+}{}%
+% \end{macrocode}
+% For correct em sizing during the width and height conversions:
+% \begin{macrocode}
+\large%
+% \end{macrocode}
+% Reset some defaults, possibly will be changed below if options were given:
+% \begin{macrocode}
+\setlength{\LWR@igwidth}{0pt}%
+\setlength{\LWR@igheight}{0pt}%
+\renewcommand*{\LWR@igwidthstyle}{}%
+\renewcommand*{\LWR@igheightstyle}{}%
+\renewcommand*{\LWR@igorigin}{}%
+\renewcommand*{\LWR@igangle}{}%
+\renewcommand*{\LWR@igxscale}{1}%
+\renewcommand*{\LWR@igyscale}{1}%
+\renewcommand*{\LWR@igclass}{inlineimage}%
+% \end{macrocode}
+% \changes{v0.65}{2018/12/19}{\pkg{graphics}: Added \cs{includegraphics} \attribute{alt} key.}
+% \begin{macrocode}
+\renewcommand*{\LWR@igalt}{(image)}%
+% \end{macrocode}
+%
+% If |#3| is empty, only one optional argument was given, thus \pkg{graphicx} syntax:
+% \begin{macrocode}
+\IfValueF{#3}{%
+ \IfValueTF{#2}%
+ {\setkeys{igraph}{#2}}%
+ {\setkeys{igraph}{}}%
+}%
+% \end{macrocode}
+%
+% Fully expand and detokenize the filename,
+% changing the file extension to \filenm{.svg} if necessary.
+% \changes{v0.59}{2018/08/28}{Fix: Expand filename.}
+% \changes{v0.61}{2018/10/01}{Set keys before using filename, for \pkg{epsfig}.}
+% \begin{macrocode}
+\begingroup%
+\LetLtxMacro\Gin@setfile\LWR@HTML@Gin@setfile%
+\edef\LWR@tempone{#4}%
+\StrSubstitute{\LWR@tempone}{.pdf}{.svg}[\LWR@tempone]%
+\StrSubstitute{\LWR@tempone}{.PDF}{.SVG}[\LWR@tempone]%
+\LWR@replaceEPSSVG%
+\xdef\LWR@parsedfilename{\LWR@tempone}%
+\Ginclude@graphics{\detokenize\expandafter{\LWR@tempone}}%
+\endgroup%
+\filename@parse{\LWR@parsedfilename}%
+\LWR@traceinfo{LWR@parsedfilename is \LWR@parsedfilename}%
+% \LWR@sanitize{\LWR@parsedfilename}%
+% \end{macrocode}
+%
+% If formatting for a word processor, find and set the actual image size,
+% without rotation, using \PDF\ instead of \SVG\ to find the original bounding box:
+% \changes{v0.42}{2017/10/24}{If \progcode{FormatWP}, use explicit size.}
+% \changes{v0.61}{2018/10/06}{Fix: \EPS\ for \DVI\ \LaTeX.}
+% \changes{v0.62}{2018/10/27}{Fix: \bool{FormatWP}.}
+% \begin{macrocode}
+\ifbool{FormatWP}{%
+ \begingroup%
+ \LWR@restoreorigformatting%
+ \ifpdf%
+ \appto\LWR@restoreorigformatting{%
+ \DeclareGraphicsExtensions{.pdf,.PDF,.gif,.GIF,.png,.PNG,.jpg,.JPG,.jpeg,.JPEG}%
+ }%
+ \else% \ifpdf
+ \ifXeTeX%
+ \appto\LWR@restoreorigformatting{%
+ \DeclareGraphicsExtensions{.pdf,.PDF,.gif,.GIF,.png,.PNG,.jpg,.JPG,.jpeg,.JPEG}%
+ }%
+ \else%
+ \appto\LWR@restoreorigformatting{%
+ \DeclareGraphicsExtensions{.eps,.EPS,.gif,.GIF,.png,.PNG,.jpg,.JPG,.jpeg,.JPEG}%
+ }%
+ \fi%
+ \fi% \ifpdf
+ \define@key{Gin}{angle}{}%
+ \IfBooleanTF{#1}%
+ {% starred
+ \IfValueTF{#3}%
+ {%
+ \global\sbox{\LWR@imagesizebox}{\LWR@origincludegraphics*[#2][#3]{#4}}%
+ }%
+ {%
+ \IfValueTF{#2}%
+ {%
+ \global\sbox{\LWR@imagesizebox}{\LWR@origincludegraphics*[#2]{#4}}%
+ }{%
+ \global\sbox{\LWR@imagesizebox}{\LWR@origincludegraphics*{#4}}%
+ }%
+ }%
+ }% starred
+ {% not starred
+ \IfValueTF{#3}%
+ {%
+ \global\sbox{\LWR@imagesizebox}{\LWR@origincludegraphics[#2][#3]{#4}}%
+ }%
+ {%
+ \IfValueTF{#2}%
+ {%
+ \global\sbox{\LWR@imagesizebox}{\LWR@origincludegraphics[#2]{#4}}%
+ }{%
+ \global\sbox{\LWR@imagesizebox}{\LWR@origincludegraphics{#4}}%
+ }%
+ }%
+ }% not starred
+ \endgroup%
+ \settowidth{\LWR@igwidth}{\usebox{\LWR@imagesizebox}}%
+ \global\renewcommand*{\LWR@igwidthstyle}{width:\LWR@printlength{\LWR@igwidth}}%
+ \settoheight{\LWR@igheight}{\usebox{\LWR@imagesizebox}}%
+ \global\renewcommand*{\LWR@igheightstyle}{height:\LWR@printlength{\LWR@igheight}}%
+}{}% FormatWP
+% \end{macrocode}
+%
+% Create the \HTML\ reference with the graphicspath, filename, extension,
+% alt tag, style, and class.
+%
+% The \cs{LWR@origtilde} adds space between tags in case this
+% is being done inside a \cs{savebox} where \cs{newline} has no effect.
+% \begin{macrocode}
+\LWR@traceinfo{LWR@includegraphicsb: about to create href}%
+\href{\LWR@parsedfilename}%
+{% start of href
+\LWR@traceinfo{LWR@includegraphicsb: about to LWR@htmltag}%
+\LWR@htmltag{% start of image tags
+img\LWR@indentHTML%
+src="%
+% \end{macrocode}
+% \changes{v0.62}{2018/10/27}{Fix: Filename expansion.}
+% \begin{macrocode}
+\detokenize\expandafter{\LWR@parsedfilename}%
+% \end{macrocode}
+% \begin{macrocode}
+"\LWR@indentHTML%
+% \end{macrocode}
+% Only include a style tag if a width, height, angle, or scale was given:
+% \begin{macrocode}
+\ifthenelse{
+ \NOT\equal{\LWR@igwidthstyle}{} \OR
+ \NOT\equal{\LWR@igheightstyle}{} \OR
+ \NOT\equal{\LWR@igorigin}{} \OR
+ \NOT\equal{\LWR@igangle}{} \OR
+ \NOT\equal{\LWR@igxscale}{1} \OR
+ \NOT\equal{\LWR@igyscale}{1}
+}%
+{%
+ style="\LWR@indentHTML
+ \ifthenelse{\NOT\equal{\LWR@igwidthstyle}{}}%
+ {\LWR@igwidthstyle;\LWR@indentHTML}{}%
+ \ifthenelse{\NOT\equal{\LWR@igheightstyle}{}}%
+ {\LWR@igheightstyle;\LWR@indentHTML}{}%
+ \ifthenelse{\NOT\equal{\LWR@igorigin}{}}%
+ {%
+ transform-origin: \LWR@originnames{\LWR@igorigin};\LWR@indentHTML%
+ }{}%
+ \ifthenelse{\NOT\equal{\LWR@igangle}{}}%
+ {%
+ \LWR@rotstyle{-ms-}{\LWR@igangle}\LWR@indentHTML
+ \LWR@rotstyle{-webkit-}{\LWR@igangle}\LWR@indentHTML
+ \LWR@rotstyle{}{\LWR@igangle }\LWR@indentHTML
+ }{}%
+ \ifthenelse{%
+ \NOT\equal{\LWR@igxscale}{1}\OR%
+ \NOT\equal{\LWR@igyscale}{1}%
+ }%
+ {%
+ \LWR@scalestyle{-ms-}{\LWR@igxscale}{\LWR@igyscale}\LWR@indentHTML
+ \LWR@scalestyle{-webkit-}{\LWR@igxscale}{\LWR@igyscale}\LWR@indentHTML
+ \LWR@scalestyle{}{\LWR@igxscale}{\LWR@igyscale}\LWR@indentHTML
+ }{}%
+ %
+ \ifthenelse{\NOT\equal{\LWR@opacity}{1}}%
+ {opacity:\LWR@opacity;\LWR@indentHTML}{}%
+ %
+ "\LWR@indentHTML%
+}{}%
+% \end{macrocode}
+% Set the class and alt tag:
+% \changes{v0.65}{2018/12/19}{\pkg{graphics}: Added \cs{includegraphics} \attribute{alt} key.}
+% \begin{macrocode}
+class="\LWR@igclass"\LWR@indentHTML%
+alt="\LWR@igalt" \LWR@orignewline%
+}% end of image tags
+}% end of href
+% \end{macrocode}
+% Return to original page size and font size:
+% \changes{v0.48}{2018/02/11}{Fix: Virtual page size limited to a group.}
+% \begin{macrocode}
+\endgroup
+\LWR@traceinfo{LWR@includegraphicsb done}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\includegraphics} \oarg{key=val} \marg{filename}
+
+% Handles width and height, converted to fixed width and heights.
+
+% The user should always use no file suffix in the document source.
+
+% \begin{macrocode}
+\AtBeginDocument{
+
+\LWR@traceinfo{Patching includegraphics.}
+
+\LetLtxMacro\LWR@origincludegraphics\includegraphics
+
+\renewcommand*{\includegraphics}
+{%
+% \end{macrocode}
+% This graphic should trigger an \HTML\ paragraph even if alone,
+% so ensure that are doing paragraph handling:
+% \begin{macrocode}
+\LWR@traceinfo{includegraphics}%
+\LWR@ensuredoingapar%
+\LWR@includegraphicsb%
+}% includegraphics
+}% AtBeginDocument
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Boxes}
+
+% \begin{macro}{\LWR@rotboxorigin} Holds the origin key letters.
+% \begin{macrocode}
+\newcommand*{\LWR@rotboxorigin}{}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@originname} \marg{letter}
+%
+% Given one \LaTeX{} origin key value,
+% translate into an \HTML\ origin word:
+% \begin{macrocode}
+\newcommand*{\LWR@originname}[1]{%
+ \ifthenelse{\equal{#1}{t}}{top}{}%
+ \ifthenelse{\equal{#1}{b}}{bottom}{}%
+ \ifthenelse{\equal{#1}{c}}{center}{}%
+ \ifthenelse{\equal{#1}{l}}{left}{}%
+ \ifthenelse{\equal{#1}{r}}{right}{}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@originnames} \marg{letters}
+%
+% Given one- or two-letter \LaTeX{} origin key values,
+% translate into \HTML\ origin words:
+% \begin{macrocode}
+\newcommand*{\LWR@originnames}[1]{%
+\StrChar{#1}{1}[\LWR@strresult]%
+\LWR@originname{\LWR@strresult}
+\StrChar{#1}{2}[\LWR@strresult]%
+\LWR@originname{\LWR@strresult}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% Handle the origin key for \cs{rotatebox}:
+% \begin{macrocode}
+\define@key{krotbox}{origin}{%
+\renewcommand*{\LWR@rotboxorigin}{#1}%
+}
+% \end{macrocode}
+% These keys are ignored:
+% \begin{macrocode}
+\define@key{krotbox}{x}{}
+\define@key{krotbox}{y}{}
+\define@key{krotbox}{units}{}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\rotatebox} \oarg{keyval list} \marg{angle} \marg{text}
+% \changes{v0.57}{2018/05/28}{Improved print/\HTML\ output selection.}
+% \begin{macrocode}
+\AtBeginDocument{
+% \end{macrocode}
+%
+% The \HTML\ version:
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@rotatebox}{O{} m +m}{%
+% \end{macrocode}
+% Reset the origin to ``none-given'':
+% \begin{macrocode}
+\renewcommand*{\LWR@rotboxorigin}{}
+% \end{macrocode}
+% Process the optional keys, which may set \cs{LWR@rotateboxorigin}:
+% \begin{macrocode}
+\setkeys{krotbox}{#1}%
+% \end{macrocode}
+% Select |inline-block| so that \HTML\ will transform this span:
+% \changes{v0.66}{2019/02/02}{Improved \HTML\ formatting.}
+% \begin{macrocode}
+\LWR@htmltagc{%
+ span\LWR@indentHTML
+ style="\LWR@indentHTML
+ display: inline-block;\LWR@indentHTML
+% \end{macrocode}
+% If an origin was given, translate and print the origin information:
+% \begin{macrocode}
+ \ifthenelse{\NOT\equal{\LWR@rotboxorigin}{}}%
+ {transform-origin: \LWR@originnames{\LWR@rotboxorigin};\LWR@indentHTML}%
+ {}%
+% \end{macrocode}
+% Print the rotation information:
+% \begin{macrocode}
+ \LWR@rotstyle{-ms-}{#2}\LWR@indentHTML
+ \LWR@rotstyle{-webkit-}{#2}\LWR@indentHTML
+ \LWR@rotstyle{}{#2}"\LWR@orignewline%
+}\LWR@orignewline%
+% \end{macrocode}
+% Print the text to be rotated:
+% \begin{macrocode}
+\begin{LWR@nestspan}%
+#3%
+% \end{macrocode}
+% Close the span:
+% \begin{macrocode}
+\LWR@htmltagc{/span}%
+\end{LWR@nestspan}%
+}
+% \end{macrocode}
+%
+% The high-level interface:
+% \begin{macrocode}
+\LWR@formatted{rotatebox}
+
+}% AtBeginDocument
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\scalebox} \marg{h-scale} \oarg{v-scale} \marg{text}
+% \changes{v0.57}{2018/05/28}{Improved print/\HTML\ output selection.}
+% \begin{macrocode}
+\AtBeginDocument{
+% \end{macrocode}
+%
+% The \HTML\ version:
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@scalebox}{m o m}{%
+% \end{macrocode}
+% Select |inline-block| so that \HTML\ will transform this span:
+% \changes{v0.66}{2019/02/02}{Improved \HTML\ formatting.}
+% \begin{macrocode}
+\LWR@htmltagc{%
+ span\LWR@indentHTML
+ style="\LWR@indentHTML
+ display: inline-block;\LWR@indentHTML
+% \end{macrocode}
+% Print the scaling information:
+% \begin{macrocode}
+ \LWR@scalestyle{-ms-}{#1}{\IfNoValueTF{#2}{#1}{#2}}\LWR@indentHTML
+ \LWR@scalestyle{-webkit-}{#1}{\IfNoValueTF{#2}{#1}{#2}}\LWR@indentHTML
+ \LWR@scalestyle{}{#1}{\IfNoValueTF{#2}{#1}{#2}}
+ "\LWR@orignewline
+}\LWR@orignewline%
+% \end{macrocode}
+% Print the text to be scaled:
+% \begin{macrocode}
+\begin{LWR@nestspan}%
+#3%
+% \end{macrocode}
+% Close the span:
+% \begin{macrocode}
+\LWR@htmltagc{/span}%
+\end{LWR@nestspan}%
+}
+% \end{macrocode}
+%
+% The high-level interface:
+% \begin{macrocode}
+\LWR@formatted{scalebox}
+
+}% AtBeginDocument
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\reflectbox} \marg{text}
+% \changes{v0.57}{2018/05/28}{Improved print/\HTML\ output selection.}
+% \begin{macrocode}
+\AtBeginDocument{
+
+\newcommand{\LWR@HTML@reflectbox}[1]{%
+\scalebox{-1}[1]{#1}%
+}% \reflectbox
+
+\LWR@formatted{reflectbox}
+
+}% AtBeginDocument
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \begin{macro}{\resizebox} \marg{h-length} \marg{v-length} \marg{text}
+%
+% Simply prints its text argument.
+%
+% \changes{v0.57}{2018/05/28}{Improved print/\HTML\ output selection.}
+% \begin{macrocode}
+\AtBeginDocument{
+
+\NewDocumentCommand{\LWR@HTML@resizebox}{s m m m}{%
+#4%
+}
+
+\LWR@formatted{resizebox}
+
+}% AtBeginDocument
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%</graphics>
+% \fi
+%
+%
+% \addtocontents{toc}{\protect\setcounter{tocdepth}{0}}
+%
+%
+%
+% \iffalse
+%<*graphicx>
+% \fi
+
+% \part{lwarp-graphicx.sty}
+
+% \section{graphicx}
+%
+% \DescribePackage{graphicx}
+% \pkg{graphicx} is emulated.
+%
+% \pkg{graphicx} loads \pkg{graphics}, which also loads \pkg{lwarp-graphics},
+% which remembers the original graphics definitions for use inside a \env{lateximage},
+% and then patches them \cs{AtBeginDocument} for \HTML\ output.
+%
+% \pkg{lwarp-graphics} handles the syntax of either \pkg{graphics} or \pkg{graphicx}.
+%
+% \changes{v0.40}{2017/09/07}{\pkg{graphicx}: Moved out of the \pkg{lwarp} core.}
+%
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{graphicx}[2017/06/01]
+% \end{macrocode}
+
+% \iffalse
+%</graphicx>
+% \fi
+%
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*grffile>
+% \fi
+%
+% \part{lwarp-grffile.sty}
+%
+% \section{grffile}
+%
+% \DescribePackage{grffile}
+% \limitsgrffile
+%
+% \pkg{lwarp-grffile} now exists as a placeholder since \pkg{grffile}
+% used to be emulated by \pkg{lwarp}, and thus older versions of \pkg{lwarp-grffile}
+% may exist and should be overwritten by this newer version.
+%
+% \changes{v0.38}{2017/08/25}{\pkg{grffile}: Added.}
+% \changes{v0.40}{2017/09/25}{\pkg{grffile}: Directly supported.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{grffile}[2017/06/30]
+% \end{macrocode}
+%
+% \iffalse
+%</grffile>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*grid>
+% \fi
+%
+% \part{lwarp-grid.sty}
+%
+% \section{grid}
+%
+% \DescribePackage{grid}
+% \pkg{grid} is ignored.
+%
+% \changes{v0.51}{2018/03/08}{\pkg{grid}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{grid}[2009/06/16]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newenvironment*{gridenv}{}{}
+% \end{macrocode}
+%
+% \iffalse
+%</grid>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*grid-system>
+% \fi
+%
+% \part{lwarp-grid-system.sty}
+%
+% \section{grid-system}
+%
+% \credits{Marcus Bitzl}
+%
+% \DescribePackage{grid-system}
+% \pkg{grid-system} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.60}{2018/09/18}{\pkg{grid-system}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{grid-system}[2014/02/16]
+% \end{macrocode}
+%
+% (\cs{ifdef} is in case the older syntax is removed.)
+%
+% \begin{macrocode}
+\AtBeginEnvironment{Row}{\setlength{\linewidth}{6in}}
+
+\ifdef{\endrow}{
+ \AtBeginEnvironment{row}{\setlength{\linewidth}{6in}}
+}{}
+
+\renewcommand{\gridsystem@finishcell}{\hspace{\gridsystem@cellsep}}
+% \end{macrocode}
+%
+% \iffalse
+%</grid-system>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*gridset>
+% \fi
+%
+% \part{lwarp-gridset.sty}
+%
+% \section{gridset}
+%
+% \DescribePackage{gridset}
+% \pkg{gridset} is ignored.
+%
+% \changes{v0.54}{2018/04/11}{\pkg{gridset}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{gridset}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\gridbase}{}
+\newcommand*{\gridinterval}{}
+\newcommand*{\savepos}[1]{}
+\newcounter{gridcnt}
+\newcommand*{\vskipnextgrid}{}
+\newcommand*{\thegridinfo}[1]{}
+\newcommand*{\theposinfo}[1]{}
+\newcommand*{\theypos}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</gridset>
+% \fi
+%
+%
+%
+% \iffalse
+%<*hang>
+% \fi
+%
+% \part{lwarp-hang.sty}
+%
+% \section{hang}
+%
+% \credits{Andreas Nolda}
+%
+% \DescribePackage{hang}
+% \pkg{hang} is emulated.
+%
+% \changes{v0.44}{2017/11/15}{\pkg{hang}: Added.}
+% \changes{v0.47}{2018/01/26}{\pkg{hang}: Fix: Line wrap at \HTML\ hyphen.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{hang}[2017/02/18]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newlength{\hangingindent}
+\setlength{\hangingindent}{1em}
+\newlength{\hangingleftmargin}
+\setlength{\hangingleftmargin}{0em}
+
+\newcommand*{\LWR@findhangingleftmargin}{%
+\setlength{\LWR@templengthone}{\hangingleftmargin}%
+\addtolength{\LWR@templengthone}{\hangingindent}%
+}
+
+\newenvironment{hangingpar}
+{
+ \LWR@findhangingleftmargin%
+ \BlockClass[%
+ \LWR@print@mbox{margin-left:\LWR@printlength{\LWR@templengthone}} ; %
+ \LWR@print@mbox{text-indent:-\LWR@printlength{\hangingindent}}%
+ ]%
+ {hangingpar}%
+}
+{\endBlockClass}
+
+\newenvironment{hanginglist}
+{%
+ \renewcommand*{\LWR@printcloselist}{\LWR@printcloseitemize}%
+ \renewcommand*{\LWR@printopenlist}{%
+ \LWR@findhangingleftmargin%
+ ul style="%
+ \LWR@print@mbox{list-style-type:none;} % extra space
+ \LWR@print@mbox{%
+ margin-left:\LWR@printlength{\LWR@templengthone}%
+ } ; % extra space
+ \LWR@print@mbox{%
+ text-indent:-\LWR@printlength{\hangingindent}%
+ }%
+ "%
+ }%
+ \let\item\LWR@itemizeitem%
+ \list{}{}%
+}
+{\endlist}
+
+\newenvironment{compacthang}
+{\hanginglist}
+{\endhanginglist}
+
+\newlength{\labeledleftmargin}
+\setlength{\labeledleftmargin}{0em}
+
+\newenvironment{labeledpar}[2]
+{%
+ \BlockClass[%
+ \LWR@findhangingleftmargin%
+ \LWR@print@mbox{margin-left:\LWR@printlength{\LWR@templengthone}} ; %
+ \LWR@print@mbox{text-indent:-\LWR@printlength{\hangingindent}}%
+ ]{labeledpar}#2%
+}
+{\endBlockClass}
+
+\newenvironment{labeledlist}[1]
+{\hanginglist}
+{\endhanginglist}
+
+\newenvironment{compactlabel}[1]
+{\hanginglist}
+{\endhanginglist}
+% \end{macrocode}
+%
+% \iffalse
+%</hang>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*hanging>
+% \fi
+%
+% \part{lwarp-hanging.sty}
+%
+% \section{hanging}
+%
+% \DescribePackage{hanging}
+% \pkg{hanging} is emulated.
+%
+% \changes{v0.45}{2017/12/02}{\pkg{hanging}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{hanging}[2009/09/02]
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\@ifclassloaded{memoir}{
+\let\hangpara\relax
+\let\hangparas\relax
+\let\endhangparas\relax
+\let\hangpunct\relax
+\let\endhangpunct\relax
+}{}
+% \end{macrocode}
+%
+% \begin{noindmacro}{\hangpara} \marg{indent} \marg{afternum}
+%
+% \textred{Use \env{hangparas} instead.}
+% \begin{macrocode}
+\newcommand*{\hangpara}[2]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindenvironment}{hangparas} \marg{indent} \marg{afternum}
+% \changes{v0.47}{2018/01/26}{\pkg{hanging}: Fix: Line wrap at \HTML\ hyphen.}
+% \begin{macrocode}
+\newenvironment*{hangparas}[2]
+{%
+ \BlockClass[%
+ \LWR@print@mbox{margin-left:\LWR@printlength{#1}} ; %
+ \LWR@print@mbox{text-indent:-\LWR@printlength{#1}}%
+ ]%
+ {hangingpar}%
+}
+{\endBlockClass}
+% \end{macrocode}
+% \end{noindenvironment}
+%
+% \begin{noindenvironment}{hangpunct}
+% \begin{macrocode}
+\newenvironment*{hangpunct}
+{\BlockClass{hangpunct}}
+{\endBlockClass}
+% \end{macrocode}
+% \end{noindenvironment}
+%
+% \begin{macrocode}
+\newcommand{\nhpt}{.}
+\newcommand{\nhlq}{‘}
+\newcommand{\nhrq}{’}
+% \end{macrocode}
+%
+% \iffalse
+%</hanging>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*hypbmsec>
+% \fi
+%
+% \part{lwarp-hypbmsec.sty}
+%
+% \section{hypbmsec}
+%
+% \DescribePackage{hypbmsec}
+% \pkg{hypbmsec} is emulated by the \pkg{lwarp} core.
+%
+% \changes{v0.72}{2019/05/28}{\pkg{hypbmsec}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{hypbmsec}[2016/05/16]
+% \end{macrocode}
+%
+%
+% \iffalse
+%</hypbmsec>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*hypcap>
+% \fi
+%
+% \part{lwarp-hypcap.sty}
+%
+% \section{hypcap}
+%
+% \DescribePackage{hypcap}
+% \pkg{hypcap} is ignored.
+%
+% \changes{v0.48}{2018/02/07}{\pkg{hypcap}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{hypcap}[2016/05/16]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\capstart}{}
+\newcommand*{\hypcapspace}{}
+\newcommand*{\hypcapredef}[1]{}
+\newcommand*{\capstartfalse}{}
+\newcommand*{\capstarttrue}{}
+% \end{macrocode}
+%
+% \iffalse
+%</hypcap>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*hypdestopt>
+% \fi
+%
+% \part{lwarp-hypdestopt.sty}
+%
+% \section{hypdestopt}
+%
+% \DescribePackage{hypdestopt}
+% \pkg{hypdestopt} is ignored.
+%
+% \changes{v0.49}{2018/02/15}{\pkg{hypdestopt}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{hypdestopt}[2016/05/21]
+% \end{macrocode}
+%
+% \iffalse
+%</hypdestopt>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*hypernat>
+% \fi
+%
+% \part{lwarp-hypernat.sty}
+%
+% \section{hypernat}
+%
+% \DescribePackage{hypernat}
+% \pkg{hypernat} is ignored.
+%
+% \changes{v0.48}{2018/02/07}{\pkg{hypernat}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{hypernat}[2001/07/09]
+% \end{macrocode}
+%
+% \iffalse
+%</hypernat>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*hyperref>
+% \fi
+
+% \part{lwarp-hyperref.sty}
+
+% \section{hyperref}
+%
+% \credits{Sebastian Rahtz, Heiko Oberdiek}
+%
+% \DescribePackage{hyperref}
+% \pkg{hyperref} is emulated.
+
+% \changes{v0.20}{2017/01/03}{\pkg{hyperref}: Additional user macros.}
+%
+% \codehtml
+% \begin{macrocode}
+% \LWR@ProvidesPackageDrop{hyperref}% not allowed
+% \ProvidesPackage{lwarp-#1-#2}% not allowed
+\PackageInfo{lwarp}{%
+Using the lwarp HTML version of package `hyperref',\MessageBreak
+and discarding options.\MessageBreak
+(Not using \protect\ProvidesPackage, so that other packages\MessageBreak
+do not attempt to patch lwarp's version of `hyperref'.)\MessageBreak}
+
+\DeclareOption*{}
+% \end{macrocode}
+% \changes{v0.68}{2019/02/28}{\pkg{hyperref}: Fix for options with braces.}
+% \begin{macrocode}
+% \ProcessOptions\relax
+\let\ds@\@empty% from the original \ProcessOptions
+\edef\@curroptions{}% lwarp modification to \ProcessOptions
+\@process@ptions\relax% from the original \ProcessOptions
+% \end{macrocode}
+
+% \begin{macrocode}
+\newcommand*{\hypersetup}[1]{}
+\newcommand*{\hyperbaseurl}[1]{}
+% \end{macrocode}
+
+
+
+% \begin{noindmacro}{\hyperimage} \marg{URL} \marg{alt text}
+%
+% Insert an image with alt text:
+%
+% \changes{v0.43}{2017/10/31}{\pkg{hyperref}: Made robust.}
+% \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.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@hyperimageb}{m +m}{%
+\LWR@ensuredoingapar%
+\def\LWR@templink{#1}%
+\@onelevel@sanitize\LWR@templink%
+\LWR@htmltag{img src="\LWR@templink" alt="#2" class="hyperimage"}%
+\LWR@ensuredoingapar%
+\endgroup%
+}
+
+\newrobustcmd*{\hyperimage}{%
+\begingroup%
+\catcode`\#=12%
+\catcode`\%=12%
+\catcode`\&=12%
+\catcode`\~=12%
+\catcode`\_=12%
+\LWR@hyperimageb%
+}
+
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindmacro}{\hyperdef}
+% \marg{1: category} \marg{2: name} \marg{3: text}
+%
+% Creates an \HTML\ anchor to |category.name| with the given text.
+%
+% \changes{v0.52}{2018/03/26}{\pkg{hyperref}: Fix: \progcode{\#}, \progcode{\%}, \progcode{\&}, \progcode{\~}, \progcode{\_} in \URL.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@hyperdefb}{m m +m}{%
+\LWR@ensuredoingapar%
+\LWR@sublabel{#1.#2}%
+#3%
+\endgroup%
+}
+
+\newcommand*{\hyperdef}{%
+\begingroup%
+\catcode`\#=12%
+\catcode`\%=12%
+\catcode`\&=12%
+\catcode`\~=12%
+\catcode`\_=12%
+\LWR@hyperdefb%
+}
+
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindmacro}{\LWR@hyperrefb} \marg{1: URL} \marg{2: category}
+% \marg{3: name} \marg{4: text}
+% \changes{v0.45}{2018/01/02}{\pkg{hyperref}: Fix: Underscore in \URL.}
+% \changes{v0.52}{2018/03/26}{\pkg{hyperref}: Fix: \progcode{\#}, \progcode{\%}, \progcode{\&}, \progcode{\~}, \progcode{\_} in \URL.}
+% \changes{v0.57}{2018/06/05}{\pkg{subcaption}: Fix: \cs{subref}.}
+%
+% Creates an \HTML\ link to |URL#category.name| with the given text.
+% \begin{macrocode}
+\newcommand{\LWR@hyperreffinish}[1]{%
+\begingroup%
+\RenewDocumentCommand{\ref}{}{\LWR@ref@ignorestar}%
+#1%
+\endgroup%
+\LWR@htmltag{/a}%
+}
+
+\newcommand*{\LWR@hyperrefbb}[3]{%
+\LWR@htmltag{%
+ a href="%
+ \detokenize\expandafter{#1}\LWR@hashmark%
+ \detokenize\expandafter{#2}.\detokenize\expandafter{#3}%
+ "%
+}%
+\endgroup%
+\LWR@hyperreffinish%
+}
+
+\newrobustcmd*{\LWR@hyperrefb}{%
+\begingroup%
+\catcode`\#=12%
+\catcode`\%=12%
+\catcode`\&=12%
+\catcode`\~=12%
+\catcode`\_=12%
+\LWR@hyperrefbb%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\LWR@hyperrefc} \oarg{label} \marg{text}
+%
+% Creates text as an \HTML\ link to the \LaTeX\ label.
+% \begin{macrocode}
+
+\NewDocumentCommand{\LWR@hyperrefcb}{O{label}}{%
+\LWR@startref{#1}%
+\endgroup%
+\LWR@hyperreffinish%
+}
+
+\newcommand*{\LWR@hyperrefc}{%
+\begingroup%
+\catcode`\#=12%
+\catcode`\%=12%
+\catcode`\&=12%
+\catcode`\~=12%
+\catcode`\_=12%
+\LWR@hyperrefcb%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\hyperref}
+% \marg{1: URL} \marg{2: category} \marg{3: name} \marg{4: text} \quad ---\,or\,--- \\
+% \oarg{1: label} \marg{2: text}
+%
+% \changes{v0.43}{2017/10/31}{\pkg{hyperref}: Made robust.}
+% \changes{v0.54}{2018/04/19}{\pkg{hyperref}: Fix: \cs{ref} in \cs{hyperref} and \cs{hyperlink} caused nested link.}
+% \changes{v0.54}{2018/04/19}{\pkg{hyperref}: Fix: \cs{hyperref} and \cs{hyperlink} with special chars in text.}
+% \begin{macrocode}
+\DeclareRobustCommand*{\hyperref}{%
+\LWR@ensuredoingapar%
+\@ifnextchar[\LWR@hyperrefc\LWR@hyperrefb%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+
+% \begin{noindmacro}{\hypertarget} \marg{name} \marg{text}
+%
+% Creates an anchor to |name| with the given text.
+%
+% \changes{v0.52}{2018/03/26}{\pkg{hyperref}: Fix: \progcode{\#}, \progcode{\%}, \progcode{\&}, \progcode{\~}, \progcode{\_} in \URL.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@hypertargetb}{m +m}{%
+\label{LWR-ht-#1}%
+#2%
+\endgroup%
+}
+
+\newcommand*{\hypertarget}{%
+\begingroup%
+\catcode`\#=12%
+\catcode`\%=12%
+\catcode`\&=12%
+\catcode`\~=12%
+\catcode`\_=12%
+\LWR@hypertargetb%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\hyperlink} \marg{name} \marg{text}
+%
+% Creates a link to the anchor created by hypertarget,
+% with the given link text.
+%
+% Declared because also defined by \pkg{memoir}.
+%
+% \changes{v0.52}{2018/03/26}{\pkg{hyperref}: Fix: \progcode{\#}, \progcode{\%}, \progcode{\&}, \progcode{\~}, \progcode{\_} in \URL.}
+% \changes{v0.54}{2018/04/19}{\pkg{hyperref}: Fix: \cs{ref} in \cs{hyperref} and \cs{hyperlink} caused nested link.}
+% \changes{v0.54}{2018/04/19}{\pkg{hyperref}: Fix: \cs{hyperref} and \cs{hyperlink} with special chars in text.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\LWR@hyperlinkb}{m}{%
+\LWR@hyperrefcb[LWR-ht-#1]%
+}
+
+\DeclareDocumentCommand{\hyperlink}{}{%
+\LWR@ensuredoingapar%
+\begingroup%
+\catcode`\#=12%
+\catcode`\%=12%
+\catcode`\&=12%
+\catcode`\~=12%
+\catcode`\_=12%
+\LWR@hyperlinkb%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\autoref} * \marg{label}
+%
+% For \HTML, \cs{cleveref} is used instead.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\autoref}{s m}{%
+ \IfBooleanTF{#1}{\ref{#2}}{\cref{#2}}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindmacro}{\autopageref} \marg{label}
+%
+% For \HTML, \cs{cleveref} is used instead.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\autopageref}{s m}{%
+ \IfBooleanTF{#1}{\cpageref{#2}}{\cref{#2}}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+
+% \begin{noindmacro}{\pdfstringdef} \marg{macroname} \marg{\TeX{}string}
+%
+% \begin{macrocode}
+\newcommand{\pdfstringdef}[2]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\pdfbookmark} \oarg{level} \marg{text} \marg{name}
+%
+% \begin{macrocode}
+\newcommand{\pdfbookmark}[3][]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\currentpdfbookmark} \marg{text} \marg{name}
+%
+% \begin{macrocode}
+\newcommand{\currentpdfbookmark}[2]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\subpdfbookmark} \marg{text} \marg{name}
+%
+% \begin{macrocode}
+\newcommand{\subpdfbookmark}[2]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\belowpdfbookmark} \marg{text} \marg{name}
+%
+% \begin{macrocode}
+\newcommand{\belowpdfbookmark}[2]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\texorpdfstring} \marg{\TeX{}string} \marg{PDFstring}
+%
+% \changes{v0.48}{2018/02/02}{\pkg{hyperref}: \cs{texorpdfstring} now uses the \TeX\ string.}
+% \begin{macrocode}
+\newcommand{\texorpdfstring}[2]{#1}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\hypercalcbp} \marg{dimen} \quad
+% From \pkg{hyperref}.
+%
+% \begin{macrocode}
+\def\hypercalcbp#1{%
+\strip@pt\dimexpr 0.99626401\dimexpr(#1)\relax\relax
+}%
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\Acrobatmenu} \marg{menuoption} \marg{text}
+%
+% \begin{macrocode}
+\newcommand{\Acrobatmenu}[2]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\TextField} \oarg{parameters} \marg{label}
+% \changes{v0.43}{2017/10/31}{\pkg{hyperref}: Made robust.}
+%
+% \begin{macrocode}
+\DeclareRobustCommand{\TextField}[2][]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\CheckBox} \oarg{parameters} \marg{label}
+%
+% \begin{macrocode}
+\DeclareRobustCommand{\CheckBox}[2][]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\ChoiceMenu} \oarg{parameters} \marg{label} \marg{choices}
+%
+% \begin{macrocode}
+\DeclareRobustCommand{\ChoiceMenu}[3][]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\PushButton} \oarg{parameters} \marg{label}
+%
+% \begin{macrocode}
+\DeclareRobustCommand{\PushButton}[2][]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\Submit} \oarg{parameters} \marg{label}
+%
+% \begin{macrocode}
+\DeclareRobustCommand{\Submit}[2][]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\Reset} \oarg{parameters} \marg{label}
+%
+% \begin{macrocode}
+\DeclareRobustCommand{\Reset}[2][]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\Gauge} \oarg{parameters} \marg{label}
+%
+% \changes{v0.43}{2017/10/31}{\pkg{hyperref}: \cs{Gauge} added.}
+% \begin{macrocode}
+\DeclareRobustCommand{\Gauge}[2][]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\LayoutTextField} \marg{label} \marg{field}
+%
+% \begin{macrocode}
+\newcommand*{\LayoutTextField}[2]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\LayoutChoiceField} \marg{label} \marg{field}
+%
+% \begin{macrocode}
+\newcommand*{\LayoutChoiceField}[2]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\LayoutCheckField} \marg{label} \marg{field}
+%
+% \begin{macrocode}
+\newcommand*{\LayoutCheckField}[2]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\MakeRadioField} \marg{width} \marg{height}
+%
+% \begin{macrocode}
+\newcommand*{\MakeRadioField}[2]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\MakeCheckField} \marg{width} \marg{height}
+%
+% \begin{macrocode}
+\newcommand*{\MakeCheckField}[2]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\MakeTextField} \marg{width} \marg{height}
+%
+% \begin{macrocode}
+\newcommand*{\MakeTextField}[2]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\MakeChoiceField} \marg{width} \marg{height}
+%
+% \begin{macrocode}
+\newcommand*{\MakeChoiceField}[2]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\MakeFieldButton} \marg{text}
+%
+% \begin{macrocode}
+\newcommand{\MakeFieldButton}[1]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \iffalse
+%</hyperref>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*hyperxmp>
+% \fi
+%
+% \part{lwarp-hyperxmp.sty}
+%
+% \section{hyperxmp}
+%
+% \DescribePackage{hyperxmp} \pkg{hyperxmp} is ignored.
+%
+% \changes{v0.34}{2017/08/03}{\pkg{hyperxmp}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-hyperxmp}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{hyperxmp}[2018/11/27]
+% \end{macrocode}
+%
+%
+% \iffalse
+%</hyperxmp>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*hyphenat>
+% \fi
+%
+% \part{lwarp-hyphenat.sty}
+%
+% \section{hyphenat}
+%
+% \DescribePackage{hyphenat}
+% \pkg{hyphenat} is emulated during \HTML\ output, while
+% the print-mode version is used inside a \env{lateximage}.
+%
+% \changes{v0.49}{2018/02/15}{\pkg{hyphenat}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{hyphenat}[2009/09/02]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LetLtxMacro\LWRHYNAT@origtextnhtt\textnhtt
+\LetLtxMacro\LWRHYNAT@orignhttfamily\nhttfamily
+\LetLtxMacro\LWRHYNAT@orignohyphens\nohyphens
+\LetLtxMacro\LWRHYNAT@origbshyp\bshyp
+\LetLtxMacro\LWRHYNAT@origfshyp\fshyp
+\LetLtxMacro\LWRHYNAT@origdothyp\dothyp
+\LetLtxMacro\LWRHYNAT@origcolonhyp\colonhyp
+\LetLtxMacro\LWRHYNAT@orighyp\hyp
+
+\LetLtxMacro\textnhtt\texttt
+\LetLtxMacro\nhttfamily\ttfamily
+
+\renewcommand{\nohyphens}[1]{#1}
+\renewrobustcmd{\bshyp}{%
+ \ifmmode\backslash\else\textbackslash\fi%
+}
+\renewrobustcmd{\fshyp}{/}
+\renewrobustcmd{\dothyp}{.}
+\renewrobustcmd{\colonhyp}{:}
+\renewrobustcmd{\hyp}{-}
+
+\appto\LWR@restoreorigformatting{%
+\LetLtxMacro\textnhtt\LWRHYNAT@origtextnhtt%
+\LetLtxMacro\nhttfamily\LWRHYNAT@orignhttfamily%
+\LetLtxMacro\nohyphens\LWRHYNAT@orignohyphens%
+\LetLtxMacro\bshyp\LWRHYNAT@origbshyp%
+\LetLtxMacro\fshyp\LWRHYNAT@origfshyp%
+\LetLtxMacro\dothyp\LWRHYNAT@origdothyp%
+\LetLtxMacro\colonhyp\LWRHYNAT@origcolonhyp%
+\LetLtxMacro\hyp\LWRHYNAT@orighyp%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</hyphenat>
+% \fi
+%
+%
+% \iffalse
+%<*idxlayout>
+% \fi
+%
+% \part{lwarp-idxlayout.sty}
+%
+% \section{idxlayout}
+%
+% \credits{Thomas Titz}
+%
+% \DescribePackage{idxlayout} \pkg{idxlayout} is emulated.
+%
+% \changes{v0.34}{2017/07/27}{\pkg{idxlayout}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-idxlayout}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{idxlayout}[2012/03/30]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\LWR@indexprenote}{}
+
+\preto\printindex{
+
+\LWR@orignewpage
+\LWR@startpars
+
+\LWR@indexprenote
+
+}
+
+\newcommand{\setindexprenote}[1]{\renewcommand{\LWR@indexprenote}{#1}}
+\newcommand*{\noindexprenote}{\renewcommand{\LWR@indexprenote}{}}
+
+\newcommand{\idxlayout}[1]{}
+\newcommand*{\indexfont}{}
+\newcommand*{\indexjustific}{}
+\newcommand*{\indexsubsdelim}{}
+\newcommand*{\indexstheadcase}{}
+% \end{macrocode}
+%
+% \iffalse
+%</idxlayout>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*ifoddpage>
+% \fi
+
+% \part{lwarp-ifoddpage.sty}
+
+% \section{ifoddpage}
+%
+% \credits{Martin Scharrer}
+%
+% \DescribePackage{ifoddpage}
+% \pkg{ifoddpage} is emulated.
+%
+% \changes{v0.44}{2017/11/13}{\pkg{ifoddpage}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-ifoddpage}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{ifoddpage}[2016/04/23]
+% \end{macrocode}
+
+% \begin{macrocode}
+\newif\ifoddpage
+
+\newif\ifoddpageoroneside
+
+\DeclareRobustCommand{\checkoddpage}{\oddpagetrue\oddpageoronesidetrue}
+
+\def\oddpage@page{1}
+
+\def\@ifoddpage{%
+ \expandafter\@firstoftwo
+}
+
+\def\@ifoddpageoroneside{%
+ \expandafter\@firstoftwo
+}
+% \end{macrocode}
+
+% \iffalse
+%</ifoddpage>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*imakeidx>
+% \fi
+%
+% \part{lwarp-imakeidx.sty}
+%
+% \section{imakeidx}
+% \label{sec:imakeidx}
+%
+% \credits{Enrico Gregorio}
+%
+% \DescribePackage{imakeidx}
+% \pkg{imakeidx} is patched for use by \pkg{lwarp}.
+%
+% \limitsimakeidx
+%
+% \changes{v0.58}{2018/06/13}{\pkg{imakeidx}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{imakeidx}[2016/10/15]
+% \end{macrocode}
+%
+% Use the new \HTML\ suffix:
+% \begin{macrocode}
+\catcode`\_=12%
+\define@key{imki}{name}{\def\imki@name{#1_html}}
+\catcode`\_=8%
+% \end{macrocode}
+%
+% \begin{noindmacro}{\printindex}
+% The \HTML\ version of \cs{printindex}:
+% \begin{macrocode}
+\catcode`\_=12%
+
+\renewcommand*{\printindex}[1][\imki@jobname]{%
+\LWR@orignewpage%
+\LWR@startpars%
+\ifstrequal{#1}{\imki@jobname}{%
+ \@ifundefined{#1@idxfile}{%
+ \imki@error{#1}%
+ }{%
+ \imki@putindex{#1}%
+ }%
+}{%
+ \@ifundefined{#1_html@idxfile}{\imki@error{#1_html}}{\imki@putindex{#1_html}}%
+}%
+}
+
+\catcode`\_=8%
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\@index}
+% The \HTML\ version of \cs{\@index}:
+% \begin{macrocode}
+\catcode`\_=12%
+
+\def\@index[#1]{%
+ \ifstrequal{#1}{\imki@jobname}%
+ {%
+ \@ifundefined{#1@idxfile}%
+ {%
+ \PackageWarning{lwarp-imakeidx}{Undefined index file `#1'}%
+ \begingroup
+ \@sanitize
+ \imki@nowrindex%
+ }%
+ {%
+ \edef\@idxfile{#1}%
+ \begingroup
+ \@sanitize
+ \@wrindex\@idxfile%
+ }%
+ }%
+ {%
+ \@ifundefined{#1_html@idxfile}%
+ {%
+ \PackageWarning{lwarp-imakeidx}{Undefined index file `#1_html'}%
+ \begingroup
+ \@sanitize
+ \imki@nowrindex%
+ }%
+ {%
+ \edef\@idxfile{#1_html}%
+ \begingroup
+ \@sanitize
+ \@wrindex\@idxfile%
+ }%
+ }%
+}
+
+\catcode`\_=8%
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\item}
+% \begin{noindmacro}{\subitem}
+% \begin{noindmacro}{\subsubitem}
+% \HTML\ versions of \cs{item}, etc.:
+% \begin{macrocode}
+\appto\theindex{%
+ \let\item\LWR@indexitem%
+ \let\subitem\LWR@indexsubitem%
+ \let\subsubitem\LWR@indexsubsubitem%
+}
+% \end{macrocode}
+% \end{noindmacro}
+% \end{noindmacro}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\imki@wrindexentrysplit} \marg{file} \marg{entry} \marg{page}
+% \begin{noindmacro}{\imki@wrindexentryunique} \marg{file} \marg{entry} \marg{page}
+%
+% While writing index entries, adds an \HTML\ label, and
+% writes the label's index instead of the page number:
+% \begin{macrocode}
+\renewcommand\imki@wrindexentrysplit[3]{%
+\addtocounter{LWR@autoindex}{1}%
+\LWR@new@label{LWRindex-\arabic{LWR@autoindex}}%
+ \expandafter\protected@write\csname#1@idxfile\endcsname{}%
+ {\string\indexentry{#2}{\arabic{LWR@autoindex}}}%
+}
+
+\renewcommand\imki@wrindexentryunique[3]{%
+\addtocounter{LWR@autoindex}{1}%
+\LWR@new@label{LWRindex-\arabic{LWR@autoindex}}%
+ \protected@write\@indexfile{}%
+ {\string\indexentry[#1]{#2}{\arabic{LWR@autoindex}}}%
+}
+
+\def\imki@wrindexsplit#1#2{%
+\imki@wrindexentrysplit{#1}{#2}{\thepage}%
+\endgroup\imki@showidxentry{#1}{#2}%
+ \@esphack%
+}
+
+\def\imki@wrindexunique#1#2{%
+\imki@wrindexentryunique{#1}{#2}{\thepage}%
+\endgroup\imki@showidxentry{#1}{#2}%
+ \@esphack%
+ }
+
+% \end{macrocode}
+% \end{noindmacro}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\LWR@imki@setxdydefopts}
+%
+% Sets the \pkg{xindy} \HTML\ options, ignoring the user's settings.
+% \begin{macrocode}
+\newcommand*{\LWR@imki@setxdydefopts}{%
+ \edef\imki@options{ \space %
+ -M \space \LWR@xindyStyle\space %
+ -L \space \LWR@xindyLanguage\space %
+ -C \space \LWR@xindyCodepage\space %
+ }%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\LWR@imki@setdefopts} \marg{user options}
+%
+% Sets the \HTML\ options, added to the user's settings,
+% depending on whether \pkg{makeindex} or \pkg{xindy} are used.
+%
+% For \prog{makeindex}, the user's choice is ignored, and only the \pkg{lwarp}
+% version is used. (Only one style at a time is possible.)
+%
+% For \prog{xindy}, multiple modules may be specified, and the \pkg{lwarp}
+% version is appended.
+% \begin{macrocode}
+\newcommand*{\LWR@imki@setdefopts}[1]{%
+\ifblank{#1}{%
+ \edef\imki@options{\space -s \space \LWR@makeindexStyle \space}%
+ \ifdefstring{\imki@progdefault}{xindy}{\LWR@imki@setxdydefopts}{}%
+ \ifdefstring{\imki@progdefault}{texindy}{\LWR@imki@setxdydefopts}{}%
+ \ifdefstring{\imki@progdefault}{truexindy}{\LWR@imki@setxdydefopts}{}%
+}{%
+ \edef\imki@options{\space #1 \space}%
+}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\imki@makeindex}
+% Use the new \HTML\ options:
+% \begin{macrocode}
+\xpatchcmd{\imki@makeindex}
+ {\let\imki@options\space}
+ {\LWR@imki@setdefopts{}}%
+ {}
+ {\LWR@patcherror{imakeidx}{makeindex}}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% Use the new \HTML\ options.
+% \begin{macrocode}
+\define@key{imki}{options}{\LWR@imki@setdefopts{#1}}
+% \end{macrocode}
+%
+% \begin{noindmacro}{\imki@resetdefaults}
+% Use the new \HTML\ options:
+% \begin{macrocode}
+\xpatchcmd{\imki@resetdefaults}
+ {\def\imki@options{ }}
+ {\LWR@imki@setdefopts{}}
+ {}
+ {\LWR@patcherror{imakeidx}{resetdefaults}}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \env{theindex} was already defined \cs{AtBeginDocument} by the \pkg{lwarp} core,
+% so it must be redefined here similarly, but patched for \pkg{imakeidx}:
+% \begin{noindenvironment}{theindex}
+% \begin{macrocode}
+\AtBeginDocument{
+\renewenvironment*{theindex}{%
+ \imki@maybeaddtotoc
+ \imki@indexlevel{\indexname}
+ \let\item\LWR@indexitem%
+ \let\subitem\LWR@indexsubitem%
+ \let\subsubitem\LWR@indexsubsubitem%
+}{}
+}% AtBeginDocument
+% \end{macrocode}
+% \end{noindenvironment}
+%
+%
+% Update to the new defaults:
+% \begin{macrocode}
+\imki@resetdefaults
+% \end{macrocode}
+%
+% Update to the new patches:
+%
+% \cs{AtBeginDocument} is because \cs{@wrindex} is previously defined
+% as \cs{AtBeginDocument} in the \pkg{lwarp} core.
+%
+% \begin{macrocode}
+\ifimki@splitindex
+ \let\imki@startidx\imki@startidxunique
+ \AtBeginDocument{\let\@wrindex\imki@wrindexunique}
+ \let\imki@putindex\imki@putindexunique
+ \let\imki@wrindexentry\imki@wrindexentryunique
+ \let\imki@startidxsplit\@undefined
+ \let\imki@wrindexsplit\@undefined
+ \let\imki@putindexsplit\@undefined
+\else
+ \let\imki@startidx\imki@startidxsplit
+ \AtBeginDocument{\let\@wrindex\imki@wrindexsplit}
+ \let\imki@putindex\imki@putindexsplit
+ \let\imki@wrindexentry\imki@wrindexentrysplit
+ \let\imki@startidxunique\@undefined
+ \let\imki@wrindexunique\@undefined
+ \let\imki@putindexunique\@undefined
+\fi
+% \end{macrocode}
+%
+% \iffalse
+%</imakeidx>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*index>
+% \fi
+%
+% \part{lwarp-index.sty}
+%
+% \section{index}
+% \label{sec:indexpkg}
+%
+% \credits{David M. Jones}
+%
+% \DescribePackage{index}
+% \pkg{index} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.58}{2018/07/06}{\pkg{index}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{index}[2004/01/20]
+% \end{macrocode}
+%
+% Use \cs{theLWR@autoindex} instead of \cs{thepage}.
+% \cs{@tempswatrue} is used to force an immediate write to the index file
+% instead of waiting until the end of the page.
+% \begin{macrocode}
+\xpatchcmd{\newindex}
+ {\x@newindex[thepage]}
+ {%
+ \@tempswatrue%
+ \x@newindex[theLWR@autoindex]%
+ }
+ {}
+ {\LWR@patcherror{index}{newindex}}
+
+\xpatchcmd{\renewindex}
+ {\x@renewindex[thepage]}
+ {%
+ \@tempswatrue%
+ \x@renewindex[theLWR@autoindex]%
+ }
+ {}
+ {\LWR@patcherror{index}{renewindex}}
+% \end{macrocode}
+%
+% Patched to set a new autoindex:
+% \begin{macrocode}
+\xpatchcmd{\@wrindex}
+ {\begingroup}
+ {%
+ \addtocounter{LWR@autoindex}{1}% lwarp
+ \LWR@new@label{LWRindex-\arabic{LWR@autoindex}}% lwarp
+ \begingroup%
+ }
+ {}
+ {\LWR@patcherror{index}{@wrindex}}
+% \end{macrocode}
+%
+% \cs{AtBeginDocument} \pkg{lwarp} core \cs{let}s \cs{@wrindex} to \cs{LWR@wrindex}.
+% Since the \pkg{index} package has been loaded, \cs{let} to its version instead:
+% \begin{macrocode}
+\let\LWR@index@wrindex\@wrindex
+
+\AtBeginDocument{
+\let\@wrindex\LWR@index@wrindex
+}
+% \end{macrocode}
+%
+% Modified to add \cs{index@prologue}:
+% \begin{macrocode}
+\AtBeginDocument{
+\renewenvironment*{theindex}{%
+ \LWR@indexsection{\indexname}%
+ \ifx\index@prologue\@empty\else
+ \index@prologue
+ \bigskip
+ \fi
+ \let\item\LWR@indexitem%
+ \let\subitem\LWR@indexsubitem%
+ \let\subsubitem\LWR@indexsubsubitem%
+}{}
+}% AtBeginDocument
+% \end{macrocode}
+%
+%
+% Disabled:
+% \begin{macrocode}
+\def\@showidx#1{}
+\let\@texttop\relax
+\renewcommand*{\raggedbottom}{}
+\renewcommand*{\flushbottom}{}
+\renewcommand*{\markboth}[2]{}
+\renewcommand*{\markright}[1]{}
+% \end{macrocode}
+
+%
+% \iffalse
+%</index>
+% \fi
+%
+%
+%
+% \iffalse
+%<*inputtrc>
+% \fi
+%
+% \part{lwarp-inputtrc.sty}
+%
+% \section{inputtrc}
+%
+% \credits{Uwe L\"uck}
+%
+% \DescribePackage{inputtrc}
+% \pkg{inputtrc} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.70}{2019/03/30}{\pkg{inputtrc}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{inputtrc}[2012/10/10]
+% \end{macrocode}
+%
+% Patched to remove extraneous spaces,
+% which sometimes showed up in logos inside a \env{lateximage}.
+% \begin{macrocode}
+\renewcommand*{\IT@prim@input}[1]{%
+ \typeout{\IT@indent\IT@currfile INPUTTING #1}%
+%% ... TODO: option to write to `.log' only.
+ \xdef\IT@filestack{{\IT@currfile}\IT@filestack}%
+ \xdef\IT@currfile{#1}%
+ \expandafter \gdef\expandafter \IT@indent\expandafter{%
+ \IT@indent \IT@indent@unit}% lwarp
+ \@@input#1% lwarp
+ \expandafter\IT@pop@indent\IT@indent \@nil% lwarp
+ \expandafter\IT@pop@file \IT@filestack\@nil% lwarp
+ \IT@maybe@returnmessage%% v0.2 lwarp
+}
+% \end{macrocode}
+%
+% \iffalse
+%</inputtrc>
+% \fi
+%
+%
+%
+% \iffalse
+%<*intopdf>
+% \fi
+%
+% \part{lwarp-intopdf.sty}
+%
+% \section{intopdf}
+%
+% \DescribePackage{intopdf}
+% \pkg{intopdf} is emulated.
+%
+% \changes{v0.58}{2018/06/08}{\pkg{intopdf}: Added.}
+% \changes{v0.73}{2019/06/09}{\pkg{intopdf}: Updated to v0.2.1.}
+%
+% The filespec, MIME type, and description are ignored for now.
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{intopdf}[2019/05/28]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand{\attachandlink}{o m o m m}{%
+ \href{#2}{#5}%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</intopdf>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*karnaugh-map>
+% \fi
+%
+% \part{lwarp-karnaugh-map.sty}
+%
+% \section{karnaugh-map}
+%
+% \credits{Mattias Jacobsson}
+%
+% \DescribePackage{karnaugh-map}
+% \pkg{karnaugh-map} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.67}{2019/02/17}{\pkg{karnaugh-map}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{karnaugh-map}[2017/02/20]
+% \end{macrocode}
+%
+% (It is hard to patch this macro, so the entire thing is redefined here,
+% with the \pkg{lwarp} modificaitions identified in comments.)
+%
+% \begin{macrocode}
+\RenewDocumentEnvironment{karnaugh-map}{s O{4} O{4} O{1} O{$X_1X_0$} O{$X_3X_2$} O{$X_5X_4$}} {%
+ \begingroup
+ % store map size {[START]
+ \renewcommand{\@karnaughmap@var@mapsizex@}{#2}%
+ \renewcommand{\@karnaughmap@var@mapsizey@}{#3}%
+ \renewcommand{\@karnaughmap@var@mapsizez@}{#4}%
+ % [END]}
+ % determinate if markings should be color or black and white
+ \IfBooleanTF{#1}{%
+ % should be black and white
+ \renewcommand{\@karnaughmap@var@bw@}{1}%
+ }{%
+ % should be color
+ \renewcommand{\@karnaughmap@var@bw@}{0}%
+ }%
+ %
+ % find matching matrix template and alignment parameters {[START]
+ \newcommand{\@karnaughmap@local@matrixtemplate@}{0}% '0' is considered as missing matrix template
+ \newcommand{\@karnaughmap@local@maprealignmentx@}{0}%
+ \newcommand{\@karnaughmap@local@maprealignmenty@}{0}%
+ \ifnum\@karnaughmap@var@mapsizex@\@karnaughmap@var@mapsizey@\@karnaughmap@var@mapsizez@=221
+ \renewcommand{\@karnaughmap@local@matrixtemplate@}{%
+ \& 0 \& 1 \& \phantom{0} \\
+ 0 \& |(000000)| \phantom{0} \& |(000001)| \phantom{0} \& \\
+ 1 \& |(000010)| \phantom{0} \& |(000011)| \phantom{0} \& \\
+ \phantom{0} \& \& \& \\
+ }%
+ \fi
+ \ifnum\@karnaughmap@var@mapsizex@\@karnaughmap@var@mapsizey@\@karnaughmap@var@mapsizez@=241
+ \renewcommand{\@karnaughmap@local@matrixtemplate@}{%
+ \& 0 \& 1 \& \phantom{00} \\
+ 00 \& |(000000)| \phantom{0} \& |(000001)| \phantom{0} \& \\
+ 01 \& |(000010)| \phantom{0} \& |(000011)| \phantom{0} \& \\
+ 11 \& |(000110)| \phantom{0} \& |(000111)| \phantom{0} \& \\
+ 10 \& |(000100)| \phantom{0} \& |(000101)| \phantom{0} \& \\
+ \phantom{00} \& \& \& \\
+ }%
+ \fi
+ \ifnum\@karnaughmap@var@mapsizex@\@karnaughmap@var@mapsizey@\@karnaughmap@var@mapsizez@=421
+ \renewcommand{\@karnaughmap@local@matrixtemplate@}{%
+ \& 00 \& 01 \& 11 \& 10 \& \phantom{00} \\
+ 0 \& |(000000)| \phantom{0} \& |(000001)| \phantom{0} \& |(000011)| \phantom{0} \& |(000010)| \phantom{0} \& \\
+ 1 \& |(000100)| \phantom{0} \& |(000101)| \phantom{0} \& |(000111)| \phantom{0} \& |(000110)| \phantom{0} \& \\
+ \phantom{00} \& \& \& \& \& \\
+ }%
+ \fi
+ \ifnum\@karnaughmap@var@mapsizex@\@karnaughmap@var@mapsizey@\@karnaughmap@var@mapsizez@=441
+ \renewcommand{\@karnaughmap@local@matrixtemplate@}{%
+ \& 00 \& 01 \& 11 \& 10 \& \phantom{00} \\
+ 00 \& |(000000)| \phantom{0} \& |(000001)| \phantom{0} \& |(000011)| \phantom{0} \& |(000010)| \phantom{0} \& \\
+ 01 \& |(000100)| \phantom{0} \& |(000101)| \phantom{0} \& |(000111)| \phantom{0} \& |(000110)| \phantom{0} \& \\
+ 11 \& |(001100)| \phantom{0} \& |(001101)| \phantom{0} \& |(001111)| \phantom{0} \& |(001110)| \phantom{0} \& \\
+ 10 \& |(001000)| \phantom{0} \& |(001001)| \phantom{0} \& |(001011)| \phantom{0} \& |(001010)| \phantom{0} \& \\
+ \phantom{00} \& \& \& \& \& \\
+ }%
+ \fi
+ \ifnum\@karnaughmap@var@mapsizex@\@karnaughmap@var@mapsizey@\@karnaughmap@var@mapsizez@=442
+ \renewcommand{\@karnaughmap@local@matrixtemplate@}{%
+ \& 00 \& 01 \& 11 \& 10 \& \phantom{00} \& 00 \& 01 \& 11 \& 10 \& \phantom{00} \\
+ 00 \& |(000000)| \phantom{0} \& |(000001)| \phantom{0} \& |(000011)| \phantom{0} \& |(000010)| \phantom{0} \& \& |(010000)| \phantom{0} \& |(010001)| \phantom{0} \& |(010011)| \phantom{0} \& |(010010)| \phantom{0} \& \\
+ 01 \& |(000100)| \phantom{0} \& |(000101)| \phantom{0} \& |(000111)| \phantom{0} \& |(000110)| \phantom{0} \& \& |(010100)| \phantom{0} \& |(010101)| \phantom{0} \& |(010111)| \phantom{0} \& |(010110)| \phantom{0} \& \\
+ 11 \& |(001100)| \phantom{0} \& |(001101)| \phantom{0} \& |(001111)| \phantom{0} \& |(001110)| \phantom{0} \& \& |(011100)| \phantom{0} \& |(011101)| \phantom{0} \& |(011111)| \phantom{0} \& |(011110)| \phantom{0} \& \\
+ 10 \& |(001000)| \phantom{0} \& |(001001)| \phantom{0} \& |(001011)| \phantom{0} \& |(001010)| \phantom{0} \& \& |(011000)| \phantom{0} \& |(011001)| \phantom{0} \& |(011011)| \phantom{0} \& |(011010)| \phantom{0} \& \\
+ \phantom{00} \& \& \& \& \& \& \& \& \& \& \\
+ }%
+ \renewcommand{\@karnaughmap@local@maprealignmentx@}{2.5}%
+ \fi
+ \ifnum\@karnaughmap@var@mapsizex@\@karnaughmap@var@mapsizey@\@karnaughmap@var@mapsizez@=444
+ \renewcommand{\@karnaughmap@local@matrixtemplate@}{%
+ \& 00 \& 01 \& 11 \& 10 \& \phantom{00} \& 00 \& 01 \& 11 \& 10 \& \phantom{00} \\
+ 00 \& |(000000)| \phantom{0} \& |(000001)| \phantom{0} \& |(000011)| \phantom{0} \& |(000010)| \phantom{0} \& \& |(010000)| \phantom{0} \& |(010001)| \phantom{0} \& |(010011)| \phantom{0} \& |(010010)| \phantom{0} \& \\
+ 01 \& |(000100)| \phantom{0} \& |(000101)| \phantom{0} \& |(000111)| \phantom{0} \& |(000110)| \phantom{0} \& \& |(010100)| \phantom{0} \& |(010101)| \phantom{0} \& |(010111)| \phantom{0} \& |(010110)| \phantom{0} \& \\
+ 11 \& |(001100)| \phantom{0} \& |(001101)| \phantom{0} \& |(001111)| \phantom{0} \& |(001110)| \phantom{0} \& \& |(011100)| \phantom{0} \& |(011101)| \phantom{0} \& |(011111)| \phantom{0} \& |(011110)| \phantom{0} \& \\
+ 10 \& |(001000)| \phantom{0} \& |(001001)| \phantom{0} \& |(001011)| \phantom{0} \& |(001010)| \phantom{0} \& \& |(011000)| \phantom{0} \& |(011001)| \phantom{0} \& |(011011)| \phantom{0} \& |(011010)| \phantom{0} \& \\
+ \phantom{00} \& \& \& \& \& \& \& \& \& \& \\
+ 00 \& |(100000)| \phantom{0} \& |(100001)| \phantom{0} \& |(100011)| \phantom{0} \& |(100010)| \phantom{0} \& \& |(110000)| \phantom{0} \& |(110001)| \phantom{0} \& |(110011)| \phantom{0} \& |(110010)| \phantom{0} \& \\
+ 01 \& |(100100)| \phantom{0} \& |(100101)| \phantom{0} \& |(100111)| \phantom{0} \& |(100110)| \phantom{0} \& \& |(110100)| \phantom{0} \& |(110101)| \phantom{0} \& |(110111)| \phantom{0} \& |(110110)| \phantom{0} \& \\
+ 11 \& |(101100)| \phantom{0} \& |(101101)| \phantom{0} \& |(101111)| \phantom{0} \& |(101110)| \phantom{0} \& \& |(111100)| \phantom{0} \& |(111101)| \phantom{0} \& |(111111)| \phantom{0} \& |(111110)| \phantom{0} \& \\
+ 10 \& |(101000)| \phantom{0} \& |(101001)| \phantom{0} \& |(101011)| \phantom{0} \& |(101010)| \phantom{0} \& \& |(111000)| \phantom{0} \& |(111001)| \phantom{0} \& |(111011)| \phantom{0} \& |(111010)| \phantom{0} \& \\
+ \phantom{00} \& \& \& \& \& \& \& \& \& \& \\
+ }%
+ \renewcommand{\@karnaughmap@local@maprealignmentx@}{2.5}%
+ \renewcommand{\@karnaughmap@local@maprealignmenty@}{-2.5}%
+ \fi
+ % [END]}
+ % test if a matrix template is found or not(aka "\@karnaughmap@local@matrixtemplate@" equals to '0')
+ \ifdefstring{\@karnaughmap@local@matrixtemplate@}{0}{% lwarp
+% \ifnum0=\@karnaughmap@local@matrixtemplate@% original
+ % print error if no template could be found
+ \PackageError{lwarp-karnaugh-map}{%
+ Can not find a template fitting your specification (\@karnaughmap@var@mapsizex@\space x \@karnaughmap@var@mapsizey@\space x \@karnaughmap@var@mapsizez@)%
+ }{%
+ Existing templates have the following dimensions: 2x2x1, 2x4x1, 4x2x1, 4x4x1, 4x4x2, and 4x4x4.
+ }%
+% \fi original
+ }{}% lwarp
+ \begin{tikzpicture}
+ % grid
+ % for all dimensions
+ \draw[color=black, ultra thin] (0,0) grid (\@karnaughmap@var@mapsizex@,\@karnaughmap@var@mapsizey@);
+ % when there are 2 sub maps
+ \ifnum\@karnaughmap@var@mapsizez@=2
+ \draw[color=black, ultra thin] (5,0) grid (9,4);
+ \fi
+ % when there are 4 sub maps
+ \ifnum\@karnaughmap@var@mapsizez@=4
+ \draw[color=black, ultra thin] (5,0) grid (9,4);
+ \draw[color=black, ultra thin] (0,-5) grid (4,-1);
+ \draw[color=black, ultra thin] (5,-5) grid (9,-1);
+ \fi
+ % labels
+ % for all dimensions
+ \node[above] at (\@karnaughmap@var@mapsizex@*0.5,\@karnaughmap@var@mapsizey@+0.9) {\small{#5}};
+ \node[left] at (-0.9,\@karnaughmap@var@mapsizey@*0.5) {\small{#6}};
+ % when there are 2 sub maps
+ \ifnum\@karnaughmap@var@mapsizez@=2
+ \node[above] at (7,4.9) {\small{#5}};
+ % extra sub maps labels
+ \node[below] at (2,-0.1) {\small{#7$=0$}};
+ \node[below] at (7,-0.1) {\small{#7$=1$}};
+ \fi
+ % when there are 4 sub maps
+ \ifnum\@karnaughmap@var@mapsizez@=4
+ \node[above] at (7,4.9) {\small{#5}};
+ \node[left] at (-0.9,-3) {\small{#6}};
+ % extra sub maps labels
+ \node[below] at (2,-0.1) {\small{#7$=00$}};
+ \node[below] at (7,-0.1) {\small{#7$=01$}};
+ \node[below] at (2,-5.1) {\small{#7$=10$}};
+ \node[below] at (7,-5.1) {\small{#7$=11$}};
+ \fi
+ % data
+ \matrix[
+ matrix of nodes,
+ ampersand replacement=\&,
+ column sep={1cm,between origins},
+ row sep={1cm,between origins},
+ ] at (\@karnaughmap@var@mapsizex@*0.5+\@karnaughmap@local@maprealignmentx@,\@karnaughmap@var@mapsizey@*0.5+\@karnaughmap@local@maprealignmenty@) {
+ \@karnaughmap@local@matrixtemplate@%
+ };
+}{
+ \end{tikzpicture}
+ \endgroup
+}
+% \end{macrocode}
+%
+% \iffalse
+%</karnaugh-map>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*keyfloat>
+% \fi
+
+% \part{lwarp-keyfloat.sty}
+
+% \section{keyfloat}
+% \label{sec:keyfloat}
+%
+% \credits{Brian Dunn}
+%
+% \DescribePackage{keyfloat}
+% \pkg{keyfloat} is supported with a considerable amount of hacking.
+% (It's a mashup of \pkg{lwarp}, \pkg{keyfloat}, and \pkg{tocdata}.)
+%
+% \limitskeyfloat
+%
+% \changes{v0.20}{2017/01/16}{\pkg{keyfloat}: Added.}
+% \changes{v0.31}{2017/05/12}{\pkg{keyfloat}: Improved compatibility.}
+% \changes{v0.69}{2019/03/20}{\pkg{keyfloat}: Updated for v2.00.}
+%
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{keyfloat}[2019/03/21]
+
+\@ifpackagelater{keyfloat}{2019/03/21}{}{
+ \PackageError{lwarp-keyfloat}
+ {%
+ The keyfloat package is out of date.\MessageBreak
+ Update to keyfloat v2.00 2019/03/21 or later%
+ }
+ {%
+ Please update the keyfloat package. It's worth it!%
+ }
+}
+% \end{macrocode}
+
+% After \pkg{keyfloat} has loaded:
+% \begin{macrocode}
+\AtBeginDocument{
+% \end{macrocode}
+%
+% \begin{macrocode}
+\providecommand*{\KFLT@LWR@hook@boxouter}{}
+\renewcommand*{\KFLT@LWR@hook@boxouter}{%
+ \ifbool{KFLT@keywrap}{}{%
+ \ifnumequal{\value{KFLT@keyfloatdepth}}{0}{%
+ \setlength{\linewidth}{6in}%
+ \setlength{\textwidth}{6in}%
+ \setlength{\textheight}{9in}%
+ }{}%
+ }%
+}
+
+\let\KFLT@LWR@hook@boxouter@minipage\relax
+\let\endKFLT@LWR@hook@boxouter@minipage\relax
+\newenvironment*{KFLT@LWR@hook@boxouter@minipage}[2][]{}{}
+
+\providecommand*{\KFLT@LWR@hook@keysubfloats}{}
+\renewcommand*{\KFLT@LWR@hook@keysubfloats}{%
+ \ifbool{KFLT@keywrap}{}{%
+ \ifnumequal{\value{KFLT@keyfloatdepth}}{0}{%
+ \setlength{\linewidth}{6in}%
+ \setlength{\textwidth}{6in}%
+ \setlength{\textheight}{9in}%
+ }{}%
+ }%
+}
+
+\let\KFLT@LWR@hook@keyfloatsminipage\relax
+\let\endKFLT@LWR@hook@keyfloatsminipage\relax
+\newenvironment*{KFLT@LWR@hook@keyfloatsminipage}[1]{}{}
+
+\providecommand*{\KFLT@LWR@hook@keyfloats}{}
+\renewcommand*{\KFLT@LWR@hook@keyfloats}{%
+ \ifbool{KFLT@keywrap}{}{%
+ \ifnumequal{\value{KFLT@keyfloatdepth}}{0}{%
+ \setlength{\linewidth}{6in}%
+ \setlength{\textwidth}{6in}%
+ \setlength{\textheight}{9in}%
+ }{}%
+ }%
+}
+
+\renewcommand*{\KFLT@maybeendfloatrow}{%
+ \ifnumless{\value{KFLT@thiscol}}{\value{KFLT@numcols}}%
+ {}% thiscol < numcols
+ {% >=
+ \defcounter{KFLT@thiscol}{0}%
+ }%
+}%
+
+\renewcommand{\KFLT@trackrows}%
+{%
+% \end{macrocode}
+% If are nested inside a keyfloats or a subfloat:
+% \begin{macrocode}
+ \ifboolexpr{%
+ test {\ifnumgreater{\value{KFLT@keyfloatdepth}}{0}} or%
+ bool{KFLT@inkeysubfloats}%
+ }%
+ {% nested
+% \end{macrocode}
+% Tracks row start and end:
+% \begin{macrocode}
+ \KFLT@maybestartfloatrow%
+% \end{macrocode}
+% Possibly fill space between columns:
+% \begin{macrocode}
+ \ifnumgreater{\value{KFLT@thiscol}}{1}%
+ {%
+% \hfill%
+ }%
+ {}%
+ }% nested
+ {}% not nested
+}
+% \end{macrocode}
+%
+% \changes{v0.47}{2018/01/26}{\pkg{keyfloat}: Fix for \SVG\ math in captions.}
+% \begin{macrocode}
+\RenewDocumentCommand{\KFLT@onefigureimage}{m}
+{%
+\LWR@traceinfo{KFLT@onefigureimage}%
+% \begin{lrbox}{\KFLT@envbox}%
+\ifthenelse{\NOT\equal{\KFLT@lw}{}}%
+ {%
+ \KFLT@frame{\includegraphics%
+ [scale=\KFLT@s,width=\KFLT@imagewidth]{#1}}%
+ }%
+ {% not linewidth
+ \ifthenelse{\dimtest{\KFLT@w}{>}{0pt}}%
+ {% width is given
+ \ifthenelse{\dimtest{\KFLT@h}{>}{0pt}}%
+ {% w and h
+ \KFLT@frame{\includegraphics%
+ [scale=\KFLT@s,%
+ width=\KFLT@imagewidth,height=\KFLT@h]{#1}}%
+ }% w and h
+ {% only w
+ \KFLT@frame{\includegraphics%
+ [scale=\KFLT@s,width=\KFLT@imagewidth]{#1}}%
+ }% only w
+ }% width is given
+ {% width is not given
+ \ifthenelse{\dimtest{\KFLT@h}{>}{0pt}}%
+ {%
+ \KFLT@frame{\includegraphics%
+ [scale=\KFLT@s,height=\KFLT@h]{#1}}%
+ }%
+ {%
+ \KFLT@frame{\includegraphics%
+ [scale=\KFLT@s]{#1}}%
+ }%
+ }% width is not given
+ }% not linewidth
+% \end{lrbox}%
+% \unskip%
+% \KFLT@findenvboxwidth%
+% \begin{turn}{\KFLT@r}%
+% \KFLT@frame{\usebox{\KFLT@envbox}}%
+% \unskip%
+% \end{turn}%
+\LWR@traceinfo{KFLT@onefigureimage: done}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\RenewDocumentEnvironment{KFLT@boxinner}{}
+{%
+ \LWR@traceinfo{KFLT@boxinner}%
+ \LWR@stoppars%
+ \minipagefullwidth%
+ \ifboolexpr{bool{KFLT@ft} or bool{KFLT@f}}{
+ \fminipage{\KFLT@imagewidth}%
+ }{%
+ \minipage{\KFLT@imagewidth}%
+ }%
+}
+{%
+ \ifboolexpr{bool{KFLT@ft} or bool{KFLT@f}}{
+ \endfminipage%
+ }{%
+ \endminipage%
+ }%
+ \LWR@startpars%
+ \LWR@traceinfo{KFLT@boxinner: done}%
+}
+% \end{macrocode}
+
+
+% \begin{macrocode}
+\newcommand*{\LWR@KFLT@settextalign}[1]{%
+ \def\LWR@KFLT@textalign{justify}%
+ \ifcsstring{KFLT@#1textalign}{\centering}%
+ {\def\LWR@KFLT@textalign{center}}%
+ {}%
+ \ifcsstring{KFLT@#1textalign}{\raggedleft}%
+ {\def\LWR@KFLT@textalign{right}}%
+ {}%
+ \ifcsstring{KFLT@#1textalign}{\raggedright}%
+ {\def\LWR@KFLT@textalign{left}}%
+ {}%
+}
+
+\renewcommand{\KFLT@addtext}[1]
+{%
+% \end{macrocode}
+% Is there text to add?
+% \begin{macrocode}
+ \ifcsempty{KFLT@#1t}%
+ {}% no text
+ {% text to add
+ {% local
+% \end{macrocode}
+% Add some space, then create a full-width minipage to contain the text:
+% \begin{macrocode}
+ \addvspace{\smallskipamount}%
+ \LWR@KFLT@settextalign{#1}%
+ \begin{BlockClass}[text-align:\LWR@KFLT@textalign]{floatnotes}%
+% \end{macrocode}
+% Set the alignment and some text parameters:
+% \begin{macrocode}
+% \csuse{KFLT@#1textalign}%
+% \footnotesize%
+ \setlength{\parskip}{1.5ex}%
+ \setlength{\parindent}{0em}%
+% \end{macrocode}
+% Typeset the actual text:
+% \begin{macrocode}
+ \csuse{KFLT@#1t}%
+% \end{macrocode}
+% Close it all out with a little more space:
+% \begin{macrocode}
+ \end{BlockClass}%
+% \par\addvspace{2ex}%
+ }% local
+ }% text to add
+}
+
+\@ifpackageloaded{tocdata}
+{}
+{% tocdata not loaded
+
+ \newcommand*{\LWR@KFLT@setnamealign}[1]{%
+ \def\LWR@KFLT@textalign{justify}%
+ \ifstrequal{#1}{\centering}%
+ {\def\LWR@KFLT@textalign{center}}%
+ {}%
+ \ifstrequal{#1}{\raggedleft}%
+ {\def\LWR@KFLT@textalign{right}}%
+ {}%
+ \ifstrequal{#1}{\raggedright}%
+ {\def\LWR@KFLT@textalign{left}}%
+ {}%
+ }
+
+ \renewcommand*{\KFLT@@addartisttext}[3]{%
+ % \end{macrocode}
+ % Add space and create the name inside a full-width minipage:
+ % \begin{macrocode}
+% \addvspace{\medskipamount}%
+ % \begin{minipage}{\linewidth}%
+ \LWR@KFLT@setnamealign{#3}%
+ \begin{BlockClass}[text-align:\LWR@KFLT@textalign]{floatnotes}%
+ % \end{macrocode}
+ % Text alignment is |#3|, and depends on artist or author:
+ % \begin{macrocode}
+ % #3%
+ % \end{macrocode}
+ % |#1| is empty or '|subgrp'| \\
+ % |#2| is empty for artist, `|u|' for author:
+ % \begin{macrocode}
+ \footnotesize\textsc{%
+ \KFLT@optionalname{\csuse{KFLT@#1a#2p}}%
+ \KFLT@optionalname{\csuse{KFLT@#1a#2f}}%
+ \csuse{KFLT@#1a#2l}%
+ \csuse{KFLT@#1a#2s}%
+ }%
+ % \end{minipage}%
+ \end{BlockClass}
+% \par\addvspace{2ex}%
+ }
+
+}% tocdata not loaded
+% \end{macrocode}
+
+
+% \changes{v0.42}{2017/10/26}{\pkg{keyfloat}: If \progcode{FormatWP} add explicit \HTML\ style.}
+% \begin{macrocode}
+\DeclareDocumentEnvironment{KFLT@marginfloat}{O{-1.2ex} m}
+{%
+ \LWR@BlockClassWP{float:right; width:2in; margin:10pt}{}{marginblock}%
+ \captionsetup{type=#2}%
+ \minipage{2in}%
+}
+{%
+ \endminipage%
+ \endLWR@BlockClassWP%
+}
+% \end{macrocode}
+
+
+% \begin{macrocode}
+\DeclareDocumentEnvironment{marginfigure}{o}
+ {\begin{KFLT@marginfloat}{figure}}
+ {\end{KFLT@marginfloat}}
+
+\DeclareDocumentEnvironment{margintable}{o}
+ {\begin{KFLT@marginfloat}{table}}
+ {\end{KFLT@marginfloat}}
+% \end{macrocode}
+
+
+% ^^A % Modified to vertically align minipage for \HTML\ output:
+% \begin{macrocode}
+\DeclareDocumentEnvironment{keywrap}{m +m}
+{%
+ \LWR@ensuredoingapar%
+ \setlength{\linewidth}{6in}%
+ \setlength{\LWR@templengthone}{#1}%
+ \begin{LWR@BlockClassWP}%
+ {%
+ float:right; width:\LWR@printlength{\LWR@templengthone}; % extra space
+ margin:10pt%
+ }%
+ {%
+ width:\LWR@printlength{\LWR@templengthone}%
+ }%
+ {marginblock}%
+ \setlength{\linewidth}{.95\LWR@templengthone}%
+ \booltrue{KFLT@keywrap}%
+ #2%
+ \end{LWR@BlockClassWP}%
+}
+{}
+% \end{macrocode}
+%
+% \begin{macrocode}
+}% AtBeginDocument
+% \end{macrocode}
+
+
+% \iffalse
+%</keyfloat>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*layaureo>
+% \fi
+%
+% \part{lwarp-layaureo.sty}
+%
+% \section{layaureo}
+%
+% \DescribePackage{layaureo}
+% \pkg{layaureo} is ignored.
+%
+% \changes{v0.60}{2018/09/18}{\pkg{layaureo}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{layaureo}[2004/09/16]
+% \end{macrocode}
+%
+% \iffalse
+%</layaureo>
+% \fi
+%
+%
+%
+% \iffalse
+%<*layout>
+% \fi
+
+% \part{lwarp-layout.sty}
+
+% \section{layout}
+%
+% \DescribePackage{layout}
+% \pkg{layout} is ignored.
+%
+% \changes{v0.22}{2017/03/01}{\pkg{layout}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-layout}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{layout}[2014/10/28]
+% \end{macrocode}
+
+% \begin{macrocode}
+\NewDocumentCommand{\layout}{s}{}
+% \end{macrocode}
+
+% \iffalse
+%</layout>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*layouts>
+% \fi
+%
+% \part{lwarp-layouts.sty}
+%
+% \section{layouts}
+%
+% \DescribePackage{layouts}
+% \pkg{layouts} is ignored.
+%
+% \changes{v0.68}{2019/02/26}{\pkg{layouts}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{layouts}[2009/09/02]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif\ifoddpagelayout
+ \oddpagelayouttrue
+\newif\iftwocolumnlayout
+ \twocolumnlayoutfalse
+\newif\ifdrawmarginpars
+ \drawmarginparstrue
+\newif\ifdrawparameters
+ \drawparameterstrue
+\newif\iflistaspara
+ \listasparatrue
+\newif\ifruninhead
+ \runinheadfalse
+\newif\ifprintparameters
+ \printparameterstrue
+\newif\ifdrawdimensions
+ \drawdimensionsfalse
+\newif\ifprintheadings
+ \printheadingstrue
+\newcommand{\testdrawdimensions}{}
+\newcommand{\testprintparameters}{}
+\newcommand{\setlabelfont}[1]{}
+\newcommand{\setparametertextfont}[1]{}
+\newcommand{\setvaluestextsize}[1]{}
+\newcommand{\setlayoutscale}[1]{}
+\newcommand{\setuplayouts}{}
+\newcommand{\printinunitsof}[1]{}
+\newcommand{\prntlen}[1]{}
+\newcommand{\trypaperwidth}[1]{}
+\newcommand{\trypaperheight}[1]{}
+\newcommand{\tryhoffset}[1]{}
+\newcommand{\tryvoffset}[1]{}
+\newcommand{\trytopmargin}[1]{}
+\newcommand{\tryheadheight}[1]{}
+\newcommand{\tryheadsep}[1]{}
+\newcommand{\trytextheight}[1]{}
+\newcommand{\tryfootskip}[1]{}
+\newcommand{\tryoddsidemargin}[1]{}
+\newcommand{\tryevensidemargin}[1]{}
+\newcommand{\trytextwidth}[1]{}
+\newcommand{\trymarginparsep}[1]{}
+\newcommand{\trymarginparwidth}[1]{}
+\newcommand{\trymarginparpush}[1]{}
+\newcommand{\trycolumnsep}[1]{}
+\newcommand{\trycolumnseprule}[1]{}
+\newcommand{\setfootbox}[2]{}
+\newcommand{\currentpage}{}
+\newcommand{\drawpage}{(draw page)}
+\newcommand{\pagediagram}{(page diagram)}
+\newcommand{\pagedesign}{(page design)}
+\newcommand{\pagevalues}{(page values)}
+\newcommand{\trystockwidth}[1]{}
+\newcommand{\trystockheight}[1]{}
+\newcommand{\trytrimedge}[1]{}
+\newcommand{\trytrimtop}[1]{}
+\newcommand{\tryuppermargin}[1]{}
+\newcommand{\tryspinemargin}[1]{}
+\newcommand{\currentstock}{}
+\newcommand{\drawstock}{(draw stock)}
+\newcommand{\stockdiagram}{(stock diagram)}
+\newcommand{\stockdesign}{(stock design)}
+\newcommand{\stockvalues}{(stock values)}
+\newcommand{\tryitemindent}[1]{}
+\newcommand{\trylabelwidth}[1]{}
+\newcommand{\trylabelsep}[1]{}
+\newcommand{\tryleftmargin}[1]{}
+\newcommand{\tryrightmargin}[1]{}
+\newcommand{\trylistparindent}[1]{}
+\newcommand{\trytopsep}[1]{}
+\newcommand{\tryparskip}[1]{}
+\newcommand{\trypartopsep}[1]{}
+\newcommand{\tryparsep}[1]{}
+\newcommand{\tryitemsep}[1]{}
+\newcommand{\currentlist}{}
+\newcommand{\drawlist}{(draw list)}
+\newcommand{\listdiagram}{(list diagram)}
+\newcommand{\listdesign}{(list design)}
+\newcommand{\listvalues}{(list values)}
+\newcommand{\tryfootins}[1]{}
+\newcommand{\tryfootnotesep}[1]{}
+\newcommand{\tryfootnotebaseline}[1]{}
+\newcommand{\tryfootruleheight}[1]{}
+\newcommand{\tryfootrulefrac}[1]{}
+\newcommand{\currentfootnote}{}
+\newcommand{\drawfootnote}{(draw footnote)}
+\newcommand{\footnotediagram}{(footnote diagram)}
+\newcommand{\footnotedesign}{(footnote design)}
+\newcommand{\footnotevalues}{(footnote values)}
+\newcommand{\tryparindent}[1]{}
+\newcommand{\tryparlinewidth}[1]{}
+\newcommand{\tryparbaselineskip}[1]{}
+\newcommand{\currentparagraph}{}
+\newcommand{\drawparagraph}{(draw paragraph)}
+\newcommand{\paragraphdiagram}{(paragraph diagram)}
+\newcommand{\paragraphdesign}{(paragraph design)}
+\newcommand{\paragraphvalues}{(paragraph values)}
+\newcommand{\trybeforeskip}[1]{}
+\newcommand{\tryafterskip}[1]{}
+\newcommand{\tryindent}[1]{}
+\newcommand{\currentheading}{}
+\newcommand{\drawheading}[1]{(draw heading)}
+\newcommand{\headingdiagram}[1]{(heading diagram)}
+\newcommand{\headingdesign}[1]{(heading design)}
+\newcommand{\headingvalues}{(heading values)}
+\newcommand{\trytextfloatsep}[1]{}
+\newcommand{\tryfloatsep}[1]{}
+\newcommand{\tryintextsep}[1]{}
+\newcommand{\trytopfigrule}[1]{}
+\newcommand{\trybotfigrule}[1]{}
+\newcommand{\currentfloat}{}
+\newcommand{\drawfloat}{(draw float)}
+\newcommand{\floatdiagram}{(float diagram)}
+\newcommand{\floatdesign}{(float design)}
+\newcommand{\floatvalues}{(float values)}
+\newcommand{\trytotalnumber}[1]{}
+\newcommand{\trytopnumber}[1]{}
+\newcommand{\trybottomnumber}[1]{}
+\newcommand{\trytopfraction}[1]{}
+\newcommand{\trytextfraction}[1]{}
+\newcommand{\trybottomfraction}[1]{}
+\newcommand{\currentfloatpage}{}
+\newcommand{\drawfloatpage}{(draw floatpage)}
+\newcommand{\floatpagediagram}{(floatpage diagram)}
+\newcommand{\floatpagedesign}{(floatpage design)}
+\newcommand{\floatpagevalues}{(floatpage values)}
+\newcommand{\trytocindent}[1]{}
+\newcommand{\trytocnumwidth}[1]{}
+\newcommand{\trytoclinewidth}[1]{}
+\newcommand{\trytocrmarg}[1]{}
+\newcommand{\trytocpnumwidth}[1]{}
+\newcommand{\trytocdotsep}[1]{}
+\newcommand{\currenttoc}{}
+\newcommand{\drawtoc}{(draw toc)}
+\newcommand{\tocdiagram}{(toc diagram)}
+\newcommand{\tocdesign}{(toc design)}
+\newcommand{\tocvalues}{(toc values)}
+\newcommand{\drawaspread}[8][0]{(a spread)}
+\newcommand{\drawfontframe}[1]{(font frame)}
+\newcommand{\drawfontframelabel}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</layouts>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*leading>
+% \fi
+%
+% \part{lwarp-leading.sty}
+%
+% \section{leading}
+%
+% \DescribePackage{leading}
+% \pkg{leading} is ignored.
+%
+% \changes{v0.60}{2018/09/18}{\pkg{leading}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{leading}[2008/12/11]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand\leading[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</leading>
+% \fi
+%
+%
+%
+% \iffalse
+%<*letterspace>
+% \fi
+
+% \part{lwarp-letterspace.sty}
+
+% \section{letterspace}
+%
+% \credits{R Schlicht}
+%
+% \DescribePackage{letterspace}
+% \pkg{letterspace} is a subset of microtype, which is pre-loaded by \pkg{lwarp}.
+% All user options and macros are ignored and disabled.
+
+% \changes{v0.20}{2017/01/03}{\pkg{letterspace}: User-interface emulated.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-letterspace}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{letterspace}[2018/01/14]
+% \end{macrocode}
+
+% \begin{macrocode}
+\newcommand*\lsstyle{}
+\newcommand\textls[2][]{}
+\def\textls#1#{}
+\newcommand*\lslig[1]{#1}
+% \end{macrocode}
+
+% \iffalse
+%</letterspace>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*lettrine>
+% \fi
+%
+% \part{lwarp-lettrine.sty}
+%
+% \section{lettrine}
+%
+% \credits{Daniel Flipo}
+%
+% \DescribePackage{lettrine} \pkg{lettrine} is emulated.
+%
+% \changes{v0.27}{2017/04/02}{\pkg{lettrine}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-lettrine}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{lettrine}[2018-08-28]
+% \end{macrocode}
+%
+% The initial letter is in a \element{span} of class |lettrine|, and the following
+% text is in a \element{span} of class |lettrinetext|.
+% \cs{lettrine} \oarg{keys} \marg{letter} \marg{additional text}
+% \begin{macrocode}
+\DeclareDocumentCommand{\lettrine}{o m m}{%
+\InlineClass{lettrine}{#2}\InlineClass{lettrinetext}{#3} % extra space
+}
+
+\newcounter{DefaultLines}
+\setcounter{DefaultLines}{2}
+\newcounter{DefaultDepth}
+\newcommand*{\DefaultOptionsFile}{\relax}
+\newcommand*{\DefaultLoversize}{0}
+\newcommand*{\DefaultLraise}{0}
+\newcommand*{\DefaultLhang}{0}
+\newdimen\DefaultFindent
+\setlength{\DefaultFindent}{\z@}
+\newdimen\DefaultNindent
+\setlength{\DefaultNindent}{0.5em}
+\newdimen\DefaultSlope
+\setlength{\DefaultSlope}{\z@}
+\newdimen\DiscardVskip
+\setlength{\DiscardVskip}{0.2\p@}
+\newif\ifLettrineImage
+\newif\ifLettrineOnGrid
+\newif\ifLettrineRealHeight
+
+\newcommand*{\LettrineTextFont}{\scshape}
+\newcommand*{\LettrineFontHook}{}
+\newcommand*{\LettrineFont}[1]{\InlineClass{lettrine}{#1}}
+\newcommand*{\LettrineFontEPS}[1]{\includegraphics[height=1.5ex]{#1}}
+% \end{macrocode}
+%
+% \iffalse
+%</lettrine>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*lineno>
+% \fi
+%
+% \part{lwarp-lineno.sty}
+%
+% \section{lineno}
+%
+% \credits{Stephan I. Böttcher}
+%
+% \DescribePackage{lineno}
+% \pkg{lineno} is partly emulated, but mostly ignored.
+%
+% \changes{v0.49}{2018/02/19}{\pkg{lineno}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{lineno}[2005/11/02]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*\resetlinenumber[1][\@ne]{}
+
+\def\linenumbers{%
+ \@ifnextchar[{\resetlinenumber}%]
+ {\@ifstar{\resetlinenumber}{}}%
+ }
+
+\newcommand*{\nolinenumbers}{}
+
+\@namedef{linenumbers*}{\par\linenumbers*}
+\@namedef{runninglinenumbers*}{\par\runninglinenumbers*}
+
+\def\endlinenumbers{\par}
+\let\endrunninglinenumbers\endlinenumbers
+\let\endpagewiselinenumbers\endlinenumbers
+\expandafter\let\csname endlinenumbers*\endcsname\endlinenumbers
+\expandafter\let\csname endrunninglinenumbers*\endcsname\endlinenumbers
+\let\endnolinenumbers\endlinenumbers
+
+\def\pagewiselinenumbers{\linenumbers\setpagewiselinenumbers}
+
+\def\runninglinenumbers{\setrunninglinenumbers\linenumbers}
+
+\def\setpagewiselinenumbers{}
+
+\def\setrunninglinenumbers{}
+
+\def\linenomath{}%
+\@namedef{linenomath*}{}%
+\def\endlinenomath{}
+\expandafter\let\csname endlinenomath*\endcsname\endlinenomath
+
+\let\linelabel\label
+
+\def\switchlinenumbers{\@ifstar{}{}}
+\def\setmakelinenumbers#1{\@ifstar{}{}}
+
+\def\leftlinenumbers{\@ifstar{}{}}
+\def\rightlinenumbers{\@ifstar{}{}}
+
+\newcounter{linenumber}
+\newcount\c@pagewiselinenumber
+\let\c@runninglinenumber\c@linenumber
+
+\def\runningpagewiselinenumbers{}
+\def\realpagewiselinenumbers{}
+
+
+\NewDocumentCommand\modulolinenumbers{s o}{}
+
+\chardef\c@linenumbermodulo=5
+\modulolinenumbers[1]
+
+\newcommand*\firstlinenumber[1]{}
+
+\newcommand\internallinenumbers{}
+\let\endinternallinenumbers\endlinenumbers
+\@namedef{internallinenumbers*}{\internallinenumbers*}
+\expandafter\let\csname endinternallinenumbers*\endcsname\endlinenumbers
+
+\newcommand*{\linenoplaceholder}[1]{% redefine per language
+ (line number reference for \detokenize\expandafter{#1})
+}
+
+\newcommand*{\lineref}[2][]{\linenoplaceholder{#2}}
+\newcommand*{\linerefp}[2][]{\linenoplaceholder{#2}}
+\newcommand*{\linerefr}[2][]{\linenoplaceholder{#2}}
+
+\newcommand\quotelinenumbers
+ {\@ifstar\linenumbers{\@ifnextchar[\linenumbers{\linenumbers*}}}
+
+\newdimen\linenumbersep
+\newdimen\linenumberwidth
+\newdimen\quotelinenumbersep
+
+\quotelinenumbersep=\linenumbersep
+\let\quotelinenumberfont\linenumberfont
+
+\def\linenumberfont{\normalfont\tiny\sffamily}
+
+
+\linenumberwidth=10pt
+\linenumbersep=10pt
+
+\def\thelinenumber{}
+
+\def\LineNumber{}
+\def\makeLineNumber{}
+\def\makeLineNumberLeft{}
+\def\makeLineNumberRight{}
+\def\makeLineNumberOdd{}
+\def\makeLineNumberEven{}
+\def\makeLineNumberRunning{}
+
+
+\newenvironment{numquote} {\quote}{\endquote}
+\newenvironment{numquotation} {\quotation}{\endquotation}
+\newenvironment{numquote*} {\quote}{\endquote}
+\newenvironment{numquotation*}{\quotation}{\endquotation}
+
+\newdimen\bframerule
+\bframerule=\fboxrule
+
+\newdimen\bframesep
+\bframesep=\fboxsep
+
+\newenvironment{bframe}
+{%
+ \LWR@forceminwidth{\bframerule}%
+ \BlockClass[
+ border:\LWR@printlength{\LWR@atleastonept} solid black ; %
+ padding:\LWR@printlength{\bframesep}%
+ ]{bframe}
+}
+{\endBlockClass}
+% \end{macrocode}
+%
+% \iffalse
+%</lineno>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*lips>
+% \fi
+
+% \part{lwarp-lips.sty}
+
+% \section{lips}
+% \label{sec:lips}
+%
+% \credits{Matt Swift}
+%
+% \changes{v0.25}{2017/03/16}{\pkg{lips}: Added.}
+%
+% \DescribePackage{lips}
+% \pkg{lips} is emulated.
+
+% \begin{macrocode}
+% \LWR@ProvidesPackageDrop{lips}
+\PackageInfo{lwarp}{Using the lwarp version of package `lips'.}%
+\ProvidesPackage{lwarp-lips}[2001/08/31]
+
+\NewDocumentCommand{\Lips}{}{\textellipsis}
+
+\NewDocumentCommand{\BracketedLips}{}{[\textellipsis]}
+
+\let\lips\Lips
+\let\olips\lips
+
+\DeclareOption*{}
+\DeclareOption{mla}{
+\let\lips\BracketedLips
+}
+\ProcessOptions\relax
+
+\newcommand \LPNobreakList {}
+% \end{macrocode}
+
+% \iffalse
+%</lips>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*listings>
+% \fi
+
+% \part{lwarp-listings.sty}
+
+% \section{listings}
+% \label{sec:listings}
+%
+% \credits{Carsten Heinz, Brooks Moses, Jobst Hoffmann}
+%
+%
+% \DescribePackage{listings}
+% \pkg{listings} is supported with some limitations.
+% Text formatting is not yet supported.
+%
+% \changes{v0.20}{2017/01/01}{\pkg{listings}: Added.}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{listings}[2018/09/02]
+% \end{macrocode}
+
+% ^^A For passing optional arguments to an environment, see:
+% ^^A \href
+% ^^A {http://tex.stackexchange.com/questions/9035/how-to-pass-an-optional-argument-to-an-environment-with-verbatim-content}
+% ^^A {\texttt{http://tex.stackexchange.com/questions/9035/ \\
+% ^^A \hspace*{3em}how-to-pass-an-optional-argument-to-\\
+% ^^A \hspace*{3em}an-environment-with-verbatim-content}}
+%
+% Force flexible columns. Fixed columns inserts spaces in the \PDF\ output.
+% \changes{v0.50}{2018/03/02}{\pkg{listings}: Force flexible columns.}
+% \begin{macrocode}
+\lst@column@flexible
+% \end{macrocode}
+%
+%
+% Patches to embed listings inside |pre| tags:
+%
+% \begin{macrocode}
+\let\LWR@origlst@Init\lst@Init
+\let\LWR@origlst@DeInit\lst@DeInit
+
+\let\LWR@origlsthkEveryPar\lsthk@EveryPar
+
+\renewcommand{\l@lstlisting}[2]{\hypertocfloat{1}{lstlisting}{lol}{#1}{#2}}
+% \end{macrocode}
+%
+% \begin{noindmacro}{\lstset} \marg{options}
+%
+% Use the \pkg{listings} \optn{literate} option to replace
+% \HTML\ entities:
+% \changes{v0.60}{2018/09/12}{\pkg{listings}: Fix for \HTML\ entities.}
+% \begin{macrocode}
+\def\lstset@#1{\endgroup%
+% \ifx\@empty#1%
+% \@empty%
+% \else%
+ \setkeys{lst}{%
+ #1%
+ ,literate=%
+ {<}{\HTMLentity{lt}}{4}%
+ {>}{\HTMLentity{gt}}{4}%
+ {\&}{\HTMLentity{amp}}{5}%
+ }%
+% \fi%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindmacro}{\lst@Init} \marg{backslash-processing} \quad
+% Done at the start of a listing.
+% \begin{macrocode}
+\renewcommand{\lst@Init}[1]{%
+% \end{macrocode}
+%
+% Perform the \pkg{listings} initialization:
+%
+% \changes{v0.51}{2018/03/17}{\pkg{listings}: Forces cleared options.}
+% \begin{macrocode}
+\LWR@traceinfo{lst@Init}%
+\renewcommand*{\@captype}{lstlisting}%
+\let\lst@aboveskip\z@\let\lst@belowskip\z@%
+\gdef\lst@boxpos{t}%
+\let\lst@frame\@empty
+ \let\lst@frametshape\@empty
+ \let\lst@framershape\@empty
+ \let\lst@framebshape\@empty
+ \let\lst@framelshape\@empty
+\lstframe@\lst@frameround ffff\relax%
+\lst@multicols\@empty%
+\LWR@origlst@Init{#1}\relax%
+% \end{macrocode}
+% Avoids extra horizontal space:
+% \changes{v0.60}{2018/09/12}{\pkg{listings}: Fix if inside a list.}
+% \begin{macrocode}
+\def\lst@framelr{}%
+% \end{macrocode}
+% \begin{macrocode}
+\LWR@traceinfo{finished origlst@Init}%
+\lst@ifdisplaystyle%
+% \end{macrocode}
+% Creating a display.
+%
+% Disable line numbers,
+% produce the \element{pre}, then
+% reenable line numbers.
+% \begin{macrocode}
+\LWR@traceinfo{About to create verbatim.}%
+\let\lsthk@EveryPar\relax%
+\LWR@forcenewpage
+\LWR@atbeginverbatim{2}{programlisting}%
+
+\let\lsthk@EveryPar\LWR@origlsthkEveryPar%
+\else%
+% \end{macrocode}
+% Inline, so open a \element{span}:
+% \begin{macrocode}
+\ifbool{LWR@verbtags}{\LWR@htmltag{span class="inlineprogramlisting"}}{}%
+\fi%
+}
+
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindmacro}{\lst@DeInit} \quad Done at the end of a listing.
+% \begin{macrocode}
+\renewcommand*{\lst@DeInit}{%
+\lst@ifdisplaystyle%
+% \end{macrocode}
+% Creating a display.
+%
+% Disable line numbers,
+% produce the \element{/pre}, then
+% reenable line numbers:
+% \begin{macrocode}
+\let\lsthk@EveryPar\relax%
+\LWR@afterendverbatim{0}%
+\let\lsthk@EveryPar\LWR@origlsthkEveryPar%
+\else%
+% \end{macrocode}
+% Inline, so create the closing \element{/span}:
+% \begin{macrocode}
+\ifbool{LWR@verbtags}{\noindent\LWR@htmltag{/span}}{}%
+\fi%
+% \end{macrocode}
+% Final \pkg{listings} deinit:
+% \begin{macrocode}
+\LWR@origlst@DeInit%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+%
+% \begin{noindmacro}{\lst@MakeCaption} \marg{t/b}
+%
+% This is called BOTH at the top and at the bottom of each listing.
+%
+% Patched for \pkg{lwarp}.
+% \begin{macrocode}
+\def\lst@MakeCaption#1{%
+\LWR@traceinfo{MAKING CAPTION at #1}%
+ \lst@ifdisplaystyle
+\LWR@traceinfo{making a listings display caption}%
+ \ifx #1t%
+ \ifx\lst@@caption\@empty\expandafter\lst@HRefStepCounter \else
+ \expandafter\refstepcounter
+ \fi {lstlisting}%
+\LWR@traceinfo{About to assign label: !\lst@label!}%
+% \ifx\lst@label\@empty\else
+% \label{\lst@label}\fi
+\LWR@traceinfo{Finished assigning the label.}%
+ \let\lst@arg\lst@intname \lst@ReplaceIn\lst@arg\lst@filenamerpl
+ \global\let\lst@name\lst@arg \global\let\lstname\lst@name
+ \lst@ifnolol\else
+ \ifx\lst@@caption\@empty
+ \ifx\lst@caption\@empty
+ \ifx\lst@intname\@empty \else \def\lst@temp{ }%
+ \ifx\lst@intname\lst@temp \else
+% \end{macrocode}
+% This code places a contents entry for a non-float.
+% This would have to be modified for \pkg{lwarp}:
+% \begin{macrocode}
+\LWR@traceinfo{addcontents lst@name: -\lst@name-}%
+% \addcontentsline{lol}{lstlisting}{\lst@name}
+ \fi\fi
+ \fi
+ \else
+% \end{macrocode}
+% This would have to be modified for \pkg{lwarp}:
+% \begin{macrocode}
+\LWR@traceinfo{addcontents lst@@caption: -\lst@@caption-}%
+ \addcontentsline{lol}{lstlisting}%
+{\protect\numberline{\thelstlisting}%
+{\protect\ignorespaces \LWR@isolate{\lst@@caption} \protect\relax}}%
+ \fi
+ \fi
+ \fi
+ \ifx\lst@caption\@empty\else
+\LWR@traceinfo{lst@caption not empty-}%
+ \lst@IfSubstring #1\lst@captionpos
+ {\begingroup
+\LWR@traceinfo{at the selected position}%
+% \end{macrocode}
+% These space and box commands are not needed for \HTML\ output:
+% \begin{macrocode}
+% \let\@@vskip\vskip
+% \def\vskip{\afterassignment\lst@vskip \@tempskipa}%
+% \def\lst@vskip{\nobreak\@@vskip\@tempskipa\nobreak}%
+% \par\@parboxrestore\normalsize\normalfont % \noindent (AS)
+% \ifx #1t\allowbreak \fi
+ \ifx\lst@title\@empty
+% \end{macrocode}
+% New \pkg{lwarp} code to create a caption:
+% \changes{v0.73}{2019/06/25}{\pkg{listings}: Fix: Paragraph tags.}
+% \begin{macrocode}
+ \LWR@stoppars%
+ \lst@makecaption\fnum@lstlisting{\ignorespaces \lst@caption}
+ \else
+% \end{macrocode}
+% New \pkg{lwarp} code to create a title:
+% \begin{macrocode}
+% \lst@maketitle\lst@title % (AS)
+\LWR@traceinfo{Making title: \lst@title}%
+\begin{BlockClass}{lstlistingtitle}% lwarp
+\lst@maketitle\lst@title% lwarp
+\end{BlockClass}% lwarp
+ \fi
+\LWR@traceinfo{About to assign label: !\lst@label!}%
+ \ifx\lst@label\@empty\else
+\leavevmode% gets rid of bad space factor error
+\GetTitleStringExpand{\lst@caption}%
+\edef\LWR@lntemp{\GetTitleStringResult}%
+\edef\@currentlabelname{\detokenize\expandafter{\LWR@lntemp}}%
+\label{\lst@label}\fi
+\LWR@traceinfo{Finished assigning the label.}%
+% \end{macrocode}
+% Not needed for \pkg{lwarp}:
+% \begin{macrocode}
+% \ifx #1b\allowbreak \fi
+ \endgroup}{}%
+ \fi
+\LWR@traceinfo{end of making a listings display caption}%
+ \else
+\LWR@traceinfo{INLINE}%
+ \fi
+\LWR@traceinfo{DONE WITH CAPTION at #1}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% Patched to keep left line numbers outside of the left margin, and
+% \margintag{line numbers}
+% place right line numbers in a field \cs{VerbatimHTMLWidth} wide.
+%
+% \changes{v0.60}{2018/09/12}{\pkg{listings}: Fix if inside a list.}
+% \changes{v0.68}{2019/03/05}{\pkg{listings}: Fix for \pkg{listings} v1.7.}
+%
+% ^^A \DescribeKey[listings]{numbers} Activates line numbers.
+% \begin{macrocode}
+\lst@Key{numbers}{none}{%
+ \let\lst@PlaceNumber\@empty
+ \lstKV@SwitchCases{#1}%
+ {none:\\%
+ left:\def\lst@PlaceNumber{%
+% \end{macrocode}
+% For now, \pkg{lwarp} places left line numbers inline.
+% Ideally the entire line would be moved to the right, but
+% conflicts with list indenting occurs.
+% \begin{macrocode}
+% \LWR@origllap{
+ \LWR@orignormalfont%
+ \lst@numberstyle{\thelstnumber}\kern\lst@numbersep%
+% }
+ }\\%
+ right:\def\lst@PlaceNumber{\LWR@origrlap{\LWR@orignormalfont
+ \kern 6in \kern\lst@numbersep
+ \lst@numberstyle{\thelstnumber}}}%
+ }{\PackageError{lwarp-listings}{Numbers #1 unknown}\@ehc}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+% \iffalse
+%</listings>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*listliketab>
+% \fi
+%
+% \part{lwarp-listliketab.sty}
+%
+% \section{listliketab}
+%
+% \DescribePackage{listliketab}
+% \pkg{listliketab} is ignored.
+%
+% \changes{v0.69}{2019/03/08}{\pkg{listliketab}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{listliketab}[2005/01/09]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\storestyleof}[1]{}
+\newcommand*{\storeliststyle}{}
+\newenvironment{listliketab}{}{}
+% \end{macrocode}
+%
+% \iffalse
+%</listliketab>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*lltjext>
+% \fi
+%
+% \part{lwarp-lltjext.sty}
+%
+% \section{lltjext}
+%
+% \credits{The Lua\TeX-ja project team}
+%
+% \DescribePackage{lltjext}
+% \pkg{lltjext} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.65}{2018/12/21}{\pkg{lltjext}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{lltjext}[2018/10/07]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\protected\def\yoko{%
+ \directlua{luatexja.direction.set_list_direction(4, 'yoko')}%
+}
+\protected\def\tate{\yoko}
+\protected\def\dtou{\yoko}
+\protected\def\utod{\yoko}
+
+\define@key[ltj]{japaram}{direction}{}
+
+\yoko
+
+\DeclareExpandableDocumentCommand{\rensuji}{s o m}{#3}
+
+\DeclareDocumentCommand{\layoutfloat}{d() o m}{}
+
+\DeclareDocumentCommand{\DeclareLayoutCaption}{m d<> d() o}{}
+
+\LetLtxMacro\pcaption\caption
+
+\DeclareDocumentCommand{\layoutcaption}{d<> d() o}{}
+
+\let\captiondir\relax
+\RenewDocumentEnvironment{LWR@HTML@minipage}{d<> O{t} O{} O{t} m}
+ {\LWR@HTML@sub@minipage{#2}{#3}{#4}{#5}}
+ {\endLWR@HTML@sub@minipage}
+
+\RenewDocumentCommand{\LWR@HTML@parbox}{d<> O{t} O{} O{t} m +m}
+{
+\LWR@traceinfo{parbox of width #4}%
+\begin{minipage}[#2][#3][#4]{#5}%
+#6
+\end{minipage}%
+}
+
+\RenewDocumentCommand{\pbox}{d<> O{0pt} O{c} m}{%
+\global\booltrue{LWR@minipagefullwidth}%
+\parbox{#2}{#4}%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</lltjext>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*longtable>
+% \fi
+
+% \part{lwarp-longtable.sty}
+
+% \section{longtable}
+% \label{sec:longtable}
+%
+% \credits{David Carlisle}
+%
+% \DescribePackage{longtable}
+% \pkg{longtable} is emulated.
+
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{longtable}[2014/10/28]
+% \end{macrocode}
+%
+% \limitslongtable
+%
+% See: \\
+% \href{http://tex.stackexchange.com/questions/43006/why-is-input-not-expandable}
+% {\texttt{http://tex.stackexchange.com/questions/43006/\\why-is-input-not-expandable}}
+%
+%
+% Used to detect more than one of \cs{endhead} and \cs{endfirsthead} in use
+% for \HTML\ at the same time.
+% \begin{macrocode}
+\newbool{LWR@longtable@havehead}
+\boolfalse{LWR@longtable@havehead}
+% \end{macrocode}
+%
+%
+% \begin{environment}{longtable} * \oarg{horizalignment} \marg{colspec}
+% Emulates the \env{longtable} environment.
+%
+% Per the \pkg{caption} package, the starred version steps the counter per caption.
+% The unstarred version steps the counter once at the beginning, but
+% not at each caption.
+%
+% Options [c], [l], and [r] are ignored.
+% \begin{macrocode}
+\newenvironment{longtable*}[2][]{%
+\LWR@floatbegin{table}%
+\setcaptiontype{\LTcaptype}%
+\caption@setoptions{longtable}%
+\caption@setoptions{@longtable}%
+\caption@LT@setup%
+\booltrue{LWR@starredlongtable}%
+\boolfalse{LWR@longtable@havehead}%
+\let\captionlistentry\LWR@LTcaptionlistentry%
+\tabular{#2}
+}
+{\endtabular\LWR@floatend}
+
+\newenvironment{longtable}[2][]{%
+\LWR@floatbegin{table}%
+\setcaptiontype{\LTcaptype}%
+\caption@setoptions{longtable}%
+\caption@setoptions{@longtable}%
+\caption@LT@setup%
+\refstepcounter{\LTcaptype}%
+\boolfalse{LWR@longtable@havehead}%
+\let\captionlistentry\LWR@LTcaptionlistentry%
+\tabular{#2}
+}
+{\endtabular\LWR@floatend}
+% \end{macrocode}
+% \end{environment}
+
+% Provided for compatibility, but ignored:
+% \begin{macrocode}
+\newcounter{LTchunksize}
+% \end{macrocode}
+%
+% Error for heads which should have been in \cs{warpprintonly}:
+% \begin{macrocode}
+\newcommand*{\LWR@longtable@headerror}{%
+ \PackageError{lwarp}
+ {For longtable:\MessageBreak
+ 1: Keep either one of an \protect\endhead\space or
+ \protect\endfirsthead\space\MessageBreak
+ \space phrase as-is, to be used by both print and HTML.\MessageBreak
+ 2: Place any other \protect\end... phrases inside a\MessageBreak
+ \space\protect\warpprintonly\space macro,
+ to be ignored by HTML.\MessageBreak
+ 3: Add a final footer for HTML at the end of the table\MessageBreak
+ \space inside a \protect\warpHTMLonly\space macro.
+ This can be\MessageBreak
+ \space a copy of an \protect\endfoot\space or
+ \protect\endfirstfoot\space phrase,\MessageBreak
+ \space but without the actual \protect\endfoot\space
+ or \protect\endfirstfoot\MessageBreak
+ \space macros. If using threeparttablex, add\MessageBreak
+ \space \protect\insertTableNotes\space here,
+ optionally with\MessageBreak
+ \space \protect\UseMinipageWidths\space in front.\MessageBreak
+ See the lwarp documentation regarding longtables\MessageBreak
+ and threeparttablex}
+ {See the lwarp documentation regading longtables and threeparttablex.}
+}
+% \end{macrocode}
+%
+% Error if more than one of \cs{endhead} or \cs{endfirsthead} is
+% outside of \env{warpprintonly}.
+% \changes{v0.68}{2019/03/01}{\pkg{longtable}: Improved error handling.}
+% \begin{macrocode}
+\newcommand*{\LWR@longtable@maybeheaderror}{%
+\ifbool{LWR@longtable@havehead}%
+ {\LWR@longtable@headerror}%
+ {%
+ \booltrue{LWR@longtable@havehead}
+ \LWR@tabularendofline% throws away options //[dim] and //*
+ }%
+}
+% \end{macrocode}
+%
+% Error if more than one of these is outside of \env{warpprint}.
+% \begin{macrocode}
+\def\endhead{\LWR@longtable@maybeheaderror}
+\def\endfirsthead{\LWR@longtable@maybeheaderror}
+% \end{macrocode}
+%
+% Error if ANY of these is outside of \env{warpprint}.
+% \begin{macrocode}
+\def\endfoot{\LWR@longtable@headerror}
+\def\endlastfoot{\LWR@longtable@headerror}
+% \end{macrocode}
+%
+% \changes{v0.69}{2019/03/09}{\pkg{array}: Fix for \cs{tabularnewline}.}
+% \begin{macrocode}
+\providecommand*{\LWR@HTML@tabularnewline}{\LWR@tabularendofline}
+\LWR@formatted{tabularnewline}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\setlongtables}{}% Obsolete command, does nothing.
+\newlength{\LTleft}
+\newlength{\LTright}
+\newlength{\LTpre}
+\newlength{\LTpost}
+\newlength{\LTcapwidth}
+% \end{macrocode}
+%
+% \changes{v0.52}{2018/03/27}{Restore \cs{kill} in a \env{lateximage}.}
+% \begin{macrocode}
+\LetLtxMacro\LWR@origkill\kill
+\renewcommand*{\kill}{\LWR@tabularendofline}
+\appto\LWR@restoreorigformatting{%
+\LetLtxMacro\kill\LWR@origkill%
+}
+% \end{macrocode}
+
+% \iffalse
+%</longtable>
+% \fi
+%
+%
+%
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*lscape>
+% \fi
+
+% \part{lwarp-lscape.sty}
+
+% \section{lscape}
+%
+% \credits{D. P. Carlisle}
+%
+% \DescribePackage{lscape}
+% \pkg{lscape} is ignored.
+%
+% \changes{v0.22}{2017/03/01}{\pkg{lscape}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-lscape}.
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{lscape}[2000/10/22]
+% \end{macrocode}
+
+% \begin{macrocode}
+\newenvironment*{landscape}{}{}
+% \end{macrocode}
+
+% \iffalse
+%</lscape>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*ltablex>
+% \fi
+
+% \part{lwarp-ltablex.sty}
+
+% \section{ltablex}
+%
+% \credits{Anil K. Goel}
+%
+% \DescribePackage{ltablex}
+% \pkg{ltablex} is emulated by \pkg{lwarp}.
+%
+% \changes{v0.57}{2018/05/25}{\pkg{ltablex}: Added.}
+%
+% \codehtml
+%
+% Relies on \pkg{tabularx}.
+%
+% \begin{macrocode}
+\RequirePackage{tabularx}
+
+\LWR@ProvidesPackageDrop{ltablex}[2014/08/13]
+
+\DeclareDocumentEnvironment{tabularx}{m o m}
+{\longtable{#3}}
+{\endlongtable}
+
+\DeclareDocumentEnvironment{tabularx*}{m o m}
+{\longtable{#3}}
+{\endlongtable}
+
+\newcommand*{\keepXColumns}{}
+\newcommand*{\convertXColumns}{}
+% \end{macrocode}
+%
+%
+% \iffalse
+%</ltablex>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*ltcaption>
+% \fi
+
+% \part{lwarp-ltcaption.sty}
+
+% \section{ltcaption}
+% \label{sec:ltcaption}
+%
+% \credits{Axel Sommerfeldt}
+%
+% \DescribePackage{ltcaption}
+% \pkg{ltcaption} is ignored.
+
+% \changes{v0.20}{2017/01/29}{\pkg{ltcaption}: Added.}
+
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{ltcaption}[2018/08/26]
+% \end{macrocode}
+
+%
+% \cs{LTcaptype} is already defined by \pkg{lwarp}.
+%
+% \env{longtable*} is already defined by \pkg{lwarp-longtable}.
+%
+% \begin{macrocode}
+\newlength{\LTcapskip}
+\newlength{\LTcapleft}
+\newlength{\LTcapright}
+\newcommand*{\LTcapmarginsfalse}{}
+% \end{macrocode}
+%
+%
+% \iffalse
+%</ltcaption>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*ltxgrid>
+% \fi
+%
+% \part{lwarp-ltxgrid.sty}
+%
+% \section{ltxgrid}
+%
+% \DescribePackage{ltxgrid}
+% \pkg{ltxgrid} is ignored.
+%
+% \changes{v0.51}{2018/03/08}{\pkg{ltxgrid}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{ltxgrid}[2010/07/25]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\onecolumngrid}{}
+\newcommand*{\twocolumngrid}{}
+\newcommand*{\removestuff}{}
+\newcommand*{\addstuff}[2]{}
+\newcommand*{\replacestuff}[2]{}
+% \end{macrocode}
+%
+% \iffalse
+%</ltxgrid>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*ltxtable>
+% \fi
+%
+% \part{lwarp-ltxtable.sty}
+%
+% \section{ltxtable}
+%
+% \DescribePackage{ltxtable}
+% \pkg{ltxtable} is emulated.
+%
+% The print version does not seem to honor \env{longtable*} from the
+% \trouble[table numbering]{ltxtable=\pkg{ltxtable}>numbering}
+% \trouble{table>numbering}
+% \pkg{caption} package, while \pkg{lwarp} does.
+%
+% \changes{v0.44}{2017/11/15}{\pkg{ltxtable}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{ltxtable}[1995/12/11]
+% \end{macrocode}
+%
+% \begin{noindmacro}{\LTXtable} \marg{width} \marg{file}
+% \begin{macrocode}
+\newcommand*{\LTXtable}[2]{%
+\input{#2}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \iffalse
+%</ltxtable>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*lua-check-hyphen>
+% \fi
+%
+% \part{lwarp-lua-check-hyphen.sty}
+%
+% \section{lua-check-hyphen}
+%
+% \DescribePackage{lua-check-hyphen}
+% \pkg{lua-check-hyphen} is ignored.
+%
+% \changes{v0.56}{2018/04/26}{\pkg{lua-check-hyphen}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{lua-check-hyphen}[2018/04/19]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\LuaCheckHyphen}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</lua-check-hyphen>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*lua-visual-debug>
+% \fi
+%
+% \part{lwarp-lua-visual-debug.sty}
+%
+% \section{lua-visual-debug}
+%
+% \DescribePackage{lua-visual-debug}
+% \pkg{lua-visual-debug} is ignored.
+%
+% \changes{v0.61}{2018/10/05}{\pkg{lua-visual-debug}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{lua-visual-debug}[2016/05/30]
+% \end{macrocode}
+%
+% \iffalse
+%</lua-visual-debug>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*luacolor>
+% \fi
+%
+% \part{lwarp-luacolor.sty}
+%
+% \section{luacolor}
+%
+% \DescribePackage{luacolor}
+% \pkg{luacolor} is ignored.
+%
+% \changes{v0.49}{2018/02/15}{\pkg{luacolor}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{luacolor}[2016/05/16]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\luacolorProcessBox}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</luacolor>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*luatodonotes>
+% \fi
+%
+% \part{lwarp-luatodonotes.sty}
+%
+% \section{luatodonotes}
+%
+% \credits{Fabian Lipp}
+%
+% \DescribePackage{luatodonotes}
+% \pkg{luatodonotes} is emulated.
+%
+% \limitstodonotes
+%
+% \changes{v0.43}{2017/11/07}{\pkg{luatodonotes}: Added.}
+% \changes{v0.44}{2017/11/10}{\pkg{luatodonotes}: Improved.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{luatodonotes}[2017/09/30]
+% \end{macrocode}
+%
+%
+% Nullify options:
+% \begin{macrocode}
+\@todonotes@additionalMarginEnabledfalse
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\if@todonotes@disabled
+\else
+
+\newcommand{\ext@todo}{tdo}
+
+\renewcommand{\l@todo}[2]{\hypertocfloat{1}{todo}{ldo}{#1}{#2}}
+% \end{macrocode}
+%
+% \changes{v0.48}{2018/02/12}{\pkg{luatodonotes}: Improved \cs{todototoc}.}
+% \begin{macrocode}
+\let\LWRTODONOTES@orig@todototoc\todototoc
+
+\renewcommand*{\todototoc}{%
+\phantomsection%
+\LWRTODONOTES@orig@todototoc%
+}
+
+
+\renewcommand{\@todonotes@drawMarginNoteWithLine}{%
+\fcolorbox
+ {\@todonotes@currentbordercolor}
+ {\@todonotes@currentbackgroundcolor}
+ {\arabic{@todonotes@numberoftodonotes}}
+\marginpar{\@todonotes@drawMarginNote}
+}
+
+\renewcommand{\@todonotes@drawInlineNote}{%
+\fcolorboxBlock%
+ {\@todonotes@currentbordercolor}%
+ {\@todonotes@currentbackgroundcolor}%
+ {%
+ \if@todonotes@authorgiven%
+ {\@todonotes@author:\,}%
+ \fi%
+ \@todonotes@text%
+ }%
+}
+
+\newcommand{\@todonotes@drawMarginNote}{%
+ \if@todonotes@authorgiven%
+ \@todonotes@author\par%
+ \fi%
+ \arabic{@todonotes@numberoftodonotes}: %
+ \fcolorbox%
+ {\@todonotes@currentbordercolor}%
+ {\@todonotes@currentbackgroundcolor}%
+ {%
+ \@todonotes@sizecommand%
+ \@todonotes@text %
+ }%
+}%
+
+\renewcommand{\missingfigure}[2][]{%
+\setkeys{todonotes}{#1}%
+\addcontentsline{tdo}{todo}{\@todonotes@MissingFigureText: #2}%
+\fcolorboxBlock%
+ {\@todonotes@currentbordercolor}%
+ {\@todonotes@currentfigcolor}%
+ {%
+ \setlength{\fboxrule}{4pt}%
+ \fcolorbox{red}{white}{Missing figure} \quad #2%
+ }
+}
+
+\LetLtxMacro\LWRTODONOTES@orig@todocommon\@todocommon
+
+\RenewDocumentCommand{\@todocommon}{m m}{%
+\begingroup%
+\renewcommand*{\phantomsection}{}%
+\LWRTODONOTES@orig@todocommon{#1}{#2}%
+\endgroup%
+}
+
+\renewcommand{\@todoarea}[3][]{%
+ \@todonotes@areaselectedtrue%
+ \@todocommon{#1}{#2}%
+ \todonotes@textmark@highlight{#3}%
+ \zref@label{@todonotes@\arabic{@todonotes@numberoftodonotes}@end}%
+}%
+
+
+\DeclareDocumentCommand{\todonotes@textmark@highlight}{m}{%
+\InlineClass[background:\LWR@origpound{}B3FFB3]{highlight}{#1}%
+}
+
+\fi% \if@todonotes@disabled
+% \end{macrocode}
+%
+% \iffalse
+%</luatodonotes>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*lyluatex>
+% \fi
+%
+% \part{lwarp-lyluatex.sty}
+%
+% \section{lyluatex}
+%
+% \credits{Fr. Jacques Peron, Urs Liska, Br. Samuel Springuel}
+%
+% \DescribePackage{lyluatex}
+% \pkg{lyluatex} is patched for use by \pkg{lwarp}.
+%
+%
+% For the first compile, to set \prog{lwarpmk}'s configuration, use:
+% \begin{sourceverb}
+% lualatex --shell-escape <filename>
+% \end{sourceverb}
+%
+% Avoid using the \optn{insert=fullpage} option, or use it
+% inside \cs{warpprintonly} or the \env{warpprint} environment.
+%
+% \changes{v0.73}{2019/06/10}{\pkg{lyluatex}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{lyluatex}[2019/05/27]
+% \end{macrocode}
+%
+% User-redefinable \attribute{ALT} tag:
+% \begin{macrocode}
+\newcommand*{\lyluateximagename}{(-lilypond-~\packagediagramname)}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LetLtxMacro\LWR@orig@ly@compilescore\ly@compilescore
+
+\renewcommand*{\ly@compilescore}[1]{%
+ \begin{lateximage}[\lyluateximagename]%
+ \LWR@orig@ly@compilescore{#1}%
+ \end{lateximage}%
+}
+
+\AtBeginDocument{
+ \lysetoption{paperwidth}{6in}
+ \lysetoption{paperheight}{9in}
+ \lysetoption{line-width}{5.5in}
+ \lysetoption{twoside}{false}
+ \lysetoption{fullpagestyle}{empty}
+ \lysetoption{fullpagealign}{crop}
+ \lysetoption{print-page-number}{false}
+ \lysetoption{insert}{systems}
+ \lysetoption{extra-top-margin}{0}
+ \lysetoption{extra-bottom-margin}{0}
+ \lysetoption{valign}{center}
+ \lysetoption{staffsize}{20}
+ \lysetoption{inline-staffsize}{14}
+}
+% \end{macrocode}
+%
+% \iffalse
+%</lyluatex>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*magaz>
+% \fi
+%
+% \part{lwarp-magaz.sty}
+%
+% \section{magaz}
+%
+% \DescribePackage{magaz}
+% \pkg{magaz} is emulated.
+%
+% \changes{v0.54}{2018/04/1}{\pkg{magaz}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{magaz}[2011/11/24]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand\FirstLine[1]{%
+ \begingroup%
+ \FirstLineFont{%
+ \LWR@textcurrentcolor{%
+ \LWR@textcurrentfont{%
+ #1%
+ }%
+ }%
+ }%
+ \endgroup%
+}
+
+\providecommand\FirstLineFont{\scshape}
+% \end{macrocode}
+%
+% \iffalse
+%</magaz>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*makeidx>
+% \fi
+%
+% \part{lwarp-makeidx.sty}
+%
+% \section{makeidx}
+%
+% \credits{\LaTeX\ Project Team}
+%
+% \DescribePackage{makeidx}
+% \pkg{makeidx} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.58}{2018/06/30}{\pkg{makeidx}: Added. Moved from \pkg{lwarp} core.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{makeidx}[2014/09/29]
+% \end{macrocode}
+%
+% \cs{@wrindex} is redefined \cs{AtBeginDocument} by the \pkg{lwarp} core.
+%
+% \begin{macro}{\printindex}
+%
+% \changes{v0.58}{2018/06/13}{Fix: Extra \cs{newpage} to flush pending \cs{index} writes.}
+% \begin{macrocode}
+\preto\printindex{%
+ \LWR@orignewpage%
+ \LWR@startpars%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%</makeidx>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*manyfoot>
+% \fi
+%
+% \part{lwarp-manyfoot.sty}
+%
+% \section{manyfoot}
+%
+% \DescribePackage{manyfoot}
+% \pkg{manyfoot} is emulated.
+%
+% \limitsmanyfootbigfoot
+%
+% \pkg{lwarp}'s emulation of \pkg{bigfoot} uses \pkg{manyfoot}, so
+% some of the \pkg{bigfoot} enhancements are included here.
+%
+% The \pkg{bigfoot} ``default'' footnote is ignored, using the \pkg{lwarp}
+% version instead.
+%
+% \changes{v0.68}{2019/03/03}{\pkg{manyfoot}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{manyfoot}[2005/09/11]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\RequirePackage{nccfoots}
+
+\newcommand{\extrafootnoterule}{}
+
+\let\defaultfootnoterule\footnoterule
+
+\newcommand*{\SelectFootnoteRule}[2][0]{}
+
+\newcommand{\footnoterulepriority}{1}
+
+\newcommand{\SetFootnoteHook}[1]{}
+\@onlypreamble\SetFootnoteHook
+
+\newcommand{\SplitNote}{}
+
+\newcommand*\ExtraParaSkip[1]{}
+
+\newcommand*{\newfootnote}[2][plain]{%
+ \ifstrequal{#2}{default}{}{% not "default"
+ \expandafter\newbox\csname LWR@footnote#2box\endcsname%
+ \appto{\LWR@printpendingfootnotes}{%
+ \LWR@@printpendingfootnotes{footnote#2}%
+ }
+ \long\csdef{Footnotetext#2}##1##2{%
+ \NCC@makefnmark{##1}%
+ \LWR@@footnotetext{##2}{LWR@footnote#2box}%
+ }%
+ \long\csdef{Footnotetext#2+}##1##2{%
+ \NCC@makefnmark{##1}%
+ \LWR@@footnotetext{##2}{LWR@footnote#2box}%
+ }%
+ }% not "default"
+}
+\@onlypreamble\newfootnote
+
+\newcommand*{\DeclareNewFootnote}[2][plain]{%
+ \@ifnextchar[%
+ {\LWR@manyfoot@declare{#1}{#2}}%
+ {\LWR@manyfoot@declare{#1}{#2}[arabic]}%
+}
+
+\def\LWR@manyfoot@declare#1#2[#3]{%
+\ifstrequal{#2}{default}{}{% not "default"
+ \newfootnote[#1]{#2}%
+ \newcounter{footnote#2}%
+ \newcounter{footnote#2Reset}%
+ \setcounter{footnote#2Reset}{0}%
+ \csdef{thefootnote#2}{%
+ \expandafter\noexpand\csname @#3\endcsname%
+ \expandafter\noexpand\csname c@footnote#2\endcsname%
+ }%
+% \end{macrocode}
+% For \pkg{bigfoot}, the footnote commands may be appended with one or two
+% plusses or one or two minuses, which are ignored in \HTML.
+% \begin{macrocode}
+ \expandafter\NewDocumentCommand\csname footnote#2\endcsname{t{+}t{+}t{-}t{-}}{%
+ \stepcounter{footnote#2}%
+ \protected@xdef\@thefnmark{\csname thefootnote#2\endcsname}%
+ \@footnotemark%
+ \csuse{Footnotetext#2}{\@thefnmark}% absorbs the footnote contents
+ }%
+ \csdef{footnotemark#2}{%
+ \stepcounter{footnote#2}%
+ \protected@xdef\@thefnmark{\csname thefootnote#2\endcsname}%
+ \@footnotemark%
+ }%
+ \expandafter\NewDocumentCommand\csname footnotetext#2\endcsname{t{+}t{+}t{-}t{-}}{%
+ \protected@xdef\@thefnmark{\csname thefootnote#2\endcsname}%
+ \csuse{Footnotetext#2}{\@thefnmark}% absorbs the footnote contents
+ }%
+ \csdef{Footnotemark#2}{%
+ \Footnotemark%
+ }%
+ \csdef{Footnote#2}##1{%
+ \Footnotemark{##1}%
+ \csuse{Footnotetext#2}{##1}%
+ }%
+}% not "default"
+}
+\@onlypreamble\DeclareNewFootnote
+% \end{macrocode}
+%
+% \iffalse
+%</manyfoot>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*marginal>
+% \fi
+%
+% \part{lwarp-marginal.sty}
+%
+% \section{marginal}
+%
+% \DescribePackage{marginal}
+% \pkg{marginal} is ignored.
+%
+% \changes{v0.64}{2018/127/07}{\pkg{marginal}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{marginal}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\showlostmarginals}{}
+\newcommand*{\enlargefreelist}{}
+\newcommand*{\onesidemarginals}{}
+% \end{macrocode}
+%
+% \iffalse
+%</marginal>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*marginfit>
+% \fi
+%
+% \part{lwarp-marginfit.sty}
+%
+% \section{marginfit}
+%
+% \DescribePackage{marginfit} \pkg{marginfit} is ignored.
+%
+% \changes{v0.34}{2017/07/25}{\pkg{marginfit}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-marginfit}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{marginfit}[2018/06/08]
+% \end{macrocode}
+%
+% \iffalse
+%</marginfit>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*marginfix>
+% \fi
+%
+% \part{lwarp-marginfix.sty}
+%
+% \section{marginfix}
+%
+% \credits{Stephen Hicks}
+%
+% \DescribePackage{marginfix} \pkg{marginfix} is ignored.
+%
+% \changes{v0.26}{2017/03/29}{\pkg{marginfix}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-marginfix}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{marginfix}[2013/09/08]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\marginskip}[1]{}
+\newcommand*{\clearmargin}{}
+\newcommand*{\softclearmargin}{}
+\newcommand*{\extendmargin}[1]{}
+\newcommand*{\mparshift}[1]{}
+\newdimen\marginheightadjustment
+\newdimen\marginposadjustment
+\newcommand*{\blockmargin}[1][]{}
+\newcommand*{\unblockmargin}[1][]{}
+\newcommand*{\marginphantom}[2][]{}
+% \end{macrocode}
+%
+% \iffalse
+%</marginfix>
+% \fi
+%
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*marginnote>
+% \fi
+%
+% \part{lwarp-marginnote.sty}
+%
+% \section{marginnote}
+%
+% \credits{Markus Kohm}
+%
+% \DescribePackage{marginnote} \pkg{marginnote} is emulated.
+%
+% \changes{v0.26}{2017/03/30}{\pkg{marginnote}: Added.}
+% \changes{v0.57}{2018/06/05}{\pkg{marginnote}: Fix: Long optional argument.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-marginnote}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{marginnote}[2018/08/09]
+% \end{macrocode}
+%
+% \changes{v0.57}{2018/06/05}{\pkg{marginnote}: Fix: Long optional argument.}
+% \begin{macrocode}
+\NewDocumentCommand{\marginnote}{+o +m o}{\marginpar{#2}}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*{\marginnoteleftadjust}{}
+\newcommand*{\marginnoterightadjust}{}
+\newcommand*{\marginnotetextwidth}{}
+\let\marginnotetextwidth\textwidth
+\newcommand*{\marginnotevadjust}{}
+\newcommand*{\marginfont}{}
+\newcommand*{\raggedleftmarginnote}{}
+\newcommand*{\raggedrightmarginnote}{}
+% \end{macrocode}
+%
+% \iffalse
+%</marginnote>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*marvosym>
+% \fi
+%
+% \part{lwarp-marvosym.sty}
+%
+% \section{marvosym}
+%
+% \credits{Thomas Henlich, Mojca Miklavec}
+%
+% \DescribePackage{marvosym}
+% \pkg{marvosym} is patched for use by \pkg{lwarp}.
+%
+% Hashed inline images are used, as there may not be Unicode support for all icons.
+%
+% \changes{v0.67}{2019/02/23}{\pkg{marvosym}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{marvosym}[2011/07/20]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand{\mvchr}[1]{%
+ \begin{lateximage}*[(symbol #1)][marvosym #1]%
+ \mvs\char#1%
+ \end{lateximage}%
+}
+
+\renewcommand{\textmvs}[1]{%
+ \begin{lateximage}%
+ \mvs #1%
+ \end{lateximage}%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</marvosym>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*mathtools>
+% \fi
+%
+% \part{lwarp-mathtools.sty}
+%
+% \section{mathtools}
+%
+% \credits{Morten Høgholm, Lars Madsen}
+%
+% \DescribePackage{mathtools}
+% \pkg{mathtools} is patched for use by \pkg{lwarp}.
+%
+% \optn{showonlyrefs} and \optn{mathic} are disabled.
+% \trouble[numbering, italics]{mathtools=\pkg{mathtools}}
+%
+% \changes{v0.70}{2019/03/28}{\pkg{mathtools}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{mathtools}[2018/01/08]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\RequirePackage{graphicx}
+% \end{macrocode}
+% \begin{macrocode}
+\MHInternalSyntaxOn
+% \end{macrocode}
+%
+% Forces \optn{showonlyrefs} off because \pkg{lwarp} uses \pkg{cleveref},
+% which is not compatible with \optn{showonlyrefs}.
+% \begin{macrocode}
+\renewcommand*\MT_showonlyrefs_true:{\MT_showonlyrefs_false:}
+\mathtoolsset{showonlyrefs=false}
+% \end{macrocode}
+%
+% Forces math italic correction off.
+% Not patched for \pkg{lwarp}.
+% \begin{macrocode}
+\renewcommand*{\MT_mathic_true:}{\MT_mathic_false:}
+\mathtoolsset{mathic=false}
+% \end{macrocode}
+% \begin{macrocode}
+\MHInternalSyntaxOff
+% \end{macrocode}
+%
+% \iffalse
+%</mathtools>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*mcaption>
+% \fi
+
+% \part{lwarp-mcaption.sty}
+
+% \section{mcaption}
+%
+% \credits{Stephan Hennig}
+%
+% \DescribePackage{mcaption}
+% \pkg{mcaption} is ignored.
+%
+% \changes{v0.22}{2017/03/01}{\pkg{mcaption}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-mcaption}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{mcaption}[2009/03/13]
+% \end{macrocode}
+
+% \begin{macrocode}
+\newenvironment{margincap}{}{}
+\newcommand*{\margincapalign}{}
+\newlength{\margincapsep}
+% \end{macrocode}
+
+% \iffalse
+%</mcaption>
+% \fi
+%
+%
+%
+% \addtocontents{toc}{\protect\setcounter{tocdepth}{2}}
+%
+%
+%
+% \iffalse
+%<*mdframed>
+% \fi
+
+% \part{lwarp-mdframed.sty}
+
+% \section{mdframed}
+% \label{sec:mdframed}
+%
+% \credits{Marco Daniel, Elke Schubert}
+%
+% \DescribePackage{mdframed}
+% \pkg{mdframed} is loaded with options forced to
+% |framemethod=none|.
+%
+% \changes{v0.17}{2016/04/14}{\pkg{mdframed}: Added.}
+%
+%
+% \subsection{Limitations}
+%
+% \limitsmdframed
+%
+% Pre-existing hooks are used to patch extra functions before and after the frames.
+%
+%
+% \subsection{Package loading}
+%
+% \codehtml
+% \begin{macrocode}
+\RequirePackage{xcolor}% for \convertcolorspec
+
+\LWR@ProvidesPackageDrop{mdframed}[2013/07/01]
+% \end{macrocode}
+%
+%
+% Do not require \tikz{} or pstricks:
+% \begin{macrocode}
+\LWR@origRequirePackage[framemethod=none]{mdframed}
+% \end{macrocode}
+%
+%
+% \subsection{Patches}
+%
+% Patch to remove \PDF\ formatting and add \HTML\ tags:
+% \begin{macrocode}
+\AtBeginDocument{
+\def\mdf@trivlist#1{%
+ \edef\mdf@temp{%
+% \topsep=\the\topsep\relax%
+% \partopsep=\the\partopsep\relax%
+% \parsep=\the\parsep\relax%
+ }%
+% \setlength{\topsep}{#1}%
+% \topskip\z@%
+% \partopsep\z@%
+% \parsep\z@%
+% \@nmbrlistfalse%
+% \@trivlist%
+% \labelwidth\z@%
+% \leftmargin\z@%
+% \itemindent\z@%
+ \let\@itemlabel\@empty%
+ \def\makelabel##1{##1}%
+% \item\relax\mdf@temp\relax%
+}
+
+\renewcommand*{\endmdf@trivlist}{%
+\LWR@traceinfo{endmdf@trivlist}%
+% \endtrivlist%
+\LWR@listend%
+}
+}% AtBeginDocument
+% \end{macrocode}
+%
+%
+% \subsection{Initial setup}
+%
+% ^^A \DescribeMacro{\mdfsetup}
+% To handle \CSS\ and paragraphs,
+% patch code at start and end of environment and contents.
+% \cs{LWR@print@raggedright} helps avoid hyphenation.
+%
+% \changes{v0.25}{2017/03/16}{\pkg{mdframed}: Help avoid hyphenation.}
+%
+% \begin{macrocode}
+\mdfsetup{
+startcode={\LWR@mdframedstart\LWR@print@raggedright},
+endcode={\LWR@mdframedend},
+startinnercode={\LWR@startpars\LWR@print@raggedright},
+endinnercode={\LWR@stoppars},
+}
+% \end{macrocode}
+%
+%
+% \subsection{Color and length \HTML\ conversion}
+%
+% \begin{noindmacro}{\LWR@mdfprintcolor} \marg{mdfcolorkey}
+%
+% Given the \pkg{mdframed} key, print the color.
+% \begin{macrocode}
+\newcommand*{\LWR@mdfprintcolor}[1]{%
+\convertcolorspec{named}{\@nameuse{mdf@#1}}{HTML}\LWR@tempcolor%
+\LWR@origpound\LWR@tempcolor
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\LWR@mdfprintlength} \marg{mdflengthkey}
+%
+% Given the \pkg{mdframed} key, print the length.
+%
+% \changes{v0.63}{2018/12/02}{\pkg{mdframed}: Avoid thin rules.}
+% \begin{macrocode}
+\newcommand*{\LWR@mdfprintlength}[1]{%
+\LWR@forceminwidth{\@nameuse{mdf@#1@length}}%
+\LWR@printlength{\LWR@atleastonept}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \subsection{Environment encapsulation}
+%
+% \begin{noindmacro}{\LWR@mdframedstart}
+% Actions before an mdframe starts.
+%
+% Encapsulate a frame inside a \element{div} of the desired |class|.
+% \begin{macrocode}
+\newcommand*{\LWR@mdframedstart}{%
+\LWR@traceinfo{LWR@mdframedstart start}%
+% \end{macrocode}
+% Turn off paragraph handling during the generation of
+% the encapsulating tags:
+% \begin{macrocode}
+\LWR@stoppars%
+% \end{macrocode}
+% Open a \element{div} and with custom \attribute{class} and custom \attribute{style}.
+% A \env{BlockClass} environment is not used because this \element{div} is
+% created by the \pkg{mdframed} \optn{startcode} and \optn{endcode} settings,
+% which do not properly nest the \element{div} inside the \env{mdframed} environment.
+% \begin{macrocode}
+\LWR@htmltagc{div class="%
+mdframed%
+\ifdefstring{\LWR@mdthisenv}{mdframed}{}{ \LWR@mdthisenv}%
+" \LWR@orignewline
+style=" \LWR@orignewline
+% \end{macrocode}
+% Convert and print the background color:
+% \begin{macrocode}
+background: \LWR@mdfprintcolor{backgroundcolor} ; \LWR@orignewline
+% \end{macrocode}
+% Convert and print the border color and width:
+% \begin{macrocode}
+border: \LWR@mdfprintlength{linewidth} solid
+\LWR@mdfprintcolor{linecolor} ; \LWR@orignewline
+% \end{macrocode}
+% Convert and print the border radius:
+% \begin{macrocode}
+border-radius: \LWR@mdfprintlength{roundcorner} ; \LWR@orignewline
+% \end{macrocode}
+% Convert and print the shadow:
+% \begin{macrocode}
+\ifbool{mdf@shadow}{%
+ box-shadow:
+ \LWR@mdfprintlength{shadowsize}
+ \LWR@mdfprintlength{shadowsize}
+ \LWR@mdfprintlength{shadowsize}
+ \LWR@mdfprintcolor{shadowcolor} ;
+}
+{box-shadow: none ;}
+\LWR@orignewline
+% \end{macrocode}
+% \begin{macrocode}
+"}
+% \LWR@htmldivclass{\LWR@mdthisenv}
+% \end{macrocode}
+% \env{mdframed} environment may not work with the \HTML\ versions of the following,
+% so restore them to their originals while inside \env{mdframed}:
+% \begin{macrocode}
+\LWR@select@print@hspace%
+\renewcommand*{\rule}{\LWR@print@rule}
+\LetLtxMacro\makebox\LWR@print@makebox%
+% \end{macrocode}
+% \begin{macrocode}
+\LWR@startpars%
+\LWR@traceinfo{LWR@mdframedstart done}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindmacro}{\LWR@mdframedend}
+% Actions after an mdframe ends.
+%
+% After closing the \element{div}, globally restore to the default environment type:
+% \begin{macrocode}
+\newcommand*{\LWR@mdframedend}{
+\LWR@traceinfo{LWR@mdframedend start}%
+% \end{macrocode}
+% Close the custom \element{div}:
+% \begin{macrocode}
+\LWR@htmldivclassend{\LWR@mdthisenv}
+% \end{macrocode}
+% Reset future custom class to the default:
+% \begin{macrocode}
+\gdef\LWR@mdthisenv{mdframed}
+% \end{macrocode}
+% Resume paragraph handling:
+% \begin{macrocode}
+\LWR@startpars%
+\LWR@traceinfo{LWR@mdframedend done}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \subsection{Mdframed environment}
+%
+% \changes{v0.46}{2018/01/21}{\pkg{mdframed}: Fixes for \SVG\ math or \env{lateximage} in title.}
+% \begin{macrocode}
+\renewenvironment{mdframed}[1][]{%
+ \color@begingroup%
+ \mdfsetup{userdefinedwidth=\linewidth,#1}%
+ \mdf@startcode%
+ \mdf@preenvsetting%
+ \ifdefempty{\mdf@firstframetitle}{}%
+ {\let\mdf@frametitlesave\mdf@frametitle%
+ \let\mdf@frametitle\mdf@firstframetitle%
+ }%
+ \ifvmode\nointerlineskip\fi%
+ \ifdefempty{\mdf@frametitle}{}%
+ {\mdfframedtitleenv{\mdf@frametitle}%
+% \mdf@@frametitle@use%
+ }%
+ \mdf@trivlist{\mdf@skipabove@length}%%
+ \mdf@settings%
+% \mdf@lrbox{\mdf@splitbox@one}%
+% \mdf@startinnercode%
+ }%
+ {%
+% \mdf@@ignorelastdescenders%
+ \par%
+% \unskip\ifvmode\nointerlineskip\hrule \@height\z@ \@width\hsize\fi%%
+ \ifmdf@footnoteinside%
+ \def\mdf@reserveda{%
+ \mdf@footnoteoutput%
+% \mdf@endinnercode%
+% \endmdf@lrbox%
+% \ifdefempty{\mdf@frametitle}{}%
+% {\mdfframedtitleenv{\mdf@frametitle}\mdf@@frametitle@use}%
+% \detected@mdf@put@frame
+ }%
+ \else%
+ \def\mdf@reserveda{%
+% \mdf@endinnercode%
+% \endmdf@lrbox%
+% \ifdefempty{\mdf@frametitle}{}%
+% {\mdfframedtitleenv{\mdf@frametitle}\mdf@@frametitle@use}%
+% \detected@mdf@put@frame%
+ \mdf@footnoteoutput%
+ }%
+ \fi%
+ \mdf@reserveda%
+ \aftergroup\endmdf@trivlist%
+ \color@endgroup%
+ \mdf@endcode%
+}
+% \end{macrocode}
+%
+% \changes{v0.46}{2018/01/21}{\pkg{mdframed}: Fixes for footnotes.}
+% \begin{noindmacro}{\mdf@footnoteoutput}
+% \begin{macrocode}
+\renewrobustcmd*\mdf@footnoteoutput{%
+ \LWR@printpendingmpfootnotes%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \subsection{Titles and subtitles}
+%
+% \begin{noindmacro}{\mdfframedtitleenv} \marg{title}
+%
+% Place the title inside a \element{div} of class \attribute{mdframedtitle}:
+% \begin{macrocode}
+\newlength{\LWR@titleroundcorner}
+
+\renewrobustcmd\mdfframedtitleenv[1]{%
+\LWR@traceinfo{LWR@mdframedtitleenv start}%
+% \end{macrocode}
+% Open a \element{div} with a custom |class| and custom |style|:
+% \changes{v0.63}{2018/12/01}{Improved titles.}
+% \begin{macrocode}
+\begin{BlockClass}[%
+% \end{macrocode}
+% Convert and print the title background color:
+% \begin{macrocode}
+background:
+\LWR@mdfprintcolor{frametitlebackgroundcolor}
+; \LWR@orignewline
+% \end{macrocode}
+% Convert and print the title rule:
+% \begin{macrocode}
+\ifbool{mdf@frametitlerule}{%
+ border-bottom:
+ \LWR@mdfprintlength{frametitlerulewidth}
+ solid
+ \LWR@mdfprintcolor{frametitlerulecolor}
+ ; \LWR@orignewline
+}{}%
+% \end{macrocode}
+% ^^A The title's top border radius is adjusted for the line width:
+% ^^A \begin{macrocode}
+% ^^A border-radius:
+% ^^A \setlength{\LWR@titleroundcorner}
+% ^^A {\maxof{\mdf@roundcorner@length-\mdf@linewidth@length}{0pt}}
+% ^^A \LWR@printlength{\LWR@titleroundcorner}
+% ^^A \LWR@printlength{\LWR@titleroundcorner}
+% ^^A 0pt 0pt
+% ^^A \LWR@orignewline
+% ^^A \end{macrocode}
+% Finish the custom style and the opening \element{div} tag:
+% \begin{macrocode}
+]{mdframedtitle}%
+% \end{macrocode}
+% Print the title inside the \element{div}:
+% \changes{v0.63}{2018/12/02}{\pkg{mdframed}: Improved font control.}
+% \begin{macrocode}
+\mdf@frametitlefont{\LWR@textcurrentfont{#1}}%
+% \end{macrocode}
+% Close the \element{div}:
+% \begin{macrocode}
+\end{BlockClass}%
+\LWR@traceinfo{LWR@mdframedtitleenv end}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindmacro}{\LWR@mdfsubtitlecommon}
+% \marg{sub -or- subsub} \oarg{options} \marg{title}
+%
+% Common code for \cs{LWR@mdfsubtitle} and \cs{LWR@mdfsubsubtitle}.
+%
+% Encapsulate the subtitle inside a \element{div} of class |mdframedsubtitle|:
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@mdfsubtitlecommon}{m o m}
+{% the following empty line is required
+
+\LWR@traceinfo{LWR@mdframedsubtitlecommon start}%
+% \end{macrocode}
+% Open a \element{div} with a custom \attribute{class} and custom \attribute{style}:
+% \changes{v0.63}{2018/12/01}{Improved titles.}
+% \begin{macrocode}
+\begin{BlockClass}[%
+% \end{macrocode}
+% Convert and print the background color:
+% \begin{macrocode}
+background:
+\LWR@mdfprintcolor{#1titlebackgroundcolor}
+; \LWR@orignewline
+% \end{macrocode}
+% Convert and print the above line:
+% \begin{macrocode}
+\ifbool{mdf@#1titleaboveline}{%
+ border-top:
+ \LWR@mdfprintlength{#1titleabovelinewidth}
+ solid
+ \LWR@mdfprintcolor{#1titleabovelinecolor}
+ ; \LWR@orignewline
+}{}%
+% \end{macrocode}
+% Convert and print the below line:
+% \begin{macrocode}
+\ifbool{mdf@#1titlebelowline}{%
+ border-bottom:
+ \LWR@mdfprintlength{#1titlebelowlinewidth}
+ solid
+ \LWR@mdfprintcolor{#1titlebelowlinecolor}
+ ; \LWR@orignewline
+}{}%
+% \end{macrocode}
+% Finish the custom style and the opening \element{div} tag:
+% \begin{macrocode}
+]{mdframed#1title}%
+% \end{macrocode}
+% Perform the original subtitle action:
+% \changes{v0.63}{2018/12/02}{\pkg{mdframed}: Improved font control.}
+% \begin{macrocode}
+\IfNoValueTF{#2}
+{\@nameuse{LWR@origmdf#1title}{\csuse{mdf@#1titlefont}{\LWR@textcurrentfont{#3}}}}%
+{\@nameuse{LWR@origmdf#1title}[#2]{\csuse{mdf@#1titlefont}{\LWR@textcurrentfont{#3}}}}%
+% \end{macrocode}
+% Close the \element{div}:
+% \begin{macrocode}
+\end{BlockClass}%
+\LWR@traceinfo{LWR@mdframedsubtitlecommon end}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\LWR@mdfsubtitle} \oarg{options} \marg{title}
+% \begin{macrocode}
+\newcommand*{\LWR@mdfsubtitle}{%
+\LWR@mdfsubtitlecommon{sub}%
+}
+\let\mdfsubtitle\LWR@mdfsubtitle
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindmacro}{\LWR@mdfsubsubtitle} \oarg{options} \marg{title}
+% \begin{macrocode}
+\newcommand*{\LWR@mdfsubsubtitle}{%
+\LWR@mdfsubtitlecommon{subsub}%
+}
+\let\mdfsubsubtitle\LWR@mdfsubsubtitle
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \subsection{New environments}
+%
+% \begin{noindmacro}{\LWR@mdthisenv}
+% Stores the environment of the frame about to be created:
+% \begin{macrocode}
+\newcommand*{\LWR@mdthisenv}{mdframed}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindmacro}{\newmdenv} \oarg{options} \marg{env-name}
+%
+% Modified from the original to remember the environment.
+% \begin{macrocode}
+\renewrobustcmd*\newmdenv[2][]{%
+\newenvironment{#2}%
+{%
+\mdfsetup{#1}%
+\renewcommand*{\LWR@mdthisenv}{md#2}%
+\begin{mdframed}%
+}
+{\end{mdframed}}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\surroundwithmdframed} \oarg{options} \marg{environment}
+%
+% Modified from the original to remember the environment.
+% \begin{macrocode}
+\renewrobustcmd*{\surroundwithmdframed}[2][]{%
+\BeforeBeginEnvironment{#2}{%
+\renewcommand*{\LWR@mdthisenv}{md#2}%
+\begin{mdframed}[#1]}%
+\AfterEndEnvironment{#2}{\end{mdframed}}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindmacro}{\mdtheorem} \oarg{mdframed-options} \marg{envname}
+% \oarg{numberedlike} \marg{caption} \oarg{within}
+%
+% Modified from the original to remember the environment.
+%
+% \changes{v0.34}{2017/08/05}{\pkg{mdframed}: Improved \env{mdtheorem} patch.}
+% \changes{v0.63}{2018/12/02}{\pkg{mdframed}: Improved font control.}
+%
+% \begin{macrocode}
+\DeclareDocumentCommand{\mdtheorem}{ O{} m o m o }%
+ {\ifcsdef{#2}%
+ {\mdf@PackageWarning{Environment #2 already exits\MessageBreak}}%
+ {%
+ \IfNoValueTF {#3}%
+ {%#3 not given -- number relationship
+ \IfNoValueTF {#5}%
+ {%#3+#5 not given
+ \@definecounter{#2}%
+ \expandafter\xdef\csname the#2\endcsname{\@thmcounter{#2}}%
+ \newenvironment{#2}[1][]{%
+ \refstepcounter{#2}%
+ \ifstrempty{##1}%
+ {\let\@temptitle\relax}%
+ {%
+ \def\@temptitle{\mdf@theoremseparator%
+ \mdf@theoremspace%
+ \mdf@theoremtitlefont%
+ \LWR@textcurrentfont{##1}}% lwarp
+ \mdf@thm@caption{#2}{{#4}{\csname the#2\endcsname}{##1}}%
+ }%
+ \begin{mdframed}[#1,frametitle={\strut#4\ \csname the#2\endcsname%
+ \@temptitle}]}%
+ {\end{mdframed}}%
+ \newenvironment{#2*}[1][]{%
+ \ifstrempty{##1}{\let\@temptitle\relax}{\def\@temptitle{:\ ##1}}%
+ \begin{mdframed}[#1,frametitle={\strut#4\@temptitle}]}%
+ {\end{mdframed}}%
+ }%
+ {%#5 given -- reset counter
+ \@definecounter{#2}\@newctr{#2}[#5]%
+ \expandafter\xdef\csname the#2\endcsname{\@thmcounter{#2}}%
+ \expandafter\xdef\csname the#2\endcsname{%
+ \expandafter\noexpand\csname the#5\endcsname \@thmcountersep%
+ \@thmcounter{#2}}%
+ \newenvironment{#2}[1][]{%
+ \refstepcounter{#2}%
+ \ifstrempty{##1}%
+ {\let\@temptitle\relax}%
+ {%
+ \def\@temptitle{\mdf@theoremseparator%
+ \mdf@theoremspace%
+ \mdf@theoremtitlefont%
+ \LWR@textcurrentfont{##1}}% lwarp
+ \mdf@thm@caption{#2}{{#4}{\csname the#2\endcsname}{##1}}%
+ }
+ \begin{mdframed}[#1,frametitle={\strut#4\ \csname the#2\endcsname%
+ \@temptitle}]}%
+ {\end{mdframed}}%
+ \newenvironment{#2*}[1][]{%
+ \ifstrempty{##1}%
+ {\let\@temptitle\relax}%
+ {%
+ \def\@temptitle{\mdf@theoremseparator%
+ \mdf@theoremspace%
+ \mdf@theoremtitlefont%
+ \LWR@textcurrentfont{##1}}% lwarp
+ \mdf@thm@caption{#2}{{#4}{\csname the#2\endcsname}{##1}}%
+ }%
+ \begin{mdframed}[#1,frametitle={\strut#4\@temptitle}]}%
+ {\end{mdframed}}%
+ }%
+ }%
+ {%#3 given -- number relationship
+ \global\@namedef{the#2}{\@nameuse{the#3}}%
+ \newenvironment{#2}[1][]{%
+ \refstepcounter{#3}%
+ \ifstrempty{##1}%
+ {\let\@temptitle\relax}%
+ {%
+ \def\@temptitle{\mdf@theoremseparator%
+ \mdf@theoremspace%
+ \mdf@theoremtitlefont%
+ \LWR@textcurrentfont{##1}}% lwarp
+ \mdf@thm@caption{#2}{{#4}{\csname the#2\endcsname}{##1}}%
+ }
+ \begin{mdframed}[#1,frametitle={\strut#4\ \csname the#2\endcsname%
+ \@temptitle}]}%
+ {\end{mdframed}}%
+ \newenvironment{#2*}[1][]{%
+ \ifstrempty{##1}{\let\@temptitle\relax}{\def\@temptitle{:\ ##1}}%
+ \begin{mdframed}[#1,frametitle={\strut#4\@temptitle}]}%
+ {\end{mdframed}}%
+ }%
+ \BeforeBeginEnvironment{#2}{\renewcommand*{\LWR@mdthisenv}{md#2}}% lwarp
+ \BeforeBeginEnvironment{#2*}{\renewcommand*{\LWR@mdthisenv}{md#2}}% lwarp
+ }%
+ }
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindmacro}{\newmdtheoremenv} \oarg{1: mdframed-options} \marg{2: envname}
+% \oarg{3: numberedlike} \marg{4: caption} \oarg{5: within}
+%
+% Modified from the original to remember the environment.
+% \begin{macrocode}
+\DeclareDocumentCommand\newmdtheoremenv{O{} m o m o }{%
+ \ifboolexpr{ test {\IfNoValueTF {#3}} and test {\IfNoValueTF {#5}} }%
+ {\newtheorem{#2}{#4}}%
+ {%
+ \IfValueT{#3}{\newtheorem{#2}[#3]{#4}}%
+ \IfValueT{#5}{\newtheorem{#2}{#4}[#5]}%
+ }%
+\BeforeBeginEnvironment{#2}{%
+\renewcommand*{\LWR@mdthisenv}{md#2}%
+\begin{mdframed}[#1]}%
+\AfterEndEnvironment{#2}{%
+\end{mdframed}}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \iffalse
+%</mdframed>
+% \fi
+%
+%
+%
+% \addtocontents{toc}{\protect\setcounter{tocdepth}{0}}
+%
+%
+%
+% \iffalse
+%<*media9>
+% \fi
+%
+% \part{lwarp-media9.sty}
+%
+% \section{media9}
+%
+% \DescribePackage{media9}
+% \pkg{media9} is emulated.
+%
+% \limitsmultimedia
+%
+% Many special characters are converted to regular catcode 12 characters
+% \watchout[\& in a URL]
+% for use inside a \URL.
+% \& is used in the flash variables fields, which are split with
+% \pkg{xparse} \cs{SplitList}, which does not seem to work with a
+% catcode 12 divider token, so \& is not
+% converted to catcode 12, and will not work in a \URL\ with \pkg{media9}.
+% Using \& in a \URL\ in a \optn{flashvars} field may also cause parsing problems
+% with print output, as well.
+%
+%
+% \changes{v0.71}{2018/04/23}{\pkg{media9}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{media9}[2019/02/21]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LWR@origRequirePackage{lwarp-common-multimedia}
+
+\RequirePackage{xkeyval}
+% \end{macrocode}
+%
+% \begin{noindmacro}{\addmediapath} \marg{path}
+%
+% Supported.
+% \begin{macrocode}
+\newcommand*{\LWR@medianine@path}{}
+
+\newcommand*{\addmediapath}[1]{\appto\LWR@medianine@path{{#1}}}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% The options and poster text are reused in several places.
+% \begin{macrocode}
+\newcommand*{\LWR@medianine@postertext}{}
+\newcommand*{\LWR@medianine@options}{}
+% \end{macrocode}
+%
+% Each \optn{addresource} can generate a multimedia object.
+% \begin{macrocode}
+\define@key{LWR@medianine}{addresource}{%
+ \expandafter\LWR@multimedia\expandafter[\LWR@medianine@options]
+ {\LWR@medianine@postertext}
+ {#1}
+}
+% \end{macrocode}
+%
+% Each \optn{flashvars} \optn{source} can generate a multimedia object.
+% \begin{macrocode}
+\newcommand*{\LWR@medianine@flashvarsb}[1]{%
+ \IfBeginWith{#1}{source=}{%
+ \StrGobbleLeft{#1}{7}[\LWR@tempone]%
+ \expandafter\LWR@multimedia\expandafter[\LWR@medianine@options]%
+ {\LWR@medianine@postertext}%
+ {\LWR@tempone}%
+ }{}%
+ \IfBeginWith{#1}{src=}{%
+ \StrGobbleLeft{#1}{4}[\LWR@tempone]%
+ \expandafter\LWR@multimedia\expandafter[\LWR@medianine@options]%
+ {\LWR@medianine@postertext}%
+ {\LWR@tempone}%
+ }{}%
+}
+
+\NewDocumentCommand{\LWR@medianine@flashvars}{ >{\SplitList{&}} m }{%
+ \ProcessList {#1}{\LWR@medianine@flashvarsb}%
+}
+
+\define@key{LWR@medianine}{flashvars}{%
+ \LWR@medianine@flashvars{#1}%
+}
+% \end{macrocode}
+%
+% \begin{noindmacro}{\includemedia} \oarg{options} \marg{poster text} \marg{file or \URL}
+% \begin{macrocode}
+\newcommand*{\LWR@includemediab}[3][]{%
+ \let\input@path\LWR@medianine@path%
+ \renewcommand*{\LWR@medianine@options}{#1}%
+ \renewcommand*{\LWR@medianine@postertext}{#2}%
+ \setkeys*{LWR@medianine}{#1}%
+ \IfBeginWith{#3}{http}{\LWR@multimedia[#1]{#2}{#3}}{%
+ \IfBeginWith{#3}{HTTP}{\LWR@multimedia[#1]{#2}{#3}}{%
+ \IfBeginWith{#3}{ftp}{\LWR@multimedia[#1]{#2}{#3}}{%
+ \IfBeginWith{#3}{FTP}{\LWR@multimedia[#1]{#2}{#3}}{%
+ }}}}%
+ \endgroup%
+}
+
+\newrobustcmd*{\includemedia}{%
+ \begingroup%
+ \catcode`\#=12%
+ \catcode`\%=12%
+% \catcode`\&=12% left alone for splitting flash variables
+ \catcode`\~=12%
+ \catcode`\_=12%
+ \LWR@includemediab%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\mediabutton} \oarg{options} \marg{text}
+%
+% Ignored.
+% \begin{macrocode}
+\newcommand*{\mediabutton}[2][]{}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \iffalse
+%</media9>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*memhfixc>
+% \fi
+%
+% \part{lwarp-memhfixc.sty}
+%
+% \section{memhfixc}
+%
+% \DescribePackage{memhfixc}
+% \pkg{memhfixc} is ignored.
+%
+% \changes{v0.45}{2018/01/03}{\pkg{memhfixc}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{memhfixc}[2013/05/30]
+% \end{macrocode}
+%
+% \iffalse
+%</memhfixc>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*metalogo>
+% \fi
+%
+% \part{lwarp-metalogo.sty}
+%
+% \section{metalogo}
+%
+% \credits{Andrew Gilbert Moschou}
+%
+% \DescribePackage{metalogo}
+% \pkg{metalogo} is used in print mode, and emulated in \HTML.
+%
+% \changes{v0.38}{2017/08/25}{\pkg{metalogo}: Added.}
+% \changes{v0.70}{2019/03/29}{\pkg{metalogo}: Used in print mode.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{metalogo}[2010/05/29]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@setlogokern}[2]{}
+\newcommand*{\LWR@HTML@setlogodrop}[2][XeTeX]{}
+\newcommand*{\LWR@HTML@setLaTeXa}[1]{}
+\newcommand*{\LWR@HTML@setLaTeXee}[1]{}
+\newcommand*{\LWR@HTML@seteverylogo}[1]{}
+\newcommand*{\LWR@HTML@everylogo}[1]{}
+
+\LWR@formatted{setlogokern}
+\LWR@formatted{setlogodrop}
+\LWR@formatted{setLaTeXa}
+\LWR@formatted{setLaTeXee}
+\LWR@formatted{seteverylogo}
+\LWR@formatted{everylogo}
+% \end{macrocode}
+%
+% \iffalse
+%</metalogo>
+% \fi
+%
+%
+%
+% \iffalse
+%<*metalogox>
+% \fi
+%
+% \part{lwarp-metalogox.sty}
+%
+% \section{metalogox}
+%
+% \credits{Brian Dunn}
+%
+% \DescribePackage{metalogox}
+% \pkg{metalogox} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.70}{2019/03/30}{\pkg{metalogox}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{metalogox}[2019/01/20]
+% \end{macrocode}
+%
+% \cs{AtBeginDocument}, adjust the logo setting according to the font
+% which is active at that moment.
+% \begin{macrocode}
+\AtBeginDocument{
+ \let\LWR@metalogox@currentformatting\LWR@formatting
+ \renewcommand*{\LWR@formatting}{print}%
+ \autoadjustlogos*
+ \let\LWR@formatting\LWR@metalogox@currentformatting
+}
+% \end{macrocode}
+%
+% \iffalse
+%</metalogox>
+% \fi
+%
+%
+%
+% \iffalse
+%<*mhchem>
+% \fi
+%
+% \part{lwarp-mhchem.sty}
+
+% \section{mhchem}
+% \label{sec:mhchem}
+%
+% \credits{Martin Hensel}
+%
+% \DescribePackage{mhchem}
+% \pkg{mhchem} is patched for use by \pkg{lwarp}.
+%
+% Without \brand{MathJax}, \pkg{mhchem} expressions are converted to \SVG\ math.
+% \margintag{without \brand{MathJax}}
+% Inline expressions use hashed filenames to allow reuse,
+% and assume that any \pkg{mhchem} options are global.
+%
+% For \brand{MathJax}, the \pkg{mhchem} extension is used if
+% \trouble{MathJax=\brand{MathJax}>mhchem=\pkg{mhchem}}
+% \trouble{mhchem=\pkg{mhchem}>MathJax=\brand{MathJax}}
+% \margintag{\brand{MathJax} with \pkg{mhchem} extension}
+% the \pkg{mhchem} expression is used inside a math expression:
+% \begin{sourceverb}
+% $\ce{C6H5-CHO}$
+% \end{sourceverb}
+%
+% If \emph{not} used inside a math expression, \pkg{lwarp} converts standalone \pkg{mhchem}
+% \marginpar{not inside math}
+% expressions into \SVG\ math images.
+%
+% If the \brand{MathJax} \pkg{mhchem} extension is not used,
+% \margintag{\brand{MathJax} without \pkg{mhchem} extension}
+% expressions inside math must be placed
+% between \cs{displaymathother} and \cs{displaymathnormal}:
+% \begin{sourcedisplay}
+% \cs{displaymathother} \\
+% \cs{[} \cs{ce}\{ \dots\ \} \cs{]} \qquad \dots \qquad \$ \cs{ce} \{ \dots\ \} \$ \\
+% \cs{displaymathnormal}
+% \end{sourcedisplay}
+%
+% When producing \HTML\ output without the \brand{MathJax} \pkg{mhchem} extension,
+% \pkg{lwarp} does not support
+% \trouble[nested math]{mhchem=\pkg{mhchem}>nested dollar signs}
+% the use of nested dollar signs in \pkg{mhchem} expressions.
+% \gindex{array>mhchem=\pkg{mhchem}}
+% \gindex{math>mhchem=\pkg{mhchem}}
+%
+% For some examples from the \pkg{mhchem} manual, change as follows:
+% \begin{Verbatim}[gobble=2,frame=leftline, xleftmargin=.5in,obeytabs,tabsize=4]
+% $\ce{NaOH(aq,$\infty$)}$ % old
+% $\ce{NaOH(aq,\infty)}$ % new
+%
+% $\ce{Fe(CN)_{$\frac{6}{2}}$}$ % old
+% $\ce{Fe(CN)_{\frac{6}{2}}}$ % new
+%
+% $\ce{NO_$x$}$ % old
+% $\ce{NO_x}$ % new
+%
+% $\ce{NO_${x}$}$ % old
+% $\ce{NO_{x}}$ % new
+%
+% $\ce{$cis${-}[PtCl2(NH3)2]}$ % old
+% $\ce{\mathit{cis}{-}[PtCl2(NH3)2]}$ % new
+% \end{Verbatim}
+%
+% \changes{v0.51}{2018/03/04}{\pkg{mhchem}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{mhchem}[2018/06/22]
+% \end{macrocode}
+
+% The original definition of \cs{ce}:
+% \begin{macrocode}
+\LetLtxMacro\LWR@mhchem@origce\ce
+% \end{macrocode}
+
+% The new definition, called from the new \cs{ce} after math shift is set.
+% The starred \env{lateximage} uses a hashed filename for the \SVG\ image.
+% The \attribute{alt} tag is set to the \pkg{mhchem} expression.
+% \begin{macrocode}
+\newcommand{\LWR@mhchem@HTML@ce}[1]{%
+\begin{lateximage}*[\textbackslash{}ce\{\LWR@HTMLsanitize{#1}\}]%
+\LWR@mhchem@origce{#1}%
+\end{lateximage}%
+\endgroup%
+\addtocounter{LWR@mhchem@cedepth}{-1}%
+}
+% \end{macrocode}
+
+% Only set math shift if outer depth:
+% \begin{macrocode}
+\newcounter{LWR@mhchem@cedepth}
+\setcounter{LWR@mhchem@cedepth}{0}
+% \end{macrocode}
+
+% The new \cs{ce}. Sets math shift then continues.
+% \begin{macrocode}
+\renewcommand{\ce}{%
+\begingroup%
+\ifnumequal{\value{LWR@mhchem@cedepth}}{0}{%
+ \catcode`\$=3% math shift
+}{}%
+\addtocounter{LWR@mhchem@cedepth}{1}%
+\LWR@mhchem@HTML@ce%
+}
+% \end{macrocode}
+
+% The original definition of \cs{cesplit}:
+% \begin{macrocode}
+\LetLtxMacro\LWR@mhchem@origcesplit\cesplit
+% \end{macrocode}
+
+% The new definition, called from the new \cs{cesplit} after math shift is set.
+% The starred \env{lateximage} uses a hashed filename for the \SVG\ image.
+% The \attribute{alt} tag is set to the \pkg{mhchem} expression.
+% \begin{macrocode}
+\newcommand*{\LWR@mhchem@HTML@cesplit}[2]
+{%
+\begin{lateximage}*[\textbackslash{}cesplit\{\LWR@HTMLsanitize{#2}\}]%
+\LWR@mhchem@origcesplit{#1}{#2}%
+\end{lateximage}%
+\endgroup%
+}
+% \end{macrocode}
+
+% Only set math shift if outer depth:
+% \begin{macrocode}
+\newcounter{LWR@mhchem@cesplitdepth}
+\setcounter{LWR@mhchem@cesplitdepth}{0}
+% \end{macrocode}
+
+% The new \cs{cesplit}. Sets math shift then continues.
+% \begin{macrocode}
+\renewcommand{\cesplit}{%
+\begingroup%
+\ifnumequal{\value{LWR@mhchem@cesplitdepth}}{0}{%
+ \catcode`\$=3% math shift
+}{}%
+\addtocounter{LWR@mhchem@cesplitdepth}{1}%
+\LWR@mhchem@HTML@cesplit%
+}
+% \end{macrocode}
+
+% Resore originals inside a \env{lateximage}:
+% \begin{macrocode}
+\appto\LWR@restoreorigformatting{%
+\LetLtxMacro\ce\LWR@mhchem@origce%
+\LetLtxMacro\cesplit\LWR@mhchem@origcesplit%
+}
+% \end{macrocode}
+
+% \iffalse
+%</mhchem>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*microtype>
+% \fi
+
+% \part{lwarp-microtype.sty}
+
+% \section{microtype}
+%
+% \credits{R Schlicht}
+%
+% \DescribePackage{microtype}
+% \pkg{microtype} is pre-loaded by \pkg{lwarp}.
+% All user options and macros are ignored and disabled.
+
+% \changes{v0.20}{2017/01/03}{\pkg{microtype}: User-interface emulated.}
+% \changes{v0.27}{2017/04/01}{\pkg{microtype}: Fix with Xe\LaTeX, \LuaLaTeX.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-microtype}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{microtype}[2018/01/14]
+% \end{macrocode}
+
+% \begin{macrocode}
+\DeclareDocumentCommand{\DeclareMicrotypeSet}{o m m}{}
+\DeclareDocumentCommand{\UseMicrotypeSet}{o m}{}
+\DeclareDocumentCommand{\DeclareMicrotypeSetDefault}{o m}{}
+\DeclareDocumentCommand{\SetProtrusion}{o m m}{}
+\DeclareDocumentCommand{\SetExpansion}{o m m}{}
+\DeclareDocumentCommand{\SetTracking}{o m m}{}
+\DeclareDocumentCommand{\SetExtraKerning}{o m m}{}
+\DeclareDocumentCommand{\SetExtraSpacing}{o m m}{}
+\DeclareDocumentCommand{\DisableLigatures}{o m}{}
+\DeclareDocumentCommand{\DeclareCharacterInheritance}{o m m}{}
+\DeclareDocumentCommand{\DeclareMicrotypeVariants}{m}{}
+\DeclareDocumentCommand{\DeclareMicrotypeAlias}{m m}{}
+\DeclareDocumentCommand{\LoadMicrotypeFile}{m}{}
+\DeclareDocumentCommand{\DeclareMicrotypeBabelHook}{m m}{}
+\DeclareDocumentCommand{\microtypesetup}{m}{}
+\DeclareDocumentCommand{\microtypecontext}{m}{}
+\DeclareDocumentCommand{\textmicrotypecontext}{m m}{#2}
+\@ifpackageloaded{letterspace}{\let\MT@textls\relax}{%
+\DeclareDocumentCommand{\lsstyle}{}{}
+\DeclareDocumentCommand{\textls}{o +m}{}
+\DeclareDocumentCommand{\lslig}{m}{#1}
+}
+\def\DeclareMicrotypeSet#1#{\@gobbletwo}
+\def\DeclareMicrotypeVariants#1#{\@gobble}
+\@onlypreamble\DeclareMicrotypeSet
+\@onlypreamble\UseMicrotypeSet
+\@onlypreamble\DeclareMicrotypeSetDefault
+\@onlypreamble\DisableLigatures
+\@onlypreamble\DeclareMicrotypeVariants
+\@onlypreamble\DeclareMicrotypeBabelHook
+% \end{macrocode}
+
+% \iffalse
+%</microtype>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*midfloat>
+% \fi
+%
+% \part{lwarp-midfloat.sty}
+%
+% \section{midfloat}
+%
+% \credits{Sigitas Tolu\v{s}is}
+
+% \DescribePackage{midfloat}
+% \pkg{midfloat} is emulated.
+%
+% \changes{v0.40}{2017/09/07}{\pkg{midfloat}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{midfloat}[2012/05/29]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newenvironment{strip}[1][]{}{}
+\newskip\stripsep
+% \end{macrocode}
+%
+% \iffalse
+%</midfloat>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*midpage>
+% \fi
+%
+% \part{lwarp-midpage.sty}
+%
+% \section{midpage}
+%
+% \DescribePackage{midpage}
+% \pkg{midpage} is ignored.
+%
+% \changes{v0.39}{2017/08/27}{\pkg{midpage}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{midpage}[2009/09/03]
+% \end{macrocode}
+%
+% \changes{v0.47}{2018/01/26}{\pkg{midpage}: Fix: Line wrap at \HTML\ hyphen.}
+% \begin{macrocode}
+\newenvironment{midpage}
+{\begin{BlockClass}[%
+ \LWR@print@mbox{margin-top:6ex} ; \LWR@print@mbox{margin-bottom:6ex}%
+]{midpage}}
+{\end{BlockClass}}
+% \end{macrocode}
+%
+% \iffalse
+%</midpage>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*minibox>
+% \fi
+%
+% \part{lwarp-minibox.sty}
+%
+% \section{minibox}
+%
+% \credits{Will Robertson}
+%
+% \DescribePackage{minibox}
+% \pkg{minibox} is patched for use by \pkg{lwarp}.
+%
+% Due to \HTML\ limitations regarding paragraphs and \element{div}s,
+% miniboxes inline with other text will appear on their own line.
+%
+% \changes{v0.72}{2019/06/05}{\pkg{minibox}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{minibox}[2013/06/21]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ExplSyntaxOn
+\newcommand\LWR@HTML@minibox[2][]{%
+ \LWR@stoppars%
+ \group_begin:
+ \keys_set:nn {minibox} {#1}
+ \bool_if:NTF \l_minibox_frame_bool
+ {
+ \setlength\fboxrule{\l_minibox_rule_dim}
+ \setlength\fboxsep{\l_minibox_pad_dim}
+ \fboxBlock{%
+ \begin{tabular}[\l_minibox_tabular_valign_tl]%
+ {\l_minibox_tabular_preamble_tl}
+ {#2}
+ \end{tabular}
+ }%
+ }
+ {
+ \begin{BlockClass}[display:inline-block]{minibox}
+ \begin{tabular}[\l_minibox_tabular_valign_tl]%
+ {\l_minibox_tabular_preamble_tl}
+ {#2}
+ \end{tabular}
+ \end{BlockClass}
+ }
+ \group_end:
+ \LWR@startpars%
+}
+\ExplSyntaxOff
+
+\LWR@formatted{minibox}
+% \end{macrocode}
+%
+% \iffalse
+%</minibox>
+% \fi
+%
+%
+%
+% \iffalse
+%<*minitoc>
+% \fi
+%
+% \part{lwarp-minitoc.sty}
+%
+% \section{minitoc}
+%
+% \DescribePackage{minitoc}
+% \pkg{minitoc} is ignored.
+%
+% \changes{v0.69}{2019/03/06}{\pkg{minitoc}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{minitoc}[2018/07/12]
+% \end{macrocode}
+%
+% \pkg{mtcoff} disables \pkg{minitoc}.
+% \begin{macrocode}
+\usepackage{mtcoff}
+% \end{macrocode}
+%
+% \iffalse
+%</minitoc>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*morefloats>
+% \fi
+%
+% \part{lwarp-morefloats.sty}
+%
+% \section{morefloats}
+%
+% \DescribePackage{morefloats}
+% \pkg{morefloats} is ignored.
+%
+% \changes{v0.50}{2018/02/22}{\pkg{morefloats}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{morefloats}[2015/07/22]
+% \end{macrocode}
+%
+% \iffalse
+%</morefloats>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*moreverb>
+% \fi
+%
+% \part{lwarp-moreverb.sty}
+%
+% \section{moreverb}
+% \label{sec:moreverb}
+%
+% \credits{Robin Fairbairns}
+%
+% \DescribePackage{moreverb}
+% \pkg{moreverb} is supported with some patches.
+%
+% \changes{v0.34}{2017/08/02}{\pkg{moreverb}: Added.}
+% \changes{v0.42}{2017/10/27}{\pkg{moreverb}: Simplified formatting of listings.}
+%
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{moreverb}[2008/06/03]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\BeforeBeginEnvironment{verbatimtab}{%
+\LWR@forcenewpage
+\LWR@atbeginverbatim{3}{Verbatim}%
+}
+\AfterEndEnvironment{verbatimtab}{%
+\LWR@afterendverbatim{1}%
+}
+
+
+\LetLtxMacro\LWRMV@orig@verbatimtabinput\@verbatimtabinput
+
+\renewcommand{\@verbatimtabinput}[2][]{%
+\LWR@forcenewpage
+\LWR@atbeginverbatim{3}{Verbatim}%
+\LWRMV@orig@verbatimtabinput[#1]{#2}%
+\LWR@afterendverbatim{1}%
+}
+
+\BeforeBeginEnvironment{listing}{%
+\LWR@forcenewpage
+\LWR@atbeginverbatim{3}{programlisting}%
+}
+
+\AfterEndEnvironment{listing}{%
+\LWR@afterendverbatim{1}%
+}
+
+\BeforeBeginEnvironment{listingcont}{%
+\LWR@forcenewpage
+\LWR@atbeginverbatim{3}{programlisting}%
+}
+
+\AfterEndEnvironment{listingcont}{%
+\LWR@afterendverbatim{1}%
+}
+% \end{macrocode}
+
+% ^^A UNNECESSARY, AND CAUSED PROBLEMS WITH FORMATTING FOR A WORD PROCESSOR:
+% ^^A \renewcommand{\listinglabel}[1]{%
+% ^^A \ifbool{FormatWP}
+% ^^A {\InlineClass{listinglabel}{\qquad\the#1\quad}}%
+% ^^A {\InlineClass{listinglabel}{\the#1}}%
+% ^^A }
+%
+% ^^A \def\thelisting@line{%
+% ^^A \@tempcnta=\listing@line%
+% ^^A \divide\@tempcnta\listing@step \multiply\@tempcnta\listing@step%
+% ^^A \ifnum\listing@line=\@ne%
+% ^^A \listinglabel\listing@line%
+% ^^A \else%
+% ^^A \ifnum\@tempcnta=\listing@line%
+% ^^A \listinglabel\listing@line%
+% ^^A \else%
+% ^^A \InlineClass{listinglabel}{\ifbool{FormatWP}{\qquad\quad}{}}%
+% ^^A \fi%
+% ^^A \fi}
+
+% \begin{macrocode}
+\LetLtxMacro\LWRMV@@listinginput\@listinginput
+
+\renewcommand{\@listinginput}[3][]{
+\LWR@forcenewpage
+\LWR@atbeginverbatim{3}{programlisting}%
+\LWRMV@@listinginput[#1]{#2}{#3}%
+\LWR@afterendverbatim{1}%
+}
+
+
+\renewenvironment*{boxedverbatim}
+{
+\LWR@forcenewpage
+\LWR@atbeginverbatim{3}{boxedverbatim}%
+\verbatim%
+}
+{
+\endverbatim%
+\LWR@afterendverbatim{1}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+%
+% \iffalse
+%</moreverb>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*movie15>
+% \fi
+%
+% \part{lwarp-movie15.sty}
+%
+% \section{movie15}
+%
+% \DescribePackage{movie15}
+% \pkg{movie15} is emualted.
+%
+% \limitsmultimedia
+%
+% \changes{v0.71}{2019/04/22}{\pkg{movie15}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{movie15}[2012/05/16]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LWR@origRequirePackage{lwarp-common-multimedia}
+
+\RequirePackage{xkeyval}
+
+\newcommand*{\LWR@moviefifteen@text}{}
+
+\define@key{LWR@moviefifteen}{text}{\renewcommand{\LWR@moviefifteen@text}{#1}}
+
+\newcommand*{\LWR@includemovieb}[4][]{%
+ \renewcommand{\LWR@moviefifteen@text}{(multimedia)}
+ \setkeys*{LWR@moviefifteen}{#1}%
+ \LWR@multimediab[#1,width=#2,height=#3]{\LWR@moviefifteen@text}{#4}%
+}
+
+\newrobustcmd*{\includemovie}{%
+ \begingroup%
+ \catcode`\#=12%
+ \catcode`\%=12%
+ \catcode`\&=12%
+ \catcode`\~=12%
+ \catcode`\_=12%
+ \LWR@includemovieb%
+}
+
+
+\newcommand*{\movieref}[3][]{}
+
+\LetLtxMacro\movie\LWR@multimedia
+% \LetLtxMacro\sound\LWR@multimedia% not in media15
+
+\newcommand{\hyperlinkmovie}[3][]{}
+% \end{macrocode}
+%
+% \iffalse
+%</movie15>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*mparhack>
+% \fi
+%
+% \part{lwarp-mparhack.sty}
+%
+% \section{mparhack}
+%
+% \DescribePackage{mparhack} \pkg{mparhack} is ignored.
+%
+% \changes{v0.26}{2017/03/29}{\pkg{mparhack}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-mparhack}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{mparhack}[2005/04/17]
+% \end{macrocode}
+%
+% \iffalse
+%</mparhack>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*multicap>
+% \fi
+%
+% \part{lwarp-multicap.sty}
+%
+% \section{multicap}
+%
+% \DescribePackage{multicap}
+% \pkg{multicap} is emualted.
+%
+% \changes{v0.67}{2019/02/18}{\pkg{multicap}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{multicap}[2002/05/04]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\mfcaption}{\captionof{figure}}
+\newcommand*{\mtcaption}{\captionof{table}}
+\newcounter{mcapsize}
+\newcounter{mcapskip}
+\newlength{\abvmcapskip}
+\newlength{\blwmcapskip}
+% \end{macrocode}
+%
+% \iffalse
+%</multicap>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*multicol>
+% \fi
+
+% \part{lwarp-multicol.sty}
+
+% \section{multicol}
+% \label{sec:multicol}
+%
+% \credits{Frank Mittelbach}
+%
+% \DescribePackage{multicol}
+% \pkg{multicol} is emulated.
+
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{multicol}[2018/12/27]
+% \end{macrocode}
+
+% Multicols are converted into a 1--3 column display, browser-supported.
+%
+% The optional multicols heading is placed inside a \element{div} of class |multicolsheading|.
+%
+% The content is placed inside a \element{div} of class |multicols|.
+
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{noindenvironment}{multicols} * \marg{numcols} \oarg{heading}
+% \begin{macrocode}
+\NewDocumentEnvironment{multicols}{s m o}
+% \end{macrocode}
+% \HTML\ \element{div} class to contain everything:
+% \begin{macrocode}
+{
+ \LWR@forcenewpage
+ \BlockClass{multicols}
+% \end{macrocode}
+% Optional \HTML\ \element{div} class for the heading:
+% \begin{macrocode}
+ \IfValueT{#3}{\begin{BlockClass}{multicolsheading}#3\end{BlockClass}}%
+% \end{macrocode}
+% Change \cs{linewidth} to compensate for expected size:
+% \begin{macrocode}
+ \setlength{\linewidth}{\linewidth/#2}
+% \end{macrocode}
+% Locally force any minipages to be fullwidth:
+% \changes{v0.66}{2018/12/31}{Fix: Minipages inside \env{multicols}.}
+% \begin{macrocode}
+ \booltrue{LWR@forceminipagefullwidth}
+}
+% \end{macrocode}
+% When done with the environment, close the \element{div}:
+% \begin{macrocode}
+{\endBlockClass}
+% \end{macrocode}
+% \end{noindenvironment}
+
+% Emulated null functions which are not used in \HTML:
+% \begin{macrocode}
+\newcommand*{\columnbreak}{}
+\newcommand*{\RLmulticolcolumns}{}
+\newcommand*{\LRmulticolcolumns}{}
+
+\newlength{\premulticols}
+\newlength{\postmulticols}
+\newlength{\multicolsep}
+\newlength{\multicolbaselineskip}
+\newlength{\multicoltolerance}
+\newlength{\multicolpretolerance}
+\newcommand*{\columnseprulecolor}{\normalcolor}
+\newcounter{columnbadness}
+\newcounter{finalcolumnbadness}
+\newcounter{collectmore}
+\newcounter{unbalance}
+\newlength{\multicolovershoot}
+\newlength{\multicolundershoot}
+% \end{macrocode}
+%
+% \changes{v0.65}{2018/12/15}{\pkg{multicol}: Added \cs{docolaction}.}
+% \begin{macrocode}
+\NewDocumentCommand{\docolaction}{s o m m m}{%
+ \IfValueTF{#2}{#2}{#3}%
+}
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+% \iffalse
+%</multicol>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*multicolrule>
+% \fi
+%
+% \part{lwarp-multicolrule.sty}
+%
+% \section{multicolrule}
+%
+% \DescribePackage{multicolrule}
+% \pkg{multicolrule} is ignored.
+%
+% \changes{v0.65}{2018/12/21}{\pkg{multicolrule}: Added.}
+% \changes{v0.66}{2019/01/04}{\pkg{multicolrule}: Updated for v1.2.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\RequirePackage{multicol}
+
+\LWR@ProvidesPackageDrop{multicolrule}[2019/01/01]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\SetMCRule}[1]{}
+\NewDocumentCommand{\DeclareMCRulePattern}{m m}{}
+% \end{macrocode}
+%
+% \iffalse
+%</multicolrule>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*multimedia>
+% \fi
+%
+% \part{lwarp-multimedia.sty}
+%
+% \section{multimedia}
+%
+% \DescribePackage{multimedia}
+% \pkg{multimedia} is emulated.
+%
+% \limitsmultimedia
+%
+% \changes{v0.71}{2019/04/22}{\pkg{multimedia}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{multimedia}[2012/05/02]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LWR@origRequirePackage{lwarp-common-multimedia}
+
+\LetLtxMacro\movie\LWR@multimedia
+\LetLtxMacro\sound\LWR@multimedia
+
+\newcommand{\hyperlinkmovie}[3][]{}
+% \end{macrocode}
+%
+% \iffalse
+%</multimedia>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*multirow>
+% \fi
+
+% \part{lwarp-multirow.sty}
+
+% \section{multirow}
+% \label{sec:multirow}
+%
+% \credits{Piet van Oostrum, Øystein Bache, Jerry Leichter}
+%
+% \DescribePackage{multirow}
+% \pkg{multirow} is emulated during \HTML\ output, and
+% used as-is while inside a \env{lateximage}.
+%
+% \limitsmultirow
+%
+% In a \env{lateximage}, \cs{LWR@restoreorigformatting}
+% restores the original print-mode versions.
+%
+% See \cref{sec:printmultirow} for the print-mode versions.
+%
+% \codehtml
+%
+% Remove the placeholder macro which was used if \pkg{multirow} was not loaded:
+% \begin{macrocode}
+\LetLtxMacro\multirow\relax
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{multirow}[2018/08/03]
+% \end{macrocode}
+%
+%
+% \begin{macro}{\LWR@multirowborder}
+% Set to |left| or |right| to create a thick border for the cell,
+% for use by \pkg{bigdelim}:
+% \begin{macrocode}
+\newcommand{\LWR@multirowborder}{}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Multirow}
+%
+% \DescribeMacro{\multirow}
+% \oarg{vpos} \marg{numrows} \oarg{bigstruts} \marg{width} \oarg{fixup} \marg{text}
+% \changes{v0.19}{2015/05/28}{\pkg{multirow}: Added optional args.}
+% \changes{v0.39}{2017/08/30}{\pkg{multirow}: Add: New optional \optn{vpos} argument.}
+% \changes{v0.39}{2017/08/30}{\pkg{multirow}: Add: Supports left/right border for \pkg{bigdelim}.}
+% \changes{v0.39}{2017/08/30}{\pkg{multirow}: Fix: Long text argument.}
+% \changes{v0.40}{2017/09/22}{\pkg{multirow}: Improved \pkg{bigdelim} borders.}
+% \changes{v0.41}{2017/09/28}{\pkg{multirow}: Add: \cs{cmidrule} trims.}
+% \changes{v0.47}{2018/01/26}{\pkg{multirow}: Fix: Line wrap at \HTML\ hyphen.}
+% \changes{v0.57}{2018/05/28}{\pkg{multirow}: Improved print/\HTML\ output selection.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@multirow}{O{c} m o m o +m}%
+{%
+\LWR@traceinfo{*** LWR@HTML@multirow #1 #2 #4}%
+% \end{macrocode}
+% \changes{v0.69}{2019/03/07}{\pkg{multirow}: Error if \cs{multirow} without \cs{mrowcell}.}
+% \begin{macrocode}
+\booltrue{LWR@usedmultirow}%
+% \end{macrocode}
+% \begin{macrocode}
+\LWR@maybenewtablerow%
+\LWR@tabularleftedge%
+% \end{macrocode}
+% Print the start of a new table data cell:
+% \begin{macrocode}
+\LWR@htmltag{td rowspan="#2" %
+% \end{macrocode}
+% The vertical alignment, if given:
+% \begin{macrocode}
+\IfValueT{#1}{%
+\ifstrequal{#1}{b}{style="\LWR@print@mbox{vertical-align:bottom}" }{}%
+\ifstrequal{#1}{t}{style="\LWR@print@mbox{vertical-align:top}" }{}%
+}%
+% \end{macrocode}
+% The left/right border, if given:
+% \begin{macrocode}
+\ifdefvoid{\LWR@multirowborder}{}{%
+style="\LWR@print@mbox{border-\LWR@multirowborder:} 2px dotted black ; %
+\LWR@print@mbox{padding-\LWR@multirowborder:} 2px" %
+}%
+% \end{macrocode}
+% A class adds the column spec and the rule:
+% \begin{macrocode}
+class="td%
+% \end{macrocode}
+% Append this column's spec:
+% \changes{v0.60}{2018/09/17}{\env{tabular}: Improved memory management: Not using \pkg{xstring}.}
+% \begin{macrocode}
+\LWR@getexparray{LWR@tablecolspec}{\arabic{LWR@tableLaTeXcolindex}}%
+% \end{macrocode}
+% If this column has a cmidrule, add ``rule'' to the end of the \HTML\ class tag.
+% Also add the vertical bar class.
+% \changes{v0.41}{2017/10/07}{Added vertical rules.}
+% \begin{macrocode}
+\LWR@addcmidruletrim%
+\LWR@addleftmostbartag%
+\LWR@printbartag{\arabic{LWR@tableLaTeXcolindex}}%
+"%
+% \end{macrocode}
+% \changes{v0.42}{2017/10/26}{\pkg{multirow}: If \progcode{FormatWP} add cell alignment.}
+% \begin{macrocode}
+\LWR@tdstartstyles%
+\LWR@addcmidrulewidth%
+\LWR@addcdashline%
+\LWR@addtabularrulecolors%
+\LWR@tdendstyles%
+}%
+% \end{macrocode}
+% \changes{v0.41}{2017/10/05}{Fix: \protect\textless\ spec.}
+% The column's |<| spec:
+% \begin{macrocode}
+\LWR@getexparray{LWR@colbeforespec}{\arabic{LWR@tableLaTeXcolindex}}%
+% \end{macrocode}
+% While printing the text, redefine |\\| to generate a new line
+% \begin{macrocode}
+\begingroup\LetLtxMacro{\\}{\LWR@endofline}#6\endgroup%
+\LWR@stoppars%
+\global\boolfalse{LWR@intabularmetadata}%
+\renewcommand{\LWR@multirowborder}{}%
+\LWR@traceinfo{*** LWR@HTML@multirow done}%
+}%
+
+\LWR@formatted{multirow}
+% \end{macrocode}
+%
+%
+% \subsection{Combined multicolumn and multirow}
+% \label{sec:multicolumnmultirow}
+%
+% \begin{macro}{\multicolumnrow}
+% \marg{1:cols} \marg{2:halign}
+% \oarg{3:vpos} \marg{4:numrows} \oarg{5:bigstruts}
+% \marg{6:width} \oarg{7:fixup} \marg{8:text}
+%
+% \changes{v0.39}{2017/08/30}{Added.}
+% \changes{v0.57}{2018/05/28}{\pkg{multirow}: Improved print/\HTML\ output selection.}
+%
+% |\@ifpackageloaded{multirow}| determines if v2.0 or later of
+% \pkg{multirow} was used, which included the \cs{ProvidesPackage} macro.
+%
+%
+% The \HTML\ version follows.
+%
+% \cs{AtBeginDocument} because the print version had to see if \pkg{multirow}
+% was loaded before determining how to define \cs{LWR@print@multicolumnrow}.
+% \begin{macrocode}
+\AtBeginDocument{
+
+\NewExpandableDocumentCommand{\LWR@HTML@multicolumnrow}{m m O{} m O{} m O{} +m}{%
+% \end{macrocode}
+% \changes{v0.69}{2019/03/07}{\pkg{multirow}: Error if \cs{multirow} without \cs{mrowcell}.}
+% \begin{macrocode}
+\booltrue{LWR@usedmultirow}%
+% \end{macrocode}
+% Figure out how many extra \HTML\ columns to add for |@| and |!| columns:
+% \begin{macrocode}
+\LWR@tabularhtmlcolumns{\arabic{LWR@tableLaTeXcolindex}}{#1}
+% \end{macrocode}
+% Create the multicolumn/multirow tag:
+% \begin{macrocode}
+\begingroup%
+\LetLtxMacro{\\}{\LWR@endofline}%
+\LWR@domulticolumn[#3][#4]{#1}{\arabic{LWR@tabhtmlcoltotal}}{#2}{#8}%
+\endgroup%
+% \end{macrocode}
+% Move to the next \LaTeX\ column:
+% \begin{macrocode}
+\addtocounter{LWR@tableLaTeXcolindex}{#1}%
+\addtocounter{LWR@tableLaTeXcolindex}{-1}%
+% \end{macrocode}
+% Skip any trailing |@| or |!| columns for this cell:
+% \begin{macrocode}
+\global\booltrue{LWR@skipatbang}%
+}
+
+\LWR@expandableformatted{multicolumnrow}
+
+}% \AtBeginDocument
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \iffalse
+%</multirow>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*multitoc>
+% \fi
+%
+% \part{lwarp-multitoc.sty}
+%
+% \section{multitoc}
+%
+% \DescribePackage{multitoc}
+% \pkg{multitoc} is ignored.
+%
+% \changes{v0.47}{2018/01/25}{\pkg{multitoc}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{multitoc}[1999/06/08]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\multicolumntoc}{2}
+\newcommand{\multicolumnlot}{2}
+\newcommand{\multicolumnlof}{2}
+\newcommand*{\immediateaddtocontents}[2]{}
+% \end{macrocode}
+%
+% \iffalse
+%</multitoc>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*musicography>
+% \fi
+%
+% \part{lwarp-musicography.sty}
+%
+% \section{musicography}
+%
+% \credits{Andrew A. Cashner}
+%
+% \DescribePackage{musicography}
+% \pkg{musicography} is patched for use by \pkg{lwarp}.
+%
+% Images are used for the meter symbols and fingered bass, since the
+% \HTML\ fonts tend not to be the correct size and \HTML\ cannot stack items.
+% The \HTML\ \attribute{alt} tag copies |C| and |3/2|, etc.
+% Hashes are used for the meter images, which are then reused
+% as necessary.
+%
+% Note that browser support for musical symbols may be buggy.
+% \watchout
+% ALT text and copy/paste into a text editor work well.
+%
+% \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.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{musicography}[2019/05/28]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@musSymbol}{ O{\musFont} m m m m }{%
+\begin{lateximage}%
+{#1\kern#2\raisebox{#3}{#5}\kern#4}%
+\end{lateximage}%
+}
+
+\LWR@formatted{musSymbol}
+
+\NewDocumentCommand{\LWR@HTML@musStemmedNote}{ m }{%
+\begin{lateximage}%
+\musSymbol{0.05em}{0.5ex}{0.2em}{#1\musStem}%
+\end{lateximage}%
+}
+
+\LWR@formatted{musStemmedNote}
+
+\NewDocumentCommand{\LWR@HTML@musFlaggedNote}{ m m }{%
+\begin{lateximage}%
+\musSymbol{0.05em}{0.5ex}{0pt}{#1\musStem}%
+\musSymbol{0pt}{0pt}{0.9em}{#2}%
+\end{lateximage}%
+}
+
+\LWR@formatted{musFlaggedNote}
+
+\NewDocumentCommand{\LWR@HTML@musDottedNote}{ m }{%
+\begin{lateximage}%
+#1\musDot%
+\end{lateximage}%
+}
+
+\LWR@formatted{musDottedNote}
+
+\NewDocumentCommand{\LWR@HTML@musMeter}{ m m }{%
+\begin{lateximage}*[#1/#2][#1#2]%
+\musStack{#1 #2}\kern0.05em%
+\end{lateximage}%
+}
+
+\LWR@formatted{musMeter}
+
+\NewDocumentCommand{\LWR@HTML@meterCplus}{ m }{%
+\begin{lateximage}*[C#1]%
+ \meterC{}\kern-0.7pt#1%
+\end{lateximage}%
+}
+
+\LWR@formatted{meterCplus}
+
+\NewDocumentCommand{\LWR@HTML@meterC}{}{%
+\begin{lateximage}*[C]%
+\musSymbolMeter{\symbol{83}}%
+\end{lateximage}%
+}
+
+\LWR@formatted{meterC}
+
+\NewDocumentCommand{\LWR@HTML@meterCutC}{}{%
+\begin{lateximage}*[C|]%
+\musSymbolMeter{\symbol{82}}%
+\end{lateximage}%
+}
+
+\LWR@formatted{meterCutC}
+
+\NewDocumentCommand{\LWR@HTML@meterCThreeTwo}{}{%
+\begin{lateximage}*[C3/2]%
+\meterCplus{\musStack{3 2}}%
+\end{lateximage}%
+}
+
+\LWR@formatted{meterCThreeTwo}
+
+\NewDocumentCommand{\LWR@HTML@meterO}{}{\HTMLunicode{25EF}}
+
+\LWR@formatted{meterO}
+
+\newcommand{\LWR@null@noFig}[1][]{}%
+
+\NewDocumentCommand{\LWR@HTML@musFig}{ m }{%
+\begin{lateximage}*[%
+ {% ALT text for copy/paste
+ \LetLtxMacro\noFig\LWR@null@noFig%
+ \LetLtxMacro\musSharp\LWR@HTML@musSharp%
+ \LetLtxMacro\musDoubleSharp\LWR@HTML@musDoubleSharp%
+ \LetLtxMacro\musFlat\LWR@HTML@musFlat%
+ \LetLtxMacro\musDoubleFlat\LWR@HTML@musDoubleFlat%
+ \LetLtxMacro\musNatural\LWR@HTML@musNatural%
+ ({#1})% braces here because \noFig uses []
+ }%
+]%
+ \musStack[\musFigFont]{#1}%
+\end{lateximage}%
+}
+
+\LWR@formatted{musFig}
+
+\NewDocumentCommand{\LWR@HTML@musFlat} {}{\HTMLunicode{266D}}
+\NewDocumentCommand{\LWR@HTML@musDoubleFlat} {}{\HTMLunicode{1D12B}}
+\NewDocumentCommand{\LWR@HTML@musSharp} {}{\HTMLunicode{266F}}
+\NewDocumentCommand{\LWR@HTML@musDoubleSharp}{}{\HTMLunicode{1D12A}}
+\NewDocumentCommand{\LWR@HTML@musNatural} {}{\HTMLunicode{266E}}
+
+\LWR@formatted{musFlat}
+\LWR@formatted{musDoubleFlat}
+\LWR@formatted{musSharp}
+\LWR@formatted{musDoubleSharp}
+\LWR@formatted{musNatural}
+
+\NewDocumentCommand{\LWR@HTML@musWhole} {}{\HTMLunicode{1D15D}}
+\NewDocumentCommand{\LWR@HTML@musHalf} {}{\HTMLunicode{1D15E}}
+\NewDocumentCommand{\LWR@HTML@musQuarter} {}{\HTMLunicode{1D15F}}
+\NewDocumentCommand{\LWR@HTML@musEighth} {}{\HTMLunicode{1D160}}
+\NewDocumentCommand{\LWR@HTML@musSixteenth} {}{\HTMLunicode{1D161}}
+\NewDocumentCommand{\LWR@HTML@musThirtySecond} {}{\HTMLunicode{1D162}}
+\NewDocumentCommand{\LWR@HTML@musSixtyFourth} {}{\HTMLunicode{1D163}}
+
+\LWR@formatted{musWhole}
+\LWR@formatted{musHalf}
+\LWR@formatted{musQuarter}
+\LWR@formatted{musEighth}
+\LWR@formatted{musSixteenth}
+\LWR@formatted{musThirtySecond}
+\LWR@formatted{musSixtyFourth}
+
+\NewDocumentCommand{\LWR@HTML@musWholeDotted}{}
+ {\HTMLunicode{1D15D}\HTMLunicode{1D16D}}
+\NewDocumentCommand{\LWR@HTML@musHalfDotted}{}
+ {\HTMLunicode{1D15E}\HTMLunicode{1D16D}}
+\NewDocumentCommand{\LWR@HTML@musQuarterDotted}{}
+ {\HTMLunicode{1D15F}\HTMLunicode{1D16D}}
+\NewDocumentCommand{\LWR@HTML@musEighthDotted}{}
+ {\HTMLunicode{1D160}\HTMLunicode{1D16D}}
+\NewDocumentCommand{\LWR@HTML@musSixteenthDotted}{}
+ {\HTMLunicode{1D161}\HTMLunicode{1D16D}}
+\NewDocumentCommand{\LWR@HTML@musThirtySecondDotted}{}
+ {\HTMLunicode{1D162}\HTMLunicode{1D16D}}
+\NewDocumentCommand{\LWR@HTML@musSixtyFourthDotted}{}
+ {\HTMLunicode{1D163}\HTMLunicode{1D16D}}
+
+\LWR@formatted{musWholeDotted}
+\LWR@formatted{musHalfDotted}
+\LWR@formatted{musQuarterDotted}
+\LWR@formatted{musEighthDotted}
+\LWR@formatted{musSixteenthDotted}
+\LWR@formatted{musThirtySecondDotted}
+\LWR@formatted{musSixtyFourthDotted}
+% \end{macrocode}
+%
+% \iffalse
+%</musicography>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*nameauth>
+% \fi
+%
+% \part{lwarp-nameauth.sty}
+%
+% \section{nameauth}
+%
+% \credits{Charles P. Schaum}
+%
+% \DescribePackage{nameauth}
+% \pkg{nameauth} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.66}{2019/02/05}{\pkg{nameauth}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{nameauth}[2017/03/22]
+% \end{macrocode}
+%
+% \pkg{lwarp} formatting is inserted in the following.
+% \begin{macrocode}
+\renewcommand*\@nameauth@Hook[1]
+{%
+ \if@nameauth@Lock
+ \@nameauth@InHooktrue%
+ \protected@edef\test{#1}%
+ \expandafter\@nameauth@TestDot\expandafter{\test}%
+ \if@nameauth@InAKA
+ \if@nameauth@AlwaysFormat
+ \@nameauth@FirstFormattrue%
+ \else
+ \unless\if@nameauth@AKAFormat
+ \@nameauth@FirstFormatfalse\fi
+ \fi
+ \if@nameauth@MainFormat
+ \if@nameauth@FirstFormat
+ \bgroup\NamesFormat{%
+ \LWR@textcurrentcolor{\LWR@textcurrentfont{#1}}% lwarp
+ }\egroup%
+ \else
+ \bgroup\MainNameHook{%
+ \LWR@textcurrentcolor{\LWR@textcurrentfont{#1}}% lwarp
+ }\egroup%
+ \fi
+ \else
+ \if@nameauth@FirstFormat
+ \bgroup\FrontNamesFormat{%
+ \LWR@textcurrentcolor{\LWR@textcurrentfont{#1}}% lwarp
+ }\egroup%
+ \else
+ \bgroup\FrontNameHook{%
+ \LWR@textcurrentcolor{\LWR@textcurrentfont{#1}}% lwarp
+ }\egroup%
+ \fi
+ \fi
+ \else
+ \if@nameauth@AlwaysFormat
+ \@nameauth@FirstFormattrue%
+ \fi
+ \if@nameauth@MainFormat
+ \if@nameauth@FirstFormat
+ \bgroup\NamesFormat{%
+ \LWR@textcurrentcolor{\LWR@textcurrentfont{#1}}% lwarp
+ }\egroup%
+ \else
+ \bgroup\MainNameHook{%
+ \LWR@textcurrentcolor{\LWR@textcurrentfont{#1}}% lwarp
+ }\egroup%
+ \fi
+ \else
+ \if@nameauth@FirstFormat
+ \bgroup\FrontNamesFormat{%
+ \LWR@textcurrentcolor{\LWR@textcurrentfont{#1}}% lwarp
+ }\egroup%
+ \else
+ \bgroup\FrontNameHook{%
+ \LWR@textcurrentcolor{\LWR@textcurrentfont{#1}}% lwarp
+ }\egroup%
+ \fi
+ \fi
+ \fi
+ \@nameauth@FirstFormatfalse%
+ \@nameauth@InHookfalse%
+ \fi
+}
+% \end{macrocode}
+%
+% \iffalse
+%</nameauth>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*nameref>
+% \fi
+
+% \part{lwarp-nameref.sty}
+
+% \section{nameref}
+%
+% \DescribePackage{nameref}
+% \pkg{nameref} is emulated by \pkg{lwarp}.
+%
+% \changes{v0.22}{2017/03/01}{\pkg{nameref}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-nameref}:
+% \begin{macrocode}
+\PackageInfo{lwarp}{%
+Using the lwarp HTML version of package `nameref',\MessageBreak
+and discarding options.\MessageBreak
+(Not using \protect\ProvidesPackage, so that other packages\MessageBreak
+do not attempt to patch lwarp's version of `nameref'.)\MessageBreak
+}
+\DeclareOption*{}
+\ProcessOptions\relax
+% \end{macrocode}
+
+% \iffalse
+%</nameref>
+% \fi
+%
+%
+%
+% \iffalse
+%<*natbib>
+% \fi
+%
+% \part{lwarp-natbib.sty}
+
+% \section{natbib}
+%
+% \credits{Patrick W. Daly}
+%
+% \DescribePackage{natbib}
+% \pkg{natbib} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.45}{2018/01/13}{\pkg{natbib}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{natbib}[2010/09/13]
+% \end{macrocode}
+%
+% Replace math $<$ and $>$ with \cs{textless} and \cs{textgreater}:
+%
+% A macro to compare:
+% \begin{macrocode}
+\newcommand{\LWRNB@NAT@open}{$<$}
+% \end{macrocode}
+% To patch \cs{NAT@open} and \cs{NAT@close}
+% \begin{macrocode}
+\newcommand{\LWRNB@patchnatbibopenclose}{
+\ifdefstrequal{\NAT@open}{\LWRNB@NAT@open}
+{
+ \renewcommand{\NAT@open}{\textless}
+ \renewcommand{\NAT@close}{\textgreater}
+}{}
+}
+% \end{macrocode}
+% Do it now in case |angle| was selected as an option:
+% \begin{macrocode}
+\LWRNB@patchnatbibopenclose
+% \end{macrocode}
+% Also patch \cs{setcitestyle} to patch after settings are made:
+% \begin{macrocode}
+\let\LWRNB@origsetcitestyle\setcitestyle
+
+\renewcommand{\setcitestyle}[1]{%
+\LWRNB@origsetcitestyle{#1}%
+\LWRNB@patchnatbibopenclose%
+}
+% \end{macrocode}
+
+% \iffalse
+%</natbib>
+% \fi
+%
+%
+%
+% \iffalse
+%<*nccfancyhdr>
+% \fi
+%
+% \part{lwarp-nccfancyhdr.sty}
+%
+% \section{nccfancyhdr}
+%
+% \credits{Alexander I. Rozhenko}
+%
+% \DescribePackage{nccfancyhdr}
+% \pkg{nccfancyhdr} is ignored.
+%
+% \changes{v0.59}{2018/08/06}{\pkg{nccfancyhdr}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{nccfancyhdr}[2004/12/07]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\headrulewidth}{}
+\newcommand*{\footrulewidth}{}
+\newcommand{\headstrutheight}{}
+\newcommand{\footstrutheight}{}
+\newcommand*{\headrule}{}
+\newcommand*{\footrule}{}
+
+\newdimen\headwidth
+\newcommand*{\extendedheaders}{}
+\newcommand*{\normalheaders}{}
+
+\newcommand*{\fancyhead}[2][]{}
+\newcommand*{\fancyfoot}[2][]{}
+\newcommand*{\fancyhf}[2][]{}
+\newcommand*{\fancypagestyle}[2]{}
+\newcommand*{\lhead}[2][]{}
+\newcommand*{\chead}[2][]{}
+\newcommand*{\rhead}[2][]{}
+\newcommand*{\lfoot}[2][]{}
+\newcommand*{\cfoot}[2][]{}
+\newcommand*{\rfoot}[2][]{}
+
+\newcommand{\nouppercase}[1]{#1}
+
+\NewDocumentCommand{\fancycenter}{o o m m m}{}
+
+\NewDocumentCommand{\newpagestyle}{m o m}{}
+
+\newcommand*{\iffloatpage}[2]{#2}
+\newcommand*{\ifftopfloat}[2]{#2}
+\newcommand*{\iffbotfloat}[2]{#2}
+% \end{macrocode}
+%
+% \iffalse
+%</nccfancyhdr>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*needspace>
+% \fi
+
+% \part{lwarp-needspace.sty}
+
+% \section{needspace}
+%
+% \credits{Peter Wilson}
+%
+% \DescribePackage{needspace}
+% \pkg{needspace} is ignored.
+%
+% \changes{v0.20}{2016/12/22}{\pkg{needspace}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-needspace}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{needspace}[2010/09/12]
+
+\DeclareDocumentCommand{\needspace}{m}{}
+\DeclareDocumentCommand{\Needspace}{s m}{}
+% \end{macrocode}
+
+% \iffalse
+%</needspace>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*nextpage>
+% \fi
+
+% \part{lwarp-nextpage.sty}
+
+% \section{nextpage}
+%
+% \credits{Peter Wilson}
+%
+% \DescribePackage{nextpage}
+% \pkg{nextpage} is ignored.
+%
+% \changes{v0.22}{2017/03/01}{\pkg{nextpage}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-nextpage}.
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{nextpage}[2009/09/03]
+% \end{macrocode}
+
+% \begin{macrocode}
+\DeclareDocumentCommand{\cleartoevenpage}{o}{}
+\DeclareDocumentCommand{\movetoevenpage}{o}{}
+\DeclareDocumentCommand{\cleartooddpage}{o}{}
+\DeclareDocumentCommand{\movetooddpage}{o}{}
+% \end{macrocode}
+
+% \iffalse
+%</nextpage>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*nfssext-cfr>
+% \fi
+%
+% \part{lwarp-nfssext-cfr.sty}
+%
+% \section{nfssext-cfr}
+%
+% \credits{Clea F. Rees}
+%
+% \DescribePackage{nfssext-cfr}
+% \pkg{nfssext-cfr} is emulated in \HTML, and used as-is in print output.
+%
+% Results depend on the browser's font.
+%
+% \changes{v0.72}{2019/05/26}{\pkg{nfssext-cfr}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{nfssext-cfr}[2017/03/28]
+% \end{macrocode}
+%
+%
+% Macros which are present in the \pkg{lwarp} core are commented out here.
+% \begin{macrocode}
+\newrobustcmd{\LWR@HTML@lnstyle}{}
+\newrobustcmd{\LWR@HTML@osstyle}{}
+\newrobustcmd{\LWR@HTML@instyle}{}
+\newrobustcmd{\LWR@HTML@sustyle}{}
+\newrobustcmd{\LWR@HTML@swstyle}{}
+\newrobustcmd{\LWR@HTML@pstyle}{}
+\newrobustcmd{\LWR@HTML@tistyle}{}
+\newrobustcmd{\LWR@HTML@ostyle}{\LWR@HTML@scshape}
+\newrobustcmd{\LWR@HTML@postyle}{\LWR@HTML@scshape}
+\newrobustcmd{\LWR@HTML@ltstyle}{}
+\newrobustcmd{\LWR@HTML@ofstyle}{}
+\newrobustcmd{\LWR@HTML@altstyle}{}
+\newrobustcmd{\LWR@HTML@regstyle}{}
+\newrobustcmd{\LWR@HTML@embossstyle}{}
+\newrobustcmd{\LWR@HTML@ornamentalstyle}{}
+\newrobustcmd{\LWR@HTML@qtstyle}{}
+\newrobustcmd{\LWR@HTML@shstyle}{}
+\newrobustcmd{\LWR@HTML@swashstyle}{}
+\newrobustcmd{\LWR@HTML@tmstyle}{}
+\newrobustcmd{\LWR@HTML@tvstyle}{\renewcommand*{\LWR@f@family}{tt}}
+\newrobustcmd{\LWR@HTML@tstyle}{}
+\newrobustcmd{\LWR@HTML@lstyle}{}
+\newrobustcmd{\LWR@HTML@tlstyle}{}
+\newrobustcmd{\LWR@HTML@plstyle}{}
+\newrobustcmd{\LWR@HTML@tostyle}{\LWR@HTML@scshape}
+% \newrobustcmd{\LWR@HTML@sishape}{}
+\newrobustcmd{\LWR@HTML@olshape}{}
+\newrobustcmd{\LWR@HTML@scolshape}{}
+\newrobustcmd{\LWR@HTML@ushape}{}
+\newrobustcmd{\LWR@HTML@scushape}{}
+\newrobustcmd{\LWR@HTML@uishape}{\LWR@HTML@itshape}
+\newrobustcmd{\LWR@HTML@rishape}{}
+\newrobustcmd{\LWR@HTML@regwidth}{}
+\newrobustcmd{\LWR@HTML@nwwidth}{}
+\newrobustcmd{\LWR@HTML@cdwidth}{}
+\newrobustcmd{\LWR@HTML@ecwidth}{}
+\newrobustcmd{\LWR@HTML@ucwidth}{}
+\newrobustcmd{\LWR@HTML@etwidth}{}
+\newrobustcmd{\LWR@HTML@epwidth}{}
+\newrobustcmd{\LWR@HTML@exwidth}{}
+\newrobustcmd{\LWR@HTML@uxwidth}{}
+\newrobustcmd{\LWR@HTML@mbweight}{\renewcommand*{\LWR@f@series}{md}}
+\newrobustcmd{\LWR@HTML@dbweight}{\renewcommand*{\LWR@f@series}{bf}}
+\newrobustcmd{\LWR@HTML@sbweight}{\renewcommand*{\LWR@f@series}{bf}}
+% \newrobustcmd{\LWR@HTML@ebweight}{\renewcommand*{\LWR@f@series}{eb}}
+\newrobustcmd{\LWR@HTML@ubweight}{\renewcommand*{\LWR@f@series}{eb}}
+% \newrobustcmd{\LWR@HTML@lgweight}{\renewcommand*{\LWR@f@series}{lg}}
+\newrobustcmd{\LWR@HTML@elweight}{\renewcommand*{\LWR@f@series}{lg}}
+\newrobustcmd{\LWR@HTML@ulweight}{\renewcommand*{\LWR@f@series}{lg}}
+% \newrobustcmd{\LWR@HTML@itshape}{}
+% \newrobustcmd{\LWR@HTML@scshape}{}
+% \newrobustcmd{\LWR@HTML@upshape}{}
+\newrobustcmd{\LWR@HTML@dfshape}{}
+
+\ifdef{\LWR@HTML@swshape}{}{% duplicated by fontaxes
+ \newrobustcmd{\LWR@HTML@swshape}{}
+}
+
+\newrobustcmd{\LWR@HTML@ornament}[1]{}
+
+\LWR@formatted{lnstyle}
+\LWR@formatted{osstyle}
+\LWR@formatted{instyle}
+\LWR@formatted{sustyle}
+\LWR@formatted{swstyle}
+\LWR@formatted{pstyle}
+\LWR@formatted{tistyle}
+\LWR@formatted{ostyle}
+\LWR@formatted{postyle}
+\LWR@formatted{ltstyle}
+\LWR@formatted{ofstyle}
+\LWR@formatted{altstyle}
+\LWR@formatted{regstyle}
+\LWR@formatted{embossstyle}
+\LWR@formatted{ornamentalstyle}
+\LWR@formatted{qtstyle}
+\LWR@formatted{shstyle}
+\LWR@formatted{swashstyle}
+\LWR@formatted{tmstyle}
+\LWR@formatted{tvstyle}
+\LWR@formatted{tstyle}
+\LWR@formatted{lstyle}
+\LWR@formatted{tlstyle}
+\LWR@formatted{plstyle}
+\LWR@formatted{tostyle}
+% \LWR@formatted{sishape}
+\LWR@formatted{olshape}
+\LWR@formatted{scolshape}
+\LWR@formatted{ushape}
+\LWR@formatted{scushape}
+\LWR@formatted{uishape}
+\LWR@formatted{rishape}
+\LWR@formatted{regwidth}
+\LWR@formatted{nwwidth}
+\LWR@formatted{cdwidth}
+\LWR@formatted{ecwidth}
+\LWR@formatted{ucwidth}
+\LWR@formatted{etwidth}
+\LWR@formatted{epwidth}
+\LWR@formatted{exwidth}
+\LWR@formatted{uxwidth}
+\LWR@formatted{mbweight}
+\LWR@formatted{dbweight}
+\LWR@formatted{sbweight}
+% \LWR@formatted{ebweight}
+\LWR@formatted{ubweight}
+% \LWR@formatted{lgweight}
+\LWR@formatted{elweight}
+\LWR@formatted{ulweight}
+% \LWR@formatted{itshape}
+% \LWR@formatted{scshape}
+% \LWR@formatted{upshape}
+\LWR@formatted{dfshape}
+
+\ifdef{\LWR@HTML@swshape}{}{% duplicated by fontaxes
+ \LWR@formatted{swshape}
+}
+
+\LWR@formatted{ornament}
+
+
+\newcommand{\LWR@null@lnstyle}{}
+\newcommand{\LWR@null@osstyle}{}
+\newcommand{\LWR@null@instyle}{}
+\newcommand{\LWR@null@sustyle}{}
+\newcommand{\LWR@null@swstyle}{}
+\newcommand{\LWR@null@pstyle}{}
+\newcommand{\LWR@null@tistyle}{}
+\newcommand{\LWR@null@ostyle}{}
+\newcommand{\LWR@null@postyle}{}
+\newcommand{\LWR@null@ltstyle}{}
+\newcommand{\LWR@null@ofstyle}{}
+\newcommand{\LWR@null@altstyle}{}
+\newcommand{\LWR@null@regstyle}{}
+\newcommand{\LWR@null@embossstyle}{}
+\newcommand{\LWR@null@ornamentalstyle}{}
+\newcommand{\LWR@null@qtstyle}{}
+\newcommand{\LWR@null@shstyle}{}
+\newcommand{\LWR@null@swashstyle}{}
+\newcommand{\LWR@null@tmstyle}{}
+\newcommand{\LWR@null@tvstyle}{}
+\newcommand{\LWR@null@tstyle}{}
+\newcommand{\LWR@null@lstyle}{}
+\newcommand{\LWR@null@tlstyle}{}
+\newcommand{\LWR@null@plstyle}{}
+\newcommand{\LWR@null@tostyle}{}
+% \newcommand{\LWR@null@sishape}{}
+\newcommand{\LWR@null@olshape}{}
+\newcommand{\LWR@null@scolshape}{}
+\newcommand{\LWR@null@ushape}{}
+\newcommand{\LWR@null@scushape}{}
+\newcommand{\LWR@null@uishape}{}
+\newcommand{\LWR@null@rishape}{}
+\newcommand{\LWR@null@regwidth}{}
+\newcommand{\LWR@null@nwwidth}{}
+\newcommand{\LWR@null@cdwidth}{}
+\newcommand{\LWR@null@ecwidth}{}
+\newcommand{\LWR@null@ucwidth}{}
+\newcommand{\LWR@null@etwidth}{}
+\newcommand{\LWR@null@epwidth}{}
+\newcommand{\LWR@null@exwidth}{}
+\newcommand{\LWR@null@uxwidth}{}
+\newcommand{\LWR@null@mbweight}{}
+\newcommand{\LWR@null@dbweight}{}
+\newcommand{\LWR@null@sbweight}{}
+% \newcommand{\LWR@null@ebweight}{}
+\newcommand{\LWR@null@ubweight}{}
+% \newcommand{\LWR@null@lgweight}{}
+\newcommand{\LWR@null@elweight}{}
+\newcommand{\LWR@null@ulweight}{}
+% \newcommand{\LWR@null@itshape}{}
+% \newcommand{\LWR@null@scshape}{}
+% \newcommand{\LWR@null@upshape}{}
+\newcommand{\LWR@null@dfshape}{}
+
+\ifdef{\LWR@HTML@swshape}{}{% duplicated by fontaxes
+ \newcommand{\LWR@null@swshape}{}
+}
+
+\newcommand{\LWR@null@ornament}[1]{}
+
+\appto{\LWR@nullfonts}{%
+\LetLtxMacro\lnstyle\LWR@null@lnstyle%
+\LetLtxMacro\osstyle\LWR@null@osstyle%
+\LetLtxMacro\instyle\LWR@null@instyle%
+\LetLtxMacro\sustyle\LWR@null@sustyle%
+\LetLtxMacro\swstyle\LWR@null@swstyle%
+\LetLtxMacro\pstyle\LWR@null@pstyle%
+\LetLtxMacro\tistyle\LWR@null@tistyle%
+\LetLtxMacro\ostyle\LWR@null@ostyle%
+\LetLtxMacro\postyle\LWR@null@postyle%
+\LetLtxMacro\ltstyle\LWR@null@ltstyle%
+\LetLtxMacro\ofstyle\LWR@null@ofstyle%
+\LetLtxMacro\altstyle\LWR@null@altstyle%
+\LetLtxMacro\regstyle\LWR@null@regstyle%
+\LetLtxMacro\embossstyle\LWR@null@embossstyle%
+\LetLtxMacro\ornamentalstyle\LWR@null@ornamentalstyle%
+\LetLtxMacro\qtstyle\LWR@null@qtstyle%
+\LetLtxMacro\shstyle\LWR@null@shstyle%
+\LetLtxMacro\swashstyle\LWR@null@swashstyle%
+\LetLtxMacro\tmstyle\LWR@null@tmstyle%
+\LetLtxMacro\tvstyle\LWR@null@tvstyle%
+\LetLtxMacro\tstyle\LWR@null@tstyle%
+\LetLtxMacro\lstyle\LWR@null@lstyle%
+\LetLtxMacro\tlstyle\LWR@null@tlstyle%
+\LetLtxMacro\plstyle\LWR@null@plstyle%
+\LetLtxMacro\tostyle\LWR@null@tostyle%
+% \LetLtxMacro\sishape\LWR@null@sishape
+\LetLtxMacro\olshape\LWR@null@olshape%
+\LetLtxMacro\scolshape\LWR@null@scolshape%
+\LetLtxMacro\ushape\LWR@null@ushape%
+\LetLtxMacro\scushape\LWR@null@scushape%
+\LetLtxMacro\uishape\LWR@null@uishape%
+\LetLtxMacro\rishape\LWR@null@rishape%
+\LetLtxMacro\regwidth\LWR@null@regwidth%
+\LetLtxMacro\nwwidth\LWR@null@nwwidth%
+\LetLtxMacro\cdwidth\LWR@null@cdwidth%
+\LetLtxMacro\ecwidth\LWR@null@ecwidth%
+\LetLtxMacro\ucwidth\LWR@null@ucwidth%
+\LetLtxMacro\etwidth\LWR@null@etwidth%
+\LetLtxMacro\epwidth\LWR@null@epwidth%
+\LetLtxMacro\exwidth\LWR@null@exwidth%
+\LetLtxMacro\uxwidth\LWR@null@uxwidth%
+\LetLtxMacro\mbweight\LWR@null@mbweight%
+\LetLtxMacro\dbweight\LWR@null@dbweight%
+\LetLtxMacro\sbweight\LWR@null@sbweight%
+% \LetLtxMacro\ebweight\LWR@null@ebweight%
+\LetLtxMacro\ubweight\LWR@null@ubweight%
+% \LetLtxMacro\lgweight\LWR@null@lgweight%
+\LetLtxMacro\elweight\LWR@null@elweight%
+\LetLtxMacro\ulweight\LWR@null@ulweight%
+% \LetLtxMacro\itshape\LWR@null@itshape%
+% \LetLtxMacro\scshape\LWR@null@scshape%
+% \LetLtxMacro\upshape\LWR@null@upshape%
+\LetLtxMacro\dfshape\LWR@null@dfshape%
+\LetLtxMacro\swshape\LWR@null@swshape%
+\LetLtxMacro\ornament\LWR@null@ornament%
+}
+
+\newrobustcmd{\LWR@HTML@textln}[1]{#1}
+\newrobustcmd{\LWR@HTML@textos}[1]{\textsc{#1}}
+\newrobustcmd{\LWR@HTML@textin}[1]{#1}
+\newrobustcmd{\LWR@HTML@textsu}[1]{#1}
+% \newrobustcmd{\LWR@HTML@textsi}[1]{#1}
+\newrobustcmd{\LWR@HTML@textdf}[1]{#1}
+
+\ifdef{\LWR@HTML@swshape}{}{% duplicated by fontaxes
+ \newrobustcmd{\LWR@HTML@textsw}[1]{#1}
+}
+
+\newrobustcmd{\LWR@HTML@textti}[1]{#1}
+\newrobustcmd{\LWR@HTML@textlt}[1]{#1}
+\newrobustcmd{\LWR@HTML@textof}[1]{#1}
+\newrobustcmd{\LWR@HTML@textalt}[1]{#1}
+\newrobustcmd{\LWR@HTML@textreg}[1]{#1}
+\newrobustcmd{\LWR@HTML@emboss}[1]{#1}
+\newrobustcmd{\LWR@HTML@textorn}[1]{#1}
+\newrobustcmd{\LWR@HTML@textqt}[1]{#1}
+\newrobustcmd{\LWR@HTML@textsh}[1]{#1}
+\newrobustcmd{\LWR@HTML@texttm}[1]{#1}
+\newrobustcmd{\LWR@HTML@texttv}[1]{\texttt{#1}}
+\newrobustcmd{\LWR@HTML@textl}[1]{#1}
+\newrobustcmd{\LWR@HTML@texto}[1]{#1}
+\newrobustcmd{\LWR@HTML@textp}[1]{#1}
+\newrobustcmd{\LWR@HTML@textt}[1]{#1}
+\newrobustcmd{\LWR@HTML@textpl}[1]{#1}
+\newrobustcmd{\LWR@HTML@textpo}[1]{\textsc{#1}}
+\newrobustcmd{\LWR@HTML@texttl}[1]{#1}
+\newrobustcmd{\LWR@HTML@textto}[1]{\textsc{#1}}
+\newrobustcmd{\LWR@HTML@textol}[1]{#1}
+\newrobustcmd{\LWR@HTML@textswash}[1]{#1}
+\newrobustcmd{\LWR@HTML@textu}[1]{#1}
+\newrobustcmd{\LWR@HTML@textscu}[1]{#1}
+\newrobustcmd{\LWR@HTML@textui}[1]{\LWR@HTML@textit{#1}}
+\newrobustcmd{\LWR@HTML@textri}[1]{#1}
+\newrobustcmd{\LWR@HTML@textnw}[1]{#1}
+\newrobustcmd{\LWR@HTML@textcd}[1]{#1}
+\newrobustcmd{\LWR@HTML@textec}[1]{#1}
+\newrobustcmd{\LWR@HTML@textuc}[1]{#1}
+\newrobustcmd{\LWR@HTML@textet}[1]{#1}
+\newrobustcmd{\LWR@HTML@textep}[1]{#1}
+\newrobustcmd{\LWR@HTML@textex}[1]{#1}
+\newrobustcmd{\LWR@HTML@textux}[1]{#1}
+\newrobustcmd{\LWR@HTML@textrw}[1]{#1}
+\newrobustcmd{\LWR@HTML@textmb}[1]{\textmd{#1}}
+\newrobustcmd{\LWR@HTML@textdb}[1]{\textbf{#1}}
+\newrobustcmd{\LWR@HTML@textsb}[1]{\textbf{#1}}
+% \newrobustcmd{\LWR@HTML@texteb}[1]{#1}
+\newrobustcmd{\LWR@HTML@textub}[1]{\texteb{#1}}
+% \newrobustcmd{\LWR@HTML@textlg}[1]{#1}
+\newrobustcmd{\LWR@HTML@textel}[1]{\textlg{#1}}
+\newrobustcmd{\LWR@HTML@textul}[1]{\textlg{#1}}
+
+\LWR@formatted{textln}
+\LWR@formatted{textos}
+\LWR@formatted{textin}
+\LWR@formatted{textsu}
+% \LWR@formatted{textsi}
+\LWR@formatted{textdf}
+\LWR@formatted{textsw}
+\LWR@formatted{textti}
+\LWR@formatted{textlt}
+\LWR@formatted{textof}
+\LWR@formatted{textalt}
+\LWR@formatted{textreg}
+\LWR@formatted{emboss}
+\LWR@formatted{textorn}
+\LWR@formatted{textqt}
+\LWR@formatted{textsh}
+\LWR@formatted{texttm}
+\LWR@formatted{texttv}
+\LWR@formatted{textl}
+\LWR@formatted{texto}
+\LWR@formatted{textp}
+\LWR@formatted{textt}
+\LWR@formatted{textpl}
+\LWR@formatted{textpo}
+\LWR@formatted{texttl}
+\LWR@formatted{textto}
+\LWR@formatted{textol}
+\LWR@formatted{textswash}
+\LWR@formatted{textu}
+\LWR@formatted{textscu}
+\LWR@formatted{textui}
+\LWR@formatted{textri}
+\LWR@formatted{textnw}
+\LWR@formatted{textcd}
+\LWR@formatted{textec}
+\LWR@formatted{textuc}
+\LWR@formatted{textet}
+\LWR@formatted{textep}
+\LWR@formatted{textex}
+\LWR@formatted{textux}
+\LWR@formatted{textrw}
+\LWR@formatted{textmb}
+\LWR@formatted{textdb}
+\LWR@formatted{textsb}
+% \LWR@formatted{texteb}
+\LWR@formatted{textub}
+% \LWR@formatted{textlg}
+\LWR@formatted{textel}
+\LWR@formatted{textul}
+
+\newrobustcmd{\LWR@null@textln}[1]{#1}
+\newrobustcmd{\LWR@null@textos}[1]{#1}
+\newrobustcmd{\LWR@null@textin}[1]{#1}
+\newrobustcmd{\LWR@null@textsu}[1]{#1}
+% \newrobustcmd{\LWR@null@textsi}[1]{#1}
+\newrobustcmd{\LWR@null@textdf}[1]{#1}
+
+\ifdef{\LWR@HTML@swshape}{}{% duplicated by fontaxes
+ \newrobustcmd{\LWR@null@textsw}[1]{#1}
+}
+
+\newrobustcmd{\LWR@null@textti}[1]{#1}
+\newrobustcmd{\LWR@null@textlt}[1]{#1}
+\newrobustcmd{\LWR@null@textof}[1]{#1}
+\newrobustcmd{\LWR@null@textalt}[1]{#1}
+\newrobustcmd{\LWR@null@textreg}[1]{#1}
+\newrobustcmd{\LWR@null@emboss}[1]{#1}
+\newrobustcmd{\LWR@null@textorn}[1]{#1}
+\newrobustcmd{\LWR@null@textqt}[1]{#1}
+\newrobustcmd{\LWR@null@textsh}[1]{#1}
+\newrobustcmd{\LWR@null@texttm}[1]{#1}
+\newrobustcmd{\LWR@null@texttv}[1]{#1}
+\newrobustcmd{\LWR@null@textl}[1]{#1}
+\newrobustcmd{\LWR@null@texto}[1]{#1}
+\newrobustcmd{\LWR@null@textp}[1]{#1}
+\newrobustcmd{\LWR@null@textt}[1]{#1}
+\newrobustcmd{\LWR@null@textpl}[1]{#1}
+\newrobustcmd{\LWR@null@textpo}[1]{#1}
+\newrobustcmd{\LWR@null@texttl}[1]{#1}
+\newrobustcmd{\LWR@null@textto}[1]{#1}
+\newrobustcmd{\LWR@null@textol}[1]{#1}
+\newrobustcmd{\LWR@null@textswash}[1]{#1}
+\newrobustcmd{\LWR@null@textu}[1]{#1}
+\newrobustcmd{\LWR@null@textscu}[1]{#1}
+\newrobustcmd{\LWR@null@textui}[1]{#1}
+\newrobustcmd{\LWR@null@textri}[1]{#1}
+\newrobustcmd{\LWR@null@textnw}[1]{#1}
+\newrobustcmd{\LWR@null@textcd}[1]{#1}
+\newrobustcmd{\LWR@null@textec}[1]{#1}
+\newrobustcmd{\LWR@null@textuc}[1]{#1}
+\newrobustcmd{\LWR@null@textet}[1]{#1}
+\newrobustcmd{\LWR@null@textep}[1]{#1}
+\newrobustcmd{\LWR@null@textex}[1]{#1}
+\newrobustcmd{\LWR@null@textux}[1]{#1}
+\newrobustcmd{\LWR@null@textrw}[1]{#1}
+\newrobustcmd{\LWR@null@textmb}[1]{#1}
+\newrobustcmd{\LWR@null@textdb}[1]{#1}
+\newrobustcmd{\LWR@null@textsb}[1]{#1}
+% \newrobustcmd{\LWR@null@texteb}[1]{#1}
+\newrobustcmd{\LWR@null@textub}[1]{#1}
+% \newrobustcmd{\LWR@null@textlg}[1]{#1}
+\newrobustcmd{\LWR@null@textel}[1]{#1}
+\newrobustcmd{\LWR@null@textul}[1]{#1}
+
+\appto{\LWR@nullfonts}{%
+\LetLtxMacro\textln\LWR@null@textln%
+\LetLtxMacro\textos\LWR@null@textos%
+\LetLtxMacro\textin\LWR@null@textin%
+\LetLtxMacro\textsu\LWR@null@textsu%
+% \LetLtxMacro\textsi\LWR@null@textsi%
+\LetLtxMacro\textdf\LWR@null@textdf%
+\LetLtxMacro\textsw\LWR@null@textsw%
+\LetLtxMacro\textti\LWR@null@textti%
+\LetLtxMacro\textlt\LWR@null@textlt%
+\LetLtxMacro\textof\LWR@null@textof%
+\LetLtxMacro\textalt\LWR@null@textalt%
+\LetLtxMacro\textreg\LWR@null@textreg%
+\LetLtxMacro\emboss\LWR@null@emboss%
+\LetLtxMacro\textorn\LWR@null@textorn%
+\LetLtxMacro\textqt\LWR@null@textqt%
+\LetLtxMacro\textsh\LWR@null@textsh%
+\LetLtxMacro\texttm\LWR@null@texttm%
+\LetLtxMacro\texttv\LWR@null@texttv%
+\LetLtxMacro\textl\LWR@null@textl%
+\LetLtxMacro\texto\LWR@null@texto%
+\LetLtxMacro\textp\LWR@null@textp%
+\LetLtxMacro\textt\LWR@null@textt%
+\LetLtxMacro\textpl\LWR@null@textpl%
+\LetLtxMacro\textpo\LWR@null@textpo%
+\LetLtxMacro\texttl\LWR@null@texttl%
+\LetLtxMacro\textto\LWR@null@textto%
+\LetLtxMacro\textol\LWR@null@textol%
+\LetLtxMacro\textswash\LWR@null@textswash%
+\LetLtxMacro\textu\LWR@null@textu%
+\LetLtxMacro\textscu\LWR@null@textscu%
+\LetLtxMacro\textui\LWR@null@textui%
+\LetLtxMacro\textri\LWR@null@textri%
+\LetLtxMacro\textnw\LWR@null@textnw%
+\LetLtxMacro\textcd\LWR@null@textcd%
+\LetLtxMacro\textec\LWR@null@textec%
+\LetLtxMacro\textuc\LWR@null@textuc%
+\LetLtxMacro\textet\LWR@null@textet%
+\LetLtxMacro\textep\LWR@null@textep%
+\LetLtxMacro\textex\LWR@null@textex%
+\LetLtxMacro\textux\LWR@null@textux%
+\LetLtxMacro\textrw\LWR@null@textrw%
+\LetLtxMacro\textmb\LWR@null@textmb%
+\LetLtxMacro\textdb\LWR@null@textdb%
+\LetLtxMacro\textsb\LWR@null@textsb%
+% \LetLtxMacro\texteb\LWR@null@texteb%
+\LetLtxMacro\textub\LWR@null@textub%
+% \LetLtxMacro\textlg\LWR@null@textlg%
+\LetLtxMacro\textel\LWR@null@textel%
+\LetLtxMacro\textul\LWR@null@textul%
+}
+
+\providecommand*{\zeroslash}{0}
+\newrobustcmd*{\LWR@HTML@zeroslash}{0}
+\LWR@formatted{zeroslash}
+% \end{macrocode}
+%
+% \iffalse
+%</nfssext-cfr>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*nicefrac>
+% \fi
+%
+% \part{lwarp-nicefrac.sty}
+
+% \section{nicefrac}
+%
+% \credits{Axel Reichert}
+%
+% \DescribePackage{nicefrac}
+% \pkg{nicefrac} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.52}{2018/03/25}{\pkg{nicefrac}: Added.}
+% \changes{v0.62}{2018/11/15}{\pkg{nicefrac}: Improved font control and \CSS,
+% honors \optn{nice}, \optn{ugly}.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{nicefrac}[1998/08/04]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareRobustCommand*{\LWR@HTML@@UnitsNiceFrac}[3][]{%
+ {% localize font selection
+ #1{%
+ \LWR@textcurrentfont{%
+ \InlineClass{numerator}{#2}%
+ /%
+ \InlineClass{denominator}{#3}%
+ }%
+ }%
+ }%
+}
+
+\LWR@formatted{@UnitsNiceFrac}
+
+\DeclareRobustCommand*{\LWR@HTML@@UnitsUglyFrac}[3][]{%
+ {% localize font selection
+ #1{\LWR@textcurrentfont{#2/#3}}%
+ }%
+}
+
+\LWR@formatted{@UnitsUglyFrac}
+% \end{macrocode}
+%
+% For Mathjax:
+% \begin{macrocode}
+\CustomizeMathJax{\newcommand{\nicefrac}[3][]{#2/#3}}
+% \end{macrocode}
+%
+% ^^A For Ka\TeX:
+% ^^A % \begin{macrocode}
+% ^^A \CustomizeKaTeX{\gdef\nicefrac[#1]#2#3{#2/#3}}
+% ^^A % \end{macrocode}
+%
+% \iffalse
+%</nicefrac>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*niceframe>
+% \fi
+%
+% \part{lwarp-niceframe.sty}
+%
+% \section{niceframe}
+%
+% \DescribePackage{niceframe}
+% \pkg{niceframe} is emulated.
+%
+% \changes{v0.68}{2019/02/28}{\pkg{niceframe}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{niceframe}% the original date is in yyyy/dd/mm format
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\LWR@niceframe}[3]{
+ \setlength{\LWR@templengthone}{#1}
+ \begin{BlockClass}[max-width:\LWR@printlength{\LWR@templengthone}]{#3}
+ #2
+ \end{BlockClass}
+}
+
+\newcommand{\niceframe}[2][\textwidth]{\LWR@niceframe{#1}{#2}{niceframe}}
+\newcommand{\curlyframe}[2][\textwidth]{\LWR@niceframe{#1}{#2}{curlyframe}}
+\newcommand{\artdecoframe}[2][\textwidth]{\LWR@niceframe{#1}{#2}{artdecoframe}}
+
+\newcommand{\generalframe}[9]{\LWR@niceframe{\textwidth}{#9}{generalframe}}
+% \end{macrocode}
+%
+% \iffalse
+%</niceframe>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*nomencl>
+% \fi
+%
+% \part{lwarp-nomencl.sty}
+%
+% \section{nomencl}
+%
+% \credits{Boris Veytsman, Bernd Schandl, Lee Netherton, CV Radhakrishnan}
+%
+% \DescribePackage{nomencl}
+% \pkg{nomencl} is patched for use by \pkg{lwarp}.
+%
+% \limitsnomencl
+%
+% \changes{v0.67}{2019/02/18}{\pkg{nomencl}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{nomencl}[2005/09/22]
+% \end{macrocode}
+%
+% \cs{BaseJobname} is added to the label in case \pkg{xr} or \pkg{xr-hyper} are used.
+%
+% \changes{v0.72}{2019/06/05}{\pkg{nomencl}: Fix references for \pkg{xr}, \pkg{xr-hyper}.}
+% \begin{macrocode}
+\def\@@@nomenclature[#1]#2#3{%
+ \def\@tempa{#2}\def\@tempb{#3}%
+ \protected@write\@nomenclaturefile{}%
+ {\string\nomenclatureentry{#1\nom@verb\@tempa @[{\nom@verb\@tempa}]%
+ \begingroup\nom@verb\@tempb\protect\nomeqref{\theequation}%
+ |nompageref}{\theLWR@previousautopagelabel}}% lwarp
+ \endgroup
+ \@esphack}
+
+\renewcommand*{\pagedeclaration}[1]{, \nameref{\BaseJobname-autopage-#1}}%
+% \end{macrocode}
+%
+% \iffalse
+%</nomencl>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*nonfloat>
+% \fi
+%
+% \part{lwarp-nonfloat.sty}
+%
+% \section{nonfloat}
+%
+% \credits{Kai Rascher}
+%
+% \DescribePackage{nonfloat}
+% \pkg{nonfloat} is emulated.
+%
+% \changes{v0.50}{2018/02/21}{\pkg{nonfloat}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{nonfloat}[1999/07/05]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LetLtxMacro\topcaption\caption
+\newcommand{\figcaption}{\def\@captype{figure}\caption}
+\newcommand{\tabcaption}{\def\@captype{table}\topcaption}
+\newenvironment{narrow}[2]{}{}
+% \end{macrocode}
+%
+% \iffalse
+%</nonfloat>
+% \fi
+%
+%
+%
+% \iffalse
+%<*nonumonpart>
+% \fi
+%
+% \part{lwarp-nonumonpart.sty}
+%
+% \section{nonumonpart}
+%
+% \DescribePackage{nonumonpart}
+% \pkg{nonumonpart} is ignored.
+%
+% \changes{v0.38}{2017/08/25}{\pkg{nonumonpart}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{nonumonpart}[2011/04/15]
+% \end{macrocode}
+%
+%
+% \iffalse
+%</nonumonpart>
+% \fi
+%
+%
+%
+% \iffalse
+%<*nopageno>
+% \fi
+%
+% \part{lwarp-nopageno.sty}
+%
+% \section{nopageno}
+%
+% \DescribePackage{nopageno}
+% \pkg{nopageno} is ignored.
+%
+% \changes{v0.38}{2017/08/25}{\pkg{nopageno}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{nopageno}[1989/01/01]
+% \end{macrocode}
+%
+%
+% \iffalse
+%</nopageno>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*notes>
+% \fi
+%
+% \part{lwarp-notes.sty}
+%
+% \section{notes}
+%
+% \DescribePackage{notes}
+% \pkg{notes} is emulated.
+%
+% \changes{v0.67}{2019/02/18}{\pkg{notes}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{notes}[2002/10/29]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@notes@onenote}[2]{%
+\newenvironment{#1}
+ {
+ \BlockClass{notes#1}
+ \begin{BlockClass}{notesicon}\textcircled{~#2~}\end{BlockClass}
+ \BlockClass{notescontents}
+ }
+ {\endBlockClass\endBlockClass}
+}
+
+\LWR@notes@onenote{importantnote}{!}
+
+\LWR@notes@onenote{warningnote}{--}
+
+\LWR@notes@onenote{informationnote}{i}
+% \end{macrocode}
+%
+% \iffalse
+%</notes>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*notespages>
+% \fi
+%
+% \part{lwarp-notespages.sty}
+%
+% \section{notespages}
+%
+% \DescribePackage{notespages}
+% \pkg{notespages} is ignored.
+%
+% \changes{v0.62}{2018/11/11}{\pkg{notespages}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{notespages}[2016/08/21]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\npnotesname}{}
+\newcommand*{\npnotestext}{}
+\newcommand*{\remainingtextheight}{}
+\newdimen\remainingtextheight
+\newcommand*{\notestitletext}{}
+\newcommand*{\notesareatext}{}
+\newcommand*{\npnpinfo}[1]{}
+\newcommand*{\tracingnpmarks}{}
+\newcommand*{\notespage}[1][]{}
+\newcommand*{\notespages}[1][]{}
+\newcommand*{\notesfill}[1][]{}
+\newcommand*{\setnotespages}[1]{}
+\newcommand*{\definenotesoption}[2]{}
+\newcommand{\definenotesstyle}[2]{}
+\newcommand{\definetitlestyle}[2]{}
+\newcommand{\nppatchchapter}[1]{}
+\newcommand{\npunpatchchapter}{}
+% \end{macrocode}
+%
+% \iffalse
+%</notespages>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*nowidow>
+% \fi
+
+% \part{lwarp-nowidow.sty}
+
+% \section{nowidow}
+%
+% \credits{Rapha\"{e}l Pinson}
+%
+% \DescribePackage{nowidow} \pkg{nowidow} is ignored.
+%
+% \changes{v0.20}{2017/01/03}{\pkg{nowidow}: Added.}
+%
+%
+% Discard all options for \pkg{lwarp-nowidow}:
+
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{nowidow}[2011/09/20]
+% \end{macrocode}
+
+% \begin{noindmacro}{\nowidow} \oarg{lines}
+% \begin{noindmacro}{\setnowidow} \oarg{lines}
+% \begin{macrocode}
+\newcommand*{\nowidow}[1][]{}
+\newcommand*{\setnowidow}[1][]{}
+% \end{macrocode}
+% \end{noindmacro}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\noclub} \oarg{lines}
+% \begin{noindmacro}{\setnoclub} \oarg{lines}
+% \begin{macrocode}
+\newcommand*{\noclub}[1][]{}
+\newcommand*{\setnoclub}[1][]{}
+% \end{macrocode}
+% \end{noindmacro}
+% \end{noindmacro}
+%
+% \iffalse
+%</nowidow>
+% \fi
+%
+%
+%
+% \addtocontents{toc}{\protect\setcounter{tocdepth}{2}}
+%
+%
+%
+% \iffalse
+%<*ntheorem>
+% \fi
+
+% \part{lwarp-ntheorem.sty}
+%
+% \section{ntheorem}
+%
+% \label{sec:ntheorem}
+%
+% \credits{Wolfgang May, Andreas Schedler}
+%
+% \DescribePackage{ntheorem}
+% \pkg{ntheorem} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.25}{2017/03/22}{\pkg{ntheorem}: Added.}
+% \changes{v0.46}{2018/01/22}{\pkg{ntheorem}: Adapted to \env{trivlist} changes.}
+%
+% \begin{table}[ht]
+% \hrule
+% \smallskip
+% \caption{Ntheorem package \Dash \CSS\ styling of theorems and proofs}\unskip
+% \begin{description}
+% \item [Theorem:] \element{div} of class |theorembody<theoremstyle>|
+% \item [Theorem Header:] \element{span} of class |theoremheader<style>|
+% \end{description}
+% where |<theoremstyle>| is |plain|, |break|, etc.
+% \smallskip
+% \hrule
+% \end{table}
+%
+%
+% \subsection{Limitations}
+%
+% \limitsntheorem
+%
+% \subsection{Options}
+%
+% Options |amsthm| or |standard| choose which set of theorems and proofs
+% to initialize.
+%
+% The options |thmmarks| and |amsmath| are disabled, since they
+% \trouble[Disabled options]{ntheorem=\pkg{ntheorem}}
+% heavily modify the underlying math code. Theorem marks are emulated.
+% The AMS-math modifications are not done.
+%
+% Option |thref| is disabled because \pkg{cleveref} functions are used instead.
+% \cs{thref} is emulated.
+%
+% Option |hyperref| is disabled because \pkg{lwarp} emulated \pkg{hyperref}.
+%
+% \codehtml
+%
+% Some disabled options:
+% \begin{macrocode}
+\DeclareOption{thref}{}
+
+
+\newbool{LWR@ntheoremmarks}
+\boolfalse{LWR@ntheoremmarks}
+
+\DeclareOption{thmmarks}{
+\booltrue{LWR@ntheoremmarks}
+\newif\ifsetendmark\setendmarktrue
+}
+
+
+\newbool{LWR@ntheoremamsthm}
+\boolfalse{LWR@ntheoremamsthm}
+
+\DeclareOption{amsthm}{\booltrue{LWR@ntheoremamsthm}}
+
+
+\DeclareOption{amsmath}{}
+\DeclareOption{hyperref}{}
+
+\LWR@ProvidesPackagePass{ntheorem}[2011/08/15]
+% \end{macrocode}
+%
+%
+% \subsection{Remembering the theorem style}
+%
+% Storage for the style being used for new theorems.
+% \begin{macrocode}
+\newcommand{\LWR@newtheoremstyle}{plain}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifpackageloaded{cleveref}{
+\gdef\@thm#1#2#3{%
+ \if@thmmarks
+ \stepcounter{end\InTheoType ctr}%
+ \fi
+ \renewcommand{\InTheoType}{#1}%
+ \if@thmmarks
+ \stepcounter{curr#1ctr}%
+ \setcounter{end#1ctr}{0}%
+ \fi
+ \refstepcounter[#1]{#2}% <<< cleveref modification
+ \theorem@prework
+ \LWR@forcenewpage% lwarp
+ \BlockClass{theorembody#1}%\LWR@thisthmstyle% lwarp
+ \trivlist % latex's \trivlist, calling latex's \@trivlist unchanged
+ \ifuse@newframeskips % cf. latex.ltx for topsepadd: \@trivlist
+ \ifthm@inframe
+ \thm@topsep\theoreminframepreskipamount
+ \thm@topsepadd\theoreminframepostskipamount
+ \else
+ \thm@topsep\theorempreskipamount
+ \thm@topsepadd\theorempostskipamount
+ \fi
+ \else% oldframeskips
+ \thm@topsep\theorempreskipamount
+ \thm@topsepadd \theorempostskipamount
+ \ifvmode\advance\thm@topsepadd\partopsep\fi
+ \fi
+ \@topsep\thm@topsep
+ \@topsepadd\thm@topsepadd
+ \advance\linewidth -\theorem@indent
+ \advance\linewidth -\theorem@rightindent
+ \advance\@totalleftmargin \theorem@indent
+ \parshape \@ne \@totalleftmargin \linewidth
+ \@ifnextchar[{\@ythm{#1}{#2}{#3}}{\@xthm{#1}{#2}{#3}}
+}
+}{% not @ifpackageloaded{cleveref}
+\gdef\@thm#1#2#3{%
+ \if@thmmarks
+ \stepcounter{end\InTheoType ctr}%
+ \fi
+ \renewcommand{\InTheoType}{#1}%
+ \if@thmmarks
+ \stepcounter{curr#1ctr}%
+ \setcounter{end#1ctr}{0}%
+ \fi
+ \refstepcounter{#2}%
+ \theorem@prework
+ \LWR@forcenewpage% lwarp
+ \BlockClass{theorembody#1}%\LWR@thisthmstyle% lwarp
+ \trivlist % latex's \trivlist, calling latex's \@trivlist unchanged
+ \ifuse@newframeskips % cf. latex.ltx for topsepadd: \@trivlist
+ \ifthm@inframe
+ \thm@topsep\theoreminframepreskipamount
+ \thm@topsepadd\theoreminframepostskipamount
+ \else
+ \thm@topsep\theorempreskipamount
+ \thm@topsepadd\theorempostskipamount
+ \fi
+ \else% oldframeskips
+ \thm@topsep\theorempreskipamount
+ \thm@topsepadd \theorempostskipamount
+ \ifvmode\advance\thm@topsepadd\partopsep\fi
+ \fi
+ \@topsep\thm@topsep
+ \@topsepadd\thm@topsepadd
+ \advance\linewidth -\theorem@indent
+ \advance\linewidth -\theorem@rightindent
+ \advance\@totalleftmargin \theorem@indent
+ \parshape \@ne \@totalleftmargin \linewidth
+ \@ifnextchar[{\@ythm{#1}{#2}{#3}}{\@xthm{#1}{#2}{#3}}
+}
+}
+}% AtBeginDocument
+% \end{macrocode}
+%
+%
+%
+% Patched to remember the style being used for new theorems:
+% \begin{macrocode}
+\gdef\theoremstyle#1{%
+ \@ifundefined{th@#1}{\@warning
+ {Unknown theoremstyle `#1'. Using `plain'}%
+ \theorem@style{plain}
+ \renewcommand{\LWR@newtheoremstyle}{plain}% lwarp
+ }%
+ {
+ \theorem@style{#1}
+ \renewcommand{\LWR@newtheoremstyle}{#1}% lwarp
+ }
+}
+% \end{macrocode}
+%
+%
+% Patched to remember the style for this theorem type,
+% and set it later when the environment is started.
+% \begin{macrocode}
+
+\gdef\@xnthm#1#2[#3]{%
+ \ifthm@tempif
+ \csedef{LWR@thmstyle#1}{\LWR@newtheoremstyle}% lwarp
+ \expandafter\@ifundefined{c@#1}%
+ {\@definecounter{#1}}{}%
+ \@newctr{#1}[#3]%
+ \expandafter\xdef\csname the#1\endcsname{%
+ \expandafter\noexpand\csname the#3\endcsname \@thmcountersep
+ {\noexpand\csname\the\theoremnumbering\endcsname{#1}}}%
+ \expandafter\gdef\csname mkheader@#1\endcsname
+ {\csname setparms@#1\endcsname
+ \@thm{#1}{#1}{#2}
+ }%
+ \global\@namedef{end#1}{\@endtheorem}
+ \AtBeginEnvironment{#1}{\edef\LWR@thisthmstyle{\@nameuse{LWR@thmstyle#1}}}% lwarp
+ \fi
+}
+
+\gdef\@ynthm#1#2{%
+ \ifthm@tempif
+ \csedef{LWR@thmstyle#1}{\LWR@newtheoremstyle}% lwarp
+ \expandafter\@ifundefined{c@#1}%
+ {\@definecounter{#1}}{}%
+ \expandafter\xdef\csname the#1\endcsname
+ {\noexpand\csname\the\theoremnumbering\endcsname{#1}}%
+ \expandafter\gdef\csname mkheader@#1\endcsname
+ {\csname setparms@#1\endcsname
+ \@thm{#1}{#1}{#2}
+ }%
+ \global\@namedef{end#1}{\@endtheorem}
+ \AtBeginEnvironment{#1}{\edef\LWR@thisthmstyle{\@nameuse{LWR@thmstyle#1}}}% lwarp
+ \fi
+}
+
+\gdef\@othm#1[#2]#3{%
+ \@ifundefined{c@#2}{\@nocounterr{#2}}%
+ {\ifthm@tempif
+ \csedef{LWR@thmstyle#1}{\LWR@newtheoremstyle}% lwarp
+ \global\@namedef{the#1}{\@nameuse{the#2}}%
+ \expandafter\protected@xdef\csname num@addtheoremline#1\endcsname{%
+ \noexpand\@num@addtheoremline{#1}{#3}}%
+ \expandafter\protected@xdef\csname nonum@addtheoremline#1\endcsname{%
+ \noexpand\@nonum@addtheoremline{#1}{#3}}%
+ \theoremkeyword{#3}%
+ \expandafter\protected@xdef\csname #1Keyword\endcsname
+ {\the\theoremkeyword}%
+ \expandafter\gdef\csname mkheader@#1\endcsname
+ {\csname setparms@#1\endcsname
+ \@thm{#1}{#2}{#3}
+ }%
+ \global\@namedef{end#1}{\@endtheorem}
+ \AtBeginEnvironment{#1}{\edef\LWR@thisthmstyle{\@nameuse{LWR@thmstyle#1}}}% lwarp
+ \fi}
+}
+% \end{macrocode}
+%
+%
+% \subsection{\HTML\ cross-referencing}
+%
+% Mimics a float by incrementing the float counter and generating
+% an \HTML\ anchor. These are used for list-of-theorem cross-references.
+% \changes{v0.47}{2018/01/26}{\pkg{ntheorem}: Fix: Line wrap at \HTML\ hyphen.}
+% \begin{macrocode}
+\newcommand{\LWR@inctheorem}{%
+\addtocounter{LWR@thisautoid}{1}%
+\LWR@stoppars%
+\LWR@htmltag{a id="\LWR@print@mbox{autoid-\arabic{LWR@thisautoid}}"}\LWR@htmltag{/a}%
+\LWR@startpars%
+}
+% \end{macrocode}
+%
+%
+% \subsection{\cs{newtheoremstyle}}
+%
+% The following are patched for \CSS.
+%
+% These were in individual files |thp.sty| for plain,
+% |thmb.sty| for margin break, etc.
+% They are gathered together here.
+%
+% Each theorem is encased in a \env{BlockClass} environment
+% of class |theorembody<style>|.
+%
+% Each header is encased in an \cs{InlineClass} of class |theoremheader<style>|.
+% \begin{macrocode}
+\gdef\newtheoremstyle#1#2#3{%
+ \expandafter\@ifundefined{th@#1}%
+ {\expandafter\gdef\csname th@#1\endcsname{%
+ \def\@begintheorem####1####2{%
+ \LWR@inctheorem% lwarp
+ #2}%
+ \def\@opargbegintheorem####1####2####3{%
+ \LWR@inctheorem% lwarp
+ #3}%
+}%
+}%
+{\PackageError{\basename}{Theorem style #1 already defined}\@eha}
+}
+% \end{macrocode}
+%
+% \subsection{Standard styles}
+%
+% \begin{macrocode}
+\renewtheoremstyle{plain}%
+ {\item[
+ \InlineClass{theoremheaderplain}{##1\ ##2\theorem@separator}]}%
+ {\item[
+ \InlineClass{theoremheaderplain}{##1\ ##2\ (##3)\theorem@separator}]}
+
+\renewtheoremstyle{break}%
+ {\item[
+ \InlineClass{theoremheaderbreak}{##1\ ##2\theorem@separator}\newline
+ ]}%
+ {\item[
+ \InlineClass{theoremheaderbreak}%
+ {##1\ ##2\ (##3)\theorem@separator}\newline
+ ]}
+
+\renewtheoremstyle{change}%
+ {\item[
+ \InlineClass{theoremheaderchange}{##2\ ##1\theorem@separator}]}%
+ {\item[
+ \InlineClass{theoremheaderchange}{##2\ ##1\ (##3)\theorem@separator}]}
+
+\renewtheoremstyle{changebreak}%
+ {\item[
+ \InlineClass{theoremheaderchangebreak}%
+ {##2\ ##1\theorem@separator}\newline
+ ]}%
+ {\item[
+ \InlineClass{theoremheaderchangebreak}%
+ {##2\ ##1\ (##3)\theorem@separator}\newline
+ ]}
+
+\renewtheoremstyle{margin}%
+ {\item[
+ \InlineClass{theoremheadermargin}{##2 \qquad ##1\theorem@separator}
+ ]}%
+ {\item[
+ \InlineClass{theoremheadermargin}{##2 \qquad ##1\ (##3)\theorem@separator}
+ ]}
+
+\renewtheoremstyle{marginbreak}%
+ {\item[
+ \InlineClass{theoremheadermarginbreak}%
+ {##2 \qquad ##1\theorem@separator}\newline
+ ]}%
+ {\item[
+ \InlineClass{theoremheadermarginbreak}%
+ {##2 \qquad ##1\ (##3)\theorem@separator}\newline
+ ]}
+
+\renewtheoremstyle{nonumberplain}%
+ {\item[
+ \InlineClass{theoremheaderplain}{##1\theorem@separator}]}%
+ {\item[
+ \InlineClass{theoremheaderplain}{##1\ (##3)\theorem@separator}]}
+
+\renewtheoremstyle{nonumberbreak}%
+ {\item[
+ \InlineClass{theoremheaderbreak}{##1\theorem@separator}\newline
+ ]}%
+ {\item[
+ \InlineClass{theoremheaderbreak}{##1\ (##3)\theorem@separator}\newline
+ ]}
+
+\renewtheoremstyle{empty}%
+ {\item[]}%
+ {\item[
+ \InlineClass{theoremheaderplain}{##3}]}
+
+\renewtheoremstyle{emptybreak}%
+ {\item[]}%
+ {\item[
+ \InlineClass{theoremheaderplain}{##3}] \ \newline}
+% \end{macrocode}
+%
+%
+% \subsection{Additional objects}
+%
+% The following manually adjust the \CSS\ for the standard configuration
+% objects which are not a purely plain style:
+% \begin{macrocode}
+\ifbool{LWR@ntheoremamsthm}{}{%
+% \end{macrocode}
+% Upright text via CSS:
+% \begin{macrocode}
+ \newtheoremstyle{plainupright}%
+ {\item[
+ \InlineClass{theoremheaderplain}{##1\ ##2\theorem@separator}]}%
+ {\item[
+ \InlineClass{theoremheaderplain}{##1\ ##2\ (##3)\theorem@separator}]}
+% \end{macrocode}
+% Upright text and small caps header via CSS:
+% \begin{macrocode}
+ \newtheoremstyle{nonumberplainuprightsc}%
+ {\item[
+ \InlineClass{theoremheadersc}{##1\theorem@separator}]}%
+ {\item[
+ \InlineClass{theoremheadersc}{##1\ (##3)\theorem@separator}]}
+}% not amsthm
+% \end{macrocode}
+%
+%
+% \subsection{Renewed standard configuration}
+%
+% The following standard configuration is renewed using the new \CSS:
+% \begin{macrocode}
+\ifbool{LWR@ntheoremamsthm}{}{%
+% \end{macrocode}
+% \changes{v0.50}{2018/03/01}{\pkg{ntheorem}: Fix: Not \optn{standard} nor \optn{amsthm} selected.}
+% \begin{macrocode}
+\ifx\thm@usestd\@undefined
+\else
+ \theoremnumbering{arabic}
+ \theoremstyle{plain}
+ \RequirePackage{latexsym}
+ \theoremsymbol{\Box}
+ \theorembodyfont{\itshape}
+ \theoremheaderfont{\normalfont\bfseries}
+ \theoremseparator{}
+ \renewtheorem{Theorem}{Theorem}
+ \renewtheorem{theorem}{Theorem}
+ \renewtheorem{Satz}{Satz}
+ \renewtheorem{satz}{Satz}
+ \renewtheorem{Proposition}{Proposition}
+ \renewtheorem{proposition}{Proposition}
+ \renewtheorem{Lemma}{Lemma}
+ \renewtheorem{lemma}{Lemma}
+ \renewtheorem{Korollar}{Korollar}
+ \renewtheorem{korollar}{Korollar}
+ \renewtheorem{Corollary}{Corollary}
+ \renewtheorem{corollary}{Corollary}
+
+ \theoremstyle{plainupright}
+ \theorembodyfont{\upshape}
+ \theoremsymbol{\HTMLunicode{25A1}}% UTF-8 white box
+ \renewtheorem{Example}{Example}
+ \renewtheorem{example}{Example}
+ \renewtheorem{Beispiel}{Beispiel}
+ \renewtheorem{beispiel}{Beispiel}
+ \renewtheorem{Bemerkung}{Bemerkung}
+ \renewtheorem{bemerkung}{Bemerkung}
+ \renewtheorem{Anmerkung}{Anmerkung}
+ \renewtheorem{anmerkung}{Anmerkung}
+ \renewtheorem{Remark}{Remark}
+ \renewtheorem{remark}{Remark}
+ \renewtheorem{Definition}{Definition}
+ \renewtheorem{definition}{Definition}
+
+ \theoremstyle{nonumberplainuprightsc}
+ \theoremsymbol{\HTMLunicode{220E}}% UTF-8 end-of-proof
+ \renewtheorem{Proof}{Proof}
+ \renewtheorem{proof}{Proof}
+ \renewtheorem{Beweis}{Beweis}
+ \renewtheorem{beweis}{Beweis}
+ \qedsymbol{\HTMLunicode{220E}}% UTF-8 end-of-proof
+
+ \theoremsymbol{}
+\fi
+}% not amsthm
+% \end{macrocode}
+%
+%
+% \subsection{\pkg{amsthm} option}
+%
+% Only if the \optn{amsthm} option was given:
+% \begin{macrocode}
+\ifbool{LWR@ntheoremamsthm}{
+
+\gdef\th@plain{%
+ \def\theorem@headerfont{\normalfont\bfseries}\itshape%
+ \def\@begintheorem##1##2{%
+ \LWR@inctheorem% lwarp
+ \item[
+ \InlineClass{theoremheaderplain}{##1\ ##2.}
+ ]}%
+ \def\@opargbegintheorem##1##2##3{%
+ \LWR@inctheorem% lwarp
+ \item[
+ \InlineClass{theoremheaderplain}{##1\ ##2\ (##3).}
+ ]}}
+
+\gdef\th@nonumberplain{%
+ \def\theorem@headerfont{\normalfont\bfseries}\itshape%
+ \def\@begintheorem##1##2{%
+ \LWR@inctheorem% lwarp
+ \item[
+ \InlineClass{theoremheaderplain}{##1.}
+ ]}%
+ \def\@opargbegintheorem##1##2##3{%
+ \LWR@inctheorem% lwarp
+ \item[
+ \InlineClass{theoremheaderplain}{##1\ (##3).}
+ ]}}
+
+\gdef\th@definition{%
+ \def\theorem@headerfont{\normalfont\bfseries}\normalfont%
+ \def\@begintheorem##1##2{%
+ \LWR@inctheorem% lwarp
+ \item[
+ \InlineClass{theoremheaderdefinition}{##1\ ##2.}
+ ]}%
+ \def\@opargbegintheorem##1##2##3{%
+ \LWR@inctheorem% lwarp
+ \item[
+ \InlineClass{theoremheaderdefinition}{##1\ ##2\ (##3).}
+ ]}}
+
+\gdef\th@nonumberdefinition{%
+ \def\theorem@headerfont{\normalfont\bfseries}\normalfont%
+ \def\@begintheorem##1##2{%
+ \LWR@inctheorem% lwarp
+ \item[
+ \InlineClass{theoremheaderdefinition}{##1.}
+ ]}%
+ \def\@opargbegintheorem##1##2##3{%
+ \LWR@inctheorem% lwarp
+ \item[
+ \InlineClass{theoremheaderdefinition}{##1\ (##3).}
+ ]}}
+
+\gdef\th@remark{%
+ \def\theorem@headerfont{\itshape}\normalfont%
+ \def\@begintheorem##1##2{%
+ \LWR@inctheorem% lwarp
+ \item[
+ \InlineClass{theoremheaderremark}{##1\ ##2.}
+ ]}%
+ \def\@opargbegintheorem##1##2##3{%
+ \LWR@inctheorem% lwarp
+ \item[
+ \InlineClass{theoremheaderremark}{##1\ ##2\ (##3).}
+ ]}}
+
+\gdef\th@nonumberremark{%
+ \def\theorem@headerfont{\itshape}\normalfont%
+ \def\@begintheorem##1##2{%
+ \LWR@inctheorem% lwarp
+ \item[
+ \InlineClass{theoremheaderremark}{##1.}
+ ]}%
+ \def\@opargbegintheorem##1##2##3{%
+ \LWR@inctheorem% lwarp
+ \item[
+ \InlineClass{theoremheaderremark}{##1\ (##3).}
+ ]}}
+
+\gdef\th@proof{%
+ \def\theorem@headerfont{\normalfont\bfseries}\itshape%
+ \def\@begintheorem##1##2{%
+ \LWR@inctheorem% lwarp
+ \item[
+ \InlineClass{theoremheaderproof}{##1.}
+ ]}%
+ \def\@opargbegintheorem##1##2##3{%
+ \LWR@inctheorem% lwarp
+ \item[
+ \InlineClass{theoremheaderproof}{##1\ (##3).}
+ ]}}
+
+
+
+\newcounter{proof}%
+\if@thmmarks
+ \newcounter{currproofctr}%
+ \newcounter{endproofctr}%
+\fi
+
+\gdef\proofSymbol{\openbox}
+
+\newcommand{\proofname}{Proof}
+
+\newenvironment{proof}[1][\proofname]{
+ \th@proof
+ \def\theorem@headerfont{\itshape}%
+ \normalfont
+ \theoremsymbol{\HTMLunicode{220E}}% UTF-8 end-of-proof
+ \@thm{proof}{proof}{#1}
+}%
+{\@endtheorem}
+
+}{}% amsthm option
+% \end{macrocode}
+%
+%
+% \subsection{Ending a theorem}
+%
+% Patched for \CSS:
+% \begin{macrocode}
+\let\LWR@origendtheorem\@endtheorem
+\renewcommand{\@endtheorem}{%
+\ifbool{LWR@ntheoremmarks}{%
+ \ifsetendmark%
+ \InlineClass{theoremendmark}{\csname\InTheoType Symbol\endcsname}%
+ \setendmarkfalse%
+ \fi%
+}{}%
+\LWR@origendtheorem% also does \@endtrivlist
+\ifbool{LWR@ntheoremmarks}{\global\setendmarktrue}{}%
+\endBlockClass%
+}
+% \end{macrocode}
+%
+%
+% \subsection{\cs{NoEndMark}}
+%
+% \begin{macrocode}
+\gdef\NoEndMark{\global\setendmarkfalse}
+% \end{macrocode}
+%
+%
+% \subsection{List-of}
+%
+% Redefined to reuse the float mechanism to add list-of-theorem links:
+%
+% \cs{thm@thmline} \marg{1: printed type} \marg{2: \#} \marg{3: optional} \marg{4: page}
+% \begin{macrocode}
+\renewcommand{\thm@@thmline@noname}[4]{%
+\hypertocfloat{1}{theorem}{thm}{#2 #3}{}%
+}
+
+\renewcommand{\thm@@thmline@name}[4]{%
+\hypertocfloat{1}{theorem}{thm}{#1 #2 #3}{}%
+}
+% \end{macrocode}
+%
+% This was redefined by \pkg{ntheorem} when loaded,
+% so it is now redefined for \pkg{lwarp}:
+% \begin{macrocode}
+\def\thm@@thmline{\thm@@thmline@name}
+% \end{macrocode}
+%
+%
+% Patch for \CSS:
+% \begin{macrocode}
+\def\listtheorems#1{
+\LWR@htmlelementclass{nav}{lothm}%
+\begingroup
+\c@tocdepth=-2%
+\def\thm@list{#1}\thm@processlist
+\endgroup
+\LWR@htmlelementclassend{nav}{lothm}%
+}
+% \end{macrocode}
+%
+%
+% \subsection{Symbols}
+%
+% Proof QED symbol:
+% \changes{v0.55}{2018/04/24}{Fix: QED symbols in \env{lateximage}.}
+% \begin{macrocode}
+\newcommand{\qed}{\qquad\the\qedsymbol}
+
+\AtBeginDocument{
+\@ifundefined{LWR@orig@openbox}{
+\LetLtxMacro\LWR@orig@openbox\openbox
+\LetLtxMacro\LWR@orig@blacksquare\blacksquare
+\LetLtxMacro\LWR@orig@Box\Box
+
+\def\openbox{\text{\HTMLunicode{25A1}}}% UTF-8 white box
+\def\blacksquare{\text{\HTMLunicode{220E}}}% UTF-8 end-of-proof
+\def\Box{\text{\HTMLunicode{25A1}}}% UTF-8 white box
+
+\appto\LWR@restoreorigformatting{%
+\LetLtxMacro\openbox\LWR@orig@openbox%
+\LetLtxMacro\blacksquare\LWR@orig@blacksquare%
+\LetLtxMacro\Box\LWR@orig@Box%
+}% appto
+}{}% @ifundefined
+}% AtBeginDocument
+% \end{macrocode}
+%
+% \subsection{Cross-referencing}
+%
+% \cs{thref} \marg{label}
+% \begin{macrocode}
+\newcommand*{\thref}[1]{\cref{#1}}%
+% \end{macrocode}
+%
+% \iffalse
+%</ntheorem>
+% \fi
+%
+%
+% \addtocontents{toc}{\protect\setcounter{tocdepth}{0}}
+%
+%
+%
+% \iffalse
+%<*octave>
+% \fi
+%
+% \part{lwarp-octave.sty}
+%
+% \section{octave}
+%
+% \credits{Andrew A. Cashner}
+%
+% \DescribePackage{octave}
+% \pkg{octave} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.62}{2018/11/12}{\pkg{octave}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{octave}[2017/10/31]
+% \end{macrocode}
+%
+% Remove the leading 1pt kern:
+% \begin{macrocode}
+\RenewDocumentCommand{\@PrintTicks}{ m }{%
+\kern-1pt% lwarp
+\@TickNum = #1%
+\loop
+\@Tick{}%
+\advance\@TickNum by -1
+\ifnum\@TickNum > 0
+\repeat
+}
+% \end{macrocode}
+%
+% Use unicode for the prime character:
+% \begin{macrocode}
+\RenewDocumentCommand{\@Tick}{}{\HTMLunicode{2032}}
+% \end{macrocode}
+%
+% Catch the inline font:
+% \begin{macrocode}
+\RenewDocumentCommand{\pitch}{ m o m }{%
+\if@OctaveNumber%
+{%
+ \pitchfont{%
+ \LWR@textcurrentfont{% lwarp
+ \MakeUppercase{#1}%
+ \IfValueTF{#2}{#2}{}\textsubscript{#3}%
+ }%
+ }%
+}%
+\else%
+{%
+ \pitchfont{%
+ \LWR@textcurrentfont{% lwarp
+ \@GetOctaveTick{#1}[#2]{#3}%
+ }%
+ }%
+}%
+\fi%
+}
+% \end{macrocode}
+%
+% The original was hard to adapt to \pkg{lwarp}'s handling of \&.
+% \begin{macrocode}
+\StartDefiningTabulars
+\renewcommand{\octavetable}{%
+\begin{tabular}{ll}
+\octaveprimes \pitch{C}{0} & \octavenumbers \pitch{C}{0} \\
+\octaveprimes \pitch{C}{1} & \octavenumbers \pitch{C}{1} \\
+\octaveprimes \pitch{C}{2} & \octavenumbers \pitch{C}{2} \\
+\octaveprimes \pitch{C}{3} & \octavenumbers \pitch{C}{3} \\
+\octaveprimes \pitch{C}{4} & \octavenumbers \pitch{C}{4} \\
+\octaveprimes \pitch{C}{5} & \octavenumbers \pitch{C}{5} \\
+\octaveprimes \pitch{C}{6} & \octavenumbers \pitch{C}{6} \\
+\octaveprimes \pitch{C}{7} & \octavenumbers \pitch{C}{7} \\
+\end{tabular}
+}
+\StopDefiningTabulars
+% \end{macrocode}
+%
+% \iffalse
+%</octave>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*overpic>
+% \fi
+%
+% \part{lwarp-overpic.sty}
+
+% \section{overpic}
+% \label{sec:overpic}
+%
+% \credits{Rolf Niepraschk}
+%
+% \DescribePackage{overpic}
+% \pkg{overpic} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.42}{2017/10/16}{\pkg{overpic}: Added.}
+% \changes{v0.44}{2017/11/16}{\pkg{overpic}: Fix: Groups for lateximages.}
+%
+% \limitsoverpic
+%
+% See \cref{sec:graphicsprint} for the print-mode version of
+% \cs{overpicfontsize} and \cs{overpicfontskip}.
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{overpic}[2017/10/06]
+% \end{macrocode}
+
+% \begin{macrocode}
+\newcommand*{\overpicfontsize}{12}
+\newcommand*{\overpicfontskip}{14}
+
+\BeforeBeginEnvironment{overpic}{%
+ \begin{lateximage}%
+ \fontsize{\overpicfontsize}{\overpicfontskip}%
+ \selectfont%
+}
+
+\AfterEndEnvironment{overpic}{\end{lateximage}}
+
+\BeforeBeginEnvironment{Overpic}{%
+ \begin{lateximage}%
+ \fontsize{\overpicfontsize}{\overpicfontskip}%
+ \selectfont%
+}
+
+\AfterEndEnvironment{Overpic}{\end{lateximage}}
+% \end{macrocode}
+
+% \iffalse
+%</overpic>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*pagegrid>
+% \fi
+%
+% \part{lwarp-pagegrid.sty}
+%
+% \section{pagegrid}
+%
+% \DescribePackage{pagegrid}
+% \pkg{pagegrid} is ignored.
+%
+% \changes{v0.49}{2018/02/15}{\pkg{pagegrid}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{pagegrid}[2016/05/16]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\pagegridsetup}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</pagegrid>
+% \fi
+%
+%
+%
+% \iffalse
+%<*pagenote>
+% \fi
+
+% \part{lwarp-pagenote.sty}
+
+% \section{pagenote}
+%
+% \DescribePackage{pagenote}
+% \limitspagenote
+%
+% \changes{v0.26}{2017/03/29}{\pkg{pagenote}: Supported as-is.}
+% \changes{v0.38}{2017/08/24}{\pkg{pagenote}: Option \optn{page} disabled.}
+%
+% \codehtml
+% \begin{macrocode}
+\DeclareOption{page}{}
+\LWR@ProvidesPackagePass{pagenote}[2009/09/03]
+% \end{macrocode}
+%
+% \iffalse
+%</pagenote>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*pagesel>
+% \fi
+%
+% \part{lwarp-pagesel.sty}
+%
+% \section{pagesel}
+%
+% \DescribePackage{pagesel}
+% \pkg{pagesel} is ignored.
+%
+% \changes{v0.45}{2017/12/24}{\pkg{pagesel}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{pagesel}[2016/05/16]
+% \end{macrocode}
+%
+% \iffalse
+%</pagesel>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*paralist>
+% \fi
+%
+% \part{lwarp-paralist.sty}
+%
+% \section{paralist}
+% \label{sec:paralist}
+%
+% \credits{Bernd Schandl}
+%
+% \DescribePackage{paralist}
+% \pkg{paralist} is supported with minor changes.
+
+% \changes{v0.34}{2017/07/27}{\pkg{paralist}: Added.}
+% \changes{v0.56}{2018/05/06}{\pkg{paralist}: Fixes for
+% \env{compactenum}, \env{compactitem}, \env{compactdesc}.}
+%
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{paralist}[2017/01/22]
+% \end{macrocode}
+%
+% The compact environments are identical to the regular ones:
+% \begin{macrocode}
+\LetLtxMacro\compactitem\itemize
+\LetLtxMacro\compactenum\enumerate
+\LetLtxMacro\compactdesc\description
+\LetLtxMacro\endcompactitem\enditemize
+\LetLtxMacro\endcompactenum\endenumerate
+\LetLtxMacro\endcompactdesc\enddescription
+% \end{macrocode}
+%
+% For the inline environments, revert \cs{item} to its original print-mode version:
+% \begin{macrocode}
+\AtBeginEnvironment{inparaitem}{\LetLtxMacro\item\LWR@origitem}
+\AtBeginEnvironment{inparaenum}{\LetLtxMacro\item\LWR@origitem}
+\AtBeginEnvironment{inparadesc}{\LetLtxMacro\item\LWR@origitem}
+% \end{macrocode}
+%
+% Manual formatting of the description labels:
+% \begin{macrocode}
+\def\paradescriptionlabel#1{{\normalfont\textbf{#1}}}
+% \end{macrocode}
+%
+% \iffalse
+%</paralist>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*parnotes>
+% \fi
+%
+% \part{lwarp-parnotes.sty}
+%
+% \section{parnotes}
+%
+% \credits{Chelsea Hughes}
+%
+% \DescribePackage{parnotes}
+% \pkg{parnotes} is supported with some patches.
+%
+% \changes{v0.56}{2018/05/08}{\pkg{parnotes}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{parnotes}[2016/08/15]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\long\def\PN@parnote@real#1#2{%
+ \parnotemark{#1}%
+ % Unless this is the first parnote in \PN@text, add a separator first
+ \unless\ifx\PN@text\@empty\g@addto@macro\PN@text{\parnoteintercmd}\fi
+ % Redefine \@currentlabel to the parnote label, so \label works
+ \g@addto@macro\PN@text{%
+% \phantomsection%
+ \def\@currentlabel{#1}%
+ \def\cref@currentlabel{% lwarp
+ [parnotemark][\arabic{parnotemark}][]\theparnotemark%
+ }%
+ }%
+ \g@addto@macro\PN@text{%
+ \LWR@textcurrentfont{% lwarp
+ \parnotemark{#1}\nolinebreak\thinspace#2%
+ }%
+ }%
+}
+
+\def\PN@parnotes@real{%
+ % We call \par later, so this avoids recursion with \PN@parnotes@auto
+ \PN@inparnotestrue
+ \unless\ifvmode\par\fi
+ % Avoid page breaks between a paragraph and its parnotes
+ \nopagebreak\addvspace{\parnotevskip}%
+ \LWR@forcenewpage% lwarp
+ \begin{BlockClass}{footnotes}% lwarp
+ {\parnotefmt{\PN@text}\par}%
+ \end{BlockClass}% lwarp
+ \global\def\PN@text{}%
+ \addvspace{\parnotevskip}%
+ %
+ % These can be enabled or disabled by package options
+ %
+ \PN@disable@indent
+ \PN@reset@optional
+ \PN@inparnotesfalse
+}
+
+\AtBeginDocument{
+\crefname{parnotemark}{paragraph note}{paragraph notes}%
+\Crefname{parnotemark}{Paragraph note}{Paragraph notes}
+}
+% \end{macrocode}
+%
+% \iffalse
+%</parnotes>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*parskip>
+% \fi
+
+% \part{lwarp-parskip.sty}
+
+% \section{parskip}
+%
+% \DescribePackage{parskip}
+% \pkg{parskip} is ignored.
+%
+% \changes{v0.22}{2017/03/01}{\pkg{parskip}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-parskip}.
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{parskip}[2001/04/09]
+% \end{macrocode}
+
+% \iffalse
+%</parskip>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*pbox>
+% \fi
+%
+% \part{lwarp-pbox.sty}
+%
+% \section{pbox}
+%
+% \credits{Simon Law}
+%
+% \DescribePackage{pbox}
+% \pkg{pbox} is emulated.
+%
+% \changes{v0.50}{2018/02/21}{\pkg{pbox}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{pbox}[2011/12/07]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand{\pbox}{O{t} O{} O{t} m +m}{%
+\global\booltrue{LWR@minipagefullwidth}%
+\parbox[#1][#2][#3]{#4}{#5}%
+}
+
+\newcommand{\settominwidth}[3][\columnwidth]{%
+\settowidth{#2}{#3}%
+}
+
+\newcommand{\widthofpbox}[1]{%
+\widthof{#1}%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</pbox>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*pdfcomment>
+% \fi
+%
+% \part{lwarp-pdfcomment.sty}
+%
+% \section{pdfcomment}
+%
+% \DescribePackage{pdfcomment}
+% \pkg{pdfcomment} is ignored.
+%
+% \changes{v0.62}{2018/11/11}{\pkg{pdfcomment}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{pdfcomment}[2016/06/13]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newenvironment{pdfsidelinecomment}[2][]{}{}
+\newcommand{\pdfcomment}[2][]{}
+\newcommand{\pdfmargincomment}[2][]{}
+\newcommand{\pdfmarkupcomment}[3][]{#2}
+\newcommand{\pdffreetextcomment}[2][]{}
+\newcommand{\pdfsquarecomment}[2][]{}
+\newcommand{\pdfcirclecomment}[2][]{}
+\newcommand{\pdflinecomment}[2][]{}
+\newcommand{\pdftooltip}[3][]{#2}
+\newcommand{\pdfcommentsetup}[2][]{}
+\newcommand{\listofpdfcomments}[1][]{}
+\newcommand{\setliststyle}[1]{}
+\newcommand{\defineliststyle}[2]{}
+\newcommand{\defineavatar}[2]{}
+\newcommand{\definestyle}[2]{}
+% \end{macrocode}
+%
+% \iffalse
+%</pdfcomment>
+% \fi
+%
+%
+%
+% \iffalse
+%<*pdfcrypt>
+% \fi
+%
+% \part{lwarp-pdfcrypt.sty}
+%
+% \section{pdfcrypt}
+%
+% \DescribePackage{pdfcrypt}
+% \pkg{pdfcrypt} is ignored.
+%
+% \changes{v0.72}{2019/05/27}{\pkg{pdfcrypt}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{pdfcrypt}[2016/05/16]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\pdfcryptsetup}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</pdfcrypt>
+% \fi
+%
+%
+%
+% \iffalse
+%<*pdflscape>
+% \fi
+%
+% \part{lwarp-pdflscape.sty}
+%
+% \section{pdflscape}
+%
+% \DescribePackage{pdflscape} \pkg{pdflscape} is ignored.
+%
+% \changes{v0.34}{2017/08/03}{\pkg{pdflscape}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-pdflscape}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{pdflscape}[2016/05/14]
+% \end{macrocode}
+%
+% \iffalse
+%</pdflscape>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*pdfmarginpar>
+% \fi
+%
+% \part{lwarp-pdfmarginpar.sty}
+%
+% \section{pdfmarginpar}
+%
+% \DescribePackage{pdfmarginpar}
+% \pkg{pdfmarginpar} is ignored.
+%
+% \changes{v0.62}{2018/11/11}{\pkg{pdfmarginpar}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{pdfmarginpar}[2011/08/05]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\pdfmarginpar}[2][]{}
+\newcommand{\pdfmarginparset}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</pdfmarginpar>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*pdfpages>
+% \fi
+%
+% \part{lwarp-pdfpages.sty}
+%
+% \section{pdfpages}
+%
+% \credits{Andreas Matthias}
+%
+% \DescribePackage{pdfpages}
+% \pkg{pdfpages} is patched for use by \pkg{lwarp}.
+%
+% Option \optn{link} and \optn{linkname} work:
+% \begin{Verbatim}[tabsize=4,gobble=2,frame=lines]
+% \hyperlink{<filename>.pdf.<pagenubmer}}{some text}
+% \hyperlink{<linkname>.<pagenubmer}}{some text}
+% \end{Verbatim}
+%
+% Options which make no sense in \HTML\ are disabled.
+%
+% \changes{v0.58}{2018/06/11}{\pkg{pdfpages}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{pdfpages}[2017-10-31]
+% \end{macrocode}
+%
+% Disable option which have no meaning for \HTML\ output:
+% \begin{macrocode}
+\define@key{pdfpages}{fitpaper}[false]{}
+\define@key{pdfpages}{landscape}[false]{}
+\define@key{pdfpages}{openright}[false]{}
+\define@key{pdfpages}{signature}{}
+\define@key{pdfpages}{signature*}{}
+\define@key{pdfpages}{booklet}[false]{}
+\define@key{pdfpages}{rotateoversize}[false]{}
+\define@key{pdfpages}{doublepages}[false]{}
+\define@key{pdfpages}{doublepagestwist}[false]{}
+\define@key{pdfpages}{doublepagestwistodd}[false]{}
+\define@key{pdfpages}{doublepagestwist*}[false]{}
+\define@key{pdfpages}{doublepagestwistodd*}[false]{}
+\define@key{pdfpages}{duplicatepages}[2]{}
+\define@key{pdfpages}{thread}[false]{}
+\define@key{pdfpages}{threadname}{}
+\define@key{pdfpages}{linkfit}{}
+\define@key{pdfpages}{linktodoc}[false]{}
+\define@key{pdfpages}{linktodocfit}{}
+\define@key{pdfpages}{linkfilename}{}
+\define@key{pdfpages}{survey}[false]{}
+\define@key{pdfpages}{survey-nolink}[false]{}
+\define@key{pdfpages}{newwindow}[false]{}
+% \end{macrocode}
+%
+% Use print mode while measuring the page numbers:
+% \begin{macrocode}
+\xpretocmd{\AM@getpagecount}{\LWR@restoreorigformatting}{}{}
+% \end{macrocode}
+%
+% Emulate a bit of \pkg{eso-pic}:
+% \begin{macrocode}
+\newif\ifESO@texcoord
+
+\newcommand{\ESO@HookIIBG}{}
+
+\renewcommand{\AM@AddToShipoutPicture}{\g@addto@macro\ESO@HookIIBG}
+
+\renewcommand{\ClearShipoutPicture}{}
+% \end{macrocode}
+%
+% \begin{noindmacro}{\LWR@esopic@newpage}
+% At each \cs{newpage}.
+%
+% \begin{macrocode}
+\newcommand*{\LWR@esopic@newpage}{%
+% \end{macrocode}
+%
+% Is there something to draw?
+% \begin{macrocode}
+\ifdefvoid{\ESO@HookIIBG}%
+{}%
+{%
+% \end{macrocode}
+%
+% If the \optn{link} option was specified, add a hyper taraget:
+% \begin{macrocode}
+ \ifAM@link%
+ \hypertarget{\AM@linkname.\AM@page}{}%
+ \fi%
+% \end{macrocode}
+%
+% Draw inside a picture environment of the size of a virtual page:
+% \begin{macrocode}
+ \begingroup%
+ \setlength{\unitlength}{1in}%
+ \begin{picture}(8,10.5)%
+ \ESO@HookIIBG%
+ \end{picture}%
+ \endgroup%
+ \global\let\ESO@HookIIBG\@empty%
+}
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\AM@output}
+% Patched to use \cs{LWR@esopic@newpage}.
+% \begin{macrocode}
+\xpatchcmd{\AM@output}
+ {\newpage}
+ {\LWR@esopic@newpage}
+ {}
+ {\LWR@patcherror{pdfpages}{AM@output-1}}
+
+\xpatchcmd{\AM@output}
+ {\newpage}
+ {\LWR@esopic@newpage}
+ {}
+ {\LWR@patcherror{pdfpages}{AM@output-2}}
+
+\xpatchcmd{\AM@output}
+ {\newpage}
+ {\LWR@esopic@newpage}
+ {}
+ {\LWR@patcherror{pdfpages}{AM@output-3}}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\includepdf} Patched to set a reasonable paper size.
+% \begin{macrocode}
+\xpretocmd{\includepdf}{%
+ \begingroup%
+ \setlength{\paperwidth}{8in}%
+ \setlength{\paperheight}{10.5in}%
+}{}{}
+
+\xapptocmd{\includepdf}{%
+ \endgroup%
+}{}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\includepdfmerge} Patched to set a reasonable paper size.
+% \begin{macrocode}
+\xpretocmd{\includepdfmerge}{%
+ \begingroup%
+ \setlength{\paperwidth}{8in}%
+ \setlength{\paperheight}{10.5in}%
+}{}{}
+
+\xapptocmd{\includepdfmerge}{%
+ \endgroup%
+}{}{}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\AM@hyper@begin@i}
+% Hyper links are created by \cs{LWR@esopic@newpage},
+% so don't create them here:
+% \begin{macrocode}
+\renewcommand{\AM@hyper@begin@i}{}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \iffalse
+%</pdfpages>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*pdfprivacy>
+% \fi
+%
+% \part{lwarp-pdfprivacy.sty}
+%
+% \section{pdfprivacy}
+%
+% \DescribePackage{pdfprivacy}
+% \pkg{pdfprivacy} is ignored.
+%
+% \changes{v0.61}{2018/09/23}{\pkg{pdfprivacy}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{pdfprivacy}[2017/12/03]
+% \end{macrocode}
+%
+% \iffalse
+%</pdfprivacy>
+% \fi
+%
+%
+%
+% \iffalse
+%<*pdfrender>
+% \fi
+%
+% \part{lwarp-pdfrender.sty}
+%
+% \section{pdfrender}
+%
+% \DescribePackage{pdfrender}
+% \pkg{pdfrender} is ignored.
+%
+% \changes{v0.49}{2018/02/15}{\pkg{pdfrender}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{pdfrender}[2016/05/17]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\pdfrender}[1]{}
+\newcommand{\textpdfrender}[2]{#2}
+% \end{macrocode}
+%
+% \iffalse
+%</pdfrender>
+% \fi
+%
+%
+%
+% \iffalse
+%<*pdfsync>
+% \fi
+%
+% \part{lwarp-pdfsync.sty}
+%
+% \section{pdfsync}
+%
+% \credits{J. Laurens}
+%
+% \DescribePackage{pdfsync} \pkg{pdfsync} is ignored.
+%
+% \changes{v0.34}{2017/08/03}{\pkg{pdfsync}: Added.}
+% \changes{v0.44}{2017/11/19}{\pkg{pdfsync}: Fixes.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-pdfsync}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{pdfsync}[2008/01/26]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\pdfsync}{}
+\newcommand*{\pdfsyncstart}{}
+\newcommand*{\pdfsyncstop}{}
+% \end{macrocode}
+%
+% \iffalse
+%</pdfsync>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*pdftricks>
+% \fi
+%
+% \part{lwarp-pdftricks.sty}
+%
+% \section{pdftricks}
+%
+% \credits{C. V. Rad­hakr­ish­nan, C. V. Ra­jagopal, Antoine Chambert-Loir}
+%
+% \DescribePackage{pdftricks}
+% \pkg{pdftricks} is patched for use by \pkg{lwarp}.
+%
+% \limitspdftricks
+%
+% \changes{v0.59}{2018/08/29}{\pkg{pdftricks}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{pdftricks}[2003/08/10]
+% \end{macrocode}
+%
+% Reuse the print-mode images:
+% \begin{macrocode}
+\def\PDFTfigname{\BaseJobname-fig\thepsfig}
+% \end{macrocode}
+%
+% If the \filenm{.pdf} images have not yet been converted to \filenm{.svg} then
+% an error about a missing file will occur.
+% Warn the user to convert the images.
+% \begin{macrocode}
+\PackageWarning{lwarp-pdftricks}{
+When the pdftricks images change,
+remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
+}
+
+\AfterEndDocument{\typeout{***}}
+\AfterEndDocument{\typeout{*** Note: If pdftricks images are not found, new, or updated,}}
+\AfterEndDocument{\typeout{*** \space use 'lwarpmk pdftosvg \BaseJobname-fig*.pdf'}}
+\AfterEndDocument{\typeout{***}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+% \end{macrocode}
+%
+% \iffalse
+%</pdftricks>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*pdfx>
+% \fi
+%
+% \part{lwarp-pdfx.sty}
+%
+% \section{pdfx}
+%
+% \DescribePackage{pdfx}
+% \pkg{pdfx} is ignored.
+%
+% \changes{v0.58}{2018/06/08}{\pkg{pdfx}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{pdfx}[2017/05/18]
+% \end{macrocode}
+%
+% \iffalse
+%</pdfx>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*perpage>
+% \fi
+%
+% \part{lwarp-perpage.sty}
+%
+% \section{perpage}
+%
+% \credits{David Kastrup}
+%
+% \DescribePackage{perpage}
+% \pkg{perpage} is mostly ignored, but support is added for footnote counters.
+%
+% There is no page number in \HTML, so most counters are not reset.
+% If the document redefines \cs{the<countername>} to include \cs{theperpage},
+% it is necessary to place that redefininition inside a \env{warpprint}
+% environment to avoid modifying the \HTML\ defintions.
+%
+% \cs{AddAbsoluteCounter} must not be inside \env{warpprint}, as the
+% counter must be added for \HTML\ also, although it is not incremented.
+%
+% \limitsperpage
+%
+% \changes{v0.68}{2019/02/26}{\pkg{perpage}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{perpage}[2014/10/25]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand\AddAbsoluteCounter[1]
+{
+ \@ifundefined{c@abs#1}{%
+ \expandafter\newcount\csname c@abs#1\endcsname
+ \global\value{abs#1}\@ne
+% \global\expandafter\let\csname cl@abs#1\endcsname\@empty
+ \expandafter\xdef\csname theabs#1\endcsname{%
+% \noexpand\number \csname c@abs#1\endcsname
+ }%
+% \global\@namedef{c@pabs@#1}{\pp@cl@begin
+% \stepcounter{abs#1}%
+% \pp@cl@end}%
+% \@addtoreset{pabs@#1}{#1}
+ }
+ {}
+}
+
+\AddAbsoluteCounter{page}
+\def\theabspage{1}
+
+\newcommand*\MakePerPage[2][1]{%
+ \ifltxcounter{#2Reset}{%
+ \setcounter{#2Reset}{#1}%
+ }{
+
+}%
+}
+
+\newcommand*\MakeSorted[1]{}
+
+\newcommand*\MakeSortedPerPage[2][1]{%
+ \ifltxcounter{#2Reset}{%
+ \setcounter{#2Reset}{#1}%
+ }{
+}%
+}
+
+\newcommand*{\theperpage}{1}
+% \end{macrocode}
+%
+% \iffalse
+%</perpage>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*pfnote>
+% \fi
+%
+% \part{lwarp-pfnote.sty}
+%
+% \section{pfnote}
+%
+% \DescribePackage{pfnote}
+% \pkg{pfnote} is ignored.
+%
+% \limitspfnote
+%
+% \changes{v0.40}{2017/09/06}{\pkg{pfnote}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{pfnote}[1999/07/14]
+% \end{macrocode}
+%
+% \iffalse
+%</pfnote>
+% \fi
+%
+%
+%
+% \iffalse
+%<*phfqit>
+% \fi
+%
+% \part{lwarp-phfqit.sty}
+
+% \section{phfqit}
+%
+% \credits{Philippe Faist}
+%
+% \DescribePackage{phfqit}
+% \pkg{phfqit} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.50}{2018/02/22}{\pkg{phfqit}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{phfqit}[2017/08/16]
+% \end{macrocode}
+
+% \begin{macrocode}
+\LetLtxMacro\LWR@origbitstring\bitstring
+
+\renewcommand\bitstring[1]{%
+\InlineClass[%
+ text-decoration: overline underline ;
+]{bitstring}{#1}%
+% \phfqit@bitstring{#1}%
+}
+
+\appto\LWR@restoreorigformatting{%
+\LetLtxMacro\bitstring\LWR@origbitstring%
+}
+% \end{macrocode}
+
+% \iffalse
+%</phfqit>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*pifont>
+% \fi
+%
+% \part{lwarp-pifont.sty}
+%
+% \section{pifont}
+%
+% \credits{Walter Schmidt}
+%
+% \DescribePackage{pifont}
+% \pkg{pifont} is patched for use by \pkg{lwarp}.
+%
+% Hashed inline images are used, as there may not be Unicode support for all icons.
+%
+% \changes{v0.67}{2019/02/23}{\pkg{pifont}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{pifont}[2005/04/12]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand{\Pisymbol}[2]{%
+ \begin{lateximage}*[(Pisymbol)][pisymbol#1#2]%
+ {\Pifont{#1}\char#2}%
+ \end{lateximage}%
+}
+
+\newcommand{\LWR@HTML@Pifill}[2]{
+ \Pisymbol{#1}{#2} \Pisymbol{#1}{#2} \Pisymbol{#1}{#2}
+}
+\LWR@formatted{Pifill}
+
+\newcommand{\LWR@HTML@Piline}[2]{%
+ \par\noindent\hspace*{0.5in}
+ \Pifill{#1}{#2} \Pifill{#1}{#2} \Pifill{#1}{#2}
+}
+\LWR@formatted{Piline}
+% \end{macrocode}
+%
+% \iffalse
+%</pifont>
+% \fi
+%
+%
+%
+% \iffalse
+%<*placeins>
+% \fi
+%
+% \part{lwarp-placeins.sty}
+%
+% \section{placeins}
+%
+% \credits{Donald Arseneau}
+%
+% \DescribePackage{placeins} \pkg{placeins} is ignored.
+%
+% \changes{v0.20}{2017/01/19}{\pkg{placeins}: Added.}
+%
+
+% Discard all options for \pkg{lwarp-placeins}:
+
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{placeins}[2005/04/18]
+% \end{macrocode}
+
+% \begin{macrocode}
+\newcommand*{\FloatBarrier}{}
+% \end{macrocode}
+
+% \iffalse
+%</placeins>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*plarydshln>
+% \fi
+%
+% \part{lwarp-plarydshln.sty}
+%
+% \section{plarydshln}
+%
+% \DescribePackage{plarydshln}
+% \pkg{plarydshln} is emulated by \pkg{lwarp-arydshln}.
+%
+% \changes{v0.65}{2018/12/17}{\pkg{plarydshln}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{plarydshln}[2018/10/20]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LWR@origRequirePackage{lwarp-arydshln}
+% \end{macrocode}
+%
+% \iffalse
+%</plarydshln>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*plext>
+% \fi
+%
+% \part{lwarp-plext.sty}
+%
+% \section{plext}
+%
+% \DescribePackage{plext}
+% \pkg{plext} is preloaded by \pkg{jtarticle} and related classes.
+%
+% \changes{v0.65}{2017/08/27}{\pkg{plext}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@loadbefore{plext}
+
+\LWR@ProvidesPackagePass{plext}[2017/07/21]
+% \end{macrocode}
+%
+% ^^A *8* if \cs{layoutfloat}, frame the next float
+% \begin{macrocode}
+\let\tate\relax
+
+\DeclareExpandableDocumentCommand{\rensuji}{s o m}{#3}
+
+% \layoutfloat(width,height)[pos]#4
+\DeclareDocumentCommand{\layoutfloat}{d() o m}{}
+
+% \DeclareLayoutCaption{type} <dir>(width)[pos1pos2]
+\DeclareDocumentCommand{\DeclareLayoutCaption}{m d<> d() o}{}
+
+\LetLtxMacro\pcaption\caption
+
+% \layoutcaption<dir>(width)[pos]
+\DeclareDocumentCommand{\layoutcaption}{d<> d() o}{}
+
+\let\captiondir\relax
+% \end{macrocode}
+%
+% Add the optional |<t/y>| direction:
+% \begin{macrocode}
+\RenewDocumentEnvironment{LWR@HTML@minipage}{d<> O{t} O{} O{t} m}
+ {\LWR@HTML@sub@minipage{#2}{#3}{#4}{#5}}
+ {\endLWR@HTML@sub@minipage}
+
+\RenewDocumentCommand{\LWR@HTML@parbox}{d<> O{t} O{} O{t} m +m}
+{
+\LWR@traceinfo{parbox of width #4}%
+\begin{minipage}[#2][#3][#4]{#5}%
+#6
+\end{minipage}%
+}
+
+% \pbox <t/y> [width] [l/r] {contents}
+\RenewDocumentCommand{\pbox}{d<> O{0pt} O{c} m}{%
+\global\booltrue{LWR@minipagefullwidth}%
+\parbox{#2}{#4}%
+}
+% \end{macrocode}
+%
+% \env{picture}, as modified by \pkg{pext},
+% is encapsulated by the \pkg{lwarp} core.
+%
+% \iffalse
+%</plext>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*plextarydshln>
+% \fi
+%
+% \part{lwarp-plextarydshln.sty}
+%
+% \section{plextarydshln}
+%
+% \DescribePackage{plextarydshln}
+% \pkg{plextarydshln} is emulated by \pkg{lwarp-arydshln}.
+%
+% \changes{v0.65}{2018/12/17}{\pkg{plextarydshln}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{plextarydshln}[2018/10/20]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LWR@origRequirePackage{lwarp-arydshln}
+% \end{macrocode}
+%
+% \iffalse
+%</plextarydshln>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*plextcolortbl>
+% \fi
+%
+% \part{lwarp-plextcolortbl.sty}
+%
+% \section{plextcolortbl}
+%
+% \DescribePackage{plextcolortbl}
+% \pkg{plextcolortbl} is emulated by \pkg{lwarp-colortbl}.
+%
+% \changes{v0.65}{2018/12/17}{\pkg{plextcolortbl}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{plextcolortbl}[2018/09/19]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LWR@origRequirePackage{lwarp-colortbl}
+% \end{macrocode}
+%
+% \iffalse
+%</plextcolortbl>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*prelim2e>
+% \fi
+%
+% \part{lwarp-prelim2e.sty}
+%
+% \section{prelim2e}
+%
+% \credits{Martin Schröder}
+%
+% \DescribePackage{prelim2e} \pkg{prelim2e} is ignored.
+%
+% \changes{v0.34}{2017/08/03}{\pkg{prelim2e}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-prelim2e}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{prelim2e}[2009/05/29]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\PrelimText}{}
+\newcommand{\PrelimTextStyle}{}
+\newcommand{\PrelimWords}{}
+% \end{macrocode}
+%
+% \iffalse
+%</prelim2e>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*prettyref>
+% \fi
+%
+% \part{lwarp-prettyref.sty}
+
+% \section{prettyref}
+%
+% \credits{Kevin S. Ruland}
+%
+% \DescribePackage{prettyref}
+% \pkg{prettyref} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.45}{2017/12/11}{\pkg{prettyref}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{prettyref}[1998/07/09]
+% \end{macrocode}
+
+% \begin{macrocode}
+\newrefformat{fig}{Figure \ref{#1}}
+\newrefformat{tab}{Table \ref{#1}}
+% \end{macrocode}
+
+% \iffalse
+%</prettyref>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*preview>
+% \fi
+%
+% \part{lwarp-preview.sty}
+%
+% \section{preview}
+%
+% \DescribePackage{preview}
+% \pkg{preview} is ignored.
+%
+% \changes{v0.44}{2017/11/22}{\pkg{preview}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{preview}[2017/04/24]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newenvironment{preview}{}{}
+\newenvironment{nopreview}{}{}
+\NewDocumentCommand{\PreviewMacro}{s o o +m}{}
+\NewDocumentCommand{\PreviewEnvironment}{s o o +m}{}
+\newcommand{\PreviewSnarfEnvironment}[2][]{}
+\NewDocumentCommand{\PreviewOpen}{s o}{}
+\NewDocumentCommand{\PreviewClose}{s o}{}
+\let\ifPreview\iffalse% \fi for syntax highlighting
+% \end{macrocode}
+%
+% \iffalse
+%</preview>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*psfrag>
+% \fi
+%
+% \part{lwarp-psfrag.sty}
+%
+% \section{psfrag}
+%
+% \credits{Michael C. Grant, David Carlisle}
+%
+% \DescribePackage{psfrag}
+% \pkg{psfrag} is patched for use by \pkg{lwarp}.
+%
+% \limitspsfrag
+%
+% \changes{v0.61}{2018/10/01}{\pkg{psfrag}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{psfrag}[1998/04/11]
+% \end{macrocode}
+%
+% A \env{lateximage} captures the modified image from the document.
+% \begin{macrocode}
+\BeforeBeginEnvironment{psfrags}{%
+ \begin{lateximage}[(-psfrags-~\packagediagramname)]%
+}
+
+\AfterEndEnvironment{psfrags}{\end{lateximage}}
+% \end{macrocode}
+%
+% \iffalse
+%</psfrag>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*psfragx>
+% \fi
+%
+% \part{lwarp-psfragx.sty}
+%
+% \section{psfragx}
+%
+% \credits{Pascal Kockaert}
+%
+% \DescribePackage{psfragx}
+% \pkg{psfragx} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.61}{2018/10/03}{\pkg{psfragx}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{psfragx}[2012/05/02]
+% \end{macrocode}
+%
+% A \env{lateximage} captures the modified image from the document.
+% \begin{macrocode}
+\def\pfx@includegraphicx#1#2{%
+ \begin{lateximage}[(-psfragx-~\packagediagramname)]%
+ \mbox{\pfx@overpix{#1}{#2}\endpfx@overpix}%
+ \end{lateximage}%
+}
+
+\def\@@@overpix[#1]<#2>[#3]#4{%
+ \begin{lateximage}[(-psfragx-~\packagediagramname)]%
+ \pfx@overpix{#1,ovpfgd={#2},ovpbgd={#3}}{#4}%
+}
+
+\def\endoverpix{%
+ \endpfx@overpix%
+ \end{lateximage}%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</psfragx>
+% \fi
+%
+%
+%
+% \iffalse
+%<*pst-eps>
+% \fi
+%
+% \part{lwarp-pst-eps.sty}
+%
+% \section{pst-eps}
+%
+% \credits{Herbert Voß}
+%
+% \DescribePackage{pst-eps}
+% \pkg{pst-eps} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.59}{2018/09/05}{\pkg{pst-eps}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{pst-eps}[2005/05/20]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewenvironment{TeXtoEPS}{}{}
+\renewcommand{\PSTtoEPS}[3][]{}
+% \end{macrocode}
+%
+% \iffalse
+%</pst-eps>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*pstool>
+% \fi
+%
+% \part{lwarp-pstool.sty}
+%
+% \section{pstool}
+%
+% \credits{Zebb Prime, Will Robertson}
+%
+% \DescribePackage{pstool}
+% \pkg{pstool} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.61}{2018/10/02}{\pkg{pstool}: Added.}
+%
+% \limitspstool
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{pstool}[2018/01/20]
+% \end{macrocode}
+%
+% Each image is placed inside a \env{lateximage} to capture the results of \pkg{psfrag}.
+%
+% \begin{macrocode}
+\renewcommand\pstool@alwaysprocess[3][]{%
+ \begin{lateximage}[(-pstool-~\packagediagramname)]%
+ \includegraphics{#2.pdf}%
+ \end{lateximage}%
+}
+\LetLtxMacro\pstool@neverprocess\pstool@alwaysprocess
+\LetLtxMacro\pstool@maybeprocess\pstool@alwaysprocess
+
+\renewcommand\pstool@@psfragfig[4]{%
+ \begin{lateximage}[(-pstool-~\packagediagramname)]%
+ \includegraphics{#2.pdf}%
+ \end{lateximage}%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</pstool>
+% \fi
+%
+%
+%
+% \iffalse
+%<*pstricks>
+% \fi
+%
+% \part{lwarp-pstricks.sty}
+%
+% \section{pstricks}
+%
+% \credits{Timothy Van Zandt}
+%
+% \DescribePackage{pstricks}
+% \pkg{pstricks} is patched for use by \pkg{lwarp}.
+%
+% \limitspstricks
+%
+% \changes{v0.59}{2018/09/05}{\pkg{pstricks}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{pstricks}[2018/01/06]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\BeforeBeginEnvironment{pspicture}{\begin{lateximage}[(pspicture)]}
+\AfterEndEnvironment{pspicture}{\end{lateximage}}
+% \end{macrocode}
+%
+% \iffalse
+%</pstricks>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*pxatbegshi>
+% \fi
+%
+% \part{lwarp-pxatbegshi.sty}
+%
+% \section{pxatbegshi}
+%
+% \DescribePackage{pxatbegshi}
+% \pkg{pxatbegshi} is ignored.
+%
+% \changes{v0.65}{2018/12/17}{\pkg{pxatbegshi}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{pxatbegshi}[2017/11/04]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LWR@origRequirePackage{lwarp-atbegshi}
+% \end{macrocode}
+%
+% \iffalse
+%</pxatbegshi>
+% \fi
+%
+%
+%
+% \iffalse
+%<*pxeveryshi>
+% \fi
+%
+% \part{lwarp-pxeveryshi.sty}
+%
+% \section{pxeveryshi}
+%
+% \DescribePackage{pxeveryshi}
+% \pkg{pxeveryshi} is ignored.
+%
+% \changes{v0.65}{2018/12/17}{\pkg{pxeveryshi}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{pxeveryshi}[2012/05/19]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LWR@origRequirePackage{lwarp-everyshi}
+% \end{macrocode}
+%
+% \iffalse
+%</pxeveryshi>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*pxftnright>
+% \fi
+%
+% \part{lwarp-pxftnright.sty}
+%
+% \section{pxftnright}
+%
+% \DescribePackage{pxftnright}
+% \pkg{pxftnright} is ignored.
+%
+% \changes{v0.65}{2018/12/17}{\pkg{pxftnright}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{pxftnright}[2017/02/28]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LWR@origRequirePackage{lwarp-ftnright}
+% \end{macrocode}
+%
+% \iffalse
+%</pxftnright>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*pxjahyper>
+% \fi
+%
+% \part{lwarp-pxjahyper.sty}
+%
+% \section{pxjahyper}
+%
+% \DescribePackage{pxjahyper}
+% \pkg{pxjahyper} is ignored.
+%
+% \changes{v0.65}{2018/12/15}{\pkg{pxjahyper}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{pxjahyper}[2018/07/15]
+% \end{macrocode}
+%
+% \iffalse
+%</pxjahyper>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*quotchap>
+% \fi
+%
+% \part{lwarp-quotchap.sty}
+%
+% \section{quotchap}
+%
+% \credits{Karsten Tinnefeld, Jan Klever}
+%
+% \DescribePackage{quotchap}
+% \pkg{quotchap} is emulated.
+%
+% \changes{v0.40}{2017/09/22}{\pkg{quotchap}: Added.}
+% \changes{v0.73}{2019/07/11}{\pkg{quotchap}: Updated to v1.2.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{quotchap}[2019/07/09]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\@quotchap}{}
+\newlength{\LWR@quotchapwidth}
+
+\let\@printcites\relax
+
+\newcommand*{\@iprintcites}{%
+% \end{macrocode}
+% Place the quotes inside a \element{div}
+% of class \attribute{quotchap},
+% of the maximum selected width:
+% \begin{macrocode}
+\begin{BlockClass}[max-width: \LWR@printlength{\LWR@quotchapwidth}]{quotchap}
+%\begin{minipage}{\LWR@quotchapwidth}
+\@quotchap
+%\end{minipage}
+\end{BlockClass}
+% \end{macrocode}
+% Deactivate the quote printing:
+% \begin{macrocode}
+\global\let\@printcites\relax
+}
+
+\NewEnviron{savequote}[1][\linewidth]{%
+% \end{macrocode}
+% Remember the width, adjusted for \HTML,
+% and make the length assignment global, per: \\
+%\href{https://tex.stackexchange.com/questions/300823/why-is-setlength-ineffective-inside-a-tabular-environment}
+%{\ttfamily https://tex.stackexchange.com/questions/300823/ \\
+% \fqquad\ why-is-setlength-ineffective-inside-a-tabular-environment}
+% \begin{macrocode}
+\setlength{\LWR@quotchapwidth}{#1*2}%
+\global\LWR@quotchapwidth=\LWR@quotchapwidth%
+% \end{macrocode}
+% Remember the body, and activate the quote printing:
+% \begin{macrocode}
+\global\let\@quotchap\BODY
+\global\let\@printcites\@iprintcites%
+}
+% \end{macrocode}
+% The quotation author is placed inside a \element{div}
+% of class \attribute{qauthor}:
+% \changes{v0.73}{2019/06/24}{\pkg{quotchap}: Fix: Paragraph tags.}
+% \begin{macrocode}
+\newcommand{\qauthor}[1]{%
+ \LWR@stoppars%
+ \begin{BlockClass}{qauthor}%
+ {#1}%
+ \end{BlockClass}%
+ \LWR@startpars%
+}
+% \end{macrocode}
+% Fonts are ignored. Use \CSS.
+% \begin{macrocode}
+\newcommand{\qsetcnfont}[1]{}
+\providecommand*{\quotefont}{}
+\providecommand*{\qauthorfont}{}
+% \end{macrocode}
+%
+% \iffalse
+%</quotchap>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*quoting>
+% \fi
+%
+% \part{lwarp-quoting.sty}
+
+% \section{quoting}
+%
+% \credits{Thomas Titz}
+%
+% \DescribePackage{quoting}
+% \pkg{quoting} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.56}{2018/05/09}{\pkg{quoting}: Added.}
+% \changes{v0.73}{2019/06/25}{\pkg{quoting}: Fix: Paragraph tags.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{quoting}[2014/01/28]
+% \end{macrocode}
+
+% \begin{macrocode}
+\xpatchcmd{\quoting}{\quo@begintext}
+ {\begin{LWR@blocktextcurrentfont}\quo@begintext}
+ {}
+ {\LWR@patcherror{quoting}{quoting}}
+
+\xpatchcmd{\endquoting}{\quo@endtext}
+ {\quo@endtext\end{LWR@blocktextcurrentfont}\LWR@stoppars}
+ {}
+ {\LWR@patcherror{imakeidx}{endquoting}}
+% \end{macrocode}
+
+% \iffalse
+%</quoting>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*ragged2e>
+% \fi
+%
+% \part{lwarp-ragged2e.sty}
+%
+% \section{ragged2e}
+%
+% \credits{Martin Schröder}
+%
+% \DescribePackage{ragged2e}
+% \pkg{ragged2e} is emulated.
+%
+% \changes{v0.20}{2017/01/19}{\pkg{ragged2e}: Added.}
+% \changes{v0.54}{2018/04/19}{\pkg{ragged2e}: Fix: \cs{centering}, etc.}
+%
+
+% Discard all options for \pkg{lwarp-ragged2e}:
+
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{ragged2e}[2009/05/21]
+% \end{macrocode}
+
+% \begin{macrocode}
+\LetLtxMacro\Centering\centering
+\LetLtxMacro\RaggedLeft\raggedleft
+\LetLtxMacro\RaggedRight\raggedright
+\newcommand*{\justifying}{}
+\newlength{\CenteringLeftskip}
+\newlength{\RaggedLeftLeftskip}
+\newlength{\RaggedRightLeftskip}
+\newlength{\CenteringRightskip}
+\newlength{\RaggedLeftRightskip}
+\newlength{\RaggedRightRightskip}
+\newlength{\CenteringParfillskip}
+\newlength{\RaggedLeftParfillskip}
+\newlength{\RaggedRightParfillskip}
+\newlength{\JustifyingParfillskip}
+\newlength{\CenteringParindent}
+\newlength{\RaggedLeftParindent}
+\newlength{\RaggedRightParindent}
+\newlength{\JustifyingParindent}
+\newenvironment*{Center}{\center}{\endcenter}
+\newenvironment*{FlushLeft}{\flushleft}{\endflushleft}
+\newenvironment*{FlushRight}{\flushright}{\endflushright}
+\newenvironment*{justify}{\justifying}{\endjustifying}
+% \end{macrocode}
+
+
+% \iffalse
+%</ragged2e>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*realscripts>
+% \fi
+%
+% \part{lwarp-realscripts.sty}
+%
+% \section{realscripts}
+%
+% \credits{Will Robertson}
+%
+% \DescribePackage{realscripts}
+% \pkg{realscripts} is emulated.
+% See |lwarp.css| for the \element{span} of class \attribute{supsubscript}.
+%
+% \changes{v0.38}{2017/08/26}{\pkg{realscripts}: Added.}
+% \changes{v0.42}{2017/10/16}{\pkg{realscripts}: Fix for subscripts in a \env{lateximage}.}
+% \changes{v0.47}{2018/01/26}{\pkg{realscripts}: Fix: Line wrap at \HTML\ hyphen.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{realscripts}[2016/02/13]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\let\realsuperscript\textsuperscript
+\let\realsubscript\textsubscript
+
+\let\fakesuperscript\textsuperscript
+\let\fakesubscript\textsubscript
+
+\newlength{\subsupersep}
+
+\newcommand*{\LWR@realscriptsalign}{}
+
+\newcommand*{\LWR@setrealscriptsalign}[1]{%
+ \renewcommand*{\LWR@realscriptsalign}{}%
+ \ifthenelse{\equal{#1}{c}}{%
+ \renewcommand{\LWR@realscriptsalign}{%
+ \LWR@print@mbox{text-align:center} ; %
+ }%
+ }{}%
+ \ifthenelse{\equal{#1}{r}}{%
+ \renewcommand{\LWR@realscriptsalign}{%
+ \LWR@print@mbox{text-align:right} ; %
+ }%
+ }{}%
+}
+
+\DeclareDocumentCommand \textsubsuperscript {s O{l} mm} {%
+ \LWR@setrealscriptsalign{#2}%
+ \InlineClass[\LWR@realscriptsalign]{supsubscript}{%
+ \textsuperscript{#4}\textsubscript{#3}%
+ }%
+}
+
+\DeclareDocumentCommand \textsupersubscript {s O{l} mm} {%
+ \LWR@setrealscriptsalign{#2}%
+ \InlineClass[\LWR@realscriptsalign]{supsubscript}{%
+ \textsubscript{#4}\textsuperscript{#3}%
+ }%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</realscripts>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*refcheck>
+% \fi
+%
+% \part{lwarp-refcheck.sty}
+%
+% \section{refcheck}
+%
+% \DescribePackage{refcheck}
+% \pkg{refcheck} is ignored.
+%
+% \changes{v0.61}{2018/10/05}{\pkg{refcheck}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{refcheck}[2013/02/14]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\showrefnames{}
+\def\norefnames{}
+\def\showcitenames{}
+\def\nocitenames{}
+\def\setonmsgs{}
+\def\setoffmsgs{}
+\def\checkunlbld{}
+\def\ignoreunlbld{}
+\newcommand*{\refcheckxrdoc}[2][]{}
+% \end{macrocode}
+%
+% \iffalse
+%</refcheck>
+% \fi
+%
+%
+%
+% \iffalse
+%<*register>
+% \fi
+%
+% \part{lwarp-register.sty}
+
+% \section{register}
+%
+% \credits{Matthew Lovell}
+%
+% \DescribePackage{register}
+% \pkg{register} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.57}{2018/06/03}{\pkg{register}: Added.}
+% \changes{v0.62}{2018/11/12}{\pkg{register}: Updated to v1.8.}
+% \changes{v0.66}{2019/01/04}{\pkg{register}: Verified for v1.9.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{register}[2019/01/01]
+% \end{macrocode}
+
+% \begin{macrocode}
+\xpatchcmd{\register}
+ {\centering}
+ {\begin{center}\begin{lateximage}[(-register-~\packagediagramname)]}
+ {}
+ {\LWR@patcherror{register}{register}}
+
+\xpatchcmd{\endregister}
+ {\leftskip}
+ {%
+ \end{lateximage}\end{center}%
+ \leftskip%
+ }%
+ {}
+ {\LWR@patcherror{register}{endregister}}
+
+\expandafter\xapptocmd\csname register*\endcsname
+ {\begin{center}\begin{lateximage}[(-register-~\packagediagramname)]}
+ {}
+ {\LWR@patcherror{register}{register*}}
+
+\expandafter\xpatchcmd\csname endregister*\endcsname
+ {\leftskip}
+ {%
+ \end{lateximage}\end{center}%
+ \leftskip%
+ }%
+ {}
+ {\LWR@patcherror{register}{endregister*}}
+
+\setlength{\regWidth}{5in}
+% \end{macrocode}
+
+% \iffalse
+%</register>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*relsize>
+% \fi
+%
+% \part{lwarp-relsize.sty}
+
+% \section{relsize}
+%
+% \credits{Donald Arseneau, Bernie Cosell, Matt Swift}
+%
+% \DescribePackage{relsize}
+% \pkg{relsize} is patched for use by \pkg{lwarp}.
+%
+% \limitsrelsize
+%
+% \changes{v0.38}{2017/08/25}{\pkg{relsize}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{relsize}[2013/03/29]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\let\LWR@origrelsize\relsize
+\LetLtxMacro\LWR@origlarger\larger
+\LetLtxMacro\LWR@origsmaller\smaller
+\let\LWR@relscale\relscale
+\LetLtxMacro\LWR@origtextlarger\textlarger
+\LetLtxMacro\LWR@origtextsmaller\textsmaller
+\let\LWR@textscale\textscale
+
+\appto\LWR@restoreorigformatting{%
+\let\relsize\LWR@origrelsize%
+\LetLtxMacro\larger\LWR@origlarger%
+\LetLtxMacro\smaller\LWR@origsmaller%
+\let\relscale\LWR@relscale%
+\LetLtxMacro\textlarger\LWR@origtextlarger%
+\LetLtxMacro\textsmaller\LWR@origtextsmaller%
+\let\textscale\LWR@textscale%
+}
+
+\newcounter{LWR@relsizetemp}
+
+\renewcommand*{\relsize}[1]{}
+\renewcommand*{\larger}[1][]{}
+\renewcommand*{\smaller}[1][]{}
+\renewcommand*{\relscale}[1]{}
+
+\renewcommand*{\textlarger}[2][1]{%
+\setcounter{LWR@relsizetemp}{100+(#1*20)}%
+\InlineClass[font-size:\arabic{LWR@relsizetemp}\%]{textlarger}{#2}%
+}
+
+\renewcommand*{\textsmaller}[2][1]{%
+\setcounter{LWR@relsizetemp}{100-(#1*20)}%
+\InlineClass[font-size:\arabic{LWR@relsizetemp}\%]{textsmaller}{#2}%
+}
+
+\renewcommand*{\textscale}[2]{%
+\setcounter{LWR@relsizetemp}{100*\real{#1}}%
+\InlineClass[font-size:\arabic{LWR@relsizetemp}\%]{textscale}{#2}%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</relsize>
+% \fi
+%
+%
+%
+% \iffalse
+%<*repeatindex>
+% \fi
+%
+% \part{lwarp-repeatindex.sty}
+%
+% \section{repeatindex}
+%
+% \DescribePackage{repeatindex}
+% \pkg{repeatindex} is emulated for \pkg{lwarp}.
+%
+% \pkg{lwarp} must be used with a special style file:
+% \trouble[style file]{repeatindex=\pkg{repeatindex}}
+% \begin{sourcedisplay}
+% \cs{usepackage}[makeindex,\textred{makeindexStyle=\{lwarp\_repeatindex\}}]\{lwarp\}
+% \end{sourcedisplay}
+% where \filenm{lwarp_repeatindex.ist} may be copied from the following
+% modified version of \filenm{lwarp.ist}:
+% \begin{Verbatim}[gobble=2,obeytabs,tabsize=4,frame=leftline]
+% preamble
+% "\\begin{theindex}
+% \\providecommand*\\lettergroupDefault[1]{}
+% \\providecommand*\\lettergroup[1]{%
+% \\par\\textbf{#1}\\par
+% \\nopagebreak
+% }
+% "
+% headings_flag 1
+% heading_prefix "
+% \\lettergroup{"
+% heading_suffix "}"
+% delim_0 "], \\hyperindexref{"
+% delim_1 ", \\hyperindexref{"
+% delim_2 ", \\hyperindexref{"
+% delim_n "}, \\hyperindexref{"
+% delim_r "} -- \\hyperindexref{"
+% delim_t "}"
+%
+% item_0 "\n \\item ["
+% \end{Verbatim}
+% (The modifications are the |delim_0| and |item_0| entries.)
+%
+% \changes{v0.58}{2018/06/21}{\pkg{repeatindex}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{repeatindex}[2001/10/13]
+% \end{macrocode}
+%
+% In the \pkg{lwarp} core, \cs{LWR@indexitem} is modified
+% to accept the optional \cs{item} argument.
+%
+% \begin{macrocode}
+\RequirePackage{makeidx}
+\def\entryprefix{\itshape}
+\def\entrypostfix{\dots}
+% \end{macrocode}
+%
+% \iffalse
+%</repeatindex>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*resizegather>
+% \fi
+%
+% \part{lwarp-resizegather.sty}
+%
+% \section{resizegather}
+%
+% \DescribePackage{resizegather}
+% \pkg{resizegather} is ignored.
+%
+% \changes{v0.49}{2018/02/15}{\pkg{resizegather}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{resizegather}[2016/05/16]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\resizegathersetup}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</resizegather>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*rmpage>
+% \fi
+%
+% \part{lwarp-rmpage.sty}
+%
+% \section{rmpage}
+%
+% \DescribePackage{rmpage}
+% \pkg{rmpage} is ignored.
+%
+% \changes{v0.64}{2018/12/07}{\pkg{rmpage}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{rmpage}[1997/09/29]
+% \end{macrocode}
+%
+% \iffalse
+%</rmpage>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*romanbar>
+% \fi
+%
+% \part{lwarp-romanbar.sty}
+
+% \section{romanbar}
+%
+% \credits{H.-Martin M\"{u}nch}
+
+%
+% \DescribePackage{romanbar}
+% \pkg{romanbar} is patched for use by \pkg{lwarp}.
+%
+% An inline class with an overline and underline is used.
+%
+% \changes{v0.38}{2017/08/21}{\pkg{romanbar}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{romanbar}[2012/01/01]
+% \end{macrocode}
+
+% \begin{macrocode}
+\DeclareRobustCommand{\Roman@bar}[1]{% #1 is in Roman, i.e. MMXII
+\InlineClass[%
+ text-decoration: overline underline ;
+]{romanbar}{#1}%
+}
+% \end{macrocode}
+
+% \iffalse
+%</romanbar>
+% \fi
+%
+%
+%
+% \iffalse
+%<*romanbarpagenumber>
+% \fi
+%
+% \part{lwarp-romanbarpagenumber.sty}
+%
+% \section{romanbarpagenumber}
+%
+% \DescribePackage{romanbarpagenumber}
+% \pkg{romanbarpagenumber} is ignored.
+%
+% \changes{v0.38}{2017/08/25}{\pkg{romanbarpagenumber}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{romanbarpagenumber}[2015/02/06]
+% \end{macrocode}
+%
+%
+% \iffalse
+%</romanbarpagenumber>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*rotating>
+% \fi
+
+% \part{lwarp-rotating.sty}
+
+% \section{rotating}
+%
+% \credits{Robin Fairbairns, Sebastian Rahtz, Leonor Barroca}
+%
+% \DescribePackage{rotating}
+% \pkg{rotating} is emulated.
+%
+% All rotations are ignored in \HTML\ output.
+%
+% \changes{v0.69}{2019/03/09}{\pkg{rotfloat}: Requires \pkg{graphicx}.}
+%
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{rotating}[2016/08/11]
+\RequirePackage{graphicx}
+% \end{macrocode}
+
+% \begin{macrocode}
+\LetLtxMacro\sidewaystable\table
+\let\endsidewaystable\endtable
+
+\LetLtxMacro\sidewaysfigure\figure
+\let\endsidewaysfigure\endfigure
+
+\newenvironment*{sideways}{}{}
+\newenvironment*{turn}[1]{}{}
+\newenvironment*{rotate}[1]{}{}
+\NewDocumentCommand{\turnbox}{m +m}{#2}
+\let\rotcaption\caption
+\let\@makerotcaption\@makecaption
+% \end{macrocode}
+
+
+% \iffalse
+%</rotating>
+% \fi
+%
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*rotfloat>
+% \fi
+
+% \part{lwarp-rotfloat.sty}
+
+% \section{rotfloat}
+%
+% \credits{Axel Sommerfeldt}
+%
+% \DescribePackage{rotfloat}
+% \pkg{rotfloat} is emulated.
+%
+% \changes{v0.34}{2017/07/25}{\pkg{rotfloat}: Added.}
+%
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{rotfloat}[2004/01/04]
+
+\RequirePackage{float}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\newfloat} \marg{1: type} \marg{2: placement}
+% \marg{3: ext} \oarg{4: within}
+%
+% Emulates the \cs{newfloat} command from the \pkg{float} package.
+% Sideways floats are \cs{let} to the same as regular floats.
+%
+% ``placement'' is ignored.
+%
+% \begin{macrocode}
+\RenewDocumentCommand{\newfloat}{m m m o}{%
+\IfValueTF{#4}%
+{%
+ \DeclareFloatingEnvironment[fileext=#3,within=#4]{#1}%
+}%
+{%
+ \DeclareFloatingEnvironment[fileext=#3]{#1}%
+}%
+\csletcs{sideways#1}{#1}%
+\csletcs{endsideways#1}{end#1}%
+% \end{macrocode}
+% Remember the float style:
+% \changes{v0.57}{2018/05/14}{\pkg{rotfloat}: Added float styles.}
+% \begin{macrocode}
+\csedef{LWR@floatstyle@#1}{\LWR@floatstyle}%
+\csedef{LWR@floatstyle@sideways#1}{\LWR@floatstyle}%
+% \end{macrocode}
+% \pkg{newfloat} package automatically creates the \cs{listof} command
+% for new floats, but \pkg{float} does not,
+% so remove \cs{listof} here in case it is manually created later:
+% \changes{v0.57}{2018/05/14}{\pkg{rotfloat}: Fix for listof sideways floats.}
+% \begin{macrocode}
+\cslet{listof#1s}\relax%
+\cslet{listof#1es}\relax%
+\cslet{listofsideways#1s}\relax%
+\cslet{listofsideways#1es}\relax%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%</rotfloat>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*rviewport>
+% \fi
+%
+% \part{lwarp-rviewport.sty}
+%
+% \section{rviewport}
+%
+% \DescribePackage{rviewport}
+% \pkg{rviewport} is honored inside a \env{lateximage}, and
+% otherwise ignored for \HTML\ output.
+%
+% If \pkg{rviewport} is important for an image, enclose the
+% image inside a \env{lateximage} environment.
+%
+% \changes{v0.62}{2018/11/05}{\pkg{rviewport}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{rviewport}[2011/08/27]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\define@key{igraph}{rviewport}{}
+% \end{macrocode}
+%
+% \iffalse
+%</rviewport>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*savetrees>
+% \fi
+%
+% \part{lwarp-savetrees.sty}
+%
+% \section{savetrees}
+%
+% \DescribePackage{savetrees} \pkg{savetrees} is ignored.
+%
+% \changes{v0.34}{2017/07/27}{\pkg{savetrees}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-savetrees}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{savetrees}[2016/04/13]
+% \end{macrocode}
+%
+%
+% \iffalse
+%</savetrees>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*scalefnt>
+% \fi
+%
+% \part{lwarp-scalefnt.sty}
+
+% \section{scalefnt}
+%
+% \credits{D. Carlisle}
+%
+% \DescribePackage{scalefnt}
+% \pkg{scalefnt} is ignored.
+%
+% \changes{v0.38}{2017/08/25}{\pkg{scalefnt}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{scalefnt}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareRobustCommand\scalefont[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</scalefnt>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*schemata>
+% \fi
+%
+% \part{lwarp-schemata.sty}
+
+% \section{schemata}
+%
+% \credits{Charles P. Schaum}
+%
+% \DescribePackage{schemata}
+% \pkg{schemata} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.50}{2018/02/23}{\pkg{schemata}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{schemata}[2016/01/25]
+% \end{macrocode}
+
+% \begin{macrocode}
+\LetLtxMacro\LWR@schemata@origschema\schema
+\LetLtxMacro\LWR@schemata@origSchema\Schema
+
+\renewcommand{\schema}[3][open]{%
+\begin{lateximage}%
+\LWR@print@normalsize
+\LWR@schemata@origschema[#1]{#2}{#3}%
+\end{lateximage}%
+}
+
+\renewcommand{\Schema}[5][open]{%
+\begin{lateximage}%
+\LWR@print@normalsize
+\LWR@schemata@origSchema[#1]{#2}{#3}{#4}{#5}%
+\end{lateximage}%
+}
+% \end{macrocode}
+
+% \iffalse
+%</schemata>
+% \fi
+%
+%
+%
+% \iffalse
+%<*scrextend>
+% \fi
+%
+% \part{lwarp-scrextend.sty}
+%
+% \section{scrextend}
+%
+% \DescribePackage{scrextend}
+% \pkg{scrextend} is emulated.
+%
+% \usedbykomascript
+%
+% \changes{v0.44}{2017/11/20}{\pkg{scrextend}: Added.}
+% \changes{v0.47}{2018/01/26}{\pkg{scrextend}: Fix: Line wrap at \HTML\ hyphen.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{scrextend}[2018/03/30]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareDocumentCommand{\setkomafont}{m m}{}
+\DeclareDocumentCommand{\addkomafont}{m m}{}
+\DeclareDocumentCommand{\usekomafont}{m}{}
+
+\DeclareDocumentCommand{\usefontofkomafont}{m}{}
+\DeclareDocumentCommand{\useencodingofkomafont}{m}{}
+\DeclareDocumentCommand{\usesizeofkomafont}{m}{}
+\DeclareDocumentCommand{\usefamilyofkomafont}{m}{}
+\DeclareDocumentCommand{\useseriesofkomafont}{m}{}
+\DeclareDocumentCommand{\useshapeofkomafont}{m}{}
+
+\AtBeginDocument{
+ \let\LWR@koma@orig@maketitle\maketitle
+ \DeclareDocumentCommand{\maketitle}{o}{\LWR@koma@orig@maketitle}
+}
+
+\DeclareDocumentCommand{\extratitle}{m}{}
+\DeclareDocumentCommand{\titlehead}{m}{}
+\DeclareDocumentCommand{\subject}{m}{}
+\DeclareDocumentCommand{\publishers}{m}{\published{#1}}
+\DeclareDocumentCommand{\uppertitleback}{m}{}
+\DeclareDocumentCommand{\lowertitleback}{m}{}
+\DeclareDocumentCommand{\dedication}{m}{}
+
+\DeclareDocumentCommand{\ifthispageodd}{m m}{#1}
+
+\DeclareDocumentCommand{\titlepagestyle}{}{}
+
+\DeclareDocumentCommand{\cleardoublepageusingstyle}{m}{}
+\DeclareDocumentCommand{\cleardoubleemptypage}{}{}
+\DeclareDocumentCommand{\cleardoubleplainpage}{}{}
+\DeclareDocumentCommand{\cleardoublestandardpage}{}{}
+\DeclareDocumentCommand{\cleardoubleoddpage}{}{}
+\DeclareDocumentCommand{\cleardoubleoddpageusingstyle}{m}{}
+\DeclareDocumentCommand{\cleardoubleoddemptypage}{}{}
+\DeclareDocumentCommand{\cleardoubleoddplainpage}{}{}
+\DeclareDocumentCommand{\cleardoubleoddstandardpage}{}{}
+\DeclareDocumentCommand{\cleardoubleevenpage}{}{}
+\DeclareDocumentCommand{\cleardoubleevenpageusingstyle}{m}{}
+\DeclareDocumentCommand{\cleardoubleevenemptypage}{}{}
+\DeclareDocumentCommand{\cleardoubleevenplainpage}{}{}
+\DeclareDocumentCommand{\cleardoubleevenstandardpage}{}{}
+
+\DeclareDocumentCommand{\multiplefootnoteseparator}{}{%
+ \begingroup\let\thefootnotemark\multfootsep\@makefnmark\endgroup
+}
+
+\DeclareDocumentCommand{\multfootsep}{}{,}
+
+\DeclareDocumentCommand{\footref}{m}{%
+ \begingroup
+ \unrestored@protected@xdef\@thefnmark{\ref{#1}}%
+ \endgroup
+ \@footnotemark
+}
+
+\DeclareDocumentCommand{\deffootnote}{o m m m}{}
+\DeclareDocumentCommand{\deffootnotemark}{m}{}
+\DeclareDocumentCommand{\setfootnoterule}{o m}{}
+\DeclareDocumentCommand{\raggedfootnote}{}{}
+% \end{macrocode}
+%
+% \changes{v0.73}{2019/06/25}{\pkg{scrextend}: Fix: Paragraph tags.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\dictum}{o m}{
+\begin{LWR@BlockClassWP}{\LWR@print@mbox{text-align:right}}{}{dictum}
+ #2
+ \IfValueT{#1}
+ {
+ \LWR@stoppars%
+ \ifbool{FormatWP}
+ {\begin{BlockClass}[\LWR@print@mbox{border-top:} 1px solid gray]{dictumauthor}}
+ {\begin{BlockClass}{dictumauthor}}
+ \dictumauthorformat{#1}
+ \end{BlockClass}
+ }
+\end{LWR@BlockClassWP}
+}
+
+\DeclareDocumentCommand{\dictumwidth}{}{}
+\DeclareDocumentCommand{\dictumauthorformat}{m}{(#1)}
+\DeclareDocumentCommand{\dictumrule}{}{}
+\DeclareDocumentCommand{\raggeddictum}{}{}
+\DeclareDocumentCommand{\raggeddictumtext}{}{}
+\DeclareDocumentCommand{\raggeddictumauthor}{}{}
+
+\DeclareDocumentEnvironment{labeling}{o m}
+{%
+\def\sc@septext{#1}%
+\list{}{}%
+\let\makelabel\labelinglabel%
+}
+{
+\endlist
+}
+
+\DeclareDocumentCommand{\labelinglabel}{m}{%
+#1 \qquad \sc@septext%
+}
+
+\let\addmargin\relax
+\let\endaddmargin\relax
+\cslet{addmargin*}{\relax}
+\cslet{endaddmargin*}{\relax}
+% \end{macrocode}
+%
+% \changes{v0.73}{2019/06/25}{\pkg{scrextend}: Fix: Paragraph tags.}
+% \begin{macrocode}
+\NewDocumentEnvironment{addmargin}{s O{} m}
+{
+\LWR@stoppars%
+\setlength{\LWR@templengthtwo}{#3}
+\ifblank{#2}
+{
+ \begin{BlockClass}[
+ \LWR@print@mbox{margin-left:\LWR@printlength{\LWR@templengthtwo}} ;
+ \LWR@print@mbox{margin-right:\LWR@printlength{\LWR@templengthtwo}}
+ ]{addmargin}
+}
+{
+ \setlength{\LWR@templengthone}{#2}
+ \begin{BlockClass}[
+ \LWR@print@mbox{margin-left:\LWR@printlength{\LWR@templengthone}} ;
+ \LWR@print@mbox{margin-right:\LWR@printlength{\LWR@templengthtwo}}
+ ]{addmargin}
+}
+}
+{\end{BlockClass}\LWR@startpars}
+% \end{macrocode}
+% Ref to create a starred environment: \\
+% \href
+% {https://tex.stackexchange.com/questions/45401/use-the-s-star-argument-with-newdocumentenvironment}
+% {\ttfamily https://tex.stackexchange.com/questions/45401/ \\
+% \fqquad\ use-the-s-star-argument-with-newdocumentenvironment}
+% \begin{macrocode}
+
+\ExplSyntaxOn
+\cs_new:cpn {addmargin*} {\addmargin*}
+\cs_new_eq:cN {endaddmargin*} \endaddmargin
+\ExplSyntaxOff
+
+\DeclareDocumentCommand{\marginline}{m}{\marginpar{#1}}
+% \end{macrocode}
+%
+% \iffalse
+%</scrextend>
+% \fi
+%
+%
+%
+% \iffalse
+%<*scrhack>
+% \fi
+%
+% \part{lwarp-scrhack.sty}
+%
+% \section{scrhack}
+%
+% \DescribePackage{scrhack}
+% \pkg{scrhack} is ignored.
+%
+% \changes{v0.44}{2017/11/22}{\pkg{scrhack}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{scrhack}[2018/03/30]
+% \end{macrocode}
+%
+%
+% \iffalse
+%</scrhack>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*scrlayer>
+% \fi
+%
+% \part{lwarp-scrlayer.sty}
+%
+% \section{scrlayer}
+%
+% \credits{Markus Kohm}
+%
+% \DescribePackage{scrlayer}
+% \pkg{scrlayer} is emulated.
+%
+% \testthis
+%
+% \changes{v0.44}{2017/11/22}{\pkg{scrlayer}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{scrlayer}[2018/03/30]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\DeclareSectionNumberDepth}[2]{}
+\newcommand*{\DeclareLayer}[2][]{}
+\newcommand*{\DeclareNewLayer}[2][]{}
+\newcommand*{\ProvideLayer}[2][]{}
+\newcommand*{\RedeclareLayer}[2][]{}
+\newcommand*{\ModifyLayer}[2][]{}
+\newcommand*{\layerhalign}{}
+\newcommand*{\layervalign}{}
+\newcommand*{\layerxoffset}{}
+\newcommand*{\layeryoffset}{}
+\newcommand*{\layerwidth}{}
+\newcommand*{\layerheight}{}
+\providecommand*{\LenToUnit}[1]{\strip@pt\dimexpr#1*\p@/\unitlength}
+\newcommand*{\putUL}[1]{}
+\newcommand*{\putUR}[1]{}
+\newcommand*{\putLL}[1]{}
+\newcommand*{\putLR}[1]{}
+\newcommand*{\putC}[1]{}
+\newcommand*{\GetLayerContents}[1]{}
+\newcommand{\IfLayerExists}[3]{#3}
+\newcommand*{\DestroyLayer}[1]{}
+\newcommand*{\layercontentsmeasure}{}
+\newcommand*{\currentpagestyle}{}
+\newcommand*{\BeforeSelectAnyPageStyle}[1]{}
+\newcommand*{\AfterSelectAnyPageStyle}[1]{}
+\newcommand*{\DeclarePageStyleAlias}[2]{}
+\newcommand*{\DeclareNewPageStyleAlias}[2]{}
+\newcommand*{\ProvidePageStyleAlias}[2]{}
+\newcommand*{\RedeclarePageStyleAlias}[2]{}
+\newcommand*{\DestroyPageStyleAlias}[1]{}
+\newcommand*{\GetRealPageStyle}[1]{}
+\newcommand*{\DeclarePageStyleByLayers}[3][]{}
+\newcommand*{\DeclareNewPageStyleByLayers}[3][]{}
+\newcommand*{\ProvidePageStyleByLayers}[3][]{}
+\newcommand*{\RedeclarePageStyleByLayers}[3][]{}
+\NewDocumentCommand{\ForEachLayerOfPageStyle}{s m m}{}
+\newcommand*{\AddLayersToPageStyle}[2]{}
+\newcommand*{\AddLayersAtBeginOfPageStyle}[2]{}
+\newcommand*{\AddLayersAtEndOfPageStyle}[2]{}
+\newcommand*{\RemoveLayersFromPageStyle}[2]{}
+\newcommand*{\AddLayersToPageStyleBeforeLayer}[3]{}
+\newcommand*{\AddLayersToPageStyleAfterLayer}[3]{}
+\newcommand*{\UnifyLayersAtPageStyle}[1]{}
+\newcommand*{\ModifyLayerPageStyleOptions}[2]{}
+\newcommand*{\AddToLayerPageStyleOptions}[2]{}
+\newcommand{\IfLayerPageStyleExists}[3]{#3}
+\newcommand{\IfRealLayerPageStyleExists}[3]{#3}
+\newcommand{\IfLayerAtPageStyle}[4]{#4}
+\newcommand{\IfSomeLayerAtPageStyle}[4]{#4}
+\newcommand{\IfLayersAtPageStyle}[4]{#4}
+\newcommand*{\DestroyRealLayerPageStyle}[1]{}
+\@ifundefined{footheight}{\newlength\footheight}{}
+\DeclareDocumentCommand{\automark}{s o m}{}
+\DeclareDocumentCommand{\manualmark}{}{}
+\DeclareDocumentCommand{\MakeMarkcase}{m}{#1}
+% \end{macrocode}
+% \changes{v0.64}{2018/12/07}{\pkg{scrlayer}: Fixes.}
+% \begin{macrocode}
+\newcommand{\partmarkformat}{}
+\if@chapter
+\newcommand{\chaptermarkformat}{}
+\fi
+\newcommand{\sectionmarkformat}{}
+\DeclareDocumentCommand{\GenericMarkFormat}{m}{}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*{\@mkleft}[1]{}
+\newcommand*{\@mkright}[1]{}
+\newcommand*{\@mkdouble}[1]{}
+\newcommand*{\@mkboth}[2]{}
+\newcommand*{\scrlayerInitInterface}[1][]{}
+\newcommand{\scrlayerAddToInterface}[3][]{}
+\newcommand{\scrlayerAddCsToInterface}[3][]{}
+\newcommand{\scrlayerOnAutoRemoveInterface}[2][]{}
+% \end{macrocode}
+%
+% \iffalse
+%</scrlayer>
+% \fi
+%
+%
+%
+% \iffalse
+%<*scrlayer-notecolumn>
+% \fi
+%
+% \part{lwarp-scrlayer-notecolumn.sty}
+%
+% \section{scrlayer-notecolumn}
+%
+% \credits{Markus Kohm}
+%
+% \DescribePackage{scrlayer-notecolumn}
+% \pkg{scrlayer-notecolumn} is emulated.
+%
+% \testthis
+%
+% \changes{v0.44}{2017/11/22}{\pkg{scrlayer-notecolumn}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{scrlayer-notecolumn}[2018/02/02]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\DeclareNoteColumn}[2][]{}
+\newcommand*{\DeclareNewNoteColumn}[2][]{}
+\newcommand*{\ProvideNoteColumn}[2][]{}
+\newcommand*{\RedeclareNoteColumn}[2][]{}
+\NewDocumentCommand{\makenote}{s o m}{\marginpar{#3}}
+\newcommand*{\syncwithnotecolumn}[1][]{}
+\newcommand*{\syncwithnotecolumns}[1][]{}
+\newcommand*{\clearnotecolumn}[1][]{}
+\newcommand*{\clearnotecolumns}[1][]{}
+% \end{macrocode}
+%
+% \iffalse
+%</scrlayer-notecolumn>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*scrlayer-scrpage>
+% \fi
+%
+% \part{lwarp-scrlayer-scrpage.sty}
+%
+% \section{scrlayer-scrpage}
+%
+% \credits{Markus Kohm}
+%
+% \DescribePackage{scrlayer-scrpage}
+% \pkg{scrlayer-scrpage} is ignored.
+%
+% \testthis
+%
+% \changes{v0.44}{2017/11/22}{\pkg{scrlayer-scrpage}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{scrlayer-scrpage}[2018/03/30]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@ifundefined{footheight}{\newlength\footheight}{}
+\NewDocumentCommand{\lehead}{s o m}{}
+\NewDocumentCommand{\cehead}{s o m}{}
+\NewDocumentCommand{\rehead}{s o m}{}
+\NewDocumentCommand{\lohead}{s o m}{}
+\NewDocumentCommand{\cohead}{s o m}{}
+\NewDocumentCommand{\rohead}{s o m}{}
+\NewDocumentCommand{\lefoot}{s o m}{}
+\NewDocumentCommand{\cefoot}{s o m}{}
+\NewDocumentCommand{\refoot}{s o m}{}
+\NewDocumentCommand{\lofoot}{s o m}{}
+\NewDocumentCommand{\cofoot}{s o m}{}
+\NewDocumentCommand{\rofoot}{s o m}{}
+\NewDocumentCommand{\ohead}{s o m}{}
+\NewDocumentCommand{\chead}{s o m}{}
+\NewDocumentCommand{\ihead}{s o m}{}
+\NewDocumentCommand{\ofoot}{s o m}{}
+\NewDocumentCommand{\cfoot}{s o m}{}
+\NewDocumentCommand{\ifoot}{s o m}{}
+\DeclareDocumentCommand{\MakeMarkcase}{m}{#1}
+\newcommand*{\defpairofpagestyles}[3][]{}
+\newcommand*{\newpairofpagestyles}[3][]{}
+\newcommand*{\renewpairofpagestyles}[3][]{}
+\newcommand*{\providepairofpagestyles}[3][]{}
+% \end{macrocode}
+% \changes{v0.64}{2018/12/07}{\pkg{scrlayer-scrpage}: Fixes.}
+% \begin{macrocode}
+\newcommand*{\clearmainofpairofpagestyles}{}
+\newcommand*{\clearplainofpairofpagestyles}{}
+\newcommand*{\clearpairofpagestyles}{}
+\newcommand*{\clearscrheadings}{}
+\newcommand*{\clearscrheadfoot}{}
+\newcommand*{\clearscrplain}{}
+% \end{macrocode}
+% \begin{macrocode}
+\NewDocumentCommand{\deftriplepagestyle}{m o o m m m m m m}{}
+\NewDocumentCommand{\newtriplepagestyle}{m o o m m m m m m}{}
+\NewDocumentCommand{\renewtriplepagestyle}{m o o m m m m m m}{}
+\NewDocumentCommand{\providetriplepagestyle}{m o o m m m m m m}{}
+\newcommand*{\defpagestyle}[3]{}
+\newcommand*{\newpagestyle}[3]{}
+\newcommand*{\providepagestyle}[3]{}
+\newcommand*{\renewpagestyle}[3]{}
+% \end{macrocode}
+%
+% \iffalse
+%</scrlayer-scrpage>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*scrpage2>
+% \fi
+%
+% \part{lwarp-scrpage2.sty}
+%
+% \section{scrpage2}
+%
+% \credits{Markus Kohm}
+%
+% \DescribePackage{scrpage2}
+% \pkg{scrpage2} is ignored.
+%
+% \testthis
+%
+% \changes{v0.64}{2018/12/07}{\pkg{scrpage2}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{scrpage2}[2018/03/30]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@ifundefined{footheight}{\newlength\footheight}{}
+\NewDocumentCommand{\lehead}{o m}{}
+\NewDocumentCommand{\cehead}{o m}{}
+\NewDocumentCommand{\rehead}{o m}{}
+\NewDocumentCommand{\lohead}{o m}{}
+\NewDocumentCommand{\cohead}{o m}{}
+\NewDocumentCommand{\rohead}{o m}{}
+\NewDocumentCommand{\lefoot}{o m}{}
+\NewDocumentCommand{\cefoot}{o m}{}
+\NewDocumentCommand{\refoot}{o m}{}
+\NewDocumentCommand{\lofoot}{o m}{}
+\NewDocumentCommand{\cofoot}{o m}{}
+\NewDocumentCommand{\rofoot}{o m}{}
+\NewDocumentCommand{\ohead}{o m}{}
+\NewDocumentCommand{\chead}{o m}{}
+\NewDocumentCommand{\ihead}{o m}{}
+\NewDocumentCommand{\ofoot}{o m}{}
+\NewDocumentCommand{\cfoot}{o m}{}
+\NewDocumentCommand{\ifoot}{o m}{}
+\DeclareDocumentCommand{\automark}{o m}{}
+\DeclareDocumentCommand{\manualmark}{}{}
+\DeclareDocumentCommand{\MakeMarkcase}{m}{#1}
+\NewDocumentCommand{\deftripstyle}{m o o m m m m m m}{}
+\NewDocumentCommand{\defpagestyle}{s m m m}{}
+\NewDocumentCommand{\newpagestyle}{s m m m}{}
+\NewDocumentCommand{\renewpagestyle}{s m m m}{}
+\NewDocumentCommand{\providepagestyle}{s m m m}{}
+\newcommand{\partmarkformat}{}
+\if@chapter
+\newcommand{\chaptermarkformat}{}
+\fi
+\newcommand{\sectionmarkformat}{}
+\newcommand{\subsectionmarkformat}{}
+\newcommand{\subsubsectionmarkformat}{}
+\newcommand{\paragraphmarkformat}{}
+\newcommand{\subparagraphmarkformat}{}
+
+\newcommand*{\clearscrheadings}{}
+\newcommand*{\clearscrheadfoot}{}
+\newcommand*{\clearscrplain}{}
+% \end{macrocode}
+%
+% \iffalse
+%</scrpage2>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*section>
+% \fi
+%
+% \part{lwarp-section.sty}
+%
+% \section{section}
+%
+% \DescribePackage{section}
+% \pkg{section} is ignored.
+%
+% \credits{Oliver Pretzel}
+%
+% \changes{v0.44}{2017/11/22}{\pkg{section}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{section}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ifx\chapter\undefined
+ \def\chsize{\Large}\def\hdsize{\huge}\else
+ \def\chsize{\huge}\def\hdsize{\Huge}
+\fi
+\let\ttsize\LARGE
+\let\ausize\large
+\let\dasize\large
+\let\secsize\Large
+\let\subsize\large
+\let\hdpos\raggedright
+\newcounter{hddepth}
+\let\fpind\relax
+\def\ttfnt{}
+\def\hdfnt{}
+\def\fefnt{}
+\def\thfnt{}
+\def\pgfnt{}
+\def\hmkfnt{}
+\let\mkcse\uppercase
+\def\hddot{}
+\def\cpdot{:}
+\def\nmdot{}
+\ifx\secindent\undefined
+ \newdimen\secindent
+ \newskip\secpreskp
+ \newskip\secpstskp
+ \newdimen\subindent
+ \newskip\subpreskp
+ \newskip\subpstskp
+ \newskip\parpstskp
+ \newcount\c@hddepth
+\fi
+% \end{macrocode}
+%
+% \iffalse
+%</section>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*sectionbreak>
+% \fi
+%
+% \part{lwarp-sectionbreak.sty}
+
+% \section{sectionbreak}
+%
+% \credits{Michal Hoftich}
+%
+% \DescribePackage{sectionbreak}
+% \pkg{sectionbreak} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.47}{2018/01/25}{\pkg{sectionbreak}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{sectionbreak}[2018-01-03]
+% \end{macrocode}
+
+% \begin{macrocode}
+\renewcommand\asterism{\HTMLunicode{2042}}
+
+\renewcommand\pre@sectionbreak{}
+\renewcommand\post@sectionbreak{}
+
+\renewcommand\print@sectionbreak[1]{%
+\begin{center}
+#1
+\end{center}
+}
+
+% \end{macrocode}
+
+% \iffalse
+%</sectionbreak>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*sectsty>
+% \fi
+%
+% \part{lwarp-sectsty.sty}
+%
+% \section{sectsty}
+%
+% \credits{Rowland McDonnell}
+%
+% \DescribePackage{sectsty}
+% \pkg{sectsty} is ignored.
+%
+% \changes{v0.40}{2017/09/12}{\pkg{sectsty}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{sectsty}[2002/02/25]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\partfont} [1] {}
+\newcommand*{\partnumberfont} [1] {}
+\newcommand*{\parttitlefont} [1] {}
+\newcommand*{\chapterfont} [1] {}
+\newcommand*{\chapternumberfont} [1] {}
+\newcommand*{\chaptertitlefont} [1] {}
+\newcommand*{\sectionfont} [1] {}
+\newcommand*{\subsectionfont} [1] {}
+\newcommand*{\subsubsectionfont} [1] {}
+\newcommand*{\paragraphfont} [1] {}
+\newcommand*{\subparagraphfont} [1] {}
+\newcommand*{\minisecfont} [1] {}
+\newcommand*{\allsectionsfont}[1] {}
+\newcommand{\nohang}{}
+% \end{macrocode}
+% \cs{sectionrule} is only to be used in |*font| commands, thus it is ignored.
+% \begin{macrocode}
+\newcommand*{\sectionrule}[5]{}
+
+\def\ulemheading#1#2{}
+% \end{macrocode}
+%
+% \iffalse
+%</sectsty>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*semantic-markup>
+% \fi
+%
+% \part{lwarp-semantic-markup.sty}
+%
+% \section{semantic-markup}
+%
+% \credits{Andrew A. Cashner}
+%
+% \DescribePackage{semantic-markup}
+% \pkg{semantic-markup} is patched for use by \pkg{lwarp}.
+%
+% If using the \optn{endnotes} option, add \cs{theendnotes}
+% \watchout
+% where desired.
+%
+% \changes{v0.62}{2018/11/12}{\pkg{semantic-markup}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{semantic-markup}[2018/05/21]
+% \end{macrocode}
+%
+% The endnotes must be printed by the user before the end of the document,
+% since the end is after the \HTML\ footer, etc.
+% \begin{macrocode}
+\ifendnotes
+\RenewDocumentCommand{\SetupEndnotes}{}{%
+ \let\footnote=\endnote
+% \AtEndDocument{\DoBeforeEndnotes{\EndnoteFont\theendnotes}}%
+}
+\fi
+% \end{macrocode}
+%
+% \HTML\ unicode characters from \pkg{musicography} are used.
+% \begin{macrocode}
+\RequirePackage{musicography}
+
+\let\fl\musFlat
+\let\sh\musSharp
+\let\na\musNatural
+% \end{macrocode}
+%
+% The \cs{musfig} is placed inside a hashed image,
+% with a simple \attribute{alt} tag.
+% \begin{macrocode}
+\RequirePackage{amsmath}
+
+\RenewDocumentCommand{\musfig}{ m m }{%
+ \LWR@subsingledollar*%
+ {#1/#2}% alt tag
+ {musfig}% addl' hashing
+ {% contents
+ \LWR@origensuredmath{%
+ \genfrac{}{}{0pt}{1}{\text{#1}}{\text{#2}}%
+ }%
+ }%
+}
+% \end{macrocode}
+%
+% The \cs{meter} is taken from \pkg{musicography}, and becomes a hashed image
+% with a simple \attribute{alt} tag.
+% \begin{macrocode}
+\RenewDocumentCommand{\meter}{ m m }{%
+ \musMeter{#1}{#2}%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</semantic-markup>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*setspace>
+% \fi
+
+% \part{lwarp-setspace.sty}
+
+% \section{setspace}
+%
+% \credits{Robin Fairbairns}
+%
+% \DescribePackage{setspace}
+% \pkg{setspace} is emulated.
+%
+% \changes{v0.20}{2016/12/22}{\pkg{setspace}: Improved support.}
+%
+
+% Discard all options for \pkg{lwarp-setspace}:
+
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{setspace}[2011/12/19]
+
+\newcommand*{\setstretch}[1]{}
+\newcommand*{\SetSinglespace}[1]{}
+\newcommand*{\singlespacing}{}
+\newcommand*{\onehalfspacing}{}
+\newcommand*{\doublespacing}{}
+
+\newenvironment*{singlespace}
+{
+\LWR@forcenewpage
+\BlockClass{singlespace}
+}
+{\endBlockClass}
+
+\newenvironment*{singlespace*}
+{
+\LWR@forcenewpage
+\BlockClass{singlespace}
+}
+{\endBlockClass}
+
+\newenvironment*{spacing}[1]{
+
+}{
+
+}
+
+\newenvironment*{onehalfspace}
+{
+\LWR@forcenewpage
+\BlockClass{onehalfspace}
+}
+{\endBlockClass}
+
+\newenvironment*{doublespace}
+{
+\LWR@forcenewpage
+\BlockClass{doublespace}
+}
+{\endBlockClass}
+% \end{macrocode}
+
+% \iffalse
+%</setspace>
+% \fi
+%
+%
+%
+% \iffalse
+%<*shadow>
+% \fi
+
+% \part{lwarp-shadow.sty}
+
+% \section{shadow}
+%
+% \credits{Mauro Orlandini}
+%
+% \DescribePackage{shadow}
+% \pkg{shadow} is emulated.
+%
+% \changes{v0.34}{2017/07/26}{\pkg{shadow}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-shadow}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{shadow}[2003/02/19]
+% \end{macrocode}
+
+% \begin{macrocode}
+\newdimen\sboxsep
+\newdimen\sboxrule
+\newdimen\sdim
+
+\newcommand{\shabox}[1]{%
+\InlineClass{shabox}{#1}%
+}
+% \end{macrocode}
+
+% \iffalse
+%</shadow>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*shapepar>
+% \fi
+%
+% \part{lwarp-shapepar.sty}
+%
+% \section{shapepar}
+%
+% \credits{Donald Arseneau}
+%
+% \DescribePackage{shapepar}
+% \pkg{shapepar} is patched for use by \pkg{lwarp}.
+% Shapes appear in print mode, as well as inside a \env{lateximage},
+% but are ignored for \HTML.
+%
+% \changes{v0.72}{2019/06/06}{\pkg{shapepar}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{shapepar}[2013/03/26]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@shapepar}[2][]{}
+\LWR@formatted{shapepar}
+
+\NewDocumentCommand{\LWR@HTML@cutout}{m d()}{}
+\LWR@formatted{cutout}
+% \end{macrocode}
+%
+% \iffalse
+%</shapepar>
+% \fi
+%
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*showidx>
+% \fi
+
+% \part{lwarp-showidx.sty}
+
+% \section{showidx}
+%
+% \DescribePackage{showidx}
+% \pkg{showidx} is ignored.
+%
+% \changes{v0.25}{2017/03/22}{\pkg{showidx}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-showidx}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{showidx}[2014/09/29]
+% \end{macrocode}
+%
+% \cs{@wrindex} is redefined \cs{AtBeginDocument} by the \pkg{lwarp} core.
+%
+% \iffalse
+%</showidx>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*showkeys>
+% \fi
+
+% \part{lwarp-showkeys.sty}
+
+% \section{showkeys}
+%
+% \credits{David Carlisle, Morten Høgholm}
+%
+% \DescribePackage{showkeys}
+% \pkg{showkeys} is ignored.
+%
+% \changes{v0.22}{2017/03/01}{\pkg{showkeys}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-showkeys}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{showkeys}[2014/10/28]
+% \end{macrocode}
+
+% \begin{macrocode}
+\NewDocumentCommand{\showkeys}{s}{}
+% \end{macrocode}
+
+% \iffalse
+%</showkeys>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*showtags>
+% \fi
+%
+% \part{lwarp-showtags.sty}
+%
+% \section{showtags}
+%
+% \DescribePackage{showtags}
+% \pkg{showtags} is ignored.
+%
+% \changes{v0.68}{2019/02/26}{\pkg{showtags}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{showtags}% no version is given
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\thecitetag}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</showtags>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*sidecap>
+% \fi
+
+% \part{lwarp-sidecap.sty}
+
+% \section{sidecap}
+%
+% \credits{Rolf Niepraschk, Hubert Gäßlein}
+%
+% \DescribePackage{sidecap}
+% \pkg{sidecap} is emulated.
+%
+% \changes{v0.22}{2017/03/01}{\pkg{sidecap}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-sidecap}.
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{sidecap}[2003/06/06]
+% \end{macrocode}
+
+% See: \\
+% \href
+% {http://tex.stackexchange.com/questions/45401/use-the-s-star-argument-with-newdocumentenvironment}
+% {\texttt{http://tex.stackexchange.com/questions/45401/ \\
+% use-the-s-star-argument-with-newdocumentenvironment}} \\
+% regarding the creation of starred environments with \pkg{xparse}.
+% \begin{macrocode}
+\NewDocumentEnvironment{SCtable}{soo}
+{\IfValueTF{#3}{\table[#3]}{\table}}
+{\endtable}
+
+\ExplSyntaxOn
+\cs_new:cpn {SCtable*} {\SCtable*}
+\cs_new_eq:cN {endSCtable*} \endSCtable
+\ExplSyntaxOff
+
+
+\NewDocumentEnvironment{SCfigure}{soo}
+{\IfValueTF{#3}{\figure[#3]}{\figure}}
+{\endfigure}
+
+\ExplSyntaxOn
+\cs_new:cpn {SCfigure*} {\SCfigure*}
+\cs_new_eq:cN {endSCfigure*} \endSCfigure
+\ExplSyntaxOff
+
+
+\newenvironment*{wide}{}{}
+% \end{macrocode}
+
+% \iffalse
+%</sidecap>
+% \fi
+%
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*sidenotes>
+% \fi
+%
+% \part{lwarp-sidenotes.sty}
+%
+% \section{sidenotes}
+%
+% \credits{Andy Thomas, Oliver Schebaum}
+%
+% \DescribePackage{sidenotes} Patched for \pkg{lwarp}.
+%
+% \changes{v0.26}{2017/03/30}{\pkg{sidenotes}: Added.}
+%
+% \codehtml
+%
+%
+% Load the original package:
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{sidenotes}
+% \end{macrocode}
+%
+%
+% The following patch \pkg{sidenotes} for use with \pkg{lwarp}:
+%
+% \begin{noindmacro}{\sidecaption} * \oarg{entry} \oarg{offset} \marg{text}
+% \changes{v0.47}{2018/01/30}{\pkg{sidenotes}: Fix for \SVG\ math in captions.}
+% \begin{macrocode}
+\RenewDocumentCommand \sidecaption {s o o +m}
+{
+ \LWR@stoppars
+ \begingroup
+ \captionsetup{style=sidecaption}
+ \IfBooleanTF{#1}
+ { % starred
+ \begin{BlockClass}[border:none ; box-shadow:none]{marginblock}
+ \caption*{#4}
+ \end{BlockClass}
+ }
+ { % unstarred
+ \IfNoValueOrEmptyTF{#2}
+ {\def\@sidenotes@sidecaption@tof{#4}}
+ {\def\@sidenotes@sidecaption@tof{#2}}
+ \begin{BlockClass}[border:none ; box-shadow:none]{marginblock}
+ \caption[\@sidenotes@sidecaption@tof]{#4}
+ \end{BlockClass}
+ }
+ \endgroup
+ \LWR@startpars
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+%
+% Borrowed from the \pkg{lwarp} version of \pkg{keyfloat}:
+% \changes{v0.42}{2017/10/26}{\pkg{sidenotes}: If \progcode{FormatWP} add explicit \HTML\ style.}
+% \begin{macrocode}
+\NewDocumentEnvironment{KFLTsidenotes@marginfloat}{O{-1.2ex} m}
+{% start
+\LWR@BlockClassWP{float:right; width:2in; margin:10pt}{}{marginblock}%
+\captionsetup{type=#2}%
+}
+{%
+\endLWR@BlockClassWP%
+}
+
+\RenewDocumentEnvironment{marginfigure}{o}
+ {\begin{KFLTsidenotes@marginfloat}{figure}}
+ {\end{KFLTsidenotes@marginfloat}}
+
+\RenewDocumentEnvironment{margintable}{o}
+ {\begin{KFLTsidenotes@marginfloat}{table}}
+ {\end{KFLTsidenotes@marginfloat}}
+% \end{macrocode}
+%
+% The following were changed by \pkg{sidenotes}, and now are
+% reset back to their \pkg{lwarp}-supported originals:
+%
+% Restoring the definition from the \LaTeXe\ |article.cls| source:
+% \begin{macrocode}
+\renewenvironment{figure*}
+ {\@dblfloat{figure}}
+ {\end@dblfloat}
+
+\renewenvironment{table*}
+ {\@dblfloat{table}}
+ {\end@dblfloat}
+% \end{macrocode}
+%
+% \iffalse
+%</sidenotes>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*SIunits>
+% \fi
+%
+% \part{lwarp-SIunits.sty}
+%
+% \section{SIunits}
+%
+% \credits{Marcel Heldoorn}
+%
+% \DescribePackage{SIunits}
+% \pkg{SIunits} is patched for use by \pkg{lwarp}.
+%
+% It is recommended to use \cs{unit} where possible, which
+% combines the entire expression into a single \env{lateximage},
+% and adds the \attribute{alt} tag containing the \LaTeX\ code, allowing for
+% copy/paste. When units are used outside of the \cs{unit} macro,
+% each unit macro will have its own \env{lateximage},
+% and each will have the \attribute{alt} tag set to ``|(|<\cs{mathimagename}>|)|'',
+% which defaults to ``|(math image)|''.
+%
+% \changes{v0.59}{2018/07/11}{\pkg{SIunits}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{SIunits}[2007/12/02]
+% \end{macrocode}
+%
+% Patched for copy/paste with the \HTML\ \attribute{alt} tag:
+% \begin{macrocode}
+\DeclareRobustCommand{\unit}[2]{%
+\@inunitcommandtrue% original
+\LWR@subsingledollar*% lwarp
+{% alt tag
+ \textbackslash{}unit\{\LWR@HTMLsanitize{#1}\}%
+ \{ \LWR@HTMLsanitize{#2}\}% extra space
+}%
+{SIunits}% add'l hashing
+{%
+ \LWR@origensuredmath{% lwarp modification
+ \SI@fstyle{#1\@qsk\period@active{#2}}% original
+ }%
+}% contents
+\@inunitcommandfalse% original
+}
+% \end{macrocode}
+%
+% \iffalse
+%</SIunits>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*siunitx>
+% \fi
+%
+% \part{lwarp-siunitx.sty}
+
+% \section{siunitx}
+%
+% \credits{Joseph Wright}
+%
+% \DescribePackage{siunitx}
+% \pkg{siunitx} is patched for use by \pkg{lwarp}.
+%
+% \limitssiunitx
+%
+% \changes{v0.36}{2017/08/17}{\pkg{siunitx}: Improved symbol support.}
+% \changes{v0.37}{2017/08/17}{\pkg{siunitx}: Improved symbol support.}
+% \changes{v0.38}{2017/08/26}{\pkg{siunitx}: Removed from \pkg{lwarp} core.}
+% \changes{v0.50}{2018/10/23}{\pkg{siunitx}: Fix: Loads \pkg{xcolor}.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\RequirePackage{xcolor}% for \convertcolorspec
+
+\LWR@ProvidesPackagePass{siunitx}[2018/05/17]
+% \end{macrocode}
+
+% \changes{v0.50}{2018/02/24}{\pkg{siunitx}: Improved units.}
+% \begin{macrocode}
+\AtBeginDocument{% in case textcomp was not loaded
+\DeclareSIUnit\bohr{\textit{a}\textsubscript{0}}
+\DeclareSIUnit\clight{\textit{c}\textsubscript{0}}
+\DeclareSIUnit\elementarycharge{\textit{e}}
+\DeclareSIUnit\electronmass{\textit{m}\textsubscript{e}}
+\DeclareSIUnit\hartree{\textit{E}\textsubscript{h}}
+\DeclareSIUnit\planckbar{\LWR@siunitx@textplanckbar}
+}% AtBeginDocument
+% \end{macrocode}
+%
+% \cs{@ensuredmath} is not supported inside an \cs{hbox}, so it must
+% temporarily be restored to its original.
+% Similar for \cs{mbox}.
+% SVG math is created explicitly when necessary, using \cs{LWR@subsingledollar}.
+%
+% \changes{v0.42}{2017/10/16}{\pkg{siunitx}: Improved \cs{ensuremath}.}
+% \changes{v0.48}{2018/02/13}{\pkg{siunitx}: Improved \SVG\ math.}
+% \begin{macrocode}
+
+\ExplSyntaxOn
+%
+% \end{macrocode}
+% Modified to set set \HTML\ \cs{textcolor} if not black:
+% \changes{v0.48}{2018/02/14}{\pkg{siunitx}: Improved color output.}
+% \begin{macrocode}
+\cs_undefine:N \__siunitx_print_aux:
+\cs_new_protected:Npn \__siunitx_print_aux:
+ {
+ \text
+ {
+ \__siunitx_ensure_ltr:n
+ {
+ \color@begingroup
+ \__siunitx_print_color:
+ \__siunitx_font_shape:
+ \__siunitx_font_weight:
+ \use:c
+ {
+ @@_ \l__siunitx_print_type_tl _
+ text \l__siunitx_font_family_tl :
+ }
+ \bool_if:NTF \l__siunitx_font_math_mode_bool
+ { \__siunitx_print_math: }
+ {
+ \LWR@findcurrenttextcolor% lwarp
+ \ifdefstring{\LWR@tempcolor}{000000}% lwarp
+ {\__siunitx_print_text:}% lwarp
+ {% lwarp
+ \LWR@textcurrentcolor{% lwarp
+ \__siunitx_print_text:
+ }% lwarp
+ }% lwarp
+ }
+ \color@endgroup
+ }
+ }
+ }
+
+
+\cs_undefine:N \__siunitx_set_math_fam:n
+\cs_new_protected:Npn \__siunitx_set_math_fam:n #1 {
+ \int_new:c { c__siunitx_math #1 _int }
+ \group_begin:% lwarp
+ \LetLtxMacro\@ensuredmath\LWR@origensuredmath% lwarp
+ \LetLtxMacro\mbox\LWR@print@mbox% lwarp
+ \hbox_set:Nn \l__siunitx_tmp_box
+ {
+ \ensuremath
+ {
+ \use:c { math #1 }
+ {
+ \int_gset:cn { c__siunitx_math #1 _int } { \fam }
+ }
+ }
+ }
+ \group_end:% lwarp
+}
+
+\cs_undefine:N \__siunitx_combined_output:n
+\cs_new_protected:Npn \__siunitx_combined_output:n #1 {
+ \group_begin:% lwarp
+ \LetLtxMacro\@ensuredmath\LWR@origensuredmath% lwarp
+ \LetLtxMacro\mbox\LWR@print@mbox% lwarp
+ \bool_if:NTF \l__siunitx_number_parse_bool
+ {
+ \tl_clear:N \l__siunitx_number_out_tl
+ \bool_set_false:N \l__siunitx_number_compound_bool
+ \__siunitx_number_output_parse:n {#1}
+ }
+ {
+ \__siunitx_unit_output_pre_print:
+% \end{macrocode}
+% For |parse-numbers=false|:
+% \changes{v0.48}{2018/02/14}{\pkg{siunitx}: Improved \SVG\ math.}
+% \changes{v0.50}{2018/02/24}{\pkg{siunitx}: Improved \SVG\ math \attribute{alt} tags.}
+% \begin{macrocode}
+% \__siunitx_print:nn { number } { \ensuremath {#1} }
+ \LWR@subsingledollar{% lwarp
+ \textbackslash( \LWR@HTMLsanitize{#1} \textbackslash)% lwarp
+ }{siunitx}{%
+ \__siunitx_print:nn { number } {%
+ \LWR@origensuredmath{#1}%
+ }%
+ }% lwarp
+% \end{macrocode}
+% \begin{macrocode}
+ \__siunitx_unit_output_print:
+ }
+ \group_end:% lwarp
+}
+%
+% \end{macrocode}
+% For quotients, the fraction code is replaced by the symbol code:
+% \changes{v0.48}{2018/02/14}{\pkg{siunitx}: Changes fraction to symbol.}
+% \begin{macrocode}
+\cs_undefine:N \__siunitx_number_output_quotient_fraction:
+\cs_new_protected:Npn \__siunitx_number_output_quotient_fraction: {
+ \bool_set_true:N \l__siunitx_number_compound_bool
+ \__siunitx_number_output_quotient_aux_i:
+ \tl_set_eq:NN \l__siunitx_number_out_tl
+ \l__siunitx_number_numerator_tl
+ \tl_put_right:NV \l__siunitx_number_out_tl \l__siunitx_output_quotient_tl
+ \tl_put_right:NV \l__siunitx_number_out_tl
+ \l__siunitx_number_denominator_tl
+ \__siunitx_number_output_single_aux:
+}
+% \end{macrocode}
+% For units, the fraction code is replaced by the symbol code:
+% \changes{v0.48}{2018/02/14}{\pkg{siunitx}: Changes fraction to symbol.}
+% \begin{macrocode}
+\cs_undefine:N \__siunitx_unit_format_fraction_fraction:
+\cs_new_protected:Npn \__siunitx_unit_format_fraction_fraction: {
+ \__siunitx_unit_format_fraction_symbol_aux:
+ \int_compare:nNnT { \l__siunitx_unit_denominator_int } > { 1 }
+ {
+ \bool_if:NT \l__siunitx_unit_denominator_bracket_bool
+ {
+ \tl_put_left:NV \l__siunitx_unit_denominator_tl \l__siunitx_bracket_open_tl
+ \tl_put_right:NV \l__siunitx_unit_denominator_tl \l__siunitx_bracket_close_tl
+ }
+ }
+ \tl_set_eq:NN \l__siunitx_unit_tl \l__siunitx_unit_numerator_tl
+ \tl_put_right:NV \l__siunitx_unit_tl \l__siunitx_per_symbol_tl
+ \tl_put_right:NV \l__siunitx_unit_tl \l__siunitx_unit_denominator_tl
+}
+% \end{macrocode}
+% \changes{v0.50}{2018/02/24}{\pkg{siunitx}: Improved units.}
+% \begin{macrocode}
+\cs_undefine:N \__siunitx_angle_print_astronomy_aux:
+\cs_new_protected:Npn \__siunitx_angle_print_astronomy_aux: {
+ \prop_get:NnNT \l__siunitx_number_out_prop { mantissa-integer }
+ \l__siunitx_tmpa_tl
+ { \__siunitx_print:nV { number } \l__siunitx_tmpa_tl }
+ \ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}% lwarp
+ {% lateximage
+ \hbox_set:Nn \l__siunitx_angle_marker_box
+ {
+ \__siunitx_print:nn { number } { { \l__siunitx_output_decimal_tl } }
+ }
+ \hbox_set:Nn \l__siunitx_angle_unit_box
+ {
+ \__siunitx_print:nV { unit } \l__siunitx_unit_tl
+ \skip_horizontal:n { -\scriptspace }
+ }
+ \__siunitx_angle_print_astronomy_aux:n { marker }
+ \__siunitx_angle_print_astronomy_aux:n { unit }
+ \hbox_set:Nn \l__siunitx_angle_marker_box
+ {
+ \box_use:N \l__siunitx_angle_marker_box
+ \box_use:N \l__siunitx_angle_unit_box
+ }
+ \dim_compare:nNnTF
+ { \l__siunitx_angle_marker_dim } > { \l__siunitx_angle_unit_dim }
+ { \__siunitx_angle_print_astronomy_marker: }
+ { \__siunitx_angle_print_astronomy_unit: }
+ }% lateximage
+ {% not a lateximage
+ \__siunitx_print:nV { unit } \l__siunitx_unit_tl
+ \__siunitx_print:nn { number } { { \l__siunitx_output_decimal_tl } }
+ }% not a lateximage
+ \prop_get:NnNT \l__siunitx_number_out_prop { mantissa-decimal }
+ \l__siunitx_tmpa_tl
+ { \__siunitx_print:nV { number } \l__siunitx_tmpa_tl }
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\RenewDocumentCommand \num { o m } {
+ \leavevmode
+ \group_begin:% lwarp
+ \LetLtxMacro\@ensuredmath\LWR@origensuredmath% lwarp
+ \LetLtxMacro\mbox\LWR@print@mbox% lwarp
+ \bool_set_false:N \l__siunitx_font_set_bool
+ \IfNoValueF {#1}
+ { \keys_set:nn { siunitx } {#1} }
+ \__siunitx_number_output:n {#2}
+ \group_end:% lwarp
+}
+
+\RenewDocumentCommand \numrange { o m m } {
+ \leavevmode
+ \group_begin:% lwarp
+ \LetLtxMacro\@ensuredmath\LWR@origensuredmath% lwarp
+ \LetLtxMacro\mbox\LWR@print@mbox% lwarp
+ \bool_set_false:N \l__siunitx_font_set_bool
+ \IfNoValueF {#1}
+ { \keys_set:nn { siunitx } {#1} }
+ \__siunitx_range_numbers:nn {#2} {#3}
+ \group_end:% lwarp
+}
+
+\RenewDocumentCommand \ang { o > { \SplitArgument { 2 } { ; } } m } {
+ \group_begin:% lwarp
+ \LetLtxMacro\@ensuredmath\LWR@origensuredmath% lwarp
+ \LetLtxMacro\mbox\LWR@print@mbox% lwarp
+ \IfNoValueF {#1}
+ { \keys_set:nn { siunitx } {#1} }
+ \__siunitx_angle_output:nnn #2
+ \group_end:% lwarp
+}
+
+\RenewDocumentCommand \si { o m } {
+ \leavevmode
+ \group_begin:% lwarp
+ \LetLtxMacro\@ensuredmath\LWR@origensuredmath% lwarp
+ \LetLtxMacro\mbox\LWR@print@mbox% lwarp
+ \bool_set_false:N \l__siunitx_font_set_bool
+ \IfNoValueTF {#1}
+ { \__siunitx_unit_output:nn {#2} { } }
+ {
+ \keys_set:nn { siunitx } {#1}
+ \__siunitx_unit_output:nn {#2} {#1}
+ }
+ \group_end:% lwarp
+}
+
+
+\RenewDocumentCommand{\SIrange}{o m m m}
+{%
+ \leavevmode
+ \group_begin:% lwarp
+ \LetLtxMacro\@ensuredmath\LWR@origensuredmath% lwarp
+ \LetLtxMacro\mbox\LWR@print@mbox% lwarp
+ \bool_set_false:N \l__siunitx_font_set_bool
+ \IfNoValueTF {#1}
+ { \__siunitx_range_unit:nnnn {#4} { } {#2} {#3} }
+ {
+ \keys_set:nn { siunitx } {#1}
+ \__siunitx_range_unit:nnnn {#4} {#1} {#2} {#3}
+ }
+ \group_end:% lwarp
+}
+
+\ExplSyntaxOff
+% \end{macrocode}
+
+% \iffalse
+%</siunitx>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*slantsc>
+% \fi
+%
+% \part{lwarp-slantsc.sty}
+%
+% \section{slantsc}
+%
+% \credits{Harald Harders}
+%
+% \DescribePackage{slantsc}
+% \pkg{slantsc} is emulated for \HTML, and used as-is for print output.
+%
+% \changes{v0.72}{2019/05/27}{\pkg{slantsc}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{slantsc}[2012/01/01]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@noscshape}{}
+\LWR@formatted{noscshape}
+
+\newcommand*{\LWR@null@noscshape}{}
+
+\appto{\LWR@nullfonts}{%
+\LetLtxMacro\noscshape\LWR@null@noscshape%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</slantsc>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*soul>
+% \fi
+%
+% \part{lwarp-soul.sty}
+%
+% \section{soul}
+%
+% \credits{Melchior FRANZ}
+%
+% \DescribePackage{soul} \pkg{soul} is emulated.
+%
+% \changes{v0.27}{2017/04/02}{\pkg{soul}: Added.}
+% \changes{v0.42}{2017/10/20}{\pkg{soul}: If \progcode{FormatWP}, add explicit styles.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{soul}[2003/11/17]
+\RequirePackage{xcolor}% for \convertcolorspec
+% \end{macrocode}
+%
+% Storage for the colors to use:
+% \begin{macrocode}
+\newcommand*{\LWR@soululcolor}{}
+
+\newcommand*{\LWR@soulstcolor}{}
+
+% \definecolor{LWR@soulhlcolordefault}{HTML}{F8E800}
+% \newcommand*{\LWR@soulhlcolor}{LWR@soulhlcolordefault}
+\newcommand*{\LWR@soulhlcolor}{}
+% \end{macrocode}
+%
+% \begin{noindmacro}{\so} \marg{text}
+%
+% Basic markup with \CSS:
+% \begin{macrocode}
+\newcommand{\so}[1]{%
+\InlineClass(letter-spacing:.2ex){letterspacing}{#1}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\caps} \marg{text}
+% \begin{macrocode}
+\newcommand{\caps}[1]{%
+ \InlineClass%
+ (font-variant:small-caps;letter-spacing:.1ex)%
+ {capsspacing}{#1}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\LWR@soulcolor}
+% \marg{text} \marg{color} \marg{class} \marg{colorstyle} \marg{FormatWPstyle}
+%
+% Add colors if not empty:
+% \begin{macrocode}
+\newcommand{\LWR@soulcolor}[5]{%
+\ifcsempty{#2}%
+{%
+ \InlineClass(#5){#3}{#1}%
+}%
+{%
+ \convertcolorspec{named}{\@nameuse{#2}}{HTML}\LWR@tempcolor%
+ \LWR@htmlspanclass[#5;#4:\LWR@origpound\LWR@tempcolor]{#3}{#1}%
+}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{macrocode}
+\newcommand{\ul}[1]{%
+\LWR@soulcolor{#1}{LWR@soululcolor}{uline}{text-decoration-color}%
+ {text-decoration:underline; text-decoration-skip: auto;}%
+}
+
+\newcommand{\st}[1]{
+\LWR@soulcolor{#1}{LWR@soulstcolor}{sout}{text-decoration-color}%
+ {text-decoration:line-through}%
+}
+
+\newcommand{\hl}[1]{
+\LWR@soulcolor{#1}{LWR@soulhlcolor}{highlight}{background-color}%
+ {background:\LWR@origpound{}F8E800}
+}
+% \end{macrocode}
+%
+% Nullified:
+% \begin{macrocode}
+\newcommand*{\soulaccent}[1]{}
+\newcommand*{\soulregister}[2]{}
+\newcommand{\sloppyword}[1]{#1}
+\newcommand*{\sodef}[5]{\DeclareRobustCommand*#1[1]{\so{##1}}}
+\newcommand*{\resetso}{}
+\newcommand*{\capsdef}[5]{}
+\newcommand*{\capsreset}{}
+\newcommand*{\capssave}[1]{}
+\newcommand*{\capsselect}[1]{}
+\newcommand*{\setul}[2]{}
+\newcommand*{\resetul}{}
+\newcommand*{\setuldepth}[1]{}
+\newcommand*{\setuloverlap}[1]{}
+% \end{macrocode}
+%
+% Set colors:
+% \begin{macrocode}
+\newcommand*{\setulcolor}[1]{\renewcommand{\LWR@soululcolor}{#1}}
+\newcommand*{\setstcolor}[1]{\renewcommand{\LWR@soulstcolor}{#1}}
+\newcommand*{\sethlcolor}[1]{\renewcommand{\LWR@soulhlcolor}{#1}}
+% \end{macrocode}
+%
+% Long versions of the user-level macros:
+% \begin{macrocode}
+\let\textso\so
+\let\textul\ul
+\let\texthl\hl
+\let\textcaps\caps
+% \end{macrocode}
+%
+% \iffalse
+%</soul>
+% \fi
+%
+%
+%
+% \iffalse
+%<*soulpos>
+% \fi
+%
+% \part{lwarp-soulpos.sty}
+%
+% \section{soulpos}
+%
+% \credits{Javier Bezos}
+%
+% \DescribePackage{soulpos}
+% \pkg{soulpos} is emulated.
+%
+% \changes{v0.44}{2017/11/10}{\pkg{soulpos}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\RequirePackage{soul}
+\RequirePackage{soulutf8}
+\LWR@ProvidesPackageDrop{soulpos}[2012/02/25]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand{\ulposdef}{m o m}{}
+
+\newdimen\ulwidth
+
+\newcommand\ifulstarttype[1]{%
+\expandafter\@secondoftwo%
+}
+
+\newcommand\ifulendtype[1]{%
+\expandafter\@secondoftwo%
+}
+
+\newcommand{\ulstarttype}{0}
+\newcommand{\ulendtype}{0}
+\newcommand\ulpostolerance{0}%
+% \end{macrocode}
+%
+% \iffalse
+%</soulpos>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*soulutf8>
+% \fi
+%
+% \part{lwarp-soulutf8.sty}
+%
+% \section{soulutf8}
+%
+% \DescribePackage{soulutf8}
+% \pkg{soulutf8} is emulated.
+%
+% \pkg{lwarp}'s \HTML\ output naturally supports \UTF-8 encoding.
+%
+% \changes{v0.44}{2017/11/10}{\pkg{soulutf8}: Added.}
+% \changes{v0.72}{2019/06/07}{\pkg{soulutf8}: Fix: Loads \pkg{soul}.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{soulutf8}[2016/05/16]
+\RequirePackage{soul}
+% \end{macrocode}
+%
+%
+% \iffalse
+%</soulutf8>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*splitidx>
+% \fi
+%
+% \part{lwarp-splitidx.sty}
+%
+% \section{splitidx}
+% \label{sec:splitidx}
+%
+% \credits{Markus Kohm}
+%
+% \DescribePackage{splitidx}
+% \pkg{splitidx} is patched for use by \pkg{lwarp}.
+%
+% \limitssplitidx
+%
+% \changes{v0.58}{2018/06/30}{\pkg{splitidx}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{splitidx}[2016/02/18]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\catcode`\_=12%
+\xpatchcmd{\newindex}
+ {\jobname-#2.idx}
+ {\jobname-#2_html.idx}
+ {}
+ {\LWR@patcherror{splitidx}{@newindex}}
+\catcode`\_=8%
+% \end{macrocode}
+%
+% Patched to use \pkg{lwarp}'s automatic indexing counter instead of \cs{thepage}:
+% \begin{macrocode}
+\renewcommand*{\@wrsindex}[2][]{%
+ \ifx\relax#1\relax
+ \if@splitidx
+ \@wrsindex[idx]{#2}%
+ \else
+ \def\@tempa{#2}%
+ \if@verbindex\@onelevel@sanitize\@tempa\fi
+ \@wrindex{\@tempa}%
+ \fi
+ \else
+ \def\@tempa{#2}%
+ \csname index@#1@hook\endcsname
+% \expandafter\ifx\csname @@wrsindex\endcsname\relax
+ \addtocounter{LWR@autoindex}{1}% lwarp
+ \LWR@new@label{LWRindex-\arabic{LWR@autoindex}}% lwarp
+% \@@@wrsindex{#1}{{\@tempa}{\thepage}}%
+ \@@@wrsindex{#1}{{\@tempa}{\arabic{LWR@autoindex}}}%
+% \else
+% \def\@tempb{\@@wrsindex{#1}}%
+% \expandafter\@tempb\@tempa||\\%
+% \fi
+ \endgroup
+ \@esphack
+ \fi
+}
+% \end{macrocode}
+%
+% \pkg{lwarp} defines sectioning commands with \pkg{xparse},
+% so the below patches are done as temporary redefinitions instead of being \cs{let}.
+% \begin{macrocode}
+\xpatchcmd{\printsubindex}
+ {\let\section\subsection}
+ {\renewcommand*{\section}{\subsection}}
+ {}
+ {\LWR@patcherror{splitidx}{printsubindex-section}}
+
+\xpatchcmd{\printsubindex}
+ {\let\chapter\section}
+ {\renewcommand*{\chapter}{\section}}
+ {}
+ {\LWR@patcherror{splitidx}{printsubindex-chapter}}
+
+\xpatchcmd{\printsubindex}
+ {\let\@makechapterhead\section}
+ {\def\@makechapterhead{\section}}
+ {}
+ {\LWR@patcherror{splitidx}{printsubindex-chapter}}
+% \end{macrocode}
+%
+% \iffalse
+%</splitidx>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*srcltx>
+% \fi
+%
+% \part{lwarp-srcltx.sty}
+%
+% \section{srcltx}
+%
+% \DescribePackage{srcltx}
+% \pkg{srcltx} is ignored.
+%
+% \changes{v0.61}{2018/10/05}{\pkg{srcltx}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{srcltx}[2006/11/12]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif\ifSRCOK \SRCOKfalse
+\newcommand*\srcIncludeHook[1]{}
+\newcommand*\srcInputHook[1]{}
+\newcommand*\MainFile{}
+\def\MainFile{\jobname.tex}
+\newcommand*\CurrentInput{}
+\gdef\CurrentInput{\MainFile}
+\newcommand\Input{}
+\let\Input\input
+% \end{macrocode}
+%
+% \iffalse
+%</srcltx>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*srctex>
+% \fi
+%
+% \part{lwarp-srctex.sty}
+%
+% \section{srctex}
+%
+% \DescribePackage{srctex}
+% \pkg{srctex} is ignored.
+%
+% \changes{v0.61}{2018/10/05}{\pkg{srctex}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{srctex}[2006/11/12]
+\LWR@origRequirePackage{lwarp-srcltx}
+% \end{macrocode}
+%
+% \iffalse
+%</srctex>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*stabular>
+% \fi
+%
+% \part{lwarp-stabular.sty}
+%
+% \section{stabular}
+%
+% \credits{Sigitas Tolu\v{s}is}
+%
+% \DescribePackage{stabular}
+% \pkg{stabular} is emulated.
+%
+% \changes{v0.40}{2017/09/07}{\pkg{stabular}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{stabular}[2014/03/20]
+% \end{macrocode}
+%
+% \oarg{vpos} \marg{colspec}
+% \marginpar{\hfill {\footnotesize Env} \env{stabular}}
+% \begin{macrocode}
+\newenvironment{stabular}[2][c]
+{
+\begin{tabular}[#1]{#2}
+\renewcommand{\noalign}[1]{}
+}
+{\end{tabular}}
+% \end{macrocode}
+%
+% \marg{width} \oarg{vpos} \marg{colspec}
+% \marginpar{\hfill {\footnotesize Env} \env{stabular}}
+% \begin{macrocode}
+\NewDocumentEnvironment{stabular*}{m o m}
+{
+\begin{tabular}[#2]{#3}
+\renewcommand{\noalign}[1]{}
+}
+{\end{tabular}}
+% \end{macrocode}
+%
+% \iffalse
+%</stabular>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*stackengine>
+% \fi
+%
+% \part{lwarp-stackengine.sty}
+%
+% \section{stackengine}
+%
+% \credits{Steven B. Segletes}
+%
+% \DescribePackage{stackengine}
+% \pkg{stackengine} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.73}{2019/06/11}{\pkg{stackengine}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{stackengine}[2017/02/13]
+% \end{macrocode}
+%
+% The original version is neccessary for the patched \cs{@stack}
+% and \cs{stackanchor},
+% where nesting \env{lateximage}s does not work:
+% \begin{macrocode}
+\LetLtxMacro\LWR@orig@stackengine\stackengine
+% \end{macrocode}
+% \begin{macrocode}
+\renewcommand*{\stackengine}[8]{%
+ \ifstrequal{#4}{O}%
+ {\begin{lateximage}}%
+ {\begin{lateximage}[][][vertical-align:top]}%
+ \LWR@orig@stackengine{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
+ \end{lateximage}%
+}
+% \end{macrocode}
+%
+% \cs{@stack} uses a \env{lateximage} with a vertical alignment:
+% \begin{macrocode}
+\LetLtxMacro\LWR@orig@@stack\@stack
+
+\xpatchcmd{\LWR@orig@@stack}{\stackengine}{\LWR@orig@stackengine}
+ {}
+ {\LWR@patcherror{stackengine}{LWR@orig@@stack}}
+
+\renewcommand*{\@stack}[4]{%
+ \ifstrequal{#3}{O}%
+ {\begin{lateximage}}%
+ {\begin{lateximage}[][][vertical-align:top]}%
+ \LWR@orig@@stack{#1}{#2}{#3}{#4}%
+ \end{lateximage}%
+}
+% \end{macrocode}
+%
+%
+% The lapping macros are disabled for \HTML:
+% \begin{macrocode}
+\newcommand*\LWR@HTML@@stacklap[4]{#3}
+\LWR@formatted{@stacklap}
+% \end{macrocode}
+%
+%
+% \cs{stackanchor} is patched for two instances of \cs{stackengine}.
+% A \env{lateximage} with vertical alignment is used.
+% \begin{macrocode}
+\xpatchcmd{\stackanchor}{\stackengine}{\LWR@orig@stackengine}
+ {}
+ {\LWR@patcherror{stackengine}{stackanchor patch 1}}
+
+\xpatchcmd{\stackanchor}{\stackengine}{\LWR@orig@stackengine}
+ {}
+ {\LWR@patcherror{stackengine}{stackanchor patch 2}}
+
+\xpretocmd{\stackanchor}{\begin{lateximage}[][][vertical-align:middle]}
+ {}
+ {\LWR@patcherror{stackengine}{stackanchor pre}}
+
+\xapptocmd{\stackanchor}{\end{lateximage}}
+ {}
+ {\LWR@patcherror{stackengine}{stackanchor app}}
+% \end{macrocode}
+%
+% \cs{Centerstack} is simply placed inside a \env{lateximage} with a vertical alignment:
+% \begin{macrocode}
+\xpretocmd{\Centerstack}{\begin{lateximage}[][][vertical-align:middle]}
+ {}
+ {\LWR@patcherror{stackengine}{Centerstack pre}}
+
+\xapptocmd{\Centerstack}{\end{lateximage}}
+ {}
+ {\LWR@patcherror{stackengine}{Centerstack app}}
+% \end{macrocode}
+%
+% \cs{savestack} reverts to print mode while saving the box, then places it inside a
+% \env{lateximage} when used:
+% \begin{macrocode}
+\renewcommand*\savestack[2]{%
+ \xdef\sv@name{\stack@macro@name{#1}}%
+ \@ifundefined{\sv@name content}{%
+ \expandafter\newsavebox\expandafter{\csname\sv@name content\endcsname}%
+ }{}%
+ \begingroup% lwarp
+ \LWR@restoreorigformatting% lwarp
+ \RenewDocumentEnvironment{lateximage}{s o o o}{}{}% lwarp: inside group
+ \expandafter\LWR@gsavebox\csname\sv@name content\endcsname{#2}%
+ \expandafter\gdef\expandafter#1\expandafter{%
+ \expandafter\begin\expandafter{lateximage\expandafter}% lwarp
+ \expandafter\usebox\expandafter%
+ {\csname\sv@name content\endcsname}%
+ \expandafter\end\expandafter{lateximage\expandafter}% lwarp
+ }%
+ \endgroup% lwarp
+}
+% \end{macrocode}
+%
+% \iffalse
+%</stackengine>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*stfloats>
+% \fi
+%
+% \part{lwarp-stfloats.sty}
+%
+% \section{stfloats}
+%
+% \DescribePackage{stfloats}
+% \pkg{stfloats} is ignored.
+%
+% \changes{v0.48}{2018/02/07}{\pkg{stfloats}: Added.}
+% \changes{v0.63}{2018/11/24}{\pkg{stfloats}: Adapted to \pkg{ltj*} classes.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{stfloats}[2017/03/27]
+% \end{macrocode}
+%
+% \pkg{stfloats} may have been preloaded by a \pkg{ltj*} class.
+%
+% The following are provided in case they have not yet been defined:
+% \begin{macrocode}
+\providecommand*{\fnbelowfloat}{}
+\providecommand*{\fnunderfloat}{}
+\providecommand*{\setbaselinefloat}{}
+\providecommand*{\setbaselinefixed}{}
+% \end{macrocode}
+%
+% Nullified for \HTML:
+% \begin{macrocode}
+\renewcommand*{\fnbelowfloat}{}
+\renewcommand*{\fnunderfloat}{}
+\renewcommand*{\setbaselinefloat}{}
+\renewcommand*{\setbaselinefixed}{}
+% \end{macrocode}
+%
+% \iffalse
+%</stfloats>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*struktex>
+% \fi
+%
+% \part{lwarp-struktex.sty}
+%
+% \section{struktex}
+%
+% \credits{Jobst Hoffmann}
+%
+% \DescribePackage{struktex}
+% \pkg{struktex} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.67}{2019/02/17}{\pkg{struktex}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{struktex}[2018/06/04]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\BeforeBeginEnvironment{struktogramm}{\begin{lateximage}[(struktogramm)]}
+\AfterEndEnvironment{struktogramm}{\end{lateximage}}
+
+\newenvironment{LWR@HTML@centernss}{\begin{center}}{\end{center}}
+\LWR@formattedenv{centernss}
+
+\newcommand{\LWR@HTML@CenterNssFile}[1]{%
+ \begin{center}
+ \input{#1.nss}
+ \end{center}
+}
+\LWR@formatted{CenterNssFile}
+
+\newcommand{\LWR@HTML@centernssfile}{\LWR@HTML@CenterNssFile}
+\LWR@formatted{centernssfile}
+% \end{macrocode}
+%
+% \iffalse
+%</struktex>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*subcaption>
+% \fi
+%
+% \part{lwarp-subcaption.sty}
+%
+% \section{subcaption}
+%
+% \credits{Axel Sommerfeldt}
+%
+% \DescribePackage{subcaption}
+% \pkg{subcaption} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.66}{2018/12/31}{\pkg{subcaption}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{subcaption}[2018/05/01]
+% \end{macrocode}
+%
+% Tells \pkg{lwarp} to ignore minipage widths inside a subfigure or subtable.
+% In print mode the minipages are used to place the items next to each other.
+% In \HTML\ they are placed side-by-side automatically.
+% \begin{macrocode}
+\ifdef{\subcaption@minipage}{
+ \xpatchcmd{\subcaption@minipage}
+ {\minipage}
+ {\minipagefullwidth\minipage}
+ {}
+ {\LWR@patcherror{subcaption}{subcaption@minipage}}
+}{}
+% \end{macrocode}
+%
+% Likewise for a \cs{subcaptionbox}:
+% \begin{macrocode}
+\ifdef{\subcaptionbox}{
+ \xpretocmd{\subcaptionbox}
+ {\minipagefullwidth}
+ {}
+ {\LWR@patcherror{subcaption}{subcaptionbox}}
+}{}
+% \end{macrocode}
+%
+% \iffalse
+%</subcaption>
+% \fi
+%
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*subfig>
+% \fi
+
+% \part{lwarp-subfig.sty}
+%
+% \section{subfig}
+%
+% \credits{Steven Douglas Cochran}
+%
+% \DescribePackage{subfig}
+% \pkg{subfig} is supported and patched by \pkg{lwarp}.
+%
+% \changes{v0.24}{2017/03/06}{\pkg{subfig}: Added.}
+%
+% \limitssubfig
+%
+% \codehtml
+%
+% Accept all options for \pkg{lwarp-subfig}:
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{subfig}[2005/06/28]
+% \end{macrocode}
+
+% \begin{noindmacro}{\sf@@@subfloat}
+% \marg{1 type} \oarg{2 \LOF\ entry} \oarg{3 caption} \marg{4 contents}
+%
+% The outer minipage allows side-by-side subfloats with \cs{hfill} between.
+% \begin{macrocode}
+\long\def\sf@@@subfloat#1[#2][#3]#4{%
+\begin{minipage}{\linewidth}% lwarp
+% \end{macrocode}
+% \changes{v0.47}{2018/01/30}{\pkg{subfig}: Fix: Support \cs{nameref}.}
+% \begin{macrocode}
+\IfValueTF{#2}{%
+ \LWR@setlatestname{#2}%
+}{%
+ \IfValueTF{#3}{%
+ \LWR@setlatestname{#3}%
+ }{}%
+}%
+\LWR@stoppars% lwarp
+ \@ifundefined{FBsc@max}{}%
+ {\FB@readaux{\let\FBsuboheight\relax}}%
+ \@tempcnta=\@ne
+ \if@minipage
+ \@tempcnta=\z@
+ \else\ifdim \lastskip=\z@ \else
+ \@tempcnta=\tw@
+ \fi\fi
+ \ifmaincaptiontop
+ \sf@top=\sf@nearskip
+ \sf@bottom=\sf@farskip
+ \else
+ \sf@top=\sf@farskip
+ \sf@bottom=\sf@nearskip
+ \fi
+ \leavevmode
+% \end{macrocode}
+% \changes{v0.47}{2018/01/30}{\pkg{subfig}: Fix for \SVG\ math in captions.}
+% \begin{macrocode}
+% \setbox\@tempboxa \hbox{#4}%
+% \@tempdima=\wd\@tempboxa
+% \@ifundefined{FBsc@max}{}%
+% {\global\advance\Xhsize-\wd\@tempboxa
+% \dimen@=\ht\@tempboxa
+% \advance\dimen@\dp\@tempboxa
+% \ifdim\dimen@>\FBso@max
+% \global\FBso@max\dimen@
+% \fi}%
+% \end{macrocode}
+% Do not use boxes, which interfere with |lateximage|s:
+% \changes{v0.45}{2018/01/12}{\pkg{subfig}: Fix: Math in subcaptions.}
+% \begin{macrocode}
+% \vtop%
+ \bgroup
+% \vbox%
+ \bgroup
+ \ifcase\@tempcnta
+ \@minipagefalse
+ \or
+% \vskip\sf@top
+ \or
+ \ifdim \lastskip=\z@ \else
+% \@tempskipb\sf@top\relax\@xaddvskip
+ \fi
+ \fi
+ \sf@ifpositiontop{%
+ \ifx \@empty#3\relax \else
+ \sf@subcaption{#1}{#2}{#3}%
+% \vskip\sf@capskip
+% \vskip\sf@captopadj
+ \fi\egroup
+% \hrule width0pt height0pt depth0pt
+ \LWR@startpars% lwarp
+% \box\@tempboxa
+ #4
+ \LWR@stoppars% lwarp
+ }{%
+ \LWR@startpars% lwarp
+ \@ifundefined{FBsc@max}%
+ {
+% \box\@tempboxa
+ #4
+ }%
+ {\ifx\FBsuboheight\relax
+% \box\@tempboxa
+ #4
+ \else
+% \vbox to \FBsuboheight{\FBafil\box\@tempboxa\FBbfil}%
+ #4
+ \fi}%
+ \LWR@stoppars% lwarp
+ \egroup
+ \ifx \@empty#3\relax \else
+% \vskip\sf@capskip
+% \hrule width0pt height0pt depth0pt
+ \sf@subcaption{#1}{#2}{#3}%
+ \fi
+ }%
+% \vskip\sf@bottom
+ \egroup
+ \@ifundefined{FBsc@max}{}%
+ {\addtocounter{FRobj}{-1}%
+ \ifnum\c@FRobj=0\else
+ \subfloatrowsep
+ \fi}%
+ \ifmaincaptiontop\else
+ \global\advance\@nameuse{c@\@captype}\m@ne
+ \fi
+\end{minipage}% lwarp
+\LWR@startpars% lwarp
+ \endgroup\ignorespaces%
+}%
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\sf@subcaption}
+% \marg{1 type} \marg{2 \LOF\ entry} \marg{3 caption}
+% \begin{macrocode}
+\long\def\sf@subcaption#1#2#3{%
+\LWR@stoppars% lwarp
+ \ifx \relax#2\relax \else
+ \bgroup
+ \let\label=\@gobble
+ \let\protect=\string
+ \def\@subcaplabel{%
+ \caption@lstfmt{\@nameuse{p@#1}}{\@nameuse{the#1}}}%
+ \sf@updatecaptionlist{#1}{#2}{\the\value{\@captype}}{\the\value{#1}}%
+ \egroup
+ \fi
+ \bgroup
+ \ifx \relax#3\relax
+ \let\captionlabelsep=\relax
+ \fi
+% \setbox0\vbox{%
+% \hb@xt@\the\@tempdima{%
+%
+% % \hss
+% % \parbox[t]{\the\@tempdima}{%
+% \caption@make
+% {\@nameuse{sub\@captype name}}%
+% {\@nameuse{thesub\@captype}}%
+% {#3}
+% % }%
+% % \hss
+% }
+% }%
+ \@ifundefined{FBsc@max}%
+% {\box0}%
+ {
+% \parbox[t]{\the\@tempdima}{%
+\LWR@traceinfo{sfsubcap B1}% lwarp
+ \LWR@figcaption% lwarp
+ \caption@make
+ {\@nameuse{sub\@captype name}}%
+ {\@nameuse{thesub\@captype}}%
+ {\LWR@isolate{#3}}%
+% \end{macrocode}
+% \changes{v0.45}{2017/12/18}{\pkg{subfig}: Fix for subcaption end tag.}
+% \begin{macrocode}
+ \endLWR@figcaption% lwarp
+\LWR@traceinfo{sfsubcap B2}% lwarp
+% }%
+ }%
+ {\dimen@\ht0%
+ \advance\dimen@\dp0%
+ \ifdim\dimen@>\FBsc@max
+ \global\FBsc@max\dimen@
+ \fi
+ \FB@readaux{\let\FBsubcheight\relax}%
+ \ifx\FBsubcheight\relax
+ \def\next{
+% \parbox[t]{\the\@tempdima}
+ }%
+ \else
+ \def\next{
+% \parbox[t][\FBsubcheight][t]{\the\@tempdima}
+ }%
+ \fi
+% \vbox{%
+% \hb@xt@\the\@tempdima{%
+
+% \hss
+% \next{%
+\LWR@traceinfo{sfsubcap C1}% lwarp
+ \caption@make
+ {\@nameuse{sub\@captype name}}%
+ {\@nameuse{thesub\@captype}}%
+ {#3}
+\LWR@traceinfo{sfsubcap C1}% lwarp
+% }%
+% \hss
+
+% }
+% }
+ }%
+ \egroup
+\LWR@startpars% lwarp
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+
+% \begin{noindmacro}{\subfloat@label}
+% Patches for \cs{sf@sub@label}:
+% \begin{macrocode}
+\def\subfloat@label{%
+\LWR@ensuredoingapar% lwarp
+ \@ifnextchar(% %) match left parenthesis
+ {\sf@sub@label}
+ {\sf@sub@label(Sub\@captype\space
+ \@ifundefined{thechapter}{}{\@nameuse{thechapter}\space}%
+ \@nameuse{p@sub\@captype}%
+ \@nameuse{thesub\@captype}.)}}
+% \end{macrocode}
+% \end{noindmacro}
+
+% Patches for \cs{subref}.
+%
+% \begin{noindmacro}{\sf@subref} \marg{label}
+%
+% The unstarred version uses a \cs{ref} link whose printed text
+% comes from the |sub@<label>|:
+% \begin{macrocode}
+\renewcommand{\sf@subref}[1]{%
+\LWR@subnewref{#1}{sub@#1}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindmacro}{\sf@@subref} \marg{label}
+%
+% The starred version uses the printed |sub@<label>| which is stored as
+% if it were a page number:
+% \begin{macrocode}
+\renewcommand{\sf@@subref}[1]{\LWR@orig@pageref{sub@#1}}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% Defining new subfloats. The |l@sub<type>| for each is redefined.
+%
+% \begin{noindmacro}{\@newsubfloat} \oarg{keys/values} \marg{float name}
+% \begin{macrocode}
+\LetLtxMacro\LWR@orig@newsubfloat\@newsubfloat
+
+\def\@newsubfloat[#1]#2{%
+\LWR@orig@newsubfloat[#1]{#2}%
+\renewcommand{\l@sub#2}[2]{\hypertocfloat{2}{sub#2}{\ext@sub#2}{##1}{##2}}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% Pre-defined for figures and tables:
+%
+% \begin{noindmacro}{\l@subfigure} \marg{text} \marg{pagenum}
+% \begin{macrocode}
+\renewcommand{\l@subfigure}[2]{\hypertocfloat{2}{subfigure}{lof}{#1}{#2}}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\l@subtable} \marg{text} \marg{pagenum}
+% \begin{macrocode}
+\renewcommand{\l@subtable}[2]{\hypertocfloat{2}{subtable}{lot}{#1}{#2}}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% ^^A \def\subfigure{\subfloat}
+% ^^A \def\subtable{\subfloat}
+%
+% \iffalse
+%</subfig>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*subfigure>
+% \fi
+%
+% \part{lwarp-subfigure.sty}
+%
+% \section{subfigure}
+%
+% \DescribePackage{subfigure}
+% \pkg{subfigure} is emulated by \pkg{subfig}.
+%
+% \changes{v0.45}{2017/12/02}{\pkg{subfigure}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{subfigure}[2002/03/15]
+\RequirePackage{subfig}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LetLtxMacro\subfigure\subfloat
+\LetLtxMacro\subtable\subfloat
+\LetLtxMacro\Subref\subref
+\@ifundefined{figuretopcaptrue}{\newif\iffiguretopcap}{}
+\newif\ifsubfiguretopcap
+\newif\ifsubcaphang
+\newif\ifsubcapcenter
+\newif\ifsubcapcenterlast
+\newif\ifsubcapnooneline
+\newif\ifsubcapraggedright
+\newskip\subfigtopskip
+\newskip\subfigcapskip
+\newdimen\subfigcaptopadj
+\newskip\subfigbottomskip
+\newdimen\subfigcapmargin
+\newskip\subfiglabelskip
+\newcommand*{\subcapsize}{}
+\newcommand*{\subcaplabelfont}{}
+\newcommand*{\subcapfont}{}
+% \end{macrocode}
+%
+% \iffalse
+%</subfigure>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*supertabular>
+% \fi
+
+% \part{lwarp-supertabular.sty}
+
+% \section{supertabular}
+% \label{sec:supertabular}
+%
+% \credits{Johannes Braams, Theo Jurriens}
+%
+%
+% \DescribePackage{supertabular}
+% \pkg{supertabular} is emulated.
+%
+% \changes{v0.39}{2017/08/30}{\pkg{supertabular}: Added.}
+%
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{supertabular}[2004/02/20]
+% \end{macrocode}
+%
+% \limitssupertabular
+%
+%
+% \begin{macrocode}
+\newcommand{\LWRST@firsthead}{}
+
+\newcommand{\tablefirsthead}[1]{%
+ \long\gdef\LWRST@firsthead{#1}%
+}
+
+\newcommand{\tablehead}[1]{}
+\newcommand{\tabletail}[1]{}
+
+\newcommand{\LWRST@lasttail}{}
+
+\newcommand{\tablelasttail}[1]{%
+ \long\gdef\LWRST@lasttail{#1}%
+}
+% \end{macrocode}
+% \changes{v0.61}{2018/10/05}{\pkg{supertabular}: Fix for caption w/o opt arg.}
+% \begin{macrocode}
+\newcommand{\tablecaption}[2][]{%
+ \long\gdef\LWRST@caption{%
+ \ifblank{#1}%
+ {\caption{#2}}%
+ {\caption[#1]{#2}}%
+ }%
+}
+
+\let\topcaption\tablecaption
+\let\bottomcaption\tablecaption
+% \end{macrocode}
+% \changes{v0.44}{2017/11/19}{\pkg{supertabular}: Fix for caption.}
+% \begin{macrocode}
+\newcommand*{\LWRST@caption}{}
+
+\newcommand*{\shrinkheight}[1]{}
+
+\NewDocumentEnvironment{supertabular}{s o m}
+{%
+\LWR@traceinfo{supertabular}%
+\begin{table}%
+\LWRST@caption%
+\begin{tabular}{#3}%
+\TabularMacro\ifdefvoid{\LWRST@firsthead}%
+{\LWR@getmynexttoken}%
+{\expandafter\LWR@getmynexttoken\LWRST@firsthead}%
+}%
+{%
+\ifdefvoid{\LWRST@lasttail}%
+{}%
+{%
+\TabularMacro\ResumeTabular%
+\LWRST@lasttail%
+}%
+\end{tabular}%
+\end{table}%
+% \end{macrocode}
+% \changes{v0.69}{2019/03/15}{\pkg{supertabular}: Fix: Clear caption after use.}
+% \begin{macrocode}
+\gdef\LWRST@caption{}%
+% \end{macrocode}
+% \begin{macrocode}
+\LWR@traceinfo{supertabular done}%
+}
+
+\NewDocumentEnvironment{mpsupertabular}{s o m}
+{\minipage{\linewidth}\supertabular{#3}}
+{\endsupertabular\endminipage}
+% \end{macrocode}
+
+
+% \iffalse
+%</supertabular>
+% \fi
+%
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*syntonly>
+% \fi
+%
+% \part{lwarp-syntonly.sty}
+%
+% \section{syntonly}
+%
+% \credits{Frank Mittelbach, Rainer Sch\"{o}pf}
+%
+% \DescribePackage{syntonly} \pkg{syntonly} is ignored.
+%
+% \changes{v0.34}{2017/07/26}{\pkg{syntonly}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-syntonly}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{syntonly}[2017/06/30]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif\ifsyntax@
+\syntax@false
+
+\newcommand*{\syntaxonly}{}
+
+\@onlypreamble\syntaxonly
+% \end{macrocode}
+%
+% \iffalse
+%</syntonly>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*tabfigures>
+% \fi
+%
+% \part{lwarp-tabfigures.sty}
+%
+% \section{tabfigures}
+%
+% \DescribePackage{tabfigures}
+% \pkg{tabfigures} is ignored.
+%
+% \changes{v0.72}{2019/05/27}{\pkg{tabfigures}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{tabfigures}[2012/01/24]
+% \end{macrocode}
+%
+% \begin{macrocode}
+% \end{macrocode}
+%
+% \iffalse
+%</tabfigures>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*tablefootnote>
+% \fi
+%
+% \part{lwarp-tablefootnote.sty}
+%
+% \section{tablefootnote}
+%
+% \DescribePackage{tablefootnote}
+% \pkg{tablefootnote} is ignored.
+%
+% \changes{v0.68}{2018/03/01}{\pkg{tablefootnote}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{tablefootnote}[2014/01/26]
+% \end{macrocode}
+%
+% This works because in \HTML\ tables are no longer floats.
+% \begin{macrocode}
+\LetLtxMacro\tablefootnote\footnote
+% \end{macrocode}
+%
+% \iffalse
+%</tablefootnote>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*tabls>
+% \fi
+%
+% \part{lwarp-tabls.sty}
+%
+% \section{tabls}
+%
+% \credits{Donald Arseneau}
+%
+% \DescribePackage{tabls}
+% \pkg{tabls} is emulated.
+% \cs{LWR@hline} is used to handle the optional argument when
+% \pkg{tabls} is loaded.
+%
+% \changes{v0.40}{2017/09/06}{\pkg{tabls}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{tabls}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newdimen\tablinesep
+\newdimen\arraylinesep
+\newdimen\extrarulesep
+% \end{macrocode}
+%
+% \iffalse
+%</tabls>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*tabularx>
+% \fi
+
+% \part{lwarp-tabularx.sty}
+
+% \section{tabularx}
+%
+% \credits{David Carlisle}
+%
+% \DescribePackage{tabularx}
+% \pkg{tabularx} is emulated by \pkg{lwarp}.
+%
+% \changes{v0.22}{2017/03/01}{\pkg{tabularx}: Added.}
+% \changes{v0.28}{2017/04/11}{\pkg{tabularx}: Fix for optional pos.}
+% \changes{v0.69}{2019/03/09}{\pkg{tabularx}: Require \pkg{array}.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-tabularx}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{tabularx}[2016/02/03]
+\RequirePackage{array}
+% \end{macrocode}
+
+% \begin{macrocode}
+\DeclareDocumentEnvironment{tabularx}{m o m}
+{\tabular{#3}}
+{\endtabular}
+
+\DeclareDocumentEnvironment{tabularx*}{m o m}
+{\tabular{#3}}
+{\endtabular}
+% \end{macrocode}
+
+% \iffalse
+%</tabularx>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*tabulary>
+% \fi
+
+% \part{lwarp-tabulary.sty}
+
+% \section{tabulary}
+%
+% \credits{David Carlisle}
+%
+% \DescribePackage{tabulary}
+% \pkg{tabulary} is emulated by \pkg{lwarp}.
+%
+% \changes{v0.28}{2017/04/11}{\pkg{tabulary}: Added.}
+% \changes{v0.69}{2019/03/09}{\pkg{tabulary}: Require \pkg{array}.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-tabulary}.
+%
+% Column types |L|, |C|, |R|, and |J| are emulated by \pkg{lwarp}
+% core code.
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{tabulary}[2014/06/11]
+\RequirePackage{array}
+% \end{macrocode}
+
+% \begin{macrocode}
+\NewDocumentEnvironment{tabulary}{m o m}
+{\tabular{#3}}
+{\endtabular}
+
+\NewDocumentEnvironment{tabulary*}{m o m}
+{\tabular{#3}}
+{\endtabular}
+
+\newdimen\tymin
+\newdimen\tymax
+\def\tyformat{}
+% \end{macrocode}
+
+% \iffalse
+%</tabulary>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*tascmac>
+% \fi
+%
+% \part{lwarp-tascmac.sty}
+%
+% \section{tascmac}
+%
+% \DescribePackage{tascmac}
+% \pkg{tascmac} is emulated.
+%
+% \changes{v0.65}{2018/12/21}{\pkg{tascmac}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{tascmac}[2018/03/09]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newenvironment*{boxnote}
+ {
+ \BlockClass[
+ padding: .5ex ;
+ border: 1px solid black ;
+ border-top: 1px dashed black ;
+ ]{boxnote}
+ }
+ {\endBlockClass}
+
+\newenvironment*{screen}[1][]
+ {
+ \BlockClass[
+ padding: .5ex ;
+ border: 1px solid gray ;
+ border-radius: 8pt
+ ]{boxnote}
+ }
+ {\endBlockClass}
+
+\newenvironment*{itembox}[2][]
+ {
+ \BlockClass[
+ padding: .5ex ;
+ border: 1px solid gray ;
+ border-radius: 8pt
+ ]{boxnote}
+ \InlineClass{itemboxtitle}{#2}\par
+ }
+ {\endBlockClass}
+
+\newenvironment*{shadebox}
+ {
+ \BlockClass[
+ padding: .5ex ;
+ border: 1px solid black ;
+ box-shadow: 3px 3px 3px \#808080 ;
+ ]{boxnote}
+ }
+ {\endBlockClass}
+
+\newcommand*{\mask}[2]{%
+ \InlineClass[background: lightgray]{mask}{#1}%
+}
+
+\newcommand*{\maskbox}[5]{%
+ \InlineClass[background: lightgray]{mask}{#5}%
+}
+
+\newcommand*{\Maskbox}[6]{%
+ \InlineClass[
+ background: lightgray ;
+ border: #5 solid black
+ ]{mask}{#6}%
+}
+
+\newcommand*{\keytop}[2][]{%
+ \InlineClass[%
+ padding: .2ex ;
+ border: 1px solid black ;
+ border-radius: .7ex ;
+ ]{keytop}{#2}%
+}
+
+\def\yen{\HTMLunicode{00A5}}
+
+\def\return{\HTMLunicode{23CE}}
+
+\def\Return{\HTMLunicode{23CE}}
+
+\def\ascii{ASCII Corporation}
+
+\def\Ascii{ASCII Corporation}
+
+\def\ASCII{ASCII Corporation}
+% \end{macrocode}
+%
+% \iffalse
+%</tascmac>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*textarea>
+% \fi
+%
+% \part{lwarp-textarea.sty}
+%
+% \section{textarea}
+%
+% \credits{Alexander I. Rozhenko}
+%
+% \DescribePackage{textarea}
+% \pkg{textarea} is ignored.
+%
+% \changes{v0.39}{2017/08/27}{\pkg{textarea}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{textarea}[2005/12/26]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand\StartFromTextArea{}
+\newcommand\StartFromHeaderArea{}
+\newcommand*\RestoreTextArea{}
+\newcommand*\ExpandTextArea[1][*]{}
+\let\NCC@restoretextarea\@empty
+% \end{macrocode}
+%
+% \iffalse
+%</textarea>
+% \fi
+%
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*textcomp>
+% \fi
+%
+% \part{lwarp-textcomp.sty}
+
+% \section{textcomp}
+%
+% \credits{Frank Mittelbach, Robin Fairbairns, Werner Lemberg}
+
+%
+% \DescribePackage{textcomp}
+% \pkg{textcomp} is patched for use by \pkg{lwarp}.
+%
+% \subsection{Limitations}
+%
+% \limitstextcomp
+%
+%
+% \subsection{Package loading}
+%
+% \changes{v0.37}{2017/08/18}{\pkg{textcomp}: Improved support.}
+% \changes{v0.38}{2017/08/21}{\pkg{textcomp}: Removed from \pkg{lwarp} core.}
+% \changes{v0.40}{2017/09/07}{\pkg{textcomp}: Additional symbols,
+% improved XeLaTeX and LuaLaTeX support.}
+% \changes{v0.42}{2017/10/13}{\pkg{textcomp}: Improved \cs{interrobangdown}.}
+% \changes{v0.54}{2018/04/08}{\pkg{textcomp}: Fix for \cs{textperthousand}.}
+% \changes{v0.58}{2018/06/07}{\pkg{textcomp}: Improved print/\HTML\ output selection.}
+% \changes{v0.70}{2019/04/03}{\pkg{textcomp}: Fix for \cs{textinterrobang}.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{textcomp}[2017/04/05]
+% \end{macrocode}
+%
+%
+% \subsection{\HTML\ symbols}
+%
+% For \HTML, use \HTML\ entities or direct Unicode, depending on the engine.
+%
+% \cs{AtBeginDocument} improves support for \LuaLaTeX\ and \XeLaTeX.
+%
+% \subsubsection{pdf\protect\LaTeX\ symbols}
+%
+% \begin{macrocode}
+\AtBeginDocument{
+\ifPDFTeX% pdflatex or dvi latex
+\newcommand*{\LWR@HTML@textdegree}{\HTMLentity{deg}}
+\newcommand*{\LWR@HTML@textcelsius}{\HTMLunicode{2103}}
+\newcommand*{\LWR@HTML@textohm}{\HTMLunicode{2126}}
+\newcommand*{\LWR@HTML@textmu}{\HTMLunicode{00B5}}
+\newcommand*{\LWR@HTML@textlquill}{\HTMLunicode{2045}}
+\newcommand*{\LWR@HTML@textrquill}{\HTMLunicode{2046}}
+\newcommand*{\LWR@HTML@textcircledP}{\HTMLunicode{2117}}
+\newcommand*{\LWR@HTML@texttwelveudash}{\HTMLunicode{2014}}% emdash
+\newcommand*{\LWR@HTML@textthreequartersemdash}{\HTMLunicode{2014}}% emdash
+\newcommand*{\LWR@HTML@textmho}{\HTMLunicode{2127}}
+\newcommand*{\LWR@HTML@textnaira}{\HTMLunicode{20A6}}
+\newcommand*{\LWR@HTML@textpeso}{\HTMLunicode{20B1}}
+\newcommand*{\LWR@HTML@textrecipe}{\HTMLunicode{211E}}
+\newcommand*{\LWR@HTML@textinterrobang}{\HTMLunicode{203D}}
+\newcommand*{\LWR@HTML@textinterrobangdown}{\HTMLunicode{2E18}}
+\newcommand*{\LWR@HTML@textperthousand}{\HTMLunicode{2030}}
+\newcommand*{\LWR@HTML@textpertenthousand}{\HTMLunicode{2031}}
+\newcommand*{\LWR@HTML@textbaht}{\HTMLunicode{0E3F}}
+\newcommand*{\LWR@HTML@textdiscount}{\%}
+\newcommand*{\LWR@HTML@textservicemark}{\HTMLunicode{2120}}
+\else
+% \end{macrocode}
+%
+% \subsubsection{\XeLaTeX\ and \LuaLaTeX\ symbols}
+%
+% NOTE: Some of the following do not print well in the listing.
+% Consult the .dtx or .sty file for the actual characters.
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@textdegree}{°}
+\newcommand*{\LWR@HTML@textcelsius}{℃}
+\newcommand*{\LWR@HTML@textohm}{Ω}
+\newcommand*{\LWR@HTML@textmu}{µ}
+\newcommand*{\LWR@HTML@textlquill}{⁅}
+\newcommand*{\LWR@HTML@textrquill}{⁆}
+\newcommand*{\LWR@HTML@textcircledP}{℗}
+\newcommand*{\LWR@HTML@texttwelveudash}{—}% emdash
+\newcommand*{\LWR@HTML@textthreequartersemdash}{—}% emdash
+\newcommand*{\LWR@HTML@textmho}{℧}
+\newcommand*{\LWR@HTML@textnaira}{₦}
+\newcommand*{\LWR@HTML@textpeso}{₱}
+\newcommand*{\LWR@HTML@textrecipe}{℞}
+\newcommand*{\LWR@HTML@textinterrobang}{‽}
+\newcommand*{\LWR@HTML@textinterrobangdown}{⸘}
+\newcommand*{\LWR@HTML@textperthousand}{‰}
+\newcommand*{\LWR@HTML@textpertenthousand}{‱}
+\newcommand*{\LWR@HTML@textbaht}{฿}
+\newcommand*{\LWR@HTML@textdiscount}{\%}
+\newcommand*{\LWR@HTML@textservicemark}{℠}
+\fi
+
+\LWR@formatted{textdegree}
+\LWR@formatted{textcelsius}
+\LWR@formatted{textohm}
+\LWR@formatted{textmu}
+\LWR@formatted{textlquill}
+\LWR@formatted{textrquill}
+\LWR@formatted{textcircledP}
+\LWR@formatted{texttwelveudash}
+\LWR@formatted{textthreequartersemdash}
+\LWR@formatted{textmho}
+\LWR@formatted{textnaira}
+\LWR@formatted{textpeso}
+\LWR@formatted{textrecipe}
+\LWR@formatted{textinterrobang}
+\LWR@formatted{textinterrobangdown}
+\LWR@formatted{textperthousand}
+\LWR@formatted{textpertenthousand}
+\LWR@formatted{textbaht}
+\LWR@formatted{textdiscount}
+\LWR@formatted{textservicemark}
+% \end{macrocode}
+%
+%
+% \subsection{\HTML\ diacritics}
+%
+% For \HTML, Unicode diacritical marks are used:
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@capitalcedilla}[1]{#1\HTMLunicode{0327}}
+\newcommand*{\LWR@HTML@capitalogonek}[1]{#1\HTMLunicode{0328}}
+\newcommand*{\LWR@HTML@capitalgrave}[1]{#1\HTMLunicode{0300}}
+\newcommand*{\LWR@HTML@capitalacute}[1]{#1\HTMLunicode{0301}}
+\newcommand*{\LWR@HTML@capitalcircumflex}[1]{#1\HTMLunicode{0302}}
+\newcommand*{\LWR@HTML@capitaltilde}[1]{#1\HTMLunicode{0303}}
+\newcommand*{\LWR@HTML@capitaldieresis}[1]{#1\HTMLunicode{0308}}
+\newcommand*{\LWR@HTML@capitalhungarumlaut}[1]{#1\HTMLunicode{30B}}
+\newcommand*{\LWR@HTML@capitalring}[1]{#1\HTMLunicode{30A}}
+\newcommand*{\LWR@HTML@capitalcaron}[1]{#1\HTMLunicode{30C}}
+\newcommand*{\LWR@HTML@capitalbreve}[1]{#1\HTMLunicode{306}}
+\newcommand*{\LWR@HTML@capitalmacron}[1]{#1\HTMLunicode{304}}
+\newcommand*{\LWR@HTML@capitaldotaccent}[1]{#1\HTMLunicode{307}}
+% \end{macrocode}
+% \cs{textcircled} becomes a span with a rounded border.
+% \cs{providecommand} is used to avoid conflict with \pkg{xunicode}.
+% \changes{v0.62}{2018/11/17}{\pkg{textcomp}: Fix conflict with \pkg{xunicode}.}
+% \begin{macrocode}
+\providecommand*{\LWR@HTML@textcircled}[1]{%
+\InlineClass[border: 1px solid \LWR@currenttextcolor]{textcircled}{#1}%
+}
+
+\LWR@formatted{capitalcedilla}
+\LWR@formatted{capitalogonek}
+\LWR@formatted{capitalgrave}
+\LWR@formatted{capitalacute}
+\LWR@formatted{capitalcircumflex}
+\LWR@formatted{capitaltilde}
+\LWR@formatted{capitaldieresis}
+\LWR@formatted{capitalhungarumlaut}
+\LWR@formatted{capitalring}
+\LWR@formatted{capitalcaron}
+\LWR@formatted{capitalbreve}
+\LWR@formatted{capitalmacron}
+\LWR@formatted{capitaldotaccent}
+\LWR@formatted{textcircled}
+% \end{macrocode}
+% Nullify \pkg{textcomp} macros when generating filenames:
+% \changes{v0.67}{2019/02/13}{\pkg{textcomp}: Nullify in filenames.}
+% \begin{macrocode}
+\FilenameNullify{%
+ \renewcommand*{\textdegree}{}%
+ \renewcommand*{\textcelsius}{}%
+ \renewcommand*{\textohm}{}%
+ \renewcommand*{\textmu}{}%
+ \renewcommand*{\textlquill}{}%
+ \renewcommand*{\textrquill}{}%
+ \renewcommand*{\textcircledP}{}%
+ \renewcommand*{\texttwelveudash}{}%
+ \renewcommand*{\textthreequartersemdash}{}%
+ \renewcommand*{\textmho}{}%
+ \renewcommand*{\textnaira}{}%
+ \renewcommand*{\textpeso}{}%
+ \renewcommand*{\textrecipe}{}%
+ \renewcommand*{\textinterrobang}{}%
+ \renewcommand*{\textinterrobangdown}{}%
+ \renewcommand*{\textperthousand}{}%
+ \renewcommand*{\textpertenthousand}{}%
+ \renewcommand*{\textbaht}{}%
+ \renewcommand*{\textdiscount}{}%
+ \renewcommand*{\textservicemark}{}%
+ \renewcommand*{\textcircled}[1]{#1}%
+ \renewcommand*{\capitalcedilla}[1]{#1}%
+ \renewcommand*{\capitalogonek}[1]{#1}%
+ \renewcommand*{\capitalgrave}[1]{#1}%
+ \renewcommand*{\capitalacute}[1]{#1}%
+ \renewcommand*{\capitalcircumflex}[1]{#1}%
+ \renewcommand*{\capitaltilde}[1]{#1}%
+ \renewcommand*{\capitaldieresis}[1]{#1}%
+ \renewcommand*{\capitalhungarumlaut}[1]{#1}%
+ \renewcommand*{\capitalring}[1]{#1}%
+ \renewcommand*{\capitalcaron}[1]{#1}%
+ \renewcommand*{\capitalbreve}[1]{#1}%
+ \renewcommand*{\capitalmacron}[1]{#1}%
+ \renewcommand*{\capitaldotaccent}[1]{#1}%
+}% FilenameNullify
+
+}% AtBeginDocument
+% \end{macrocode}
+%
+%
+%
+% \iffalse
+%</textcomp>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*textfit>
+% \fi
+%
+% \part{lwarp-textfit.sty}
+%
+% \section{textfit}
+%
+% \DescribePackage{textfit}
+% \pkg{textfit} is emulated.
+%
+% Text is placed into a \element{span} of class \attribute{textfit}.
+% Sizes are approximated, and also limited by browser min/max font-size settings.
+%
+% \changes{v0.45}{2017/12/24}{\pkg{textfit}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{textfit}[1994/04/15]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newsavebox{\LWR@textfitbox}
+
+\newcommand*{\LWR@textfitscale}[2]{%
+\setlength{\LWR@templengthone}{#1}%
+\setlength{\LWR@templengthone}{%
+ 1em*\ratio{\LWR@templengthone}{\LWR@templengthtwo}%
+}%
+\InlineClass[font-size:\LWR@printlength{\LWR@templengthone}]{textfit}{#2}%
+}
+
+\newcommand*{\scaletowidth}[2]{%
+\sbox{\LWR@textfitbox}{#2}%
+\settowidth{\LWR@templengthtwo}{\usebox{\LWR@textfitbox}}%
+\LWR@textfitscale{#1}{#2}%
+}
+
+\newcommand*{\scaletoheight}[2]{%
+\sbox{\LWR@textfitbox}{#2}%
+\settoheight{\LWR@templengthtwo}{\usebox{\LWR@textfitbox}}%
+\LWR@textfitscale{#1}{#2}%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</textfit>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*textpos>
+% \fi
+
+% \part{lwarp-textpos.sty}
+
+% \section{textpos}
+% \label{sec:textpos}
+%
+% \credits{Norman Gray}
+%
+% \changes{v0.20}{2017/01/11}{\pkg{textpos}: Added.}
+% \changes{v0.70}{2019/03/28}{\pkg{textpos}: Added optional arg to \env{textblock}.}
+% \changes{v0.71}{2019/04/25}{\pkg{textpos}: Updated for v1.9.1.}
+%
+% \DescribePackage{textpos}
+% \pkg{textpos} is emulated.
+
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{textpos}[2019/04/15]
+% \end{macrocode}
+
+% \begin{macrocode}
+\NewDocumentEnvironment{textblock}{m o r()}{}{}
+\NewDocumentEnvironment{textblock*}{m o r()}{}{}
+\newcommand*{\TPGrid}[3][]{}
+\NewDocumentCommand{\TPMargin}{s o}{}
+\newcommand*{\textblockcolour}[1]{}
+\newcommand*{\textblockrulecolour}[1]{}
+\newcommand*{\textblockcolor}[1]{}
+\newcommand*{\textblockrulecolor}[1]{}
+\newcommand*{\tekstblokkulur}[1]{}
+\newcommand*{\tekstblokrulekulur}[1]{}
+\newlength{\TPHorizModule}
+\newlength{\TPVertModule}
+\newlength{\TPboxrulesize}
+\newcommand{\textblocklabel}[1]{}
+\newcommand*{\showtextsize}{}
+\newcommand{\textblockorigin}[2]{}
+\newcommand*{\TPoptions}[1]{}
+\newcommand*{\TPReferencePosition}[1]{}
+% \end{macrocode}
+
+% \iffalse
+%</textpos>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*theorem>
+% \fi
+
+% \part{lwarp-theorem.sty}
+%
+% \section{theorem}
+%
+% \credits{Frank Mittelbach}
+%
+% \DescribePackage{theorem}
+% \pkg{theorem} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.25}{2017/03/16}{\pkg{theorem}: Added.}
+%
+% \begin{table}[ht]
+% \hrule
+% \smallskip
+% \caption{Theorem package \Dash \CSS\ styling of theorems and proofs}
+% \begin{description}
+% \item [Theorem:] \element{div} of class |theorembody<theoremstyle>|
+% \item [Theorem Header:] \element{span} of class |theoremheader|
+% \end{description}
+% where |<theoremstyle>| is |plain|, |break|, etc.
+% \smallskip
+% \hrule
+% \end{table}
+%
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{theorem}[2014/10/28]
+% \end{macrocode}
+
+
+% \subsection{Remembering the theorem style}
+
+% Storage for the style being used for new theorems:
+% \begin{macrocode}
+\newcommand{\LWR@newtheoremstyle}{plain}
+% \end{macrocode}
+
+% Patched to remember the style being used for new theorems:
+% \begin{macrocode}
+\gdef\theoremstyle#1{%
+ \@ifundefined{th@#1}{\@warning
+ {Unknown theoremstyle `#1'. Using `plain'}%
+ \theorem@style{plain}%
+ \renewcommand{\LWR@newtheoremstyle}{plain}% lwarp
+ }%
+ {%
+ \theorem@style{#1}%
+ \renewcommand{\LWR@newtheoremstyle}{#1}% lwarp
+ }%
+ \begingroup
+ \csname th@\the\theorem@style \endcsname
+ \endgroup}
+% \end{macrocode}
+
+% Patched to remember the style for this theorem type,
+% and set it later when the environment is started.
+% \begin{macrocode}
+\gdef\@xnthm#1#2[#3]{%
+ \expandafter\@ifdefinable\csname #1\endcsname
+ {%
+ \csedef{LWR@thmstyle#1}{\LWR@newtheoremstyle}% lwarp
+ \@definecounter{#1}\@newctr{#1}[#3]%
+ \expandafter\xdef\csname the#1\endcsname
+ {\expandafter \noexpand \csname the#3\endcsname
+ \@thmcountersep \@thmcounter{#1}}%
+ \def\@tempa{\global\@namedef{#1}}%
+ \expandafter \@tempa \expandafter{%
+ \csname th@\the \theorem@style
+ \expandafter \endcsname \the \theorem@bodyfont
+ \@thm{#1}{#2}}%
+ \global \expandafter \let \csname end#1\endcsname \@endtheorem
+ \AtBeginEnvironment{#1}{\edef\LWR@thisthmstyle{\@nameuse{LWR@thmstyle#1}}}% lwarp
+ }}
+
+\gdef\@ynthm#1#2{%
+ \expandafter\@ifdefinable\csname #1\endcsname
+ {
+ \csedef{LWR@thmstyle#1}{\LWR@newtheoremstyle}% lwarp
+ \@definecounter{#1}%
+ \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
+ \def\@tempa{\global\@namedef{#1}}\expandafter \@tempa
+ \expandafter{\csname th@\the \theorem@style \expandafter
+ \endcsname \the\theorem@bodyfont \@thm{#1}{#2}}%
+ \global \expandafter \let \csname end#1\endcsname \@endtheorem
+ \AtBeginEnvironment{#1}{\edef\LWR@thisthmstyle{\@nameuse{LWR@thmstyle#1}}}% lwarp
+ }}
+
+\gdef\@othm#1[#2]#3{%
+ \expandafter\ifx\csname c@#2\endcsname\relax
+ \@nocounterr{#2}%
+ \else
+ \expandafter\@ifdefinable\csname #1\endcsname
+ {
+ \csedef{LWR@thmstyle#1}{\LWR@newtheoremstyle}% lwarp
+ \expandafter \xdef \csname the#1\endcsname
+ {\expandafter \noexpand \csname the#2\endcsname}%
+ \def\@tempa{\global\@namedef{#1}}\expandafter \@tempa
+ \expandafter{\csname th@\the \theorem@style \expandafter
+ \endcsname \the\theorem@bodyfont \@thm{#2}{#3}}%
+ \global \expandafter \let \csname end#1\endcsname \@endtheorem
+ \AtBeginEnvironment{#1}{\edef\LWR@thisthmstyle{\@nameuse{LWR@thmstyle#1}}}% lwarp
+ }%
+ \fi}
+% \end{macrocode}
+%
+%
+% \subsection{\CSS\ patches}
+%
+% The following are patched for \CSS.
+%
+% These were in individual files |thp.sty| for plain,
+% |thmb.sty| for margin break, etc.
+% They are gathered together here.
+%
+% Each theorem is encased in a \env{BlockClass} environment
+% of class |theorembody<style>|.
+%
+% Each header is encased in an \cs{InlineClass} of class |theoremheader|.
+% \changes{v0.46}{2018/01/22}{\pkg{theorem}: Adapt to \env{trivlist} changes.}
+% \begin{macrocode}
+\gdef\th@plain{%
+ \def\@begintheorem##1##2{%
+ \item[
+ \InlineClass{theoremheader}{##1\ ##2}
+ ]
+ }%
+\def\@opargbegintheorem##1##2##3{%
+ \item[
+ \InlineClass{theoremheader}{##1\ ##2\ (##3)}
+ ]
+ }
+}
+
+\gdef\th@break{%
+ \def\@begintheorem##1##2{%
+ \item[
+ \InlineClass{theoremheader}{##1\ ##2}\newline%
+ ]
+ }%
+\def\@opargbegintheorem##1##2##3{%
+ \item[
+ \InlineClass{theoremheader}{##1\ ##2\ (##3)}\newline
+ ]
+ }
+}
+
+\gdef\th@marginbreak{%
+ \def\@begintheorem##1##2{
+ \item[
+ \InlineClass{theoremheader}{##2 \qquad ##1}\newline
+ ]
+ }%
+\def\@opargbegintheorem##1##2##3{%
+ \item[
+ \InlineClass{theoremheader}{##2 \qquad ##1\ %
+ (##3)}\newline
+ ]
+ }
+}
+
+\gdef\th@changebreak{%
+ \def\@begintheorem##1##2{
+ \item[
+ \InlineClass{theoremheader}{##2\ ##1}\newline
+ ]
+ }%
+\def\@opargbegintheorem##1##2##3{%
+ \item[
+ \InlineClass{theoremheader}{ ##2\ ##1\ %
+ (##3)}\newline
+ ]
+ }
+}
+
+\gdef\th@change{%
+ \def\@begintheorem##1##2{
+ \item[
+ \InlineClass{theoremheader}{##2\ ##1}
+ ]
+ }%
+\def\@opargbegintheorem##1##2##3{%
+ \item[
+ \InlineClass{theoremheader}{##2\ ##1\ (##3)}
+ ]
+ }
+}
+
+\gdef\th@margin{%
+ \def\@begintheorem##1##2{
+ \item[
+ \InlineClass{theoremheader}{##2 \qquad ##1}
+ ]
+ }%
+\def\@opargbegintheorem##1##2##3{%
+ \item[
+ \InlineClass{theoremheader}{##2 \qquad ##1\ (##3)}
+ ]
+ }
+}
+% \end{macrocode}
+%
+% Patched for \CSS:
+% \changes{v0.46}{2018/01/22}{\pkg{theorem}: Adapt to \env{trivlist} changes.}
+% \begin{macrocode}
+\gdef\@thm#1#2{\refstepcounter{#1}%
+\LWR@forcenewpage% lwarp
+ \BlockClass{theorembody\LWR@thisthmstyle}% lwarp
+ \trivlist
+ \@topsep \theorempreskipamount % used by first \item
+ \@topsepadd \theorempostskipamount % used by \@endparenv
+ \@ifnextchar [%
+ {\@ythm{#1}{#2}}%
+ {\@begintheorem{#2}{\csname the#1\endcsname}\ignorespaces}}
+
+\gdef\@endtheorem{%
+\endtrivlist
+\endBlockClass
+}
+% \end{macrocode}
+%
+% \iffalse
+%</theorem>
+% \fi
+%
+%
+%
+% \iffalse
+%<*thinsp>
+% \fi
+%
+% \part{lwarp-thinsp.sty}
+%
+% \section{thinsp}
+%
+% \DescribePackage{thinsp}
+% \pkg{thinsp} is emulated.
+%
+% \changes{v0.61}{2018/08/23}{\pkg{thinsp}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{thinsp}[2016/10/02]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\AtBeginDocument{
+\let\thinthinspace\relax% defined by some packages
+\newcommand*{\thinthinspace}{\thinspace}
+}
+
+\newcommand*{\stretchthinspace}{\thinspace}
+\newcommand*{\stretchthinthinspace}{\thinthinspace}
+\newcommand*{\stretchnegthinspace}{\negthinspace}
+% \end{macrocode}
+%
+% \iffalse
+%</thinsp>
+% \fi
+%
+%
+%
+% \iffalse
+%<*threadcol>
+% \fi
+%
+% \part{lwarp-threadcol.sty}
+%
+% \section{threadcol}
+%
+% \DescribePackage{threadcol}
+% \pkg{threadcol} is ignored.
+%
+% \changes{v0.61}{2018/09/23}{\pkg{threadcol}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{threadcol}[2013/01/06]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\setthreadname}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</threadcol>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*threeparttable>
+% \fi
+
+% \part{lwarp-threeparttable.sty}
+
+% \section{threeparttable}
+% \label{sec:threeparttable}
+%
+% \credits{Donald Arseneau}
+%
+% \DescribePackage{threeparttable}
+% \pkg{threeparttable} is emulated.
+%
+% Table note are contained inside a \CSS\ \element{div} of class |tnotes|.
+% If \pkg{enumitem} is used, the
+% note item labels are also individually
+% highlighted with an additional \CSS\ \element{span} of class |tnoteitemheader|,
+% otherwise they are plain text.
+
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{threeparttable}[2003/06/13]
+% \end{macrocode}
+
+
+% ^^A Broken:
+% ^^A % \begin{noindmacro}{\LWR@printtablenote} \marg{text}
+% ^^A %
+% ^^A % Prints the table note item header inside a \CSS\ class of |tnoteitemheader|.
+% ^^A % \begin{macrocode}
+% ^^A % \newrobustcmd{\LWR@printtablenote}[1]{\InlineClass{tnoteitemheader}{#1}}
+% ^^A % \end{macrocode}
+% ^^A % \end{noindmacro}
+
+
+
+% \begin{noindenvironment}{threeparttable} \oarg{alignment}
+%
+% \changes{v0.68}{2019/03/01}{\pkg{threeparttable}: Fix for caption type.}
+% \begin{macrocode}
+\newenvironment*{threeparttable}[1][b]
+ {\def\@captype{table}}
+ {}
+% \end{macrocode}
+% \end{noindenvironment}
+
+% \begin{noindenvironment}{tablenotes} \oarg{options}
+% \changes{v0.19}{2016/06/01}{\CSS\ for table note item.}
+% \begin{macrocode}
+\newenvironment*{tablenotes}[1][]
+{%
+\LWR@forcenewpage
+\BlockClass{tnotes}%
+% \end{macrocode}
+% ^^A broken:
+% ^^A % \ltx@ifpackageloaded{enumitem}{%
+% ^^A % \setlist[description]{format=\LWR@printtablenote}%
+% ^^A % }{}%
+% \begin{macrocode}
+\description%
+}
+{%
+\enddescription%
+\endBlockClass%
+}
+% \end{macrocode}
+% \end{noindenvironment}
+%
+% \begin{noindmacro}{\tnote} \marg{text}
+% \begin{macrocode}
+\newcommand{\tnote}[1]{\LWR@htmlspan{sup}{#1}}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindenvironment}{measuredfigure} \oarg{alignment}
+%
+% \changes{v0.73}{2019/06/21}{\pkg{threeparttable}: Added \env{measuredfigure}.}
+% \begin{macrocode}
+\newenvironment*{measuredfigure}[1][t]
+ {\def\@captype{figure}}
+ {}
+% \end{macrocode}
+% \end{noindenvironment}
+
+
+% \iffalse
+%</threeparttable>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*threeparttablex>
+% \fi
+%
+% \part{lwarp-threeparttablex.sty}
+%
+% \section{threeparttablex}
+%
+% \DescribePackage{threeparttablex}
+% \pkg{threeparttablex} is patched for use by \pkg{lwarp}.
+%
+% \limitsthreeparttablex
+%
+% \changes{v0.68}{2019/03/01}{\pkg{threeparttablex}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{threeparttablex}[2013/07/23]
+% \end{macrocode}
+%
+% The width is guessed depending on the number of columns, then
+% limited to a min/max.
+% \begin{macrocode}
+\renewcommand\insertTableNotes{%
+ \setlength{\LWR@templengthone}{.375in*\value{LWR@tabletotalLaTeXcols}}%
+ \setlength{\LWR@templengthone}{\minof{\textwidth}{\LWR@templengthone}}%
+ \setlength{\LWR@templengthone}{\maxof{2.5in}{\LWR@templengthone}}%
+ \multicolumn{\value{LWR@tabletotalLaTeXcols}}{c}{%
+ \parbox{\LWR@templengthone}{%
+ \begin{tablenotes}[\TPTL@optarg]%
+ \TPTL@font%
+ \TPTL@body%
+ \end{tablenotes}%
+ }%
+ }%
+}
+
+\renewcommand\TPTL@tnotex[2]{\tnote{\nameref{#2}}}
+% \end{macrocode}
+%
+% \iffalse
+%</threeparttablex>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*thumb>
+% \fi
+%
+% \part{lwarp-thumb.sty}
+%
+% \section{thumb}
+%
+% \DescribePackage{thumb}
+% \pkg{thumb} is ignored.
+%
+% \changes{v0.60}{2018/09/19}{\pkg{thumb}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{thumb}[1997/12/24]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\Overviewpage}{}
+\newlength{\thumbheight}
+\newlength{\thumbwidth}
+% \end{macrocode}
+%
+% \iffalse
+%</thumb>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*thumbs>
+% \fi
+%
+% \part{lwarp-thumbs.sty}
+%
+% \section{thumbs}
+%
+% \DescribePackage{thumbs}
+% \pkg{thumbs} is ignored.
+%
+% \changes{v0.60}{2018/09/19}{\pkg{thumbs}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{thumbs}[2014/03/09]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\addthumb}[4]{}
+\newcommand{\addtitlethumb}[5]{}
+\newcommand{\stopthumb}{}
+\newcommand{\continuethumb}{}
+\newcommand{\thumbsoverview}[1]{}
+\newcommand{\thumbsoverviewback}[1]{}
+\newcommand{\thumbsoverviewverso}[1]{}
+\newcommand{\thumbsoverviewdouble}[1]{}
+\newcommand{\thumbnewcolumn}{}
+\newcommand{\addthumbsoverviewtocontents}[2]{}
+\newcommand{\thumbsnophantom}{}
+% \end{macrocode}
+%
+% \iffalse
+%</thumbs>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*tikz>
+% \fi
+
+% \part{lwarp-tikz.sty}
+%
+% \section{tikz}
+%
+% \credits{Till Tantau}
+%
+% \DescribePackage{tikz}
+% \pkg{tikz} is supported.
+%
+% \limitstikz
+%
+% \changes{v0.24}{2017/03/11}{\pkg{tikz}: For tikz v3.0.0 or later,
+% auto-loads tikz babel library if necessary.}
+%
+% Accept all options for \pkg{lwarp-tikz}:
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{tikz}[2015/08/07]
+% \end{macrocode}
+
+
+% \pkg{lwarp} changes the catcode of |$| for its own use.
+% \margintag{catcodes}
+% The \tikz{} |babel| library temporarily changes catcodes
+% back to normal for \tikz's use.
+% \gindex{tikz=\pkg{tikz}>dollar redefined}
+% \gindex{tikz=\pkg{tikz}>catcodes}
+% \pkg{tikz} v3.0.0 introduced the |babel| library which handles catcode changes.
+% For older versions, \pkg{lwarp} must change |$|'s catcode itself.
+%
+% Also see:\\
+% \href{https://tex.stackexchange.com/questions/16199/test-if-a-package-or-package-option-is-loaded}
+% {https://tex.stackexchange.com/questions/16199/\\
+% \fqquad\ test-if-a-package-or-package-option-is-loaded}
+
+
+% \begin{macrocode}
+\newbool{LWR@tikzbabel}
+
+\@ifpackagelater{tikz}{2013/12/20}% Test for Tikz version v3.0.0
+{\usetikzlibrary{babel}\booltrue{LWR@tikzbabel}}
+{\boolfalse{LWR@tikzbabel}}
+% \end{macrocode}
+
+
+% \changes{v0.13}{2016/03/23}{Fix dollar-redefined bug for newer package.}
+% \changes{v0.19}{2016/05/29}{Adapts to tikz version.}
+% \changes{v0.24}{2017/03/13}{Fix for inline images.}
+% \changes{v0.44}{2017/11/16}{\pkg{tikz}: Fix: Groups for lateximages.}
+% \changes{v0.51}{2018/03/06}{\pkg{tikz}: Fix for \cs{tikz} macro.}
+% \changes{v0.51}{2018/03/20}{\pkg{tikz}: Fix for \env{tikz} with optional argument.}
+% \changes{v0.54}{2018/04/16}{\pkg{tikz}: Fixes for \cs{pgfpicture}, minipages, fit, align, font.}
+%
+% \begin{noindenvironment}{pgfpicture}
+% The \cs{pgfpicture} environment is enclosed inside a \cs{lateximage}.
+% Enclose the low-level \cs{pgfpicture} in a \env{lateximage}.
+% This is also used by the higher-level \cs{tikz} and \env{tikzpicture}.
+%
+% \begin{macrocode}
+\preto\pgfpicture{%
+ \begin{lateximage}%
+ \ifbool{LWR@tikzbabel}% Test for Tikz version v3.0.0
+ {}%
+ {\catcode`\$=3}% dollar sign is math shift
+}
+
+\appto\endpgfpicture{\end{lateximage}}
+% \end{macrocode}
+% \end{noindenvironment}
+
+% \tikz\ is placed inside an \SVG\ image, so use the original
+% meanings of the following:
+% \begin{macrocode}
+\LetLtxMacro\pgfutil@minipage\LWR@print@minipage
+\let\pgfutil@endminipage\endLWR@print@minipage
+
+\let\pgfutil@raggedleft\LWR@print@raggedleft
+\let\pgfutil@raggedright\LWR@print@raggedright
+
+\def\pgfutil@font@tiny{\LWR@printtiny}
+\def\pgfutil@font@scriptsize{\LWR@printscriptsize}
+\def\pgfutil@font@footnotesize{\LWR@printfootnotesize}
+\def\pgfutil@font@small{\LWR@print@small}
+\def\pgfutil@font@normalsize{\LWR@print@normalsize}
+\def\pgfutil@font@large{\LWR@printlarge}
+\def\pgfutil@font@Large{\LWR@printLarge}
+\def\pgfutil@font@huge{\LWR@printhuge}
+\def\pgfutil@font@Huge{\LWR@printHuge}
+
+\def\pgfutil@font@itshape{\LWR@origitshape}
+\def\pgfutil@font@bfseries{\LWR@origbfseries}
+
+\def\pgfutil@font@normalfont{\LWR@orignormalfont}
+% \end{macrocode}
+
+% \iffalse
+%</tikz>
+% \fi
+%
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*titleps>
+% \fi
+
+% \part{lwarp-titleps.sty}
+
+% \section{titleps}
+%
+% \credits{Javier Bezos}
+%
+% \DescribePackage{titleps}
+% \pkg{titleps} is loaded and used by \pkg{lwarp} during \HTML\ output.
+% All user options and macros are ignored and disabled.
+%
+% \changes{v0.19}{2016/05/27}{titleps: null \cs{pagestyle} and \cs{thispagestyle} for HTML.}
+% \changes{v0.20}{2017/01/03}{\pkg{titleps}: Added.}
+% \changes{v0.34}{2017/08/03}{\pkg{titleps}: No longer required.}
+%
+%
+% Discard all options for \pkg{lwarp-titleps}:
+%
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{titleps}[2016/03/15]
+% \end{macrocode}
+%
+% \cs{pagestyle} and \cs{thispagestyle} are already disabled in the \pkg{lwarp} code.
+%
+% \begin{noindmacro}{\newpagestyle} \marg{name} \oarg{style} \marg{commands}
+% \begin{macrocode}
+\NewDocumentCommand{\newpagestyle}{m o m}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\renewpagestyle} \marg{name} \oarg{style} \marg{commands}
+% \begin{macrocode}
+\NewDocumentCommand{\renewpagestyle}{m o m}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\sethead} \oarg{el} \oarg{ec} \oarg{er} \marg{ol} \marg{oc} \marg{or}
+% \begin{macrocode}
+\NewDocumentCommand{\sethead}{o o o m m m}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\setfoot} \oarg{el} \oarg{ec} \oarg{er} \marg{ol} \marg{oc} \marg{or}
+% \begin{macrocode}
+\NewDocumentCommand{\setfoot}{o o o m m m}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\settitlemarks} * \marg{names}
+% \begin{macrocode}
+\NewDocumentCommand{\settitlemarks}{s m}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\headrule}
+% \begin{macrocode}
+\newcommand*{\headrule}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\footrule}
+% \begin{macrocode}
+\newcommand*{\footrule}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\setheadrule} \marg{length}
+% \begin{macrocode}
+\newcommand*{\setheadrule}[1]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\setfootrule} \marg{length}
+% \begin{macrocode}
+\newcommand*{\setfootrule}[1]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\makeheadrule}
+% \begin{macrocode}
+\newcommand*{\makeheadrule}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\makefootrule}
+% \begin{macrocode}
+\newcommand*{\makefootrule}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\setmarkboth} \marg{code}
+% \begin{macrocode}
+\newcommand{\setmarkboth}[1]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\widenhead}
+% \begin{macrocode}
+\NewDocumentCommand{\widenhead}{s o o m m}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\bottitlemarks}
+% \begin{macrocode}
+\newcommand*{\bottitlemarks}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\toptitlemarks}
+% \begin{macrocode}
+\newcommand*{\toptitlemarks}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\firsttitlemarks}
+% \begin{macrocode}
+\newcommand*{\firsttitlemarks}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\nexttitlemarks}
+% \begin{macrocode}
+\newcommand*{\nexttoptitlemarks}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\outertitlemarks}
+% \begin{macrocode}
+\newcommand*{\outertitlemarks}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\innertitlemarks}
+% \begin{macrocode}
+\newcommand*{\innertitlemarks}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\newtitlemark} * \marg{name}
+% \begin{macrocode}
+\NewDocumentCommand{\newtitlemark}{s m}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\pretitlemark} * \marg{section} \marg{text}
+% \begin{macrocode}
+\NewDocumentCommand{\pretitlemark}{s m m}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\ifsamemark} \marg{group} \marg{command} \marg{true} \marg{false}
+% \begin{macrocode}
+\newcommand{\ifsamemark}[4]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\setfloathead} * \oarg{.} \oarg{.} \oarg{.} \marg{.} \marg{.} \marg{.} \marg{extra} \oarg{which}
+% \begin{macrocode}
+\NewDocumentCommand{\setfloathead}{s o o o m m m m m}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\setfloatfoot} * \oarg{.} \oarg{.} \oarg{.} \marg{.} \marg{.} \marg{.} \marg{extra} \oarg{which}
+% \begin{macrocode}
+\NewDocumentCommand{\setfloatfoot}{s o o o m m m m m}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\nextfloathead} * \oarg{.} \oarg{.} \oarg{.} \marg{.} \marg{.} \marg{.} \marg{extra} \oarg{which}
+% \begin{macrocode}
+\NewDocumentCommand{\nextfloathead}{s o o o m m m m m}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\nextfloatfoot} * \oarg{.} \oarg{.} \oarg{.} \marg{.} \marg{.} \marg{.} \marg{extra} \oarg{which}
+% \begin{macrocode}
+\NewDocumentCommand{\nextfloatfoot}{s o o o m m m m m}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\newmarkset} \marg{markset}
+% \begin{macrocode}
+\newcommand{\newmarkset}[1]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\newextramark} * \marg{markset} \marg{macro-name}
+% \begin{macrocode}
+\NewDocumentCommand{\newextramarkset}{s m m}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\botextramarks} \marg{markset}
+% \begin{macrocode}
+\newcommand{\botextramarks}[1]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\topextramarks} \marg{markset}
+% \begin{macrocode}
+\newcommand{\topextramarks}[1]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\firstextramarks} \marg{markset}
+% \begin{macrocode}
+\newcommand{\firstextramarks}[1]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\nextextramarks} \marg{markset}
+% \begin{macrocode}
+\newcommand{\nexttopextramarks}[1]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\outerextramarks} \marg{markset}
+% \begin{macrocode}
+\newcommand{\outerextramarks}[1]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\innerextramarks} \marg{markset}
+% \begin{macrocode}
+\newcommand{\innerextramarks}[1]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \iffalse
+%</titleps>
+% \fi
+%
+%
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*titleref>
+% \fi
+%
+% \part{lwarp-titleref.sty}
+%
+% \section{titleref}
+%
+% \DescribePackage{titleref}
+% \pkg{titleref} is emulated.
+%
+% \changes{v0.34}{2017/07/26}{\pkg{titleref}: Prevented.}
+% \changes{v0.45}{2018/01/03}{\pkg{titleref}: Added.}
+%
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{titleref}[2001/04/05]
+
+\LetLtxMacro\titleref\nameref
+
+\providecounter{LWR@currenttitle}
+
+\newcommand*{\currenttitle}{%
+ \addtocounter{LWR@currenttitle}{1}%
+ \label{currenttitle\arabic{LWR@currenttitle}}%
+ \nameref{currenttitle\arabic{LWR@currenttitle}}%
+}
+
+\newcommand*{\theTitleReference}[2]{}
+% \end{macrocode}
+%
+% \iffalse
+%</titleref>
+% \fi
+%
+%
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*titlesec>
+% \fi
+
+% \part{lwarp-titlesec.sty}
+
+% \section{titlesec}
+%
+% \credits{Javier Bezos}
+%
+% \DescribePackage{titlesec}
+% \pkg{titlesec} is emulated.
+% All user options and macros are ignored and disabled.
+
+% \changes{v0.20}{2017/01/03}{\pkg{titlesec}: Added.}
+%
+%
+% Discard all options for \pkg{lwarp-titlesec}:
+
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{titlesec}[2016/03/21]
+% \end{macrocode}
+
+% \begin{noindmacro}{\titlelabel} \marg{label-format}
+% \begin{macrocode}
+\newcommand*{\titlelabel}[1]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\titleformat*} \marg{command} \marg{format}
+%
+% \begin{noindmacro}{\titleformat} \marg{command} \oarg{shape} \marg{format}
+% \marg{label} \marg{sep} \marg{begfore} \oarg{after}
+% \begin{macrocode}
+\newcommand\titleformat{%
+ \@ifstar{\ttl@format@s}%
+ {\ttl@format@i}}
+\newcommand{\ttl@format@s}[1]{}
+\NewDocumentCommand{\ttl@format@i}{m o m m m m o}{}
+% \end{macrocode}
+% \end{noindmacro}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\chaptertitlename}
+% \begin{macrocode}
+\@ifundefined{@chapapp}{\let\@chapapp\chaptername}{}
+\newcommand\chaptertitlename{\@chapapp}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\titlespacing} * \marg{command} \marg{left} \marg{before} \marg{after} \oarg{right}
+%
+% \begin{macrocode}
+\NewDocumentCommand{\titlespacing}{s m m m m o}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\filright}
+% \begin{macrocode}
+\newcommand*{\filright}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\filcenter}
+% \begin{macrocode}
+\newcommand*{\filcenter}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\filleft}
+% \begin{macrocode}
+\newcommand*{\filleft}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\fillast}
+% \begin{macrocode}
+\newcommand*{\fillast}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\filinner}
+% \begin{macrocode}
+\newcommand*{\filinner}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\filouter}
+% \begin{macrocode}
+\newcommand*{\filouter}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\wordsep}
+% \begin{macrocode}
+\newcommand\wordsep{\fontdimen\tw@\font \@plus
+ \fontdimen\thr@@\font \@minus \fontdimen4\font}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\titleline} * \oarg{align} \marg{material}
+% \begin{macrocode}
+\NewDocumentCommand{\titleline}{s o m}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\titlerule} \oarg{height}
+% \begin{macrocode}
+\providecommand*\titlerule{\@ifstar{\ttl@row}{\ttl@rule}}
+\newcommand*{\ttl@rule}[1][]{}
+\newcommand*{\ttl@row}[2][]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\iftitlemeasuring} \marg{true} \marg{false}
+% \begin{macrocode}
+\newcommand{\iftitlemeasuring}[2]{#2}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\assignpagestyle} \marg{command} \marg{pagestyle}
+% \begin{macrocode}
+\newcommand{\assignpagestyle}[2]{#2}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\titleclass} \marg{name} \oarg{startlevel} \marg{class} \oarg{cmd}
+% \begin{macrocode}
+\NewDocumentCommand{\titleclass}{m o m o}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \iffalse
+%</titlesec>
+% \fi
+%
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*titletoc>
+% \fi
+
+% \part{lwarp-titletoc.sty}
+
+% \section{titletoc}
+%
+% \credits{Javier Bezos}
+%
+% \DescribePackage{titletoc}
+% \pkg{titletoc} is emulated.
+% All user options and macros are ignored and disabled.
+
+% \changes{v0.20}{2017/01/03}{\pkg{titletoc}: Added.}
+%
+%
+% Discard all options for \pkg{lwarp-titletoc}:
+
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{titletoc}[2011/12/15]
+% \end{macrocode}
+%
+
+% \begin{noindmacro}{\dottedcontents} \marg{section} \oarg{left} \marg{above} \marg{label} \marg{leader}
+% \begin{macrocode}
+\NewDocumentCommand{\dottedcontents}{m o m m m}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\titlecontents} * \marg{section} \oarg{left} \marg{above}
+% \marg{numbered} \marg{numberless} \marg{filler}
+% \oarg{below or begin} \oarg{separator} \oarg{end}
+% \begin{macrocode}
+\newcommand{\titlecontents}{\@ifstar{\ttl@tcstar}{\ttl@tcnostar}}
+\NewDocumentCommand{\ttl@tcstar}{m o m m m m o o o}{}
+\NewDocumentCommand{\ttl@tcnostar}{m o m m m m o}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\contentsmargin} \oarg{correction} \marg{right}
+% \begin{macrocode}
+\newcommand{\contentsmargin}[2][]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\thecontentslabel}
+% \begin{macrocode}
+\newcommand*{\thecontentslabel}{thecontentslabel}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\thecontentspage}
+% \begin{macrocode}
+\newcommand*{\thecontentspage}{thecontentspage}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\contentslabel} \oarg{format} \marg{space}
+% \begin{macrocode}
+\newcommand{\contentslabel}[2][]{\thecontentslabel}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\contentspage} \oarg{format}
+% \begin{macrocode}
+\newcommand{\contentspage}[1][]{\thecontentspage}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\contentspush} \marg{text}
+% \begin{macrocode}
+\newcommand{\contentspush}[1]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\contentsuse} \marg{name} \marg{text}
+% \begin{macrocode}
+\newcommand{\contentsuse}[2]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\startcontents} \oarg{name}
+% \begin{macrocode}
+\newcommand*{\startcontents}[1][]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\stopcontents} \oarg{name}
+% \begin{macrocode}
+\newcommand*{\stopcontents}[1][]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\resumecontents} \oarg{name}
+% \begin{macrocode}
+\newcommand*{\resumecontents}[1][]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\printcontents} \oarg{name} \marg{prefix} \marg{start} \marg{code}
+% \begin{macrocode}
+\newcommand{\printcontents}[4][]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\startlist} \oarg{name} \marg{list}
+% \begin{macrocode}
+\newcommand{\startlist}[2][]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\stoplist} \oarg{name} \marg{list}
+% \begin{macrocode}
+\newcommand{\stoplist}[2][]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\resumelist} \oarg{name} \marg{list}
+% \begin{macrocode}
+\newcommand{\resumelist}[2][]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\printlist} \oarg{name} \marg{list} \marg{prefix} \marg{code}
+% \begin{macrocode}
+\newcommand{\printlist}[4][]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \iffalse
+%</titletoc>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*titling>
+% \fi
+
+% \part{lwarp-titling.sty}
+
+% \section{titling}
+%
+% \credits{Peter Wilson}
+%
+% \DescribePackage{titling}
+%
+% \limitstitlepage
+%
+% The various \pkg{titling} footnote restyling commands have no effect.
+%
+% \changes{v0.20}{2017/01/22}{\pkg{titling}: Improved compatibility.}
+% \changes{v0.39}{2017/09/05}{\pkg{titling}: Improved compatibility.}
+%
+% Pass all options to \pkg{lwarp-titling}:
+
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{titling}[2009/09/04]
+% \end{macrocode}
+%
+%
+% Patch \cs{@bsmtitlempty}:
+% \marginpar{\hfill\cs{@bsmtitlempty}}
+% \begin{macrocode}
+\let\LWR@orig@bsmtitlempty\@bsmtitlempty
+\renewcommand*{\@bsmtitlempty}{%
+\LWR@orig@bsmtitlempty%
+}
+% \end{macrocode}
+%
+%
+% Patch \cs{keepthetitle}:
+% \marginpar{\hfill\cs{keepthetitle}}
+% \begin{macrocode}
+\let\LWR@origkeepthetitle\keepthetitle
+\renewcommand*{\keepthetitle}{%
+\LWR@orig@keepthetitle%
+}
+% \end{macrocode}
+%
+%
+% Patch \cs{killtitle}:
+% \marginpar{\hfill\cs{killtitle}}
+% \begin{macrocode}
+\let\LWR@origkilltitle\killtitle
+\renewcommand*{\killtitle}{%
+\LWR@orig@killtitle%
+}
+% \end{macrocode}
+%
+%
+%
+% \begin{environment}{titlingpage}
+%
+% \changes{v0.39}{2017/09/02}{Clear pending footnotes.}
+% \begin{macrocode}
+\renewenvironment*{titlingpage}
+{%
+% \end{macrocode}
+% Start an \HTML\ titlepage div:
+% \begin{macrocode}
+\LWR@printpendingfootnotes
+\begin{titlepage}
+% \end{macrocode}
+% Prepare for a custom version of \cs{maketitle} inside the \env{titlingpage}:
+% \begin{macrocode}
+\LWR@maketitlesetup
+\let\maketitle\LWR@titlingmaketitle
+}
+{
+% \end{macrocode}
+% At the end of the environment,
+% end the \HTML\ titlepage div:
+% \begin{macrocode}
+\end{titlepage}
+}
+% \end{macrocode}
+% \end{environment}
+%
+%
+%
+% Patch the pre/post title/author/date to add \HTML\ tags,
+% then initilize:
+%
+% \changes{v0.39}{2017/09/03}{\pkg{titling}: Removed extraneous \protect\env{center} environments.}
+% \begin{macrocode}
+
+\pretitle{}
+\posttitle{}
+
+\preauthor{}
+\postauthor{}
+
+\predate{}
+\postdate{}
+% \end{macrocode}
+%
+%
+%
+%\begin{macro}{\LWR@maketitlesetup} Patches \cs{thanks} macros.
+%
+% \begin{macrocode}
+\renewcommand*{\LWR@maketitlesetup}{%
+% \end{macrocode}
+%
+% Redefine the footnote mark:
+%
+% \begin{macrocode}
+\def\@makefnmark{\textsuperscript{\@thefnmark}}
+% \end{macrocode}
+%
+% \begin{center}
+% \begin{minipage}{.7\linewidth}
+% \cs{thefootnote} \goesto\ \cs{nameuse}\{arabic\}\{footnote\}, or
+%
+% \cs{thefootnote} \goesto\ \cs{nameuse}\{fnsymbol\}\{footnote\}
+% \end{minipage}
+% \end{center}
+%
+% Redefine the footnote text:
+%
+% \begin{macrocode}
+\long\def\@makefntext##1{%
+% \end{macrocode}
+% Make the footnote mark and some extra horizontal space for the tags:
+% \begin{macrocode}
+\makethanksmark~%
+% \end{macrocode}
+% \begin{center}
+% \begin{minipage}{.7\linewidth}
+% \cs{makethanksmark} \goesto\ \cs{thanksfootmark} \goesto\ \cs{tamark} \goesto\
+%
+% \hfill \cs{@thefnmark} \goesto\ \cs{itshape} a (or similar)
+% \end{minipage}
+% \end{center}
+%
+% Print the text:
+% \begin{macrocode}
+##1%
+}% \@makefntext
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{noindmacro}{\thanksfootmark}
+% \changes{v0.51}{2018/03/05}{\pkg{titling}: Fix for \cs{thanks} mark.}
+% \begin{macrocode}
+\renewcommand{\thanksfootmark}{%
+% \hb@xt@\thanksmarkwidth{\hfil\normalfont%
+ \thanksscript{%
+ \thanksfootpre \tamark \thanksfootpost%
+ }%
+% }%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%\begin{macro}{\maketitle}
+% \HTML\ mode.
+% Creates an \HTML\ titlepage div
+% and typesets the title, etc.
+%
+% Code from the \pkg{titling} package is adapted, simplified, and
+% modified for \HTML\ output.
+%
+% \begin{macrocode}
+\renewcommand*{\maketitle}{%
+% \end{macrocode}
+% An \HTML\ titlepage \element{div} is used for all classes.
+% \begin{macrocode}
+\begin{titlepage}
+% \end{macrocode}
+% Select which kind of footnote marks to use:
+% \begin{macrocode}
+\@bsmarkseries
+% \end{macrocode}
+% Set up special patches:
+% \begin{macrocode}
+\LWR@maketitlesetup
+% \end{macrocode}
+% Typeset the title, etc:
+% \begin{macrocode}
+\@maketitle
+% \end{macrocode}
+% Immediately generate any \cs{thanks} footnotes:
+% \changes{v0.73}{2019/06/25}{\pkg{titling}: Fix: Paragraph tags.}
+% \begin{macrocode}
+\LWR@stoppars\@thanks\LWR@startpars
+% \end{macrocode}
+% Close the \HTML\ titlepage div:
+% \begin{macrocode}
+\end{titlepage}
+% \end{macrocode}
+% Reset the footnote counter:
+% \begin{macrocode}
+\@bscontmark
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@maketitle}
+% Typesets the title, etc. Patched for \HTML.
+%
+% \changes{v0.39}{2017/09/01}{Supports \pkg{authblk} with
+% \element{div}s of class \attribute{oneauthor} instead of tabular.}
+% \changes{v0.39}{2017/09/03}{Removed minipages.}
+% \changes{v0.39}{2017/09/04}{\pkg{titling} version.}
+%
+% \begin{macrocode}
+\DeclareDocumentCommand{\@maketitle}{}{%
+ \maketitlehooka
+ {
+ \LWR@stoppars\LWR@htmltag{\LWR@tagtitle}%
+ \@bspretitle \@title \@bsposttitle%
+ \LWR@htmltag{\LWR@tagtitleend}\LWR@startpars%
+ }
+ \maketitlehookb
+ {
+ \begin{BlockClass}{author}
+ \renewcommand{\and}{%
+ \end{BlockClass}%
+ \begin{BlockClass}{oneauthor}%
+ }
+ \begin{BlockClass}{oneauthor}%
+ \@bspreauthor \@author \@bspostauthor%
+ \end{BlockClass}%
+ \end{BlockClass}%
+ }
+ \maketitlehookc
+ {
+ \begin{BlockClass}{titledate}%
+ \@bspredate \@date \@bspostdate%
+ \end{BlockClass}%
+ }
+ \maketitlehookd
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR@titlingmaketitle}
+% \cs{maketitle} for use inside an \HTML\ \env{titlingpage} environment.
+% \begin{macrocode}
+\renewcommand*{\LWR@titlingmaketitle}{%
+% \end{macrocode}
+% Keep pending footnotes out of the title block:
+% \changes{v0.73}{2019/06/25}{\pkg{titling}: Fix: Paragraph tags.}
+% \begin{macrocode}
+\LWR@stoppars\@thanks\LWR@startpars
+% \end{macrocode}
+% Select which kind of footnote marks to use:
+% \begin{macrocode}
+\@bsmarkseries
+% \end{macrocode}
+% Set up special patches:
+% \begin{macrocode}
+\LWR@maketitlesetup
+% \end{macrocode}
+% Typeset the title, etc:
+% \begin{macrocode}
+\@maketitle
+% \end{macrocode}
+% Immediately generate any \cs{thanks} footnotes:
+% \changes{v0.73}{2019/06/25}{\pkg{titling}: Fix: Paragraph tags.}
+% \begin{macrocode}
+\LWR@stoppars\@thanks\LWR@startpars
+% \end{macrocode}
+% Reset the footnote counter:
+% \begin{macrocode}
+\@bscontmark
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\thanksmarkseries} \marg{series}
+% \changes{v0.39}{2017/09/03}{Removed minipage footnotes.}
+%
+% Sets the type of footnote marks used by \cs{thanks},
+% where type is `arabic', `roman', `fnsymbol', etc.
+% \begin{macrocode}
+\renewcommand{\thanksmarkseries}[1]{%
+\def\@bsmarkseries{\renewcommand{\thefootnote}{\@nameuse{#1}{footnote}}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% Set default titlepage thanks footnote marks. See \cref{sec:titlehtml}.
+% \begin{macrocode}
+\@ifclassloaded{memoir}{
+ \thanksmarkseries{arabic}
+}{% not memoir
+\if@titlepage
+ \thanksmarkseries{arabic}
+\else
+ \thanksmarkseries{fnsymbol}
+\fi
+}% not memoir
+% \end{macrocode}
+%
+%
+%
+% \iffalse
+%</titling>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*tocbasic>
+% \fi
+%
+% \part{lwarp-tocbasic.sty}
+
+% \section{tocbasic}
+%
+% \credits{Markus Kohm}
+%
+% \DescribePackage{tocbasic}
+% \pkg{tocbasic} is nullified for \pkg{lwarp}.
+% %
+% \usedbykomascript
+%
+% \changes{v0.44}{2017/11/20}{\pkg{tocbasic}: Added.}
+% \changes{v0.66}{2019/01/12}{\pkg{tocbasic}: Updated to v3.26a.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{tocbasic}[2018/12/30]
+% \end{macrocode}
+
+% \begin{macrocode}
+\DeclareDocumentCommand{\usetocbasicnumberline}{o}{}
+\DeclareDocumentCommand{\DeclareTOCStyleEntry}{o m m}{}
+\DeclareDocumentCommand{\DeclareTOCStyleEntries}{o m m}{}
+\DeclareDocumentCommand{\DeclareTOCEntryStyle}{m o m}{}
+\DeclareDocumentCommand{\DefineTOCEntryOption}{m o m}{}
+\DeclareDocumentCommand{\DefineTOCEntryBooleanOption}{m o m m m}{}
+\DeclareDocumentCommand{\DefineTOCEntryCommandOption}{m o m m m}{}
+\DeclareDocumentCommand{\DefineTOCEntryIfOption}{m o m m m}{}
+\DeclareDocumentCommand{\DefineTOCEntryLengthOption}{m o m m m}{}
+\DeclareDocumentCommand{\DefineTOCEntryNumberOption}{m o m m m}{}
+\DeclareDocumentCommand{\CloneTOCEntryStyle}{m m}{}
+\DeclareDocumentCommand{\TOCEntryStyleInitCode}{m m}{}
+\DeclareDocumentCommand{\TOCEntryStyleStartInitCode}{m m}{}
+% \end{macrocode}
+
+% \iffalse
+%</tocbasic>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*tocbibind>
+% \fi
+%
+% \part{lwarp-tocbibind.sty}
+
+% \section{tocbibind}
+% \label{sec:tocbibind}
+%
+% \credits{Peter Wilson}
+%
+% \DescribePackage{tocbibind}
+% \pkg{tocbibind} is patched for use by \pkg{lwarp}.
+%
+% \limitstocbibind
+%
+% \changes{v0.38}{2017/08/22}{\pkg{tocbibind}: Added.}
+% \changes{v0.40}{2017/09/12}{\pkg{tocbibind}: Improved for \cs{simplechapter}.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\let\simplechapterdelim\relax
+
+\LWR@ProvidesPackagePass{tocbibind}[2010/10/13]
+% \end{macrocode}
+
+% \begin{macrocode}
+\renewenvironment{theindex}%
+{%
+ \if@bibchapter
+ \if@donumindex
+ \chapter{\indexname}
+ \else
+ \if@dotocind
+ \chapter*{\indexname}
+ \addcontentsline{toc}{chapter}{\LWR@isolate{\indexname}}
+ \else
+ \chapter*{\indexname}
+ \fi
+ \fi
+ \else
+ \if@donumindex
+ \section{\indexname}
+ \else
+ \if@dotocind
+ \section*{\indexname}
+ \addcontentsline{toc}{\@tocextra}{\LWR@isolate{\indexname}}
+ \else
+ \section*{\indexname}
+ \fi
+ \fi
+ \fi
+\let\item\LWR@indexitem%
+\let\subitem\LWR@indexsubitem%
+\let\subsubitem\LWR@indexsubsubitem%
+}{}
+% \end{macrocode}
+%
+% The following code is shared by \pkg{anonchap}.
+%
+% \begin{macrocode}
+\DeclareDocumentCommand{\simplechapter}{O{\@empty}}{%
+ \def\@chapcntformat##1{%
+ #1~\csname the##1\endcsname\simplechapterdelim\quad%
+ }%
+}
+
+\DeclareDocumentCommand{\restorechapter}{}{%
+\let\@chapcntformat\@seccntformat%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</tocbibind>
+% \fi
+%
+%
+%
+% \iffalse
+%<*tocdata>
+% \fi
+%
+% \part{lwarp-tocdata.sty}
+%
+% \section{tocdata}
+%
+% \credits{Brian Dunn}
+%
+% \DescribePackage{tocdata}
+% \pkg{tocdata} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.69}{2019/03/21}{\pkg{tocdata}: Added.}
+% \changes{v0.73}{2019/07/06}{\pkg{tocdata}: Updated to v2.03.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{tocdata}[2019/07/06]
+% \end{macrocode}
+%
+% \changes{v0.73}{2019/06/30}{\pkg{tocdata}: Honors \cs{tocdataformat}.}
+% \begin{macrocode}
+\renewcommand*{\LWR@maybetocdata}{%
+ \ifdefempty{\TD@thistocdata}{}{%
+ \qquad \InlineClass{authorartist}{\tocdataformat{\TD@thistocdata}}%
+ \def\TD@thistocdata{}
+ }
+}
+% \end{macrocode}
+%
+% \changes{v0.73}{2019/06/30}{\pkg{tocdata}: Improved formatting.}
+% \begin{macrocode}
+\renewrobustcmd{\tocdatapartprint}[4]
+{%
+ \InlineClass{authorartist}{%
+ \qquad --- %
+ \TDoptionalnameprint{#1}\TDoptionalnameprint{#2}#3#4%
+ }%
+}
+
+\@ifundefined{chapter}{}{
+ \let\tocdatachapterprint\tocdatapartprint
+}
+\let\tocdatasectionprint\tocdatapartprint
+\let\tocdatasubsectionprint\tocdatapartprint
+
+\newcommand*{\LWR@TD@settextalign}[1]{%
+ \def\LWR@TD@textalign{justify}%
+ \ifcsstring{TD@#1align}{\centering}%
+ {\def\LWR@TD@textalign{center}}%
+ {}%
+ \ifcsstring{TD@#1align}{\raggedleft}%
+ {\def\LWR@TD@textalign{right}}%
+ {}%
+ \ifcsstring{TD@#1align}{\raggedright}%
+ {\def\LWR@TD@textalign{left}}%
+ {}%
+}
+
+\renewcommand{\TDartistauthorprint}[5]{%
+ \LWR@TD@settextalign{#1}%
+ \begin{BlockClass}[text-align:\LWR@TD@textalign]{floatnotes}%
+ \InlineClass{authorartist}{\TDoptionalnameprint{#2}\TDoptionalnameprint{#3}#4#5}%
+ \end{BlockClass}%
+}
+
+\newcommand*{\LWR@TD@setnamealign}[1]{%
+ \def\LWR@TD@textalign{justify}%
+ \ifcsstring{TD@#1textalign}{\centering}%
+ {\def\LWR@TD@textalign{center}}%
+ {}%
+ \ifcsstring{TD@#1textalign}{\raggedleft}%
+ {\def\LWR@TD@textalign{right}}%
+ {}%
+ \ifcsstring{TD@#1textalign}{\raggedright}%
+ {\def\LWR@TD@textalign{left}}%
+ {}%
+}
+
+\renewcommand{\TDartistauthortextprint}[2]{%
+ \LWR@TD@setnamealign{#1}%
+ \begin{BlockClass}[text-align:\LWR@TD@textalign]{floatnotes}%
+ #2%
+ \end{BlockClass}%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</tocdata>
+% \fi
+%
+%
+%
+% \iffalse
+%<*tocenter>
+% \fi
+%
+% \part{lwarp-tocenter.sty}
+%
+% \section{tocenter}
+%
+% \DescribePackage{tocenter}
+% \pkg{tocenter} is ignored.
+%
+% \changes{v0.56}{2018/04/26}{\pkg{tocenter}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{tocenter}[2004/12/09]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand{\ToCenter}{s o m m}{}
+\NewDocumentCommand{\FromMargins}{s o m m m m}{}
+% \end{macrocode}
+%
+% \iffalse
+%</tocenter>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*tocloft>
+% \fi
+
+% \part{lwarp-tocloft.sty}
+
+% \section{tocloft}
+%
+% \credits {Peter Wilson}
+%
+% \DescribePackage{tocloft}
+% \pkg{tocloft} is emulated.
+% Most user options and macros are ignored and disabled.
+% \cs{newlistof} and \cs{cftchapterprecis} are supported.
+%
+% \limitstocloft
+%
+% \changes{v0.20}{2017/01/03}{\pkg{tocloft}: Added.}
+%
+%
+% Discard all options for \pkg{lwarp-tocloft}:
+
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{tocloft}[2017/08/31]
+% \end{macrocode}
+%
+
+% \begin{noindmacro}{\tocloftpagestyle} \marg{style}
+% \begin{macrocode}
+\newcommand{\tocloftpagestyle}[1]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\cftmarktoc}
+% \begin{macrocode}
+\newcommand*{\cftmarktoc}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\cfttoctitlefont}
+% \begin{macrocode}
+\newcommand*{\cfttoctitlefont}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\cftaftertoctitle}
+% \begin{macrocode}
+\newcommand*{\cftaftertoctitle}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{macrocode}
+\newlength{\cftbeforetoctitleskip}
+\newlength{\cftaftertoctitleskip}
+% \end{macrocode}
+
+
+% \begin{noindmacro}{\cftmarklof}
+% \begin{macrocode}
+\newcommand*{\cftmarklof}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\cftloftitlefont}
+% \begin{macrocode}
+\newcommand*{\cftloftitlefont}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\cftafterloftitle}
+% \begin{macrocode}
+\newcommand*{\cftafterloftitle}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{macrocode}
+\newlength{\cftbeforeloftitleskip}
+\newlength{\cftafterloftitleskip}
+% \end{macrocode}
+
+
+% \begin{noindmacro}{\cftmarklot}
+% \begin{macrocode}
+\newcommand*{\cftmarklot}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\cftlottitlefont}
+% \begin{macrocode}
+\newcommand*{\cftlottitlefont}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\cftafterlottitle}
+% \begin{macrocode}
+\newcommand*{\cftafterlottitle}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{macrocode}
+\newlength{\cftbeforelottitleskip}
+\newlength{\cftafterlottitleskip}
+% \end{macrocode}
+
+
+% \begin{noindmacro}{\cftdot}
+% \begin{macrocode}
+\providecommand*{\cftdot}{.}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\cftdotsep}
+% \begin{macrocode}
+\providecommand*{\cftdotsep}{1}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\cftnodots}
+% \begin{macrocode}
+\providecommand*{\cftnodots}{5000}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\cftdotfill} \marg{sep}
+% \begin{macrocode}
+\providecommand{\cftdotfill}[1]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\cftsetpnumwidth} \marg{length}
+% \begin{macrocode}
+\DeclareDocumentCommand{\cftsetpnumwidth}{m}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\cftsetrmarg} \marg{length}
+% \begin{macrocode}
+\DeclareDocumentCommand{\cftsetrmarg}{m}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\cftpnumalign} \marg{alignment}
+% \begin{macrocode}
+\DeclareDocumentCommand{\cftpnumalign}{m}{}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{macrocode}
+\LWR@providelength{\cftparskip}
+% \end{macrocode}
+
+
+% The part-related items are also provided by \pkg{memoir}:
+% \begin{macrocode}
+\LWR@providelength{\cftbeforepartskip}
+\LWR@providelength{\cftpartindent}
+\LWR@providelength{\cftpartnumwidth}
+\providecommand*{\cftpartfont}{}
+\providecommand*{\cftpartpresnum}{}
+\providecommand*{\cftpartaftersnum}{}
+\providecommand*{\cftpartaftersnumb}{}
+\providecommand*{\cftpartleader}{}
+\providecommand*{\cftpartdotsep}{1}
+\providecommand*{\cftpartpagefont}{}
+\providecommand*{\cftpartafterpnum}{}
+% \end{macrocode}
+%
+% \pkg{memoir} uses the full name ``chapter'' instead of ``chap'':
+% \begin{macrocode}
+\LWR@providelength{\cftbeforechapskip}
+\LWR@providelength{\cftchapindent}
+\LWR@providelength{\cftchapnumwidth}
+\newcommand*{\cftchapfont}{}
+\newcommand*{\cftchappresnum}{}
+\newcommand*{\cftchapaftersnum}{}
+\newcommand*{\cftchapaftersnumb}{}
+\newcommand*{\cftchapleader}{}
+\newcommand*{\cftchapdotsep}{1}
+\newcommand*{\cftchappagefont}{}
+\newcommand*{\cftchapafterpnum}{}
+% \end{macrocode}
+%
+% The following do not appear in \pkg{memoir}:
+% \begin{macrocode}
+\LWR@providelength{\cftbeforesecskip}
+\LWR@providelength{\cftsecindent}
+\LWR@providelength{\cftsecnumwidth}
+\newcommand*{\cftsecfont}{}
+\newcommand*{\cftsecpresnum}{}
+\newcommand*{\cftsecaftersnum}{}
+\newcommand*{\cftsecaftersnumb}{}
+\newcommand*{\cftsecleader}{}
+\newcommand*{\cftsecdotsep}{1}
+\newcommand*{\cftsecpagefont}{}
+\newcommand*{\cftsecafterpnum}{}
+% \end{macrocode}
+
+% \begin{macrocode}
+\LWR@providelength{\cftbeforesubsecskip}
+\LWR@providelength{\cftsubsecindent}
+\LWR@providelength{\cftsubsecnumwidth}
+\newcommand*{\cftsubsecfont}{}
+\newcommand*{\cftsubsecpresnum}{}
+\newcommand*{\cftsubsecaftersnum}{}
+\newcommand*{\cftsubsecaftersnumb}{}
+\newcommand*{\cftsubsecleader}{}
+\newcommand*{\cftsubsecdotsep}{1}
+\newcommand*{\cftsubsecpagefont}{}
+\newcommand*{\cftsubsecafterpnum}{}
+% \end{macrocode}
+
+% \begin{macrocode}
+\LWR@providelength{\cftbeforesubsubsecskip}
+\LWR@providelength{\cftsubsubsecindent}
+\LWR@providelength{\cftsubsubsecnumwidth}
+\newcommand*{\cftsubsubsecfont}{}
+\newcommand*{\cftsubsubsecpresnum}{}
+\newcommand*{\cftsubsubsecaftersnum}{}
+\newcommand*{\cftsubsubsecaftersnumb}{}
+\newcommand*{\cftsubsubsecleader}{}
+\newcommand*{\cftsubsubsecdotsep}{1}
+\newcommand*{\cftsubsubsecpagefont}{}
+\newcommand*{\cftsubsubsecafterpnum}{}
+% \end{macrocode}
+
+% \begin{macrocode}
+\LWR@providelength{\cftbeforeparaskip}
+\LWR@providelength{\cftparaindent}
+\LWR@providelength{\cftparanumwidth}
+\newcommand*{\cftparafont}{}
+\newcommand*{\cftparapresnum}{}
+\newcommand*{\cftparaaftersnum}{}
+\newcommand*{\cftparaaftersnumb}{}
+\newcommand*{\cftparaleader}{}
+\newcommand*{\cftparadotsep}{1}
+\newcommand*{\cftparapagefont}{}
+\newcommand*{\cftparaafterpnum}{}
+% \end{macrocode}
+
+% \begin{macrocode}
+\LWR@providelength{\cftbeforesubparaskip}
+\LWR@providelength{\cftsubparaindent}
+\LWR@providelength{\cftsubparanumwidth}
+\newcommand*{\cftsubparafont}{}
+\newcommand*{\cftsubparapresnum}{}
+\newcommand*{\cftsubparaaftersnum}{}
+\newcommand*{\cftsubparaaftersnumb}{}
+\newcommand*{\cftsubparaleader}{}
+\newcommand*{\cftsubparadotsep}{1}
+\newcommand*{\cftsubparapagefont}{}
+\newcommand*{\cftsubparaafterpnum}{}
+% \end{macrocode}
+
+% \begin{macrocode}
+\LWR@providelength{\cftbeforefigskip}
+\LWR@providelength{\cftfigindent}
+\LWR@providelength{\cftfignumwidth}
+\newcommand*{\cftfigfont}{}
+\newcommand*{\cftfigpresnum}{}
+\newcommand*{\cftfigaftersnum}{}
+\newcommand*{\cftfigaftersnumb}{}
+\newcommand*{\cftfigleader}{}
+\newcommand*{\cftfigdotsep}{1}
+\newcommand*{\cftfigpagefont}{}
+\newcommand*{\cftfigafterpnum}{}
+% \end{macrocode}
+
+% \begin{macrocode}
+\LWR@providelength{\cftbeforesubfigskip}
+\LWR@providelength{\cftsubfigindent}
+\LWR@providelength{\cftsubfignumwidth}
+\newcommand*{\cftsubfigfont}{}
+\newcommand*{\cftsubfigpresnum}{}
+\newcommand*{\cftsubfigaftersnum}{}
+\newcommand*{\cftsubfigaftersnumb}{}
+\newcommand*{\cftsubfigleader}{}
+\newcommand*{\cftsubfigdotsep}{1}
+\newcommand*{\cftsubfigpagefont}{}
+\newcommand*{\cftsubfigafterpnum}{}
+% \end{macrocode}
+
+% \begin{macrocode}
+\LWR@providelength{\cftbeforetabskip}
+\LWR@providelength{\cfttabindent}
+\LWR@providelength{\cfttabnumwidth}
+\newcommand*{\cfttabfont}{}
+\newcommand*{\cfttabpresnum}{}
+\newcommand*{\cfttabaftersnum}{}
+\newcommand*{\cfttabaftersnumb}{}
+\newcommand*{\cfttableader}{}
+\newcommand*{\cfttabdotsep}{1}
+\newcommand*{\cfttabpagefont}{}
+\newcommand*{\cfttabafterpnum}{}
+% \end{macrocode}
+
+% \begin{macrocode}
+\LWR@providelength{\cftbeforesubtabskip}
+\LWR@providelength{\cftsubtabindent}
+\LWR@providelength{\cftsubtabnumwidth}
+\newcommand*{\cftsubtabfont}{}
+\newcommand*{\cftsubtabpresnum}{}
+\newcommand*{\cftsubtabaftersnum}{}
+\newcommand*{\cftsubtabaftersnumb}{}
+\newcommand*{\cftsubtableader}{}
+\newcommand*{\cftsubtabdotsep}{1}
+\newcommand*{\cftsubtabpagefont}{}
+\newcommand*{\cftsubtabafterpnum}{}
+% \end{macrocode}
+
+% \begin{macrocode}
+\DeclareDocumentCommand{\cftsetindents}{m m m}{}
+% \end{macrocode}
+
+% \begin{macrocode}
+\newcommand{\pagenumbersoff}[1]{}
+\newcommand{\pagenumberson}[1]{}
+% \end{macrocode}
+
+
+% \begin{noindmacro}{\newlistentry} \oarg{within} \marg{counter} \marg{ext} \marg{level-1}
+% \changes{v0.44}{2017/11/09}{\pkg{tocloft}: Added \cs{newlistentry}.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\newlistentry}{o m m m}
+{%
+\LWR@traceinfo{newlistentry #2 #3 #4}%
+\IfValueTF{#1}%
+{%
+ \@ifundefined{c@#2}{%
+ \newcounter{#2}[#1]%
+ \expandafter\edef\csname the#2\endcsname{%
+ \expandafter\noexpand\csname the#1\endcsname.\noexpand\arabic{#2}%
+ }%
+ }{}%
+}%
+{%
+ \@ifundefined{c@#2}{%
+ \newcounter{#2}%
+ }{}%
+}%
+\@namedef{l@#2}##1##2{%
+ \hypertocfloat{1}{#2}{#3}{##1}{##2}%
+ \def\cftwhatismyname{#2}% from memoir
+}%
+\expandafter\newlength\csname cftbefore#2skip\endcsname%
+\expandafter\newlength\csname cft#2indent\endcsname%
+\expandafter\newlength\csname cft#2numwidth\endcsname%
+\@namedef{cft#2font}{}%
+\@namedef{cft#2presnum}{}%
+\@namedef{cft#2aftersnum}{}%
+\@namedef{cft#2aftersnumb}{}%
+\@namedef{cft#2leader}{}%
+\@namedef{cft#2dotsep}{1}%
+\@namedef{cft#2pagefont}{}%
+\@namedef{cft#2afterpnum}{}%
+\@namedef{toclevel@#2}{#4}%
+\@namedef{cft#2fillnum}##1{}%
+\LWR@traceinfo{newlistentry done}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\newlistof} \oarg{within} \marg{type} \marg{ext} \marg{listofname}
+%
+% Emulated through the \cs{newfloat} mechanism.
+% \changes{v0.44}{2017/11/09}{\pkg{tocloft}: Improved \cs{newlistof}.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\newlistof}{o m m m}
+{%
+\IfValueTF{#1}
+{\newlistentry[#1]{#2}{#3}{0}}
+{\newlistentry{#2}{#3}{0}}
+\@namedef{ext@#2}{#3}
+\@ifundefined{c@#3depth}{\newcounter{#3depth}}{}
+\setcounter{#3depth}{1}
+\@namedef{cftmark#3}{}
+\@namedef{listof#2}{\listof{#2}{#4}}
+\@namedef{@cftmake#3title}{}
+\expandafter\newlength\csname cftbefore#3titleskip\endcsname
+\expandafter\newlength\csname cftafter#3titleskip\endcsname
+\@namedef{cft#3titlefont}{}
+\@namedef{cftafter#3title}{}
+\@namedef{cft#3prehook}{}
+\@namedef{cft#3posthook}{}
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\cftchapterprecis} \marg{text}
+% \begin{macrocode}
+\newcommand{\cftchapterprecis}[1]{%
+ \cftchapterprecishere{#1}
+ \cftchapterprecistoc{#1}}
+\newcommand{\cftchapterprecishere}[1]{%
+ \begin{quote}\textit{#1}\end{quote}}
+\newcommand{\cftchapterprecistoc}[1]{
+ \addtocontents{toc}{%
+ {
+ \protect\begin{quote}#1\protect\end{quote}}
+ }
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \iffalse
+%</tocloft>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*tocstyle>
+% \fi
+%
+% \part{lwarp-tocstyle.sty}
+%
+% \section{tocstyle}
+%
+% \DescribePackage{tocstyle}
+% \pkg{tocstyle} is ignored.
+%
+% \testthis
+%
+% \changes{v0.44}{2017/11/19}{\pkg{tocstyle}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{tocstyle}[2017/02/23]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\usetocstyle}[2][]{}
+\newcommand*{\deactivatetocstyle}[1][]{}
+\newcommand*{\reactivatetocstyle}[1][]{}
+\NewDocumentCommand{\settocfeature}{o o m m}{}
+\NewDocumentCommand{\settocstylefeature}{o m m}{}
+\NewDocumentCommand{\newtocstyle}{o o m m}{}
+\newcommand*{\aliastoc}[2]{}
+\newcommand*{\showtoc}[2][]{}
+\newcommand{\iftochasdepth}[4]{}
+% \end{macrocode}
+%
+% \iffalse
+%</tocstyle>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*todo>
+% \fi
+%
+% \part{lwarp-todo.sty}
+
+% \section{todo}
+%
+% \credits{Federico Garcia}
+%
+% \DescribePackage{todo}
+% \pkg{todo} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.44}{2017/11/13}{\pkg{todo}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{todo}[2010/03/31]
+% \end{macrocode}
+
+% \begin{macrocode}
+\renewcommand\todoitem[2]{%
+ \refstepcounter{todo}%
+ \item[%
+ \HTMLunicode{2610} \quad
+ \ref{todopage:\thetodo}
+ ] : {\todoformat\ifx#1\todomark\else\textbf{#1} \fi}#2%
+ \label{todolbl:\thetodo}%
+}%
+
+\renewcommand\doneitem[2]{%
+ \stepcounter{todo}%
+ \item[%
+ \HTMLunicode{2611} \quad
+ \ref{todopage:\thetodo}
+ ] \@nameuse{@done\the\c@todo}:
+ {\todoformat\ifx#1\todomark\else\textbf{#1} \fi}#2%
+}
+
+\xpatchcmd{\@displaytodo}
+ {\todoformat #1}{\todoformat \textbf{#1}}{}
+ {\PackageWarning{lwarp-todo}{Unable to patch @displaytodo.}}
+
+\xpatchcmd{\@displayfulltodo}
+ {\todoformat #1}{\todoformat \textbf{#1}}{}
+ {\PackageWarning{lwarp-todo}{Unable to patch @displayfulltodo.}}
+
+\patchcmd{\todoenv}{\itshape see text.}{\textit{see text.}}{}
+ {\PackageWarning{lwarp-todo}{Unable to patch todoenv.}}
+
+\patchcmd{\astodos}{\todoformat #1}{\todoformat \textbf{#1}}{}
+ {\PackageWarning{lwarp-todo}{Unable to patch astodos.}}
+
+\AtBeginDocument{
+ \crefname{todo}{todo}{todos}
+ \Crefname{todo}{Todo}{Todos}
+}
+% \end{macrocode}
+
+% \iffalse
+%</todo>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*todonotes>
+% \fi
+%
+% \part{lwarp-todonotes.sty}
+%
+% \section{todonotes}
+%
+% \credits{Henrik Skov Midtiby}
+%
+% \DescribePackage{todonotes}
+% \pkg{todonotes} is emulated.
+%
+% \limitstodonotes
+%
+% \changes{v0.43}{2017/11/07}{\pkg{todonotes}: Added.}
+% \changes{v0.44}{2017/11/10}{\pkg{todonotes}: Improved.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{todonotes}[2012/07/25]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\if@todonotes@disabled
+\else
+
+\newcommand{\ext@todo}{tdo}
+
+\renewcommand{\l@todo}[2]{\hypertocfloat{1}{todo}{ldo}{#1}{#2}}
+% \end{macrocode}
+%
+% \changes{v0.48}{2018/02/12}{\pkg{todonotes}: Improved \cs{todototoc}.}
+% \begin{macrocode}
+\let\LWRTODONOTES@orig@todototoc\todototoc
+
+\renewcommand*{\todototoc}{%
+\phantomsection%
+\LWRTODONOTES@orig@todototoc%
+}
+
+\renewcommand{\@todonotes@drawMarginNoteWithLine}{
+\fcolorbox
+ {\@todonotes@currentbordercolor}
+ {\@todonotes@currentbackgroundcolor}
+ {\arabic{@todonotes@numberoftodonotes}}
+\marginpar{\@todonotes@drawMarginNote}
+}
+
+\renewcommand{\@todonotes@drawInlineNote}{%
+\fcolorboxBlock%
+ {\@todonotes@currentbordercolor}%
+ {\@todonotes@currentbackgroundcolor}%
+ {%
+ \if@todonotes@authorgiven%
+ {\@todonotes@author:\,}%
+ \fi%
+ \@todonotes@text%
+ }%
+}
+
+\renewcommand{\@todonotes@drawMarginNote}{%
+ \if@todonotes@authorgiven%
+ \@todonotes@author\par%
+ \fi%
+ \arabic{@todonotes@numberoftodonotes}: %
+ \fcolorbox%
+ {\@todonotes@currentbordercolor}%
+ {\@todonotes@currentbackgroundcolor}%
+ {%
+ \@todonotes@sizecommand%
+ \@todonotes@text %
+ }%
+}%
+
+\renewcommand{\@todonotes@drawLineToRightMargin}{}
+
+\renewcommand{\@todonotes@drawLineToLeftMargin}{}
+
+\renewcommand{\missingfigure}[2][]{%
+\setkeys{todonotes}{#1}%
+\addcontentsline{tdo}{todo}{\@todonotes@MissingFigureText: #2}%
+\fcolorboxBlock%
+ {\@todonotes@currentbordercolor}%
+ {\@todonotes@currentfigcolor}%
+ {%
+ \setlength{\fboxrule}{4pt}%
+ \fcolorbox{red}{white}{Missing figure} \quad #2%
+ }
+}
+
+\LetLtxMacro\LWRTODONOTES@orig@todo\@todo
+
+\RenewDocumentCommand{\@todo}{o m}{%
+\begingroup%
+\renewcommand*{\phantomsection}{}%
+\IfValueTF{#1}{%
+ \LWRTODONOTES@orig@todo[#1]{#2}%
+}{%
+ \LWRTODONOTES@orig@todo{#2}%
+}
+\endgroup%
+}
+
+\fi% \if@todonotes@disabled
+% \end{macrocode}
+%
+% \iffalse
+%</todonotes>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*topcapt>
+% \fi
+%
+% \part{lwarp-topcapt.sty}
+%
+% \section{topcapt}
+%
+% \DescribePackage{topcapt}
+% \pkg{topcapt} is emulated.
+%
+% \changes{v0.69}{2019/03/17}{\pkg{topcapt}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{topcapt}[2004/12/11]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LetLtxMacro\topcaption\caption
+% \end{macrocode}
+%
+% \iffalse
+%</topcapt>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*tram>
+% \fi
+%
+% \part{lwarp-tram.sty}
+%
+% \section{tram}
+%
+% \DescribePackage{tram}
+% \pkg{tram} is emulated.
+%
+% The \HTML\ emulation uses a \element{div}, which must not appear inside
+% \trouble[block only]{tram=\pkg{tram}}
+% an \HTML\ \element{span} or an \HTML\ paragraph.
+% For this reason, the \env{tram} environment should only be used to
+% contain paragraphs inside a \cs{parbox} or \env{minipage}.
+% \env{tram} should not be used to mark up inline text.
+%
+% To disable \env{tram}, allowing source compatibility with inline uses:
+% \begin{sourcedisplay}
+% \cs{begin}\{warpHTML\} \\
+% \cs{renewenvironment}\{tram\}[1][]\{\}\{\} \\
+% \cs{end}\{warpHTML\}
+% \end{sourcedisplay}
+% \bigskip
+%
+% \changes{v0.62}{2018/11/15}{\pkg{tram}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{tram}[2013/04/04]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newenvironment{tram}[1][]%
+ {\BlockClass[background:lightgray]{tram}}
+ {\endBlockClass}
+% \end{macrocode}
+%
+% \iffalse
+%</tram>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*transparent>
+% \fi
+%
+% \part{lwarp-transparent.sty}
+%
+% \section{transparent}
+%
+% \credits{Heiko Oberdiek}
+%
+% \DescribePackage{transparent} \pkg{transparent} is emulated.
+% \cs{texttransparent} works for inline objects.
+% \cs{transparent} only works for \cs{includegraphics}.
+%
+% Note that \pkg{transparent} does not work with \XeLaTeX.
+% \trouble[Not \XeLaTeX!]{transparent=\pkg{transparent}}
+%
+% \changes{v0.36}{2017/08/09}{\pkg{transparent}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-transparent}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{transparent}[2016/05/16]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\transparent}[1]{\edef\LWR@opacity{#1}}
+
+\newcommand*{\texttransparent}[2]{%
+\begingroup%
+\transparent{#1}%
+\InlineClass[opacity: #1]{transparent}{#2}%
+\endgroup%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</transparent>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*trimclip>
+% \fi
+%
+% \part{lwarp-trimclip.sty}
+%
+% \section{trimclip}
+%
+% \DescribePackage{trimclip}
+% \pkg{trimclip} is ignored.
+%
+% \changes{v0.57}{2018/05/26}{\pkg{trimclip}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{trimclip}[2018/04/08]
+% \end{macrocode}
+%
+% The third argument, the text, is not touched.
+% This allows \cs{bgroup} / \cs{egroup}, and verbatim content.
+% \begin{macrocode}
+\csdef{trimbox}{\@ifstar\@gobble\@gobble}
+\csletcs{trimbox*}{trimbox}
+\def\endtrimbox{}
+\csletcs{endtrimbox*}{endtrimbox}
+
+\csletcs{clipbox}{trimbox}
+\csletcs{clipbox*}{trimbox}
+\csletcs{endclipbox}{endtrimbox}
+\csletcs{endclipbox*}{endtrimbox}
+
+\csletcs{marginbox}{trimbox}
+\csletcs{marginbox*}{trimbox}
+\csletcs{endmarginbox}{endtrimbox}
+\csletcs{endmarginbox*}{endtrimbox}
+% \end{macrocode}
+%
+% \iffalse
+%</trimclip>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*trivfloat>
+% \fi
+
+% \part{lwarp-trivfloat.sty}
+
+% \section{trivfloat}
+% \label{sec:trivfloat}
+%
+% \credits{Joseph Wright}
+%
+% \DescribePackage{trivfloat}
+% \pkg{trivfloat} is forced to use the built-in \pkg{lwarp}
+% emulation for floats.
+%
+%
+% To create a new float type and change its name:
+% \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
+% \trivfloat{example}
+% \renewcommand{\examplename}{Example Name}
+% \crefname{example}{example}{examples}
+% \Crefname{example}{Example}{Examples}
+% \end{Verbatim}
+%
+%
+% Discard all options for \pkg{lwarp-trivfloat}.
+% This tells \pkg{trivfloat} not to use \pkg{floatrow} or \pkg{memoir}.
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{trivfloat}[2009/04/23]
+\LWR@origRequirePackage{trivfloat}
+% \end{macrocode}
+
+% \DescribeMacro{\tfl@chapter@fix}
+% Nullified at the beginning of the document.
+% Is used by \pkg{trivfloat} to correct float chapter numbers,
+% but is not needed for \pkg{lwarp}.
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+% \begin{macrocode}
+\AtBeginDocument{\DeclareDocumentCommand{\tfl@chapter@fix}{m m}{}}
+% \end{macrocode}
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+
+
+% \subsection{Combining \cs{newfloat}, \cs{trivfloat}, and \pkg{algorithmicx}}
+% \label{sec:combiningfloats}
+% \gindex{newfloat=\pkg{newfloat}>with \pkg{trivfloat}, \pkg{algorithmicx}}
+% \gindex{trivfloat=\pkg{trivfloat}>with \pkg{newfloat}, \pkg{algorithmicx}}
+% \gindex{algorithmicx=\pkg{algorithmicx}>with \pkg{newfloat}, \pkg{trivfloat}}
+%
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+
+% \textred{For both print and \HTML\ output:}
+%
+% When using \pkg{float}, \pkg{trivfloat}, or \pkg{algorithmicx} at the same time,
+% be aware of conflicting file usage.
+% \watchout
+% \pkg{algorithmicx} uses |.loa|.
+% \pkg{trivfloat} by default starts with |.loa| and goes up for additional floats,
+% skipping |.lof| and |.lot|.
+%
+% When using \cs{newfloat},
+% \watchout
+% be sure to manually assign higher letters to the \cs{newfloat}
+% files to avoid |.loa| used by \pkg{algorithmicx}, and any files used by \pkg{trivfloat}.
+% Also avoid using |.lof| and |.lot|.
+%
+% When using \cs{trivfloat}, you may force it to avoid conflicting with
+% \watchout
+% \pkg{algorithmicx} by starting \pkg{trivfloat}'s file extensions with |.lob|:
+%
+% \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
+% \makeatletter
+% \setcounter{tfl@float@cnt}{1} % start trivfloats with .lob
+% \makeatletter
+% \end{Verbatim}
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+% \iffalse
+%</trivfloat>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*truncate>
+% \fi
+%
+% \part{lwarp-truncate.sty}
+%
+% \section{truncate}
+%
+% \DescribePackage{truncate}
+% \pkg{truncate} is ignored.
+%
+% \changes{v0.66}{2019/02/03}{\pkg{truncate}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{truncate}[2001/08/20]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\providecommand{\TruncateMarker}{}
+\newcommand{\truncate}[3][\TruncateMarker]{#3}
+% \end{macrocode}
+%
+% \iffalse
+%</truncate>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*turnthepage>
+% \fi
+%
+% \part{lwarp-turnthepage.sty}
+%
+% \section{turnthepage}
+%
+% \DescribePackage{turnthepage}
+% \pkg{turnthepage} is ignored.
+%
+% \changes{v0.45}{2017/12/19}{\pkg{turnthepage}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{turnthepage}[2011/03/24]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\turnthepage}{}
+% \end{macrocode}
+%
+% \iffalse
+%</turnthepage>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*twoup>
+% \fi
+%
+% \part{lwarp-twoup.sty}
+%
+% \section{twoup}
+%
+% \DescribePackage{twoup}
+% \pkg{twoup} is ignored.
+%
+% \changes{v0.62}{2018/10/16}{\pkg{twoup}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{twoup}[2007/02/26]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\cleartolastpage}{}
+% \end{macrocode}
+%
+% \iffalse
+%</twoup>
+% \fi
+%
+%
+%
+% \iffalse
+%<*typearea>
+% \fi
+%
+% \part{lwarp-typearea.sty}
+%
+% \section{typearea}
+%
+% \credits{Markus Kohm}
+%
+% \DescribePackage{typearea}
+% \pkg{typearea} is emulated.
+%
+% \usedbykomascript
+%
+% \changes{v0.39}{2017/08/28}{\pkg{typearea}: Added.}
+% \changes{v0.44}{2017/11/22}{\pkg{typearea}: Added expert commands.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{typearea}[2018/03/30]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareDocumentCommand{\typearea}{o m}{}
+\DeclareDocumentCommand{\recalctypearea}{}{}
+\@ifundefined{footheight}{\newlength\footheight}{}
+\DeclareDocumentCommand{\areaset}{o m m}{}
+\DeclareDocumentCommand{\activateareas}{}{}
+\DeclareDocumentCommand{\storeareas}{m}{}
+\DeclareDocumentCommand{\BeforeRestoreareas}{s m}{}
+\DeclareDocumentCommand{\AfterRestoreareas}{s m}{}
+\DeclareDocumentCommand{\AfterCalculatingTypearea}{s m}{}
+\DeclareDocumentCommand{\AfterSettingArea}{s m}{}
+% \end{macrocode}
+%
+% \iffalse
+%</typearea>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*typicons>
+% \fi
+%
+% \part{lwarp-typicons.sty}
+%
+% \section{typicons}
+%
+% \credits{Arthur Vigil, Xavier Danaux}
+%
+% \DescribePackage{typicons}
+% \pkg{typicons} is patched for use by \pkg{lwarp}.
+%
+% If \cs{ticon} is used, the name of the icon is used in the \attribute{alt} tag.
+% Otherwise, for each of the individual icon macros, a generic \attribute{alt} tag is used.
+%
+% \changes{v0.67}{2019/02/23}{\pkg{typicons}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{typicons}[2015/05/20]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LetLtxMacro\LWR@orig@symbol\symbol
+
+\let\LWR@orig@typicon@TI\TI
+
+\newcommand*{\LWR@typicon@symbol}[1]{%
+ \begin{lateximage}*[(typicon)][typicon#1]%
+ \begingroup%
+ \LWR@orig@typicon@TI%
+ \LWR@orig@symbol{#1}%
+ \endgroup%
+ \end{lateximage}%
+}
+
+\renewcommand*{\TI}{%
+ \LetLtxMacro\symbol\LWR@typicon@symbol%
+}
+
+\renewcommand*{\ticon}[1]
+{%
+ \begin{lateximage}*[(#1 icon)][typicon#1]%
+ \TI\csname ticon@#1\endcsname%
+ \end{lateximage}%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</typicons>
+% \fi
+%
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*ulem>
+% \fi
+%
+% \part{lwarp-ulem.sty}
+%
+% \section{ulem}
+%
+% \credits{Donald Arseneau}
+%
+% \DescribePackage{ulem} Patched for use by \pkg{lwarp}.
+%
+% \changes{v0.27}{2017/04/02}{\pkg{ulem}: Added.}
+% \changes{v0.62}{2018/11/16}{\pkg{ulem}: Improved compatibility with \pkg{CJKulem}.}
+% \changes{v0.62}{2018/11/17}{\pkg{ulem}: Now works in a \env{lateximage}.}
+%
+% \codehtml
+%
+%
+% Use the original package:
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{ulem}[2012/05/18]
+% \end{macrocode}
+%
+%
+%
+% Basic markup commands, using \CSS:
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@uline}{+m}{%
+ \InlineClass%
+ (text-decoration:underline; text-decoration-skip: auto)%
+ {uline}{\LWR@isolate{#1}}%
+}
+\LWR@formatted{uline}
+
+\NewDocumentCommand{\LWR@HTML@uuline}{+m}{%
+ \InlineClass%
+ (%
+ text-decoration:underline; text-decoration-skip: auto;%
+ text-decoration-style:double%
+ )%
+ {uuline}{\LWR@isolate{#1}}%
+}
+\LWR@formatted{uuline}
+
+\NewDocumentCommand{\LWR@HTML@uwave}{+m}{%
+ \InlineClass%
+ (%
+ text-decoration:underline; text-decoration-skip: auto;%
+ text-decoration-style:wavy%
+ )%
+ {uwave}{\LWR@isolate{#1}}%
+}
+\LWR@formatted{uwave}
+
+\NewDocumentCommand{\LWR@HTML@sout}{+m}{%
+ \InlineClass%
+ (text-decoration:line-through)%
+ {sout}{\LWR@isolate{#1}}%
+}
+\LWR@formatted{sout}
+
+\NewDocumentCommand{\LWR@HTML@xout}{+m}{%
+ \InlineClass%
+ (text-decoration:line-through)%
+ {xout}{\LWR@isolate{#1}}%
+}
+
+\NewDocumentCommand{\LWR@HTML@dashuline}{+m}{%
+ \InlineClass%
+ (%
+ text-decoration:underline;%
+ text-decoration-skip: auto;%
+ text-decoration-style:dashed%
+ )%
+ {dashuline}{\LWR@isolate{#1}}%
+}
+\LWR@formatted{xout}
+
+\NewDocumentCommand{\LWR@HTML@dotuline}{+m}{%
+ \InlineClass%
+ (%
+ text-decoration:underline;%
+ text-decoration-skip: auto;%
+ text-decoration-style: dotted%
+ )%
+ {dotuline}{\LWR@isolate{#1}}%
+}
+\LWR@formatted{dotuline}
+% \end{macrocode}
+%
+% Nullified/emulated macros:
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@markoverwith}{m}{}
+\LWR@formatted{markoverwith}
+
+\NewDocumentCommand{\LWR@HTML@ULon}{+m}{\uline{#1}\egroup}
+\LWR@formatted{ULon}
+% \end{macrocode}
+%
+% \iffalse
+%</ulem>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*umoline>
+% \fi
+%
+% \part{lwarp-umoline.sty}
+%
+% \section{umoline}
+%
+% \credits{Hiroshi Nakashima}
+%
+% \DescribePackage{umoline}
+% \pkg{umoline} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.67}{2019/02/18}{\pkg{umoline}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{umoline}[2000/07/11]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@Underline}[1]{%
+ \InlineClass{uline}{#1}%
+}
+\LWR@formatted{Underline}
+
+\newcommand*{\LWR@HTML@Midline}[1]{%
+ \InlineClass{sout}{#1}%
+}
+\LWR@formatted{Midline}
+
+\newcommand*{\LWR@HTML@Overline}[1]{%
+ \InlineClass{oline}{#1}%
+}
+\LWR@formatted{Overline}
+
+\newcommand*{\LWR@HTML@UMOline}[2]{%
+ \InlineClass{uline}{#2}%
+}
+\LWR@formatted{UMOline}
+
+\NewDocumentCommand{\LWR@HTML@UMOspace}{s m o}{\hspace*{#2}}
+\LWR@formatted{UMOspace}
+
+\NewDocumentCommand{\LWR@HTML@UMOnewline}{s}{\newline}
+\LWR@formatted{UMOnewline}
+% \end{macrocode}
+%
+% \iffalse
+%</umoline>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*underscore>
+% \fi
+%
+% \part{lwarp-underscore.sty}
+%
+% \section{underscore}
+%
+% \DescribePackage{underscore}
+% \pkg{underscore} is ignored.
+%
+% \changes{v0.56}{2018/05/09}{\pkg{underscore}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{underscore}[2006/09/13]
+% \end{macrocode}
+%
+% \iffalse
+%</underscore>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*units>
+% \fi
+%
+% \part{lwarp-units.sty}
+
+% \section{units}
+%
+% \credits{Axel Reichert}
+%
+% \DescribePackage{units}
+% \pkg{units} is patched for use by \pkg{lwarp}.
+%
+% Values are not styled by \CSS, and take the style of the surrounding \HTML\ text.
+%
+% Units are styled according to the print version,
+% so they will be forced to upright roman in \HTML\ if the print version does so.
+% It may be necessary to adjust the document's body \CSS\ to match the print version.
+%
+% \changes{v0.59}{2018/07/13}{\pkg{units}: Added support for \pkg{MathJax.}}
+% \changes{v0.62}{2018/11/15}{\pkg{units}: Improved font control and \CSS,
+% honors \optn{loose}, \optn{tight}.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{units}[1998/08/04]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareRobustCommand*{\LWR@HTML@unit}[2][]{%
+\ifblank{#1}%
+ {\LWR@textcurrentfont{#2}}%
+ {%
+ #1%
+ \ifthenelse{\boolean{B@UnitsLoose}}{~}{\,}%
+ \LWR@textcurrentfont{#2}%
+ }%
+}
+\LWR@formatted{unit}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareRobustCommand*{\LWR@HTML@unitfrac}[3][]{%
+\ifblank{#1}%
+ {%
+ \nicefrac{#2}{#3}%
+ }%
+ {%
+ #1%
+ \ifthenelse{\boolean{B@UnitsLoose}}{~}{\,}%
+ \nicefrac{#2}{#3}%
+ }%
+}
+
+\LWR@formatted{unitfrac}
+% \end{macrocode}
+%
+% For Mathjax:
+% \begin{macrocode}
+\CustomizeMathJax{\newcommand{\unit}[2][]{#1 #2}}
+\CustomizeMathJax{\newcommand{\unitfrac}[3][]{#1 #2/#3}}
+% \end{macrocode}
+
+% ^^A For Ka\TeX:
+% ^^A % \begin{macrocode}
+% ^^A \CustomizeKaTeX{
+% ^^A \gdef\unit{\@ifnextchar[{brace\LWRuniti}{nobrace\LWRunit}}
+% ^^A \gdef\LWRunit#1{none #1 done}
+% ^^A \gdef\LWRuniti[#1]#2{found a brace #1 between #2 done}
+% ^^A }
+% ^^A \CustomizeKaTeX{\gdef\unitfrac[#1]#2#3{#1 #2/#3}}
+% ^^A % \end{macrocode}
+
+
+% \iffalse
+%</units>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*unitsdef>
+% \fi
+%
+% \part{lwarp-unitsdef.sty}
+%
+% \section{unitsdef}
+%
+% \credits{Patrick Happel}
+%
+% \DescribePackage{unitsdef}
+% \pkg{unitsdef} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.62}{2018/11/11}{\pkg{unitsdef}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{unitsdef}[2005/01/04]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand{\unitvaluesep}{\,}
+
+\renewcommand{\unittimes}{\@@setunitsepfalse\HTMLunicode{22c5}}% \cdot
+
+\renewunit{\arcmin}{%
+ \ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
+ {\ensuremath{{}^\prime}}%
+ {\HTMLunicode{2032}}% prime
+}
+
+\renewunit{\arcsec}{%
+ \ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
+ {\ensuremath{{}^{\prime\prime}}}%
+ {\HTMLunicode{2033}}% dbl prime
+}
+
+\renewrobustcmd{\SI}[2]{%
+ \begingroup%
+ \let\unit@@xspace\relax%
+ \unitSIdef\selectfont%
+ \LWR@textcurrentfont{#1#2}% lwarp
+ \endgroup%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</unitsdef>
+% \fi
+%
+%
+%
+% \iffalse
+%<*upref>
+% \fi
+%
+% \part{lwarp-upref.sty}
+%
+% \section{upref}
+%
+% \DescribePackage{upref} \pkg{upref} is ignored.
+%
+% \changes{v0.36}{2017/08/09}{\pkg{upref}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-upref}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{upref}[2007/03/14]
+% \end{macrocode}
+%
+%
+% \iffalse
+%</upref>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*url>
+% \fi
+%
+% \part{lwarp-url.sty}
+
+% \section{url}
+%
+% \credits{Donald Arseneau}
+%
+% \DescribePackage{url}
+% \pkg{url} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.52}{2018/03/29}{\pkg{url}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{url}[2013/09/16]
+% \end{macrocode}
+
+% \pkg{url} uses math mode to print its string inside a group, so the original meaning
+% of math is restored first.
+% \begin{macrocode}
+\LetLtxMacro\LWR@url@origUrl@FormatString\Url@FormatString
+
+\renewcommand*{\Url@FormatString}{%
+ \InlineClass{verbatim}{%
+ \LWR@restoreorigformatting%
+ \LWR@url@origUrl@FormatString%
+ }%
+}
+% \end{macrocode}
+
+% \iffalse
+%</url>
+% \fi
+%
+%
+%
+% \iffalse
+%<*uspace>
+% \fi
+%
+% \part{lwarp-uspace.sty}
+%
+% \section{uspace}
+%
+% \DescribePackage{uspace}
+% \pkg{uspace} is ignored.
+%
+% \changes{v0.61}{2018/09/23}{\pkg{uspace}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{uspace}[2016/11/06]
+% \end{macrocode}
+%
+% \iffalse
+%</uspace>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*verse>
+% \fi
+%
+% \part{lwarp-verse.sty}
+%
+% \section{verse}
+%
+% \credits{Peter Wilson}
+%
+% \DescribePackage{verse}
+% \pkg{verse} is supported and patched by \pkg{lwarp}.
+%
+% \changes{v0.22}{2017/03/02}{\pkg{verse}: Added.}
+%
+% \codehtml
+%
+% Pass all options for \pkg{lwarp-verse}:
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{verse}[2009/09/04]
+% \end{macrocode}
+
+%
+% \limitsverse
+%
+% \bigskip
+%
+% \begin{environment}{verse}
+% \changes{v0.18}{2016/05/13}{Supports verse, memoir packages.}
+% The \env{verse} environment will be placed inside a \HTML\ \element{pre}.
+% \begin{macrocode}
+\AfterEndPreamble{
+\LWR@traceinfo{Patching verse.}
+% \end{macrocode}
+% At the beginning of the \env{verse} environment:
+% \begin{macrocode}
+\AtBeginEnvironment{verse}
+{%
+% \end{macrocode}
+% Use the original \env{list} environment inside a \element{pre} to
+% attempt to preserve formatting.
+% \begin{macrocode}
+\LWR@restoreoriglists%
+% \end{macrocode}
+% \DescribePackage{verse}\DescribeClass{memoir}\gindex{memoir=\pkg{memoir}>verse}
+% The \pkg{verse} or \pkg{memoir} packages can place stanza numbers to the left
+% with their \cs{flagverse} command. \DescribeMacro{\flagverse}
+% Do not allow them to go into the left margin, which would cause \prog{pdfcrop}
+% to crop the entire page further to the left:
+% \DescribeLength{\vleftskip}
+% \begin{macrocode}
+\ifdef{\vleftskip}{%
+\setlength{\vleftskip}{\HTMLvleftskip}
+\setlength{\leftmargini}{\HTMLleftmargini}
+}{}
+\LWR@forcenewpage
+\LWR@atbeginverbatim{3}{verse}%
+}
+% \end{macrocode}
+% After the end of the \env{verse} environment, which places the \element{pre} tag at the
+% regular left margin:
+% \begin{macrocode}
+\AtEndEnvironment{verse}{%
+\leavevmode%
+\LWR@afterendverbatim{1}%
+}
+% \end{macrocode}
+% Patch to place poemtitle inside an \HTML\ \element{span} of class |poemtitle|:
+% \begin{macrocode}
+\ifdef{\poemtitle}{
+\DeclareDocumentCommand{\@vstypeptitle}{m}{%
+ \vspace{\beforepoemtitleskip}%
+ {\InlineClass{poemtitle}{\poemtitlefont #1}\par}%
+ \vspace{\afterpoemtitleskip}%
+ }
+}{}
+
+\LWR@traceinfo{Finished patching verse.}
+}% AfterEndPreamble
+% \end{macrocode}
+% \end{environment}
+
+% \iffalse
+%</verse>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*versonotes>
+% \fi
+%
+% \part{lwarp-versonotes.sty}
+%
+% \section{versonotes}
+%
+% \credits{Norman Gray}
+%
+% \DescribePackage{versonotes}
+% \pkg{versonotes} is emulated.
+%
+% \changes{v0.65}{2018/12/10}{\pkg{versonotes}: Added.}
+% \changes{v0.73}{2019/07/11}{\pkg{versonotes}: Updated to v0.4.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{versonotes}[2019/07/06]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\versonote}[1]{\marginpar{#1}}
+\newdimen\versotextwidth
+\newdimen\versoleftmargin
+\newcommand*{\versolayout}{}
+% \end{macrocode}
+%
+% In case the user changed the page number before loading \pkg{versonotes}:
+% \begin{macrocode}
+\setcounter{page}{1}
+% \end{macrocode}
+%
+% \iffalse
+%</versonotes>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*vertbars>
+% \fi
+%
+% \part{lwarp-vertbars.sty}
+%
+% \section{vertbars}
+%
+% \credits{Peter Wilson}
+%
+% \DescribePackage{vertbars}
+% \pkg{vertbars} is emulated.
+%
+% \changes{v0.49}{2018/02/16}{\pkg{vertbars}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{vertbars}[2010/11/27]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newlength{\barwidth}
+\setlength{\barwidth}{0.4pt}
+\newlength{\barspace}
+\setlength{\barspace}{1em}
+
+\newenvironment{vertbar}{
+ \LWR@forcenewpage
+ \LWR@forceminwidth{\barwidth}
+ \begin{BlockClass}[%
+ border-left: \LWR@printlength{\LWR@atleastonept} solid black ; %
+ padding-left: \LWR@printlength{\barspace}%
+ ]{vertbar}
+}{
+ \end{BlockClass}
+}
+% \end{macrocode}
+%
+% \iffalse
+%</vertbars>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*vmargin>
+% \fi
+%
+% \part{lwarp-vmargin.sty}
+%
+% \section{vmargin}
+%
+% \DescribePackage{vmargin}
+% \pkg{vmargin} is ignored.
+%
+% \changes{v0.48}{2018/02/07}{\pkg{vmargin}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{vmargin}[2004/07/15]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\LWRVM@customsize}[2]{}
+\newcommand*{\setpapersize}[2][]{\ifstrequal{#2}{custom}{\LWRVM@customsize}{}}
+\newcommand*{\setmargins}[8]{}
+\newcommand*{\setmarginsrb}[8]{}
+\newcommand*{\setmargnohf}[4]{}
+\newcommand*{\setmargnohfrb}[4]{}
+\newcommand*{\setmarg}[4]{}
+\newcommand*{\setmargrb}[4]{}
+\newlength{\PaperWidth}
+\setlength{\PaperWidth}{8.5in}
+\newlength{\PaperHeight}
+\setlength{\PaperHeight}{11in}
+\newif\ifLandscape
+% \end{macrocode}
+%
+% \iffalse
+%</vmargin>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*vowel>
+% \fi
+%
+% \part{lwarp-vowel.sty}
+
+% \section{vowel}
+%
+% \credits{FUKUI Rei}
+%
+% \DescribePackage{vowel}
+% \pkg{vowel} is patched for use by \pkg{lwarp}.
+%
+% This package has been tested with \prog{pdflatex} and the Type 1 TIPA fonts
+% using the following package load sequence:
+% \begin{sourcedisplay}
+% \cs{usepackage}[T3,T1]\{fontenc\} \\
+% \cs{usepackage}[utf8]\{inputenc\} \\
+% \cs{usepackage}[noenc]\{tipa\} \\
+% \cs{usepackage}\{vowel\}
+% \end{sourcedisplay}
+% \bigskip
+%
+% \changes{v0.57}{2018/05/22}{\pkg{vowel}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{vowel}[2002/08/08]
+% \end{macrocode}
+
+% \begin{macrocode}
+\renewenvironment{vowel}[1][]
+ {%
+ \begin{lateximage}[(-vowel-~\packagediagramname)]%
+ \@vowel[#1]%
+ }
+ {%
+ \@@vowel%
+ \end{lateximage}%
+ }
+% \end{macrocode}
+
+% \iffalse
+%</vowel>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*vpe>
+% \fi
+%
+% \part{lwarp-vpe.sty}
+%
+% \section{vpe}
+%
+% \DescribePackage{vpe}
+% \pkg{vpe} is ignored.
+%
+% \changes{v0.61}{2018/10/05}{\pkg{vpe}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{vpe}[2012/04/18]
+% \end{macrocode}
+%
+% \iffalse
+%</vpe>
+% \fi
+%
+%
+%
+% \iffalse
+%<*vwcol>
+% \fi
+%
+% \part{lwarp-vwcol.sty}
+%
+% \section{vwcol}
+%
+% \credits{Will Robertson}
+%
+% \DescribePackage{vwcol}
+% \pkg{vwcol} is patched for use with \pkg{lwarp}.
+%
+% \changes{v0.49}{2018/02/16}{\pkg{vwcol}: Added.}
+%
+% The \optn{width} option is ignored.
+% All \env{vwcol} environments adjust to 1--3 equal-width columns, depening on the
+% width of the browser window.
+%
+% The remaining options are supported, except for |lines| and |maxrecursion|.
+%
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{vwcol}[2015/02/10]
+% \end{macrocode}
+%
+% Factored from \cs{vwcol}.
+% Each is given a style tag to append to the final style.
+%
+% \begin{noindmacro}{\LWR@vwcol@addrule} \marg{style tag}
+% \begin{macrocode}
+\newcommand*{\LWR@vwcol@addrule}[1]{%
+ \appto{\LWR@vwcolstyle}{%
+ #1: %
+ \LWR@printlength{\vwcol@rule} solid \LWR@origpound\LWR@vwcol@rulecolor ; %
+ }%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\LWR@vwcol@addrule} \marg{style tag}
+% \begin{macrocode}
+\newcommand*{\LWR@vwcol@addgap}[1]{%
+ \appto{\LWR@vwcolstyle}{%
+ #1: %
+ \LWR@printlength{\vwcol@sep} ; %
+ }%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindenvironment}{vwcol} \marg{key/values}
+%
+% Redefine the environment to add a \HTML\ style.
+% The style is built depending on the required options.
+% \begin{macrocode}
+\renewenvironment*{vwcol}[1][]{%
+% \end{macrocode}
+% New paragraph, and process the options:
+% \changes{v0.73}{2019/06/24}{\pkg{vwcol}: Fix: Paragraph tags.}
+% \begin{macrocode}
+\LWR@stoppars%
+\vwcolsetup{#1}%
+% \end{macrocode}
+% Begin with no style:
+% \begin{macrocode}
+\newcommand*{\LWR@vwcolstyle}{}
+% \end{macrocode}
+% |presep| and |postsep| are created with \HTML\ \attribute{margin}s:
+% \begin{macrocode}
+\if@vwcol@presep
+ \appto{\LWR@vwcolstyle}{margin-left: 1em ; padding-left: .5em ; }
+\fi
+\if@vwcol@postsep
+ \appto{\LWR@vwcolstyle}{margin-right: 1em ; padding-right: .5em ; }
+\fi
+% \end{macrocode}
+% |sep| becomes \attribute{column-gap}:
+% \begin{macrocode}
+\ifdimgreater{\vwcol@sep}{1sp}{
+ \LWR@vwcol@addgap{column-gap}
+ \LWR@vwcol@addgap{-moz-column-gap}
+ \LWR@vwcol@addgap{-webkit-column-gap}
+}{}
+% \end{macrocode}
+% |rule| become \attribute{column-rule}, while
+% |prerule| and |postrule| become \HTML\ borders:
+% \begin{macrocode}
+\convertcolorspec{named}{\vwcol@rulecol}{HTML}\LWR@vwcol@rulecolor%
+\ifdimgreater{\vwcol@rule}{0pt}{
+ \ifdimless{\vwcol@rule}{1pt}{
+ \setlength{\vwcol@rule}{1pt}
+ }{}
+ \LWR@vwcol@addrule{column-rule}
+ \LWR@vwcol@addrule{-moz-column-rule}
+ \LWR@vwcol@addrule{-webkit-column-rule}
+ \if@vwcol@prerule\LWR@vwcol@addrule{border-left}\fi
+ \if@vwcol@postrule\LWR@vwcol@addrule{border-right}\fi
+}{}
+% \end{macrocode}
+% Each of the justify options becomes a \attribute{text-align}.
+% Indentation is added where appropriate.
+% \begin{macrocode}
+\ifdefequal{\vwcol@justify}{\RaggedRight}{
+ \appto{\LWR@vwcolstyle}{text-align: left ; }
+ \ifdimgreater{\vwcol@parindent}{0pt}{
+ \appto{\LWR@vwcolstyle}{%
+ text-indent: \LWR@printlength{\vwcol@parindent} ; %
+ }
+ }{}
+}{}
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\vwcol@justify}{\RaggedLeft}{
+ \appto{\LWR@vwcolstyle}{text-align: right ; }
+}{}
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\vwcol@justify}{\Centering}{
+ \appto{\LWR@vwcolstyle}{text-align: center ; }
+}{}
+% \end{macrocode}
+% \begin{macrocode}
+\ifdefequal{\vwcol@justify}{\justifying}{
+ \appto{\LWR@vwcolstyle}{text-align: justify ; }
+ \ifdimgreater{\vwcol@parindent}{0pt}{
+ \appto{\LWR@vwcolstyle}{%
+ text-indent: \LWR@printlength{\vwcol@parindent} ; %
+ }
+ }{}
+}{}
+% \end{macrocode}
+% Create the \element{div} with the assembled style:
+% \begin{macrocode}
+\BlockClass[\LWR@vwcolstyle]{multicols}
+}
+% \end{macrocode}
+% When the environment ends:
+% \begin{macrocode}
+{
+\endBlockClass
+\LWR@startpars
+}
+% \end{macrocode}
+% \end{noindenvironment}
+%
+% \iffalse
+%</vwcol>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*wallpaper>
+% \fi
+
+% \part{lwarp-wallpaper.sty}
+
+% \section{wallpaper}
+% \label{sec:wallpaper}
+%
+% \credits{Michael H.F. Wilkinson}
+%
+% \changes{v0.20}{2017/01/11}{\pkg{wallpaper}: Added.}
+%
+% \DescribePackage{wallpaper}
+% \pkg{wallpaper} is ignored.
+
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{wallpaper}[2005/01/18]
+% \end{macrocode}
+
+% \begin{macrocode}
+\newcommand*{\CenterWallPaper}[2]{}
+\newcommand*{\ThisCenterWallPaper}[2]{}
+\newcommand*{\TileWallPaper}[3]{}
+\newcommand*{\ThisTileWallPaper}[3]{}
+\newcommand*{\TileSquareWallPaper}[2]{}
+\newcommand*{\ThisTileSquareWallPaper}[2]{}
+\newcommand*{\ULCornerWallPaper}[2]{}
+\newcommand*{\ThisULCornerWallPaper}[2]{}
+\newcommand*{\LLCornerWallPaper}[2]{}
+\newcommand*{\ThisLLCornerWallPaper}[2]{}
+\newcommand*{\URCornerWallPaper}[2]{}
+\newcommand*{\ThisURCornerWallPaper}[2]{}
+\newcommand*{\LRCornerWallPaper}[2]{}
+\newcommand*{\ThisLRCornerWallPaper}[2]{}
+\newcommand*{\ClearWallPaper}{}
+\newlength{\wpXoffset}
+\newlength{\wpYoffset}
+% \end{macrocode}
+
+% \iffalse
+%</wallpaper>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*watermark>
+% \fi
+%
+% \part{lwarp-watermark.sty}
+%
+% \section{watermark}
+%
+% \credits{Alexander I. Rozhenko}
+%
+% \DescribePackage{watermark}
+% \pkg{watermark} is ignored.
+%
+% \changes{v0.44}{2017/11/10}{\pkg{watermark}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{watermark}[2004/12/09]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\watermark}[1]{}
+\newcommand{\leftwatermark}[1]{}
+\newcommand{\rightwatermark}[1]{}
+\newcommand{\thiswatermark}[1]{}
+\newcommand{\thispageheading}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</watermark>
+% \fi
+%
+%
+%
+% \iffalse
+%<*widows-and-orphans>
+% \fi
+%
+% \part{lwarp-widows-and-orphans.sty}
+%
+% \section{widows-and-orphans}
+%
+% \DescribePackage{widows-and-orphans}
+% \pkg{widows-and-orphans} is ignored.
+%
+% \changes{v0.60}{2018/09/17}{\pkg{widows-and-orphans}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{widows-and-orphans}[2018/09/01]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand\WaOsetup{m}{}
+\NewDocumentCommand\WaOparameters{}{}
+\NewDocumentCommand\WaOignorenext{}{}
+% \end{macrocode}
+%
+% \iffalse
+%</widows-and-orphans>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*wrapfig>
+% \fi
+
+% \part{lwarp-wrapfig.sty}
+
+% \section{wrapfig}
+% \label{sec:wrapfig}
+%
+% \credits{Donald Arseneau}
+%
+% \changes{v0.20}{2017/01/11}{\pkg{wrapfig}: Added.}
+%
+% \DescribePackage{wrapfig}
+% \pkg{wrapfig} is emulated.
+
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{wrapfig}[2003/01/31]
+% \end{macrocode}
+%
+%
+% \changes{v0.42}{2017/10/26}{\pkg{wrapfig}: If \progcode{FormatWP}
+% add explicit \HTML\ style.}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@wrapposition}{}
+
+\newcommand*{\LWR@subwrapfigure}[2]{%
+\renewcommand*{\LWR@wrapposition}{}%
+\ifthenelse{%
+ \equal{#1}{r}\OR\equal{#1}{R}\OR%
+ \equal{#1}{o}\OR\equal{#1}{O}%
+}%
+ {\renewcommand*{\LWR@wrapposition}{float:right}}%
+ {\renewcommand*{\LWR@wrapposition}{float:left}}%
+\setlength{\LWR@templengthone}{#2}%
+\LWR@BlockClassWP{%
+ width:\LWR@printlength{\LWR@templengthone}; \LWR@wrapposition; %
+ margin:10pt%
+}%
+{%
+ width:\LWR@printlength{\LWR@templengthone}; \LWR@wrapposition%
+}%
+{marginblock}%
+}
+
+
+\NewDocumentEnvironment{wrapfigure}{o m o m}
+{%
+\LWR@subwrapfigure{#2}{#4}%
+\captionsetup{type=figure}%
+}
+{%
+\endLWR@BlockClassWP%
+}
+
+
+\NewDocumentEnvironment{wraptable}{o m o m}
+{%
+\LWR@subwrapfigure{#2}{#4}%
+\captionsetup{type=table}%
+}
+{%
+\endLWR@BlockClassWP%
+}
+
+
+\NewDocumentEnvironment{wrapfloat}{m o m o m}
+{%
+\LWR@subwrapfigure{#3}{#5}%
+\captionsetup{type=#1}%
+}
+{%
+\endLWR@BlockClassWP%
+}
+
+\newlength{\wrapoverhang}
+% \end{macrocode}
+
+% \iffalse
+%</wrapfig>
+% \fi
+%
+%
+%
+% \iffalse
+%<*xbmks>
+% \fi
+%
+% \part{lwarp-xbmks.sty}
+%
+% \section{xbmks}
+%
+% \DescribePackage{xbmks}
+% \pkg{xbmks} is ignored.
+%
+% \changes{v0.61}{2018/10/05}{\pkg{xbmks}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{xbmks}[2018/07/04]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\xbmksetup}[1]{}
+\NewDocumentCommand{\pdfbookmarkx}{o m o m}{}
+\NewDocumentCommand{\currentpdfbookmarkx}{m o m}{}
+\NewDocumentCommand{\subpdfbookmarkx}{m o m}{}
+\NewDocumentCommand{\belowpdfbookmarkx}{m o m}{}
+% \end{macrocode}
+%
+% \iffalse
+%</xbmks>
+% \fi
+%
+%
+%
+% \addtocontents{toc}{\protect\setcounter{tocdepth}{2}}
+%
+%
+% \iffalse
+%<*xcolor>
+% \fi
+
+% \part{lwarp-xcolor.sty}
+
+% \section{xcolor}
+% \label{sec:xcolor}
+%
+% \credits{Dr. Uwe Kern}
+%
+% \DescribePackage{xcolor}
+% \pkg{xcolor} is supported by lwarp.
+%
+% \changes{v0.36}{2017/08/10}{\pkg{xcolor}: Uses \cs{fboxrule} and \cs{fboxsep}.}
+% \changes{v0.36}{2017/08/10}{\pkg{xcolor}: Added \cs{fcolorboxBlock}, \cs{colorboxBlock}.}
+% \changes{v0.36}{2017/08/10}{\pkg{xcolor}: Fix: Background \progcode{none} in print mode.}
+% \changes{v0.36}{2017/08/12}{\pkg{xcolor}: \cs{fcolorbox} etc. now work inside \env{lateximage}.}
+%
+%
+% \subsection{Limitations}
+%
+% \limitsxcolor
+%
+%
+% \subsection{\pkg{xcolor} definitions: location and timing}
+%
+% The \pkg{lwarp} core and its \pkg{lwarp-xcolor} package are tightly integrated
+% to allow comparable results for print, \HTML,
+% and print inside an \HTML\ \env{lateximage}.
+% This requires a number of definitions and redefintions depending on whether
+% each of \pkg{xcolor} and \env{lateximage} is being used, and whether print
+% or \HTML\ is being generated.
+% Some of these actions are one-time when \pkg{xcolor} is loaded, and others
+% are temporary as \env{lateximage} is used.
+%
+% \begin{description}
+% \item [When \pkg{xcolor} is loaded in print mode:] \
+% No special actions are taken at the time that \pkg{xcolor} is loaded in
+% print mode, but see \cs{AtBeginDocument} below.
+% \item [When \pkg{lwarp-xcolor} is loaded in \HTML\ mode:] \
+% \pkg{xcolor}'s original definitions are saved for later restoration.
+% \cs{LWR@restoreorigformatting} is appended to restore these definitions
+% for use inside a \env{lateximage}.
+% New \HTML-mode definitions are created for \cs{textcolor}, \cs{pagecolor},
+% \cs{nopagecolor}, \cs{colorbox}, \cs{colorboxBlock}, \cs{fcolorbox},
+% \cs{fcolorboxBlock}, and \env{fcolorminipage}.
+% \item [\cs{AtBeginDocument} in print or \HTML\ mode:]
+% See \Cref{sec:xcolorpatches}.
+% If \pkg{xcolor} has been loaded, the print-mode \cs{fcolorbox} is modified
+% to accept a background color of |none|, and additional definitions are created
+% for \pkg{lwarp}'s new macros print-mode macros \cs{colorboxBlock},
+% \cs{fcolorboxBlock}, and \env{fcolorminipage}. The \HTML\ versions of these
+% macros will already have been created by \pkg{lwarp-xcolor} if it has been loaded.
+%
+% For use inside an \HTML\ \env{lateximage},
+% \cs{LWR@restoreorigformatting} is appended to temporarily set these functions
+% to their print-mode versions.
+% \item [In a \env{lateximage} in \HTML\ mode:] \
+% \cs{LWR@restoreorigformatting} temporarily restores the
+% print-mode definitions of \pkg{xcolor}'s functions.
+% See \cs{LWR@restoreorigformatting} on page \pageref{sec:restoreorigformatting}.
+% \end{description}
+%
+% \begin{description}
+%
+% \item [\cs{color}:] \
+% \begin{description}
+% \item [Print:] Used as-is.
+% \item [\HTML:] Ignored by \prog{pdftotext}, and will not appear.
+% \item [\HTML\ \env{lateximage}:] Colors will appear in a \env{lateximage}.
+% \end{description}
+%
+% \item [\cs{textcolor}:] \
+% \begin{description}
+% \item [Print:] Used as-is.
+% \item [\HTML:] Redefined by \pkg{lwarp-xcolor}, page \pageref{sec:textcolor}.
+% \item [\HTML\ \env{lateximage}:] Remembers and reuses the print version.
+% \end{description}
+%
+% \item [\cs{pagecolor}:] \
+% \begin{description}
+% \item [Print:] Used as-is.
+% \item [\HTML:] Ignored.
+% \item [\HTML\ \env{lateximage}:] Colors will be picked up in a \env{lateximage}.
+% \end{description}
+%
+% \item [\cs{nopagecolor}:] \
+% \begin{description}
+% \item [Print:] Used as-is.
+% \item [\HTML:] Ignored.
+% \item [\HTML\ \env{lateximage}:] Colors will be picked up in a \env{lateximage}.
+% \end{description}
+%
+% \item [\cs{colorbox}:] \
+% \begin{description}
+% \item [Print:] Used as-is.
+% \item [\HTML:] Redefined by \pkg{lwarp-xcolor}, page \pageref{sec:colorbox}.
+% \item [\HTML\ \env{lateximage}:] Remembers and reuses the print version.
+% \end{description}
+%
+% \item [\cs{colorboxBlock}:] \
+% \begin{description}
+% \item [Print:] Becomes \cs{colorbox}.
+% \item [\HTML:] Newly defined by \pkg{lwarp-xcolor} to use a \element{div},
+% page \pageref{sec:colorboxBlock}.
+% \item [\HTML\ \env{lateximage}:] Remembers and reuses the print version \cs{colorbox}.
+% \end{description}
+%
+% \item [\cs{fcolorbox}:] \
+% \begin{description}
+% \item [Print:] Modified to allow a background of |none|. \newline
+% \cs{LWR@print@fcolorbox} at \cref{sec:xcolorpatches}
+% \item [\HTML:] Redefined by \pkg{lwarp-xcolor}, page \pageref{sec:fcolorbox}.
+% \item [\HTML\ \env{lateximage}:] Remembers and reuses the print version.
+% \end{description}
+%
+% \item [\cs{fcolorboxBlock}:] \
+% \begin{description}
+% \item [Print:] Becomes \cs{fcolorbox}. \Cref{sec:xcolorpatches}
+% \item [\HTML:] Newly defined by \pkg{lwarp-xcolor} to use a \element{div},
+% page \pageref{sec:fcolorboxBlock}.
+% \item [\HTML\ \env{lateximage}:] Remembers and reuses the print version \cs{fcolorbox}.
+% \end{description}
+%
+% \item [\env{fcolorminipage}:] \
+% \begin{description}
+% \item [Print:] Newly defined in the \pkg{lwarp} core. \newline
+% \env{LWR@print@fcolorminipage} at \cref{sec:xcolorpatches}
+% \item [\HTML:] Newly defined by \pkg{lwarp-xcolor}, page \pageref{sec:fcolorminipage}.
+% \item [\HTML\ \env{lateximage}:] Uses the print version.
+% \end{description}
+%
+% \item [\cs{boxframe}:] \
+% \begin{description}
+% \item [Print:] Used as-is.
+% \item [\HTML:] Redefined by \pkg{lwarp-xcolor}, page \pageref{sec:boxframe}.
+% \item [\HTML\ \env{lateximage}:] Remembers and reuses the print version.
+% \end{description}
+%
+% \end{description}
+%
+%
+% \subsection{Package loading}
+%
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{xcolor}[2016/05/11]
+% \end{macrocode}
+
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+%
+%
+% \subsection{Remembering and restoring original definitions}
+%
+% Remember the following print-mode actions to be restored
+% when inside a \env{lateximage} environment:
+% \begin{macrocode}
+\LetLtxMacro\LWR@print@pagecolor\pagecolor
+\LetLtxMacro\LWR@print@nopagecolor\nopagecolor
+% \end{macrocode}
+%
+% Inside a \env{lateximage} the following gets restored to their print-mode actions:
+% \margintag{\small\cs{LWR@restoreorigformatting}}
+% \begin{macrocode}
+\appto\LWR@restoreorigformatting{%
+\LetLtxMacro\pagecolor\LWR@print@pagecolor%
+\LetLtxMacro\nopagecolor\LWR@print@nopagecolor%
+}
+% \end{macrocode}
+%
+%
+% \subsection{\HTML\ color style}
+%
+% \begin{noindmacro}{\LWR@findcurrenttextcolor}
+% \changes{v0.44}{2017/11/10}{\pkg{xcolor}: Added \cs{LWR@findcurrenttextcolor}.}
+% Sets \cs{LWR@tempcolor} to the current color.
+% \begin{macrocode}
+\renewcommand*{\LWR@findcurrenttextcolor}{%
+\protect\colorlet{LWR@current@color}{.}%
+\protect\convertcolorspec{named}{LWR@current@color}{HTML}\LWR@tempcolor%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\LWR@currenttextcolorstyle}
+% Prints a color style for the current color.
+% \changes{v0.44}{2017/11/10}{\pkg{xcolor}: Added \cs{LWR@currenttextcolorstyle}.}
+% \begin{macrocode}
+\newcommand*{\LWR@currenttextcolorstyle}{%
+\LWR@findcurrenttextcolor%
+\ifdefstring{\LWR@tempcolor}{000000}%
+{}%
+{color: \LWR@origpound\LWR@tempcolor ; }%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{macro}{\LWR@textcurrentcolor} \marg{text}
+% Like \cs{textcolor} but uses the current \cs{color} instead.
+% \changes{v0.44}{2017/11/10}{\pkg{xcolor}: Added \cs{LWR@textcurrentcolor}.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\LWR@textcurrentcolor}{m}{%
+\begingroup%
+\LWR@FBcancel%
+\LWR@findcurrenttextcolor%
+\InlineClass[color:\LWR@origpound\LWR@tempcolor]{textcolor}{%
+ \renewcommand*{\LWR@currenttextcolor}{\LWR@origpound\LWR@tempcolor}%
+ #1%
+}%
+\endgroup%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{noindmacro}{\LWR@colorstyle} \marg{2: model} \marg{3: color}
+%
+% \changes{v0.19}{2016/06/01}{Supports colored \cs{rule}.}
+% \changes{v0.36}{2017/08/11}{\pkg{xcolor}: Refactored \cs{LWR@colorstyle}.}
+%
+% For a color style, prints the color converted to \HTML\ colors.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@colorstyle}{m m}{%
+\begingroup%
+\LWR@FBcancel%
+% \end{macrocode}
+% Use the \pkg{xcolor} package to convert to an \HTML\ color space:
+% \begin{macrocode}
+\convertcolorspec{#1}{#2}{HTML}\LWR@tempcolor%
+% \end{macrocode}
+% Print the converted color:
+% \begin{macrocode}
+\LWR@origpound\LWR@tempcolor%
+\endgroup%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{macro}{\LWR@backgroundcolor}
+% \oarg{model} \marg{color} \marg{text}
+%
+% Similar to \cs{textcolor}, but prints black text against a color background.
+%
+% Converted into an \HTML\ hex color span.
+% \changes{v0.44}{2017/11/10}{Added.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@backgroundcolor}{O{named} m m}{%
+\begingroup%
+\LWR@FBcancel%
+\InlineClass[background:\LWR@colorstyle{#1}{#2}]{backgroundcolor}{%
+#3%
+}%
+\endgroup%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{\HTML\ border}
+%
+% \begin{noindmacro}{\LWR@borderpadding} \marg{colorstyle} \marg{color}
+% Prints the \HTML\ attributes for a black border and padding.
+%
+% \cs{LWR@forceminwidth} must be used first in order to set the border width.
+%
+% \begin{macrocode}
+\newcommand*{\LWR@borderpadding}[2]{%
+border:\LWR@printlength{\LWR@atleastonept} solid \LWR@colorstyle{#1}{#2} ; %
+padding:\LWR@printlength{\fboxsep}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \subsection{High-level macros}
+%
+% \begin{macro}{\color}
+% \oarg{model} \marg{color}
+%
+% The current \cs{color} is used by \HTML\ rules and frames, but
+% \watchout
+% does not affect the current \HTML\ text output, due to
+% the lack of \HTML\ states and scoping limitations.
+% Use \cs{textcolor} if possible.
+%
+% \changes{v0.73}{2019/06/14}{Added \HTML\ support.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@color}{o m}{%
+\IfValueTF{#1}{%
+ \LWR@print@color[#1]{#2}%
+ \convertcolorspec{#1}{#2}{HTML}\LWR@tempcolor%
+}{%
+ \LWR@print@color{#2}%
+ \convertcolorspec{named}{#2}{HTML}\LWR@tempcolor%
+}%
+\edef\LWR@currenttextcolor{\LWR@origpound\LWR@tempcolor}%
+}
+
+\LWR@formatted{color}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \label{sec:textcolor}
+% \begin{macro}{\textcolor}
+% \oarg{model} \marg{color} \marg{text}
+%
+% Converted into an \HTML\ hex color span.
+%
+% \changes{v0.57}{2018/06/02}{\pkg{xcolor}: New system for switching print and \HTML\ outputs.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@textcolor}{o m m}{%
+\begingroup%
+\IfValueTF{#1}{%
+ \color[#1]{#2}%
+}{%
+ \color{#2}%
+}
+\InlineClass[color:\LWR@currenttextcolor]{textcolor}{#3}%
+\endgroup%
+}%
+
+\LWR@formatted{textcolor}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\pagecolor}
+% \oarg{model} \marg{color}
+%
+% Ignored. Use \CSS\ instead.
+% \begin{macrocode}
+\renewcommand*{\pagecolor}[2][named]{}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\nopagecolor}
+% Ignored.
+% \changes{v0.44}{2017/11/19}{\pkg{xcolor}: Fix for \cs{nopagecolor}.}
+% \begin{macrocode}
+\renewcommand*{\nopagecolor}{}
+% \end{macrocode}
+% \end{macro}
+
+
+% \label{sec:colorbox}
+% \begin{macro}{\colorbox}
+% \oarg{model} \marg{color} \marg{text}
+%
+% Converted into an \HTML\ hex background color \element{span}.
+%
+% \changes{v0.57}{2018/06/02}{\pkg{xcolor}: New system for switching print and \HTML\ outputs.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@colorbox}{O{named} m +m}{%
+\begingroup%
+\LWR@FBcancel%
+\InlineClass[%
+background:\LWR@colorstyle{#1}{#2} ; %
+padding:\LWR@printlength{\fboxsep}%
+]{colorbox}{#3}%
+\endgroup%
+}
+
+\AtBeginDocument{
+\LWR@formatted{colorbox}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \label{sec:colorboxBlock}
+% \begin{macro}{\colorboxBlock} \oarg{model} \marg{color} \marg{text}
+%
+% Converted into an \HTML\ hex background color \element{div}.
+%
+% \changes{v0.57}{2018/06/02}{\pkg{xcolor}: New system for switching print and \HTML\ outputs.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@colorboxBlock}{O{named} m +m}{%
+\begingroup%
+\LWR@FBcancel%
+% \end{macrocode}
+% \changes{v0.62}{2018/11/11}{Fix: Horiz white space.}
+% \begin{macrocode}
+\LWR@stoppars%
+% \end{macrocode}
+% \begin{macrocode}
+\begin{BlockClass}[%
+background:\LWR@colorstyle{#1}{#2} ; %
+padding:\LWR@printlength{\fboxsep}%
+]{colorboxBlock}
+#3
+\end{BlockClass}%
+\endgroup%
+% \end{macrocode}
+% Prevent paragraph tags around horizontal white space
+% until the start of the next paragraph:
+% \changes{v0.62}{2018/11/11}{Fix: Horiz white space.}
+% \begin{macrocode}
+\global\booltrue{LWR@minipagethispar}%
+}
+
+\AtBeginDocument{
+\LWR@formatted{colorboxBlock}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \label{sec:fcolorbox}
+% \begin{macro}{\fcolorbox}
+% \oarg{framemodel} \marg{framecolor} \oarg{boxmodel} \marg{boxcolor} \marg{text}
+%
+% Converted into a framed \HTML\ hex background color span.
+%
+% A background color of |none| creates a colored frame without a background color.
+%
+% \changes{v0.57}{2018/06/02}{\pkg{xcolor}: New system for switching print and \HTML\ outputs.}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@fcolorbox}{O{named} m O{named} m +m}{%
+\LWR@traceinfo{HTML fcolorbox #2 #4}%
+\begingroup%
+\LWR@FBcancel%
+\LWR@forceminwidth{\fboxrule}%
+\ifthenelse{\equal{#4}{none}}%
+ {% no background color
+ \InlineClass[%
+ \LWR@borderpadding{#1}{#2}%
+ ]{fcolorbox}{#5}%
+ }%
+ {% yes background color
+ \InlineClass[%
+ \LWR@borderpadding{#1}{#2} ; %
+ background:\LWR@colorstyle{#3}{#4}%
+ ]{fcolorbox}{#5}%
+ }%
+\endgroup%
+}
+
+\AtBeginDocument{
+\LWR@formatted{fcolorbox}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \label{sec:fcolorboxBlock}
+% \begin{macro}{\fcolorboxBlock}
+% \oarg{framemodel} \marg{framecolor} \oarg{boxmodel} \marg{boxcolor} \marg{text}
+%
+% Converted into a framed \HTML\ hex background color span.
+%
+% A background color of |none| creates a colored frame without a background color.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@HTML@fcolorboxBlock}{O{named} m O{named} m +m}{%
+\LWR@traceinfo{HTML fcolorboxBlock #2 #4}%
+\begingroup%
+\LWR@FBcancel%
+\LWR@forceminwidth{\fboxrule}%
+% \end{macrocode}
+% \changes{v0.62}{2018/11/11}{Fix: Horiz white space.}
+% \begin{macrocode}
+\LWR@stoppars%
+% \end{macrocode}
+% \begin{macrocode}
+\ifthenelse{\equal{#4}{none}}%
+ {% no background color
+ \begin{BlockClass}[%
+ \LWR@borderpadding{#1}{#2}%
+ ]{fcolorboxBlock}
+ #5
+ \end{BlockClass}%
+ }%
+ {% yes background color
+ \convertcolorspec{#3}{#4}{HTML}\LWR@tempcolortwo%
+ \begin{BlockClass}[%
+ background:\LWR@origpound\LWR@tempcolortwo\ ; %
+ \LWR@borderpadding{#1}{#2}%
+ ]{fcolorboxBlock}
+ #5
+ \end{BlockClass}%
+ }%
+\endgroup%
+% \end{macrocode}
+% Prevent paragraph tags around horizontal white space
+% until the start of the next paragraph:
+% \changes{v0.62}{2018/11/11}{Fix: Horiz white space.}
+% \begin{macrocode}
+\global\booltrue{LWR@minipagethispar}%
+\LWR@traceinfo{HTML fcolorboxBlock done}%
+}
+
+\AtBeginDocument{
+\LWR@formatted{fcolorboxBlock}
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \label{sec:fcolorminipage}
+% Creates a framed \HTML\ \element{div} around its contents.
+%
+% A print-output version is defined in the \pkg{lwarp} core: \cref{sec:xcolorpatches}
+%
+% \changes{v0.34}{2017/07/31}{Added.}
+%
+% \begin{noindmacro}{\LWR@subfcolorminipage}
+% \marg{framemodel} \marg{framecolor} \marg{background tag} \marg{height}
+% \begin{macrocode}
+\NewDocumentCommand{\LWR@subfcolorminipage}{m m m m}{%
+% \end{macrocode}
+% \changes{v0.62}{2018/11/11}{Fix: Horiz white space.}
+% \begin{macrocode}
+\LWR@stoppars%
+% \end{macrocode}
+% \begin{macrocode}
+\begin{BlockClass}[%
+#3%
+\LWR@borderpadding{#1}{#2} ; %
+\IfValueT{#4}{height:\LWR@printlength{\LWR@tempheight} ; }%
+width:\LWR@printlength{\LWR@tempwidth}%
+]{fcolorminipage}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{environment}{fcolorminipage}
+% \oarg{1:framemodel} \marg{2:framecolor} \oarg{3:boxmodel} \marg{4:boxcolor}
+% \oarg{5:align} \oarg{6:height} \oarg{7:inner-align} \marg{8:width}
+%
+% \begin{macrocode}
+\NewDocumentEnvironment{LWR@HTML@fcolorminipage}{O{named} m O{named} m O{c} o o m}
+{%
+\LWR@FBcancel%
+\setlength{\LWR@tempwidth}{#8}%
+\IfValueT{#6}{\setlength{\LWR@tempheight}{#6}}%
+\LWR@forceminwidth{\fboxrule}%
+\convertcolorspec{#1}{#2}{HTML}\LWR@tempcolor%
+\ifthenelse{\equal{#4}{none}}%
+ {\LWR@subfcolorminipage{#1}{#2}{}{#6}}%
+ {%
+ \convertcolorspec{#3}{#4}{HTML}\LWR@tempcolortwo%
+ \LWR@subfcolorminipage{#1}{#2}%
+ {background:\LWR@origpound\LWR@tempcolortwo\ ; }%
+ {#6}%
+ }%
+}%
+{%
+ \end{BlockClass}%
+% \end{macrocode}
+% Prevent paragraph tags around horizontal white space
+% until the start of the next paragraph:
+% \changes{v0.62}{2018/11/11}{Fix: Horiz white space.}
+% \begin{macrocode}
+ \global\booltrue{LWR@minipagethispar}%
+}
+
+\AtBeginDocument{
+\LWR@formattedenv{fcolorminipage}
+}
+% \end{macrocode}
+% \end{environment}
+%
+%
+%
+% \label{sec:boxframe}
+% \begin{macro}{\boxframe} \marg{width} \marg{height} \marg{depth}
+%
+% The depth is added to the height, but the box is not decended below
+% by the depth. \cs{textcolor} is honored.
+%
+% \changes{v0.57}{2018/06/02}{\pkg{xcolor}: Fix: Colored \cs{boxframe}.}
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@boxframe}[3]{%
+{%
+\setlength{\LWR@tempwidth}{#1}%
+\setlength{\LWR@tempheight}{#2}%
+\addtolength{\LWR@tempheight}{#3}%
+\LWR@forceminwidth{\fboxrule}%
+\LWR@findcurrenttextcolor%
+\InlineClass[%
+display:inline-block ; %
+border:\LWR@printlength{\LWR@atleastonept} solid \LWR@currenttextcolor{} ; %
+width:\LWR@printlength{\LWR@tempwidth} ; %
+height:\LWR@printlength{\LWR@tempheight}%
+]{boxframe}{}%
+}%
+}
+
+\LWR@formatted{boxframe}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Row colors}
+% \changes{v0.49}{2018/02/17}{\pkg{xcolor}: Added tabular row colors.}
+%
+% \begin{noindmacro}{\rowc@l@rs} \oarg{cmds} \marg{startrow} \marg{odd color} \marg{even color}
+% \begin{macrocode}
+\newcommand*{\LWR@xcolortempcolor}{}
+
+\def\rowc@l@rs[#1]#2#3#4%
+{
+\global\rownum=1
+ \global\@rowcolorstrue
+ \@ifxempty{#3}%
+ {\def\@oddrowcolor{\@norowcolor}}%
+ {%
+ \convertcolorspec{named}{#3}{HTML}\LWR@xcolortempcolor%
+ \edef\@oddrowcolor{%
+ \csdef{LWR@xcolorrowHTMLcolor}{\LWR@xcolortempcolor}%
+ }%
+ }%
+ \@ifxempty{#4}%
+ {\def\@evenrowcolor{\@norowcolor}}%
+ {%
+ \convertcolorspec{named}{#4}{HTML}\LWR@xcolortempcolor%
+ \edef\@evenrowcolor{%
+ \csdef{LWR@xcolorrowHTMLcolor}{\LWR@xcolortempcolor}%
+ }%
+ }%
+ \if@rowcmd
+ \def\@rowcolors
+ {%
+% #1%
+ \if@rowcolors
+% \noalign{%
+ \relax\ifnum\rownum<#2\@norowcolor\else
+ \ifodd\rownum\@oddrowcolor\else\@evenrowcolor\fi\fi%
+% }%
+ \fi%
+ }%
+ \else
+ \def\@rowcolors
+ {%
+ \if@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@xcolorrowHTMLcolor}{}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+
+% \begin{noindmacro}{\@rowc@lors} Executed at the end of each row.
+% \begin{macrocode}
+\def\@rowc@lors{%
+% \noalign{%
+ \global\advance\rownum\@ne%
+% }%
+ \@rowcolors%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+%
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+%
+% \iffalse
+%</xcolor>
+% \fi
+%
+%
+% \addtocontents{toc}{\protect\setcounter{tocdepth}{0}}
+%
+%
+%
+% \iffalse
+%<*xechangebar>
+% \fi
+%
+% \part{lwarp-xechangebar.sty}
+%
+% \section{xechangebar}
+%
+% \DescribePackage{xechangebar}
+% \pkg{xechangebar} is ignored
+%
+% \changes{v0.62}{2018/10/18}{\pkg{xechangebar}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{xechangebar}[2017/08/03]
+\LWR@origRequirePackage{lwarp-changebar}
+% \end{macrocode}
+%
+% \iffalse
+%</xechangebar>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*xellipsis>
+% \fi
+%
+% \part{lwarp-xellipsis.sty}
+
+% \section{xellipsis}
+%
+% \credits{Donald P. Goodman III}
+%
+% \DescribePackage{xellipsis}
+% \pkg{xellipsis} is patched for use by \pkg{lwarp}.
+%
+% When non-zero, each of the spaces is converted to an \HTML\ thin unbreakable space.
+%
+% \changes{v0.57}{2018/05/15}{\pkg{xellipsis}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{xellipsis}[2015/11/01]
+% \end{macrocode}
+
+% \begin{macrocode}
+\newcommand*{\LWR@xellipsespace}[1]{%
+\ifdim#1=0pt\else%
+ \ifdim#1<\fontdimen2\font%
+ \,%
+ \else%
+ ~%
+ \fi%
+\fi%
+}
+
+\def\xelip{%
+\mbox{%
+ \LWR@xellipsespace{\xelipprebef}%
+ \xelipprechar%
+ \LWR@xellipsespace{\xelippreaft}%
+ \LWR@xellipsespace{\xelipbef}%
+ \xelipchar%
+ \xel@loopi = 1%
+ \loop\ifnum\xelipnum>\xel@loopi%
+ \advance\xel@loopi by1%
+ \LWR@xellipsespace{\xelipgap}%
+ \xelipchar%
+ \repeat%
+ \LWR@xellipsespace{\xelipaft}%
+ \LWR@xellipsespace{\xelippostbef}%
+ \xelippostchar%
+ \LWR@xellipsespace{\xelippostaft}%
+}%
+}%
+% \end{macrocode}
+
+% \iffalse
+%</xellipsis>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*xetexko-vertical>
+% \fi
+%
+% \part{lwarp-xetexko-vertical.sty}
+%
+% \section{xetexko-vertical}
+%
+% \credits{Dohyun Kim}
+%
+% \DescribePackage{xetexko-vertical}
+% \pkg{xetexko-vertical} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.20}{2017/01/11}{\pkg{xetexko-vertical}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@loadbefore{xetexko-vertical}
+
+\LWR@ProvidesPackagePass{xetexko-vertical}[2018/04/06]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand{\verticaltypesetting}{}
+\renewenvironment{vertical}[1]{\BlockClass{verticalrl}}{\endBlockClass}
+\renewenvironment{horizontal}[1]{\BlockClass{horizontaltb}}{\endBlockClass}
+\renewcommand{\vertlatin}[1]{#1}
+% \end{macrocode}
+%
+% \iffalse
+%</xetexko-vertical>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*xfakebold>
+% \fi
+%
+% \part{lwarp-xfakebold.sty}
+%
+% \section{xfakebold}
+%
+% \credits{Herbert Voß}
+%
+% \DescribePackage{xfakebold}
+% \pkg{xfakebold} is patched for use by \pkg{lwarp},
+% and additional underlying support is found in the \pkg{lwarp} core.
+%
+% Note that the print version resets to unbold at each page break,
+% \trouble[page breaks]{xfakebold=\pkg{xfakebold}}
+% whereas the \HTML\ version maintains the bold state until it is undone.
+%
+% \changes{v0.67}{2019/02/17}{\pkg{xfakebold}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{xfakebold}[2018/07/25]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\let\LWR@orig@setBold\setBold
+\let\LWR@orig@unsetBold\unsetBold
+\renewcommand*{\setBold}{\booltrue{LWR@xfakebold}}
+\renewcommand*{\unsetBold}{\boolfalse{LWR@xfakebold}}
+
+\renewcommand*{\LWR@applyxfakebold}{%
+ \ifbool{LWR@xfakebold}{\LWR@orig@setBold}{\LWR@orig@unsetBold}%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</xfakebold>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*xfrac>
+% \fi
+
+% \part{lwarp-xfrac.sty}
+
+% \section{xfrac}
+% \label{sec:xfrac}
+%
+% \credits{The \LaTeX3 Project}
+%
+% \DescribePackage{xfrac} Supported by adding \pkg{xfrac} instances.
+%
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{xfrac}[2018-08-23]
+% \end{macrocode}
+
+% In the user's document preamble, \pkg{lwarp} should be loaded
+% after font-related setup.
+% \trouble[font size]{xfrac=\pkg{xfrac}}
+% During \HTML\ conversion, this font is used by \pkg{lwarp}
+% to generate its initial \PDF\ output containing \HTML\ tags,
+% later to be converted by \prog{pdftotext} to a plain text file.
+% While the text may be in any font which \prog{pdftotext} can read, the math is
+% directly converted into \SVG\ images using this same user-selected font.
+% |xfrac| below is set for the Latin Modern (lmr) font.
+% If another font is used, it may be desirable to redefine
+% \cs{xfracHTMLfontsize} with a different em size.
+
+
+
+
+% \DescribeMacro{\sfrac} \oarg{instance} \marg{num} \oarg{sep} \marg{denom}
+%
+% A text-mode instance for the default font is provided below.
+% The numerator and denominator formats are adjusted to encase everything
+% in \HTML\ tags. \cs{scalebox} is made null inside the numerator and
+% denominator, since the \HTML\ tags should not be scaled, and we do not
+% want to introduce additional \HTML\ tags for scaling.
+%
+% In math mode, which will appear inside a \env{lateximage}, no adjustments
+% are necessary.
+
+% \codeall
+% \begin{macrocode}
+\begin{warpall}
+% \end{macrocode}
+
+
+% \begin{macro}{\xfracHTMLfontsize}
+% \changes{v0.19}{2016/06/06}{Added.}
+% \gindex{font>size>xfrac=\pkg{xfrac}}
+% User-redefinable macro which controls the font size of the fraction.
+% \begin{macrocode}
+\newcommand*{\xfracHTMLfontsize}{.6em}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\end{warpall}
+% \end{macrocode}
+
+
+% \codehtml
+% \begin{macrocode}
+\begin{warpHTML}
+% \end{macrocode}
+
+
+% Instances of \pkg{xfrac} for various font choices:
+% \margintag{instances}
+%
+% Produce \CSS\ for a small raised numerator and
+% a small denominator.
+%
+% Scaling is turned off so that \prog{pdftotext} correctly reads the result.
+%
+% \changes{v0.16}{2016/04/07}{\pkg{xfrac}: Adjusted for the use of any font:}
+% \changes{v0.48}{2018/02/13}{\pkg{xfrac}: Fix: Added groups around super/subscripts
+% to localize \env{LWR@nestspan} changes.}
+% \changes{v0.57}{2018/06/01}{\pkg{xfrac}: Improved print/HTML \cs{scalebox} control.}
+% \changes{v0.62}{2018/11/15}{\pkg{xfrac}: Improved \CSS.}
+% \begin{macrocode}
+\DeclareInstance{xfrac}{default}{text}{
+ numerator-format = {%
+ \begingroup%
+ \RenewDocumentCommand{\scalebox}{m o m}{##3}%
+ \InlineClass{numerator}{#1}\,%
+ \endgroup%
+ },
+ denominator-format = {%
+ \begingroup%
+ \RenewDocumentCommand{\scalebox}{m o m}{##3}%
+ \InlineClass{denominator}{#1}%
+ \endgroup%
+ },
+% \end{macrocode}
+% For \prog{pdftotext}, do not scale the text:
+% \begin{macrocode}
+ scaling = false
+}
+
+\DeclareInstance{xfrac}{lmr}{text}{
+ numerator-format = {%
+ \begingroup%
+ \RenewDocumentCommand{\scalebox}{m o m}{##3}%
+ \InlineClass{numerator}{#1}\,%
+ \endgroup%
+ },
+ denominator-format = {%
+ \begingroup%
+ \RenewDocumentCommand{\scalebox}{m o m}{##3}%
+ \InlineClass{denominator}{#1}%
+ \endgroup%
+ },
+% \end{macrocode}
+% For \prog{pdftotext}, do not scale the text:
+% \begin{macrocode}
+ scaling = false
+}
+
+\DeclareInstance{xfrac}{lmss}{text}{
+ numerator-format = {%
+ \begingroup%
+ \RenewDocumentCommand{\scalebox}{m o m}{##3}%
+ \InlineClass{numerator}{#1}\,%
+ \endgroup%
+ },
+ denominator-format = {%
+ \begingroup%
+ \RenewDocumentCommand{\scalebox}{m o m}{##3}%
+ \InlineClass{denominator}{#1}%
+ \endgroup%
+ },
+% \end{macrocode}
+% For \prog{pdftotext}, do not scale the text:
+% \begin{macrocode}
+ scaling = false
+}
+
+\DeclareInstance{xfrac}{lmtt}{text}{
+ numerator-format = {%
+ \begingroup%
+ \RenewDocumentCommand{\scalebox}{m o m}{##3}%
+ \InlineClass{numerator}{#1}\,%
+ \endgroup%
+ },
+ denominator-format = {%
+ \begingroup%
+ \RenewDocumentCommand{\scalebox}{m o m}{##3}%
+ \InlineClass{denominator}{#1}%
+ \endgroup%
+ },
+% \end{macrocode}
+% For \prog{pdftotext}, do not scale the text:
+% \begin{macrocode}
+ scaling = false
+}
+% \end{macrocode}
+
+
+% \begin{macrocode}
+% \end{macrocode}
+
+
+% \begin{macrocode}
+\end{warpHTML}
+% \end{macrocode}
+%
+% \iffalse
+%</xfrac>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*xltabular>
+% \fi
+
+% \part{lwarp-xltabular.sty}
+
+% \section{xltabular}
+%
+% \credits{Rolf Niepraschk, Herbert Voß}
+%
+% \DescribePackage{xltabular}
+% \pkg{xltabular} is emulated by \pkg{lwarp}.
+%
+% \changes{v0.57}{2018/05/25}{\pkg{xltabular}: Added.}
+%
+% \codehtml
+%
+% Relies on \pkg{tabularx}.
+%
+% At present, an \env{xltabular} without a caption or with only a \cs{caption*}
+% \trouble[table numbering]{tabular>numbering}
+% \trouble{xltabular=\pkg{xltabular}>numbering}
+% may be misnumbered in \HTML, so it may be necessary to place at the end
+% of the table:
+% \begin{sourcedisplay}
+% \cs{warpHTMLonly}\{\cs{addtocounter}\{table\}\{-1\}\}
+% \end{sourcedisplay}
+%
+% \begin{macrocode}
+\RequirePackage{tabularx}
+
+\LWR@ProvidesPackageDrop{xltabular}[2018/05/23]
+
+\DeclareDocumentEnvironment{xltabular}{o m m}
+{\longtable{#3}}
+{\endlongtable}
+% \end{macrocode}
+%
+%
+% \iffalse
+%</xltabular>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*xltxtra>
+% \fi
+%
+% \part{lwarp-xltxtra.sty}
+%
+% \section{xltxtra}
+%
+% \credits{Will Robertson, Jonathan Kew}
+%
+% \DescribePackage{xltxtra}
+% \pkg{xltxtra} is emulated.
+%
+% \changes{v0.38}{2017/08/25}{\pkg{xltxtra}: Added.}
+% \changes{v0.40}{2017/09/07}{\pkg{xltxtra}: Fix for \cs{showhyphens} with XeLaTeX.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{xltxtra}[2016/01/21]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\RequirePackage{realscripts}
+\RequirePackage{metalogo}
+\newcommand*\TeX@logo@spacing[6]{}
+
+\newcommand*{\vfrac}[2]{%
+\textsuperscript{#1}/\textsubscript{#2}%
+}
+
+\newcommand\namedglyph[1]{%
+ \@tempcnta=\XeTeXglyphindex "#1"\relax
+ \ifnum\@tempcnta>0
+ \XeTeXglyph\@tempcnta
+ \else
+ \xxt@namedglyph@fallback{#1}%
+ \fi}
+
+\newcommand\xxt@namedglyph@fallback[1]{[#1]}
+
+\DeclareDocumentCommand{\showhyphens}{m}{}
+% \end{macrocode}
+%
+% \iffalse
+%</xltxtra>
+% \fi
+%
+%
+%
+%
+%
+%
+%
+% \iffalse
+%<*xmpincl>
+% \fi
+%
+% \part{lwarp-xmpincl.sty}
+%
+% \section{xmpincl}
+%
+% \credits{Maarten Sneep}
+%
+% \DescribePackage{xmpincl} \pkg{xmpincl} is ignored.
+%
+% \changes{v0.34}{2017/08/03}{\pkg{xmpincl}: Added.}
+%
+% \codehtml
+%
+% Discard all options for \pkg{lwarp-xmpincl}:
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{xmpincl}[2008/05/10]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\includexmp}[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</xmpincl>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*xpiano>
+% \fi
+%
+% \part{lwarp-xpiano.sty}
+
+% \section{xpiano}
+%
+% \credits{Enrico Gregorio}
+%
+% \DescribePackage{xpiano}
+% \pkg{xpiano} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.57}{2018/06/03}{\pkg{xpiano}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{xpiano}
+% \end{macrocode}
+
+% \begin{macrocode}
+\ExplSyntaxOn
+\NewDocumentCommand{\LWR@print@keyboard}{ O{}m }
+{
+\xpiano_keyboard:nn { #1 } { #2 }
+}
+
+\NewDocumentCommand{\LWR@HTML@keyboard}{ O{}m }
+{
+\begin{lateximage}*
+ [(-xpiano-~\packagediagramname{}: \detokenize\expandafter{#2})]
+ [\detokenize\expandafter{#1}]
+\xpiano_keyboard:nn { #1 } { #2 }
+\end{lateximage}
+}
+\ExplSyntaxOff
+
+\LWR@formatted{keyboard}
+% \end{macrocode}
+
+% \iffalse
+%</xpiano>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*xpinyin>
+% \fi
+%
+% \part{lwarp-xpinyin.sty}
+%
+% \section{xpinyin}
+%
+% \credits{Soben Lee}
+%
+% \DescribePackage{xpinyin}
+% \pkg{xpinyin} is partly supported.
+% \cs{xpinyin} and \env{pinyinscope} are nullified, but \cs{pinyin} works.
+%
+% \changes{v0.63}{2018/12/03}{\pkg{xpinyin}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{xpinyin}[2018/01/28]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\RenewDocumentEnvironment{pinyinscope}{O{}}{}{}
+
+\RenewDocumentCommand{\xpinyin}{s O{} m}{%
+ \IfBooleanTF{#1}{#3}{\@firstoftwo#3}%
+}
+
+\RenewDocumentCommand{\enablepinyin}{}{}
+% \end{macrocode}
+%
+% \iffalse
+%</xpinyin>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*xr>
+% \fi
+%
+% \part{lwarp-xr.sty}
+%
+% \section{xr}
+%
+% \credits{Jean-Pierre Drucbert, David Carlisle}
+%
+% \DescribePackage{xr}
+% \pkg{xr} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.72}{2019/06/05}{\pkg{xr}: Added.}
+%
+% \codehtml
+%
+% \pkg{lwarp-xr-hyper} also uses \pkg{lwarp-xr}
+% to reuse the following definition.
+% Only load \pkg{xr} if \pkg{xr-hyper} has not been loaded:
+% \begin{macrocode}
+\ifdef{\externaldocument}{}{
+ \LWR@ProvidesPackagePass{xr}[2019/01/05]
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\LetLtxMacro\LWR@orig@externaldocument\externaldocument
+
+\renewcommand*{\externaldocument}[2][]{%
+ \ifblank{#1}{%
+ \LWR@orig@externaldocument{#2_html}%
+ }{%
+ \LWR@orig@externaldocument[#1]{#2_html}%
+ }%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</xr>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*xr-hyper>
+% \fi
+%
+% \part{lwarp-xr-hyper.sty}
+%
+% \section{xr-hyper}
+%
+% \credits{David Carlisle}
+%
+% \DescribePackage{xr-hyper}
+% \pkg{xr-hyper} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.72}{2019/06/05}{\pkg{xr-hyper}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{xr-hyper}[2000/03/22]
+
+\LWR@origRequirePackage{lwarp-xr}
+% \end{macrocode}
+%
+% \iffalse
+%</xr-hyper>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*xtab>
+% \fi
+
+% \part{lwarp-xtab.sty}
+
+% \section{xtab}
+% \label{sec:xtab}
+%
+% \credits{Peter Wilson}
+%
+% \DescribePackage{xtab}
+% \pkg{xtab} is emulated.
+%
+% \changes{v0.39}{2017/08/30}{\pkg{xtabular}: Added.}
+%
+% \codehtml
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{xtab}[2011/07/31]
+% \end{macrocode}
+%
+% \limitssupertabular
+%
+%
+% \begin{macrocode}
+\newcommand{\LWRXT@firsthead}{}
+
+\newcommand{\tablefirsthead}[1]{%
+ \long\gdef\LWRXT@firsthead{#1}%
+}
+
+\newcommand{\tablehead}[1]{}
+
+\newcommand{\tablelasthead}[1]{}
+
+\newcommand{\notablelasthead}{}
+
+\newcommand{\tabletail}[1]{}
+
+\newcommand{\LWRXT@lasttail}{}
+
+\newcommand{\tablelasttail}[1]{%
+ \long\gdef\LWRXT@lasttail{#1}%
+}
+% \end{macrocode}
+% \changes{v0.61}{2018/10/05}{\pkg{xtab}: Fix for caption w/o opt arg.}
+% \begin{macrocode}
+\newcommand{\tablecaption}[2][]{%
+ \long\gdef\LWRXT@caption{%
+ \ifblank{#1}%
+ {\caption{#2}}%
+ {\caption[#1]{#2}}%
+ }%
+}
+
+\let\topcaption\tablecaption
+\let\bottomcaption\tablecaption
+% \end{macrocode}
+% \changes{v0.44}{2017/11/19}{\pkg{xtab}: Fix for caption.}
+% \begin{macrocode}
+\newcommand*{\LWRXT@caption}{}
+
+\newcommand*{\shrinkheight}[1]{}
+
+\newcommand*{\xentrystretch}[1]{}
+
+\NewDocumentEnvironment{xtabular}{s o m}
+{%
+\LWR@traceinfo{xtabular}%
+\table%
+\LWRXT@caption%
+\begin{tabular}{#3}%
+\TabularMacro\ifdefvoid{\LWRXT@firsthead}%
+{\LWR@getmynexttoken}%
+{\expandafter\LWR@getmynexttoken\LWRXT@firsthead}%
+}%
+{%
+\ifdefvoid{\LWRXT@lasttail}%
+{}%
+{%
+\TabularMacro\ResumeTabular%
+\LWRXT@lasttail%
+}%
+\end{tabular}%
+\endtable%
+% \end{macrocode}
+% \changes{v0.69}{2019/03/15}{\pkg{xtab}: Fix: Clear caption after use.}
+% \begin{macrocode}
+\gdef\LWRXT@caption{}%
+% \end{macrocode}
+% \begin{macrocode}
+\LWR@traceinfo{xtabular done}%
+}
+
+\NewDocumentEnvironment{mpxtabular}{s o m}
+{\minipage{\linewidth}\xtabular{#3}}
+{\endxtabular\endminipage}
+% \end{macrocode}
+
+
+% \iffalse
+%</xtab>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*xunicode>
+% \fi
+%
+% \part{lwarp-xunicode.sty}
+%
+% \section{xunicode}
+%
+% \DescribePackage{xunicode}
+% Error if \pkg{xunicode} is loaded after \pkg{lwarp}.
+%
+% \changes{v0.59}{2018/08/03}{\pkg{xunicode}: Added.}
+
+% Patch \pkg{lwarp-xunicode}, but also verify that is was loaded before \pkg{lwarp}:
+%
+% \codehtml
+% \begin{macrocode}
+\LWR@loadbefore{xunicode}%
+
+\LWR@ProvidesPackagePass{xunicode}[2011/09/09]
+% \end{macrocode}
+%
+% \cs{textcircled} becomes a span with a rounded border.
+% \cs{providecommand} is used to avoid conflict with \pkg{textcomp}.
+% \changes{v0.62}{2018/11/17}{\pkg{xunicode}: Fix conflict with \pkg{textcomp}.}
+% \begin{macrocode}
+\providecommand*{\LWR@HTML@textcircled}[1]{%
+ \InlineClass[border: 1px solid \LWR@currenttextcolor]{textcircled}{#1}%
+}
+
+\LWR@formatted{textcircled}
+% \end{macrocode}
+%
+% Nullify \pkg{xunicode} macros when generating filenames:
+% \changes{v0.67}{2019/02/13}{\pkg{xunicode}: Nullify in filenames.}
+% \changes{v0.70}{2019/04/03}{\pkg{xunicode}: Fix for \cs{textinterrobang}.}
+% \begin{macrocode}
+\FilenameNullify{%
+ \renewcommand*{\textdegree}{}%
+ \renewcommand*{\textcelsius}{}%
+ \renewcommand*{\textohm}{}%
+ \renewcommand*{\textmu}{}%
+ \renewcommand*{\textlquill}{}%
+ \renewcommand*{\textrquill}{}%
+ \renewcommand*{\textcircledP}{}%
+ \renewcommand*{\texttwelveudash}{}%
+ \renewcommand*{\textthreequartersemdash}{}%
+ \renewcommand*{\textmho}{}%
+ \renewcommand*{\textnaira}{}%
+ \renewcommand*{\textpeso}{}%
+ \renewcommand*{\textrecipe}{}%
+ \renewcommand*{\textinterrobang}{}%
+ \renewcommand*{\textinterrobangdown}{}%
+ \renewcommand*{\textperthousand}{}%
+ \renewcommand*{\textpertenthousand}{}%
+ \renewcommand*{\textbaht}{}%
+ \renewcommand*{\textdiscount}{}%
+ \renewcommand*{\textservicemark}{}%
+ \renewcommand*{\textcircled}[1]{#1}%
+ \renewcommand*{\capitalcedilla}[1]{#1}%
+ \renewcommand*{\capitalogonek}[1]{#1}%
+ \renewcommand*{\capitalgrave}[1]{#1}%
+ \renewcommand*{\capitalacute}[1]{#1}%
+ \renewcommand*{\capitalcircumflex}[1]{#1}%
+ \renewcommand*{\capitaltilde}[1]{#1}%
+ \renewcommand*{\capitaldieresis}[1]{#1}%
+ \renewcommand*{\capitalhungarumlaut}[1]{#1}%
+ \renewcommand*{\capitalring}[1]{#1}%
+ \renewcommand*{\capitalcaron}[1]{#1}%
+ \renewcommand*{\capitalbreve}[1]{#1}%
+ \renewcommand*{\capitalmacron}[1]{#1}%
+ \renewcommand*{\capitaldotaccent}[1]{#1}%
+}% FilenameNullify
+% \end{macrocode}
+
+% \iffalse
+%</xunicode>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*xurl>
+% \fi
+%
+% \part{lwarp-xurl.sty}
+%
+% \section{xurl}
+%
+% \DescribePackage{xurl}
+% \pkg{xurl} is ignored.
+%
+% \changes{v0.47}{2018/01/25}{\pkg{xurl}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{xurl}[2018/06/02]
+% \end{macrocode}
+%
+% \iffalse
+%</xurl>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*xy>
+% \fi
+%
+% \part{lwarp-xy.sty}
+
+% \section{xy}
+%
+% \credits{Kristoffer H. Rose, Ross Moore}
+%
+% \DescribePackage{xy}
+% \pkg{xy} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.50}{2018/02/21}{\pkg{xy}: Added.}
+% \changes{v0.73}{2019/06/19}{\pkg{xy}: Improved \env{xy}, reverted \cs{xymatrix}, for \pkg{qcicuit}.}
+% \changes{v0.73}{2019/06/21}{\pkg{xy}: Fix for \cs{xybox}.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{xy}[2013/10/06]
+% \end{macrocode}
+
+% After \pkg{xy} modules have been loaded:
+% \begin{macrocode}
+\AtBeginDocument{
+% \end{macrocode}
+
+% The original definitions without a \env{lateximage}:
+% \begin{macrocode}
+\LetLtxMacro\LWR@orig@xy\xy
+\LetLtxMacro\LWR@orig@endxy\endxy
+% \end{macrocode}
+%
+% The outer-most \env{xy} environment is placed in a \env{lateximage},
+% but not more than one level deep, which would conflict with \pkg{xy}:
+% \begin{macrocode}
+\renewcommand*{\xy}{%
+ \ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
+ {\addtocounter{LWR@lateximagedepth}{1}}%
+ {\begin{lateximage}[(-xy-~\packagediagramname)]}%
+ \LWR@orig@xy%
+}
+
+\renewcommand*{\endxy}{%
+ \LWR@orig@endxy%
+ \ifnumcomp{\value{LWR@lateximagedepth}}{>}{1}%
+ {\addtocounter{LWR@lateximagedepth}{-1}}%
+ {\end{lateximage}}%
+}
+% \end{macrocode}
+%
+% The \cs{xybox} must use the original definitions of \cs{xy}, \cs{endxy}:
+% \begin{macrocode}
+\def\xybox#1{%
+ \LWR@orig@xy#1\LWR@orig@endxy%
+ \Edge@c={\rectangleEdge}\computeLeftUpness@%
+}
+% \end{macrocode}
+
+% If \cs{xygraph} is used, it is placed inside a \env{lateximage}:
+% \begin{macrocode}
+\@ifundefined{xygraph}{}{
+
+\LetLtxMacro\LWR@origxygraph\xygraph
+
+\renewcommand{\xygraph}[1]{%
+ \begin{lateximage}[(-xy- xygraph \packagediagramname)]
+ \LWR@origxygraph{#1}
+ \end{lateximage}
+}
+
+}% xygraph defined
+
+}% AtBeginDocument
+% \end{macrocode}
+
+% \iffalse
+%</xy>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*zhlineskip>
+% \fi
+%
+% \part{lwarp-zhlineskip.sty}
+%
+% \section{zhlineskip}
+%
+% \DescribePackage{zhlineskip}
+% \pkg{zhlineskip} is ignored.
+%
+% \changes{v0.63}{2018/12/02}{\pkg{zhlineskip}: Added.}
+% \changes{v0.72}{2019/05/18}{\pkg{zhlineskip}: Updated to v1.0e.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{zhlineskip}[2019/05/15]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*\SetTextEnvironmentSinglespace[1]{}
+\newcommand*\RestoreTextEnvironmentLeading[1]{}
+\newcommand*\SetMathEnvironmentSinglespace[1]{}
+\newcommand*\RestoreMathEnvironmentLeading[1]{}
+% \end{macrocode}
+%
+% \iffalse
+%</zhlineskip>
+% \fi
+%
+%
+%
+% \iffalse
+%<*zwpagelayout>
+% \fi
+%
+% \part{lwarp-zwpagelayout.sty}
+%
+% \section{zwpagelayout}
+%
+% \credits{Zdeněk Wagner}
+%
+% \DescribePackage{zwpagelayout}
+% \pkg{zwpagelayout} is ignored.
+%
+% \changes{v0.39}{2017/08/28}{\pkg{zwpagelayout}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{zwpagelayout}[2013/01/13]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\noBboxes{}
+\@onlypreamble\noBboxes
+
+\expandafter\ifx\csname definecolor\endcsname\relax \else
+ \definecolor{cmykblack}{cmyk}{0,0,0,1}
+ \definecolor{grblack}{gray}{0}
+% \ifzwpl@redefineblack
+% \definecolor{black}{cmyk}{0,0,0,1}\color{black}
+% \fi
+ \definecolor{cmykred}{cmyk}{0,1,1,0}
+ \definecolor{cmykgreen}{cmyk}{1,0,1,0}
+ \definecolor{cmykblue}{cmyk}{1,1,0,0}
+ \definecolor{rgbred}{rgb}{1,0,0}
+ \definecolor{rgbgreen}{rgb}{0,1,0}
+ \definecolor{rgbblue}{rgb}{0,0,1}
+% \ifzwpl@redefinetocmyk
+% \definecolor{red}{cmyk}{0,1,1,0}
+% \definecolor{green}{cmyk}{1,0,1,0}
+% \definecolor{blue}{cmyk}{1,1,0,0}
+% \fi
+\fi
+
+\let\OverprintXeTeXExtGState\relax
+
+\DeclareRobustCommand\SetOverprint{\ignorespaces}
+\DeclareRobustCommand\SetKnockout{\ignorespaces}
+\DeclareRobustCommand\textoverprint[1]{{\SetOverprint#1}}
+\DeclareRobustCommand\textknockout[1]{{\SetKnockout#1}}
+
+\def\SetPDFminorversion#1{}
+\@onlypreamble\SetPDFminorversion
+
+\newcommand*\Vcorr{}
+
+\DeclareRobustCommand\vb[1][]{}
+\NewDocumentCommand{\NewOddPage}{* o}{}
+\NewDocumentCommand{\NewEvenPage}{* o}{}
+\def\SetOddPageMessage#{\gdef\ZW@oddwarning}
+\def\SetEvenPageMessage#{\gdef\Z@@evenwarning}
+\def\ZW@oddwarning{Empty page inserted}\let\ZW@evenwarning\ZW@oddwarning
+
+\def\clap#1{#1}
+
+\def\CropFlap{2in}
+\def\CropSpine{1in}
+\def\CropXSpine{1in}
+\def\CropXtrim{.25in}
+\def\CropYtrim{.25in}
+\def\UserWidth{5in}
+\def\UserLeftMargin{1in}
+\def\UserRightMargin{1in}
+\def\UserTopMargin{1in}
+\def\UserBotMargin{1in}
+\def\thePageNumber{\LWR@origpound\,\arabic{page}}
+\ifXeTeX
+\def\ifcaseZWdriver{\ifcase2}
+\else
+\def\ifcaseZWdriver{\ifcase1}
+\fi
+\DeclareRobustCommand\ZWifdriver[2]{}
+% \end{macrocode}
+%
+% \iffalse
+%</zwpagelayout>
+% \fi
+%
+%
+%
+% ^^A *komascript
+%
+% \iffalse
+%<*patch-komascript>
+% \fi
+%
+% \part{lwarp-patch-komascript.sty}
+%
+% \section{patch-komascript}
+%
+% \DescribePackage{lwarp-patch-komascript}
+% Patches for \pkg{komascript} classes.
+%
+% \pkg{lwarp} loads this package when
+% \pkg{scrbook}, \pkg{scrartcl}, or \pkg{scrreprt} classes are detected.
+%
+% \limitskomascript
+%
+% \changes{v0.44}{2017/11/19}{\pkg{lwarp-patch-komascript}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\ProvidesPackage{lwarp-patch-komascript}
+% \end{macrocode}
+%
+% \pkg{typearea} is emulated.
+% \begin{macrocode}
+\RequirePackage{lwarp-typearea}
+% \end{macrocode}
+%
+% \pkg{tocbasic} is emulated.
+% \begin{macrocode}
+\RequirePackage{lwarp-tocbasic}
+% \end{macrocode}
+%
+% \pkg{scrextend} patches most of the new macros.
+% \begin{macrocode}
+\RequirePackage{lwarp-scrextend}
+% \end{macrocode}
+%
+%
+% Indexing macros, simplified for \pkg{lwarp}:
+% \changes{v0.58}{2018/07/06}{\pkg{lwarp-patch-komascript}: Modified indexing.}
+% \begin{macrocode}
+\AtBeginDocument{
+
+\renewcommand*{\idx@heading}{%
+ \idx@@heading{\indexname}%
+}
+
+\renewenvironment{theindex}{%
+ \idx@heading%
+ \index@preamble\par\nobreak
+ \let\item\LWR@indexitem%
+ \let\subitem\LWR@indexsubitem%
+ \let\subsubitem\LWR@indexsubsubitem%
+}
+{}
+
+\renewcommand*\indexspace{}
+
+}% AtBeginDocument
+% \end{macrocode}
+%
+%
+% The \cs{minisec} is placed inside a \element{div} of class \attribute{minisec}.
+% \begin{macrocode}
+\renewcommand*{\minisec}[1]{
+\begin{BlockClass}{minisec}
+#1
+\end{BlockClass}
+}
+% \end{macrocode}
+%
+% The part and chapter preambles are placed as plain text just after each heading.
+% \begin{macrocode}
+\@ifundefined{setpartpreamble}{}{
+\RenewDocumentCommand{\setpartpreamble}{o o +m}{%
+\renewcommand{\part@preamble}{#3}%
+}
+}
+
+\@ifundefined{setchapterpreamble}{}{
+\RenewDocumentCommand{\setchapterpreamble}{o o +m}{%
+\renewcommand{\chapter@preamble}{#3}%
+}
+}
+% \end{macrocode}
+%
+% Simple captions are used in all cases.
+% \changes{v0.73}{2019/07/10}{\pkg{lwarp-patch-komascript}: Fix for captions.}
+% \begin{macrocode}
+\AtBeginDocument{
+ \LetLtxMacro\captionbelow\caption
+ \LetLtxMacro\captionabove\caption
+
+ \LetLtxMacro\captionofbelow\captionof
+ \LetLtxMacro\captionofabove\captionof
+}
+
+\RenewDocumentEnvironment{captionbeside}{o m o o o s}
+{}
+{%
+\IfValueTF{#1}%
+{\caption[#1]{#2}}%
+{\caption{#2}}%
+}
+
+\RenewDocumentEnvironment{captionofbeside}{m o m o o o s}
+{}
+{%
+\IfValueTF{#2}%
+{\captionof{#1}[#2]{#3}}%
+{\captionof{#1}{#3}}%
+}
+
+\RenewDocumentCommand{\setcapindent}{s m}{}
+\renewcommand*{\setcaphanging}{}
+\renewcommand*{\setcapwidth}[2][]{}
+\renewcommand*{\setcapdynwidth}[2][]{}
+\RenewDocumentCommand{\setcapmargin}{s o m}{}
+% \end{macrocode}
+%
+% \iffalse
+%</patch-komascript>
+% \fi
+%
+%
+%
+%
+%
+% ^^A *memoir
+%
+% \addtocontents{toc}{\protect\setcounter{tocdepth}{2}}
+%
+%
+% \iffalse
+%<*patch-memoir>
+% \fi
+%
+% \part{lwarp-patch-memoir.sty}
+%
+% \section{patch-memoir}
+%
+%
+% \credits{Peter Wilson}
+%
+% \DescribePackage{lwarp-patch-memoir}
+% Patches for \pkg{memoir} class.
+%
+% \testthis
+%
+% \pkg{lwarp} loads this package when the \pkg{memoir} class is detected.
+%
+% \limitsmemoir
+%
+% \changes{v0.45}{2017/12/03}{\pkg{lwarp-patch-memoir}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\ProvidesPackage{lwarp-patch-memoir}
+% \end{macrocode}
+%
+% \subsection{Packages}
+% \label{sec:patch-memoir-packages}
+%
+% These are pre-loaded to provide emulation for many of \pkg{memoir}'s functions.
+% \pkg{memoir} pretends that \pkg{abstract}, etc. are already loaded, via its
+% ``emulated'' package mechanism, but \pkg{lwarp} is directly loading the ``|lwarp-|''
+% version of each, which happens to avoid \pkg{memoir}'s emulation system.
+% \begin{macrocode}
+\RequirePackage{lwarp-abstract}% req'd
+\RequirePackage{lwarp-array}% req'd
+\RequirePackage{lwarp-booktabs}% req'd
+% \RequirePackage{lwarp-ccaption}% emualated below
+\RequirePackage{lwarp-changepage}% req'd
+\RequirePackage{lwarp-crop}
+\RequirePackage{lwarp-dcolumn}% req'd
+\RequirePackage{lwarp-enumerate}% req'd
+\RequirePackage{lwarp-epigraph}% req'd
+\RequirePackage{lwarp-fancyvrb}% req'd
+\RequirePackage{lwarp-footmisc}% req'd
+\RequirePackage{lwarp-framed}% req'd
+\RequirePackage{lwarp-hanging}% req'd
+\RequirePackage{lwarp-makeidx}% req'd
+\DisemulatePackage{moreverb}
+\RequirePackage{lwarp-moreverb}
+\RequirePackage{lwarp-mparhack}
+\RequirePackage{lwarp-needspace}% req'd
+\RequirePackage{lwarp-nextpage}% req'd
+\RequirePackage{lwarp-pagenote}% req'd
+\RequirePackage{lwarp-parskip}
+\RequirePackage{lwarp-setspace}% req'd
+\RequirePackage{lwarp-showidx}
+\RequirePackage{lwarp-subfigure}% red'q
+\makeindex
+% \end{macrocode}
+% \pkg{subfigure} is emulated via \pkg{subfig}, which pre-defines
+% |subfigure| and |subtable|, but \pkg{memoir} does not, so
+% they must be tested for here:
+% \begin{macrocode}
+\LetLtxMacro\LWR@memorignewsubfloat\newsubfloat
+\RenewDocumentCommand{\newsubfloat}{O{} m}{%
+ \@ifundefined{c@sub#2}{%
+ \LWR@memorignewsubfloat[#1]{#2}%
+ }{}%
+}
+
+\RequirePackage{lwarp-tabularx}% req'd
+\RequirePackage{lwarp-titling}% req'd
+% \RequirePackage{lwarp-tocbibind}% not emulated by memoir
+\RequirePackage{lwarp-tocloft}% req'd
+\RequirePackage{lwarp-verse}% req'd
+% \end{macrocode}
+%
+%
+% \subsection{Preliminary setup}
+%
+% Bypass the \pkg{memoir} package mechanism:
+% \begin{macrocode}
+\LetLtxMacro\LWR@orig@label\@mem@old@label
+% \end{macrocode}
+
+%
+% \pkg{memoir} already set the page size to a default,
+% so it must be forced large for \pkg{lwarp}'s use,
+% to avoid tag overflows off the page.
+% \begin{macrocode}
+\setstocksize{190in}{20in}
+\setlrmarginsandblock{2in}{2in}{*}
+\setulmarginsandblock{1in}{1in}{*}
+% \end{macrocode}
+%
+%
+% \subsection{Page layout}
+%
+% \begin{macrocode}
+\renewcommand*{\stockavi}{}
+\renewcommand*{\stockav}{}
+\renewcommand*{\stockaiv}{}
+\renewcommand*{\stockaiii}{}
+\renewcommand*{\stockbvi}{}
+\renewcommand*{\stockbv}{}
+\renewcommand*{\stockbiv}{}
+\renewcommand*{\stockbiii}{}
+% \renewcommand*{\stockmetriccrownvo}{}% in docs but not in the package
+\renewcommand*{\stockmlargecrownvo}{}
+\renewcommand*{\stockmdemyvo}{}
+\renewcommand*{\stockmsmallroyalvo}{}
+\renewcommand*{\pageavi}{}
+\renewcommand*{\pageav}{}
+\renewcommand*{\pageaiv}{}
+\renewcommand*{\pageaiii}{}
+\renewcommand*{\pagebvi}{}
+\renewcommand*{\pagebv}{}
+\renewcommand*{\pagebiv}{}
+\renewcommand*{\pagebiii}{}
+% \renewcommand*{\pagemetriccrownvo}{}% in docs but not in the package
+\renewcommand*{\pagemlargecrownvo}{}
+\renewcommand*{\pagemdemyvo}{}
+\renewcommand*{\pagemsmallroyalvo}{}
+
+\renewcommand*{\stockdbill}{}
+\renewcommand*{\stockstatement}{}
+\renewcommand*{\stockexecutive}{}
+\renewcommand*{\stockletter}{}
+\renewcommand*{\stockold}{}
+\renewcommand*{\stocklegal}{}
+\renewcommand*{\stockledger}{}
+\renewcommand*{\stockbroadsheet}{}
+\renewcommand*{\pagedbill}{}
+\renewcommand*{\pagestatement}{}
+\renewcommand*{\pageexecutive}{}
+\renewcommand*{\pageletter}{}
+\renewcommand*{\pageold}{}
+\renewcommand*{\pagelegal}{}
+\renewcommand*{\pageledger}{}
+\renewcommand*{\pagebroadsheet}{}
+
+\renewcommand*{\stockpottvo}{}
+\renewcommand*{\stockfoolscapvo}{}
+\renewcommand*{\stockcrownvo}{}
+\renewcommand*{\stockpostvo}{}
+\renewcommand*{\stocklargecrownvo}{}
+\renewcommand*{\stocklargepostvo}{}
+\renewcommand*{\stocksmalldemyvo}{}
+\renewcommand*{\stockdemyvo}{}
+\renewcommand*{\stockmediumvo}{}
+\renewcommand*{\stocksmallroyalvo}{}
+\renewcommand*{\stockroyalvo}{}
+\renewcommand*{\stocksuperroyalvo}{}
+\renewcommand*{\stockimperialvo}{}
+\renewcommand*{\pagepottvo}{}
+\renewcommand*{\pagefoolscapvo}{}
+\renewcommand*{\pagecrownvo}{}
+\renewcommand*{\pagepostvo}{}
+\renewcommand*{\pagelargecrownvo}{}
+\renewcommand*{\pagelargepostvo}{}
+\renewcommand*{\pagesmalldemyvo}{}
+\renewcommand*{\pagedemyvo}{}
+\renewcommand*{\pagemediumvo}{}
+\renewcommand*{\pagesmallroyalvo}{}
+\renewcommand*{\pageroyalvo}{}
+\renewcommand*{\pagesuperroyalvo}{}
+\renewcommand*{\pageimperialvo}{}
+
+\renewcommand*{\memfontfamily}{}
+\renewcommand*{\memfontenc}{}
+\renewcommand*{\memfontpack}{}
+
+\renewcommand*{\anyptfilebase}{}
+\renewcommand*{\anyptsize}{10}
+
+\renewcommand*{\setstocksize}[2]{}
+\renewcommand*{\settrimmedsize}[3]{}
+\renewcommand*{\settrims}[2]{}
+
+% \newlength{\lxvchars}
+% \setlength{\lxvchars}{305pt}
+% \newlength{\xlvchars}
+% \setlength{\xlvchars}{190pt}
+\renewcommand*{\setxlvchars}[1]{}
+\renewcommand*{\setlxvchars}[1]{}
+
+\renewcommand*{\settypeblocksize}[3]{}
+\renewcommand*{\setlrmargins}[3]{}
+\renewcommand*{\setlrmarginsandblock}[3]{}
+\renewcommand*{\setbinding}[1]{}
+\renewcommand*{\setulmargins}[3]{}
+\renewcommand*{\setulmarginsandblock}[3]{}
+\renewcommand*{\setcolsepandrule}[2]{}
+
+\renewcommand*{\setheadfoot}[2]{}
+\renewcommand*{\setheaderspaces}[3]{}
+\renewcommand*{\setmarginnotes}[3]{}
+\renewcommand*{\setfootins}[2]{}
+\renewcommand*{\checkandfixthelayout}[1][]{}
+\renewcommand*{\checkthelayout}[1]{}
+\renewcommand*{\fixthelayout}{}
+%
+% \newlength{\stockheight}
+% \newlength{\trimtop}
+% \newlength{\trimedge}
+% \newlength{\stockwidth}
+% \newlength{\spinemargin}
+% \newlength{\foremargin}
+% \newlength{\uppermargin}
+% \newlength{\headmargin}
+%
+\renewcommand*{\typeoutlayout}{}
+\renewcommand*{\typeoutstandardlayout}{}
+\renewcommand*{\settypeoutlayoutunit}[1]{}
+\renewcommand*{\fixpdflayout}{}
+\renewcommand*{\fixdvipslayout}{}
+
+\renewcommand*{\medievalpage}[1][]{}
+\renewcommand*{\isopage}[1][]{}
+\renewcommand*{\semiisopage}[1][]{}
+
+\renewcommand{\setpagebl}[3]{}
+\renewcommand{\setpageml}[3]{}
+\renewcommand{\setpagetl}[3]{}
+\renewcommand{\setpagetm}[3]{}
+\renewcommand{\setpagetr}[3]{}
+\renewcommand{\setpagemr}[3]{}
+\renewcommand{\setpagebr}[3]{}
+\renewcommand{\setpagebm}[3]{}
+\renewcommand{\setpagecc}[3]{}
+% \end{macrocode}
+%
+% \subsection{Text and fonts}
+% \begin{macrocode}
+\let\miniscule\tiny
+\let\HUGE\Huge
+
+\renewcommand*{\abnormalparskip}[1]{}
+\renewcommand*{\nonzeroparskip}{}
+\renewcommand*{\traditionalparskip}{}
+
+\let\onelineskip\baselineskip
+
+\let\OnehalfSpacing\onehalfspacing
+\let\DoubleSpacing\doublespacing
+\renewcommand*{\setPagenoteSpacing}[1]{}
+\renewcommand*{\setFloatSpacing}[1]{}
+\let\SingleSpacing\singlespacing
+\let\setSingleSpace\SetSinglespace
+\let\SingleSpace\singlespace
+\let\endSingleSpace\endsinglespace
+\let\Spacing\spacing
+\let\endSpacing\endspacing
+\let\OnehalfSpace\onehalfspace
+\let\endOnehalfSpace\endonehalfspace
+\csletcs{OnehalfSpace*}{onehalfspace}
+\csletcs{endOnehalfSpace*}{endonehalfspace}
+\let\DoubleSpace\doublespace
+\let\endDoubleSpace\enddoublespace
+\csletcs{DoubleSpace*}{doublespace}
+\csletcs{endDoubleSpace*}{enddoublespace}
+\renewcommand*{\setDisplayskipStretch}[1]{}
+\renewcommand*{\memdskipstretch}{}
+\renewcommand*{\noDisplayskipStretch}{}
+\renewcommand*{\memdskips}{}
+
+\renewcommand*{\midsloppy}{}
+\renewenvironment*{midsloppypar}{}{}
+
+\renewcommand*{\sloppybottom}{}
+% \end{macrocode}
+%
+% \subsection{Titles}
+%
+% \changes{v0.54}{2018/04/06}{\pkg{lwarp-patch-memoir}: Update for v3.7g.}
+% \begin{macrocode}
+\csletcs{titlingpage*}{titlingpage}
+\csletcs{endtitlingpage*}{endtitlingpage}
+\let\titlingpageend\relax
+\newcommand{\titlingpageend}[2]{}
+\let\andnext\and
+\renewcommand*{\thanksmarkstyle}[1]{}
+\renewcommand{\thanksfootmark}{%
+\thanksscript{\tamark}%
+}
+
+% \newlength{\thanksmarksep}
+% \end{macrocode}
+%
+% \subsection{Abstracts}
+% \begin{macrocode}
+\renewcommand*{\abstractcol}{}
+\renewcommand*{\abstractintoc}{}
+\renewcommand*{\abstractnum}{}
+\renewcommand*{\abstractrunin}{}
+% \end{macrocode}
+%
+%
+% \subsection{Docment divisions}
+%
+%
+% \begin{noindmacro}{\book} * \parg{2:PDF name} \oarg{3:TOC name}
+% \oarg{4:PDF name} \parg{5:PDF name} \marg{6:name}
+% \changes{v0.73}{2019/06/21}{\pkg{lwarp-patch-memoir}: Added \cs{book}.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\book}{s d() o o d() m}{%
+ \LWR@section{#1}{#3}{#6}{book}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{macrocode}
+\def\@apppage{%
+ \part*{\appendixpagename}
+}
+\renewcommand\mempreaddapppagetotochook{}
+\renewcommand\mempostaddapppagetotochook{}
+
+\def\@sapppage{%
+ \part*{\appendixpagename}
+}
+% \end{macrocode}
+%
+% \changes{v0.73}{2019/06/20}{\pkg{lwarp-patch-memoir}: Fix for \cs{frontmatter*} and \cs{mainmatter*}.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\mainmatter}{s}{%
+ \booltrue{LWR@mainmatter}%
+}
+
+\DeclareDocumentCommand{\frontmatter}{s}{%
+\boolfalse{LWR@mainmatter}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand*{\raggedbottomsection}{}
+\renewcommand*{\normalbottomsection}{}
+\renewcommand*{\bottomsectionskip}{}
+\renewcommand*{\bottomsectionpenalty}{}
+\csletcs{appendixpage*}{appendixpage}
+\renewcommand*{\namedsubappendices}{}
+\renewcommand*{\unnamedsubappendices}{}
+\renewcommand*{\setsecnumdepth}[1]{}% todo tocvsec2
+\renewcommand*{\maxsecnumdepth}[1]{}% todo tocvsec2
+\renewcommand*{\beforebookskip}{}
+\renewcommand*{\afterbookskip}{}
+\renewcommand*{\beforepartskip}{}
+\renewcommand*{\afterpartskip}{}
+\renewcommand*{\midbookskip}{}
+\renewcommand*{\midpartskip}{}
+\renewcommand*{\printbookname}{}
+\renewcommand*{\booknamefont}{}
+\renewcommand*{\booknamenum}{}
+\renewcommand*{\printbooknum}{}
+\renewcommand*{\booknumfont}{}
+\renewcommand*{\printpartname}{}
+\renewcommand*{\partnamefont}{}
+\renewcommand*{\partnamenum}{}
+\renewcommand*{\printpartnum}{}
+\renewcommand*{\partnumfont}{}
+\renewcommand*{\printbooktitle}[1]{}
+\renewcommand*{\booktitlefont}{}
+\renewcommand{\printparttitle}[1]{}
+\renewcommand*{\parttitlefont}{}
+\renewcommand*{\bookpageend}{}
+\renewcommand*{\bookblankpage}{}
+\renewcommand*{\nobookblankpage}{}
+\renewcommand*{\partpageend}{}
+\renewcommand*{\partblankpage}{}
+\renewcommand*{\nopartblankpage}{}
+\RenewDocumentCommand{\newleadpage}{s o m m}{}% todo
+\RenewDocumentCommand{\renewleadpage}{s o m m}{}% todo
+\renewcommand*{\leadpagetoclevel}{chapter}
+
+\renewcommand*{\openright}{}
+\renewcommand*{\openleft}{}
+\renewcommand*{\openany}{}
+\renewcommand*{\clearforchapter}{}
+\renewcommand*{\memendofchapterhook}{}
+\renewcommand*{\chapterheadstart}{}
+% \newlength{\beforechapskip}
+\renewcommand*{\afterchapternum}{}
+% \newlength{\midchapskip}
+\renewcommand*{\afterchaptertitle}{}
+% \newlength{\afterchapskip}
+\renewcommand*{\printchaptername}{}
+\renewcommand*{\chapnamefont}{}
+\renewcommand*{\chapternamenum}{}
+\renewcommand*{\printchapternum}{}
+\renewcommand*{\chapnumfont}{}
+\renewcommand{\printchaptertitle}[1]{}
+\renewcommand*{\chaptitlefont}{}
+\renewcommand*{\printchapternonum}{}
+\renewcommand*{\indentafterchapter}{}
+\renewcommand*{\noindentafterchapter}{}
+\renewcommand*{\insertchapterspace}{}
+
+\renewcommand*{\chapterstyle}[1]{}
+\renewcommand{\makechapterstyle}[2]{}
+\renewcommand*{\chapindent}{}
+\let\chapterprecis\cftchapterprecis
+\let\chapterprecishere\cftchapterprecishere
+\let\chapterprecistoc\cftchapterprecistoc
+\renewcommand*{\precisfont}{}
+\renewcommand*{\prechapterprecis}{}
+\renewcommand*{\postchapterprecis}{}
+\renewcommand{\precistoctext}[1]{}
+\renewcommand*{\precistocfont}{}
+\renewcommand*{\precistocformat}{}
+% \newlength{\prechapterprecisshift}
+
+\renewcommand*{\setbeforesecskip}[1]{}
+\renewcommand*{\setaftersecskip}[1]{}
+\renewcommand*{\setsecindent}[1]{}
+\renewcommand*{\setsecheadstyle}[1]{}
+\renewcommand*{\setbeforesubsecskip}[1]{}
+\renewcommand*{\setaftersubsecskip}[1]{}
+\renewcommand*{\setsubsecindent}[1]{}
+\renewcommand*{\setsubsecheadstyle}[1]{}
+\renewcommand*{\setbeforesubsubsecskip}[1]{}
+\renewcommand*{\setaftersubsubsecskip}[1]{}
+\renewcommand*{\setsubsubsecindent}[1]{}
+\renewcommand*{\setsubsubsecheadstyle}[1]{}
+\renewcommand*{\setbeforeparaskip}[1]{}
+\renewcommand*{\setafterparaskip}[1]{}
+\renewcommand*{\setparaindent}[1]{}
+\renewcommand*{\setparaheadstyle}[1]{}
+\renewcommand*{\setbeforesubparaskip}[1]{}
+\renewcommand*{\setaftersubparaskip}[1]{}
+\renewcommand*{\setsubparaindent}[1]{}
+\renewcommand*{\setsubparaheadstyle}[1]{}
+\renewcommand{\@hangfrom}[1]{#1}
+\renewcommand{\sethangfrom}[1]{}
+\renewcommand{\setsecnumformat}[1]{}
+
+\renewcommand*{\hangsecnum}{}
+\renewcommand*{\defaultsecnum}{}
+
+\renewcommand*{\sechook}{}
+\renewcommand{\setsechook}[1]{}
+\renewcommand*{\subsechook}{}
+\renewcommand{\setsubsechook}[1]{}
+\renewcommand*{\subsubsechook}{}
+\renewcommand{\setsubsubsechook}[1]{}
+\renewcommand*{\parahook}{}
+\renewcommand{\setparahook}[1]{}
+\renewcommand*{\subparahook}{}
+\renewcommand{\setsubparahook}[1]{}
+
+\RenewDocumentCommand{\plainbreak}{s m}{\begin{center}~\end{center}}
+
+\RenewDocumentCommand{\fancybreak}{s +m}{%
+\begin{center}#2\end{center}%
+}
+
+\RenewDocumentCommand{\plainfancybreak}{s m m +m}{%
+\begin{center}#4\end{center}%
+}
+
+\RenewDocumentCommand{\pfbreak}{s}{%
+\begin{center}
+\pfbreakdisplay
+\end{center}
+}
+
+% \newlength{\pfbreakskip}
+\renewcommand{\pfbreakdisplay}{*\quad*\quad*}
+
+\renewcommand{\makeheadstyles}[2]{}
+\renewcommand*{\headstyles}[1]{}
+% \end{macrocode}
+%
+% \subsection{Pagination and headers}
+% \begin{macrocode}
+\renewcommand*{\savepagenumber}{}
+\renewcommand*{\restorepagenumber}{}
+\renewcommand*{\uppercaseheads}{}
+\renewcommand*{\nouppercaseheads}{}
+
+\renewcommand*{\bookpagemark}[1]{}
+\renewcommand*{\partmark}[1]{}
+\renewcommand*{\bibmark}{}
+\renewcommand*{\indexmark}{}
+\renewcommand*{\glossarymark}{}
+
+\LWR@origpagestyle{empty}
+\renewcommand*{\ps@empty}{}
+\renewcommand*{\makepagestyle}[1]{}
+\renewcommand*{\emptypshook}{}%
+% \renewcommand*{\empty@oddhead}{}
+% \renewcommand*{\empty@oddfoot}{}
+% \renewcommand*{\empty@evenhead}{}
+% \renewcommand*{\empty@evenfoot}{}
+\renewcommand*{\@oddhead}{}
+\renewcommand*{\@oddfoot}{}
+\renewcommand*{\@evenhead}{}
+\renewcommand*{\@evenfoot}{}
+\renewcommand*{\aliaspagestyle}[2]{}
+\renewcommand*{\copypagestyle}[2]{}
+
+\renewcommand*{\makeevenhead}[4]{}
+\renewcommand*{\makeoddhead}[4]{}
+\renewcommand*{\makeevenfoot}[4]{}
+\renewcommand*{\makeoddfoot}[4]{}
+\renewcommand*{\makerunningwidth}[3]{}
+% \newlength{\headwidth}
+\renewcommand*{\makeheadrule}[3]{}
+\renewcommand*{\makefootrule}[3]{}
+\renewcommand*{\makeheadfootruleprefix}[3]{}
+% \newlength{\normalrulethickness}
+% \setlength{\normalrulethickness}{.4pt}
+% \newlength{\footruleheight}
+% \newlength{\footruleskip}
+\renewcommand*{\makeheadposition}[5]{}
+\renewcommand{\makepsmarks}[2]{}
+\renewcommand*{\makeheadfootstrut}[3]{}
+
+\renewcommand{\createplainmark}[3]{}
+\renewcommand{\memUChead}[1]{}
+\renewcommand{\createmark}[5]{}
+\renewcommand*{\clearplainmark}[1]{}
+\renewcommand*{\clearmark}[1]{}
+\renewcommand{\addtopsmarks}[3]{}
+\renewcommand{\ifonlyfloats}[2]{#2}
+\renewcommand*{\mergepagefloatstyle}[3]{}
+
+\renewcommand*{\framepichead}{}
+\renewcommand*{\framepictextfoot}{}
+\renewcommand*{\framepichook}{}
+\renewcommand*{\showheadfootlocoff}{}
+\renewcommand*{\showtextblocklocoff}{}
+% \end{macrocode}
+%
+% \subsection{Paragraphs and lists}
+% \begin{macrocode}
+\renewcommand{\hangfrom}[1]{#1}
+\let\centerfloat\centering
+\renewcommand*{\raggedyright}[1][]{}
+% \newlength{\ragrparindent}
+\renewcommand{\sourceatright}[2][]{\attribution{#2}}
+\let\memorigdbs\LWR@endofline
+\let\memorigpar\par
+\let\atcentercr\LWR@endofline
+
+\renewcommand*{\linenottooshort}[1][]{}
+\renewcommand*{\russianpar}{}
+\renewcommand*{\lastlinerulefill}{}
+\renewcommand*{\lastlineparrule}{}
+\renewcommand*{\justlastraggedleft}{}
+\renewcommand*{\raggedrightthenleft}{}
+\renewcommand*{\leftcenterright}{}
+
+\renewcommand{\leftspringright}[4]{%
+\begin{minipage}{#1\linewidth}#3\end{minipage}\qquad%
+\begin{minipage}{#2\linewidth}\begin{flushright}#4\end{flushright}\end{minipage}%
+}
+
+\renewenvironment*{blockdescription}
+{\LWR@descriptionstart\LWR@origdescription}
+{\enddescription}
+\renewcommand*{\blockdescriptionlabel}[1]{\textbf{#1}}
+\renewenvironment*{labelled}[1]{\begin{description}}{\end{description}}
+\renewenvironment*{flexlabelled}[6]{\begin{description}}{\end{description}}
+\renewcommand*{\tightlists}{}
+\renewcommand*{\defaultlists}{}
+\RenewDocumentCommand{\firmlists}{s}{}
+\renewcommand*{\firmlist}{}
+\renewcommand*{\tightlist}{}
+\renewcommand*{\zerotrivseps}{}
+\renewcommand*{\savetrivseps}{}
+\renewcommand*{\restoretrivseps}{}
+% \end{macrocode}
+%
+% \subsection{Contents lists}
+% \begin{macrocode}
+\csletcs{tableofcontents*}{tableofcontents}
+\csletcs{listoffigures*}{listoffigures}
+\csletcs{listoftables*}{listoftables}
+\renewenvironment{KeepFromToc}{}{}
+\renewcommand*{\onecoltocetc}{}
+\renewcommand*{\twocoltocetc}{}
+\renewcommand*{\ensureonecol}{}
+\renewcommand*{\restorefromonecol}{}
+\renewcommand*{\doccoltocetc}{}
+\renewcommand*{\maxtocdepth}[1]{}% tocvsec2
+\renewcommand*{\settocdepth}[1]{}% tocvsec2
+
+\renewcommand{\tocheadstart}{}
+\renewcommand{\printtoctitle}[1]{}
+\renewcommand{\tocmark}{}
+\renewcommand{\aftertoctitle}{}
+\renewcommand{\lofheadstart}{}
+\renewcommand{\printloftitle}[1]{}
+\renewcommand{\lofmark}{}
+\renewcommand{\afterloftitle}{}
+\renewcommand{\lotheadstart}{}
+\renewcommand{\printlottitle}[1]{}
+\renewcommand{\lotmark}{}
+\renewcommand{\afterlottitle}{}
+
+\renewcommand*{\setpnumwidth}[1]{}
+\renewcommand*{\setrmarg}[1]{}
+\renewcommand*{\cftbookbreak}{}
+\renewcommand*{\cftpartbreak}{}
+\renewcommand*{\cftchapterbreak}{}
+% \end{macrocode}
+
+% \begin{macrocode}
+% \newlength{\cftbeforebookskip}
+% \newlength{\cftbookindent}
+% \newlength{\cftbooknumwidth}
+\renewcommand*{\cftbookfont}{}
+\renewcommand*{\cftbookname}{}
+\renewcommand*{\cftbookpresnum}{}
+\renewcommand*{\cftbookaftersnum}{}
+\renewcommand*{\cftbookaftersnumb}{}
+\renewcommand*{\cftbookleader}{}
+\renewcommand*{\cftbookdotsep}{1}
+\renewcommand*{\cftbookpagefont}{}
+\renewcommand*{\cftbookafterpnum}{}
+\renewcommand*{\cftbookformatpnum}[1]{}
+\renewcommand*{\cftbookformatpnumhook}[1]{}
+% \end{macrocode}
+%
+% Part is already defined by \pkg{tocloft}.
+%
+% \begin{macrocode}
+% \newlength{\cftbeforechapterskip}
+% \newlength{\cftchapterindent}
+% \newlength{\cftchapternumwidth}
+\renewcommand*{\cftchapterfont}{}
+\renewcommand*{\cftchaptername}{}
+\renewcommand*{\cftchapterpresnum}{}
+\renewcommand*{\cftchapteraftersnum}{}
+\renewcommand*{\cftchapteraftersnumb}{}
+\renewcommand*{\cftchapterleader}{}
+\renewcommand*{\cftchapterdotsep}{1}
+\renewcommand*{\cftchapterpagefont}{}
+\renewcommand*{\cftchapterafterpnum}{}
+\renewcommand*{\cftchapterformatpnum}[1]{}
+\renewcommand*{\cftchapterformatpnumhook}[1]{}
+% \end{macrocode}
+%
+% ^^A *8* probably redundant:
+% \begin{macrocode}
+% \newlength{\cftbeforesectionskip}
+% \newlength{\cftsectionindent}
+% \newlength{\cftsectionnumwidth}
+\renewcommand*{\cftsectionfont}{}
+\renewcommand*{\cftsectionname}{}
+\renewcommand*{\cftsectionpresnum}{}
+\renewcommand*{\cftsectionaftersnum}{}
+\renewcommand*{\cftsectionaftersnumb}{}
+\renewcommand*{\cftsectionleader}{}
+\renewcommand*{\cftsectiondotsep}{1}
+\renewcommand*{\cftsectionpagefont}{}
+\renewcommand*{\cftsectionafterpnum}{}
+\renewcommand*{\cftsectionformatpnum}[1]{}
+\renewcommand*{\cftsectionformatpnumhook}[1]{}
+% \end{macrocode}
+
+% \begin{macrocode}
+% \newlength{\cftbeforesubsectionskip}
+% \newlength{\cftsubsectionindent}
+% \newlength{\cftsubsectionnumwidth}
+\renewcommand*{\cftsubsectionfont}{}
+\renewcommand*{\cftsubsectionname}{}
+\renewcommand*{\cftsubsectionpresnum}{}
+\renewcommand*{\cftsubsectionaftersnum}{}
+\renewcommand*{\cftsubsectionaftersnumb}{}
+\renewcommand*{\cftsubsectionleader}{}
+\renewcommand*{\cftsubsectiondotsep}{1}
+\renewcommand*{\cftsubsectionpagefont}{}
+\renewcommand*{\cftsubsectionafterpnum}{}
+\renewcommand*{\cftsubsectionformatpnum}[1]{}
+\renewcommand*{\cftsubsectionformatpnumhook}[1]{}
+% \end{macrocode}
+
+% \begin{macrocode}
+% \newlength{\cftbeforesubsubsectionskip}
+% \newlength{\cftsubsubsectionindent}
+% \newlength{\cftsubsubsectionnumwidth}
+\renewcommand*{\cftsubsubsectionfont}{}
+\renewcommand*{\cftsubsubsectionname}{}
+\renewcommand*{\cftsubsubsectionpresnum}{}
+\renewcommand*{\cftsubsubsectionaftersnum}{}
+\renewcommand*{\cftsubsubsectionaftersnumb}{}
+\renewcommand*{\cftsubsubsectionleader}{}
+\renewcommand*{\cftsubsubsectiondotsep}{1}
+\renewcommand*{\cftsubsubsectionpagefont}{}
+\renewcommand*{\cftsubsubsectionafterpnum}{}
+\renewcommand*{\cftsubsubsectionformatpnum}[1]{}
+\renewcommand*{\cftsubsubsectionformatpnumhook}[1]{}
+% \end{macrocode}
+
+% \begin{macrocode}
+% \newlength{\cftbeforeparagraphskip}
+% \newlength{\cftparagraphindent}
+% \newlength{\cftparagraphnumwidth}
+\renewcommand*{\cftparagraphfont}{}
+\renewcommand*{\cftparagraphname}{}
+\renewcommand*{\cftparagraphpresnum}{}
+\renewcommand*{\cftparagraphaftersnum}{}
+\renewcommand*{\cftparagraphaftersnumb}{}
+\renewcommand*{\cftparagraphleader}{}
+\renewcommand*{\cftparagraphdotsep}{1}
+\renewcommand*{\cftparagraphpagefont}{}
+\renewcommand*{\cftparagraphafterpnum}{}
+\renewcommand*{\cftparagraphformatpnum}[1]{}
+\renewcommand*{\cftparagraphformatpnumhook}[1]{}
+% \end{macrocode}
+
+% \begin{macrocode}
+% \newlength{\cftbeforesubparagraphskip}
+% \newlength{\cftsubparagraphindent}
+% \newlength{\cftsubparagraphnumwidth}
+\renewcommand*{\cftsubparagraphfont}{}
+\renewcommand*{\cftsubparagraphname}{}
+\renewcommand*{\cftsubparagraphpresnum}{}
+\renewcommand*{\cftsubparagraphaftersnum}{}
+\renewcommand*{\cftsubparagraphaftersnumb}{}
+\renewcommand*{\cftsubparagraphleader}{}
+\renewcommand*{\cftsubparagraphdotsep}{1}
+\renewcommand*{\cftsubparagraphpagefont}{}
+\renewcommand*{\cftsubparagraphafterpnum}{}
+\renewcommand*{\cftsubparagraphformatpnum}[1]{}
+\renewcommand*{\cftsubparagraphformatpnumhook}[1]{}
+% \end{macrocode}
+
+% \begin{macrocode}
+% \newlength{\cftbeforefigureskip}
+% \newlength{\cftfigureindent}
+% \newlength{\cftfigurenumwidth}
+\renewcommand*{\cftfigurefont}{}
+\renewcommand*{\cftfigurename}{}
+\renewcommand*{\cftfigurepresnum}{}
+\renewcommand*{\cftfigureaftersnum}{}
+\renewcommand*{\cftfigureaftersnumb}{}
+\renewcommand*{\cftfigureleader}{}
+\renewcommand*{\cftfiguredotsep}{1}
+\renewcommand*{\cftfigurepagefont}{}
+\renewcommand*{\cftfigureafterpnum}{}
+\renewcommand*{\cftfigureformatpnum}[1]{}
+\renewcommand*{\cftfigureformatpnumhook}[1]{}
+% \end{macrocode}
+
+% \begin{macrocode}
+% \newlength{\cftbeforesubfigureskip}
+% \newlength{\cftsubfigureindent}
+% \newlength{\cftsubfigurenumwidth}
+\newcommand*{\cftsubfigurefont}{}
+\newcommand*{\cftsubfigurename}{}
+\newcommand*{\cftsubfigurepresnum}{}
+\newcommand*{\cftsubfigureaftersnum}{}
+\newcommand*{\cftsubfigureaftersnumb}{}
+\newcommand*{\cftsubfigureleader}{}
+\newcommand*{\cftsubfiguredotsep}{1}
+\newcommand*{\cftsubfigurepagefont}{}
+\newcommand*{\cftsubfigureafterpnum}{}
+\newcommand*{\cftsubfigureformatpnum}[1]{}
+\newcommand*{\cftsubfigureformatpnumhook}[1]{}
+% \end{macrocode}
+
+% \begin{macrocode}
+% \newlength{\cftbeforetableskip}
+% \newlength{\cfttableindent}
+% \newlength{\cfttablenumwidth}
+\renewcommand*{\cfttablefont}{}
+\renewcommand*{\cfttablename}{}
+\renewcommand*{\cfttablepresnum}{}
+\renewcommand*{\cfttableaftersnum}{}
+\renewcommand*{\cfttableaftersnumb}{}
+\renewcommand*{\cfttableleader}{}
+\renewcommand*{\cfttabledotsep}{1}
+\renewcommand*{\cfttablepagefont}{}
+\renewcommand*{\cfttableafterpnum}{}
+\renewcommand*{\cfttableformatpnum}[1]{}
+\renewcommand*{\cfttableformatpnumhook}[1]{}
+% \end{macrocode}
+
+% \begin{macrocode}
+% \newlength{\cftbeforesubtableskip}
+% \newlength{\cftsubtableindent}
+% \newlength{\cftsubtablenumwidth}
+\newcommand*{\cftsubtablefont}{}
+\newcommand*{\cftsubtablename}{}
+\newcommand*{\cftsubtablepresnum}{}
+\newcommand*{\cftsubtableaftersnum}{}
+\newcommand*{\cftsubtableaftersnumb}{}
+\newcommand*{\cftsubtableleader}{}
+\newcommand*{\cftsubtabledotsep}{1}
+\newcommand*{\cftsubtablepagefont}{}
+\newcommand*{\cftsubtableafterpnum}{}
+\newcommand*{\cftsubtableformatpnum}[1]{}
+\newcommand*{\cftsubtableformatpnumhook}[1]{}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand*{\booknumberline}[1]{}
+\renewcommand*{\partnumberline}[1]{}
+\renewcommand*{\chapternumberline}[1]{}
+\renewcommand*{\numberlinehook}[1]{}
+% \renewcommand*{\cftwhatismyname}{}%
+\renewcommand*{\booknumberlinehook}[1]{}
+\renewcommand*{\partnumberlinehook}[1]{}
+\renewcommand*{\chapternumberlinehook}[1]{}
+\renewcommand{\numberlinebox}[2]{}
+\renewcommand{\booknumberlinebox}[2]{}
+\renewcommand{\partnumberlinebox}[2]{}
+\renewcommand{\chapternumberlinebox}[2]{}
+%
+% \newlength{\cftparfillskip}
+\renewcommand*{\cftpagenumbersoff}[1]{}
+\renewcommand*{\cftpagenumberson}[1]{}
+\renewcommand*{\cftlocalchange}[3]{}
+\renewcommand*{\cftaddtitleline}[4]{}
+\renewcommand*{\cftaddnumtitleline}[4]{}
+\renewcommand{\cftinsertcode}[2]{}
+\renewcommand{\cftinserthook}[2]{}
+\renewcommand{\settocpreprocessor}[2]{}
+\DeclareRobustCommand{\cftpagenumbersoff}[1]{}
+\DeclareRobustCommand{\cftpagenumberson}[1]{}
+% \end{macrocode}
+%
+% \subsection{Floats and captions}
+%
+% \begin{noindmacro}{\newfloat} \oarg{1: within} \marg{2: type}
+% \marg{3: ext} \marg{4: capname}
+% \begin{macrocode}
+\RenewDocumentCommand{\newfloat}{o m m m}{%
+\IfValueTF{#1}%
+{\DeclareFloatingEnvironment[fileext=#3,within=#1,name={#4}]{#2}}%
+{\DeclareFloatingEnvironment[fileext=#3,name={#4}]{#2}}%
+% \end{macrocode}
+% \pkg{newfloat} package automatically creates the \cs{listof} command
+% for new floats, but \pkg{float} does not,
+% so remove \cs{listof} here in case it is manually created later.
+% ^^A *8* keep the following?
+% \begin{macrocode}
+\cslet{listof#2s}\relax%
+\cslet{listof#2es}\relax%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindmacro}{\newlistof} \oarg{within} \marg{type} \marg{ext} \marg{listofname}
+%
+% Emulated through the \cs{newfloat} mechanism.
+% Note that \pkg{memoir} uses a different syntax than \pkg{tocloft} for the name.
+% \begin{macrocode}
+\RenewDocumentCommand{\newlistof}{o m m m}
+{%
+\IfValueTF{#1}
+{\newlistentry[#1]{#2}{#3}{0}}
+{\newlistentry{#2}{#3}{0}}
+\@namedef{ext@#2}{#3}%
+\@ifundefined{c@#3depth}{\newcounter{#3depth}}{}%
+\setcounter{#3depth}{1}%
+\@namedef{#3mark}{}%
+\@namedef{#2}{\listof{#2}{#4}}
+\@namedef{@cftmake#3title}{}
+\@ifundefined{cftbefore#3titleskip}{
+ \expandafter\newlength\csname cftbefore#3titleskip\endcsname
+ \expandafter\newlength\csname cftafter#3titleskip\endcsname
+}{}
+\@namedef{cft#3titlefont}{}
+\@namedef{cftafter#3title}{}
+\@namedef{cft#3prehook}{}
+\@namedef{cft#3posthook}{}
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{macrocode}
+\renewcommand{\setfloatadjustment}[2]{}
+% \end{macrocode}
+%
+% Borrowed from the \pkg{lwarp} version of \pkg{keyfloat}:
+% \begin{macrocode}
+\NewDocumentEnvironment{KFLTmemoir@marginfloat}{O{-1.2ex} m}
+{% start
+\LWR@BlockClassWP{float:right; width:2in; margin:10pt}{}{marginblock}%
+\captionsetup{type=#2}%
+}
+{%
+\endLWR@BlockClassWP%
+}
+
+\DeclareDocumentEnvironment{marginfigure}{o}
+ {\begin{KFLTmemoir@marginfloat}{figure}}
+ {\end{KFLTmemoir@marginfloat}}
+
+\DeclareDocumentEnvironment{margintable}{o}
+ {\begin{KFLTmemoir@marginfloat}{table}}
+ {\end{KFLTmemoir@marginfloat}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand{\setmarginfloatcaptionadjustment}[2]{}
+\renewcommand{\setmpjustification}[2]{}
+\renewcommand*{\mpjustification}{}
+\renewcommand*{\setfloatlocations}[2]{}
+\DeclareDocumentCommand{\suppressfloats}{o}{}
+\renewcommand*{\FloatBlock}{}
+\renewcommand*{\FloatBlockAllowAbove}{}
+\renewcommand*{\FloatBlockAllowBelow}{}
+\renewcommand*{\setFloatBlockFor}{}
+
+\renewcommand{\captiontitlefinal}[1]{}
+
+\renewcommand{\flegtable}{\tablename}
+\renewcommand{\flegfigure}{\figurename}
+\renewcommand{\flegtoctable}{}
+\renewcommand{\flegtocfigure}{}
+
+
+\renewcommand{\subcaption}[2][]{%
+\ifblank{#1}{\subfloat[#2]{}}{\subfloat[#1][#2]{}}%
+}
+
+\renewcommand{\contsubcaption}{\ContinuedFloat\subcaption}
+
+\LetLtxMacro\subcaptionref\subref
+
+\renewcommand*{\tightsubcaptions}{}
+\renewcommand*{\loosesubcaptions}{}
+
+\renewcommand*{\subcaptionsize}[1]{}
+\renewcommand*{\subcaptionlabelfont}[1]{}
+\renewcommand*{\subcaptionfont}[1]{}
+\renewcommand*{\subcaptionstyle}[1]{}
+
+\renewcommand*{\hangsubcaption}{}
+\renewcommand*{\shortsubcaption}{}
+\renewcommand*{\normalsubcaption}{}
+
+\RenewDocumentEnvironment{sidecaption}{o m o}
+{}
+{
+\IfValueTF{#1}{\caption[#1]{#2}}{\caption{#2}}%
+\IfValueT{#3}{\label{#3}}%
+}
+
+% \newlength{\sidecapwidth}
+% \newlength{\sidecapsep}
+\renewcommand*{\setsidecaps}[2]{}
+\renewcommand*{\sidecapmargin}[1]{}
+% \newif\ifscapmargleft
+\scapmargleftfalse
+\renewcommand*{\setsidecappos}[1]{}
+
+\RenewDocumentEnvironment{sidecontcaption}{m o}
+{}
+{%
+\ContinuedFloat%
+\caption{#1}%
+% \end{macrocode}
+% Without \cs{@captype}, the section is referred to instead.
+% \begin{macrocode}
+\IfValueT{#2}{\label[\@captype]{#2}}%
+}
+% \end{macrocode}
+% \cs{sidenamedlegend} does not appear to use the \TOC\ argument.
+% \begin{macrocode}
+\renewenvironment{sidenamedlegend}[2][]{
+\begin{center}
+\@nameuse{\@captype name}\CaptionSeparator#2
+\end{center}
+}
+{}
+
+\renewenvironment{sidelegend}[1]
+{\begin{center}
+#1
+
+}
+{\end{center}}
+
+\renewcommand*{\sidecapstyle}{}
+\renewcommand*{\overridescapmargin}[1]{}
+% \newlength{\sidecapraise}
+\renewcommand*{\sidecapfloatwidth}{\linewidth}
+
+\LetLtxMacro\ctabular\tabular
+\LetLtxMacro\endctabular\endtabular
+
+\renewcommand{\autorows}[5][]{%
+#5
+}
+
+\renewcommand{\autocols}[5][]{%
+#5
+}
+% \end{macrocode}
+%
+% \subsection{Page notes}
+%
+% \begin{macrocode}
+\renewcommand*{\feetabovefloat}{}
+\renewcommand*{\feetbelowfloat}{}
+\renewcommand*{\feetatbottom}{}
+
+\renewcommand*{\verbfootnote}[2][]{
+\PackageError{lwarp,memoir}
+{Verbatim footnotes are not yet supported by lwarp.}
+{This may be improved some day.}
+}
+
+\renewcommand*{\plainfootnotes}{}
+\renewcommand*{\twocolumnfootnotes}{}
+\renewcommand*{\threecolumnfootnotes}{}
+\renewcommand*{\paragraphfootnotes}{}
+\renewcommand*{\footfudgefiddle}{}
+
+\renewcommand*{\newfootnoteseries}[1]{
+\PackageError{lwarp,memoir}
+{Memoir footnote series are not yet supported by lwarp.}
+{This may be improved some day.}
+}
+
+\renewcommand*{\plainfootstyle}[1]{}
+\renewcommand*{\twocolumnfootstyle}[1]{}
+\renewcommand*{\threecolumnfootstyle}[1]{}
+\renewcommand*{\paragraphfootstyle}[1]{}
+
+\renewcommand*{\footfootmark}{}
+\renewcommand*{\footmarkstyle}[1]{}
+
+% \newlength{\footmarkwidth}
+% \newlength{\footmarksep}
+% \newlength{\footparindent}
+
+\renewcommand*{\foottextfont}{}
+
+\renewcommand*{\marginparmargin}[1]{}
+\renewcommand*{\sideparmargin}[1]{}
+
+\LetLtxMacro\sidepar\marginpar
+\renewcommand*{\sideparfont}{}
+\renewcommand*{\sideparform}{}
+\LWR@providelength{\sideparvshift}
+
+\renewcommand*{\parnopar}{}
+
+\renewcommand{\sidebar}[1]{\begin{quote}#1\end{quote}}
+\renewcommand*{\sidebarmargin}[1]{}
+\renewcommand*{\sidebarfont}{}
+\renewcommand*{\sidebarform}{}
+% \newlength{\sidebarhsep}
+% \newlength{\sidebarvsep}
+% \newlength{\sidebarwidth}
+% \newlength{\sidebartopsep}
+\renewcommand{\setsidebarheight}[1]{}
+\renewcommand*{\setsidebars}[6]{}
+\renewcommand*{\footnotesatfoot}{}
+\renewcommand*{\footnotesinmargin}{}
+
+\LetLtxMacro\sidefootnote\footnote
+\LetLtxMacro\sidefootnotemark\footnotemark
+\LetLtxMacro\sidefootnotetext\footnotetext
+
+\renewcommand*{\sidefootmargin}[1]{}
+% \newlength{\sidefoothsep}
+% \newlength{\sidefootvsep}
+% \newlength{\sidefootwidth}
+% \newlength{\sidefootadjust}
+% \newlength{\sidefootheight}
+\renewcommand*{\setsidefootheight}[1]{}
+% \renewcommand*{\sidefootfont}{}% in docs but not in the package
+\renewcommand*{\setsidefeet}[6]{}
+\renewcommand*{\sidefootmarkstyle}[1]{}
+\renewcommand*{\sidefoottextfont}{}
+\renewcommand*{\sidefootform}{}
+
+\renewcommand*{\continuousnotenums}{\pncontopttrue}% from pagenote
+\renewcommand*{\notepageref}{}
+\renewcommand*{\prenotetext}{}
+\renewcommand*{\postnotetext}{}
+\renewcommand*{\idtextinnotes}[1]{}
+\renewcommand*{\printpageinnotes}[1]{}
+\renewcommand*{\printpageinnoteshyperref}[1]{}
+\renewcommand*{\foottopagenote}{}
+\renewcommand*{\pagetofootnote}{}
+% \end{macrocode}
+%
+% \subsection{Decorative text}
+%
+% \begin{macrocode}
+\renewcommand*{\epigraphposition}[1]{}
+\renewcommand*{\epigraphtextposition}[1]{}
+\renewcommand*{\epigraphsourceposition}[1]{}
+\renewcommand*{\epigraphfontsize}[1]{}
+\renewcommand*{\epigraphforheader}[2][]{}
+\renewcommand*{\epigraphpicture}{}
+% \end{macrocode}
+%
+% \subsection{Poetry}
+%
+% \begin{macrocode}
+\renewcommand*{\vinphantom}{}
+\renewcommand*{\vleftofline}[1]{#1}
+% \let\linenumberfrequency\poemlines
+% \renewcommand*{\linenumberfont}[1]{}
+
+\DeclareDocumentCommand{\PoemTitle}{s o o m}{%
+\IfValueTF{#2}%
+{\poemtitle[#2]{#4}}%
+{\poemtitle{#4}}%
+}
+
+\renewcommand*{\NumberPoemTitle}{}
+\renewcommand*{\PlainPoemTitle}{}
+\renewcommand*{\poemtitlepstyle}{}
+\renewcommand*{\poemtitlestarmark}[1]{}
+\renewcommand*{\poemtitlestarpstyle}{}
+\renewcommand*{\PoemTitleheadstart}{}
+\renewcommand*{\printPoemTitlenonum}{}
+\renewcommand*{\printPoemTitlenum}{}
+\renewcommand*{\afterPoemTitlenum}{}
+\renewcommand*{\printPoemTitletitle}[1]{}
+\renewcommand*{\afterPoemTitle}{}
+\newlength{\midpoemtitleskip}
+\renewcommand*{\PoemTitlenumfont}{}
+\renewcommand*{\PoemTitlefont}{}
+% \end{macrocode}
+%
+% \subsection{Boxes, verbatims and files}
+%
+% \begin{macrocode}
+\renewenvironment{qframe}{\framed}{\endframed}
+\renewenvironment{qshade}{\shaded}{\endshaded}
+% \end{macrocode}
+%
+% Use the \pkg{comment} package:
+% \begin{macrocode}
+\renewcommand*{\commentsoff}[1]{\includecomment{#1}}
+\renewcommand*{\commentson}[1]{\excludecomment{#1}}
+\LetLtxMacro\renewcomment\commentson
+
+\renewcommand*{\setverbatimfont}[1]{}
+\renewcommand*{\tabson}[1]{}
+\renewcommand*{\tabsoff}{}
+\renewcommand*{\wrappingon}{}
+\renewcommand*{\wrappingoff}{}
+\renewcommand*{\verbatimindent}{}
+\renewcommand*{\verbatimbreakchar}[1]{}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DefineVerbatimEnvironment{fboxverbatim}{Verbatim}{frame=single}
+% \end{macrocode}
+%
+% \env{boxedverbatim} is already defined by \pkg{moreverb}.
+% \env{boxedverbatim*} does not appear to work at all, even in a minimal print
+% \pkg{memoir} document.
+%
+% \begin{macrocode}
+\renewcommand*{\bvbox}{}
+\renewcommand*{\bvtopandtail}{}
+\renewcommand*{\bvsides}{}
+\renewcommand*{\nobvbox}{}
+% \newlength\bvboxsep
+\renewcommand*{\bvtoprulehook}{}
+\renewcommand*{\bvtopmidhook}{}
+\renewcommand*{\bvendrulehook}{}
+\renewcommand*{\bvleftsidehook}{}
+\renewcommand*{\bvrightsidehook}{}
+\renewcommand*{\bvperpagetrue}{}
+\renewcommand*{\bvperpagefalse}{}
+\renewcommand{\bvtopofpage}[1]{}
+\renewcommand{\bvendofpage}[1]{}
+\renewcommand*{\linenumberfrequency}[1]{}
+\renewcommand*{\resetbvlinenumber}{}
+\renewcommand*{\setbvlinenums}[2]{}
+\renewcommand*{\linenumberfont}[1]{}
+\renewcommand*{\bvnumbersinside}{}
+\renewcommand*{\bvnumbersoutside}{}
+% \end{macrocode}
+%
+% \subsection{Cross referencing}
+%
+% \begin{macrocode}
+\renewcommand*{\fref}[1]{\cref{#1}}
+\renewcommand*{\tref}[1]{\cref{#1}}
+\renewcommand*{\pref}[1]{\cpageref{#1}}
+\renewcommand*{\Aref}[1]{\cref{#1}}
+\renewcommand*{\Bref}[1]{\cref{#1}}
+\renewcommand*{\Pref}[1]{\cref{#1}}
+\renewcommand*{\Sref}[1]{\cref{#1}}
+\renewcommand*{\figurerefname}{Figure}
+\renewcommand*{\tablerefname}{Table}
+\renewcommand*{\pagerefname}{page}
+\renewcommand*{\bookrefname}{Book~}
+\renewcommand*{\partrefname}{Part~}
+\renewcommand*{\chapterrefname}{Chapter~}
+\renewcommand*{\sectionrefname}{\S}
+\renewcommand*{\appendixrefname}{Appendix~}
+\LetLtxMacro\titleref\nameref
+\renewcommand*{\headnameref}{}
+\renewcommand*{\tocnameref}{}
+
+\providecounter{LWR@currenttitle}
+
+\renewcommand*{\currenttitle}{%
+ \addtocounter{LWR@currenttitle}{1}%
+ \label{currenttitle\arabic{LWR@currenttitle}}%
+ \nameref{currenttitle\arabic{LWR@currenttitle}}%
+}
+
+\renewcommand*{\theTitleReference}[2]{}
+\renewcommand*{\namerefon}{}
+\renewcommand*{\namerefoff}{}
+% \end{macrocode}
+%
+% \subsection{Back matter}
+% \label{sec:memoirbackmatter}
+%
+% Redefined to write the |LWR@autoindex| counter instead of |page|.
+% Note that \pkg{memoir} has two versions, depending on the use of \pkg{hyperref}.
+% \begin{macrocode}
+\AtBeginDocument{
+
+\def\@@wrindexhyp#1||\\{%
+ \addtocounter{LWR@autoindex}{1}%
+ \LWR@new@label{LWRindex-\arabic{LWR@autoindex}}%
+% \ifshowindexmark\@showidx{#1}\fi
+ \protected@write\@auxout{}%
+ {\string\@@wrindexm@m{\@idxfile}{#1}{\arabic{LWR@autoindex}}}%
+ \endgroup
+ \@esphack}%
+% \end{macrocode}
+%
+% \label{sec:specialindex}
+% \cs{specialindex} behaves like a regular \cs{index}, pointing to where
+% \cs{specialindex} is used.
+% If \cs{specialindex} is used inside a figure or table after the \cs{caption},
+% then the hyperlink will be given the name of that particular figure or table.
+% \changes{v0.58}{2018/06/22}{\pkg{lwarp-patch-memoir}: Fix for \cs{specialindex}.}
+% \begin{macrocode}
+\def\@@wrspindexhyp#1||\\{%
+ \addtocounter{LWR@autoindex}{1}%
+ \LWR@new@label{LWRindex-\arabic{LWR@autoindex}}%
+% \ifshowindexmark\@showidx{#1}\fi
+ \protected@write\@auxout{}%
+ {%
+% \string\@@wrindexm@m{\@idxfile}{#1}{\@nameuse{the\@sptheidx}}%
+ \string\@@wrindexm@m{\@idxfile}{#1}{\arabic{LWR@autoindex}}%
+ }%
+ \endgroup
+ \@esphack}%
+
+}% \AtBeginDocument
+% \end{macrocode}
+
+% Patched to use |_html| filename and \cs{BaseJobname}:
+% \changes{v0.58}{2018/06/22}{\pkg{lwarp-patch-memoir}: Fix for multiple indexes.}
+% \begin{macrocode}
+\catcode`\_=12%
+\renewcommand*{\makeindex}[1][\BaseJobname]{%
+ \if@filesw
+ \def\gindex{\@bsphack%
+ \@ifnextchar [{\@index}{\@index[\BaseJobname]}}
+ \def\specialindex{\@bsphack\@spindex}%
+ \makememindexhook
+ \expandafter\newwrite\csname #1@idxfile\endcsname
+ \expandafter\immediate\openout \csname #1@idxfile\endcsname #1_html.idx\relax
+ \typeout{Writing index file #1_html.idx }%
+ \fi}
+\catcode`\_=8%
+% \end{macrocode}
+
+% Patched to use |_html| filename and \cs{BaseJobname}.
+% This will later be patched by the \pkg{lwarp} core.
+% \changes{v0.58}{2018/06/22}{\pkg{lwarp-patch-memoir}: Fix for multiple indexes.}
+% \begin{macrocode}
+\catcode`\_=12%
+\renewcommand{\printindex}[1][\BaseJobname]{\@input@{#1_html.ind}}
+\catcode`\_=8%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareDocumentCommand{\newblock}{}{}
+%
+\renewcommand*{\showindexmarks}{}
+\renewcommand*{\hideindexmarks}{}
+
+\renewcommand*{\xindyindex}{}
+% \end{macrocode}
+%
+% \subsection{Miscellaneous}
+%
+% \begin{macrocode}
+\renewcommand*{\changemarks}{}
+\renewcommand*{\nochangemarks}{}
+\renewcommand*{\added}[1]{}
+\renewcommand*{\deleted}[1]{}
+\renewcommand*{\changed}[1]{}
+
+\renewcommand*{\showtrimsoff}{}
+\renewcommand*{\showtrimson}{}
+\renewcommand*{\trimXmarks}{}
+\renewcommand*{\trimLmarks}{}
+\renewcommand*{\trimFrame}{}
+\renewcommand*{\trimNone}{}
+\renewcommand*\trimmarkscolor{}
+\renewcommand*{\trimmarks}{}
+\renewcommand*{\tmarktl}{}
+\renewcommand*{\tmarktr}{}
+\renewcommand*{\tmarkbr}{}
+\renewcommand*{\tmarkbl}{}
+\renewcommand*{\tmarktm}{}
+\renewcommand*{\tmarkmr}{}
+\renewcommand*{\tmarkbm}{}
+\renewcommand*{\tmarkml}{}
+\renewcommand*{\trimmark}{}
+\renewcommand*{\quarkmarks}{}
+\renewcommand*{\registrationColour}[1]{}
+
+\renewcommand*{\leavespergathering}[1]{}
+
+\renewcommand*{\noprelistbreak}{}
+
+\renewcommand*{\cleartorecto}{}
+\renewcommand*{\cleartoverso}{}
+
+\renewenvironment{vplace}[1][]{}{}
+% \end{macrocode}
+%
+%
+% \subsection{\pkg{ccaption} emulation}
+%
+% \begin{macrocode}
+\renewcommand*{\captiondelim}[1]{\renewcommand*{\CaptionSeparator}{#1}}
+\renewcommand*{\captionnamefont}[1]{}
+\renewcommand*{\captiontitlefont}[1]{}
+\renewcommand*{\flushleftright}{}
+\renewcommand*{\centerlastline}{}
+\renewcommand*{\captionstyle}[2][]{}
+\DeclareDocumentCommand{\captionwidth}{m}{}
+\renewcommand*{\changecaptionwidth}{}
+\renewcommand*{\normalcaptionwidth}{}
+\renewcommand*{\hangcaption}{}
+\renewcommand*{\indentcaption}[1]{}
+\renewcommand*{\normalcaption}{}
+\renewcommand{\precaption}[1]{}
+\renewcommand{\postcaption}[1]{}
+\renewcommand{\midbicaption}[1]{}
+\renewcommand{\contcaption}[1]{%
+% \ContinuedFloat%
+% \caption{#1}%
+\begin{LWR@figcaption}% later becomes \caption*
+\LWR@isolate{\@nameuse{\@captype name}}~%
+\thechapter.\the\value{\@captype}\CaptionSeparator\LWR@isolate{#1}%
+\end{LWR@figcaption}
+}
+% \end{macrocode}
+
+% \begin{macrocode}
+\newlength{\abovelegendskip}
+\setlength{\abovelegendskip}{0.5\baselineskip}
+\newlength{\belowlegendskip}
+\setlength{\belowlegendskip}{\abovelegendskip}
+% \end{macrocode}
+
+% The extra |\\| here forces a \element{br} in \HTML\ when \cs{legend} is
+% used in a \cs{marginpar}.
+% \begin{macrocode}
+\renewcommand{\legend}[1]{\begin{center}#1\\\end{center}}
+
+\renewcommand{\namedlegend}[2][]{
+\begin{center}
+\@nameuse{fleg\@captype}\CaptionSeparator#2\\
+\end{center}
+\@nameuse{flegtoc\@captype}{#1}
+}
+
+\renewcommand{\newfixedcaption}[3][\caption]{%
+ \renewcommand{#2}{\def\@captype{#3}#1}}
+\renewcommand{\renewfixedcaption}[3][\caption]{%
+ \renewcommand{#2}{\def\@captype{#3}#1}}
+\renewcommand{\providefixedcaption}[3][\caption]{%
+ \providecommand{#2}{\def\@captype{#3}#1}}
+
+\renewcommand{\bitwonumcaption}[6][]{%
+\ifblank{#2}{\caption{#3}}{\caption[#2]{#3}}%
+\addtocounter{\@captype}{-1}%
+\begingroup%
+\csdef{\@captype name}{#4}%
+\ifblank{#5}{\caption{#6}}{\caption[#5]{#6}}%
+\endgroup%
+\ifblank{#1}{}{\label{#1}}%
+}
+
+\LetLtxMacro\bionenumcaption\bitwonumcaption% todo
+
+\renewcommand{\bicaption}[5][]{%
+\ifblank{#2}{\caption{#3}}{\caption[#2]{#3}}%
+\begin{LWR@figcaption}% later becomes \caption*
+\LWR@isolate{#4} \thechapter.\the\value{\@captype}\CaptionSeparator\LWR@isolate{#5}%
+\end{LWR@figcaption}
+\ifblank{#1}{}{\label{#1}}%
+}
+
+\renewcommand{\bicontcaption}[3]{%
+\contcaption{#1}%
+\begingroup%
+\csdef{\@captype name}{#2}%
+\contcaption{#3}%
+\endgroup%
+}
+% \end{macrocode}
+% ^^A *8* todo:
+% \begin{macrocode}
+% only in ccaption, not in memoir:
+% \LetLtxMacro\longbitwonumcaption\bitwonumcaption%
+% \LetLtxMacro\longbionenumcaption\bitwonumcaption%
+% \LetLtxMacro\longbicaption\bicaption%
+
+\RenewDocumentCommand{\subtop}{O{} O{} m}{%
+\subfloat[#1][#2]{#3}%
+}
+
+\RenewDocumentCommand{\subbottom}{O{} O{} m}{%
+\subfloat[#1][#2]{#3}%
+}
+
+\renewcommand{\contsubtop}{%
+\ContinuedFloat\addtocounter{\@captype}{1}%
+\subtop}
+
+\renewcommand{\contsubbottom}{%
+\ContinuedFloat\addtocounter{\@captype}{1}%
+\subbottom}
+
+\renewcommand{\subconcluded}{}
+
+\let\subfigure\subbottom
+\let\subtable\subtop
+
+\let\contsubtable\contsubtop
+\let\contsubfigure\contsubbottom
+% \end{macrocode}
+% ^^A *8* todo:
+% ^^A tocloft stuff
+% \begin{macrocode}
+\newcommand{\newfloatentry}[4][\@empty]{TODO: newfloatentry}
+\newcommand{\newfloatlist}[5][\@empty]{TODO: newfloatlist}
+\newcommand{\newfloatenv}[4][\@empty]{TODO: newfloatenv}
+\DeclareRobustCommand{\newfloatpagesoff}[1]{}
+\DeclareRobustCommand{\newfloatpageson}[1]{}
+\newcommand{\setnewfloatindents}[3]{}
+% \end{macrocode}
+%
+%
+% \subsection{Final patchwork}
+%
+% \begin{macrocode}
+\newlistof{tableofcontents}{toc}{\contentsname}
+\newlistof{listoffigures}{lof}{\listfigurename}
+\newlistof{listoftables}{lot}{\listtablename}
+% \end{macrocode}
+%
+% \iffalse
+%</patch-memoir>
+% \fi
+%
+%
+% \addtocontents{toc}{\protect\setcounter{tocdepth}{0}}
+%
+%
+% ^^A *common-multimedia
+%
+% \iffalse
+%<*common-multimedia>
+% \fi
+%
+% \part{lwarp-common-multimedia.sty}
+%
+% \section{common-multimedia}
+%
+% \DescribePackage{lwarp-common-multimedia}
+% Common code for \pkg{multimedia}, \pkg{movie15}, and \pkg{media9}.
+%
+% \limitsmultimedia
+%
+% \changes{v0.71}{2019/04/22}{\pkg{lwarp-common-multimedia}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\ProvidesPackage{lwarp-common-multimedia}[2019/04/22]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\RequirePackage{xkeyval}
+
+\define@key{LWR@multimedia}{width}{\setlength{\LWR@multimedia@width}{#1}}
+\define@key{LWR@multimedia}{height}{\setlength{\LWR@multimedia@height}{#1}}
+\define@key{LWR@multimedia}{totalheight}{\setlength{\LWR@multimedia@height}{#1}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newlength{\LWR@multimedia@width}
+\newlength{\LWR@multimedia@height}
+\newlength{\LWR@multimedia@maxdimension}
+% \end{macrocode}
+%
+%
+% \begin{noindmacro}{\LWR@multimedia@printsize}
+% Proportional to \cs{linewidth} and the viewport's smaller dimension.
+% This scales each object such that it will always fit on the screen,
+% even if a tall or wide object inside a tall or wide viewport.
+% \begin{macrocode}
+\newcommand*{\LWR@multimedia@printsize}{%
+ \setlength{\LWR@multimedia@maxdimension}{%
+ \maxof%
+ {\linewidth}%
+ {\maxof{\LWR@multimedia@width}{\LWR@multimedia@height}}%
+ }%
+ \setlength{\LWR@multimedia@maxdimension}{1.1\LWR@multimedia@maxdimension}%
+ \ifdimgreater{\LWR@multimedia@width}{0pt}{%
+ width:%
+ \LWR@printpercentlength%
+ {\LWR@multimedia@width}%
+ {\LWR@multimedia@maxdimension}vmin ; % space
+ }{}%
+ \ifdimgreater{\LWR@multimedia@height}{0pt}{%
+ height:%
+ \LWR@printpercentlength%
+ {\LWR@multimedia@height}%
+ {\LWR@multimedia@maxdimension}vmin ; % space
+ }{}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\LWR@multimedia@fileAV}
+% \marg{poster text} \marg{filename}
+% \marg{audio/video} \marg{mimetype}
+%
+% Creates a video or audio from a file.
+% \begin{macrocode}
+\newcommand*{\LWR@multimedia@fileAV}[4]{%
+\filename@parse{#2}%
+\IfFileExists{#2}{%
+% \end{macrocode}
+% The container \element{div} is sized as desired.
+% \changes{v0.73}{2019/06/24}{\pkg{lwarp-common-multimedia}: Fix: No size for audio file.}
+% \begin{macrocode}
+ \ifstrequal{#3}{audio}{%
+ \begin{BlockClass}{AVviewport}
+ }{%
+ \begin{BlockClass}[\LWR@multimedia@printsize\ margin:auto]{AVviewport}
+ }
+% \end{macrocode}
+% Paragraph tags are unnecessary for the \AV\ tags.
+% \begin{macrocode}
+ \LWR@stoppars
+% \end{macrocode}
+% The \AV\ element is 100\% of the container.
+% \changes{v0.73}{2019/06/24}{\pkg{lwarp-common-multimedia}: Fix: No size for audio file.}
+% \begin{macrocode}
+ \LWR@htmltag{%
+ #3\ % space
+ \ifstrequal{#3}{audio}{}{%
+ width=\textquotedbl{}100\%\textquotedbl\ % space
+ height=\textquotedbl{}100\%\textquotedbl\ % space
+ }%
+ controls%
+ }\LWR@orignewline
+% \end{macrocode}
+% The file source and type:
+% \begin{macrocode}
+ \LWR@htmltag{%
+ source % space
+ src=\textquotedbl%
+ \@filef@und\unskip\textquotedbl\ % space
+ type=\textquotedbl{}#4\textquotedbl}
+% \end{macrocode}
+% The poster text inside paragraph tags, along with a reference to the file.
+% \begin{macrocode}
+ \LWR@startpars
+ \href{\@filef@und}{#1}
+ \LWR@stoppars
+% \end{macrocode}
+% Finish.
+% \begin{macrocode}
+ \LWR@htmltag{/#3}\LWR@orignewline
+ \end{BlockClass}
+}{%
+ \PackageError{lwarp-common-multimedia}
+ {File '#2' not found}
+ {Perhaps an incorrect path?}
+}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\LWR@multimedia@httpAV}
+% \marg{poster text} \marg{filename}
+% \marg{audio/video} \marg{mimetype}
+%
+% Creates a video or audio from a \URL\ link.
+% \begin{macrocode}
+\newcommand*{\LWR@multimedia@httpAV}[4]{%
+% \end{macrocode}
+% The container \element{div} is sized as desired.
+% \changes{v0.73}{2019/06/24}{\pkg{lwarp-common-multimedia}: Fix: No size for audio file.}
+% \begin{macrocode}
+ \ifstrequal{#3}{audio}{%
+ \begin{BlockClass}{AVviewport}
+ }{%
+ \begin{BlockClass}[\LWR@multimedia@printsize\ margin:auto]{AVviewport}
+ }
+% \end{macrocode}
+% Paragraph tags are unnecessary for the \AV\ tags.
+% \begin{macrocode}
+ \LWR@stoppars
+% \end{macrocode}
+% The \AV\ element is 100\% of the container.
+% \changes{v0.73}{2019/06/24}{\pkg{lwarp-common-multimedia}: Fix: No size for audio file.}
+% \begin{macrocode}
+ \LWR@htmltag{%
+ #3\ % space
+ \ifstrequal{#3}{audio}{}{%
+ width=\textquotedbl{}100\%\textquotedbl\ % space
+ height=\textquotedbl{}100\%\textquotedbl\ controls%
+ }%
+ }\LWR@orignewline
+% \end{macrocode}
+% The file source and type:
+% \begin{macrocode}
+ \LWR@htmltag{%
+ source % space
+ src=\textquotedbl#2\textquotedbl\ % space
+ type=\textquotedbl#4\textquotedbl}
+% \end{macrocode}
+% The poster text inside paragraph tags, along with a reference to the \URL.
+% \begin{macrocode}
+ \LWR@startpars
+ \href{#2}{#1}
+ \LWR@stoppars
+% \end{macrocode}
+% Finish.
+% \begin{macrocode}
+ \LWR@htmltag{/#3}\LWR@orignewline
+ \end{BlockClass}
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\LWR@multimedia@AV}
+% \marg{poster text} \marg{filename}
+% \marg{audio/video} \marg{mimetype}
+%
+% Creates an audio or video from a file or a \URL.
+% \begin{macrocode}
+\newcommand*{\LWR@multimedia@AV}[4]{%
+ \IfBeginWith{#2}{http}%
+ {\LWR@multimedia@httpAV{#1}{#2}{#3}{#4}}%
+ {%
+ \IfBeginWith{#2}{HTTP}%
+ {\LWR@multimedia@httpAV{#1}{#2}{#3}{#4}}%
+ {\LWR@multimedia@fileAV{#1}{#2}{#3}{#4}}%
+ }%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\LWR@multimedia@embed}
+% \marg{poster text} \marg{URL or filename} \marg{mime type}
+%
+% Embeds multimedia of an arbitrary type.
+% The poster text is not used, as it would appear along with the video if
+% the \element{embed} element is supported.
+% \begin{macrocode}
+\newcommand*{\LWR@multimedia@embed}[3]{%
+ \begin{BlockClass}[width:100\%]{AVviewport}%
+ \LWR@stoppars
+ \LWR@htmltag{%
+ embed % space
+ \ifblank{#3}{}{type=\textquotedbl#3\textquotedbl\ }%
+ style=\textquotedbl\LWR@multimedia@printsize\ margin:auto\textquotedbl\ % space
+ src=\textquotedbl#2\textquotedbl\ % space
+ }%
+ \LWR@startpars
+ \end{BlockClass}
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\LWR@multimedia@percenterror}
+% Error message if the comment character is used among the arguments
+% of \cs{LWR@multimediab}.
+% \begin{macrocode}
+\newcommand*{\LWR@multimedia@percenterror}{%
+ \PackageError{lwarp-media9}
+ {%
+ Do not use a percent comment
+ between\MessageBreak
+ \protect\includemedia\space arguments%
+ }
+ {Percent is changed to a regular character to allow its use inside a URL.}
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\LWR@multimediab}
+% \oarg{options} \marg{poster text} \marg{filename}
+%
+% Creates multimedia.
+% Examines the file extension to determine the type.
+% If not a supported type, creates an embedded object if it has a \URL.
+% If neither, create a link to the unsupported object.
+%
+% \changes{v0.73}{2019/06/24}{\pkg{lwarp-common-multimedia}: Fix: Paragraph tags.}
+% \begin{macrocode}
+\newcommand*{\LWR@multimediab}[3][]{%
+% \end{macrocode}
+% Error if the percent character appears among the arguments.
+% This could happen since the comment character has been temporarily disabled,
+% for use in a \URL.
+% \begin{macrocode}
+ \if#1\@percentchar\LWR@multimedia@percenterror\fi%
+ \if#2\@percentchar\LWR@multimedia@percenterror\fi%
+ \if#3\@percentchar\LWR@multimedia@percenterror\fi%
+% \end{macrocode}
+% Paragraph handling:
+% \begin{macrocode}
+ \LWR@stoppars%
+% \end{macrocode}
+% Record the desired size.
+% \begin{macrocode}
+ \setlength{\LWR@multimedia@width}{0pt}%
+ \setlength{\LWR@multimedia@height}{0pt}%
+ \setkeys*{LWR@multimedia}{#1}%
+% \end{macrocode}
+% If a known \AV\ type, create an \HTML5\ \element{video} or \element{audio}.
+% \begin{macrocode}
+ \IfEndWith{#3}{.mp4}{\LWR@multimedia@AV{#2}{#3}{video}{video/mp4}}{%
+ \IfEndWith{#3}{.MP4}{\LWR@multimedia@AV{#2}{#3}{video}{video/mp4}}{%
+ \IfEndWith{#3}{.mp3}{\LWR@multimedia@AV{#2}{#3}{audio}{audio/mpeg}}{%
+ \IfEndWith{#3}{.MP3}{\LWR@multimedia@AV{#2}{#3}{audio}{audio/mpeg}}{%
+% \end{macrocode}
+% If an arbitrary \URL, embed it.
+% \begin{macrocode}
+ \IfBeginWith{#3}{http}{\LWR@multimedia@embed{#2}{#3}{}}{%
+ \IfBeginWith{#3}{HTTP}{\LWR@multimedia@embed{#2}{#3}{}}{%
+ \IfBeginWith{#3}{ftp}{\LWR@multimedia@embed{#2}{#3}{}}{%
+ \IfBeginWith{#3}{FTP}{\LWR@multimedia@embed{#2}{#3}{}}{%
+% \end{macrocode}
+% If unknown, create a link to it.
+% \begin{macrocode}
+ \href{#3}{#2}% unknown format
+ }}}}}}}}%
+% \end{macrocode}
+% Paragraph handling:
+% \begin{macrocode}
+ \LWR@startpars%
+ \endgroup%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% Catcodes which may apper in a \URL.
+% \begin{macrocode}
+\newrobustcmd*{\LWR@multimedia}{%
+ \begingroup%
+ \catcode`\#=12%
+ \catcode`\%=12%
+ \catcode`\&=12%
+ \catcode`\~=12%
+ \catcode`\_=12%
+ \LWR@multimediab%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</common-multimedia>
+% \fi
+%
+%
+% \addtocontents{toc}{\protect\setcounter{tocdepth}{4}}
+%
+%
+%
+% \clearpage
+% \renewcommand*{\partname}{}
+% \renewcommand*{\thepart}{}
+%
+% \titleformat{\part}[hang]
+% {\needspace{15\baselineskip}\LARGE\rmfamily\bfseries}{}{0pt}{}
+%
+% \titleformat{\section}[hang]
+% {\Large\rmfamily\bfseries}{}{0pt}{}[\marginpar{\hfill\textsection\,\thesection}\smallskip\hrule]
+%
+%
+% \Finale
+%
+%
+%
+%
+%
+\endinput
+
+
+
+
+
diff --git a/macros/latex/contrib/lwarp/lwarp.ins b/macros/latex/contrib/lwarp/lwarp.ins
new file mode 100644
index 0000000000..5290fa245c
--- /dev/null
+++ b/macros/latex/contrib/lwarp/lwarp.ins
@@ -0,0 +1,484 @@
+%% lwarp.ins
+%% Copyright 2016-2019 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.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Brian Dunn.
+%%
+%% This work consists of the files lwarp.dtx and lwarp.ins
+%% and the derived files lwarp.sty and lwarp-*.sty
+\input docstrip.tex
+\keepsilent
+%% \usedir{tex/latex/ package }
+\preamble
+This is a generated file.
+Copyright 2016-2019 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.
+\endpreamble
+\askforoverwritefalse
+\generate{
+\file{lwarp.sty}{\from{lwarp.dtx}{package}}
+\file{lwarp-2in1.sty}{\from{lwarp.dtx}{2in1}}
+\file{lwarp-2up.sty}{\from{lwarp.dtx}{2up}}
+\file{lwarp-a4.sty}{\from{lwarp.dtx}{a4}}
+\file{lwarp-a4wide.sty}{\from{lwarp.dtx}{a4wide}}
+\file{lwarp-a5comb.sty}{\from{lwarp.dtx}{a5comb}}
+\file{lwarp-abstract.sty}{\from{lwarp.dtx}{abstract}}
+\file{lwarp-academicons.sty}{\from{lwarp.dtx}{academicons}}
+\file{lwarp-accsupp.sty}{\from{lwarp.dtx}{accsupp}}
+\file{lwarp-acro.sty}{\from{lwarp.dtx}{acro}}
+\file{lwarp-acronym.sty}{\from{lwarp.dtx}{acronym}}
+\file{lwarp-adjmulticol.sty}{\from{lwarp.dtx}{adjmulticol}}
+\file{lwarp-addlines.sty}{\from{lwarp.dtx}{addlines}}
+\file{lwarp-afterpage.sty}{\from{lwarp.dtx}{afterpage}}
+\file{lwarp-algorithm2e.sty}{\from{lwarp.dtx}{algorithm2e}}
+\file{lwarp-algorithmicx.sty}{\from{lwarp.dtx}{algorithmicx}}
+\file{lwarp-alltt.sty}{\from{lwarp.dtx}{alltt}}
+\file{lwarp-amsmath.sty}{\from{lwarp.dtx}{amsmath}}
+\file{lwarp-amsthm.sty}{\from{lwarp.dtx}{amsthm}}
+\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-ar.sty}{\from{lwarp.dtx}{ar}}
+\file{lwarp-arabicfront.sty}{\from{lwarp.dtx}{arabicfront}}
+\file{lwarp-array.sty}{\from{lwarp.dtx}{array}}
+\file{lwarp-arydshln.sty}{\from{lwarp.dtx}{arydshln}}
+\file{lwarp-asymptote.sty}{\from{lwarp.dtx}{asymptote}}
+\file{lwarp-atbegshi.sty}{\from{lwarp.dtx}{atbegshi}}
+\file{lwarp-attachfile.sty}{\from{lwarp.dtx}{attachfile}}
+\file{lwarp-attachfile2.sty}{\from{lwarp.dtx}{attachfile2}}
+\file{lwarp-authblk.sty}{\from{lwarp.dtx}{authblk}}
+\file{lwarp-autonum.sty}{\from{lwarp.dtx}{autonum}}
+\file{lwarp-axessibility.sty}{\from{lwarp.dtx}{axessibility}}
+\file{lwarp-axodraw2.sty}{\from{lwarp.dtx}{axodraw2}}
+\file{lwarp-backnaur.sty}{\from{lwarp.dtx}{backnaur}}
+\file{lwarp-backref.sty}{\from{lwarp.dtx}{backref}}
+\file{lwarp-balance.sty}{\from{lwarp.dtx}{balance}}
+\file{lwarp-bbding.sty}{\from{lwarp.dtx}{bbding}}
+\file{lwarp-biblatex.sty}{\from{lwarp.dtx}{biblatex}}
+\file{lwarp-bibunits.sty}{\from{lwarp.dtx}{bibunits}}
+\file{lwarp-bigdelim.sty}{\from{lwarp.dtx}{bigdelim}}
+\file{lwarp-bigfoot.sty}{\from{lwarp.dtx}{bigfoot}}
+\file{lwarp-bigstrut.sty}{\from{lwarp.dtx}{bigstrut}}
+\file{lwarp-bitpattern.sty}{\from{lwarp.dtx}{bitpattern}}
+\file{lwarp-blowup.sty}{\from{lwarp.dtx}{blowup}}
+\file{lwarp-booklet.sty}{\from{lwarp.dtx}{booklet}}
+\file{lwarp-bookmark.sty}{\from{lwarp.dtx}{bookmark}}
+\file{lwarp-booktabs.sty}{\from{lwarp.dtx}{booktabs}}
+\file{lwarp-bophook.sty}{\from{lwarp.dtx}{bophook}}
+\file{lwarp-bounddvi.sty}{\from{lwarp.dtx}{bounddvi}}
+\file{lwarp-boxedminipage2e.sty}{\from{lwarp.dtx}{boxedminipage2e}}
+\file{lwarp-breakurl.sty}{\from{lwarp.dtx}{breakurl}}
+\file{lwarp-breqn.sty}{\from{lwarp.dtx}{breqn}}
+\file{lwarp-bsheaders.sty}{\from{lwarp.dtx}{bsheaders}}
+\file{lwarp-bxpapersize.sty}{\from{lwarp.dtx}{bxpapersize}}
+\file{lwarp-bytefield.sty}{\from{lwarp.dtx}{bytefield}}
+\file{lwarp-cancel.sty}{\from{lwarp.dtx}{cancel}}
+\file{lwarp-canoniclayout.sty}{\from{lwarp.dtx}{canoniclayout}}
+\file{lwarp-caption.sty}{\from{lwarp.dtx}{caption}}
+\file{lwarp-cases.sty}{\from{lwarp.dtx}{cases}}
+\file{lwarp-changebar.sty}{\from{lwarp.dtx}{changebar}}
+\file{lwarp-changelayout.sty}{\from{lwarp.dtx}{changelayout}}
+\file{lwarp-changepage.sty}{\from{lwarp.dtx}{changepage}}
+\file{lwarp-changes.sty}{\from{lwarp.dtx}{changes}}
+\file{lwarp-chappg.sty}{\from{lwarp.dtx}{chappg}}
+\file{lwarp-chapterbib.sty}{\from{lwarp.dtx}{chapterbib}}
+\file{lwarp-chemfig.sty}{\from{lwarp.dtx}{chemfig}}
+\file{lwarp-chemformula.sty}{\from{lwarp.dtx}{chemformula}}
+\file{lwarp-chemgreek.sty}{\from{lwarp.dtx}{chemgreek}}
+\file{lwarp-chemmacros.sty}{\from{lwarp.dtx}{chemmacros}}
+\file{lwarp-chemnum.sty}{\from{lwarp.dtx}{chemnum}}
+\file{lwarp-chkfloat.sty}{\from{lwarp.dtx}{chkfloat}}
+\file{lwarp-chngpage.sty}{\from{lwarp.dtx}{chngpage}}
+\file{lwarp-cite.sty}{\from{lwarp.dtx}{cite}}
+\file{lwarp-CJK.sty}{\from{lwarp.dtx}{CJK}}
+\file{lwarp-CJKutf8.sty}{\from{lwarp.dtx}{CJKutf8}}
+\file{lwarp-clrdblpg.sty}{\from{lwarp.dtx}{clrdblpg}}
+\file{lwarp-cmdtrack.sty}{\from{lwarp.dtx}{cmdtrack}}
+\file{lwarp-color.sty}{\from{lwarp.dtx}{color}}
+\file{lwarp-colortbl.sty}{\from{lwarp.dtx}{colortbl}}
+\file{lwarp-continue.sty}{\from{lwarp.dtx}{continue}}
+\file{lwarp-copyrightbox.sty}{\from{lwarp.dtx}{copyrightbox}}
+\file{lwarp-crop.sty}{\from{lwarp.dtx}{crop}}
+\file{lwarp-ctable.sty}{\from{lwarp.dtx}{ctable}}
+\file{lwarp-cuted.sty}{\from{lwarp.dtx}{cuted}}
+\file{lwarp-cutwin.sty}{\from{lwarp.dtx}{cutwin}}
+\file{lwarp-dblfloatfix.sty}{\from{lwarp.dtx}{dblfloatfix}}
+\file{lwarp-dblfnote.sty}{\from{lwarp.dtx}{dblfnote}}
+\file{lwarp-dcolumn.sty}{\from{lwarp.dtx}{dcolumn}}
+\file{lwarp-diagbox.sty}{\from{lwarp.dtx}{diagbox}}
+\file{lwarp-dingbat.sty}{\from{lwarp.dtx}{dingbat}}
+\file{lwarp-dprogress.sty}{\from{lwarp.dtx}{dprogress}}
+\file{lwarp-draftcopy.sty}{\from{lwarp.dtx}{draftcopy}}
+\file{lwarp-draftfigure.sty}{\from{lwarp.dtx}{draftfigure}}
+\file{lwarp-draftwatermark.sty}{\from{lwarp.dtx}{draftwatermark}}
+\file{lwarp-easy-todo.sty}{\from{lwarp.dtx}{easy-todo}}
+\file{lwarp-ebook.sty}{\from{lwarp.dtx}{ebook}}
+\file{lwarp-ed.sty}{\from{lwarp.dtx}{ed}}
+\file{lwarp-ellipsis.sty}{\from{lwarp.dtx}{ellipsis}}
+\file{lwarp-embrac.sty}{\from{lwarp.dtx}{embrac}}
+\file{lwarp-emptypage.sty}{\from{lwarp.dtx}{emptypage}}
+\file{lwarp-endfloat.sty}{\from{lwarp.dtx}{endfloat}}
+\file{lwarp-endheads.sty}{\from{lwarp.dtx}{endheads}}
+\file{lwarp-endnotes.sty}{\from{lwarp.dtx}{endnotes}}
+\file{lwarp-enumerate.sty}{\from{lwarp.dtx}{enumerate}}
+\file{lwarp-enumitem.sty}{\from{lwarp.dtx}{enumitem}}
+\file{lwarp-epigraph.sty}{\from{lwarp.dtx}{epigraph}}
+\file{lwarp-epsfig.sty}{\from{lwarp.dtx}{epsfig}}
+\file{lwarp-epstopdf.sty}{\from{lwarp.dtx}{epstopdf}}
+\file{lwarp-epstopdf-base.sty}{\from{lwarp.dtx}{epstopdf-base}}
+\file{lwarp-eqlist.sty}{\from{lwarp.dtx}{eqlist}}
+\file{lwarp-eqparbox.sty}{\from{lwarp.dtx}{eqparbox}}
+\file{lwarp-errata.sty}{\from{lwarp.dtx}{errata}}
+\file{lwarp-eso-pic.sty}{\from{lwarp.dtx}{eso-pic}}
+\file{lwarp-eurosym.sty}{\from{lwarp.dtx}{eurosym}}
+\file{lwarp-everypage.sty}{\from{lwarp.dtx}{everypage}}
+\file{lwarp-everyshi.sty}{\from{lwarp.dtx}{everyshi}}
+\file{lwarp-extramarks.sty}{\from{lwarp.dtx}{extramarks}}
+\file{lwarp-fancybox.sty}{\from{lwarp.dtx}{fancybox}}
+\file{lwarp-fancyhdr.sty}{\from{lwarp.dtx}{fancyhdr}}
+\file{lwarp-fancyref.sty}{\from{lwarp.dtx}{fancyref}}
+\file{lwarp-fancytabs.sty}{\from{lwarp.dtx}{fancytabs}}
+\file{lwarp-fancyvrb.sty}{\from{lwarp.dtx}{fancyvrb}}
+\file{lwarp-figcaps.sty}{\from{lwarp.dtx}{figcaps}}
+\file{lwarp-figsize.sty}{\from{lwarp.dtx}{figsize}}
+\file{lwarp-fitbox.sty}{\from{lwarp.dtx}{fitbox}}
+\file{lwarp-fix2col.sty}{\from{lwarp.dtx}{fix2col}}
+\file{lwarp-fixme.sty}{\from{lwarp.dtx}{fixme}}
+\file{lwarp-fixmetodonotes.sty}{\from{lwarp.dtx}{fixmetodonotes}}
+\file{lwarp-flafter.sty}{\from{lwarp.dtx}{flafter}}
+\file{lwarp-flippdf.sty}{\from{lwarp.dtx}{flippdf}}
+\file{lwarp-float.sty}{\from{lwarp.dtx}{float}}
+\file{lwarp-floatflt.sty}{\from{lwarp.dtx}{floatflt}}
+\file{lwarp-floatpag.sty}{\from{lwarp.dtx}{floatpag}}
+\file{lwarp-floatrow.sty}{\from{lwarp.dtx}{floatrow}}
+\file{lwarp-fltrace.sty}{\from{lwarp.dtx}{fltrace}}
+\file{lwarp-flushend.sty}{\from{lwarp.dtx}{flushend}}
+\file{lwarp-fnbreak.sty}{\from{lwarp.dtx}{fnbreak}}
+\file{lwarp-fncychap.sty}{\from{lwarp.dtx}{fncychap}}
+\file{lwarp-fnlineno.sty}{\from{lwarp.dtx}{fnlineno}}
+\file{lwarp-fnpos.sty}{\from{lwarp.dtx}{fnpos}}
+\file{lwarp-fontawesome.sty}{\from{lwarp.dtx}{fontawesome}}
+\file{lwarp-fontawesome5.sty}{\from{lwarp.dtx}{fontawesome5}}
+\file{lwarp-fontaxes.sty}{\from{lwarp.dtx}{fontaxes}}
+\file{lwarp-footmisc.sty}{\from{lwarp.dtx}{footmisc}}
+\file{lwarp-footnote.sty}{\from{lwarp.dtx}{footnote}}
+\file{lwarp-footnotebackref.sty}{\from{lwarp.dtx}{footnotebackref}}
+\file{lwarp-footnotehyper.sty}{\from{lwarp.dtx}{footnotehyper}}
+\file{lwarp-footnoterange.sty}{\from{lwarp.dtx}{footnoterange}}
+\file{lwarp-fontenc.sty}{\from{lwarp.dtx}{fontenc}}
+\file{lwarp-footnpag.sty}{\from{lwarp.dtx}{footnpag}}
+\file{lwarp-foreign.sty}{\from{lwarp.dtx}{foreign}}
+\file{lwarp-forest.sty}{\from{lwarp.dtx}{forest}}
+\file{lwarp-framed.sty}{\from{lwarp.dtx}{framed}}
+\file{lwarp-ftcap.sty}{\from{lwarp.dtx}{ftcap}}
+\file{lwarp-ftnright.sty}{\from{lwarp.dtx}{ftnright}}
+\file{lwarp-fullminipage.sty}{\from{lwarp.dtx}{fullminipage}}
+\file{lwarp-fullpage.sty}{\from{lwarp.dtx}{fullpage}}
+\file{lwarp-fullwidth.sty}{\from{lwarp.dtx}{fullwidth}}
+\file{lwarp-fwlw.sty}{\from{lwarp.dtx}{fwlw}}
+\file{lwarp-gentombow.sty}{\from{lwarp.dtx}{gentombow}}
+\file{lwarp-geometry.sty}{\from{lwarp.dtx}{geometry}}
+\file{lwarp-gloss.sty}{\from{lwarp.dtx}{gloss}}
+\file{lwarp-glossaries.sty}{\from{lwarp.dtx}{glossaries}}
+\file{lwarp-gmeometric.sty}{\from{lwarp.dtx}{gmeometric}}
+\file{lwarp-graphicx.sty}{\from{lwarp.dtx}{graphicx}}
+\file{lwarp-graphics.sty}{\from{lwarp.dtx}{graphics}}
+\file{lwarp-grffile.sty}{\from{lwarp.dtx}{grffile}}
+\file{lwarp-grid.sty}{\from{lwarp.dtx}{grid}}
+\file{lwarp-grid-system.sty}{\from{lwarp.dtx}{grid-system}}
+\file{lwarp-gridset.sty}{\from{lwarp.dtx}{gridset}}
+\file{lwarp-hang.sty}{\from{lwarp.dtx}{hang}}
+\file{lwarp-hanging.sty}{\from{lwarp.dtx}{hanging}}
+\file{lwarp-hypbmsec.sty}{\from{lwarp.dtx}{hypbmsec}}
+\file{lwarp-hypcap.sty}{\from{lwarp.dtx}{hypcap}}
+\file{lwarp-hypdestopt.sty}{\from{lwarp.dtx}{hypdestopt}}
+\file{lwarp-hypernat.sty}{\from{lwarp.dtx}{hypernat}}
+\file{lwarp-hyperref.sty}{\from{lwarp.dtx}{hyperref}}
+\file{lwarp-hyperxmp.sty}{\from{lwarp.dtx}{hyperxmp}}
+\file{lwarp-hyphenat.sty}{\from{lwarp.dtx}{hyphenat}}
+\file{lwarp-idxlayout.sty}{\from{lwarp.dtx}{idxlayout}}
+\file{lwarp-ifoddpage.sty}{\from{lwarp.dtx}{ifoddpage}}
+\file{lwarp-imakeidx.sty}{\from{lwarp.dtx}{imakeidx}}
+\file{lwarp-index.sty}{\from{lwarp.dtx}{index}}
+\file{lwarp-inputtrc.sty}{\from{lwarp.dtx}{inputtrc}}
+\file{lwarp-intopdf.sty}{\from{lwarp.dtx}{intopdf}}
+\file{lwarp-karnaugh-map.sty}{\from{lwarp.dtx}{karnaugh-map}}
+\file{lwarp-keyfloat.sty}{\from{lwarp.dtx}{keyfloat}}
+\file{lwarp-layaureo.sty}{\from{lwarp.dtx}{layaureo}}
+\file{lwarp-layout.sty}{\from{lwarp.dtx}{layout}}
+\file{lwarp-layouts.sty}{\from{lwarp.dtx}{layouts}}
+\file{lwarp-leading.sty}{\from{lwarp.dtx}{leading}}
+\file{lwarp-letterspace.sty}{\from{lwarp.dtx}{letterspace}}
+\file{lwarp-lettrine.sty}{\from{lwarp.dtx}{lettrine}}
+\file{lwarp-lineno.sty}{\from{lwarp.dtx}{lineno}}
+\file{lwarp-lips.sty}{\from{lwarp.dtx}{lips}}
+\file{lwarp-listings.sty}{\from{lwarp.dtx}{listings}}
+\file{lwarp-listliketab.sty}{\from{lwarp.dtx}{listliketab}}
+\file{lwarp-lltjext.sty}{\from{lwarp.dtx}{lltjext}}
+\file{lwarp-longtable.sty}{\from{lwarp.dtx}{longtable}}
+\file{lwarp-lscape.sty}{\from{lwarp.dtx}{lscape}}
+\file{lwarp-ltablex.sty}{\from{lwarp.dtx}{ltablex}}
+\file{lwarp-ltcaption.sty}{\from{lwarp.dtx}{ltcaption}}
+\file{lwarp-ltxgrid.sty}{\from{lwarp.dtx}{ltxgrid}}
+\file{lwarp-ltxtable.sty}{\from{lwarp.dtx}{ltxtable}}
+\file{lwarp-lua-check-hyphen.sty}{\from{lwarp.dtx}{lua-check-hyphen}}
+\file{lwarp-lua-visual-debug.sty}{\from{lwarp.dtx}{lua-visual-debug}}
+\file{lwarp-luacolor.sty}{\from{lwarp.dtx}{luacolor}}
+\file{lwarp-luatodonotes.sty}{\from{lwarp.dtx}{luatodonotes}}
+\file{lwarp-lyluatex.sty}{\from{lwarp.dtx}{lyluatex}}
+\file{lwarp-magaz.sty}{\from{lwarp.dtx}{magaz}}
+\file{lwarp-makeidx.sty}{\from{lwarp.dtx}{makeidx}}
+\file{lwarp-manyfoot.sty}{\from{lwarp.dtx}{manyfoot}}
+\file{lwarp-marginal.sty}{\from{lwarp.dtx}{marginal}}
+\file{lwarp-marginfit.sty}{\from{lwarp.dtx}{marginfit}}
+\file{lwarp-marginfix.sty}{\from{lwarp.dtx}{marginfix}}
+\file{lwarp-marginnote.sty}{\from{lwarp.dtx}{marginnote}}
+\file{lwarp-marvosym.sty}{\from{lwarp.dtx}{marvosym}}
+\file{lwarp-mathtools.sty}{\from{lwarp.dtx}{mathtools}}
+\file{lwarp-mcaption.sty}{\from{lwarp.dtx}{mcaption}}
+\file{lwarp-mdframed.sty}{\from{lwarp.dtx}{mdframed}}
+\file{lwarp-media9.sty}{\from{lwarp.dtx}{media9}}
+\file{lwarp-memhfixc.sty}{\from{lwarp.dtx}{memhfixc}}
+\file{lwarp-metalogo.sty}{\from{lwarp.dtx}{metalogo}}
+\file{lwarp-metalogox.sty}{\from{lwarp.dtx}{metalogox}}
+\file{lwarp-mhchem.sty}{\from{lwarp.dtx}{mhchem}}
+\file{lwarp-microtype.sty}{\from{lwarp.dtx}{microtype}}
+\file{lwarp-midfloat.sty}{\from{lwarp.dtx}{midfloat}}
+\file{lwarp-midpage.sty}{\from{lwarp.dtx}{midpage}}
+\file{lwarp-minibox.sty}{\from{lwarp.dtx}{minibox}}
+\file{lwarp-minitoc.sty}{\from{lwarp.dtx}{minitoc}}
+\file{lwarp-morefloats.sty}{\from{lwarp.dtx}{morefloats}}
+\file{lwarp-moreverb.sty}{\from{lwarp.dtx}{moreverb}}
+\file{lwarp-movie15.sty}{\from{lwarp.dtx}{movie15}}
+\file{lwarp-mparhack.sty}{\from{lwarp.dtx}{mparhack}}
+\file{lwarp-multicap.sty}{\from{lwarp.dtx}{multicap}}
+\file{lwarp-multicol.sty}{\from{lwarp.dtx}{multicol}}
+\file{lwarp-multicolrule.sty}{\from{lwarp.dtx}{multicolrule}}
+\file{lwarp-multimedia.sty}{\from{lwarp.dtx}{multimedia}}
+\file{lwarp-multirow.sty}{\from{lwarp.dtx}{multirow}}
+\file{lwarp-multitoc.sty}{\from{lwarp.dtx}{multitoc}}
+\file{lwarp-musicography.sty}{\from{lwarp.dtx}{musicography}}
+\file{lwarp-nameauth.sty}{\from{lwarp.dtx}{nameauth}}
+\file{lwarp-nameref.sty}{\from{lwarp.dtx}{nameref}}
+\file{lwarp-natbib.sty}{\from{lwarp.dtx}{natbib}}
+\file{lwarp-nccfancyhdr.sty}{\from{lwarp.dtx}{nccfancyhdr}}
+\file{lwarp-needspace.sty}{\from{lwarp.dtx}{needspace}}
+\file{lwarp-nextpage.sty}{\from{lwarp.dtx}{nextpage}}
+\file{lwarp-nfssext-cfr.sty}{\from{lwarp.dtx}{nfssext-cfr}}
+\file{lwarp-nicefrac.sty}{\from{lwarp.dtx}{nicefrac}}
+\file{lwarp-niceframe.sty}{\from{lwarp.dtx}{niceframe}}
+\file{lwarp-nomencl.sty}{\from{lwarp.dtx}{nomencl}}
+\file{lwarp-nonfloat.sty}{\from{lwarp.dtx}{nonfloat}}
+\file{lwarp-nonumonpart.sty}{\from{lwarp.dtx}{nonumonpart}}
+\file{lwarp-nopageno.sty}{\from{lwarp.dtx}{nopageno}}
+\file{lwarp-notes.sty}{\from{lwarp.dtx}{notes}}
+\file{lwarp-notespages.sty}{\from{lwarp.dtx}{notespages}}
+\file{lwarp-nowidow.sty}{\from{lwarp.dtx}{nowidow}}
+\file{lwarp-ntheorem.sty}{\from{lwarp.dtx}{ntheorem}}
+\file{lwarp-octave.sty}{\from{lwarp.dtx}{octave}}
+\file{lwarp-overpic.sty}{\from{lwarp.dtx}{overpic}}
+\file{lwarp-pagegrid.sty}{\from{lwarp.dtx}{pagegrid}}
+\file{lwarp-pagenote.sty}{\from{lwarp.dtx}{pagenote}}
+\file{lwarp-pagesel.sty}{\from{lwarp.dtx}{pagesel}}
+\file{lwarp-paralist.sty}{\from{lwarp.dtx}{paralist}}
+\file{lwarp-parnotes.sty}{\from{lwarp.dtx}{parnotes}}
+\file{lwarp-parskip.sty}{\from{lwarp.dtx}{parskip}}
+\file{lwarp-pbox.sty}{\from{lwarp.dtx}{pbox}}
+\file{lwarp-pdfcomment.sty}{\from{lwarp.dtx}{pdfcomment}}
+\file{lwarp-pdfcrypt.sty}{\from{lwarp.dtx}{pdfcrypt}}
+\file{lwarp-pdflscape.sty}{\from{lwarp.dtx}{pdflscape}}
+\file{lwarp-pdfmarginpar.sty}{\from{lwarp.dtx}{pdfmarginpar}}
+\file{lwarp-pdfpages.sty}{\from{lwarp.dtx}{pdfpages}}
+\file{lwarp-pdfprivacy.sty}{\from{lwarp.dtx}{pdfprivacy}}
+\file{lwarp-pdfrender.sty}{\from{lwarp.dtx}{pdfrender}}
+\file{lwarp-pdfsync.sty}{\from{lwarp.dtx}{pdfsync}}
+\file{lwarp-pdftricks.sty}{\from{lwarp.dtx}{pdftricks}}
+\file{lwarp-pdfx.sty}{\from{lwarp.dtx}{pdfx}}
+\file{lwarp-perpage.sty}{\from{lwarp.dtx}{perpage}}
+\file{lwarp-pfnote.sty}{\from{lwarp.dtx}{pfnote}}
+\file{lwarp-phfqit.sty}{\from{lwarp.dtx}{phfqit}}
+\file{lwarp-pifont.sty}{\from{lwarp.dtx}{pifont}}
+\file{lwarp-placeins.sty}{\from{lwarp.dtx}{placeins}}
+\file{lwarp-plarydshln.sty}{\from{lwarp.dtx}{plarydshln}}
+\file{lwarp-plext.sty}{\from{lwarp.dtx}{plext}}
+\file{lwarp-plextarydshln.sty}{\from{lwarp.dtx}{plextarydshln}}
+\file{lwarp-plextcolorbl.sty}{\from{lwarp.dtx}{plextcolortbl}}
+\file{lwarp-prelim2e.sty}{\from{lwarp.dtx}{prelim2e}}
+\file{lwarp-prettyref.sty}{\from{lwarp.dtx}{prettyref}}
+\file{lwarp-preview.sty}{\from{lwarp.dtx}{preview}}
+\file{lwarp-psfrag.sty}{\from{lwarp.dtx}{psfrag}}
+\file{lwarp-psfragx.sty}{\from{lwarp.dtx}{psfragx}}
+\file{lwarp-pst-eps.sty}{\from{lwarp.dtx}{pst-eps}}
+\file{lwarp-pstool.sty}{\from{lwarp.dtx}{pstool}}
+\file{lwarp-pstricks.sty}{\from{lwarp.dtx}{pstricks}}
+\file{lwarp-pxatbegshi.sty}{\from{lwarp.dtx}{pxatbegshi}}
+\file{lwarp-pxeveryshi.sty}{\from{lwarp.dtx}{pxeveryshi}}
+\file{lwarp-pxftnright.sty}{\from{lwarp.dtx}{pxftnright}}
+\file{lwarp-pxjahyper.sty}{\from{lwarp.dtx}{pxjahyper}}
+\file{lwarp-quotchap.sty}{\from{lwarp.dtx}{quotchap}}
+\file{lwarp-quoting.sty}{\from{lwarp.dtx}{quoting}}
+\file{lwarp-ragged2e.sty}{\from{lwarp.dtx}{ragged2e}}
+\file{lwarp-realscripts.sty}{\from{lwarp.dtx}{realscripts}}
+\file{lwarp-refcheck.sty}{\from{lwarp.dtx}{refcheck}}
+\file{lwarp-register.sty}{\from{lwarp.dtx}{register}}
+\file{lwarp-relsize.sty}{\from{lwarp.dtx}{relsize}}
+\file{lwarp-repeatindex.sty}{\from{lwarp.dtx}{repeatindex}}
+\file{lwarp-resizegather.sty}{\from{lwarp.dtx}{resizegather}}
+\file{lwarp-rmpage.sty}{\from{lwarp.dtx}{rmpage}}
+\file{lwarp-romanbar.sty}{\from{lwarp.dtx}{romanbar}}
+\file{lwarp-romanbarpagenumber.sty}{\from{lwarp.dtx}{romanbarpagenumber}}
+\file{lwarp-rotating.sty}{\from{lwarp.dtx}{rotating}}
+\file{lwarp-rotfloat.sty}{\from{lwarp.dtx}{rotfloat}}
+\file{lwarp-rviewport.sty}{\from{lwarp.dtx}{rviewport}}
+\file{lwarp-savetrees.sty}{\from{lwarp.dtx}{savetrees}}
+\file{lwarp-scalefnt.sty}{\from{lwarp.dtx}{scalefnt}}
+\file{lwarp-schemata.sty}{\from{lwarp.dtx}{schemata}}
+\file{lwarp-scrextend.sty}{\from{lwarp.dtx}{scrextend}}
+\file{lwarp-scrhack.sty}{\from{lwarp.dtx}{scrhack}}
+\file{lwarp-scrlayer.sty}{\from{lwarp.dtx}{scrlayer}}
+\file{lwarp-scrlayer-notecolumn.sty}{\from{lwarp.dtx}{scrlayer-notecolumn}}
+\file{lwarp-scrlayer-scrpage.sty}{\from{lwarp.dtx}{scrlayer-scrpage}}
+\file{lwarp-scrpage2.sty}{\from{lwarp.dtx}{scrpage2}}
+\file{lwarp-section.sty}{\from{lwarp.dtx}{section}}
+\file{lwarp-sectionbreak.sty}{\from{lwarp.dtx}{sectionbreak}}
+\file{lwarp-sectsty.sty}{\from{lwarp.dtx}{sectsty}}
+\file{lwarp-semantic-markup.sty}{\from{lwarp.dtx}{semantic-markup}}
+\file{lwarp-setspace.sty}{\from{lwarp.dtx}{setspace}}
+\file{lwarp-shadow.sty}{\from{lwarp.dtx}{shadow}}
+\file{lwarp-shapepar.sty}{\from{lwarp.dtx}{shapepar}}
+\file{lwarp-showidx.sty}{\from{lwarp.dtx}{idx}}
+\file{lwarp-showkeys.sty}{\from{lwarp.dtx}{showkeys}}
+\file{lwarp-showtags.sty}{\from{lwarp.dtx}{showtags}}
+\file{lwarp-sidecap.sty}{\from{lwarp.dtx}{sidecap}}
+\file{lwarp-sidenotes.sty}{\from{lwarp.dtx}{sidenotes}}
+\file{lwarp-SIunits.sty}{\from{lwarp.dtx}{SIunits}}
+\file{lwarp-siunitx.sty}{\from{lwarp.dtx}{siunitx}}
+\file{lwarp-slantsc.sty}{\from{lwarp.dtx}{slantsc}}
+\file{lwarp-soul.sty}{\from{lwarp.dtx}{soul}}
+\file{lwarp-soulpos.sty}{\from{lwarp.dtx}{soulpos}}
+\file{lwarp-soulutf8.sty}{\from{lwarp.dtx}{soulutf8}}
+\file{lwarp-splitidx.sty}{\from{lwarp.dtx}{splitidx}}
+\file{lwarp-srcltx.sty}{\from{lwarp.dtx}{srcltx}}
+\file{lwarp-srctex.sty}{\from{lwarp.dtx}{srctex}}
+\file{lwarp-stabular.sty}{\from{lwarp.dtx}{stabular}}
+\file{lwarp-stackengine.sty}{\from{lwarp.dtx}{stackengine}}
+\file{lwarp-stfloats.sty}{\from{lwarp.dtx}{stfloats}}
+\file{lwarp-struktex.sty}{\from{lwarp.dtx}{struktex}}
+\file{lwarp-subcaption.sty}{\from{lwarp.dtx}{subcaption}}
+\file{lwarp-subfig.sty}{\from{lwarp.dtx}{subfig}}
+\file{lwarp-subfigure.sty}{\from{lwarp.dtx}{subfigure}}
+\file{lwarp-supertabular.sty}{\from{lwarp.dtx}{supertabular}}
+\file{lwarp-syntonly.sty}{\from{lwarp.dtx}{syntonly}}
+\file{lwarp-tabfigures.sty}{\from{lwarp.dtx}{tabfigures}}
+\file{lwarp-tablefootnote.sty}{\from{lwarp.dtx}{tablefootnote}}
+\file{lwarp-tabls.sty}{\from{lwarp.dtx}{tabls}}
+\file{lwarp-tabularx.sty}{\from{lwarp.dtx}{tabularx}}
+\file{lwarp-tabulary.sty}{\from{lwarp.dtx}{tabulary}}
+\file{lwarp-tascmac.sty}{\from{lwarp.dtx}{tascmac}}
+\file{lwarp-textarea.sty}{\from{lwarp.dtx}{textarea}}
+\file{lwarp-textcomp.sty}{\from{lwarp.dtx}{textcomp}}
+\file{lwarp-textfit.sty}{\from{lwarp.dtx}{textfit}}
+\file{lwarp-textpos.sty}{\from{lwarp.dtx}{textpos}}
+\file{lwarp-theorem.sty}{\from{lwarp.dtx}{theorem}}
+\file{lwarp-thinsp.sty}{\from{lwarp.dtx}{thinsp}}
+\file{lwarp-threadcol.sty}{\from{lwarp.dtx}{threadcol}}
+\file{lwarp-threeparttable.sty}{\from{lwarp.dtx}{threeparttable}}
+\file{lwarp-threeparttablex.sty}{\from{lwarp.dtx}{threeparttablex}}
+\file{lwarp-thumb.sty}{\from{lwarp.dtx}{thumb}}
+\file{lwarp-thumbs.sty}{\from{lwarp.dtx}{thumbs}}
+\file{lwarp-tikz.sty}{\from{lwarp.dtx}{tikz}}
+\file{lwarp-titleps.sty}{\from{lwarp.dtx}{titleps}}
+\file{lwarp-titleref.sty}{\from{lwarp.dtx}{titleref}}
+\file{lwarp-titlesec.sty}{\from{lwarp.dtx}{titlesec}}
+\file{lwarp-titletoc.sty}{\from{lwarp.dtx}{titletoc}}
+\file{lwarp-titling.sty}{\from{lwarp.dtx}{titling}}
+\file{lwarp-tocbasic.sty}{\from{lwarp.dtx}{tocbasic}}
+\file{lwarp-tocbibind.sty}{\from{lwarp.dtx}{tocbibind}}
+\file{lwarp-tocdata.sty}{\from{lwarp.dtx}{tocdata}}
+\file{lwarp-tocenter.sty}{\from{lwarp.dtx}{tocenter}}
+\file{lwarp-tocloft.sty}{\from{lwarp.dtx}{tocloft}}
+\file{lwarp-tocstyle.sty}{\from{lwarp.dtx}{tocstyle}}
+\file{lwarp-todo.sty}{\from{lwarp.dtx}{todo}}
+\file{lwarp-todonotes.sty}{\from{lwarp.dtx}{todonotes}}
+\file{lwarp-topcapt.sty}{\from{lwarp.dtx}{topcapt}}
+\file{lwarp-tram.sty}{\from{lwarp.dtx}{tram}}
+\file{lwarp-transparent.sty}{\from{lwarp.dtx}{transparent}}
+\file{lwarp-trimclip.sty}{\from{lwarp.dtx}{trimclip}}
+\file{lwarp-trivfloat.sty}{\from{lwarp.dtx}{trivfloat}}
+\file{lwarp-truncate.sty}{\from{lwarp.dtx}{truncate}}
+\file{lwarp-turnthepage.sty}{\from{lwarp.dtx}{turnthepage}}
+\file{lwarp-twoup.sty}{\from{lwarp.dtx}{twoup}}
+\file{lwarp-typearea.sty}{\from{lwarp.dtx}{typearea}}
+\file{lwarp-typicons.sty}{\from{lwarp.dtx}{typicons}}
+\file{lwarp-ulem.sty}{\from{lwarp.dtx}{ulem}}
+\file{lwarp-umoline.sty}{\from{lwarp.dtx}{umoline}}
+\file{lwarp-underscore.sty}{\from{lwarp.dtx}{underscore}}
+\file{lwarp-units.sty}{\from{lwarp.dtx}{units}}
+\file{lwarp-unitsdef.sty}{\from{lwarp.dtx}{unitsdef}}
+\file{lwarp-upref.sty}{\from{lwarp.dtx}{upref}}
+\file{lwarp-url.sty}{\from{lwarp.dtx}{url}}
+\file{lwarp-uspace.sty}{\from{lwarp.dtx}{uspace}}
+\file{lwarp-verse.sty}{\from{lwarp.dtx}{verse}}
+\file{lwarp-versonotes.sty}{\from{lwarp.dtx}{versonotes}}
+\file{lwarp-vertbars.sty}{\from{lwarp.dtx}{vertbars}}
+\file{lwarp-vmargin.sty}{\from{lwarp.dtx}{vmargin}}
+\file{lwarp-vowel.sty}{\from{lwarp.dtx}{vowel}}
+\file{lwarp-vpe.sty}{\from{lwarp.dtx}{vpe}}
+\file{lwarp-vwcol.sty}{\from{lwarp.dtx}{vwcol}}
+\file{lwarp-wallpaper.sty}{\from{lwarp.dtx}{wallpaper}}
+\file{lwarp-watermark.sty}{\from{lwarp.dtx}{watermark}}
+\file{lwarp-widows-and-orphans.sty}{\from{lwarp.dtx}{widows-and-orphans}}
+\file{lwarp-wrapfig.sty}{\from{lwarp.dtx}{wrapfig}}
+\file{lwarp-xbmks.sty}{\from{lwarp.dtx}{xbmks}}
+\file{lwarp-xcolor.sty}{\from{lwarp.dtx}{xcolor}}
+\file{lwarp-xechangebar.sty}{\from{lwarp.dtx}{xechangebar}}
+\file{lwarp-xellipsis.sty}{\from{lwarp.dtx}{xellipsis}}
+\file{lwarp-xetexko-vertical.sty}{\from{lwarp.dtx}{xetexko-vertical}}
+\file{lwarp-xfakebold.sty}{\from{lwarp.dtx}{xfakebold}}
+\file{lwarp-xfrac.sty}{\from{lwarp.dtx}{xfrac}}
+\file{lwarp-xltabular.sty}{\from{lwarp.dtx}{xltabular}}
+\file{lwarp-xltxtra.sty}{\from{lwarp.dtx}{xltxtra}}
+\file{lwarp-xmpincl.sty}{\from{lwarp.dtx}{xmpincl}}
+\file{lwarp-xpiano.sty}{\from{lwarp.dtx}{xpiano}}
+\file{lwarp-xpinyin.sty}{\from{lwarp.dtx}{xpinyin}}
+\file{lwarp-xr.sty}{\from{lwarp.dtx}{xr}}
+\file{lwarp-xr-hyper.sty}{\from{lwarp.dtx}{xr-hyper}}
+\file{lwarp-xtab.sty}{\from{lwarp.dtx}{xtab}}
+\file{lwarp-xunicode.sty}{\from{lwarp.dtx}{xunicode}}
+\file{lwarp-xurl.sty}{\from{lwarp.dtx}{xurl}}
+\file{lwarp-xy.sty}{\from{lwarp.dtx}{xy}}
+\file{lwarp-zhlineskip.sty}{\from{lwarp.dtx}{zhlineskip}}
+\file{lwarp-zwpagelayout.sty}{\from{lwarp.dtx}{zwpagelayout}}
+\file{lwarp-patch-komascript.sty}{\from{lwarp.dtx}{patch-komascript}}
+\file{lwarp-patch-memoir.sty}{\from{lwarp.dtx}{patch-memoir}}
+\file{lwarp-common-multimedia.sty}{\from{lwarp.dtx}{common-multimedia}}
+}
+\Msg{*********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space lwarp.sty, lwarp-*.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file lwarp.dtx}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*********************************************************}
+\endbatchfile
diff --git a/macros/latex/contrib/lwarp/lwarp.pdf b/macros/latex/contrib/lwarp/lwarp.pdf
new file mode 100644
index 0000000000..be96e39d95
--- /dev/null
+++ b/macros/latex/contrib/lwarp/lwarp.pdf
Binary files differ
diff --git a/macros/latex/contrib/lwarp/lwarp_baseline_marker.eps b/macros/latex/contrib/lwarp/lwarp_baseline_marker.eps
new file mode 100644
index 0000000000..f5c93c7ed6
--- /dev/null
+++ b/macros/latex/contrib/lwarp/lwarp_baseline_marker.eps
@@ -0,0 +1,32 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: GIMP PostScript file plugin V 1.17 by Peter Kirchgessner
+%%Title: lwarp_baseline_marker.eps
+%%CreationDate: Sun Sep 2 17:10:42 2018
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 2
+%%Pages: 1
+%%BoundingBox: 0 0 1 1
+%%EndComments
+%%BeginProlog
+% Use own dictionary to avoid conflicts
+10 dict begin
+%%EndProlog
+%%Page: 1 1
+% Translate for offset
+0 0 translate
+% Translate to begin of first scanline
+0 0.22677165354330711 translate
+0.22677165354330711 -0.22677165354330711 scale
+% Image geometry
+1 1 8
+% Transformation matrix
+[ 1 0 0 1 0 0 ]
+currentfile /ASCII85Decode filter /RunLengthDecode filter
+%%BeginData: 13 ASCII Bytes
+image
+!<%E~>
+%%EndData
+showpage
+%%Trailer
+end
+%%EOF
diff --git a/macros/latex/contrib/lwarp/lwarp_baseline_marker.png b/macros/latex/contrib/lwarp/lwarp_baseline_marker.png
new file mode 100644
index 0000000000..dcd8607cec
--- /dev/null
+++ b/macros/latex/contrib/lwarp/lwarp_baseline_marker.png
Binary files differ
diff --git a/macros/latex/contrib/lwarp/lwarp_tutorial.txt b/macros/latex/contrib/lwarp/lwarp_tutorial.txt
new file mode 100644
index 0000000000..a3b5a70ec8
--- /dev/null
+++ b/macros/latex/contrib/lwarp/lwarp_tutorial.txt
@@ -0,0 +1,95 @@
+
+% Save this as tutorial.tex for the lwarp package tutorial.
+
+\documentclass{book}
+
+\usepackage{iftex}
+
+% --- LOAD FONT SELECTION AND ENCODING BEFORE LOADING LWARP ---
+
+\ifPDFTeX
+\usepackage{lmodern} % pdflatex or dvi latex
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\else
+\usepackage{fontspec} % XeLaTeX or LuaLaTeX
+\fi
+
+% --- LWARP IS LOADED NEXT ---
+\usepackage[
+% HomeHTMLFilename=index, % Filename of the homepage.
+% HTMLFilename={node-}, % Filename prefix of other pages.
+% IndexLanguage=english, % Language for xindy index, glossary.
+% latexmk, % Use latexmk to compile.
+% OSWindows, % Force Windows. (Usually automatic.)
+% mathjax, % Use MathJax to display math.
+]{lwarp}
+% \boolfalse{FileSectionNames} % If false, numbers the files.
+
+% --- LOAD PDFLATEX MATH FONTS HERE ---
+
+% --- OTHER PACKAGES ARE LOADED AFTER LWARP ---
+\usepackage{makeidx} \makeindex
+\usepackage{xcolor} % (Demonstration purposes only.)
+\usepackage{hyperref,cleveref} % LOAD THESE LAST!
+
+% --- LATEX AND HTML CUSTOMIZATION ---
+\title{The Lwarp Tutorial}
+\author{Some Author}
+\setcounter{tocdepth}{2} % Include subsections in the \TOC.
+\setcounter{secnumdepth}{2} % Number down to subsections.
+\setcounter{FileDepth}{1} % Split \HTML\ files at sections
+\booltrue{CombineHigherDepths} % Combine parts/chapters/sections
+\setcounter{SideTOCDepth}{1} % Include subsections in the side\TOC
+\HTMLTitle{Webpage Title} % Overrides \title for the web page.
+\HTMLAuthor{Some Author} % Sets the HTML meta author tag.
+\HTMLLanguage{en-US} % Sets the HTML meta language.
+\HTMLDescription{A description.}% Sets the HTML meta description.
+\HTMLFirstPageTop{Name and \fbox{HOMEPAGE LOGO}}
+\HTMLPageTop{\fbox{LOGO}}
+\HTMLPageBottom{Contact Information and Copyright}
+\CSSFilename{lwarp_sagebrush.css}
+
+\begin{document}
+
+\maketitle % Or titlepage/titlingpage environment.
+
+% An article abstract would go here.
+
+\tableofcontents % MUST BE BEFORE THE FIRST SECTION BREAK!
+\listoffigures
+
+\chapter{First chapter}
+
+\section{A section}
+
+This is some text which is indexed.\index{Some text.}
+
+\subsection{A subsection}
+
+See \cref{fig:withtext}.
+
+\begin{figure}\begin{center}
+\fbox{\textcolor{blue!50!green}{Text in a figure.}}
+\caption{A figure with text\label{fig:withtext}}
+\end{center}\end{figure}
+
+\section{Some math}
+
+Inline math: $r = r_0 + vt - \frac{1}{2}at^2$
+followed by display math:
+\begin{equation}
+a^2 + b^2 = c^2
+\end{equation}
+
+
+\begin{warpprint} % For print output ...
+\cleardoublepage % ... a common method to place index entry into TOC.
+\phantomsection
+\addcontentsline{toc}{chapter}{\indexname}
+\end{warpprint}
+\ForceHTMLPage % HTML index will be on its own page.
+\ForceHTMLTOC % HTML index will have its own toc entry.
+\printindex
+
+\end{document}
diff --git a/macros/latex/contrib/lwarp/lwarpmk.lua b/macros/latex/contrib/lwarp/lwarpmk.lua
new file mode 100755
index 0000000000..3b4bb8564b
--- /dev/null
+++ b/macros/latex/contrib/lwarp/lwarpmk.lua
@@ -0,0 +1,862 @@
+#!/usr/bin/env texlua
+
+-- Copyright 2016-2019 Brian Dunn
+
+printversion = "v0.73"
+requiredconfversion = "2" -- also at *lwarpmk.conf
+
+function printhelp ()
+print ("lwarpmk: Use lwarpmk -h or lwarpmk --help for help.") ;
+end
+
+function printusage ()
+--
+-- Print the usage of the lwarpmk command:
+--
+print ( [[
+
+lwarpmk print [-p project]: Compile the print version if necessary.
+lwarpmk print1 [-p project]: Forced single compile of the print version.
+lwarpmk printindex [-p project]: Process print indexes.
+lwarpmk printglossary [-p project]: Process the glossary for the print version.
+lwarpmk html [-p project]: Compile the HTML version if necessary.
+lwarpmk html1 [-p project]: Forced single compile of the HTML version.
+lwarpmk htmlindex [-p project]: Process HTML indexes.
+lwarpmk htmlglossary [-p project]: Process the glossary for the html version.
+lwarpmk again [-p project]: Touch the source code to trigger recompiles.
+lwarpmk limages [-p project]: Process the "lateximages" created by lwarp.sty.
+lwarpmk pdftohtml [-p project]:
+ For use with latexmk or a Makefile:
+ Converts project_html.pdf to project_html.html and individual HTML files.
+ Finishes the HTML conversion even if there was a compile error.
+lwarpmk pdftosvg <list of file names>: Converts each PDF file to SVG.
+lwarpmk epstopdf <list of file names>: Converts each EPS file to PDF.
+lwarpmk clean [-p project]: Remove *.aux, *.toc, *.lof/t,
+ *.idx, *.ind, *.log, *_html_inc.*, .gl*
+lwarpmk cleanall [-p project]: Remove auxiliary files, project.pdf, *.html
+lwarpmk cleanlimages: Removes all images from the "lateximages" directory.
+lwarpmk -h: Print this help message.
+lwarpmk --help: Print this help message.
+
+]] )
+-- printconf ()
+end
+
+function splitfile (destfile,sourcefile)
+--
+-- Split one large sourcefile into a number of files,
+-- starting with destfile.
+-- The file is split at each occurance of <!--|Start file|newfilename|*
+--
+print ("lwarpmk: Splitting " .. sourcefile .. " into " .. destfile) ;
+local sfile = io.open(sourcefile)
+io.output(destfile)
+for line in sfile:lines() do
+i,j,copen,cstart,newfilename = string.find (line,"(.*)|(.*)|(.*)|") ;
+if ( (i~= nil) and (copen == "<!--") and (cstart == "Start file")) then
+ -- split the file
+ io.output(newfilename) ;
+else
+ -- not a splitpoint
+ io.write (line .. "\n") ;
+end
+end -- do
+io.close(sfile)
+end -- function
+
+function cvalueerror ( line, linenum , cvalue )
+--
+-- Incorrect value, so print an error and exit.
+--
+ print ("lwarpmk: ===")
+ print ("lwarpmk: " .. linenum .. " : " .. line ) ;
+ print (
+ "lwarpmk: incorrect variable value \"" .. cvalue ..
+ "\" in lwarpmk.conf.\n"
+ ) ;
+ print ("lwarpmk: ===")
+-- printconf () ;
+ os.exit(1) ;
+end
+
+function printhowtorecompile ()
+-- Tells the user how to recompile to regenerate the configuration files.
+ print ("lwarpmk: The configuration files lwarpmk.conf and "..sourcename..".lwarpmkconf" )
+ print ("lwarpmk: must be updated. To do so, recompile" )
+ print ("lwarpmk: " , sourcename..".tex" )
+ if ( printlatexcmd == "" ) then
+ print ("lwarpmk: using xe/lua/pdflatex," )
+ else
+ print ("lwarpmk: using the command:")
+ print ("lwarpmk: " , printlatexcmd )
+ end
+ print ("lwarpmk: then use lwarpmk again.")
+end -- printhowtorecompile
+
+function ignoreconf ()
+-- Global argument index
+argindex = 2
+end
+
+function loadconf ()
+--
+-- Load settings from the project's "lwarpmk.conf" file:
+--
+-- Default configuration filename:
+local conffile = "lwarpmk.conf"
+local confroot = "lwarpmk"
+-- Global argument index
+argindex = 2
+-- Optional configuration filename:
+if ( arg[argindex] == "-p" ) then
+ argindex = argindex + 1
+ confroot = arg[argindex]
+ conffile = confroot..".lwarpmkconf"
+ argindex = argindex + 1
+end
+-- Additional defaults:
+confversion = "0"
+opsystem = "Unix"
+imagesdirectory = "lateximages"
+imagesname = "image-"
+latexmk = "false"
+printlatexcmd = ""
+HTMLlatexcmd = ""
+printindexcmd = ""
+HTMLindexcmd = ""
+latexmkindexcmd = ""
+-- to be removed:
+-- indexprog = "makeindex"
+-- makeindexstyle = "lwarp.ist"
+-- xindylanguage = "english"
+-- xindycodepage = "utf8"
+-- xindystyle = "lwarp.xdy"
+-- pdftotextenc = "UTF-8"
+glossarycmd = "makeglossaries"
+-- Verify the file exists:
+if (lfs.attributes(conffile,"mode")==nil) then
+ -- file not exists
+ print ("lwarpmk: ===")
+ print ("lwarpmk: File \"" .. conffile .."\" does not exist.")
+ print ("lwarpmk: Move to the project's source directory,")
+ print ("lwarpmk: recompile using pdflatex, xelatex, or lualatex,")
+ print ("lwarpmk: then try using lwarpmk again.")
+ if ( arg[argindex] ~= nil ) then
+ print (
+ "lwarpmk: (\"" .. confroot ..
+ "\" does not appear to be a project name.)"
+ )
+ end
+ print ("lwarpmk: ===")
+ printhelp () ;
+ os.exit(1) -- exit the entire lwarpmk script
+else -- file exists
+-- Read the file:
+print ("lwarpmk: Reading " .. conffile ..".")
+local cfile = io.open(conffile)
+-- Scan each line, parsing each line as: name = [[string]]
+local linenum = 0
+for line in cfile:lines() do -- scan lines
+linenum = linenum + 1
+i,j,cvarname,cvalue = string.find (line,"([%w-_]*)%s*=%s*%[%[([^%]]*)%]%]") ;
+-- Error if incorrect enclosing characters:
+if ( i == nil ) then
+ print ("lwarpmk: ===")
+ print ("lwarpmk: " .. linenum .. " : " .. line ) ;
+ print ("lwarpmk: Incorrect entry in " .. conffile ..".\n" ) ;
+ print ("lwarpmk: ===")
+-- printconf () ;
+ os.exit(1) ;
+end -- nil
+if ( cvarname == "confversion" ) then
+ confversion = cvalue
+elseif ( cvarname == "opsystem" ) then
+ -- Verify choice of opsystem:
+ if ( (cvalue == "Unix") or (cvalue == "Windows") ) then
+ opsystem = cvalue
+ else
+ cvalueerror ( line, linenum , cvalue )
+ end
+elseif ( cvarname == "sourcename" ) then sourcename = cvalue
+elseif ( cvarname == "homehtmlfilename" ) then homehtmlfilename = cvalue
+elseif ( cvarname == "htmlfilename" ) then htmlfilename = cvalue
+elseif ( cvarname == "imagesdirectory" ) then imagesdirectory = cvalue
+elseif ( cvarname == "imagesname" ) then imagesname = cvalue
+elseif ( cvarname == "latexmk" ) then latexmk = cvalue
+elseif ( cvarname == "printlatexcmd" ) then printlatexcmd = cvalue
+elseif ( cvarname == "HTMLlatexcmd" ) then HTMLlatexcmd = cvalue
+elseif ( cvarname == "printindexcmd" ) then printindexcmd = cvalue
+elseif ( cvarname == "HTMLindexcmd" ) then HTMLindexcmd = cvalue
+elseif ( cvarname == "latexmkindexcmd" ) then latexmkindexcmd = cvalue
+elseif ( cvarname == "glossarycmd" ) then glossarycmd = cvalue
+elseif ( cvarname == "pdftotextenc" ) then pdftotextenc = cvalue
+else
+ print ("lwarpmk: ===")
+ print ("lwarpmk: " .. linenum .. " : " .. line ) ;
+ print (
+ "lwarpmk: Incorrect variable name \"" .. cvarname .. "\" in " ..
+ conffile ..".\n"
+ ) ;
+ print ("lwarpmk: ===")
+-- printconf () ;
+os.exit(1) ;
+end -- cvarname
+end -- do scan lines
+io.close(cfile)
+end -- file exists
+-- Error if sourcename is "lwarp".
+-- This could happen if a local copy of lwarp has recently been recompiled.
+if sourcename=="lwarp" then
+ print ("lwarpmk: ===")
+ print ("lwarpmk: lwarp.sty has recently been recompiled in this directory,")
+ print ("lwarpmk: and \"lwarpmk.conf\" is no longer set for your own project.")
+ print ("lwarpmk: Recompile your own project using pdf/lua/xelatex <projectname>.")
+ print ("lwarpmk: After a recompile, \"lwarpmk.conf\" will be set for your project,")
+ print ("lwarpmk: and you may again use lwarpmk.")
+ print ("lwarpmk: ===")
+ os.exit(1)
+end -- sourcename of "lwarp"
+-- Select some operating-system commands:
+if opsystem=="Unix" then -- For Unix / Linux / Mac OS:
+ rmname = "rm"
+ mvname = "mv"
+ cpname = "cp"
+ touchnamepre = "touch"
+ touchnamepost = ""
+ newtouchname = "touch"
+ dirslash = "/"
+ opquote= "\'"
+ cmdgroupopenname = " ( "
+ cmdgroupclosename = " ) "
+ seqname = " && "
+ bgname = " &"
+elseif opsystem=="Windows" then -- For Windows
+ rmname = "DEL"
+ mvname = "MOVE"
+ cpname = "COPY"
+ touchnamepre = "COPY /b"
+ touchnamepost = "+,,"
+ newtouchname = "echo empty >"
+ dirslash = "\\"
+ opquote= "\""
+ cmdgroupopenname = ""
+ cmdgroupclosename = ""
+ seqname = " & "
+ bgname = ""
+else
+ print ("lwarpmk: ===")
+ print ("lwarpmk: Select Unix or Windows for opsystem." )
+ print ("lwarpmk: ===")
+ os.exit(1)
+end --- for Windows
+-- Warning if the operating system does not appear to be correct,
+-- in case files were transferred to another system.
+if ( (package.config:sub(1,1)) ~= dirslash ) then
+ print ("lwarpmk: ===")
+ print ("lwarpmk: It appears that lwarpmk.conf is for a different operating system." )
+ printhowtorecompile ()
+ print ("lwarpmk: ===")
+ os.exit(1)
+end
+-- Error if the configuration file's version is not current:
+if ( confversion ~= requiredconfversion ) then
+ print ("lwarpmk: ===")
+ printhowtorecompile ()
+ print ("lwarpmk: ===")
+ os.exit(1)
+end
+end -- loadconf
+
+function executecheckerror ( executecommands , errormessage )
+--
+-- Execute an operating system call,
+-- and maybe exit with an error message.
+--
+local err
+err = os.execute ( executecommands )
+if ( err ~= 0 ) then
+ print ("lwarpmk: ===")
+ print ("lwarpmk: " .. errormessage )
+ print ("lwarpmk: ===")
+ os.exit(1)
+end
+end -- executecheckerror
+
+function refreshdate ()
+os.execute(touchnamepre .. " " .. sourcename .. ".tex " .. touchnamepost)
+end
+
+function reruntoget (filesource)
+--
+-- Scan the LaTeX log file for the phrase "Rerun to get",
+-- indicating that the file should be compiled again.
+-- Return true if found.
+--
+local fsource = io.open(filesource)
+for line in fsource:lines() do
+if ( string.find(line,"Rerun to get") ~= nil ) then
+ io.close(fsource)
+ return true
+end -- if
+end -- do
+io.close(fsource)
+return false
+end
+
+function onetime (latexcmd, fsuffix)
+--
+-- Compile one time, return true if should compile again.
+-- fsuffix is "" for print, "_html" for HTML output.
+--
+print("lwarpmk: Compiling with: " .. latexcmd)
+executecheckerror (
+ latexcmd ,
+ "Compile error."
+)
+return (reruntoget(sourcename .. fsuffix .. ".log") ) ;
+end
+
+function manytimes (latexcmd, fsuffix)
+--
+-- Compile up to five times.
+-- fsuffix is "" for print, "_html" for HTML output
+--
+if onetime(latexcmd, fsuffix) == true then
+if onetime(latexcmd, fsuffix) == true then
+if onetime(latexcmd, fsuffix) == true then
+if onetime(latexcmd, fsuffix) == true then
+if onetime(latexcmd, fsuffix) == true then
+end end end end end
+end
+
+function verifyfileexists (filename)
+--
+-- Exit if the given file does not exist.
+--
+if (lfs.attributes ( filename , "modification" ) == nil ) then
+ print ("lwarpmk: ===")
+ print ("lwarpmk: " .. filename .. " not found." ) ;
+ print ("lwarpmk: ===")
+ os.exit (1) ;
+end
+end
+
+function pdftohtml ()
+--
+-- Convert <project>_html.pdf into HTML files:
+--
+-- Convert to text:
+print ("lwarpmk: Converting " .. sourcename
+ .."_html.pdf to " .. sourcename .. "_html.html")
+os.execute("pdftotext -enc " .. pdftotextenc .. " -nopgbrk -layout "
+ .. sourcename .. "_html.pdf " .. sourcename .. "_html.html")
+-- Split the result into individual HTML files:
+splitfile (homehtmlfilename .. ".html" , sourcename .. "_html.html")
+end
+
+function removeaux ()
+--
+-- Remove auxiliary files:
+-- All .aux files are removed since there may be many bbl*.aux files.
+--
+os.execute ( rmname .. " *.aux " ..
+ sourcename ..".toc " .. sourcename .. "_html.toc " ..
+ sourcename ..".lof " .. sourcename .. "_html.lof " ..
+ sourcename ..".lot " .. sourcename .. "_html.lot " ..
+ " *.idx " ..
+ " *.ind " ..
+ sourcename ..".ps " .. sourcename .."_html.ps " ..
+ sourcename ..".log " .. sourcename .. "_html.log " ..
+ sourcename ..".gl* " .. sourcename .. "_html.gl* " ..
+ " *_html_inc.* "
+ )
+end
+
+function checkhtmlpdfexists ()
+--
+-- Error if the HTML document does not exist.
+-- The lateximages are drawn from the HTML PDF version of the document,
+-- so "lwarpmk html" must be done before "lwarpmk limages".
+--
+local htmlpdffile = io.open(sourcename .. "_html.pdf", "r")
+if ( htmlpdffile == nil ) then
+ print ("")
+ print ("lwarpmk: ===")
+ print ("lwarpmk: The HTML version of the document does not exist.")
+ print ("lwarpmk: Enter \"lwarpmk html\" to compile the HTML version.")
+ print ("lwarpmk: ===")
+ os.exit(1)
+end
+io.close (htmlpdffile)
+end -- checkhtmlpdfexists
+
+function warnlimages ()
+--
+-- Warning of a missing <sourcename>-images.txt file:
+ print ("lwarpmk: ===")
+ print ("lwarpmk: \"" .. sourcename .. "-images.txt\" does not exist.")
+ print ("lwarpmk: Your project does not use SVG math or other lateximages,")
+ print ("lwarpmk: or the file has been deleted somehow.")
+ print ("lwarpmk: Use \"lwarpmk html1\" to recompile your project")
+ print ("lwarpmk: and recreate \"" .. sourcename .. "-images.txt\".")
+ print ("lwarpmk: If your project does not use SVG math or other lateximages,")
+ print ("lwarpmk: then \"" .. sourcename .. "-images.txt\" will never exist, and")
+ print ("lwarpmk: \"lwarpmk limages\" will not be necessary.")
+ print ("lwarpmk: ===")
+end -- warnlimages
+
+function warnlimagesrecompile ()
+-- Warning if must recompile before creating limages:
+ print ("")
+ print ("lwarpmk: ===")
+ print ("lwarpmk: Cross-references are not yet correct.")
+ print ("lwarpmk: The document must be recompiled before creating the lateximages.")
+ print ("lwarpmk: Enter \"lwarpmk html1\" again, then try \"lwarpmk limages\" again.")
+ print ("lwarpmk: ===")
+end --warnlimagesrecompile
+
+function checklimages ()
+--
+-- Check <sourcename>.txt to see if need to recompile first.
+-- If any entry has a page number of zero, then there were incorrect images.
+--
+print ("lwarpmk: Checking for a valid " .. sourcename .. "-images.txt file.")
+local limagesfile = io.open(sourcename .. "-images.txt", "r")
+if ( limagesfile == nil ) then
+ warnlimages ()
+ os.exit(1)
+end
+-- Track warning to recompile if find a page 0
+local pagezerowarning = false
+-- Scan <sourcename>.txt
+for line in limagesfile:lines() do
+ -- lwimgpage is the page number in the PDF which has the image
+ -- lwimghash is true if this filename is a hash
+ -- lwimgname is the lateximage filename root to assign for the image
+ i,j,lwimgpage,lwimghash,lwimgname = string.find (line,"|(.*)|(.*)|(.*)|")
+ -- For each entry:
+ if ( (i~=nil) ) then
+ -- If the page number is 0, image references are incorrect
+ -- and must recompile the soure document:
+ if ( lwimgpage == "0" ) then
+ pagezerowarning = true
+ end
+ end -- if i~=nil
+end -- do
+-- The last line should be |end|end|end|.
+-- If not, the compile must have aborted, and the images are incomplete.
+if ( lwimgpage ~= "end" ) then
+ warnlimagesrecompile()
+ os.exit(1) ;
+end
+if ( pagezerowarning ) then
+ warnlimagesrecompile()
+ os.exit(1) ;
+end -- pagezerowarning
+end -- checklimages
+
+function createuniximage ( lwimgfullname )
+--
+-- Create one lateximage for Unix / Linux / Mac OS.
+--
+executecheckerror (
+ cmdgroupopenname ..
+ "pdfseparate -f " .. lwimgpage .. " -l " .. lwimgpage .. " " ..
+ sourcename .."_html.pdf " ..
+ imagesdirectory .. dirslash .."lateximagetemp-%d" .. ".pdf" ..
+ seqname ..
+ -- Crop the image:
+ "pdfcrop --hires " .. imagesdirectory .. dirslash .. "lateximagetemp-" ..
+ lwimgpage .. ".pdf " ..
+ imagesdirectory .. dirslash .. lwimgname .. ".pdf" ..
+ seqname ..
+ -- Convert the image to svg:
+ "pdftocairo -svg -noshrink " .. imagesdirectory .. dirslash .. lwimgname .. ".pdf " ..
+ imagesdirectory .. dirslash .. lwimgname ..".svg" ..
+ seqname ..
+ -- Remove the temporary files:
+ rmname .. " " .. imagesdirectory .. dirslash .. lwimgname .. ".pdf" .. seqname ..
+ rmname .. " " .. imagesdirectory .. dirslash .. "lateximagetemp-" .. lwimgpage .. ".pdf" ..
+ cmdgroupclosename .. " >/dev/null " .. bgname
+ ,
+ "File error trying to convert " .. lwimgfullname
+)
+-- Every 32 images, wait for completion at below normal priority,
+-- allowing other image tasks to catch up.
+numimageprocesses = numimageprocesses + 1
+if ( numimageprocesses > 32 ) then
+ numimageprocesses = 0
+ print ( "lwarpmk: waiting" )
+ executecheckerror ( "wait" , "File error trying to wait.")
+end
+end -- createuniximage
+
+function createwindowsimage ( lwimgfullname )
+--
+-- Create one lateximage for Windows.
+--
+-- Every 32 images, wait for completion at below normal priority,
+-- allowing other image tasks to catch up.
+numimageprocesses = numimageprocesses + 1
+if ( numimageprocesses > 32 ) then
+ numimageprocesses = 0
+ thiswaitcommand = "/WAIT /BELOWNORMAL"
+ print ( "lwarpmk: waiting" )
+else
+ thiswaitcommand = ""
+end
+-- Execute the image generation command
+executecheckerror (
+ "start /B " .. thiswaitcommand .. " \"\" lwarp_one_limage " ..
+ lwimgpage .. " " ..
+ lwimghash .. " " ..
+ lwimgname .. " " ..
+ sourcename .. " <nul >nul"
+ ,
+ "File error trying to create image."
+)
+end -- createwindowsimage
+
+function createonelateximage ( line )
+--
+-- Given the next line of <sourcename>.txt, convert a single image.
+--
+-- lwimgpage is the page number in the PDF which has the image
+-- lwimghash is true if this filename is a hash
+-- lwimgname is the lateximage filename root to assign for the image
+i,j,lwimgpage,lwimghash,lwimgname = string.find (line,"|(.*)|(.*)|(.*)|")
+-- For each entry:
+if ( (i~=nil) ) then
+ -- Skip if the page number is 0:
+ if ( lwimgpage == "0" ) then
+ pagezerowarning = true
+ -- Skip if the page number is "end":
+ else if ( lwimgpage == "end" ) then
+ else
+ -- Skip is this image is hashed and already exists:
+ local lwimgfullname = imagesdirectory .. dirslash .. lwimgname .. ".svg"
+ if (
+ (lwimghash ~= "true") or
+ (lfs.attributes(lwimgfullname,"mode")==nil) -- file not exists
+ )
+ then -- not hashed or not exists:
+ -- Print the name of the file being generated:
+ print ( "lwarpmk: " .. lwimgname )
+ -- Touch/create the dest so that only once instance tries to build it:
+ executecheckerror (
+ newtouchname .. " " .. lwimgfullname ,
+ "File error trying to touch " .. lwimgfullname
+ )
+ -- Separate out the image into its own single-page pdf:
+ if opsystem=="Unix" then
+ createuniximage (lwimgfullname)
+ elseif opsystem=="Windows" then
+ createwindowsimage (lwimgfullname)
+ end
+ end -- not hashed or not exists
+ end -- not page "end"
+ end -- not page 0
+end -- not nil
+end -- createonelateximage
+
+function createlateximages ()
+--
+-- Create lateximages based on <sourcename>-images.txt:
+--
+-- See if the document must be recompiled first:
+checklimages ()
+-- See if the HTML version exists:
+checkhtmlpdfexists ()
+-- Attempt to create the lateximages:
+print ("lwarpmk: Creating lateximages.")
+local limagesfile = io.open(sourcename .. "-images.txt", "r")
+if ( limagesfile == nil ) then
+ warnlimages ()
+ os.exit(1)
+end
+-- Create the lateximages directory, ignore error if already exists
+err = os.execute("mkdir " .. imagesdirectory)
+-- For Windows, create lwarp_one_limage.cmd from lwarp_one_limage.txt:
+if opsystem=="Windows" then
+ executecheckerror (
+ cpname .. " lwarp_one_limage.txt lwarp_one_limage.cmd" ,
+ "File error trying to copy lwarp_one_limage.txt to lwarp_one_limage.cmd"
+ )
+end -- create lwarp_one_limage.cmd
+-- Track the number of parallel processes
+numimageprocesses = 0
+-- Track warning to recompile if find a page 0
+pagezerowarning = false
+-- Scan <sourcename>.txt
+for line in limagesfile:lines() do
+ createonelateximage ( line )
+end -- do
+io.close(limagesfile)
+print ( "lwarpmk limages: ===")
+print ( "lwarpmk limages: Wait a moment for the images to complete" )
+print ( "lwarpmk limages: before reloading the page." )
+print ( "lwarpmk limages: ===")
+print ( "lwarpmk limages: Done." )
+if ( pagezerowarning == true ) then
+ print ( "lwarpmk limages: WARNING: Images will be incorrect." )
+ print ( "lwarpmk limages: Enter \"lwarpmk cleanlimages\", then" )
+ print ( "lwarpmk limages: recompile the document one more time, then" )
+ print ( "lwarpmk limages: repeat \"lwarpmk images\" again." )
+end -- pagezerowarning
+end -- function
+
+function convertepstopdf ()
+--
+-- Converts EPS files to PDF files.
+-- The filenames are arg[argindex] and up.
+-- arg[1] is the command "pdftosvg".
+--
+ignoreconf ()
+for i = argindex , #arg do
+ if (lfs.attributes(arg[i],"mode")==nil) then
+ print ("lwarpmk: File \"" .. arg[i] .. "\" does not exist.")
+ else
+ print ("lwarpmk: Converting \"" .. arg[i] .. "\"")
+ os.execute ( "epstopdf " .. arg[i] )
+ end -- if
+end -- do
+end --function
+
+function convertpdftosvg ()
+--
+-- Converts PDF files to SVG files.
+-- The filenames are arg[argindex] and up.
+-- arg[1] is the command "pdftosvg".
+--
+ignoreconf ()
+for i = argindex , #arg do
+ if (lfs.attributes(arg[i],"mode")==nil) then
+ print ("lwarpmk: File \"" .. arg[i] .. "\" does not exist.")
+ else
+ print ("lwarpmk: Converting \"" .. arg[i] .. "\"")
+ os.execute ( "pdftocairo -svg " .. arg[i] )
+ end -- if
+end -- do
+end --function
+
+-- Force an update and conclude processing:
+function updateanddone ()
+print ("lwarpmk: Forcing an update of " .. sourcename ..".tex.")
+refreshdate ()
+print ("lwarpmk: " .. sourcename ..".tex is ready to be recompiled.")
+print ("lwarpmk: Done.")
+end -- function
+
+-- Start of the main code: --
+
+-- lwarpmk --version :
+
+if (arg[1] == "--version") then
+print ( "lwarpmk: " .. printversion )
+
+else -- not --version
+
+-- print intro:
+
+print ("lwarpmk: " .. printversion .. " Automated make for the LaTeX lwarp package.")
+
+-- lwarpmk print:
+
+if arg[1] == "print" then
+loadconf ()
+if ( latexmk == "true" ) then
+ print ("lwarpmk: Compiling with: " .. printlatexcmd)
+ executecheckerror (
+ printlatexcmd ,
+ "Compile error."
+ )
+ print ("lwarpmk: Done.")
+else -- not latexmk
+ verifyfileexists (sourcename .. ".tex") ;
+ -- See if up to date:
+ if (
+ ( lfs.attributes ( sourcename .. ".pdf" , "modification" ) == nil ) or
+ (
+ lfs.attributes ( sourcename .. ".tex" , "modification" ) >
+ lfs.attributes ( sourcename .. ".pdf" , "modification" )
+ )
+ ) then
+ -- Recompile if not yet up to date:
+ manytimes(printlatexcmd, "")
+ print ("lwarpmk: Done.") ;
+ else
+ print ("lwarpmk: " .. sourcename .. ".pdf is up to date.") ;
+ end
+end -- not latexmk
+
+-- lwarpmk print1:
+
+elseif arg[1] == "print1" then
+ loadconf ()
+ verifyfileexists (sourcename .. ".tex") ;
+ onetime(printlatexcmd, "")
+ print ("lwarpmk: Done.") ;
+
+-- lwarpmk printindex:
+-- Compile the index then touch the source
+-- to trigger a recompile of the document:
+
+elseif arg[1] == "printindex" then
+loadconf ()
+os.execute ( printindexcmd )
+print ("lwarpmk: -------")
+updateanddone ()
+
+-- lwarpmk printglossary:
+-- Compile the glossary then touch the source
+-- to trigger a recompile of the document:
+
+elseif arg[1] == "printglossary" then
+loadconf ()
+print ("lwarpmk: Processing the glossary.")
+
+os.execute(glossarycmd .. " " .. sourcename)
+updateanddone ()
+
+-- lwarpmk html:
+
+elseif arg[1] == "html" then
+loadconf ()
+if ( latexmk == "true" ) then
+ print ("lwarpmk: Compiling with: " .. HTMLlatexcmd)
+ executecheckerror (
+ HTMLlatexcmd ,
+ "Compile error."
+ )
+ pdftohtml ()
+ print ("lwarpmk: Done.")
+else -- not latexmk
+ verifyfileexists ( sourcename .. ".tex" ) ;
+ -- See if exists and is up to date:
+ if (
+ ( lfs.attributes ( homehtmlfilename .. ".html" , "modification" ) == nil ) or
+ (
+ lfs.attributes ( sourcename .. ".tex" , "modification" ) >
+ lfs.attributes ( homehtmlfilename .. ".html" , "modification" )
+ )
+ ) then
+ -- Recompile if not yet up to date:
+ manytimes(HTMLlatexcmd, "_html")
+ pdftohtml ()
+ print ("lwarpmk: Done.")
+ else
+ print ("lwarpmk: " .. homehtmlfilename .. ".html is up to date.")
+ end
+end -- not latexmk
+
+-- lwarpmk html1:
+
+elseif arg[1] == "html1" then
+ loadconf ()
+ verifyfileexists ( sourcename .. ".tex" ) ;
+ onetime(HTMLlatexcmd, "_html")
+ pdftohtml ()
+ print ("lwarpmk: Done.")
+
+-- lwarpmk pdftohtml:
+elseif arg[1] == "pdftohtml" then
+ loadconf ()
+ pdftohtml ()
+
+-- lwarpmk htmlindex:
+-- Compile the index then touch the source
+-- to trigger a recompile of the document:
+
+elseif arg[1] == "htmlindex" then
+loadconf ()
+os.execute ( HTMLindexcmd )
+print ("lwarpmk: -------")
+updateanddone ()
+
+-- lwarpmk htmlglossary:
+-- Compile the glossary then touch the source
+-- to trigger a recompile of the document.
+-- The <sourcename>.xdy file is created by the glossaries package.
+
+elseif arg[1] == "htmlglossary" then
+loadconf ()
+print ("lwarpmk: Processing the glossary.")
+os.execute(glossarycmd .. " " .. sourcename .. "_html")
+updateanddone ()
+
+-- lwarpmk limages:
+-- Scan the <sourcename>.txt file to create lateximages.
+
+elseif arg[1] == "limages" then
+loadconf ()
+print ("lwarpmk: Processing images.")
+createlateximages ()
+print ("lwarpmk: Done.")
+
+-- lwarpmk again:
+-- Touch the source to trigger a recompile.
+
+elseif arg[1] == "again" then
+loadconf ()
+updateanddone ()
+
+-- lwarpmk clean:
+-- Remove project.aux, .toc, .lof, .lot, .log, *.idx, *.ind, *_html_inc.*, .gl*
+
+elseif arg[1] == "clean" then
+loadconf ()
+removeaux ()
+print ("lwarpmk: Done.")
+
+-- lwarpmk cleanall
+-- Remove project.aux, .toc, .lof, .lot, .log, *.idx, *.ind, *_html_inc.*, .gl*
+-- and also project.pdf, project.dvi, *.html
+
+elseif arg[1] == "cleanall" then
+loadconf ()
+removeaux ()
+os.execute ( rmname .. " " ..
+ sourcename .. ".pdf " .. sourcename .. "_html.pdf " ..
+ sourcename .. ".dvi " .. sourcename .. "_html.dvi " ..
+ "*.html"
+ )
+print ("lwarpmk: Done.")
+
+-- lwarpmk cleanlimages
+-- Remove images from the imagesdirectory.
+
+elseif arg[1] == "cleanlimages" then
+loadconf ()
+os.execute ( rmname .. " " .. imagesdirectory .. dirslash .. "*" )
+print ("lwarpmk: Done.")
+
+-- lwarpmk epstopdf <list of file names>
+-- Convert EPS files to PDF using epstopdf
+elseif arg[1] == "epstopdf" then
+convertepstopdf ()
+print ("lwarpmk: Done.")
+
+-- lwarpmk pdftosvg <list of file names>
+-- Convert PDF files to SVG using pdftocairo
+elseif arg[1] == "pdftosvg" then
+convertpdftosvg ()
+print ("lwarpmk: Done.")
+
+-- lwarpmk with no argument :
+
+elseif (arg[1] == nil) then
+printhelp ()
+
+-- lwarpmk -h or lwarpmk --help :
+
+elseif (arg[1] == "-h" ) or (arg[1] == "--help") then
+printusage ()
+
+-- Unknown command:
+
+else
+printhelp ()
+print ("\nlwarpmk: ****** Unknown command \""..arg[1].."\". ******\n")
+end
+
+end -- not --version