%
% \iffalse meta-comment
%
% Copyright 2016-2017 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>    [2017/04/04 v0.27  Allows LaTeX to directly produce HTML5 output.]
%
%<*driver>
\documentclass{ltxdoc}

\usepackage{lmodern}
% \usepackage{libertine}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{textcomp}	% provides \degree, \textquotesingle, \textmu

\usepackage{newunicodechar}
\newunicodechar{ﬀ}{ff}
\newunicodechar{ﬁ}{fi}
\newunicodechar{ﬂ}{fl}
\newunicodechar{ﬃ}{ffi}
\newunicodechar{ﬄ}{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}}

\usepackage[log-declarations=false]{xparse}

\usepackage[lwarpmk]{lwarp-newproject}
\usepackage{lwarp}


\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{graphicx}
\graphicspath{{images/}}

\usepackage{enumitem}

\usepackage{array}
\usepackage{longtable}
\usepackage{booktabs}

\usepackage[normalem]{ulem}

\usepackage{fancyvrb}

\usepackage{capt-of}

\usepackage{comment}
\excludecomment{testing}



% \usepackage{morefloats}
% \usepackage{marginfix}

\usepackage{tocloft}
\renewcommand{\cftpartfont}{\Large\bfseries}
\setlength{\cftsecnumwidth}{2.5em}
\setlength{\cftsubsecnumwidth}{3em}
\setlength{\cftsubsubsecindent}{2.8em}
\setlength{\cftsubsubsecnumwidth}{4em}


\usepackage{titleps}

\newpagestyle{pageheadfoot}{
	\headrule
	\sethead{\pkg{lwarp}}{}{\thepage}
% 	\renewcommand{\makefootrule}{\rule[2.5ex]{\linewidth}{.4pt}}
	\setfoot{}{}{}
}

\pagestyle{pageheadfoot}




\usepackage{dtxdescribe}

\newcommand{\ItemDescribeMacro}[1]{\item[\cmd{#1}:]\DescribeMacro{#1}}
\newcommand{\ItemDescribeEnv}[1]{\item[\env{#1}:]\DescribeEnv{#1}}
\newcommand{\ItemDescribeCounter}[1]{\item[\texttt{#1}:]\DescribeCounter{#1}}
\newcommand{\ItemDescribeBoolean}[1]{\item[\texttt{#1}:]\DescribeBoolean{#1}}




\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}}


\newcommand{\lmacro}[1]{\textbackslash#1}
\newcommand{\cmds}[1]{\texttt{#1}}
\newcommand{\env}[1]{\texttt{#1}}
\newcommand{\pkg}[1]{\textsf{#1}}
\newcommand{\acro}[1]{\textsc{\lowercase{#1}}}
\newcommand{\tag}[1]{\texttt{<#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{\tikz}{Ti\textit{k}z}
\newcommand{\htmlfive}{\acro{HTML}\oldstylenums{5}}
\newcommand{\cssthree}{\acro{CSS}\oldstylenums{3}}

\newcommand{\goesto}{$\Rightarrow$}

\newcommand{\credits}[1]{{\footnotesize(\textit{Based on original code by} \textsc{#1}.)}}


\newcommand{\userentry}[1]{%
\par
\smallskip
\hspace*{2em}{\footnotesize Enter~$\Rightarrow$}\quad\texttt{#1}
\smallskip
}

\newenvironment{docsidebar}[1][]
{\hfill\minipage{.9\linewidth}\raggedright#1\smallskip\hrule\medskip}
{\smallskip\hrule\endminipage\hspace*{\fill}\bigskip}

% \makeatletter
% \newcommand{\watchout}[1][]{%
% \@bsphack%
% \marginpar{\raggedleft\textcolor{blue!70!black}{#1} \quad \includegraphics[height=3ex]{symbol_warning.pdf}}
% \@esphack%
% }
% \makeatother

\newcommand{\pdflatexonly}{
\textcolor{red}{Only pre-loaded if \texttt{pdflatex} is being used.}
\marginpar{\raggedleft\textcolor{blue!70!black}{\texttt{pdflatex} only:}}
}

% \newcommand{\margintag}[1]{%
% \marginpar{\raggedleft\textcolor{blue!70!black}{#1}}%
% }


% The following text is used in multiple places in the documentation:

\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 \acro{HTML}, print, or both forms of output.
}

\newcommand{\limitspageref}{\pkg{cleveref} and \pkg{varioref} are supported,
but printed page numbers do not map to \acro{HTML}.
See \cref{sec:successfulcommands} to redefine the message which is printed
for page number references.
}

\newcommand{\limitsabstract}{%
\pkg{abstract} is supported.
If using the \texttt{number} option with file splits,
be sure to place the table of contents before the abstract.
The 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{\limitstext}{\cs{textbf}, etc.\ are supported,
but \cs{bfseries}, etc.\ are not yet supported.}

\newcommand{\limitsfootnotes}{
\pkg{lwarp} uses native \LaTeX\ footnote code, although with its own
\cs{box} to avoid the \LaTeX\ output routine.  The usual functions work as-is.
}

\newcommand{\limitsverse}{%
\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 \acro{HTML} output.  To combine the two so that
\cs{attrib} is used for print and \cs{attribution} is used for \acro{HTML}:

\begin{docsidebar}
\ttfamily
\cs{begin}\{warpHTML\}

\cs{let}\cs{attrib}\cs{attribution}

\cs{end}\{warpHTML\}
\end{docsidebar}

\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 \acro{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 \texttt{pdftotext}'s ability to discern the
\texttt{-layout} of the
text in the \acro{HTML}-tagged \acro{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}{%
The size of the math and text used
\margintag{SVG image font size}
in the \acro{SVG} image may be adjusted
\index{font>size --- lateximage}%
\index{font>size --- math, SVG}%
\index{math>font size --- SVG}%
\index{lateximages>font size}%
by setting \cs{LateximageFontSizeName} to a font size name --- \emph{without the backslash}, for ex: \\
\hspace*{.5in}\texttt{\cs{renewcommand}\{\cs{LateximageFontSizeName}\}\{\textcolor{red}{large}\}}
}


\newcommand{\limitsmath}{%
Math may be rendered as \acro{SVG} graphics or using the \textsc{MathJax} JavaScript display engine.
\index{JavaScript>MathJax}

For \acro{SVG} math,
\margintag{SVG math option}
math is rendered as usual by \LaTeX{} into the initial \acro{PDF} file using the
\index{math>SVG summary}%
\index{SVG>math summary}%
current font\footnote{See \cref{sec:xfrac} regarding fonts and fractions.},
then is captured from the \acro{PDF} and converted to \acro{SVG} graphics
via a number of utility programs.
The \acro{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 \acro{HTML} \texttt{ALT} tag carries the \LaTeX{} code which generated the
math, allowing copy/paste of the \LaTeX{} math expression into other documents.

\limitslateximagefontsize

As currently implemented,
\margintag{SVG files}
each instance of math creates a new \acro{SVG} file.  In text with
many references to math variables, this can result in a large number of files with
duplicate content.  In the future, some method of content-based naming and checksumming
may be used to remove the need for duplicate files.

Another approach would be
\margintag{SVG inline}
to in-line the \acro{SVG} files directly into the \acro{HTML}.
This avoids having a large number of files and potentially speeds loading the images,
but dis-allows the possibility of sharing one file among many instances without
user intervention.

Others have used \acro{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 \acro{SVG} files are also larger as well.

Conversion to Math\acro{ML} might be a better approach,
\margintag{MathML}
among other things
allowing a more compact representation of math than \acro{SVG} drawings.
Problems with Math\acro{ML} include limited browser support and some
issues with the fine control of the appearance of the result.

The popular MathJax alternative (\url{mathjax.org}) may be used to display math.
\margintag{MathJax math option}
\DescribeProgram{MathJax}
\index{math>MathJax summary}
\index{MathJax>summary}

When MathJax is enabled, math is rendered twice:
\begin{enumerate}
\item As regular \LaTeX\ \acro{PDF} output placed inside an \acro{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 \acro{HTML} output
for interpretation by the 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 MathJax cross-referencing system is ignored in favor of the \LaTeX\ internal system,
seamlessly integrating with the rest of the \LaTeX\ code.
\end{enumerate}

Limitations when using MathJax include:
\margintag{MathJax limitations}
\DescribeProgram{MathJax}
\begin{itemize}
\item In document classes which have chapters,
	\margintag{chapter numbers}%
	\index{MathJax>tagged equations}%
	\index{tagged equations>Mathjax}%
	\cs{tag}ged equations have the chapter number prepended in \acro{HTML} output, unlike \LaTeX.
	\cs{tag*} equations (correctly) do not.
	This may be improved with future versions of the MathJax support script.

	\href{https://groups.google.com/forum/\#!topic/mathjax-users/jUtewUcE2bY}
		{\texttt{https://groups.google.com/forum/\#!topic/\\
			\hspace*{2em}mathjax-users/jUtewUcE2bY}}

\item MathJax itself does not support subequations.
	\margintag{subequations}
\index{MathJax>subequations}%
\index{subequations>MathJax}%
	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 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 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 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.
	\watchout[siunitx inside an equation]

	\href{https://github.com/mathjax/MathJax-third-party-extensions/tree/master/siunitx}
		{\texttt{https://github.com/mathjax/MathJax-third-party-extensions/\\
		\hspace*{2em}tree/master/siunitx}}

\item MathJax does not automatically support custom \LaTeX{} macros,
	\margintag{\LaTeX{} macros}
	but they may be set up by the user.
\end{itemize}
}

\newcommand{\limitsntheorem}{%
This conversion is not total.
\watchout[Font control]
Font control is via \acro{CSS}, and the custom \LaTeX\ font settings
are ignored.

\pkg{ntheorem} has a bug with equation numbering in AMS environments
\watchout[Equation numbering]
when the option \texttt{thref} is used.  \pkg{lwarp} does not share
this bug, so equations with \cs{split}, etc, are numbered correctly
with \pkg{lwarp}'s \acro{HTML} output, but not with the print output.
It is recommended to use \pkg{cleveref} instead of \pkg{ntheorem}'s
\texttt{thref} option.
}


\newcommand{\limitsgraphics}{%
\cs{graphicspath} only works for a single directory;
\margintag{\cs{graphicspath}}
all graphics must be in this directory.

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}.
Using the keys \cmds{width=.5\lmacro{linewidth}},
or similar for \cmds{\lmacro{textwidth}} or \cmds{\lmacro{textheight}}
to give fixed-sized images proportional to a 6 by 9 inch text area.

\cs{includegraphics} accepts \texttt{width} and \texttt{height},
\margintag{options}
\texttt{origin}, \texttt{rotate} and \texttt{scale},
plus a new \texttt{class} key.

With \acro{HTML} output, \cs{includegraphics} accepts an optional
\margintag{\acro{HTML} class}
\texttt{class=xyz} keyval combination, and if this is given then
the \acro{HTML} output will include that class for the image.
The class is ignored for print output.

For \cs{includegraphics} the user should provide both \texttt{.pdf} and \texttt{.svg}
images, but always refer to
\watchout[image file types]
\texttt{.pdf} images in the document source.
All \cs{includegraphics} references to \texttt{.pdf} will automatically
be changed to \texttt{.svg} for \acro{HTML} output, and will be left as \texttt{.pdf} for print output.
Images may also be \texttt{.jpg} and \texttt{.png}, and will be used as-is for either output.

\cs{rotatebox} accepts the optional \texttt{origin} key.
\margintag{\cs{rotatebox}}

\cs{rotatebox}, \cs{scalebox}, and \cs{reflectbox} depend on modern browser
support.
\watchout[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{\limitsxcolor}{%
Color definitions, models, and mixing are fully supported
\margintag{support}
without any changes required.

Colored tables are ignored so far.  Use \acro{CSS} to style tables.
\margintag{tables}

\cs{textcolor}, \cs{colorbox}, and \cs{fcolorbox} are supported.
\margintag{colored text and boxes}

\cs{color} and \cs{pagecolor} are ignored.
Use \acro{CSS} or \cs{textcolor} where possible.
\margintag{\cs{color} and \cs{pagecolor}}
}

\newcommand{\limitstabular}{%
\begin{itemize}
\item Vertical rules are not yet supported.
	\margintag{column types}

\item \texttt{*} in a column specification is not used (so far).
	Repeat the column type the correct number of times.

\item Only one each of \texttt{@}, \texttt{!}, \texttt{>}, and \texttt{<}
	may be used at each column, and they are used in that order.

\item \cs{newcolumntype} is ignored; unknown column types are set to \texttt{l}.

\item \pkg{tabularx} ignores the width, but \texttt{X} columns do produce paragraph
	columns or multicolumns.

\item Multirow and multicolumn cannot be used at the same time.
	\watchout[\cs{multirow} \& \cs{multicolumn}]
	(No rectangular holes wider than one column or taller than one row.)

\item For multirow, insert \cs{mrowcell} into any empty multi-row cells.
	This will be a null function for the print output, and is a placeholder for
	\watchout[\cs{multirow}]
	parsing the table for \acro{HTML} output.

\item If a multirow reaches to the bottom of a table,
	and \cs{bottomrule} does not go over to that edge,
	\margintag{\cs{multirow} with rules}
	try adding a line of empty cells below the \cs{bottomrule}.
	This may be a browser bug.
	\changes{v0.19}{2016/05/28}{Docs: \env{multirow} browser bug workaround.}

\item If a \cs{midrule} is desired after the last row,
	\margintag{rule at last row}
	an additional row of blank cells must be used.

\item Multiple paragraphs in one cell of a p, b, m column
	must have \cs{newline} between paragraphs.
	\watchout[paragraphs]

\item \cs{cmidrule} does not support width or trim options
	due to \acro{CSS} limitations.
	\margintag{\cs{cmidrule} width, trim}

\item For \pkg{longtable}, place headings and footings which
	\margintag{\env{longtable} headings}
	do not apply to \acro{HTML} inside \cs{warpprintonly\{\}}.

\item For \cs{toprule} and \cs{bottomrule},
	when combined with a \env{warpprint} or \env{warpHTML} environment,
	\watchout[\cs{warpprintonly}]
	if a ``misplaced \cs{noalign}'' error occurs,
	change \\
	\hspace*{.375in}\cmds{This \& That \cs{endhead}} \\
	to \\
	\hspace*{.375in}\cmds{\cs{warpprintonly}\{This \& That \cs{endhead}\}} \\
	and likewise with the other \cs{end} headings.
	Keep the \cs{endfirsthead} row unchanged, as it is still relevent to \acro{HTML} output.

\item For S columns (from the \pkg{siunitx} package),
	\watchout[S columns]
	while producing print output,
	anything non-numeric must be placed
	inside \{ \} braces, including commands such as \cs{multirow}.
	While producing \acro{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 \acro{HTML} output, without the extra braces, such as: \\
	\hspace*{.375in} \cs{warpprintonly}\{\texttt{1 \& 2 \& \textcolor{red}{\{}\cs{multirow}\{2\}\{2cm\}\{Text\}\textcolor{red}{\}} \& 3 \textbackslash\textbackslash\}} \\
	\hspace*{.375in} \cs{warpHTMLonly}\{\texttt{1 \& 2 \& \cs{multirow}\{2\}\{2cm\}\{Text\} \& 3 \textbackslash\textbackslash\}}

\end{itemize}
}

\newcommand{\limitssaveboxes}{%
\LaTeX\ boxes are placed inline and do not allow line breaks, so boxes
with long contents may overflow the line during \acro{HTML} conversion.
This is mostly a problem when the boxes contain objects which themselves
hold large \acro{HTML} tags, such as rotation commands with long contents.
When this object overflows the line, some \acro{HTML} code will be lost and 
the page will be corrupted.
}

\newcommand{\limitsminipage}{%
Minipages and parboxes will be placed side-by-side in \acro{HTML}
unless you place a \cs{newline} between them.
\margintag{placement}

A line of text with an inline minipage
\watchout[inline]
or parbox will have the minipage or parbox placed onto its own line,
because a paragraph is a block element and cannot be made \texttt{inline-block}.

Side-by-side minipages 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 \texttt{center} environment, the result is
similar in print and \acro{HTML}.  Paragraph tags are surpressed between
side-by-side minipages and these spacing commands, but not at the start or end
of the paragraph.

There is limited support for minipages inside an \acro{HTML} \tag{span}.
\margintag{in a span}
An \acro{HTML} \tag{div} cannot appear inside a \tag{span}.
While in a \tag{span}, minipages and parboxes are ignored.
Use \cs{newline} or \cs{par} for an \acro{HTML} break.

When using \cs{linewidth}, \cs{textwidth}, and \cs{textheight},
\margintag{size}
widths and heights are scaled proportionally to a 6\texttimes{}9 inch text area.

A minipage of width exactly \cs{linewidth} is automatically
given no \acro{HTML} width.
\margintag{no-width minipages}

A new macro \cs{minipagefullwidth} requests
\margintag{full-width minipages}
that the next minipage be generated
without an \acro{HTML} \texttt{width} tag, allowing it to be the full width of
the display rather than the fixed width given.

Nested minipages adopt their parent's text alignment in \acro{HTML},
whereas in regular \LaTeX{} \acro{PDF} output they do not.
\watchout[text alignment]
Use a \env{flushleft} or similar environment in the child minipage
to force a text alignment.
}

\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 \texttt{framemethod=none}.
\watchout[loading]

For title font, use\\
	\hspace*{.25in}\texttt{frametitlefont=\cs{textbf},}\\
\margintag{font}%
instead of\\
	\hspace*{.25in}\texttt{frametitlefont=\cs{bfseries},}\\
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.

\texttt{theoremtitlefont} is not supported, since the following text is not
\margintag{theoremtitlefont}
in braces in the \pkg{mdframed} source.

Footnotes are currently placed at the bottom of the \acro{HTML} page.
\margintag{footnotes}

\texttt{userdefinedwidth} and \texttt{align} are currently ignored.
\margintag{ignored options}
}

\newcommand{\limitscaption}{%
To ensure proper float numbering, set caption positions
such as:

\hspace*{2em} \texttt{\cs{captionsetup}[table]\{position=top\}} \\
\hspace*{2em} \texttt{\cs{captionsetup}[figure]\{position=bottom\}}

Similarly for \texttt{subtable}, \texttt{subfigure},
and \texttt{longtable}.
}

\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 \texttt{lofdepth} and \texttt{lotdepth}
\watchout[\texttt{lof/lotdepth}]
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*}
\margintag{horizontal spacing}
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{\limitsfloatrow}{%
When combined with the \pkg{subfig} package,
\watchout[\pkg{subfig} package]
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}.
\watchout[\cs{FBwidth}, \cs{FBheight}]
Possible solutions include:
\begin{itemize}
\item Use fixed lengths.  \pkg{lwarp} will scale the \acro{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 \acro{HTML}
	output.  This custom value will be used repeatedly,
	until it is manually changed to a new value.
\end{itemize}
}

\newcommand{\limitssiunitx}{%
Do not use \cmds{per-mode=fraction}, which cannot be seen by the final \cmds{pdftotext} conversion.
\watchout[per-mode]
}


\newcommand{\limitsbabelone}{%
If using \pkg{babel} with French, use \\
\hspace*{.25in}\cs{frenchbsetup\{StandardLists=true\}} \\
\watchout[French]%
to preserve the special \acro{HTML} and \pkg{enumitem} list handling.
}

\newcommand{\limitsbabeltwo}{%
Also, when French is used, the caption separator is
\margintag{\cs{CaptionSeparator}}
changed to a dash.  The following may be used to restore it to a colon: \\
\hspace*{.25in}%
\texttt{\cs{renewcommand}*\{\cs{CaptionSeparator}\}\{:\textasciitilde\}}
}

\newcommand{\limitsnewclude}{%
\pkg{newclude} modifies \cs{label} in a non-adaptive way, so
\pkg{newclude} must be loaded before \pkg{lwarp} is loaded.
\watchout[loading]

\begin{docsidebar}[Ex:]
\cs{documentclass\{article\}} \\
\ldots <font setup> \\
\cs{usepackage\{newclude\}} \\
\cs{usepackage[warpHTML]\{lwarp\}} \\
\ldots
\end{docsidebar}
}

\newcommand{\limitsnewtxmath}{%
The proper load order is:
\watchout[loading sequence]
\begin{enumerate}
\item \dots
\item \texttt{\cs{usepackage}\{lwarp\}}
\item \dots
\item \texttt{\cs{usepackage}\{amsthm\}}
\item \texttt{\cs{usepackage}\{newtxmath\}}
\item \dots
\end{enumerate}
}

\newcommand{\limitsenumitem}{%
\pkg{enumitem} is pre-loaded during \acro{HTML} output.
\margintag{enumitem}
Many of the spacing options are rendered irrelevant by \cmds{pdftotext} and
\acro{HTML}.  Numbering, labels, and \cs{newlist} function correctly.
}

\newcommand{\limitsenumerate}{%
\pkg{enumerate} conflicts with \pkg{enumitem} if both are loaded
at the same time, but \pkg{lwarp} does not actually load \pkg{enumerate}.
While generating \acro{HTML}, \pkg{lwarp} only loads \pkg{enumitem}, and
\pkg{enumerate} is simulated by \pkg{enumitem} using
the functionality of the \texttt{shortlabels} option.

A problem may occur during print output if \pkg{enumitem} is loaded,
either manually or by some other package such as \pkg{siunitx}.
If these are used, \pkg{enumerate} will conflict with \pkg{enumitem}
during print output.
}

\newcommand{\osportabilityusage}{%
\pkg{lwarp} tries to detect which operating system is being used.

If \textsc{MS-Windows} is not correctly detected,
\DescribeProgram{MS-Windows} \DescribeProgram{Windows}
use the command \cs{warpOSwindows} in the document
\DescribeMacro{\warpOSwindows}
preamble after \pkg{lwarp} is loaded.  This modifies the
operating-system path separator used by \pkg{lwarp}.
}


\setlength{\marginparsep}{1em}
\setlength{\marginparpush}{.7ex}
\setlength{\parindent}{0em}
\setlength{\parskip}{2ex}
\setlength{\IndexMin}{40ex}


\setcounter{IndexColumns}{2}

\DisableCrossrefs
\CodelineIndex
\RecordChanges
\begin{document}
  \DocInput{lwarp.dtx}
\end{document}
%</driver>
%
% \fi
%
%
% \iffalse
%<*package>
% \fi
%
% \CheckSum{10774}
%
% \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: 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: \texttt{lwarp\_mathjax.txt} added.}
% \changes{v0.19}{2016/06/01}{File: lwarp.css: \texttt{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}




% \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}
%
% \begin{center}
% \vfill
% \includegraphics[width=.3\linewidth]{lwarp_logo.pdf}
% \vfill
% {\Huge The \textbf{lwarp} package}
%
% \fileversion{} --- \filedate
%
% \bigskip
%
% {\Large \textup{\LaTeX{} to HTML5}}
%
% \bigskip
%
% {\small\copyright{} 2016--2017} Brian Dunn\\ \small \texttt{bd@BDTechConcepts.com}
%
% \bigskip
%
% 
% ^^A % \title{The \pkg{lwarp} package\thanks{This document
% ^^A %   corresponds to \pkg{lwarp}~\fileversion,
% ^^A %   dated \filedate.}}
% ^^A % \author{{\small\copyright{} 2016--2017} Brian Dunn\\ \small \texttt{bd@BDTechConcepts.com}}
% ^^A % \published{}
% ^^A % \subtitle{\textup{\LaTeX{} to HTML5}}
% ^^A %
% ^^A % \maketitle
%
% \vfill
%
% \begin{abstract}
% \noindent
% The \pkg{lwarp} package allows \LaTeX\ to directly produce \htmlfive\ output,
% using external utility programs only for the final conversion of text and images.
% Math may be represented by \acro{SVG} files or MathJax.
%
% Documents may be produced by \LaTeX, \LuaLaTeX, or \XeLaTeX.
% A |texlua| script removes the need for system utilities such as |make| and |gawk|,
% and also supports |xindy| and |latexmk|.  Configuration is automatic at the
% first manual compile.
%
% Print and \acro{HTML} versions of each document may coexist, each with its own
% set of auxiliary files.  Support files are self-generated on request.
%
% A modular package-loading system uses the \pkg{lwarp} version of a package for
% \acro{HTML} when available.
% Several dozen \LaTeX\ packages are supported with these high-level source
% compatibility replacements.
%
% A tutorial is provided to quickly introduce the user to the major components
% of the package.
%
%
% \bigskip
%
% \begin{center}
% \textcolor{blue}{To update existing projects, see \cref{sec:updates},
% \nameref{sec:updates}.}
% \end{center}
%
% \bigskip
%
% \noindent
% \textcolor{red!30!black}{\bfseries
% Note that this is still a ``beta'' version of \pkg{lwarp},
% and some things may change in response to user feedback and
% further project development.
% }
%
% \bigskip
%
% \footnotesize
% \begin{description}
% \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}
%
%
% \end{abstract}
%
% \vspace*{\fill}
% \vspace*{\fill}
% \vspace*{\fill}
%
% \end{center}
%
% \clearpage
%
%
% \tableofcontents
%
% \clearpage
% \listoffigures
% \listoftables
%
%
% \thispagestyle{pageheadfoot}
%
% \clearpage
%
% \part{lwarp.sty}
%
% \section{Updates}
% \label{sec:updates}
%
% The following is intended for those updating existing projects which use
% \pkg{lwarp}, highlighting any special changes which must be made due
% to improvements or modifications in \pkg{lwarp} itself.
%
% For a detailed list of changes, see the Change History on page \pageref{sec:changehistory}.
%
% \begin{description}
% \item[v0.27:] \
%	\begin{itemize}
%	\item Improved documentation for MacOS install.
%	\item Fix for \pkg{microtype} with \XeLaTeX\ and \LuaLaTeX.
%	\item Fix for table footnote paragraph tags.
%	\item Adds \pkg{lettrine}, \pkg{ulem}, and \pkg{soul}.
%	\end{itemize}
% \item[v0.26:] \
%	\begin{itemize}
%	\item Improved installation instructions for MiK\TeX\ regarding generating
%		the |lwarpmk| executable.
%	\item Footnotes are now supported by \LaTeX\ boxes instead of pagenotes.
%		\pkg{pagenote} now works as per the print version.
%		\pkg{footnote}, \pkg{footnotehyper}, \pkg{footmisc}, \pkg{endnotes},
%		\pkg{marginnote}, and \pkg{sidenotes} are also supported.
%	\item \LaTeX\ labels now are used to track the page numbers of |latexiamge|s.
%		This allows the correct inclusion of |lateximage|s in footnotes, pagenotes, and endnotes.
%	\item \pkg{cutwin} and \pkg{floatflt} are also supported.
%	\end{itemize}
% \item[v0.25:] \
%	\begin{itemize}
%	\item Fix: Allows \pkg{graphicx} and \pkg{graphicsx} before \pkg{lwarp} because
%		\XeLaTeX\ and \LuaLaTeX\ use \pkg{xunicode} which uses \pkg{graphics}.
%	\item Package support for \pkg{framed}, several theorem packages, and ellipses.
%	\end{itemize}
% \item[v0.24:] \
%	\begin{itemize}
%	\item \pkg{tikz}'s |babel| library is load automatically as needed.
%	\item \pkg{subfig} has been added, along with |lofdepth| and |lotdepth|.
%	\item \env{picture} and \env{tikzpicture} now may be inline.
%	\end{itemize}
% \needspace{2\baselineskip}
% \item[v0.22:] \
%	\begin{itemize}
%	\item Support has been added for tabular column types |D|, |!|, and |X|.
%		Unknown column types are converted to |l|.
%	\item Additional packages are supported, including \pkg{abstract},
%		\pkg{dcolumn}, \pkg{tabularx}, and \pkg{varioref}.
%	\end{itemize}
% \item[v0.21:] \
%	\begin{itemize}
%	\item Documentation for installing on Windows has been updated and improved.
%	\item For Windows compatibility, the |lateximages| shell script
%		has been replaced with a |lateximages.txt| file, which is parsed
%		by |lwarpmk| to generate lateximages.
%		This does not require any changes in the user's code.
%	\item Windows |lwarpmk again| now functions.
%	\item For improved error handling, \pkg{lwarp} now verifies the
%		order in which packages are loaded, and signals an error for misplaced packages.
%		\pkg{inputenc}, \pkg{fontenc}, \pkg{newunicode}, and \pkg{fontspec}
%		must be loaded before \pkg{lwarp}, and the other packages which
%		\pkg{lwarp} knows about must be loaded after.
%	\item \pkg{lwarp} no longer requires a \cs{title} be assigned.
%	\end{itemize}
% \item[v0.20:] \
%	\begin{itemize}
%	\item The |makefile| and related infrastructure
%		has been replaced by the |lwarpmk| utility.
%		This provides increased portability, reduced dependencies,
%		and much simpler installation and setup.
%	\item The |lwarp-newproject| package is now used to locally create
%		support files.
%	\item The print and \acro{HTML} versions of a document may co-exist with their
%		own sets of auxiliary files.
%	\item Package handling is now controlled by a modular system which
%		looks for and loads an |lwarp-<package>| version if available.
%	\item High-level source compatibility is provided for all supported
%		packages, almost totally eliminating the need
%		for |warpprint| and |warpHTML| environments.
%	\item A large number of additional packages are supported.
%	\item A new tutorial is included in the documentation, and
%		many obsolete sections have been removed.
%	\item \cs{NewHTMLdescription} sets the \acro{HTML} meta description tag for each file.
%		See \cref{sec:htmldescription}.
%	\item \cs{HTMLFileName} may now be empty, allowing filenames without a prefix.
%		Lwarp no longer automatically appends a |-| character.
%		\watchout
%		For existing projects, add a |-| to the end of \cs{HTMLFileName}.
%	\item \cs{HomeHTMLFileName} and \cs{HTMLFileName} no longer use
%		escaped underscore\watchout\
%		characters.  Underscores may be used in filenames as-is.
%	\item \pkg{lwarp} now tries to auto-detect the operating system,
%		and \cs{warpOSwindows} is only needed if the auto-detection
%		fails to detect Windows.
%	\item Tabular column types |@|, |>|, and |<| are now supported.
%	\item |BlockClass| and \cs{InlineClass} add an optional style.
%	\item The |sidebar| and |example| environments have been moved to the
%		test suite, and are no longer included in \pkg{lwarp}.
%	\end{itemize}
% \item[v0.19:] \
%	\begin{itemize}
%	\item \textsc{MathJax} now may be used to display math via the |mathjax| option.
%		See \cref{sec:loading,sec:limitsmath}.
%	To use MathJax with a pre-existing project,
%	\watchout
%	copy or link the file |lwarp_mathjax.txt| to the project's directory.
%	\item \cs{rule} added, supporting width, height, raise, \cs{textcolor}.
%	\item \cs{LateximageFontSizeName} provides user-adjustable font size for math
%		and \env{lateximage}s.
%	\item \cs{minipagefullwidth} requests that the next minipage be
%		full-width in \acro{HTML}, but still the assigned width in print.
%	\item \env{minipage} improved side-by-side rendering.
%	\item CSS class |tablenotes| is provided for table note items.
%	\item \cs{warpprintonly} replaces \cs{rowprintedonly},
%		and \cs{warpHTMLonly} is added.  These behave like the \env{warpprint}
%		\watchout
%		and \env{warpHTML} environments, and are generally useful, so they replace
%		the previously table-specific syntax.
%	\item \pkg{cleveref} is loaded \cs{AtEndPreamble} for improved reliability.
%		See \cref{sec:cleveref}.
%	\item \cs{xfracHTMLfontsize} controls \pkg{xfrac} font size in \acro{HTML}.
%	\item \tikz\ improved catcode handling.
%	\end{itemize}
% \item[v0.18:] \
%	\begin{itemize}
%	\item The \pkg{verse} package and the verse-related commands from
%		the \pkg{memoir} package are now supported.
%	\item Responsive web design has been improved for the sideTOC.
%	\item \cs{includegraphics} now maintains relative sized for em, ex, and \%.
%	\end{itemize}
% \item[v0.17:] \
%	\begin{itemize}
%	\item \pkg{mdframed} package is supported.
%	\end{itemize}
% \item[v0.16:] \
%	\begin{itemize}
%	\item Font and input encoding are now controlled by the user, and
%		\pkg{lwarp} is loaded after fonts have been selected.
%	\item Support for \XeLaTeX{} and \LuaLaTeX.  See \cref{sec:fonts}.
%	\end{itemize}
% \end{description}
%
% \clearpage
%
% \section{Introduction}
% \changes{v0.19}{2016/05/25}{Introduction: MathJax support mentioned.}
%
% The \pkg{lwarp} project aims to allow a rich \LaTeX{} document to be converted to a reasonable \acro{HTML}
% interpretation.  No attempt has been made to force \LaTeX{} to provide for every
% \acro{HTML}-related possibility, and \acro{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 \acro{HTML} conversion.
%
% Several ``modern'' features of \htmlfive, \cssthree, and \acro{SVG}
% are employed to allow a fairly feature-rich document
% without relying on the use of Javascript.
% Limited testing on older browsers show that these new features
% degrade gracefully, although the \acro{SVG} format
% for math may not be available on small cell phones.
%
% |pdflatex|, |xelatex|, or |lualatex| is used, allowing \pkg{lwarp} to process the usual image formats.
% While generating \acro{HTML} output, \acro{SVG} files are used in placed of \acro{PDF}.
% Other formats such as \acro{JPG} are used as-is.
%
% \acro{SVG} images may be used for math,
% and are also used for \env{picture}, and \tikz{} environments,
% as this format has
% better browser and e-book support than Math\acro{ML} (as of this writing),
% while still allowing for the high-quality display and printing of images (again, subject to potentially
% bug-ridden\footnote{Firefox has had an on-again/off-again bug for quite some time regareding
% printing \acro{SVG}s at high resolution.} browser
% support).
%
% Furthermore, \acro{SVG} images allow math to be presented with
% the same precise formatting as in the print version.
% Math is accompanied by 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
% Math\acro{ML} 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.
%
% The \textsc{MathJax} JavaScript display engine may be selected
% for math display instead of using \acro{SVG} images.
% Subject to browser support and Internet access,
% MathJax allows an \acro{HTML} page to display
% math without relying on a large number of external image files,
% one per math expression.  \pkg{lwarp} maintains \LaTeX\ control for cross-referencing
% and equation numbering\,/\,formatting.
%
% \hfill\rule[.7ex]{.3\linewidth}{.4pt}\hspace*{\fill}
%
% The \pkg{lwarp} package allows \LaTeX{} to directly generate \htmlfive{} tags from a \LaTeX{}
% source document, with only minor intervention on the user's part.
% A |texlua| program called |lwarpmk| is used to process either the print or \acro{HTML}
% version of the document.  A few external utility programs are used to finish
% the conversion from a \LaTeX{}-generated \acro{PDF} file which happens to have \htmlfive{} tags,
% to a number of \htmlfive{} plain-text files and accompanying images.
%
% A special |lwarp-newproject| package is used to set up the auxiliary files necessary for
% the \acro{HTML} conversion.  Included is a parallel version of the user's source document,
% |<sourcename>-html.tex|, which selects \acro{HTML} output and then inputs the user's own source.
% This process allows both the printed and \acro{HTML} versions to co-exist side-by-side,
% each with their own auxiliary files.
%
% When requesting packages during \acro{HTML} conversion,
% |lwarp| first looks to see if it has its own modified version
% to use instead of the usual \LaTeX\ version.  These |lwarp-packagename.sty| files contain
% code used to emulate or replace functions for \acro{HTML} output.
%
% Enough functionality is provided to convert a typical article containing technical content.
% Not every package has been tested, but many of the most useful ones are known to work,
% either as-is or through emulation with replacement code.  (See \cref{tab:supported} on
% page \pageref{tab:supported}.)
%
%
%
% \subsection{Supported packages and features}
%
% \changes{v0.15}{2016/04/05}{Docs: Moved the supported functions table to the introduction.}
%
% Supported classes include \pkg{book}, \pkg{report}, and \pkg{article}.
% \pkg{memoir} is planned, but in the meantime many of the packages
% used by \pkg{memoir} are already supported.
%
%
% \Cref{tab:supported} lists some of the various \LaTeX{} features which may be used.
% \emph{Supported} means that the package or macro may be used as-is,
% perhaps with minor limitations.
% \emph{Emulated} means that the original package or macro is not used, but similar
% functionality is provided in a way which is intended to be compatible with the
% user's \LaTeX{} code.
%
% \renewcommand{\arraystretch}{1.5}
%
% \begin{longtable}{>{\raggedright}m{.3\linewidth}m{.6\linewidth}}
% \caption{\protect\LaTeX--HTML generation ---
% \protect\pkg{lwarp} package ---
% Supported functions\label{tab:supported}} \endfirsthead
% \warpprintonly{\multicolumn{2}{c}{\pkg{lwarp} Supported Functions --- continued} \\
%	Category & Status \\ \toprule \endhead}
% \toprule
% Category & Status \\
% \midrule
% Engines: & pdf\LaTeX, \XeLaTeX, \LuaLaTeX \\
% \midrule
% Classes: & \pkg{book}, \pkg{report}, or \pkg{article}. \pkg{memoir} is planned. \\
% \midrule
% Sectioning: & Supported, with hyperlinks.
% 	Honors \cmds{tocdepth} and \cmds{secnumdepth}.
% 	Adds \cmds{filedepth} for splitting the \acro{HTML} output.
% 	Files may be numbered sequentially or named according to section name.
% 	Common short words and punctuation is removed from the filenames. \\
% Table of Contents, Figures, Tables: & Supported, with hyperlinks. \\
% Title page: & \cs{maketitle}, \env{titlepage}, \pkg{titling}.  Optional
% 	\pkg{titling}-based commands for published and subtitle. \\
% \env{abstract}: & Supported \\
% \midrule
% Cross-references: & Emulated, with hyperlinks. \\
% \pkg{hyperref}: & Emulated.
% 	\acro{HTML} hyperlinks are generated for \acro{TOC}, \acro{LOF}, \acro{LOT},
% 	\cs{nameref}, \cs{ref},
% 	the \pkg{cleveref} commands, and index entries.\\
% \midrule
% Footnotes: & \pkg{footnote}, \pkg{footmisc},
%	\pkg{marginnote}, \pkg{sidenote}, \pkg{pagenote}, \pkg{endnotes}. \\
% Indexing: & \cmds{texindy} is used, with hyperlinks. \\
% Bibliography: & Supported, without hyperlinks so far. \\
% \midrule
% Math: & Supported.  Converted to \acro{SVG} images with \acro{HTML} \cmds{ALT} tags containing the
% 	\LaTeX{} source for the math expression.
%	MathJax supported as an alternative.
% 	\AmS{} environments are supported.
% 	User-defined macros are available during converson,
% 	due to native \LaTeX{} processing.\\
% Theorems: & Support for native \LaTeX\ theorems, plus
%	\pkg{theorem}, \pkg{amsthm}, \pkg{ntheorem}. \\
% \midrule
% Floats: & Appear where declared.
%	\pkg{float}, \pkg{newfloat}, \pkg{caption} and \pkg{subcaption},
%	\pkg{subfig}, \pkg{capt-of}, \pkg{placeins}, \pkg{trivfloat}, \pkg{floatrow},
%	\pkg{keyfloat}, \pkg{wrapfig}, \pkg{cutwin}, \pkg{floatflt}. \\
% \midrule
% \env{tabular}: & Emulated.
% 	\cs{multirow} and \cs{multicolumn} are available, but cannot
% 	be used at the same time.
%	Nested tables are not supported. \\
% \pkg{array}: & Supported inside math environments, emulated elsewhere. \\
% \pkg{multirow}: & Emulated. \\
% \pkg{longtable}: & Emulated.  Converted to a tabular.  Captions supported.
% 	Extra headings and \cs{kill} lines must be enclosed in
%  	\cs{warpprintonly\{\}} \\
% \cmidrule{2-2}
% \pkg{booktabs}: & Emulated.  \cs{toprule} and \cs{bottomrule}
% 	form black rules, \cs{midrule} forms silver rules, as demonstrated on
% 	this table.
% 	\cs{cmidrule}, demonstrated at this line, does not use width or trim options. \\
% \cmidrule{2-2}
% \pkg{threeparttable}: & Emulated \\
% \midrule
% \pkg{graphics}, \pkg{graphicx}: & Emulated.
% \cs{includegraphics} supports \cmds{width}, \cmds{height},
% \cmds{origin}, \cmds{angle}, and \cmds{scale} tags, and adds \cmds{class}.
% References to \acro{PDF} files are changed to \acro{SVG}, other image types
% are accepted as well.
% \cs{rotatebox} and \cs{scalebox} are supported as well as \acro{HTML} can handle. \\
% \pkg{rotating}: & Emulated.  All objects are displayed unrotated. \\
% \midrule
% Lists: & Supported \\
% \pkg{enumitem}: & Supported, although spacing is still controlled by \acro{CSS}. \\
% \midrule
% Environments: & Standard \LaTeX{} environments are supported. \\
% \pkg{picture} and \pkg{tikz}: & Converted to an \acro{SVG} image. \\
% \env{minipage}: & Supported with some \acro{HTML}5-imposed limitations.
%	Nested minipages are supported.
% 	Footnotes appear at the bottom of the \acro{HTML} page. \\
% \pkg{fancyvrb}: & Supported except for verbatim footnotes. \\
% \pkg{framed}, \pkg{mdframed}: & Supported \\
% \pkg{multicol}: & Emulated, with \acro{CSS}3.
% Converted to up to three columns with an optional heading,
% per browser support. Single-column if unsupported.\\
% \midrule
% \pkg{siunitx}: & Supported except for \cmds{per-mode=fraction}. \\
% \pkg{xfrac}: & Supported \\
% \midrule
% Direct formatting: & \cs{emph}, \cs{textsuperscript},
% 	\cs{textbf}, etc are supported.
% 	\cs{bfseries}, etc.\ are not yet supported.
%	\pkg{lettrine}, \pkg{ulem}, and \pkg{soul} are supported. \\
% Ordinals: & \pkg{nth}, \pkg{fmtcount}, and \pkg{engord} are supported. \\
% 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: &
%	\acro{HTML} output for thin-unbreakable, unbreakable,
%	\cs{enskip}, \cs{quad}, \cs{qquad}, \cs{hspace}. \\
% Rules: & \cs{rule} with width, height, raise, text color. \\
% \acro{HTML} reserved characters: & \cs{\&}, \cs{textless}, and
% 	\cs{textgreater} are converted to \acro{HTML} entities. \\
% \midrule
% \pkg{xcolor}: & \textcolor{DarkGreen}{Supported}.
% 	Full package color names, any color models,
% 	and \textcolor{Goldenrod}{mixing} is
% 	converted to hex web colors via \cs{convertcolorspec}.
% 	Patched commands are 
% 	\textcolor{Maroon}{\cs{textcolor}},
% 	\colorbox{LightSteelBlue}{\cs{colorbox}},
% 	and \fcolorbox{red}{NavajoWhite}{\cs{fcolorbox}}.
% 	\cs{pagecolor} is not supported. \\
% \midrule
% Where: & \\
% \textbf{Supported:} & The existing \LaTeX{} package is used. \\
% \textbf{Emulated:} & The \LaTeX{} package is not used, but some/all of its
% 	functions are emulated.  Null functions, lengths, and counters are provided
% 	for source compatibility. \\
% \bottomrule
% \end{longtable}
%
%
% Supported packages include everything listed in the table of contents,
% plus each of the following in \cref{tab:additionalsupported},
% and probably others which have not yet been tested.
% Many are simply nullfied during \acro{HTML} output.
% Others are not affected by the output mode and thus work as-is.
%
%
% \begin{table}[bp]
% \caption{Additional supported packages}
% \label{tab:additionalsupported}
% \sffamily
% babel, bm,
% calc, cleveref, csquotes,
% enumitem,
% fancyvrb, fileerr,
% newtxmath,
% siunitx, somedefs,
% tikz, trace,
% varioref,
% xspace
% \end{table}
%
%
% These packages and features probably works with little or no change to the
% user's source code.
% Special environments are provided to mark blocks of code which are for
% print only, \acro{HTML} only, or both, should it be necessary.
% 
%
%
% 
% \clearpage
%
% \section{Alternatives}
% 
% Summarized below are several other ways to convert a \LaTeX{} or other document to \acro{HTML}.
% Where an existing \LaTeX{} document is to be converted to \acro{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{Internet class}
%
% \changes{v0.21}{2017/02/15}{Docs: Added \protect\texttt{internet} class.}
%
% The closest to \pkg{lwarp} in design principle is the
% \DescribeClass{internet}
% \verb+internet+ class by Andrew Stacey
% (\url{https://github.com/loopspace/latex-to-internet}),
% an interesting project which directly produces several versions
% of markdown, and also \acro{HTML}\ and \acro{EPUB}.
% 
% 
%
% \subsection{TeX4ht}
%
% \url{http://tug.org/tex4ht/}\DescribeProgram{TeX4ht}
%
% This system uses native \LaTeX{} processing to produce a DVI file containing special commands,
% and then uses additional post-processing for the \acro{HTML} conversion by way of numerous configuration
% files.
% In some cases, \pkg{lwarp} provides a better \acro{HTML} conversion, and it
% supports a different set of packages.
% TeX4ht produces several other forms of output beyond \acro{HTML}.
%
% \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 \acro{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 \acro{HTML}:
% \begin{description}
% \item [Glad\TeX:] \url{http://humenda.github.io/GladTeX/} \DescribeProgram{GladTeX}
% \end{description}
% 
% \subsection{AsciiDoc}
%
% 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 \acro{HTML}.
% \begin{description}
% \item [Asciidoctor:] \url{http://asciidoctor.org/} (More active.)\DescribeProgram{AsciiDoc}
% \item [AsciiDoc:] \url{http://asciidoc.org/} (The original version.)\DescribeProgram{AsciiDoctor}
% \end{description}
%
% The Asciidoctor-LaTeX project is adding 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{Pandoc}
% \DescribeProgram{Pandoc}
%
% A markup system which also reads and writes \LaTeX{} and \acro{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 Microsoft\,\textregistered{} Word\,\textregistered{}
% and LibreOffice\,\texttrademark{} 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 Adobe\,\textregistered{} FrameMaker\,\textregistered{},
% Adobe\,\textregistered{} InDesign\,\textregistered{},
% and Madcap Flare\,\texttrademark{}.
%
% \subsection{Comparisons}
% \index{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 \acro{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
%
% \section{Installation}
%
% \Cref{tab:utility} shows the tools which are used for
% the \LaTeX\ to \acro{HTML} conversion.
% In most cases, these will be available via the
% standard package-installation tools.
%
% \index{utility>programs}
% \index{programs>utility}
%
% \begin{table}
% \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:] |pdflatex|, |xelatex|, or |lualatex|.
%	\DescribeProgram[requirement]{pdfLaTeX}
%	\DescribeProgram[requirement]{XeLaTeX}
%	\DescribeProgram[requirement]{LuaLaTeX}
%
% \item[The \pkg{lwarp} package:] This package.
%
% \item[The \pkg{lwarp-newproject} package:] Accompanies \pkg{lwarp}, and used
%	to create configuration files.
%
% \item[The |lwarpmk| utility:] Provided along with this package.  This
%	should be an operating-system executable in the same way that
%	|pdflatex| or |latexmk| is.  It is possible to have the
%	\pkg{lwarp-newproject} package generate a local copy of |lwarpmk|
%	called |lwarpmk.lua|.
%	See \cref{sec:genlatexmk}.
%
% \item[luatex:] Used by the |lwarpmk| program to simplify and automate document generation.
%
% \item [xindy:] The \pkg{xindy} package 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[latexmk:] Optionally used by |lwarpmk| to compile \LaTeX\ code.
%	On a MiK\TeX\ system, Perl may need to be installed first.
%
% \item[pdfcrop:] Used to pull images out of the \LaTeX{} \acro{PDF}.
%	\DescribeProgram[requirement]{pdfcrop}
%
% \end{description}
%
% \item[Poppler PDF utilities:] \
%
% \begin{description}
%
% \item[pdftotext:] Used to convert \acro{PDF} to text.
%	\DescribeProgram[requirement]{pdftotext}\index{Poppler}
%
% \item[pdfseparate:] Used to pull images out of the \LaTeX{} \acro{PDF}.
%	\DescribeProgram[requirement]{pdfseparate}
%
% \item[pdftocairo:] Used to convert images to \acro{SVG}.
%	\DescribeProgram[requirement]{pdftocairo}
%
% \end{description}
%
%	These might be provided by your operating-system package manager.
%
%	From Poppler: \url{poppler.freedesktop.org}.
%
%	For MacOS\textregistered, see
%		\url{https://brew.sh/}, install Homebrew, then enter \\
%		\hspace*{2em}|brew install poppler|
%
%	For Windows, see: \\
%		\url{https://sourceforge.net/projects/poppler-win32/} \quad and: \\
%		\url{http://blog.alivate.com.au/poppler-windows/}
%
% \item[Perl:] \
%
% This may be provided by your operating-system package manager, and is
% required for some of the Poppler \acro{PDF} utilities.
%
% \url{perl.org}, \url{strawberryperl.com}
%
% \item[Automatically downloaded from the internet as required:] \
% \begin{description}
%
% \item[MathJax:] Optionally used to display math.
%	Automatically loaded from the MathJax website when needed. \\
%	From: \url{mathjax.org}
%	\DescribeProgram[requirement]{MathJax}
%
% \end{description}
% \end{description}
%
% \hrule
% \end{table}
%
% \subsection{Installing the \protect\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.
%
% \item [\TeX\ Live:]If using a \TeX\ Live distribution,
%	try installing via |tlmgr|:
%	\userentry{tlmgr install lwarp}
%
% \item [MiK\TeX:] If using MiK\TeX, try using the package installer to
%	install the package |lwarp|.
%	Also update the package |miktex-misc|, which will install the
%	|lwarpmk| executable.
% \changes{v0.26}{2017/03/23}{Docs: Improved MiK\TeX\ install instructions.}
%
% \item [Operating-system package:] The operating-system package manager may
%	already have |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 ``Settings'' window, ``Roots'' tab, look for a local TDS root.
%		\end{description}
%		This should be something like: \\
%		\hspace*{2em}|/usr/local/texlive/texmf-local/|
%	\item Unpack the archive in the TDS local directory.
%	\item Renew the cache:
%		\userentry{mktexlsr} \quad —\,or\,—
%		\userentry{texhash}
%
%		Or, for Windows MiK\TeX, start the program called |MiKTeX Settings (Admin)|
%		and click on the button called \textsf{Refresh FNDB}.
%	\end{enumerate}
%
% \item[CTAN \texttt{.dtx} and \texttt{.ins} files:] Another form of \TeX\ package
%	is the |.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 |lwarp.zip| into your own |lwarp| directory.
%	\item Unpack |lwarp.zip|.
%	\item Locate the contents |lwarp.dtx| and |lwarp.ins|
%	\item Create the documentation: \userentry{pdflatex lwarp.dtx} (several times)
%	\item Create the |.sty| files: \userentry{pdflatex lwarp.ins}
%	\item Copy the |.sty| files somewhere such as the \TeX\ Live local tree
%		found in the previous CTAN TDS section, under the subdirectory: \\
%		\hspace*{2em}|<texlocal>/tex/latex/local/lwarp|
%	\item Copy the documentation |lwarp.pdf| to a |source| directory in the local tree,
%		such as: \\
%		\hspace*{2em}|<texlocal>/doc/local/lwarp|
%	\item Renew the cache:
%		\userentry{mktexlsr} \quad —\,or\,—
%		\userentry{texhash}
%
%		Or, for Windows MiK\TeX, start the program called |MiKTeX Settings (Admin)|
%		and click on the button called \textsf{Refresh FNDB}.
%
%	\item See \cref{sec:locallwarpmk} to generate your local copy of |lwarpmk|.
%	\item Once the local version of |lwarpmk.lua| is installed, it may be made
%		available system-wide as per \cref{sec:installlwarpmk}.
%	\end{enumerate}
% \item[Project-local CTAN \texttt{.dtx} and \texttt{.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 |lwarpmk.lua| files
%		may be used as-is, so long as they are in the same directory
%		as the document source.  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 \protect\texttt{lwarpmk} utility}
% \label{sec:installlwarpmk}
%
% \changes{v0.21}{2017/02/22}{Docs: Installing on Windows.}
%
% {\small
% (Note: If |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 |lwarpmk| utility:
% \begin{enumerate}
% \item At a command line, try executing |lwarpmk|.  If the |lwarpmk| help message
%	appears, then |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 |miktex-misc| package.  This may install
% the |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 |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 |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: \\
%			\hspace*{2em}|/usr/local/texlive/<year>| \\
%			The binaries are then located in the |bin/<arch>| directory
%			under the root: \\
%			\hspace*{2em}|/usr/local/texlive/<year>/bin/<architecture>/| \\
%			In this directory you will find programs
%			such as |pdflatex| and |makeindex|.
%		\item In the binaries directory,
%			create a new symbolic link from the binaries directory to |lwarpmk.lua|:
%			\userentry{ln -s <pathtolwarpmk.lua> lwarpmk}
%		\item Make the link executable:
%			\userentry{chmod 0755 lwarpmk}
%		\end{enumerate}
%	\item [Windows \TeX\ Live:] Create a new |lwarpmk.exe| file:
%		\begin{enumerate}
%		\item Locate the \TeX\ Live binaries as shown above for Unix.
%		\item In the binaries directory, make a \emph{copy} of |runscript.exe|
%			and call it |lwarpmk.exe|
%			This will call the copy of |lwarpmk.lua|
%			which is in the |scripts| directory of the distribution.
%		\end{enumerate}
%	\item [Windows MiK\TeX:] Create a new |lwarpmk.bat| file:
%		\begin{enumerate}
%		\item Locate the binaries.  These will be in a directory such as: \\
%			\hspace*{2em}|C:\Program Files\MiKTeX 2.9\miktex\bin\x64| \\
%			In this directory you will find programs
%			such as |pdflatex.exe| and |makeindex.exe|.
%		\item Create a new file named |lwarpmk.bat| containing: \\
%			\hspace*{1em}{\small
%			|texlua "C:\Program Files\MiKTeX 2.9\scripts\lwarp\lwarp.texlua" %*|} \\
%			This will call the copy of |lwarpmk.lua|
%			which is in the |scripts| directory of the distribution.
%		\end{enumerate}
%	\end{description}
% \end{enumerate}
%
% \subsubsection{Using a local copy of \protect\pkg{lwarpmk}}
% \label{sec:locallwarpmk}
% It is also possible to use a local version of |lwarpmk|:
% \begin{enumerate}
% \item When compiling the tutorial in \cref{sec:tutorial},
%	use the |lwarpmk| option for the \pkg{lwarp-newproject} package: \\
%	\hspace*{2em}|\usepackage[lwarpmk]{lwarp-newproject}|
% \item When the tutorial is compiled with |pdflatex|, the file |lwarpmk.lua|
%	will be generated along with the other configuration files.
% \item |lwarpmk.lua| may be used for this project:
%	\begin{description}
%		\item[Unix:] \
%			\begin{enumerate}
%			\item Make |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[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 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}
%
% \item [To install |xindy|, |latexmk|, and |pdfcrop|:] \
%
% The \TeX\ utilities |xindy|, |latexmk|, and |pdfcrop| may be provided by
% your operating system's package manager, and are also provided by
% the CTAN archive: \\
% \hspace*{2em}\url{http://ctan.org/pkg/xindy} \\
% \hspace*{2em}\url{http://ctan.org/pkg/latexmk} \\
% \hspace*{2em}\url{http://ctan.org/pkg/pdfcrop}
%
%
% \item [To install the Poppler utilities to a Unix/Linux system:] \
%	\DescribeProgram[requirement]{pdftotext}\index{Poppler}
%	\DescribeProgram[requirement]{pdfseparate}
%	\DescribeProgram[requirement]{pdftocairo}
%
% The tools from the \textsc{Poppler} project should be provided by your
% operating system's package manager.
%
%
% \item [To install the Poppler utilities to a MacOS machine:] \
%	\begin{enumerate}
%	\item Install Homebrew from \url{https://brew.sh/}:
%		\userentry{~ \\ \hspace*{-2in}/usr/bin/ruby -e "\$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"}
%	\item Install the Poppler utilities:
%		\userentry{brew install poppler}
%	\end{enumerate}
%
%
% \item [To install the Poppler utilities to a Windows machine:] \
%
% \begin{enumerate}
% \item See \cref{tab:utility} on \cpageref{tab:utility}.
% \item Download and extract the Poppler utilities |pdftotext|, |pdfseparate|,
% and |pdftocairo| to a directory, such as |Poppler|.
% \item In the Start window, type "Path" to search for results
% related to Path.  Or, open the control panel and search for "Path".
% \item Choose "Edit the system environment variables" in the control panel.
% \item Choose the "Environment Variables" button.
% \item Choose the "Path" variable, then the "Edit" button.
% \item Choose the "New" button to make an additional entry.
% \item Enter the |bin| directory of the Poppler utilities, such as: \\
%	\hspace*{2em}|C:\Users\<myname>\Desktop\Poppler\poppler-0.5_x86\poppler-0.5\bin|
%
%	Be sure to include |\bin|.
% \item Click "Ok" when done.
% \end{enumerate}
%
% \item [To install Perl to a Windows machine:] \
% \DescribeProgram[requirement]{perl}\index{Perl}
% \begin{enumerate}
% \item Download and install a version of Perl, such as Straweberry Perl,
%	to a directory without a space in its name, such as |C:\Strawberry|.
% \item Edit the Path as seen above for the Poppler utilities.
% \item Enter the |bin| directory of the Perl utility, such as: \\
%	\hspace*{2em}|C:\Strawberry\perl\bin|
%
%	Be sure to include |\bin|.
% \item Click "Ok" when done.
% \end{enumerate}
%
% \end{description}
%
% \vspace{1in}
% \textcolor{red}{\textbf{Any utilities installed by hand must be added to the |PATH|.}}
%
%
%
% \clearpage
%
% \section{Tutorial}
% \label{sec:tutorial}
%
% This section shows an example of how to create an \pkg{lwarp} document.
%
%
% \subsection{Starting a new project}
%
% \changes{v0.21}{2017/02/23}{File \texttt{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 \acro{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}
%	\userentry{texdoc -l lwarp\_tutorial.txt}
%	\watchout[Note: |.txt| suffix!]
%
%	This should be in the |doc/latex/lwarp/| directory along
%	with this \acro{PDF} documentation.
%	Copy |lwarp_tutorial.txt| directly into your |tutorial| directory,
%	renamed as |tutorial.tex|.
%	\end{description}
%
%	\emph{When using Windows, use an editor other than Notepad,
%	\watchout[Bad Formatting!]
%	since Notepad does not accept the end-of-line from a Unix text file.}
%
% \item Compile the project: \userentry{pdflatex tutorial.tex}
%				\quad (several times)
%
% (|xelatex| or |lualatex| may be used as well.)
%
% \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-newproject| package.
%
% (Two of the new files are configuration files for the helper program |lwarpmk|.
% Whenever a print version of the document is created while the |lwarp-newproject|
% package is used, the configuration files for |lwarpmk| are updated to
% record the operating system, \LaTeX\ program (|pdflatex|, |xelatex|, or |lualatex|),
% the filenames of the source code and \acro{HTML} output, and whether
% the additional helper program |latexmk| will be used to compile the document.)
%
%
%
% \clearpage
%
% \begingroup
% \captionof{figure}{tutorial.tex listing}
% \label{fig:tutorial}
%
% \begin{center}
% \footnotesize
% \textcolor{red}{Note: There are two pages!}
% \end{center}
%
% \small
%
% \begin{Verbatim}[gobble=2]
% 
% % 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
% \usepackage[T1]{fontenc}
% \usepackage[utf8]{inputenc}
% \else
% \usepackage{fontspec}          % XeLaTeX or LuaLaTeX
% \fi
% 
% % --- HTML FILENAME AND LATEXMK SETTINGS ---
% % \newcommand{\HomeHTMLFilename}{index} % Filename of the homepage.
% % \newcommand{\HTMLFileName}{node-} % Filename prefix of other pages.
% % \newcommand{\UseLatexmk}{true}% Uncomment to use latexmk
% 
% % --- LWARP IS LOADED NEXT ---
% \usepackage{lwarp-newproject}   % Possibly with the [lwarpmk] option.
% \usepackage{lwarp}
% % \boolfalse{FileSectionNames}  % If false, numbers the files.
% 
% % --- OTHER PACKAGES ARE LOADED AFTER LWARP ---
% \usepackage{makeidx} \makeindex
% \usepackage{xcolor}
% 
% \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 sideTOC
% \SetFirstPageTop{Name and \fbox{HOMEPAGE LOGO}}
% \SetPageTop{\fbox{LOGO}}
% \SetPageBottom{Contact Information and Copyright}
% \NewCSS{lwarp_sagebrush.css}
% 
% \begin{document}
% \maketitle                      % (or a titlepage environment)
% 
% % --- An abstract may be placed here. ---
% 
% \tableofcontents \listoffigures % --- MUST BE BEFORE THE FIRST SECTION.
% 
% \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$
% \begin{equation}
% a^2 + b^2 = c^2
% \end{equation}
% 
% \printindex
% 
% \end{document}
% \end{Verbatim}
% \endgroup
%
%
% \begin{table}
% \caption{Files created in a new project\label{fig:newprojectfiles}}
% \begin{description}
%
% \item [|tutorial.pdf|:] The \acro{PDF} output from \LaTeX.
%
% \item [|tutorial\_html.tex|:] A small |.tex| file used to create
%	a parallel \acro{HTML} version of the document, which co-exists with usual
%	the \acro{PDF} version, and which will have its
%	own auxiliary files.  In this way, both \acro{PDF} and \acro{HTML}
%	documents may co-exist side-by-side.
%
% \item [Auxiliary files:] The usual \LaTeX\ files |tutorial.aux|, |tutorial.log|.
%	When an \acro{HTML} version of the document is created, |_html| versions
%	of the auxiliary files will also be generated.
%
% \item [|lwarpmk.conf|:] A configuration file for |lwarpmk|,
%	which is used to automate the compilation of \acro{PDF} or \acro{HTML}
%	versions of the document.
%
% \item [|tutorial.lwarpmkconf|:] Another configuration file used by |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 \acro{CSS} file,
%	which may be used for project-specific changes to the \pkg{lwarp} defaults.
%
% \item [|lwarp\_html.xdy|:] Used by \pkg{lwarp} while creating an index.
%	This file should not need to be modified by the user.
%
% \item [|lwarp\_mathjax.txt|:] Inserted into the \acro{HTML} files when
%	|MathJax| is used to display math.
%	This file should not need to 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 |lwarpmk| option is given to the \pkg{lwarp-newproject} package:
% \begin{description}
% \item [|lwarpmk.lua|:] A local copy of the |lwarpmk| utility.
%
%	On Unix-related operating systems this file must be made executable: \\
%		\hspace*{2em} |chmod u+x lwarpmk.lua|
%
%	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 \texttt{lwarpmk}}
%
% The |lwarpmk| utility program is used to compile either the printed or
% the \acro{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}
%
%	|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
%	|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 |latexmk| (introduced later), the changed date is
%	ignored and an actual change in contents must occur to cause a recompile.}
%
% \item Process the index.
%	\userentry{lwarpmk printindex}
%
% \item Recompile again to include the index.
%	\userentry{lwarpmk print}
%
% \end{enumerate}
%
% Note that the \acro{HTML} customization commands are ignored while making the
% print version.
%
%
% \clearpage
%
% \subsection{Compiling the HTML version with \texttt{lwarpmk}}
%
% |lwarpmk html| is used to recompile an \acro{HTML} version of the document.
%
% \begin{enumerate}
% \item Compile the \acro{HTML} version:
%	\userentry{lwarpmk html}
%
%	\begin{enumerate}
%	\item |lwarpmk| uses \LaTeX\ to process |tutorial_html.tex|
%		to create \\
%		|tutorial_html.pdf|.
%	\item |pdftotext| is then used to convert into the file |tutorial_html.html|.
%		This file is a plain-text file containing \acro{HTML} tags and
%		content for the entire document.
%	\item |lwarpmk| manually splits |tutorial_html.html| into
%		individual \acro{HTML} files according to the \acro{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 \acro{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 homepage in a web browser.
%
%	\qquad Open the file |tutorial.html| in a web browser.
%
%	Note that math is still displayed as its plain-text \LaTeX\ source
%	\margintag{math}
%	until the
%	images of the math expressions have not yet been generated.  Math may be
%	displayed as \acro{SVG} images or by a 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 \acro{HTML} index and recompile:
%	\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.
% \end{enumerate}
%
%
%
% \clearpage
%
% \subsection{Generating the SVG images}
% \label{sec:tutorialsvgmath}
%
% By default \pkg{lwarp} represents math as \acro{SVG} images with
% \margintag{math as \acro{SVG} images}
% the \LaTeX\ source included in |alt| tags.  In this way,
% the math displays as it was drawn by \LaTeX, and the \LaTeX\ source
% may be copied and pasted into some other document.
%
% \pkg{lwarp} uses the same mechanism for |picture| and \tikz\ environments.
% \margintag{\env{picture} and \tikz}
%
% \begin{enumerate}
% \item Create the \acro{SVG} images:
%	\userentry{lwarpmk limages}
%	\userentry{lwarpmk html}
%
% \item Move to the tutorial's math page and reload.
%
% \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}
%
% When a math expression, |picture|, or \tikz\ environment is added or
% \watchout[Adding/removing]
% removed, the \acro{SVG} images must be re-created with |lwarpmk limages|
% to maintain the proper image file sequence numbers.
%
% Expressing math as \acro{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!]
% There is no attempt at
% reusing the same file each time the same expression occurs, so each
% time \$x\$ is used, for example, yet another file is created.
% For a document with a large amount of math,
% see \cref{sec:tutorialmathjax} to use MathJax instead.
%
% \clearpage
%
% \subsection{Using MathJax for math}
% \label{sec:tutorialmathjax}
%
% Math may also be represented using the MathJax Javascript project.
% \margintag{math with MathJax}
%
% \begin{enumerate}
% \item In the tutorial's source code, change \\
%	\hspace*{2em} |\usepackage{lwarp}| \\
%	\hspace*{3em} to \\
%	\hspace*{2em} |\usepackage[mathjax]{lwarp}|
%
% \item Recompile \userentry{lwarpmk html}
%
% \item Reload the math page.
% \end{enumerate}
%
% MathJax requires web access unless a local copy of MathJax is available,
% \watchout[MathJax requirements]
% and it also requires that Javascript is enabled for the web page.
% The math is rendered by MathJax.  Right-click on math to see several
% options for rendering, and for copying the \LaTeX\ source.
%
% While using MathJax has many advantages, it may not be able to represent
% complex expressions or spacing adjustments as well as \LaTeX.
%
%
%
% \clearpage
% \subsection{Changing the CSS style}
%
% \DescribeMacro{\NewCSS}
% \cs{NewCSS} may be used to choose which |.css| file is used to display
% each section of the web page.  Use \cs{NewCSS} before |\begin{document}|
% to assign the style of the home page.
% If different parts of the website should have different styles,
% call \cs{NewCSS} again before each section heading which creates a new file.
%
% The styles provided by \pkg{lwarp} include:
% \begin{description}
% \item[|lwarp.css|:] A default style if \cs{NewCSS} is not used.  This
%	style is comparable to a plain \LaTeX\ document.
%	To set this style, you may use |\NewCSS{lwarp.css}|, or no \cs{NewCSS} 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{NewCSS} entry in the tutorial
% |lwarpmk html|, and then reload the webpage.
%
% A customized style may also be created.
% \margintag{Custom \acro{CSS}}
% For each new project a file
% called |sample_project.css| is generated.  This may be renamed to
% |<project>.css| then used by assigning |\NewCSS{<project>.css|.
%
% Note that |sample_project.css| is overwritten whenever \pkg{lwarp-newproject}
% is loaded in print mode.
% It is therefore important to rename the file \watchout[Rename it!]
% 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 \acro{CSS} may be made by making entries
% later in the |<project>.css| file.
%
% \clearpage
%
% \subsection{Customizing the HTML output}
% \label{sec:htmlsettings}
% \index{settings>HTML conversion}
% \index{HTML>conversion settings}
%
% Several settings may be used to customize the \acro{HTML} output.
% Watch for the correct placement of each!\watchout[Placement!]
%
% Note that if changes are made,
% \watchout[Changes!]
% it is best to first use |lwarpmk clearall| to
% clear all the \acro{HTML}, \acro{PDF}, and auxiliary files.
% Also, if \cs{HomeHTMLFilename}, \cs{HTMLFileName}, or \cs{UseLatexmk} are
% changed, it is necessary to reenable the |lwarp-newproject| package and
% then recompile the print version in order to recreate the configuration
% files for |lwarpmk|.
%
% \begin{description}
%
% \item[Placed in the preamble just before \pkg{lwarp} is loaded:] \
%
%	\begin{description}
%
% \ItemDescribeMacro{\HomeHTMLFilename} Filename of the homepage, without
%	the ``|.html|'' suffix.
%	Defaults to the \cs{BaseJobname}.  A common setting is: \\
%	\hspace*{2em}|\newcommand{HomeHTMLFilename}{index}| \\
%	causing the
%	homepage to be the file |index.html|.  Underscores are allowed in
%	\margintag{filename underscore}
%	\cs{HomeHTMLFilename} and \cs{HTMLFilename}, but usually must be escaped
%	elsewhere, such as |\item [\href{file\_name.pdf}{text}] \|
%	\index{underscore>filename}\index{file>underscore}
%	\changes{v0.24}{2017/03/13}{Docs: Filename underscore.}
%
% \ItemDescribeMacro{\HTMLFileName} A filename prefix for the rest of the \acro{HTML} web pages.
%	Useful for numbered web pages with a common prefix.  May be empty.
%
% \ItemDescribeMacro{\UseLatexmk} A macro which controls whether
%	\pkg{lwarp} uses |latexmk| to
%	compile the document.  This setting is written to |lwarpmk|'s configuration
%	files.  Defaults to false.  Set to true with: \\
%	\hspace*{2em}|\newcommand*{\UseLatexmk}{true}|
%
%	\end{description}
%
% \item[Placed in the preamble before \texttt{\cs{begin}\{document\}}:] \
%
%	\begin{description}
%
% \ItemDescribeCounter{tocdepth} Sectioning depth of the table of contents.
%	See \cref{sec:stackdepths} for a list of \LaTeX{} stack depths.
%
% \ItemDescribeCounter{SideTOCDepth} Sectioning depth of the side\acro{TOC}.
%	Defaults to 1, causing the sidetoc to show sections but not subsections.
%
%	Each subpage of the website has its own small table of contents
%	\margintag{sideTOC}
%	on the side (the ``side\acro{TOC}'').  Its depth is set by |SideTOCDepth|.
%	This side\acro{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\acro{TOC} at the top of the
%	page and a link back to ``Home'' at the bottom.
%
%	\label{sec:filedepth}
%	It is recommended to set: \\
%		\hspace*{.25in} |SideTOCDepth|\,=\,|FileDepth|, or \\
%		\hspace*{.25in} |SideTOCDepth|\,=\,|FileDepth|+1
%
%	If |SideTOCDepth|\,<\,|FileDepth|, web pages will be inaccessible via the
%	side\acro{TOC}.  \watchout
%	\index{file>inaccessible}
%	\index{page>inacessible}
%	\index{missing sections}
%	\index{section>missing}
%
% \ItemDescribeCounter{FileDepth} Sectioning depth of file splits.
%	Defaults to -5, causing the entire \acro{HTML} website to be one single file.
%	\begin{itemize}
%	\item To place the entire file into one \acro{HTML} page, use: \\
%		\hspace*{.25in}|\setcounter{FileDepth}{-5}}|
%	\item To split the \acro{HTML} file at \cs{section} depth, use: \\
%		\hspace*{.25in}|\setcounter{FileDepth}{1}}|
%	\item To ensure that the \acro{HTML} pages/files are accessible:
%		\watchout\\
%		Place a \cs{tableofcontents} somewhere before the first section
%		break (therefore in the ``home page''), and set |tocdepth|\,>=\,|FileDepth|.
%		\index{file>inaccessible}
%		\index{page>inacessible}
%		\index{missing sections}
%		\index{section>missing}
% 	\end{itemize}
%
% \ItemDescribeBoolean{CombineHigherDepths} 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
%	\watchout[Inaccesible pages!]
%	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,
%	\watchout[Lost in an old page!]
%	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} If true, web page filenames are
%	derived from a sanitized version of the section names.  If false, web pages
%	are numbered.  Either way, the \cs{HTMLFileName} is prefixed.
%
%	Example HTML filenames:
%	\changes{v0.20}{2016/09/11}{Docs: Examples for generating HTML file names.}
%	\label{sec:filenameexamples}
%	\margintag{HTML filenames}
%	\index{HTML>filename generation}
%	\begin{description}
%	\item[Numbered HTML nodes:] \
%
%	Example: Homepage |index.html|, and |node-1|, |node-2|.
%	(See \cs{SetHTMLFileNumber} to number grouped by chapter, for example.)
%	\begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
%	\newcommand{\HomeHTMLFileName}{index}
%	\newcommand{\HTMLFileName}{node-}
%	\usepackage{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]
%	\newcommand{\HomeHTMLFileName}{index}
%	\newcommand{\HTMLFileName}{}
%	\usepackage{lwarp}
%	\booltrue{FileSectionNames}
%	\end{Verbatim}
%
%	\item[Named HTML sections, with prefix:] \
%
%	Example: Homepage |mywebsite.html|, and additional pages such
%	as |mywebsite-About.html|, etc.
%	\begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
%	\newcommand{\HomeHTMLFileName}{mywebsite}
%	\newcommand{\HTMLFileName}{mywebsite-}
%	\usepackage{lwarp}
%	\booltrue{FileSectionNames}
%	\end{Verbatim}
%	\end{description}
%
% \ItemDescribeMacro{\abstractname} The name of the abstract.  This may also be over-written
%	by the \pkg{babel} package.  Defaults to ``Abstract''.
%
% \ItemDescribeMacro{\MetaLanguage} The \acro{HTML} language meta header.
%	Defaults to {en-US}.
%
% \ItemDescribeMacro{\SetFirstPageTop} \marg{contents} \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{\SetPageTop}  \marg{contents} \quad
%	A user-definable custom action applied to
%	the top of pages other than the home page.   Useful for logos, etc.
%	Defaults empty.
%	|\LinkHome| may be used to place a link back to the homepage.
%	Ignored in print output.
%
% \ItemDescribeMacro{\SetPageBottom}  \marg{contents} \quad
%	A user-definable custom action applied to the
%	bottom of each web page.
%	Useful for authors, copyright notices, contact information, etc.
%	Defaults empty.
%	|\LinkHome| may be used to place a link back to the homepage.
%	Ignored in print output.
%
% \end{description}
%
% \item[Placed in the home page before the first section 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, 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}
%
%
% \item[Placed before any sectioning command which causes a file break:] \
%
% \begin{description}
% \ItemDescribeMacro{\NewCSS}  \marg{filename.css} \quad
%	Sets the \acro{CSS} file to use for the following
%	files.  May be changed before each each sectioning command which would
%	cause a file split.
%
%	The \acro{CSS} styles of the web pages are set by the \cs{NewCSS} command.
%	If \cs{NewCSS} 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{NewCSS} command to see the default.
%	\cs{NewCSS} may be used before each file break to set the \acro{CSS} for
%	individual pagess of the website.
%
% \ItemDescribeMacro{\NewHTMLdescription} \marg{description} \quad
%	Sets the \acro{HTML} description tag for
%	the following files.  May be changed before each each sectioning command which would
%	cause a file split.
% \end{description}
%
% \needspace{2\baselineskip}
% \item[Placed in the document wherever necessary:] \
%
% \begin{description}
% \ItemDescribeEnv{warpprint} An environment which is only used
%	while generating print output.  Place here anything which does not
%	apply to \acro{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.
%
% \ItemDescribeEnv{warpHTML} An environment which is only used
%	while generating \acro{HTML} output.  This is useful for website logos and
%	other items which have no purpose in printed output.
%
% \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}
%
%
% \clearpage
%
% \subsection{Using \texttt{latexmk}}
%
% |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, at ``HTML FILENAME AND LATEXMK SETTINGS'',
%	insert the line: \\
%	\hspace*{2em}|\newcommand{\UseLatexmk}{true}|
%
% \item Directly recompile the printed version of the document.
%	\userentry{pdflatex tutorial.tex} \watchout[NOT \texttt{lwarpmk}!] \\
%	\hspace*{2em}(Or |xelatex| or |lualatex|)
%
%	\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 |lwarpmk| should
%	use |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 |latexmk| has a much better awareness of changes than
% the |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.
%
%
% \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 Be sure that \\
%		\hspace*{2em} |\usepackage{lwarp-newproject}| \\
%	is still enabled in |tutorial.tex|.
%
% \item Use |xelatex| or |lualatex| to recompile the printed version.
%	\userentry{xelatex tutorial.tex} \quad -or-
%	\userentry{lualatex tutorial.tex}
%
%	When the recompile occurs and \pkg{lwarp-newproject} is loaded,
%	the configuration files for |lwarpmk| are modified to remember
%	which \TeX\ engine was used.  \XeLaTeX\ or \LuaLaTeX\ will be used for
%	future runs of |lwarpmk|.
%
% \item To recompile the document:
%	\userentry{lwarpmk print} \quad -and-
%	\userentry{lwarpmk html}
%
% \item Also rememeber to update the indexes and recompile again.
% \end{enumerate}
%
%
% \clearpage
%
% \subsection{Cleaning auxiliary files}
%
% To remove the auxiliary files |.aux|, |.toc|, |.lof|, |.lot|, |.idx|, |.ind|, and
%	|.log|:
%	\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{Processing multiple projects in the same directory}
%
% It is possible to have several projects in the same directory.
% |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: \\
% \hspace*{2em}|project_a.lwarpmkconf|, |project_b.lwarpmkconf|
%
% To compile each project with |lwarkmk|:
% \userentry{lwarpmk print project\_a}
% \userentry{lwarpmk html project\_b}
%
%
% \subsection{Using the \texttt{make} utility}
%
% |lwarpmk| has an action which may be useful for integration with the
% common |make| utility:\\
% \hspace*{2em}|lwarpmk pdftohtml [project]|
%
% |make| may be used to compile the code to \acro{PDF} with \acro{HTML}
% tags (|project_html.pdf|), then |lwarpmk| may be used to
% convert each target to \acro{HTML} files.
%
%
% \clearpage
%
% \section{Additional details}
%
% \label{sec:usage}
%
%
%
% \subsection{Font and UTF-8 support}
% \label{sec:fonts}
% \index{font>selection}
% \index{Unicode>selection}
% \index{UTF-8>selection}
% \changes{v0.16}{2016/04/08}{Docs: Font and UTF-8 support.}
% \changes{v0.16}{2016/04/08}{Lwarp no longer selects fonts.}
%
% \pkg{lwarp} uses |pdftotext| to convert \acro{PDF} output into UTF-8-encoded
% text.  This process requires that UTF-8 information be embedded in the \acro{PDF}
% file, which usually prevents the use of bit-mapped fonts.
% \index{font>bitmapped}
%
% While using |pdflatex|, if no font-related package is specified, the default
% \margintag{vector fonts}
% bit-mapped Computer Modern font is used,
% \margintag{Computer Modern}%
% \index{font>Computer Modern}\index{Computer Modern}%
% \watchout%
% so simply add \\
%	\hspace*{.25in}|usepackage{lmodern}| \\
% to the preamble to enable the related vector font instead, or use\\
% \hspace*{.25in}|\usepackage{dejavu}|
%
% \index{Deja Vu}%
% \index{font>Deja Vu}%
% \index{Unicode>enhanced coverage}%
% \index{UTF-8>enhanced coverage}%
% or other other font packages, which may provide an increased coverage of Unicode mappings.
% Avoid bit-mapped fonts.
%
% \XeLaTeX{} and \LuaLaTeX{} users must use the \pkg{fontspec} package.
% \watchout
% Do NOT use \pkg{fontenc}!
%
% Place \pkg{fontspec} or \pkg{fontenc} and other font and UTF-8 related commands
% after the |\documentclass| command and before |\usepackage{lwarp}|:
%
% \begin{enumerate}
% \item |documentclass{article/book/report}| goes here, 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 \acro{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.
%	\index{ligatures}\index{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 |pdflatex|:
% \begin{itemize}
% \item \pkg{lmodern} or other font-related packages
%	\DescribePackage{lmodern}
%	\index{font>packages}
% \item \pkg{fontenc}
% \DescribePackage{fontenc}
% \item \pkg{inputenc}
% \DescribePackage{inputenc}
% \item \pkg{newunicodechar}
% \DescribePackage{newunicodechar}
% \item |\input glyphtounicode.tex|
% \DescribeFile{glyphtounicode}
% \item |\input glyphtounicode-cmr.tex% from the pdfx package|
% \item |\pdfgentounicode=1|
% \item \pkg{cmap}
% \DescribePackage{cmap}
% \item \pkg{textcomp}
% \DescribePackage{textcomp}
% \item \pkg{microtype} is automatically used by \pkg{lwarp}
%	\DescribePackage{microtype}
%	to turn off f,q,t,T,Q ligatures for the same
%	\margintag{ligatures}
%	browser-related reasons shown above.  Also, the monospaced font is used
%	during \acro{HTML} tag generation to turn off \TeX{} ligatures.
%	\index{ligatures}\index{font>ligatures}
% \end{itemize}
% \end{itemize}
% \item |\usepackage{lwarp}| (\cref{sec:loading}) goes after any of the above, followed by:
% \item \ldots{} the rest of the preamble and the main document.
% \end{enumerate}
%
% \subsection{\protect\pkg{lwarp} package loading and options}
% \label{sec:loading}
% \index{settings>lwarp package options}
% 
% \pkg{lwarp} supports |book|, |report|, and |article| classes.
%
% Load the \pkg{lwarp} package immediately after the font and UTF-8 setup commands.
% \changes{v0.16}{2016/04/08}{Docs: Moved location of \cs{usepackage\{lwarp\}}.}
% \changes{v0.19}{2016/05/25}{Docs: Math options.}
% \DescribePackage{lwarp}
% \index{lwarp>loading}\index{lwarp>options}
%
% \DescribeOption[lwarp]{warpprint}
% \DescribeOption[lwarp]{warpHTML}
% Select the |warpprint| option to generate print output (default),
% or the |warpHTML| option to generate \htmlfive{} output.
% The default is print output, so the print version may be
% compiled with the usual |pdflatex|, etc.
% When \pkg{lwarp-newproject} is loaded in print mode, it creates
% |<project>_html.tex|, which sets the |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.
%
% \DescribeOption[lwarp]{mathsvg}
% \DescribeOption[lwarp]{mathjax}
% For math display, select |mathsvg| (default), or |mathjax|.
% For more information about the math options, see \cref{sec:limitsmath}.
% 
% 
% \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}
% \index{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 \acro{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 \acro{HTML}-only.
%
% These environments are also useful for creating a special version of
% the titlepage for print and another for \acro{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}
%
% \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}
%
% \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}
%
%
% Macros are also provided for print-only or \acro{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 \acro{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 \acro{HTML} output, but are hard to isolate automatically.
% For example:
%
% \begin{itemize}
% \item Paragraph formatting: \cs{parindent} \cs{parskip}
% \item Variable spaces such as \cs{vspace}.  \cs{hfill} is turned into a \cs{quad}.
%  Fixed spaces such as \cs{quad} are emulated correctly.
% \item Manual page positions such as the \pkg{textpos} package, which is
%	emulated but only in a limited way.
% \end{itemize}
%
% Some packages require additional setup commands.  Where these packages are emulated
% for \acro{HTML}, setup commands may work for the emulated \acro{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{Commands for a successful HTML conversion}
% \label{sec:successfulcommands}
% \index{HTML>commands for a successful conversion}
%
% \changes{v0.14}{2016/03/26}{Docs: Commands for a successful HTML conversion.}
%
% Some commonly-used \LaTeX{} expressions should be modified to allow
% for a smooth conversion to both \acro{HTML} and print-formatted outputs:
%
% \begin{description}
%
% \item [Page references:] The printed page does not translate to the \acro{HTML}
% page, so references to page numbers are converted to parentheses containing
% \cs{pagerefPageFor}, which defaults to ``see '',
% followed by a hyperlink to the appropriate
% object.  Ex: ``Sec.~\textcolor{red}{1.23}
% on page (see sec.~\textcolor{red}{1.23})''.
% \cs{pagerefPageFor} may be redefined to ``page for '', empty, etc.
%
% \item [\cs{bfseries}, etc:] Use \cs{textbf} instead.
% \item [\cs{centering}, \cs{raggedright}, \cs{raggedleft}:] ~
%
% Use the environments \env{center}, \env{flushright}, \env{flushleft} instead.
%
% \item [Superscripts and other non-math uses of math mode:] ~
%
%	Use \cs{textsuperscript\{x\}} instead of |$^{x}$|
%
% \item [Empty \cs{item} followed by a new line of text or a nested list:] \
%
%	Use a trailing backslash: |\item[label] \|
%	\index{item, list, empty}\index{list item, empty}
%
% \item [Filenames in lists:] \
%
%	Escape underscores in
%	\margintag{filename underscore}
%	the filenames: \\
%	\hspace*{2em}|\item[\href{file\_name.pdf}{text}]|
%	\index{underscore>filename}\index{file>underscore}
%	\changes{v0.24}{2017/03/13}{Docs: Filename underscore.}
%
% \item [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
%	\acro{HTML}.  Do not use space commands at the start or end of the line.
%
% \item [\cs{fbox} around a minipage:] ~
%
%	\cs{fbox} can only be used around inline items during
%	\acro{HTML} output.
%
%	For an \cs{fbox} around a minipage, you may:
%	\index{fbox>around a minipage}
%	\index{minipage>in an \cs{fbox}}
%	\begin{itemize}
%	\item Place the \cs{fbox} command and
%		its closing brace inside \env{warpprint} environments.
%	\item Use \cs{mdframed} instead.
% ^^A	\item Use the \env{example} or \env{sidebar} environments.
%	\item Use a custom environment to create a sidebar,
%		containing a \env{BlockClass} environment
%		with custom \acro{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{itemize}
% \end{description}
%
% Also see \cref{sec:troubleshooting}: \nameref{sec:troubleshooting}.
%
%
% 
%
% \subsection{Title page}
% \label{sec:settitle}
% \index{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
% \subtitle{Optional Document Subtitle \\ with optional multiple lines}
% \author{Author One\affiliation{Affiliation One} \and 
%     Author Two\affiliation{Affiliation Two} }
% \date{Optional date}
% \published{Optional Journal Name \\ Optional multiple lines}
% \end{Verbatim}
% 
% The title is used in the meta tags in the \acro{HTML} files, and the rest are used
% in |\maketitle|.
%
%
% \DescribeMacro{\maketitle}
% Use |\maketitle| just after the |\begin{document}|, as this will establish
% the title of the homepage.  Optionally, use a |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 \tag{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 |\title|; these will interfere with the
% file break and \acro{CSS} detection.
% \watchout
% Use the |\subtitle| command instead.
% In \acro{HTML}, the title will appear in a heading |h1|.
%
% \DescribeMacro{\author} \marg{author}
%
% In |\author|, use |\protect| before formatting commands such as |\textsc|.
% \watchout
% In \acro{HTML}, the author will appear in a \tag{div} class |author|.
% \cs{affiliation} is a new addition to \pkg{lwarp}.
%
% \DescribeMacro{\date} \marg{date}
%
% |\date| works as expected.
% In \acro{HTML}, this will appear in a \tag{div} class |titledate|.
%
% \DescribeMacro{\subtitle} \marg{subtitle}
%
% A new command which sets a subtitle.  Newlines are allowed.
% The default is empty.
% In \acro{HTML}, this will appear in a \tag{div} class |subtitle|.
%
% \DescribeMacro{\published} \marg{published}
%
% A new command which sets a publisher.
% The default is empty.
% In \acro{HTML}, this will appear in a \tag{div} class |published|.
%
%
% \DescribeMacro{\thanks} \marg{text}
%
% \cs{thanks} are allowed in the titlepage fields, and will be rendered
% as \acro{HTML} notes at the bottom of the title page.
%
%
% \subsection{HTML page meta descriptions}
%
% \label{sec:htmldescription}
% \index{HTML>meta tag>description}
% \index{description>HTML meta tag}
% \index{meta tag, HTML>description}
% \DescribeMacro{\NewHTMLdescription} \marg{A description of the web page.}
% \quad The default is no description.
%
% Each page of \acro{HTML} output should have its own \acro{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{NewHTMLdescription}
% \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{NewHTMLdescription} just before each \cs{section} command, and that description will be
% placed inside the \acro{HTML} page for that \cs{section}.  The same descrition will be used for
% all following \acro{HTML} files as well, until reset by a new \cs{NewHTMLdescription}.  It is best
% to use a unique description for each \acro{HTML} file.
%
% To disable the generation of \acro{HTML} description meta tags,
% \margintag{disabling}
% use:\\
% \hspace*{1em} |\NewCSSdescription{}|
%
%
% \subsection{CSS}
%
% \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 \acro{CSS} file such as |project.css|, containing only
% things which are different from |lwarp.css|.
% |project.css| should refer to |lwarp.css| as follows:
%	\index{CSS>project-specific changes}\index{CSS>lwarp.css}
%	\index{settings>\acro{CSS} project-specific}
% \vspace{-2ex}
% \VerbatimInput[frame=lines]{sample_project.css}
%
% An example file called |sample_project.css| is provided, and may be renamed |project.css|.
% 
% \label{sec:setcss}
%
% \DescribeMacro{\NewCSS}
% For each section at which \acro{HTML} files are split,
% |\NewCSS| may be used before the sectioning command to select a \acro{CSS} file for that and all
% following sections.  This may be changed numerous times throughout the file, resulting in
% different \acro{HTML} pages having different \acro{CSS} files assigned.
% \index{CSS>file selection}
% \index{CSS>per HTML page}
% \index{settings>CSS selection}
%
%
%
% \subsection{Special cases and limitations}
% \label{sec:limitations}
%
% \subsubsection{Text formatting}
%
% \limitstext
%
% \subsubsection{Footnotes and page notes}
%
% \limitsfootnotes
%
%
% \subsubsection{Math}
% \label{sec:limitsmath}
%
% \limitsmath
%
% For an example of using custom \LaTeX\ macros with MathJax,
% \margintag{custom MathJax macros}
% see page \pageref{ex:mathjaxmacros}.
%
% \subsubsection{Ntheorem}
%
% \limitsntheorem
%
%
% \subsubsection{Graphics}
%
% \limitsgraphics
%
%
% \subsubsection{Xcolor}
%
% \limitsxcolor
%
%
% \subsubsection{Tabular}
% 
% \limitstabular
%
%
% \subsubsection{Save Boxes}
%
% \changes{v0.27}{2017/04/04}{Docs: Limitations of saveboxes.}
%
% \limitssaveboxes
%
%
% \subsubsection{Minipages}
%
% \limitsminipage
%
%
% \subsubsection{Mdframed}
%
% \limitsmdframed
%
% 
% \subsubsection{\pkg{float}, \pkg{trivfloat}, and/or \pkg{algorithmicx} together}
%
% \limitscombiningfloats
%
%
% \subsubsection{\pkg{caption} and \pkg{subcaption} packages}
%
% \limitscaption
%
%
% \subsubsection{\pkg{subfig} package}
%
% \limitssubfig
%
%
% \subsubsection{\pkg{floatrow} package}
%
% \limitsfloatrow
%
%
% \subsubsection{\pkg{abstract} package}
%
% \limitsabstract
%
%
% \subsubsection{\pkg{cleveref} and \pkg{varioref} packages}
%
% \changes{v0.22}{2017/03/01}{\pkg{varioref}: Supported.}
%
% \limitspageref
%
%
% \subsubsection{\pkg{verse} and \pkg{memoir}}
%
% \limitsverse
%
%
% \subsubsection{\pkg{siunitx} package}
%
% \DescribePackage{siunitx}
% \limitssiunitx
% 
%
% \subsubsection{\pkg{newclude} package}
%
% \changes{v0.14}{2016/03/29}{Docs: Newclude limitations.}
%
% \DescribePackage{newclude}
% \limitsnewclude
%
%
% \subsubsection{\pkg{newtxmath} package}
%
% \DescribePackage{newtxmath}
% \limitsnewtxmath
%
%
% \subsubsection{\pkg{babel} package}
%
% \DescribePackage{babel}
% \limitsbabelone
%
% \limitsbabeltwo
%
% 
% \subsubsection{\pkg{enumitem} package}
%
% \DescribePackage{enumitem}
% \limitsenumitem
% 
%
% \subsubsection{\pkg{enumerate} package}
%
% \DescribePackage{enumerate}
% \limitsenumerate
%
%
%
% \section{Expanding the code base}
% \pagestyle{pageheadfoot}
%
% Purely text-based packages probably will work as-is when generating
% \acro{HTML}.
%
% Look to existing code for ideas on how to expand into new code.
%
% An environment may be converted to a |lateximage| then displayed
% with an image of the resulting \LaTeX{} output.
% See \cref{sec:picture} for an example of the |picture| environment.
%
% To create a custom \acro{HTML} block or inline \acro{CSS} class,
% see \cref{sec:highlevelclasses}.
%
% \subsection{Creating an lwarp version of a package}
%
% When creating \acro{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 \acro{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 \acro{HTML}
% generation.  Its purpose is to pretend to be the original package,
% while modify anything necessary to create a successful \acro{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 \acro{HTML} output.  Only the ``user-facing''
% macros need to be nullified or emulated.
%
% Each |lwarp-| package should first call either \cs{LWR@ProvidesPackageDrop}
% or \cs{LWR@ProvidesPackagePass}.  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 \acro{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 \acro{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.
%
%
% \subsection{Testing \protect\pkg{lwarp}}
%
% \changes{v0.25}{2017/03/22}{Docs: Testing \protect\pkg{lwarp}.}
%
% When changes have been made, test the print output before testing the
% \acro{HTML}.  The print output compiles faster, and any errors in the printed
% version will be easier to figure out than the \acro{HTML} version.
%
% The package \pkg{lwarp-newproject} must be loaded to set up the configuration
% files, but may be commented out from then on unless the configuration changes.
% A small amount of time is taken each time \pkg{lwarp-newproject} is run.
%
% Remember that the configuration files are only rewritten when compiling the
% printed version of the document, and when \pkg{lwarp-newproject} is enabled.
%
% Sometimes it is worth checking the |<project>_html.pdf| file, which is the
% \acro{PDF} containing \acro{HTML} tags.  Also, |<project>_html.html| has
% the text conversion of these tags, before the file is split into individual
% \acro{HTML} files.
%
% It is also worth checking the browser's tools for verifying the correctness
% of \acro{HTML} and \acro{CSS} code.
%
%
% \section{Troubleshooting}
% \label{sec:troubleshooting}
% \index{FAQ}\index{Frequently Asked Questions}\index{bugs}
% \index{troubleshooting}\index{problems}\index{error messages}
% \index{debugging}
%
% \subsection{Using the \protect\texttt{lwarp.sty} package}
%
% Also see: \\
% \Cref{sec:printcommands}: \nameref{sec:printcommands} \\
% \Cref{sec:successfulcommands}: \nameref{sec:successfulcommands} \\
% \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.}
%
% \begin{description}
%
% \item [Text is not converting:] ~
%	\begin{itemize}
%	\item Font-related UTF-8 information must be embedded in the \acro{PDF} file.
%		See \cref{sec:fonts} regarding vector fonts.
%	\end{itemize}
%
% \item [Undefined HTML settings:] \
%	\item See the warning regarding the placement of the \acro{HTML} settings
%		at \cref{sec:htmlsettings}.
%
% \item [Obscure error messages:] ~
%	\begin{itemize}
%	\item Be sure that a print version of the document compiles and
%		that your document's \LaTeX{} code is correct, before attempting
%		to generate an \acro{HTML} version.
%	\end{itemize}
%
% \item [Missing sections:] ~
%	\begin{itemize}
%	\item See \cref{sec:filedepth} regarding the
%		|FileDepth| and |SideTOCDepth| counters,
%		and the use of \cs{tableofcontents} in the home page.
%	\end{itemize}
%
% \item [Missing HTML files:] \
%	\item See the warning regarding changes to the \acro{HTML} settings
%		at \cref{sec:htmlsettings}.
%
% \item [Missing / incorrect cross-references:] ~
% \index{cross-references>missing or incorrect}
%	\begin{itemize}
%	\item Use |lwarpmk again| followed
% 		by |lwarpmk html| or |lwarpmk print| to compile the document one more time.
%	\end{itemize}
%
% \item [Em-dashes or En-dashes in listing captions and titles:] \
%
%	Use	\XeLaTeX\ or \LuaLaTeX.
%
% \item [Floats 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 [Print document contains HTML tags:] ~
%	\begin{itemize}
%	\item Be sure that the document
%		selects |\usepackage[warpprint]{lwarp}| instead of |[warpHTML]|.
%	\end{itemize}

% \item [HTML document contains a single unformatted print
%	document:] ~
%	\begin{itemize}
%	\item Be sure that the document
%		selects |\usepackage[warpHTML]{lwarp}| instead of |[warpprint]|.
%	\end{itemize}
%
% \item [Images are appearing in strange places:] ~
% \index{images>in strange places}
%	\begin{itemize}
%	\item |lwarpmk limages| to refresh the |lateximage| images.
%	\end{itemize}
%
% \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.
%
% \item [Plain-looking document:] ~
%	\begin{itemize}
%	\item The document's \acro{CSS} stylesheet may not be available, or may be
%		linked incorrectly.  Verify any \cs{NewCSS} statements point to
%		a valid \acro{CSS} file.
%	\end{itemize}
%
% \item [Broken fragments of HTML:] ~
%	\begin{itemize}
%	\item Check the \acro{PDF} file used to create \acro{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:] ~
%	\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 \acro{HTML} settings
%		at \cref{sec:htmlsettings}.
%	\item Verify that the proper \acro{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}
%	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 \protect\texttt{lwarp.dtx} file}
%
% \begin{description}
% \item [Illogical error messages caused by an out-of-sync |lwarp.sty| file:] ~
%	\begin{enumerate}
%	\item Delete the |lwarp.sty| file.
%	\item |pdflatex lwarp.ins| to generate a new |lwarp.sty| file.
%	\item |pdflatex lwarp.dtx| to recompile the |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}
%
% 
%
%
% \StopEventually{\PrintChanges\PrintIndex}
% 
%
%
%
% \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 \acro{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 \cmds{pdftotext}.
%
% Packages were emulated where their primary purpose was visual formatting which is not
% relevent to \acro{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 \acro{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.
%
% There is still room to improve the factoring of the code, and doing so will become
% important if support for other output formats is added.  Rather than wait until the
% code is pristine, the author felt it best to publish early and accept input before
% pushing on towards a perhaps less-than-ideal solution.
%
%
% Testing has primarily been done with the Iceweasel/Firefox browser.
%
%
% \section{Stack depths}
% \label{sec:stackdepths}
% \index{HTML>headings}
% \index{section>depths}\index{stack depths}
%
% Stacks are created to track depth inside the \LaTeX{} document structure.
% This depth is translated to \acro{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 \acro{HTML} tags nested correctly.
%
% \begin{table}
% \caption{Section depths and HTML headings\label{tab:depthsheadings}}
% \begin{tabular}{lcl}
% \toprule
% Section & \parbox[c]{.35in}{\LaTeX{} depth} & \acro{HTML} headings \\
% \midrule
% title of the entire website & & h1 \\
% none			& -5	& new for this package \\
% book			& -2	& \textbf{not yet used} \\
% part			& -1	& h2 \\
% chapter		& 0 	& h3 \\
% section		& 1		& h4 \\
% subsection	& 2		& h5 \\
% subsubsection	& 3		& h6 \\
% paragraph		& 4		& span class = "paragraph" \\
% subparagraph	& 5		& span class = "subparagraph" \\
% listitem		& 7		& new for this package, used for list items \\
% \bottomrule
% \end{tabular}
% \end{table}
%
% Support for the \pkg{memoir} package will require the addition of a \cmds{book}
% level, which will push the \acro{HTML} headings down a step, and also cause \cmds{subsubsection}
% to become a \cmds{div} due to a limit of six \acro{HTML} headings.
%
% It is possible to use \htmlfive{} \cmds{section} and \cmds{H1} for all levels,
% but this may not be well-recognized by older browsers.
%
% \clearpage
%
% 
% 
% \section{Source Code}
% 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.
%
% \index{numbers>left margin}\index{line numbers}
% \index{margin>numbers}\index{margin>tags}
% \documentationnotes
% \index{warning icon}\index{danger icon}\index{icon>warning}
% \index{for>HTML output}\index{for>PRINT output}\index{for>HTML \& PRINT}
% \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 — pdflatex, lualatex, xelatex}
%
%    \begin{macrocode}
\RequirePackage{iftex}

\ifLuaTeX
\RequirePackage{luatex85}% until the geometry package is updated
\fi
%    \end{macrocode}
%
%
%
% \section{Unicode Input Characters}
% \changes{v0.18}{2016/05/17}{PDF Unicode input characters.}
% \index{Unicode>input characters}
%
% \codeall
%
% If using |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.
%    \begin{macrocode}

\RequirePackage{newunicodechar}

\newunicodechar{⨯}{\texttimes}

\ifPDFTeX
\newunicodechar{ﬀ}{ff}% the first arguments are ligatures
\newunicodechar{ﬁ}{fi}
\newunicodechar{ﬂ}{fl}
\newunicodechar{ﬃ}{ffi}
\newunicodechar{ﬄ}{ffl}
\newunicodechar{—}{---}
\newunicodechar{–}{--}
%    \end{macrocode}
% In PDF\TeX, preserve upright quotes in verbatim text:
%    \begin{macrocode}
\RequirePackage{upquote}
\else
\fi
%    \end{macrocode}
%
%
%
% \section{Handling package options}
% \label{sec:handlingpackageoptions}
%
%
% \DescribePackage{etoolbox}
% Provides |\ifbool| and other functions.
%
%    \begin{macrocode}
\RequirePackage{etoolbox}[2011/01/03]
% requires v2.6 for \BeforeBeginEnvironment, etc.
%    \end{macrocode}


% \DescribePackage{ifplatform}
% Provides \cs{ifwindows} to try to automatically detect
% Windows OS.
%
%    \begin{macrocode}
\RequirePackage{ifplatform}% sense op-system platform
%    \end{macrocode}
%
%
% \DescribePackage{comment}
% Provides conditional code blocks.
%
%    \begin{macrocode}
\RequirePackage{comment}
\excludecomment{testing}
%    \end{macrocode}



% \DescribePackage{kvoptions}
% Allows key/value package options.
%    \begin{macrocode}
\RequirePackage{kvoptions}
\SetupKeyvalOptions{family=LWR,prefix=LWR@}
%    \end{macrocode}


% \DescribeBoolean{warpingprint}
% \DescribeBoolean{warpingHTML}
% \DescribeBoolean{mathjax}
% Set to true/false depending on the package option selections for
% print/\acro{HTML} output and mathsvg/mathjax:
%    \begin{macrocode}
\newbool{warpingprint}
\newbool{warpingHTML}
\newbool{mathjax}
%    \end{macrocode}


% \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 \acro{HTML} output.
% \changes{v0.19}{2016/06/06}{Added.}
%    \begin{macrocode}
\newcommand{\warpHTMLonly}[1]{\ifbool{warpingHTML}{#1}{}}
%    \end{macrocode}
% \end{macro}




% \begin{environment}{warpall}
% Anything in the |warpall| environment will be generated for print or \acro{HTML} outputs.
%    \begin{macrocode}
\includecomment{warpall}
%    \end{macrocode}
% \end{environment}




% \begin{environment}{warpprint}
% Anything in the |warpprint| environment will be generated for print output only.
%
% \DescribeOption[lwarp]{warpprint}
% If the |warpprint| option is given, boolean |warpingprint| is true and boolean |warpingHTML| is false,
% and may be used for |\ifbool| tests.
%
%    \begin{macrocode}
\DeclareVoidOption{warpprint}{%
\PackageInfo{lwarp}{Using option 'warpprint'}
\includecomment{warpprint}%
\excludecomment{warpHTML}%
\booltrue{warpingprint}%
\boolfalse{warpingHTML}%
}
%    \end{macrocode}
% \end{environment}

% \begin{environment}{warpHTML}
% Anything in the |warpHTML| environment will be generated for \acro{HTML} output only.
%
% \DescribeOption[lwarp]{warpHTML}
% If the |warpHTML| option is given, boolean |warpingHTML| is true and boolean |warpingprint| is false,
% and may be used for |\ifbool| tests.
%
%    \begin{macrocode}
\DeclareVoidOption{warpHTML}{%
\PackageInfo{lwarp}{Using option 'warpHTML'}
\excludecomment{warpprint}%
\includecomment{warpHTML}%
\booltrue{warpingHTML}%
\boolfalse{warpingprint}%
}
%    \end{macrocode}
% \end{environment}
%
%
%


%
% \changes{v0.19}{2016/05/25}{Options: mathsvg and mathjax}
% \DescribeOption[lwarp]{mathsvg}
% Option |mathsvg| selects \acro{SVG} math display:
% \index{math>mathsvg option}
% \index{SVG>mathsvg option}
% If the |mathsvg| option is given, boolean |mathjax| is false, and may be used for |\ifbool| tests.
%    \begin{macrocode}
\DeclareVoidOption{mathsvg}{%
\PackageInfo{lwarp}{Using option 'mathsvg'}
\boolfalse{mathjax}%
}
%    \end{macrocode}
%
% \DescribeOption[lwarp]{mathjax}
% Option |mathjax| selects MathJax math display:
% \index{math>mathjax option}
% \index{MathJax>mathjax option}
% If the |mathjax| option is given, boolean |mathjax| is true, may be used for |\ifbool| tests.
%    \begin{macrocode}
\DeclareVoidOption{mathjax}{%
\PackageInfo{lwarp}{Using option 'mathjax'}
\booltrue{mathjax}%
}
%    \end{macrocode}

% \DescribeOption[lwarp]{BaseJobname}
% Option |BaseJobname| sets the \cs{BaseJobname} for this document.
%
% This is the \cs{jobname} of the printed version, even if currently
% compiling the \acro{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}



% The default is print output,
% and \acro{SVG} math if the user chose \acro{HTML} output.
%    \begin{macrocode}
\includecomment{warpprint}%
\excludecomment{warpHTML}%
\booltrue{warpingprint}%
\boolfalse{warpingHTML}%
\boolfalse{mathjax}%


% \ExecuteOptions{warpprint,mathsvg}

\ProcessKeyvalOptions*\relax
%    \end{macrocode}


% Assign the \cs{BaseJobname} if the user hasn't provided one:
%    \begin{macrocode}
\providecommand*{\BaseJobname}{\LWR@BaseJobname}
%    \end{macrocode}



% \begin{macro}{\@nameedef} \marg{name} \marg{defn}
%
% Expands |<defn>| before assigning to |<name>|
%    \begin{macrocode}
\def\@nameedef#1{\expandafter\edef\csname #1\endcsname}
%    \end{macrocode}
% \end{macro}



% \section{Misplaced packages}
%
% \changes{v0.21}{2017/02/22}{Add: Errors for misplaced packages.}


% Several packages should only be loaded before \pkg{lwarp}, and
% others should only be loaded after.
%
% Packages which should only be loaded before \pkg{lwarp} have their own \\
% \hspace*{2em}|lwarp-<packagename>.sty| \\
% which will trigger an error if they are loaded after
% \pkg{lwarp}.
% Examples include \pkg{fontspec}, \pkg{inputenc}, \pkg{fontenc},
% and \pkg{newunicodechar}.
%
%

% \begin{macro}{\LWR@loadafter} \marg{packagename} \quad
% Error if this package was loaded before \pkg{lwarp}.
%
%    \begin{macrocode}
\newcommand*{\LWR@loadafter}[1]{%
\@ifpackageloaded{#1}
{
\PackageError{lwarp}
{Package #1, or one which uses #1, must be loaded after lwarp}
{Move \detokenize{\usepackage}{#1} after \detokenize{\usepackage}{lwarp}.
Package #1 may also be loaded by something else, which must also be moved
after lwarp.}
}
{}
}
%    \end{macrocode}
% \end{macro}


% \begin{macro}{\LWR@loadbefore} \marg{packagename} \quad
% Error if this package is after \pkg{lwarp}.
%
%    \begin{macrocode}
\newcommand*{\LWR@loadbefore}[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@loadnever} \marg{badpackagename} \marg{replacementpkgname}
%
% 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 does not work with lwarp's HTML conversion.
Please use the #2 package instead}
{Package #1 conflicts with lwarp in some way, but package #2 probably will work instead.}
}
%    \end{macrocode}
% \end{macro}




% 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.}
%
% The following packages must be loaded after \pkg{lwarp}:
%    \begin{macrocode}
\LWR@loadafter{abstract}
\LWR@loadafter{afterpage}
\LWR@loadafter{algorithmicx}
\LWR@loadafter{alltt}
\LWR@loadafter{amsthm}
\LWR@loadafter{bookmark}
\LWR@loadafter{booktabs}
\LWR@loadafter{ccaption}
\LWR@loadafter{changepage}
\LWR@loadafter{cutwin}
\LWR@loadafter{dcolumn}
\LWR@loadafter{draftwatermark}
\LWR@loadafter{ellipsis}
\LWR@loadafter{emptypage}
\LWR@loadafter{enumerate}
\LWR@loadafter{epigraph}
\LWR@loadafter{eso-pic}
\LWR@loadafter{everypage}
\LWR@loadafter{extramarks}
\LWR@loadafter{fancyhdr}
\LWR@loadafter{floatrow}
\LWR@loadafter{float}
\LWR@loadafter{floatflt}
\LWR@loadafter{ftnright}
\LWR@loadafter{geometry}
% \LWR@loadafter{graphics}% pre-loaded by xunicode
% \LWR@loadafter{graphicx}% pre-loaded by xunicode
\LWR@loadafter{hyperref}
\LWR@loadafter{indentfirst}
\LWR@loadafter{keyfloat}
\LWR@loadafter{layout}
\LWR@loadafter{letterspace}
\LWR@loadafter{lettrine}
\LWR@loadafter{lips}
\LWR@loadafter{listings}
\LWR@loadafter{longtable}
\LWR@loadafter{lscape}
\LWR@loadafter{ltcaption}
\LWR@loadafter{marginfix}
\LWR@loadafter{marginnote}
\LWR@loadafter{mcaption}
\LWR@loadafter{mdframed}
\LWR@loadafter{microtype}
\LWR@loadafter{mparhack}
%\LWR@loadafter{multicol}% loaded by ltxdoc
\LWR@loadafter{multirow}
\LWR@loadafter{nameref}
\LWR@loadafter{needspace}
\LWR@loadafter{newtxmath}
\LWR@loadafter{nextpage}
\LWR@loadafter{nowidow}
\LWR@loadafter{ntheorem}
\LWR@loadafter{pagenote}
\LWR@loadafter{parskip}
\LWR@loadafter{placeins}
\LWR@loadafter{ragged2e}
\LWR@loadafter{rotating}
\LWR@loadafter{setspace}
\LWR@loadafter{showidx}
\LWR@loadafter{showkeys}
\LWR@loadafter{sidecap}
\LWR@loadafter{sidenotes}
\LWR@loadafter{soul}
\LWR@loadafter{subfig}
\LWR@loadafter{tabularx}
\LWR@loadafter{textpos}
\LWR@loadafter{theorem}
\LWR@loadafter{threeparttable}
\LWR@loadafter{tikz}
\LWR@loadafter{titleps}
\LWR@loadafter{titlesec}
\LWR@loadafter{titletoc}
\LWR@loadafter{tocloft}
\LWR@loadafter{trivfloat}
\LWR@loadafter{ulem}
\LWR@loadafter{varioref}
\LWR@loadafter{verse}
\LWR@loadafter{wallpaper}
\LWR@loadafter{wrapfig}
\LWR@loadafter{xcolor}
\LWR@loadafter{xfrac}
%    \end{macrocode}





% \section{Required packages}
% \label{sec:requiredpackages}
% \index{packages>required}
% \changes{v0.16}{2016/04/08}{Lwarp no longer selects fonts.}

% These packages are automatically loaded by \pkg{lwarp} when generating
% \acro{HTML} output.  Some of them are also automatically loaded when
% generating print output, but some are not.
%
% In the document preamble, create a \env{warpprint} environment, and place
% inside it any of the following packages which are required and which
% are labeled as ``Print: OK to Load in a \env{warpprint} environment''.
% Those packages which are labeled as ``Print: Pre-Loaded''
% need not be placed into the document preamble.



% \codeall
%    \begin{macrocode}
\begin{warpall}
%    \end{macrocode}


% \changes{v0.16}{2016/04/07}{Added XeLaTeX, LuaLaTeX support.}
% See: \url{http://tex.stackexchange.com/a/47579}.

% Detects \XeTeX{} and \LuaLaTeX:
% \index{XeLaTeX>detection}\index{LuaLaTeX>detection}
%    \begin{macrocode}
\RequirePackage{iftex}
\newif\ifxetexorluatex
\ifXeTeX
    \xetexorluatextrue
\else
    \ifLuaTeX
        \xetexorluatextrue
    \else
        \xetexorluatexfalse
    \fi
\fi
%    \end{macrocode}

%    \begin{macrocode}
\end{warpall}
%    \end{macrocode}

% \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 % \index{font>during conversion}
% ^^A % For \XeLaTeX{} and \LuaLaTeX, uses DejaVu Serif for enhanced Cyrillic and Greek coverage.
% ^^A % \index{Unicode>XeLaTeX \& LuaLaTeX}
%    \begin{macrocode}
\ifxetexorluatex
% ^^A     \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 \acro{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 |pdflatex|, use \pkg{fontenc} and \pkg{lmodern}:
% ^^A % \marginpar{\textcolor{blue}{|pdflatex| only:}}
% ^^A % \index{Unicode>pdfLaTeX}
% ^^A % \index{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 % |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
% \index{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}% ligatures
% ^^A \newunicodechar{ﬁ}{fi}
% ^^A \newunicodechar{ﬂ}{fl}
% ^^A \newunicodechar{ﬃ}{ffi}
% ^^A \newunicodechar{ﬄ}{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 Will also use a scriptsize font.
% \item Also uses extra space at the margin to avoid \acro{HTML} tag overflow off the page.
% \item Will also force a new page before environments.
% \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.}
%
% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
\RequirePackage[paperheight=190in,paperwidth=20in,%
left=2in,right=12in,%
top=1in,bottom=1in,%
]{geometry}
\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}

%    \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.
%    \begin{macrocode}
\RequirePackage{everyhook}
\end{warpHTML}
%    \end{macrocode}


% \codeall
%    \begin{macrocode}
\begin{warpall}
%    \end{macrocode}

% \DescribePackage{fancyvrb}
%
% Used for Verbatim, verse.
%    \begin{macrocode}
\RequirePackage{fancyvrb}
%    \end{macrocode}



%    \begin{macrocode}
\end{warpall}
%    \end{macrocode}


% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}


% \DescribePackage{xifthen}
%    \begin{macrocode}
\RequirePackage{xifthen}
%    \end{macrocode}


% \DescribePackage{xstring}
%    \begin{macrocode}
\RequirePackage{xstring}
%    \end{macrocode}


% \DescribePackage{makeidx}
%    \begin{macrocode}
\RequirePackage{makeidx}
\makeindex
%    \end{macrocode}


% \DescribePackage{calc}
%    \begin{macrocode}
\RequirePackage{calc}
%    \end{macrocode}


% \DescribePackage{refcount}
%    \begin{macrocode}
\RequirePackage{refcount}
%    \end{macrocode}


% \DescribePackage{newfloat}
%    \begin{macrocode}
\RequirePackage{newfloat}
%    \end{macrocode}

% \DescribePackage{caption}
%    \begin{macrocode}
\RequirePackage{caption}
%    \end{macrocode}

% \changes{v0.24}{2017/03/06}{No longer preloads \pkg{subcaption};
%	conflicted with \pkg{subfig}.}


% \DescribePackage{enumitem}
%
% \pkg{enumitem} is patched to support |\newlist| with \acro{HTML}.
%    \begin{macrocode}
\RequirePackage{enumitem}
\setlist[itemize]{leftmargin=0em}
\setlist[enumerate]{leftmargin=0em}
\setlist[description]{leftmargin=0em}
%    \end{macrocode}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}


% \codeall
%    \begin{macrocode}
\begin{warpall}
%    \end{macrocode}

% \DescribePackage{titling}
%
% Used for |\maketitle| and the title page.  See \cref{sec:titles}.
%    \begin{macrocode}
\RequirePackage{titling}
%    \end{macrocode}

%    \begin{macrocode}
\end{warpall}
%    \end{macrocode}


% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}


% \DescribePackage{zref}
%
% Used for cross-references.
%    \begin{macrocode}
\RequirePackage{zref}
%    \end{macrocode}


% \DescribePackage{amsmath}
% \changes{v0.16}{2016/04/09}{Fix: amsmath options clash}
%
% Equation numbers are placed to the left for \acro{HTML}.
%
% \pkg{newtxmath} automatically loads \pkg{amsmath},
% so the options |leqno| and |fleqn| are passed beforehand to be
% picked up both here and by \pkg{newtxmath} if it is used.
% \changes{v0.16}{2016/04/11}{Fix: newtxmath compatibility.}
%
%    \begin{macrocode}
\PassOptionsToPackage{leqno,fleqn}{amsmath}
\RequirePackage{amsmath}
%    \end{macrocode}


% \DescribePackage{environ}
%
% Used to encapsulate math environments for re-use in \acro{HTML} ALT text.
%
%    \begin{macrocode}
\RequirePackage{environ}
%    \end{macrocode}







% \DescribePackage{titleps}
% \changes{v0.19}{2016/05/27}{titleps: null \cs{pagestyle} and \cs{thispagestyle} for HTML.}
%
% Used to place an \acro{HTML} comment into the footer of a page below the footnotes.
% This comment is used for |lateximage| environments, including math.
%
% The |nopatches| option prevents titleps from trying to patch sectioning commands.
%
% \cs{pagestyle} and \cs{thispagestyle} are nullified for \acro{HTML} output.
%
%    \begin{macrocode}
\RequirePackage[nopatches]{titleps}
%    \end{macrocode}
%
% \begin{macro}{\pagestyle} \marg{style}
%    \begin{macrocode}
\let\LWR@origpagestyle\pagestyle
\renewcommand*{\pagestyle}[1]{}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\thispagestyle} \marg{style}
%    \begin{macrocode}
\let\LWR@origthispagestyle\thispagestyle
\renewcommand*{\thispagestyle}[1]{}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\pagenumbering} \marg{commands}
%    \begin{macrocode}
\let\LWR@origpagenumbering\pagenumbering
\renewcommand*{\pagenumbering}[1]{}
%    \end{macrocode}
% \end{macro}
%


% \DescribePackage{xfrac}
%
% Patched for \acro{HTML} use.
% See \cref{sec:xfrac}.

%    \begin{macrocode}
\RequirePackage{xfrac}
%    \end{macrocode}

%
% Used to convert lengths for image width/height options.
%
%    \begin{macrocode}
\RequirePackage{printlen}
%    \end{macrocode}








%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}





% \section{Loading Packages}
%
%
% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}

% Remember the original \cs{RequirePackage}:
%    \begin{macrocode}
\let\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@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}
% 
% \begin{macro}{\LWR@lookforpackagename} \marg{index}
% If this is a package name, re-direct it to the \pkg{lwarp} version
% by renaming it |lwarp-| followed by the original name.
%    \begin{macrocode}
\newcommand*{\LWR@lookforpackagename}[1]{
%    \end{macrocode}
% Find the n'th package name from the list:
%    \begin{macrocode}
\LWR@findword{\LWR@requirepackagenames}{#1}[\LWR@strresult]
%    \end{macrocode}
% See if the package name was found:
%    \begin{macrocode}
\IfStrEq{\LWR@strresult}{}
{}% no filename
{% yes filename
%    \end{macrocode}
% If found, and if an \pkg{lwarp}-equivalent name exists, use |lwarp-|* instead.
%    \begin{macrocode}
\IfFileExists{lwarp-\LWR@strresult.sty}
{% latex_html_ file found
		\StrSubstitute
			{\LWR@requirepackagenames}
			{\LWR@strresult}
			{lwarp-\LWR@strresult}[\LWR@requirepackagenames]
}
{}% no latex_html_* 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.
%
%    \begin{macrocode}
\RenewDocumentCommand{\RequirePackage}{o m o}{%
%    \end{macrocode}
% Redirect up to nine names:
%    \begin{macrocode}
\renewcommand*{\LWR@requirepackagenames}{#2}
\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}
%    \end{macrocode}
% \cs{RequirePackage} depending on the options and version:
%    \begin{macrocode}
\IfValueTF{#1}
{% options given
	\IfValueTF{#3}% version given?
	{\LWR@origRequirePackage[#1]{\LWR@requirepackagenames}[#3]}
	{\LWR@origRequirePackage[#1]{\LWR@requirepackagenames}}
}
{% no options given
	\IfValueTF{#3}% version given?
	{\LWR@origRequirePackage{\LWR@requirepackagenames}[#3]}
	{\LWR@origRequirePackage{\LWR@requirepackagenames}}
}
}
\let\usepackage\RequirePackage
%    \end{macrocode}
% \end{macro}




% \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, 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}
% \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, discarding options,}%
\IfValueTF{#2}
{\ProvidesPackage{lwarp-#1}[#2]}
{\ProvidesPackage{lwarp-#1}}
\DeclareOption*{}
\ProcessOptions\relax
}
%    \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 \acro{TOC} in
% the side\acro{TOC} navigation pane.
%    \begin{macrocode}
\newcommand*{\LWR@copyfile}[2]{%
\newwrite\copyfile  % open the file to write to
\immediate\openout\copyfile=#2
\newread\file      % open the file to read from
\openin\file=#1
\begingroup\endlinechar=-1
\makeatletter
\loop\unless\ifeof\file
  \read\file to\fileline  % Read one line and store it into \fileline
%   \fileline\par                   % print the content into the pdf
% print the content:
  \immediate\write\copyfile{\unexpanded\expandafter{\fileline}}%
\repeat
\closeout\copyfile
\endgroup
}
%    \end{macrocode}
% \end{macro}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}


% \section{Debugging messages}

% \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}%
% \PackageInfo{lwarp}{#1 : }%
}%
{}%
}
%    \end{macrocode}
% \end{macro}



% \section{Remembering original formatting macros}

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}


% Remember original definitions of formatting commands.
% Will be changed to \acro{HTML} commands for most uses.
% Will be temporarily restored to original meaning inside any lateximage environment.
% Also nullify unused commands.
%    \begin{macrocode}
\let\LWR@origtextit\textit
\let\LWR@origtextbf\textbf
\let\LWR@origtexttt\texttt
\let\LWR@origtextsc\textsc
\let\LWR@origtextsf\textsf
\let\LWR@origtextrm\textrm
\let\LWR@origbfseries\bfseries
\let\LWR@origrmfamily\rmfamily
\let\LWR@origttfamily\ttfamily
\let\LWR@orignormalfont\normalfont

\let\LWR@origraggedright\raggedright
\let\LWR@origonecolumn\onecolumn

\let\LWR@origtextsuperscript\textsuperscript
\let\LWR@origtextsubscript\textsubscript

\let\LWR@origscriptsize\scriptsize

\let\LWR@orignewpage\newpage

\let\LWR@origminipage\minipage
\let\LWR@origendminipage\endminipage

\let\LWR@orignewline\newline

\let\LWR@origitem\item

\let\LWR@origpar\par


\let\LWR@origfootnote\footnote
\let\LWR@orig@mpfootnotetext\@mpfootnotetext

\let\LWR@origclearpage\clearpage
\let\clearpage\relax
\let\cleardoublepage\relax
%    \end{macrocode}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}



% \section{Operating-System portability}
% \label{sec:OSportability}
% \changes{v0.11}{2016/03/11}{Added section: Operating-System portability.}
%
% \osportabilityusage
%
% \codeall
%    \begin{macrocode}
\begin{warpall}
%    \end{macrocode}
%
%
% \subsection{Common portability code}
%
% \DescribeBoolean{usingOSwindows}Set if \cs{warpOSwindows}.
%    \begin{macrocode}
\newbool{usingOSwindows}
\boolfalse{usingOSwindows}
%    \end{macrocode}

%
% \subsection{Unix, Linux, and Mac\,OS}

% \begin{macro}{\OSPathSymbol}
% Symbol used to separate directories in a path.
%    \begin{macrocode}
\newcommand*{\OSPathSymbol}{/}
%    \end{macrocode}
% \end{macro}





% \subsection{MS-Windows}

% For MS-Windows:
%
% \begin{macro}{\warpOSwindows}
% Set defaults for the MS-Windows operating system.
% \pkg{lwarp} attempts to auto-detect the operatings system,
% so \cs{warpOSwindows} may not be necessary.
%
% \changes{v0.20}{2016/12/19}{Auto-detects operating system.}
%
%    \begin{macrocode}
\newcommand*{\warpOSwindows}
{
\booltrue{usingOSwindows}
\renewcommand*{\OSPathSymbol}{\@backslashchar}
}
%    \end{macrocode}
% Test for windows during compile.  The user may also specify
% \cs{warpOSwindows} later in case this test fails.
%    \begin{macrocode}
\ifwindows
\warpOSwindows
\fi
%    \end{macrocode}
% \end{macro}


%    \begin{macrocode}
\end{warpall}
%    \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 |\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|:
%    \begin{macrocode}
\newcommand*{\LWR@depthfinished}{-4}
\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 |\itemize|, |\enumerate|, |\description|:
%    \begin{macrocode}
\newcommand*{\LWR@depthlist}{6}
%    \end{macrocode}
% used by |\item|:
%    \begin{macrocode}
\newcommand*{\LWR@depthlistitem}{7}
%    \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 |\pushclose| and |\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:]
% \begin{Verbatim}[gobble=2,obeytabs,tabsize=4]
% \begin{itemize} 
%    \item{A}
%    \begin{description}
%       \item{B}
%    \end{description}
% \end{itemize}
% \end{Verbatim}
% \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}{\pushclose} \marg{action} \marg{depth}

% Pushes one return action and its LaTeX depth onto the stacks.
%    \begin{macrocode}
\NewDocumentCommand{\pushclose}{m m}
{
\let\LWR@closetwelve\LWR@closeeleven
\let\LWR@closeeleven\LWR@closeten
\let\LWR@closeten\LWR@closenine
\let\LWR@closenine\LWR@closeeight
\let\LWR@closeeight\LWR@closeseven
\let\LWR@closeseven\LWR@closesix
\let\LWR@closesix\LWR@closefive
\let\LWR@closefive\LWR@closefour
\let\LWR@closefour\LWR@closethree
\let\LWR@closethree\LWR@closetwo
\let\LWR@closetwo\LWR@closeone
\let\LWR@closeone#1
\let\LWR@closedepthtwelve\LWR@closedeptheleven
\let\LWR@closedepthelevel\LWR@closedepthten
\let\LWR@closedepthten\LWR@closedepthnine
\let\LWR@closedepthnine\LWR@closedeptheight
\let\LWR@closedeptheight\LWR@closedepthseven
\let\LWR@closedepthseven\LWR@closedepthsix
\let\LWR@closedepthsix\LWR@closedepthfive
\let\LWR@closedepthfive\LWR@closedepthfour
\let\LWR@closedepthfour\LWR@closedepththree
\let\LWR@closedepththree\LWR@closedepthtwo
\let\LWR@closedepthtwo\LWR@closedepthone
\let\LWR@closedepthone#2
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\popclose}

% Pops one action and its depth off the stacks.
%    \begin{macrocode}
\newcommand*{\popclose}
{
\let\LWR@closeone\LWR@closetwo
\let\LWR@closetwo\LWR@closethree
\let\LWR@closethree\LWR@closefour
\let\LWR@closefour\LWR@closefive
\let\LWR@closefive\LWR@closesix
\let\LWR@closesix\LWR@closeseven
\let\LWR@closeseven\LWR@closeeight
\let\LWR@closeeight\LWR@closenine
\let\LWR@closenine\LWR@closeten
\let\LWR@closeten\LWR@closeeleven
\let\LWR@closeeleven\LWR@closetwelve
\let\LWR@closedepthone\LWR@closedepthtwo
\let\LWR@closedepthtwo\LWR@closedepththree
\let\LWR@closedepththree\LWR@closedepthfour
\let\LWR@closedepthfour\LWR@closedepthfive
\let\LWR@closedepthfive\LWR@closedepthsix
\let\LWR@closedepthsix\LWR@closedepthseven
\let\LWR@closedepthseven\LWR@closedeptheight
\let\LWR@closedeptheight\LWR@closedepthnine
\let\LWR@closedepthnine\LWR@closedepthten
\let\LWR@closedepthten\LWR@closedeptheleven
\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 |\relax| instead of empty.
%
% To assign an empty value: \\
% \hspace*{2em}|\LWR@setexparray{name}{index}{\relax}|
%
% \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}
%    \begin{macrocode}
\NewDocumentCommand{\LWR@setexparray}{m m m}{%
\expandafter\edef\csname #1#2\endcsname{\expandonce#3}%
}
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{\LWR@getexparray} \marg{name} \marg{index}
%    \begin{macrocode}
\newcommand*{\LWR@getexparray}[2]{\csuse{#1#2}}
%    \end{macrocode}
% \end{macro}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}



% \section{HTML entities}

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}

% \acro{HTML} entites and \acro{HTML} Unicode entities:
%    \begin{macrocode}
\let\LWR@origampersand\&
%    \end{macrocode}
% \begin{macro}{\HTMLentity} \marg{entitytag}
%    \begin{macrocode}
\newcommand*{\HTMLentity}[1]{\LWR@origampersand#1;}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\HTMLunicode} \marg{hex\_unicode}
%    \begin{macrocode}
\newcommand*{\HTMLunicode}[1]{\HTMLentity{\#x#1}}
%    \end{macrocode}
% \end{macro}

% \DescribeMacro{\&}
%    \begin{macrocode}
\renewcommand*{\&}{\HTMLentity{amp}}
%    \end{macrocode}

% \begin{macro}{\textless}
% \begin{macro}{\textgreater}
%    \begin{macrocode}
\let\LWR@origtextless\textless
\renewcommand*{\textless}{\HTMLentity{lt}}

\let\LWR@origtextgreater\textgreater
\renewcommand*{\textgreater}{\HTMLentity{gt}}
%    \end{macrocode}
% \end{macro}
% \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 \acro{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 \acro{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 \acro{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 \acro{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.}
%
% Prints the filename for a given section: |\HTMLFileName{}filenumber/name.html|
%    \begin{macrocode}
\newcommand*{\LWR@htmlsectionfilename}[1]{%
\LWR@traceinfo{LWR@htmlsectionfilename A}%
%    \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}%
\edef\LWR@tempone{#1}%
\LWR@traceinfo{about to compare with ??}%
\ifthenelse{\equal{\LWR@tempone}{??}}%
{%
\LWR@traceinfo{found ??}%
}{%
\LWR@traceinfo{not found ??}%
}%
\LWR@traceinfo{about to compare with zero or empty}%
\ifthenelse{%
\equal{\LWR@tempone}{0}%
\OR \equal{\LWR@tempone}{}%
\OR \equal{\LWR@tempone}{??}%
}%
{%
\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@tempone}%
\ifthenelse{%
\equal{\HTMLFileName}{} \AND \equal{\LWR@tempone}{Index} \OR \equal{\LWR@tempone}{index}%
}%
{%
\LWR@traceinfo{prefixing the index name with an underscore.}%
\_#1.html}%
%    \end{macrocode}
% Otherwise, create a filename with the chosen prefix:
%    \begin{macrocode}
{\HTMLFileName#1.html}%
}%
\LWR@traceinfo{LWR@htmlsectionfilename Z}%
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\LWR@htmlrefsectionfilename} \marg{label}
%
% Prints the filename for the given label
%    \begin{macrocode}
\newcommand*{\LWR@htmlrefsectionfilename}[1]{%
\LWR@traceinfo{LWR@htmlrefsectionfilename A: !#1!}%
\LWR@htmlsectionfilename{\LWR@htmlfileref{#1}}%
\LWR@traceinfo{LWR@htmlrefsectionfilename B}%
}
%    \end{macrocode}
% \end{macro}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}



% \section{Homepage link}

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}


% \begin{macro}{\LinkHome}
% |\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}%
{Home}{linkhome}%
}
%    \end{macrocode}
% \end{macro}

% \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 sidetoc.
%    \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 sidetoc.
%    \begin{macrocode}
\newcommand*{\LWR@botnavigation}{
\LWR@htmlelementclassline{nav}{botnavigation}{\LinkHome}
}
%    \end{macrocode}
% \end{macro}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}



% \section{\textbackslash{}PrintStack diagnostic tool}

% Diagnostics tool:
% Prints the LaTeX nesting depth values for the stack levels.
% Must have |\LWR@startpars| active while printing the stack, so |\PrintStack| may
% \watchout
% be called from anywhere in the normal text flow.

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}

% \begin{macro}{\PrintStack} Prints the closedepth stack.
%    \begin{macrocode}
\newcommand*{\PrintStack}{
\LWR@startpars
\LWR@closedepthone{} \LWR@closedepthtwo{} \LWR@closedepththree{}
\LWR@closedepthfour{} \LWR@closedepthfive{} \LWR@closedepthsix{}
\LWR@closedepthseven{} \LWR@closedeptheight{} \LWR@closedepthnine{}
\LWR@closedepthten{} \LWR@closedeptheleven{} \LWR@closedepthtwelve{}
}
%    \end{macrocode}
% \end{macro}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}


% \section{Closing stack levels}

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}


% Close one nested level:
%    \begin{macrocode}
\newcommand*{\LWR@closeoneprevious}{%

\LWR@closeone{}

\popclose{}
}
%    \end{macrocode}

% \begin{macro}{\LWR@closeprevious} \marg{depth}
% Close everything up to the given depth:
%    \begin{macrocode}
\newcommand*{\LWR@closeprevious}[1]{
%    \end{macrocode}
% Close any pending paragraph:
%    \begin{macrocode}
\LWR@stoppars
%    \end{macrocode}
% Close anything nested deeper than the desired depth:
%    \begin{macrocode}
\whiledo{\not\(\LWR@closedepthone<#1\)}{\LWR@closeoneprevious}
}
%    \end{macrocode}
% \end{macro}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}





% \section{HTML tags, spans, divs, elements}

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}


% \subsection{Mapping \LaTeX{} Sections to HTML Sections}

%    \begin{macrocode}
\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{HTML tags}

% \begin{macro}{\LWR@htmltagc} \marg{tag}
% Break ligatures and use upright apostrophes in \acro{HTML} tags.
%
%|\protect| is in case the tag appears in TOC, LOF, LOT.
%    \begin{macrocode}

\newcommand*{\LWR@htmltagc}[1]{%
{%
\protect\LWR@origttfamily%
\protect\LWR@origtextless#1\protect\LWR@origtextgreater%
}%
}
%    \end{macrocode}
% \end{macro}
% 


% \begin{environment}{LWR@nestspan} Disable \env{minipage}, \cs{parbox} inside a \tag{span}.
%
% |\begin{LWR@nestspan}| must follow the opening |<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 |/span| or an extra |<p>| may appear.
% \watchout
%
% \changes{v0.20}{2016/12/24}{Fix: Minipages inside a span.}
%
%    \begin{macrocode}
\newenvironment*{LWR@nestspan}
{%
\addtocounter{LWR@spandepth}{1}%
\RenewDocumentEnvironment{minipage}{O{t} o O{t} m}{}{}%
}%
{\addtocounter{LWR@spandepth}{-1}}
%    \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} \marg{class} \oarg{style} \marg{text}
%    \begin{macrocode}
\NewDocumentCommand{\LWR@htmlspanclass}{m o +m}{%
\LWR@ensuredoingapar%
\LWR@subhtmlelementclass{span}{#1}[#2]%
\begin{LWR@nestspan}%
#3%
\LWR@htmltagc{/span}%
\end{LWR@nestspan}%
}
%    \end{macrocode}
% \end{macro}


% \begin{macro}{\LWR@htmltag} \marg{tag}

% print an HTML tag: \textless{}tag\textgreater{}
%    \begin{macrocode}
\newcommand*{\LWR@htmltagb}[1]{%
\LWR@htmltagc{#1}%
\endgroup%
}

\newcommand*{\LWR@htmltag}{%
\begingroup\catcode`\_=12
\LWR@htmltagb%
}
%    \end{macrocode}
% \end{macro}

% \subsection{Block tags and comments}

% In the following, |\origtexttt| breaks ligatures, which may not be used for \acro{HTML} codes:
%
% \begin{macro}{\LWR@htmlopencomment}
% \begin{macro}{\LWR@htmlclosecomment}
%    \begin{macrocode}
\newcommand*{\LWR@htmlopencomment}{%
% \LWR@origtexttt{\LWR@origtextbf{\LWR@origtextless{}!{-}{-}}}%
\begingroup\LWR@origttfamily\LWR@origtextless{}!{-}{-}\endgroup%
}

\newcommand*{\LWR@htmlclosecomment}{%
% \LWR@origtexttt{\LWR@origtextbf{{-}{-}\LWR@origtextgreater{}}}%
\begingroup\LWR@origttfamily{-}{-}\LWR@origtextgreater{}\endgroup%
}
%    \end{macrocode}
% \end{macro}
% \end{macro}

% \begin{macro}{\LWR@htmlcomment} \marg{comment}
%    \begin{macrocode}
\newcommand{\LWR@htmlcomment}[1]{%
\LWR@htmlopencomment{}%
\LWR@origtextrm{#1}%
\LWR@htmlclosecomment{}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\LWR@htmlblockcomment} \marg{comment}
%    \begin{macrocode}
\newcommand{\LWR@htmlblockcommentb}[1]
{\LWR@stoppars\LWR@htmlcomment{#1}\LWR@startpars\endgroup}

\newcommand{\LWR@htmlblockcomment}
{%
\begingroup\catcode`\_=12%
\LWR@htmlblockcommentb%
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\LWR@htmlblocktag} \marg{tag}  print a stand-alone \acro{HTML} tag
%    \begin{macrocode}
\newcommand*{\LWR@htmlblocktag}[1]{%
\LWR@stoppars%
\LWR@htmltag{#1}%
\LWR@startpars%
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\LWR@htmlblocktagcomment} \marg{tag} \marg{HTML comment}
%    \begin{macrocode}
\NewDocumentCommand{\LWR@htmlblocktagcomment}{m +m}{%
\LWR@stoppars%
\LWR@htmltag{#1}\LWR@htmlcomment{#2}\LWR@orignewline%
\LWR@startpars%
}
%    \end{macrocode}
% \end{macro}


% \subsection{Div class and element class}


% \begin{macro}{\LWR@subhtmlelementclass} \marg{element} \marg{class} \oarg{style}
%
% Factored and reused in several places.
%
% \changes{v0.20}{2017/01/17}{Factored code.}
%
%    \begin{macrocode}
\NewDocumentCommand{\LWR@subhtmlelementclass}{m m o}{%
\IfValueTF{#3}%
{% option
\ifthenelse{\equal{#3}{}}%
{\LWR@htmltag{#1 class="#2"}}% empty option
{\LWR@htmltag{#1 class="#2" style="#3"}}% non-empty option
}% option
{\LWR@htmltag{#1 class="#2"}}% no option
}
%    \end{macrocode}
% \end{macro}


% \begin{macro}{\LWR@htmlelementclass} \marg{element} \marg{class} \oarg{style}
%
% \changes{v0.20}{2017/01/17}{Added optional style.}
%
%    \begin{macrocode}
\NewDocumentCommand{\LWR@htmlelementclass}{m m o}{%
\LWR@stoppars%
\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}%
\LWR@htmlcomment{End of #1 ``#2''}%
\LWR@startpars%
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\LWR@htmldivclass} \marg{class} \oarg{style}
%
% \changes{v0.20}{2017/01/17}{Added optional style.}
%
%    \begin{macrocode}
\NewDocumentCommand{\LWR@htmldivclass}{m o}{%
\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} \marg{class} \oarg{style} \marg{text}
%    \begin{macrocode}
\NewDocumentCommand{\LWR@htmlelementclassline}{m m o +m}{%
\LWR@stoppars
\LWR@subhtmlelementclass{#1}{#2}[#3]%
#4%
\LWR@htmltag{/#1}
\LWR@startpars
}
%    \end{macrocode}
% \end{macro}
% 
% 


% \subsection{HTML5 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 \acro{CSS}.

% For other direct-formatting commands, see \cref{sec:directformatting}.


% \begin{environment}{BlockClass} \marg{class} \oarg{style} \quad
% High-level interface for 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.}
%
% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
\NewDocumentEnvironment{BlockClass}{m o}
{
\LWR@htmldivclass{#1}[#2]
}
{
\LWR@htmldivclassend{#1}
}
\end{warpHTML}
%    \end{macrocode}
% 
% \codeprint
%    \begin{macrocode}
\begin{warpprint}
\NewDocumentEnvironment{BlockClass}{m o}{}{}
\end{warpprint}
%    \end{macrocode}
% \end{environment}
% 
% 
% \begin{macro}{\BlockClassSingle} \marg{class} \marg{text} \quad
% A single-line \tag{div}, without a paragraph tag for the line of text.
% 
% \changes{v0.20}{2017/01/03}{Renamed from "LWR@htmldivclassline".}
%
% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
\newcommand{\BlockClassSingle}[2]{%
\LWR@htmlelementclassline{div}{#1}{#2}%
}
\end{warpHTML}
%    \end{macrocode}
%
% \codeprint
%    \begin{macrocode}
\begin{warpprint}
\newcommand{\BlockClassSingle}[2]{#2}
\end{warpprint}
%    \end{macrocode}
% 
% \end{macro}


% \begin{macro}{\InlineClass} \marg{class} \oarg{style} \marg{text} \quad
% High-level interface for inline span classes.
%
% \changes{v0.20}{2017/01/03}{Renamed from "inlineclass".}
%
% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
\NewDocumentCommand{\InlineClass}{m o +m}{%
\LWR@htmlspanclass{#1}[#2]{#3}%
}
\end{warpHTML}
%    \end{macrocode}
% \codeprint
%    \begin{macrocode}
\begin{warpprint}
\NewDocumentCommand{\InlineClass}{m o +m}{#3}
\end{warpprint}
%    \end{macrocode}
% \end{macro}


% \subsection{Closing HTML tags}

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}

% Sections H1, H2, etc.\ do not need a closing \acro{HTML} tag, but we add a comment for readability:
%    \begin{macrocode}
\newcommand*{\LWR@printclosepart}
    {\LWR@htmlcomment{Closing part}}
\newcommand*{\LWR@printclosechapter}
    {\LWR@htmlcomment{Closing chapter}}
\newcommand*{\LWR@printclosesection}
    {\LWR@htmlcomment{Closing section}}
\newcommand*{\LWR@printclosesubsection}
    {\LWR@htmlcomment{Closing subsection}}
\newcommand*{\LWR@printclosesubsubsection}
    {\LWR@htmlcomment{Closing subsubsection}}
\newcommand*{\LWR@printcloseparagraph}
    {\LWR@htmlcomment{Closing paragraph}}
\newcommand*{\LWR@printclosesubparagraph}
    {\LWR@htmlcomment{Closing subparagraph}}
%    \end{macrocode}

% Lists require closing \acro{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 \acro{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}{\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 \tag{span}.
% If so, do not generate nested paragraph tags.
%    \begin{macrocode}
\ifthenelse{%
\cnttest{\value{LWR@lateximagedepth}}{>}{0} \OR%
\cnttest{\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 \tag{span}.  Do not nest paragraph tags
% inside a \tag{span}.
%    \begin{macrocode}
{}% no nested par tags
%    \end{macrocode}
% Else: No \env{lateximage} or \tag{span} has been started yet,
% so it's OK to generate paragraph tags.
%    \begin{macrocode}
{% yes nest par tags
\LWR@htmltagc{\LWR@tagregularparagraph}%
%    \end{macrocode}
% Manually indent item list labels to avoid left margin intrustion:
%
% \LaTeX{} default list environments use |\@itemdepth| and |\@enumdepth|, but
% \pkg{lwarp} uses the \pkg{enumitem} package, which uses |\@listdepth|.
%
% See if are nested inside an item list:
%    \begin{macrocode}
\ifnumcomp{\@listdepth}{>}{0}%
{%
%    \end{macrocode}
% If so,  leave some horizontal room in the \LaTeX{} \acro{PDF} output for list labels:
%    \begin{macrocode}
\LWR@orighspace{1in}%
}{}%
%    \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}
% \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.}
%    \begin{macrocode}
\newcommand*{\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 \tag{span}:
%    \begin{macrocode}
\ifthenelse{%
\cnttest{\value{LWR@lateximagedepth}}{>}{0} \OR%
\cnttest{\value{LWR@spandepth}}{>}{0}%
}%
%    \end{macrocode}
% Do nothing if already started a \env{lateximage} or a \tag{span},
% but add a parbreak if in a span but not a \env{lateximage}.
%    \begin{macrocode}
{% no nested par tags
\ifthenelse{%
\cnttest{\value{LWR@spandepth}}{>}{0}%
\AND%
\cnttest{\value{LWR@lateximagedepth}}{=}{0}%
}%
{%
\ifbool{LWR@intabularmetadata}{}{\unskip\LWR@htmltagc{br /}}%
}%
{}%
}% no nested par tags
%    \end{macrocode}
% If have not already started a \env{lateximage} or a \tag{span}:
%    \begin{macrocode}
{% yes nest par tags
%    \end{macrocode}
% Print a closing tag:
%    \begin{macrocode}
\unskip%
\LWR@htmltagc{/\LWR@tagregularparagraph}%
%    \end{macrocode}
% No longer doing a paragraph:
%    \begin{macrocode}
\global\boolfalse{LWR@doingapar}%
% Disable the special \env{minipage} \& \cs{hspace} interaction
% until a new minipage is found:
%    \begin{macrocode}
\global\boolfalse{LWR@minipagethispar}%
}% end of yes nest par tags
}% end of handling pars
%    \end{macrocode}
% Add a parbreak if in a span,
% but not in a table outside a row:
%    \begin{macrocode}
{% not handling pars
\ifthenelse{\cnttest{\value{LWR@spandepth}}{>}{0}}%
{\ifbool{LWR@intabularmetadata}{}{\unskip\LWR@htmltagc{br /}}}%
{}%
}% not handling pars
%    \end{macrocode}
% Finish with regular paragraph processing
%    \begin{macrocode}
\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 \acro{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 |\par|.

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}


% \begin{macro}{\LWR@startpars}
% Begin handling \acro{HTML} paragraphs.
% This allows an \acro{HTML} paragraph to start, but one has not yet begun.
%    \begin{macrocode}
\newcommand*{\LWR@startpars}%
{%
%    \end{macrocode}
% See if currently handling \acro{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:
%    \begin{macrocode}
\PushPreHook{par}{\LWR@openparagraph}%
%    \end{macrocode}
%	At the end of each paragraph, generate closing tag and 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}%
}
%    \end{macrocode}
% \end{macro}


% \begin{macro}{\LWR@stoppars}
% Stop handling \acro{HTML} paragraphs.
% Any currently open \acro{HTML} paragraph is closed, and no more will be opened.
%    \begin{macrocode}
\newcommand*{\LWR@stoppars}%
{%
%    \end{macrocode}
% See if currently handling \acro{HTML} paragraphs:
%    \begin{macrocode}
\ifbool{LWR@doingapar}%
%    \end{macrocode}
% if currently in an \acro{HTML} paragraph:
%    \begin{macrocode}
{%
%    \end{macrocode}
% Print a closing tag:
%    \begin{macrocode}
\unskip%
\LWR@htmltagc{/\LWR@tagregularparagraph}%
%    \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:
%    \begin{macrocode}
\global\boolfalse{LWR@minipagethispar}

}% an intentionally blank line
%    \end{macrocode}
% If was not in an \acro{HTML} paragraph:
%    \begin{macrocode}
{}%
%    \end{macrocode}
% See if currently allowing \acro{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 |<p>| tag to undo:
%    \begin{macrocode}
\global\boolfalse{LWR@doingapar}%
}
%    \end{macrocode}
% \end{macro}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}



% \section{Page headers and footers}

% \codeall
%    \begin{macrocode}
\begin{warpall}
%    \end{macrocode}

% In the following, catcode is manually changes 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}{}

\newcommand{\LWR@setfirstpagetopb}[1]{%
\renewcommand{\LWR@firstpagetop}{#1}
\catcode`\_=8
}
%    \end{macrocode}
% \begin{macro}{\SetFirstPageTop} \marg{text and logos}
%    \begin{macrocode}
\newcommand{\SetFirstPageTop}{%
\catcode`\_=12
\LWR@setfirstpagetopb
}
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
\newcommand{\LWR@setpagetopb}[1]{%
\renewcommand{\LWR@pagetop}{#1}
\catcode`\_=8
}
%    \end{macrocode}
% \begin{macro}{\SetPageTop} \marg{text and logos}
%    \begin{macrocode}
\newcommand{\SetPageTop}{%
\catcode`\_=12
\LWR@setpagetopb
}
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
\newcommand{\LWR@setpagebottomb}[1]{%
\renewcommand{\LWR@pagebottom}{#1}
\catcode`\_=8
}
%    \end{macrocode}
% \begin{macro}{\SetPageBottom} \marg{text and logos}
%    \begin{macrocode}
\newcommand{\SetPageBottom}{%
\catcode`\_=12
\LWR@setpagebottomb
}
%    \end{macrocode}
% \end{macro}

%    \begin{macrocode}
\end{warpall}
%    \end{macrocode}



% \section{CSS}

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}

% \begin{macro}{\LWR@currentcss} The \acro{CSS} filename to use.
% This may be changed mid-document using \cs{NewCSS},
% allowing different \acro{CSS} files to be used
% for different sections of the document.

%    \begin{macrocode}
\newcommand*{\LWR@currentcss}{lwarp.css}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\NewCSS} \marg{new-css-filename.css}
%
% Assigns the \acro{CSS} file to be used by the following \acro{HTML} pages.
%    \begin{macrocode}
\newcommand*{\LWR@newcssb}[1]{%
\renewcommand*{\LWR@currentcss}{#1}
\catcode`\_=8
}

\newcommand*{\NewCSS}{
\catcode`\_=12
\LWR@newcssb
}
\end{warpHTML}
%    \end{macrocode}
%
% \codeprint
%    \begin{macrocode}
\begin{warpprint}
\newcommand*{\NewCSS}[1]{}
\end{warpprint}
%    \end{macrocode}
% \end{macro}



% \section{HTML meta description}
% \changes{v0.20}{2016/06/27}{Added \cs{NewHTMLdescription}.}

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}

% \begin{macro}{\LWR@currentHTMLdescription} The \acro{HTML} meta description to use.
%
% This is placed inside an \acro{HTML} meta tag at the start of each file.
% This may be changed mid-document using \cs{NewHTMLdescription},
% allowing different \acro{HTML} descriptions to be used
% for different sections of the document.
%
% Do not use double quotes, and do not exceed 150 characters.

%    \begin{macrocode}
\newcommand{\LWR@currentHTMLdescription}{}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\NewHTMLdescription} \marg{New \acro{HTML} meta description.}
%
% Assigns the \acro{HTML} file's description meta tag
% \index{HTML>meta tag>description}
% \index{description>HTML meta tag}
% \index{meta tag, HTML>description}
%    \begin{macrocode}
\newcommand{\NewHTMLdescription}[1]{%
\renewcommand{\LWR@currentHTMLdescription}{#1}
}

\end{warpHTML}
%    \end{macrocode}
%
% \codeprint
%    \begin{macrocode}
\begin{warpprint}
\newcommand{\NewHTMLdescription}[1]{}
\end{warpprint}
%    \end{macrocode}
% \end{macro}



% \section{Footnotes}
% \label{sec:footnotes}
%
% \index{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 \acro{HTML} documents, footnotes are placed at the
% bottom of the web page using the \LaTeX\ box \cs{LWR@footnotes}.
% Using this instead of the original \cs{footins} box
% avoids having footnotes be printed by the output routine,
% since footnotes should be printed per \acro{HTML} page
% instead of per \acro{PDF} page.
%
% See \cref{sec:footnotesregular} for the implementation.
%
% \subsection{Minipage footnotes}
% See \cref{sec:footnotesminipage} for minipage footnotes.
%
% \subsection{Titlepage thanks}
% See \cref{sec:titlehtml} for titlepage footnotes.
%
% \subsection{Regular page footnote implementation}
% \label{sec:footnotesregular}
%
% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}


% Patch \LaTeX\ footnotes to use a new \cs{box} for \pkg{lwarp} footnotes.
%    \begin{macrocode}
\newbox\LWR@footnotes
%    \end{macrocode}
%
% Much of the following has unneeded print-mode formatting removed.
%    \begin{macrocode}
\long\def\@makefntext#1{\textsuperscript{\@thefnmark} #1}

\def\@makefnmark{\hbox{\textsuperscript{\@thefnmark}}}
%    \end{macrocode}
%
% Footnotes may be in regular text, in which case paragraphs are tagged,
% or in a table data cell, in which case paragraph tags must be added manually.
%
% \changes{v0.27}{2017/04/04}{Fix for table footnote par tags.}
%
%    \begin{macrocode}
\long\def\@footnotetext#1{%
\global\setbox\LWR@footnotes=\vbox{\unvbox\LWR@footnotes%
\protected@edef\@currentlabel{%
\csname p@footnote\endcsname\@thefnmark%
}% @currentlabel
\color@begingroup%
\ifbool{LWR@doingstartpars}{}{\LWR@htmltagc{\LWR@tagregularparagraph}}%
\@makefntext{#1}%
\ifbool{LWR@doingstartpars}{\par}{\LWR@htmltagc{/\LWR@tagregularparagraph}}%
\color@endgroup%
}% vbox
}%

\long\def\@mpfootnotetext#1{%
\global\setbox\@mpfootins\vbox{%
\unvbox\@mpfootins
\reset@font\footnotesize
\hsize\columnwidth
\@parboxrestore
\protected@edef\@currentlabel
{\csname p@mpfootnote\endcsname\@thefnmark}%
\color@begingroup
\@makefntext{%
\ignorespaces#1%
}%
%    \end{macrocode}
%
% Don't add the closing paragraph tag if are inside a \env{lateximage}:
%    \begin{macrocode}
\ifthenelse{\cnttest{\value{LWR@lateximagedepth}}{>}{0}}%
{}%
{\LWR@htmltagc{/\LWR@tagregularparagraph}}%
%    \end{macrocode}
%
%    \begin{macrocode}
\color@endgroup}%
}
%    \end{macrocode}
%
% Enclose the footnotes in a class, print, then clear:
%    \begin{macrocode}
\newcommand*{\LWR@printpendingfootnotes}{%
\ifvoid\LWR@footnotes\else
\begin{BlockClass}{footnotes}
\LWR@origmedskip
\unvbox\LWR@footnotes
\setbox\LWR@footnotes=\vbox{}
\end{BlockClass}
\fi
}
%    \end{macrocode}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}




% \section{Marginpars}
%
% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}

% \begin{macro}{\marginpar} \oarg{left} \marg{right}
%
% \changes{v0.21}{2017/02/11}{Fixed source listing.}
%
%    \begin{macrocode}
\renewcommand{\marginpar}[2][]{%
\LWR@htmlspanclass{marginpar}{#2}%
}
%    \end{macrocode}
% \end{macro}
%

%    \begin{macrocode}
\end{warpHTML}
%    \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 \acro{HTML} page,
%	adds a comment to tell where and how to split the file,
%	then starts a new \acro{HTML} page.
% \end{itemize}


% \codeall
%    \begin{macrocode}
\begin{warpall}
%    \end{macrocode}

% \DescribeCounter{FileDepth} \marg{section depth} determines how deeply
% to break into new \acro{HTML} files, similar to |tocdepth|.
% The default of -5 produces one large \acro{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{macrocode}
\end{warpall}
%    \end{macrocode}


% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}

% \begin{macro}{\LWR@thisfilename}
% The currently-active filename or number.
%    \begin{macrocode}
\newcommand*{\LWR@thisfilename}{}
%    \end{macrocode}
% \end{macro}


% \begin{macro}{\LWR@thisnewfilename}
% The filename being sanitized.
%    \begin{macrocode}
\newcommand*{\LWR@thisnewfilename}{}
%    \end{macrocode}
% \end{macro}


% \begin{macro}{\LWR@filenamenoblanks} \marg{filename}
%
% Convert blanks into dashes, removes short words,
% store result in \\ |\LWR@thisfilename|.
%
% Be sure that this does not result in filename collisions!
% \watchout
% Use the optional TOC caption entry parameter for formatting.
% Remember to |\protect| \LaTeX{} commands which appear in
% section names and TOC captions.
%    \begin{macrocode}
\newcommand*{\LWR@filenamenoblanks}[1]{%
\begingroup
%    \end{macrocode}

% Locally temporarily disable direct-formatting commands,
% not used in filenames:
%    \begin{macrocode}
\renewcommand*{\HTMLunicode}[1]{}
\renewcommand*{\HTMLentity}[1]{##1}
\renewcommand*{\LWR@htmltagc}[1]{}
\DeclareExpandableDocumentCommand{\InlineClass}{m o m}{##3}
%    \end{macrocode}
% Ampersand becomes ``and'', which is a short word and is then removed from the filename.
%    \begin{macrocode}
\renewcommand*{\&}{and}
\renewcommand{\textit}[1]{##1}
\renewcommand{\textsc}[1]{##1}
\renewcommand{\textsl}[1]{##1}
\renewcommand{\textbf}[1]{##1}
\renewcommand{\texttt}[1]{##1}
\renewcommand{\textsf}[1]{##1}
\renewcommand{\textrm}[1]{##1}
\renewcommand{\textsuperscript}[1]{##1}
\renewcommand{\textsubscript}[1]{##1}
%    \end{macrocode}
% Replaces common symbols and short words with hyphens:
%
%    \begin{macrocode}
\edef\LWR@thisnewfilename{#1}
\fullexpandarg
%    \end{macrocode}
% Convert spaces into hyphens:
%    \begin{macrocode}
\StrSubstitute{\LWR@thisnewfilename}{ }{-}[\LWR@thisnewfilename]
%    \end{macrocode}
% Convert punctutation into hyphens:
% ^^A \StrSubstitute{\LWR@thisnewfilename}{é}{e}[\LWR@thisnewfilename]
%    \begin{macrocode}
\StrSubstitute{\LWR@thisnewfilename}{,}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{'}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}%
{\LWR@origampersand}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{+}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{,}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{/}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{:}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{;}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{=}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{?}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{@}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{"}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}%
{\textless}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}%
{\textgreater}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{\#}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{\%}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{\{}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{\}}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{|}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}%
{\textbackslash}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{^}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{~{}}{-}[\LWR@thisnewfilename]
%     "~{}" for babel
\StrSubstitute{\LWR@thisnewfilename}{[}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{]}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{`}{-}[\LWR@thisnewfilename]
%    \end{macrocode}
% Convert short words:
%    \begin{macrocode}
\StrSubstitute{\LWR@thisnewfilename}{-s-}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{-S-}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{-a-}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{-A-}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{-an-}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{-AN-}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{-to-}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{-TO-}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{-by-}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{-BY-}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{-of-}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{-OF-}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{-and-}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{-AND-}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{-for-}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{-FOR-}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{-the-}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{-THE-}{-}[\LWR@thisnewfilename]
%    \end{macrocode}
% Convert multiple hyphens:
%    \begin{macrocode}
\StrSubstitute{\LWR@thisnewfilename}{-----}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{----}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{---}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{--}{-}[\LWR@thisnewfilename]
\StrSubstitute{\LWR@thisnewfilename}{—}{-}[\LWR@thisnewfilename]
%     emdash
\StrSubstitute{\LWR@thisnewfilename}{–}{-}[\LWR@thisnewfilename]
%     endash
\global\let\LWR@thisfilename\LWR@thisnewfilename% return a global result
\endgroup
}
%    \end{macrocode}
% \end{macro}




% \begin{macro}{\LWR@newhtmlfile} \marg{section name}
% \changes{v0.18}{2016/04/23}{Sidetoc after title, improving responsive design.}
% \changes{v0.21}{2017/02/22}{Skip title if not given.}
%
% Finishes the current \acro{HTML} page with footnotes, footer, navigation,
% then starts a new \acro{HTML} page with an \acro{HTML} comment telling where to
% split the page and what the new filename and \acro{CSS} are, then adds
% navigation, side TOC, header, and starts the text body.
%    \begin{macrocode}
\newcommand*{\LWR@newhtmlfile}[1]{
%    \end{macrocode}

% At the bottom of the ending file:

%    \begin{macrocode}
\LWR@htmlelementclassend{section}{textbody}

\LWR@printpendingfootnotes

\LWR@htmlelement{footer}

\LWR@pagebottom

\LWR@htmlelementend{footer}
%    \end{macrocode}

% No bottom navigation if are finishing the home page:
% Presumably has a table-of-contents printed.
%    \begin{macrocode}
\ifnumcomp{\value{LWR@htmlfilenumber}}{>}{0}{\LWR@botnavigation}{}
%    \end{macrocode}

% End of this \acro{HTML} file:
%    \begin{macrocode}
\LWR@stoppars
\LWR@htmltag{/body}\LWR@orignewline
\LWR@htmltag{/html}\LWR@orignewline

\addtocounter{LWR@htmlfilenumber}{1}%
%    \end{macrocode}

% If using a filename, create a version without blanks.
% The filename without blanks will be placed into \cs{LWR@thisfilename}.
% If not using a filename, the file number will be used instead.
% \changes{v0.12}{2016/03/13}{Bugfix: TOC with numbered files.}
%    \begin{macrocode}
\ifbool{FileSectionNames}%
{\LWR@filenamenoblanks{#1}}
{\renewcommand*{\LWR@thisfilename}{\theLWR@htmlfilenumber}}
%    \end{macrocode}

% Include an \acro{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.
%    \begin{macrocode}
\LWR@htmlblockcomment{%
\LWR@origtexttt{|Start file|%
\LWR@htmlsectionfilename{\LWR@thisfilename}|}%
}
%    \end{macrocode}

% At the top of the starting file:
%    \begin{macrocode}
\LWR@stoppars

\LWR@filestart{ — #1}% there is an EMdash in front of the #1

\LWR@topnavigation

\LWR@htmlelement{header}

\LWR@pagetop

\LWR@htmlelementend{header}

\ifcsvoid{thetitle}{}{\LWR@printthetitle}

\LWR@sidetoc

\LWR@htmlelementclass{section}{textbody}

\LWR@stoppars

\setcounter{LWR@latestautopage}{\value{page}}
}
%    \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 \acro{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
% |pdflatex| to generate characters and |pdftotext| to read them.
% If extra symbols appear in the text,
% \watchout
% it may be that |pdflatex| is actually producing a symbol over or under a
% character, resulting in |pdftotext| picking up the accent symbol separately.
%
% \XeLaTeX{} and \LuaLaTeX{} directly support accented section and file names.
% \index{accents}\index{Unicode>file \& section names}\index{UTF-8>file \& section names}
% \index{XeLaTeX>file \& section names}
% \index{LuaLaTeX>file \& section names}
%
%
% \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 \acro{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.
%    \begin{macrocode}
\newcommand*{\LWR@createautosec}[1]{%
\LWR@htmltag{#1 id="autosec-\thepage"{}}%
}
%    \end{macrocode}
% \end{macro}




% \begin{macro}{\LWR@pushoneclose} \marg{depth} \marg{printclose}
% Stacks the new sectioning level's closing tag,
% to be used when this section is closed some time later.
%
% |\LWR@stoppars| must be executed first.
% \watchout
%    \begin{macrocode}
\NewDocumentCommand{\LWR@pushoneclose}{m m}{\pushclose{#2}{#1}}
%    \end{macrocode}
% \end{macro}


% \begin{macro}{\LWR@startnewdepth} \marg{depth} \marg{printclose}
%
% 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.
%
% |\LWR@stoppars| must be executed first.
% \watchout
%    \begin{macrocode}
\NewDocumentCommand{\LWR@startnewdepth}{m 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}{#2}%
}
%    \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 \acro{HTML}
% page after the home page.
%    \begin{macrocode}
\newcounter{LWR@prevFileDepth}
\setcounter{LWR@prevFileDepth}{\LWR@depthsubparagraph}
%    \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.}
%
% The common actions for the high-level sectioning commands.
%    \begin{macrocode}
\DeclareDocumentCommand{\LWR@section}{m m m m}{%
\LWR@traceinfo{LWR@section}%
\LWR@stoppars%
%    \end{macrocode}
% Cancel special \env{minipage} horizontal space interaction:
%    \begin{macrocode}
\global\boolfalse{LWR@minipagethispar}%
%    \end{macrocode}
% Generate a new LaTeX page so that TOC and index page number points to the section:
%    \begin{macrocode}
\LWR@orignewpage%

%    \end{macrocode}
% Start a new \acro{HTML} file if not starred, and is a shallow sectioning depth:
%    \begin{macrocode}
\LWR@traceinfo{LWR@section: testing about to start a new HTML file}%
\IfBooleanTF{#1}{}{% not starred
\ifthenelse{%
\cnttest{\csuse{LWR@depth#4}}{<=}{\value{FileDepth}}%
\AND%
\(%
\NOT\boolean{CombineHigherDepths}\OR%
\cnttest{\csuse{LWR@depth#4}}{<=}{\value{LWR@prevFileDepth}}%
\)%
}%
%    \end{macrocode}
% If so: start a new \acro{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 \acro{HTML} file:
%    \begin{macrocode}
{}% not new file
}% not starred
%    \end{macrocode}
% Remember this section's name for \cs{nameref}:
%    \begin{macrocode}
\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''
%    \begin{macrocode}

\LWR@htmlcomment{Opening #4 ``#3''{}}

%    \end{macrocode}
% For inline sections paragraph and subparagraph, start a new paragraph now:
%    \begin{macrocode}
\ifthenelse{%
\cnttest{\csuse{LWR@depth#4}}{>=}{\LWR@depthparagraph}%
}%
{\LWR@startpars}
{}
%    \end{macrocode}
% Create the opening tag with an autosec:
%    \begin{macrocode}
\LWR@createautosec{\csuse{LWR@tag#4}}%
%    \end{macrocode}
% If not starred, step counter and add to TOC:
%    \begin{macrocode}
\IfBooleanTF{#1}%
{}% starred
{% not starred
%    \end{macrocode}
% Only add a numbered TOC entry if section number is not too deep:
%    \begin{macrocode}
\ifthenelse{%
\cnttest{\csuse{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:
%    \begin{macrocode}
\LWR@traceinfo{LWR@section: about to addcontentsline}%
\addcontentsline{toc}{#4}%
{\protect\LWR@sectionnumber{\csuse{the#4}}%
\IfValueTF{#2}{#2}{#3}}%
\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}{#2}{#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}{#2}{#3}}%
}%
%    \end{macrocode}
% For part, print the section type:
%    \begin{macrocode}
\ifbool{LWR@mainmatter}%
{%
\ifthenelse{%
\(\cnttest{\csuse{LWR@depth#4}}{<=}%
{\value{secnumdepth}}\) \AND
\(\cnttest{\csuse{LWR@depth#4}}{<=}{\LWR@depthpart}\)
}%
{\csuse{#4name}~{}}%
{}%
%    \end{macrocode}
% Print the section number:
%    \begin{macrocode}
\LWR@traceinfo{LWR@section: about to print section number}%
\ifthenelse{%
\cnttest{\csuse{LWR@depth#4}}{<=}{\value{secnumdepth}}%
}%
{\protect\LWR@sectionnumber{\csuse{the#4}}}%
{}%
\LWR@traceinfo{LWR@section: finished print section number}%
}{}%
}% end of not starred
%    \end{macrocode}
% Print the section name:
%    \begin{macrocode}
#3
%    \end{macrocode}
% close the heading tag, such as /H2
%    \begin{macrocode}
\LWR@htmltag{\csuse{LWR@tag#4end}}%
%    \end{macrocode}
% Generate a \LaTeX{} label:
%    \begin{macrocode}
\label{autopage-\thepage}%
%    \end{macrocode}
% Start paragraph handing unless is an inline paragraph or subparagraph:
%    \begin{macrocode}
\ifthenelse{%
\cnttest{\csuse{LWR@depth#4}}{<}{\LWR@depthparagraph}}%
{\LWR@startpars}%
{}%
%    \end{macrocode}
% If not starred, remember the previous depth to
% possibly trigger a new \acro{HTML} page.
%
% A starred section does not trigger a new \acro{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 \acro{HTML} page for the section following it
% while |CombineHigherDepths| was true.
%    \begin{macrocode}
\IfBooleanTF{#1}{}{% not starred
\setcounter{LWR@prevFileDepth}{\csuse{LWR@depth#4}}%
}% not starred
\LWR@traceinfo{LWR@section: done}%
}
%    \end{macrocode}
% \end{macro}



% \subsection{\textbackslash{}section and friends}

% \begin{macro}{\part} * \oarg{TOC name} \marg{name}
%    \begin{macrocode}
\@ifundefined{chapter}
{}
{%
\DeclareDocumentCommand{\part}{s o m}{%
\LWR@stoppars%

\LWR@startnewdepth{\LWR@depthpart}{\LWR@printclosepart}%

\LWR@section{#1}{#2}{#3}{part}%
}
}
%    \end{macrocode}
% \end{macro}


% \begin{macro}{\chapter} * \oarg{TOC name} \marg{name}
%    \begin{macrocode}
\@ifundefined{chapter}
{}
{%
\DeclareDocumentCommand{\chapter}{s o m}{%
\LWR@traceinfo{chapter #3}%
\LWR@stoppars%
\LWR@startnewdepth{\LWR@depthchapter}{\LWR@printclosechapter}%

\LWR@traceinfo{chapter: about to LWR@section}%
\LWR@section{#1}{#2}{#3}{chapter}%
\LWR@traceinfo{chapter: done}%
}
}
%    \end{macrocode}
% \end{macro}


% \begin{macro}{\section} * \oarg{TOC name} \marg{name}
%    \begin{macrocode}
\DeclareDocumentCommand{\section}{s o m}{%
\LWR@stoppars%

\LWR@startnewdepth{\LWR@depthsection}{\LWR@printclosesection}%

\LWR@section{#1}{#2}{#3}{section}%
}
%    \end{macrocode}
% \end{macro}



% \begin{macro}{\subsection} * \oarg{TOC name} \marg{name}
%    \begin{macrocode}
\DeclareDocumentCommand{\subsection}{s o m}{%
\LWR@stoppars%

\LWR@startnewdepth{\LWR@depthsubsection}{\LWR@printclosesubsection}%

\LWR@section{#1}{#2}{#3}{subsection}%
}
%    \end{macrocode}
% \end{macro}



% \begin{macro}{\subsubsection} * \oarg{TOC name} \marg{name}
%    \begin{macrocode}
\DeclareDocumentCommand{\subsubsection}{s o m}{%
\LWR@stoppars%

\LWR@startnewdepth{\LWR@depthsubsubsection}%
{\LWR@printclosesubsubsection}%

\LWR@section{#1}{#2}{#3}{subsubsection}%
}
%    \end{macrocode}
% \end{macro}




% \begin{macro}{\paragraph} * \oarg{TOC name} \marg{name}
%    \begin{macrocode}
\DeclareDocumentCommand{\paragraph}{s o m}{%
\LWR@stoppars%

\LWR@startnewdepth{\LWR@depthparagraph}{\LWR@printcloseparagraph}%

\LWR@section{#1}{#2}{#3}{paragraph}%
}
%    \end{macrocode}
% \end{macro}



% \begin{macro}{\subparagraph} * \oarg{TOC name} \marg{name}
%    \begin{macrocode}
\DeclareDocumentCommand{\subparagraph}{s o m}{%
\LWR@stoppars%

\LWR@startnewdepth{\LWR@depthsubparagraph}{\LWR@printclosesubparagraph}%

\LWR@section{#1}{#2}{#3}{subparagraph}%
}
%    \end{macrocode}
% \end{macro}


%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}





% \section{Starting a new file}
% \label{sec:startingfile}

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}

% \begin{macro}{\MetaLanguage} Default language for the \acro{HTML} |lang| tag.
% \index{language HTML metadata}
%    \begin{macrocode}
\newcommand*{\MetaLanguage}{en-US}
%    \end{macrocode}
% \end{macro}


% \begin{macro}{\LWR@filestart} \marg{title\_suffix}

% Creates the opening \acro{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.}
%
%    \begin{macrocode}
\newcommand*{\LWR@filestart}[1]{
%    \end{macrocode}
% Locally temporarily disable direct-formatting commands:
%    \begin{macrocode}
\begingroup
\renewcommand{\textit}[1]{##1}% not used in filenames
\renewcommand{\textsc}[1]{##1}
\renewcommand{\textsl}[1]{##1}
\renewcommand{\textbf}[1]{##1}
\renewcommand{\texttt}[1]{##1}
\renewcommand{\textsf}[1]{##1}
\renewcommand{\textrm}[1]{##1}
\renewcommand{\textsuperscript}[1]{##1}
\renewcommand{\textsubscript}[1]{##1}
\renewcommand*{\HTMLunicode}[1]{}
\renewcommand*{\HTMLentity}[1]{}
\RenewDocumentCommand{\LWR@htmlspanclass}{m o +m}{##3}
\DeclareExpandableDocumentCommand{\InlineClass}{m o m}{##3}
%    \end{macrocode}
% Create the page's \acro{HTML} header:
%    \begin{macrocode}
\LWR@htmltag{!DOCTYPE html}\LWR@orignewline
%    \end{macrocode}
% The language is user-adjustable:
%    \begin{macrocode}
\LWR@htmltag{html lang="\MetaLanguage"{}}\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="UTF-8" /}\LWR@orignewline
%    \end{macrocode}
% \pkg{lwarp} is the generator:
% \index{HTML>meta tag>generator}
% \index{generator>HTML meta tag}
% \index{meta tag, HTML>generator}
%    \begin{macrocode}
\LWR@htmltag{meta name="generator" content="LaTeX lwarp package" /}%
    \LWR@orignewline
%    \end{macrocode}
% If there is a description, add it now:
%    \begin{macrocode}
\ifdefempty{\LWR@currentHTMLdescription}{}{%
\LWR@htmltag{%
meta name="description" content="\LWR@currentHTMLdescription" /}%
    \LWR@orignewline
}%
%    \end{macrocode}
% Mobile-friendly viewport:
% \index{HTML>meta tag>viewport}
% \index{viewport>HTML meta tag}
% \index{meta tag, HTML>viewport}
%    \begin{macrocode}
\LWR@htmltag{meta name="viewport" %
content="width=device-width, initial-scale=1.0" /}%
    \LWR@orignewline
%    \end{macrocode}
% IE patch:
%    \begin{macrocode}
\LWR@htmltag{!{-}{-}[if lt IE 9]}\LWR@orignewline
\LWR@htmltag{%
script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"{}}%
\LWR@htmltag{/script}\LWR@orignewline
\LWR@htmltag{![endif]{-}{-}}\LWR@orignewline
%    \end{macrocode}
% The page's title:
%    \begin{macrocode}
\ifcsvoid{thetitle}{}{%
\LWR@htmltag{title}\thetitle#1\LWR@htmltag{/title}\LWR@orignewline%
}%
%    \end{macrocode}
% The page's stylesheet:
%    \begin{macrocode}
\LWR@htmltag{%
link rel="stylesheet" type="text/css" href="\LWR@currentcss" /}%
\LWR@orignewline
%    \end{macrocode}
% Optional MathJax support.  The \acro{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}%
{%
\boolfalse{LWR@verbtags}
\VerbatimInput{lwarp_mathjax.txt}%
\booltrue{LWR@verbtags}
\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
}
%    \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}
% \changes{v0.19}{2016/06/01}{Enabled \textbackslash\textbackslash{} equal to \cs{newline}.}
% \changes{v0.21}{2017/02/22}{Changed \texttt{lateximages} to a \texttt{.txt} file.}
% Executed at the beginning of the entire document.
%    \begin{macrocode}
\newcommand*{\LWR@LwarpStart}
{%
%    \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:
%    \begin{macrocode}
\LWR@origonecolumn%
%    \end{macrocode}
% Reduce chance of line overflow in verbatim environments:
%    \begin{macrocode}
\LWR@origscriptsize%
%    \end{macrocode}
% In \acro{PDF} output, don't allow line breaks to interfere with \acro{HTML} tags:
%    \begin{macrocode}
\LWR@origraggedright%
\let\\\LWR@endofline%
%    \end{macrocode}
% Spread the lines for |pdftotext| to read them well:
%    \begin{macrocode}
\linespread{1.3}%
%    \end{macrocode}
% For |pdftotext| to reliably identify paragraph splits:
%    \begin{macrocode}
\setlength{\parindent}{0pt}
\setlength{\parskip}{2ex}
%    \end{macrocode}
%
% For the |lateximages| record file:
%    \begin{macrocode}
\immediate\openout\LWR@file=lateximages.txt
%    \end{macrocode}
%
% Removes space after the caption in the \acro{HTML}:
%    \begin{macrocode}
\setlength{\belowcaptionskip}{-3ex}
%    \end{macrocode}
% Redefine the plain page style to be empty when used by index pages:
%    \begin{macrocode}
\renewcommand{\ps@plain}{}
%    \end{macrocode}
% Not used in the \acro{HTML} environment:
% \DescribeMacro{\centering}
% \DescribeMacro{\raggedleft}
% \DescribeMacro{\raggedright}
%    \begin{macrocode}
\renewcommand*{\centering}{}
\renewcommand*{\raggedleft}{}
\renewcommand*{\raggedright}{}
%    \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}}
%
% Tabular:
%    \begin{macrocode}
\let\LWR@origtabular\tabular
\let\LWR@origendtabular\endtabular
\let\tabular\LWR@tabular
\let\endtabular\endLWR@tabular
%    \end{macrocode}
% 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}.
% \index{label>in HTML}
% \margintag{Label in \acro{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}
% Logos:
%    \begin{macrocode}
\let\TeX\LWR@TeX
\let\LaTeX\LWR@LaTeX
\let\LuaTeX\LWR@LuaTeX
\let\LuaLaTeX\LWR@LuaLaTeX
\let\XeTeX\LWR@XeTeX
\let\XeLaTeX\LWR@XeLaTeX
\let\ConTeXt\LWR@ConTeXt
%    \end{macrocode}
% Graphics:
%    \begin{macrocode}
\let\rotatebox\LWR@rotatebox
\let\scalebox\LWR@scalebox
\let\reflectbox\LWR@reflectbox
%    \end{macrocode}
% Not yet started any paragraph handling:
%    \begin{macrocode}
\global\boolfalse{LWR@doingapar}
\global\boolfalse{LWR@doingstartpars}
%    \end{macrocode}
% Start a new \acro{HTML} file and a header:
%    \begin{macrocode}
\LWR@filestart{}
\LWR@htmltag{header}\LWR@orignewline
\LWR@startpars
\LWR@firstpagetop
\LWR@stoppars
\LWR@htmltag{/header}\LWR@orignewline
\LWR@htmltag{section class="textbody"{}}
\LWR@origpagestyle{empty}
%    \end{macrocode}
% Document and page settings:
%    \begin{macrocode}
\mainmatter
\LWR@origpagenumbering{arabic}
%    \end{macrocode}
% Set default titlepage thanks footnote marks.  See \cref{sec:titlehtml}.
%    \begin{macrocode}
\if@titlepage
   \thanksmarkseries{arabic}
\else
   \thanksmarkseries{fnsymbol}
\fi
%    \end{macrocode}
%
% Initial default patch for fancyvrb:
%    \begin{macrocode}
\fvset{frame=none}%
%    \end{macrocode}
%
% The ampersand is redefined active, and acts depending
% on whether it is inside a tabular.
%    \begin{macrocode}
\catcode`\&=\active
%    \end{macrocode}
% Allow \acro{HTML} paragraphs to begin:
%    \begin{macrocode}
\LWR@startpars
}
%    \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\csuse{tf@#2}
\immediate\openout \csuse{tf@#2} \jobname.#2\relax
}{}
}
%    \end{macrocode}
% \end{macro}


% \begin{macro}{\LWR@LwarpEnd}
% Final stop of all \acro{HTML} output:
%    \begin{macrocode}
\newcommand*{\LWR@LwarpEnd}
{
\LWR@stoppars
\LWR@closeprevious{\LWR@depthfinished}
%    \end{macrocode}
% At the bottom of the ending file:

% Close the textbody:
%    \begin{macrocode}
\LWR@htmlelementclassend{section}{textbody}
%    \end{macrocode}
% Print any pending footnotes:
%    \begin{macrocode}
\LWR@printpendingfootnotes
%    \end{macrocode}
% Create the footer:
%    \begin{macrocode}
\LWR@htmlelement{footer}

\LWR@pagebottom

\LWR@htmlelementend{footer}
%    \end{macrocode}

% No bottom navigation if are finishing the home page: \\
% Presumably has a table-of-contents printed.
%    \begin{macrocode}
\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}
% For \env{lateximage} commands:
%    \begin{macrocode}
\immediate\closeout\LWR@file
}
%    \end{macrocode}
% \end{macro}


%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}






% \section{Titles and the \protect\pkg{titling} package}
% \label{sec:titles}
% Supports and extends the \pkg{titling} package.
%
% Additional functions include \cs{published} and \cs{subtitle}, and the
% \cs{author} command has an additional \cs{affiliation} command to provide
% an affiliation and other additional information for each author in the
% title page.  The affiliation information is removed when using \cs{theauthor}
% in the main text.
%
% The \pkg{titling} package maintains the definitions of \cs{thetitle},
% \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 author the
% \cs{and} is replaced to generate a simple inline list of authors separated
% by commas.
%
% \cs{printtitle}, \cs{printauthor}, etc., are provided for use inside
% the \env{titlepage} or \env{titlingpage} environments, and these retain
% the \cs{thanks} and \cs{affiliation}.
%
% Several additional hooks are provided in addition to \pkg{titling}:
% \begin{description}
% \ItemDescribeMacro{\maketitlehookaa} Between ``published'' and the title.
% \ItemDescribeMacro{\maketitlehookaaa} Between the title and the subtitle.
% \ItemDescribeMacro{\prepublished} Before the ``published'' field.
% \ItemDescribeMacro{\postpublished} After the ``published'' field.
% \ItemDescribeMacro{\presubtitle} Before the subtitle.
% \ItemDescribeMacro{\postsubtitle} After the subtitle.
% \end{description}
%
% \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
% \cs{thanks} for footnotes, do not use \cs{footnote}.
% \watchout[No footnotes!]
%
% At the end of the \env{titlingpage} environment, footnote marks are forced to
% reset to zero.
%
% Inside a \env{titlingpage} environment with the |article| document class,
% thanks marks will be |fnsymbol| instead of |arabic|.  |arabic| is usually
% used when inside \env{titlepage} environments where the title page is
% on its own page, but is not automatically used
% inside a \env{titlingpage} environment.
%
% To force the thanks marks to
% be |arabic|:
% \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
% \begin{titlingpage}
% \thanksmarkseries{arabic}
% ...
% \end{Verbatim}
%
%
%
% \subsection{Setting the title, etc.}
%
% The following provide setting commands for both \acro{HTML} and print outputs.
%
% \DescribeMacro{@published}
% \DescribeMacro{@title}
% \DescribeMacro{@subtitle}
% \DescribeMacro{@author}
% \DescribeMacro{@date}
% \cs{@title}, \cs{@subtitle}, \cs{@author}, etc.\ 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 table,
% which becomes multiple single-column tables if multiples authors are included.
%
% \DescribeMacro{\printpublished}
% \DescribeMacro{\printtitle}
% \DescribeMacro{\printsubtitle}
% \DescribeMacro{\printauthor}
% \DescribeMacro{\printdate}
% \cs{printtitle}, \cs{printsubtitle}, etc.\ are user-level macros intended to
% be used in \env{titlepage} and \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.
% The author is printed inside a single-column table,
% which becomes multiple single-column tables if multiples authors are included.
%
% \DescribeMacro{\thepublished}
% \DescribeMacro{\thetitle}
% \DescribeMacro{\thesubtitle}
% \DescribeMacro{\theauthor}
% \DescribeMacro{\thedate}
% \cs{thetitle}, \cs{thesubtitle}, \cs{theauthor}, etc.\ are user-level
% sanitized versions which have 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 \acro{HTML} page, such as:
%
% \DescribeMacro{\SetPageBottom} \marg{text}
% \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
% \SetPageBottom{
% \begin{center}\textcopyright~2016 \theauthor\end{center}
% }
% \end{Verbatim}


%
% \DescribeMacro{\author} \marg{author}
% \DescribeMacro{\and}
% While using \cs{maketitle}, the author is treated as a single-column table
% and the \cs{and} feature finishes the current table then starts a new one for
% the next author.  Each author thus is placed into its own table, and an
% affiliation may be placed on its own line such as
%
% |\author{Name \\ Affiliation \and Second Name \\ Second Affiliation}|
%
% After \cs{maketitle} has completed, \cs{theauthor} retains the definition of
% 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
% during \cs{maketitle} starts a new table row and adds the affiliation,
% but after \cs{maketitle} is finished \cs{affiliation} is re-defined
% to throw away its argument, thus printing only the author names
% when \cs{author} is later used inline.
%
%
% \begin{macro}{\affiliation} \marg{text}
%
% Adds the affiliation to the author for use in \cs{maketitle}.
% Nullified when later used for inline use of \cs{theauthor}.
%
% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
\newrobustcmd{\affiliation}[1]{\\ \InlineClass{affiliation}{#1}}
\end{warpHTML}
%    \end{macrocode}
% \codeprint
%    \begin{macrocode}
\begin{warpprint}
\newrobustcmd{\affiliation}[1]{\\ \textsc{\small#1}}
\end{warpprint}
%    \end{macrocode}
% \end{macro}
%
%
%
% The following are based on the original \pkg{titling} code:
%
%
%
% \codeall
%    \begin{macrocode}
\begin{warpall}
%    \end{macrocode}
%
% \begin{macro}{\author} \marg{text}
%
% Redefined to nullify \cs{affiliation}, etc.\ before printing the authors inline.
%
% \cs{@author} retains the entire author with its \cs{thanks}, while
% \cs{theauthor} will have \cs{thanks} removed and \cs{and} simplified.
%    \begin{macrocode}
\renewcommand{\author}[1]{%
\gdef\@author{#1}
\begingroup
  \renewcommand{\thanks}[1]{}
  \renewcommand{\and}{\unskip, }
  \renewcommand{\thanksmark}[1]{}
  \renewcommand{\thanksgap}[1]{}
  \renewcommand{\affiliation}[1]{}
  \protected@xdef\theauthor{#1}
\endgroup}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\published} \marg{text}
% \changes{v0.13}{2016/03/23}{Default to empty published.}
%    \begin{macrocode}
\newcommand{\published}[1]{%
\gdef\@published{#1}
\begingroup
  \renewcommand{\thanks}[1]{}
  \renewcommand{\thanksmark}[1]{}
  \renewcommand{\thanksgap}[1]{}
  \protected@xdef\thepublished{#1}
\endgroup
}
\newcommand{\@published}{}
\newcommand{\thepublished}{}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\subtitle} \marg{text}
% \changes{v0.13}{2016/03/23}{Default to empty subtitle.}
%    \begin{macrocode}
\newcommand{\subtitle}[1]{%
\gdef\@subtitle{#1}
\begingroup
  \renewcommand{\thanks}[1]{}
  \renewcommand{\thanksmark}[1]{}
  \renewcommand{\thanksgap}[1]{}
  \protected@xdef\thesubtitle{#1}
\endgroup
}
\newcommand{\@subtitle}{}
\newcommand{\thesubtitle}{}
%    \end{macrocode}
% \end{macro}
%
%
%    \begin{macrocode}
\end{warpall}
%    \end{macrocode}
%
%
% \subsection{Changes to HTML titlepage and titlingpage}
%
% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}
%
%
% \begin{environment}{titlepage}
% Sets up a titlepage div with a \LaTeX{} \acro{PDF} minipage inside.
%    \begin{macrocode}
\renewenvironment*{titlepage}
    {\BlockClass{titlepage}\LWR@subminipage}
    {\LWR@endsubminipage\endBlockClass}
%    \end{macrocode}
% \end{environment}
%
% \begin{environment}{titlingpage}
%    \begin{macrocode}
\renewenvironment*{titlingpage}
{%
%    \end{macrocode}
% Start an HTML titlepage div:
%    \begin{macrocode}
\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}
% Reset the footnote counter:
%    \begin{macrocode}
\@bscontmark
}
%    \end{macrocode}
% \end{environment}
%
%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}

% \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.
%    \begin{macrocode}
\newcommand*{\printthanks}{\@thanks}
%    \end{macrocode}
%
% \begin{environment}{titlingpage}
% At the end of the titlingpage for both print and HTML,
% reset footnote markers to zero.
%    \begin{macrocode}
\AtEndEnvironment{titlingpage}{\@bscontmark}
%    \end{macrocode}
% \end{environment}
%
%    \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 \acro{HTML}:
%
% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}
%
%
%
% Patch the pre/post title/author/date to add \acro{HTML} tags,
% then initilize:
%    \begin{macrocode}
\newcommand{\prepublished}[1]{%
\def\@bsprepublished{\BlockClass{published}#1}%
}

\newcommand{\postpublished}[1]{%
\def\@bspostpublished{#1\endBlockClass}%
}

\renewcommand{\pretitle}[1]{%
\def\@bspretitle{#1\LWR@stoppars\LWR@htmltag{h1}}%
}

\renewcommand{\posttitle}[1]{%
\def\@bsposttitle{\LWR@htmltag{/h1}\LWR@startpars#1}%
}

\newcommand{\presubtitle}[1]{%
\def\@bspresubtitle{\BlockClass{subtitle}#1}%
}

\newcommand{\postsubtitle}[1]{%
\def\@bspostsubtitle{#1\endBlockClass}%
}

\renewcommand{\preauthor}[1]{%
\def\@bspreauthor{\BlockClass{author}#1}%
}

\renewcommand{\postauthor}[1]{%
\def\@bspostauthor{#1\endBlockClass}%
}

\renewcommand{\predate}[1]{%
\def\@bspredate{#1\BlockClass{titledate}}%
}

\renewcommand{\postdate}[1]{%
\def\@bspostdate{\endBlockClass#1}%
}

\prepublished{\begin{center}}
\postpublished{\par\end{center}}

\pretitle{\begin{center}}
\posttitle{\par\end{center}}

\presubtitle{\begin{center}}
\postsubtitle{\par\end{center}}

\preauthor{\begin{center}%
\begin{tabular}[t]{c}%
}
\postauthor{\end{tabular}\par\end{center}}

\predate{\begin{center}}
\postdate{\par\end{center}}
%    \end{macrocode}
%
%
% \begin{macro}{\printpublished}
% \changes{v0.15}{2015/04/05}{No div if empty.}
%    \begin{macrocode}
\newcommand*{\printpublished}{
\ifthenelse{\equal{\thepublished}{}}
{}
{
\begin{BlockClass}{published}
\@published
\end{BlockClass}
}
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\printtitle}
%    \begin{macrocode}
\newcommand*{\printtitle}
{
\LWR@stoppars
\LWR@htmltag{h1}%
\@title%
\LWR@htmltag{/h1}
\LWR@startpars
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\LWR@printthetitle}
%
% A private version which prints the title without footnotes,
% used to title each \acro{HTML} page.
%    \begin{macrocode}
\newcommand*{\LWR@printthetitle}
{
\LWR@stoppars
\LWR@htmltag{h1}%
\thetitle%
\LWR@htmltag{/h1}
\LWR@startpars
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\printsubtitle}
% \changes{v0.15}{2015/04/05}{No div if empty.}
%    \begin{macrocode}
\newcommand*{\printsubtitle}{
\ifthenelse{\equal{\thesubtitle}{}}
{}
{
\begin{BlockClass}{subtitle}
\@subtitle
\end{BlockClass}
}
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\printauthor}
%    \begin{macrocode}
\newcommand*{\printauthor}{
\begin{BlockClass}{author}
\begin{tabular}{c}\@author\end{tabular}
\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}{\printpublished}
%    \begin{macrocode}
\newcommand*{\printpublished}{{\Large\scshape\@published}}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\printtitle}
%    \begin{macrocode}
\newcommand*{\printtitle}{{\Huge\@title}}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\printsubtitle}
%    \begin{macrocode}
\newcommand*{\printsubtitle}{{\Large\itshape\@subtitle\bigskip}}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\printauthor}
%    \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}
%
%
% \subsection{\cs{maketitle} for print output}
%
%
% \DescribeMacro{\maketitle}
% From the \pkg{titling} package, patched to add the publisher and subtitle.
%
%    \begin{macrocode}
\providecommand{\maketitle}{}
\if@titlepage
  \renewcommand{\maketitle}{\begin{titlepage}%
    \let\footnotesize\small
    \let\footnoterule\relax
    \let \footnote \thanks
    \@bsmarkseries
      \def\@makefnmark{\rlap{\@textsuperscript{%
         \normalfont\@bsthanksheadpre \tamark \@bsthanksheadpost}}}%
      \long\def\@makefntext##1{\makethanksmark ##1}
    \null\vfil
    \vskip 60\p@
    \vspace*{\droptitle}
    \maketitlehooka
    \ifcsempty{@published}
		{}
		{{\@bsprepublished \@published \@bspostpublished}\maketitlehookaa}
    {\@bspretitle \@title \@bsposttitle}
    \ifcsempty{@subtitle}
		{}
		{\maketitlehookaaa{\@bspresubtitle \@subtitle \@bspostsubtitle}}
    \maketitlehookb
    {\@bspreauthor \@author \@bspostauthor}
    \maketitlehookc
    {\@bspredate \@date \@bspostdate}
    \maketitlehookd
    \par
    \@thanks
    \vfil\null
    \end{titlepage}%
    \@bscontmark  %  \setcounter{footnote}{0}%
%%%    \@bsmtitlempty
  } % end titlepage defs
\else
  \renewcommand{\maketitle}{\par
    \begingroup
      \@bsmarkseries
      \def\@makefnmark{\rlap{\@textsuperscript{%
         \normalfont\@bsthanksheadpre \tamark \@bsthanksheadpost}}}%
      \long\def\@makefntext##1{\makethanksmark ##1}
      \if@twocolumn
        \ifnum \col@number=\@ne
          \@maketitle
        \else
          \twocolumn[\@maketitle]%
        \fi
      \else
        \newpage
        \global\@topnum\z@
        \@maketitle
      \fi
      \thispagestyle{plain}\@thanks
    \endgroup
    \@bscontmark  %  \setcounter{footnote}{0}%
%%%    \@bsmtitlempty
  } % end non-titlepage

  \def\@maketitle{%
    \newpage
    \null
    \vskip 2em%
          \vspace*{\droptitle}
    \maketitlehooka
    \ifcsempty{@published}
		{}
		{{\@bsprepublished \@published \@bspostpublished}\maketitlehookaa}
    {\@bspretitle \@title \@bsposttitle}
    \ifcsempty{@subtitle}
		{}
		{\maketitlehookaaa{\@bspresubtitle \@subtitle \@bspostsubtitle}}
    \maketitlehookb
    {\@bspreauthor \@author \@bspostauthor}
    \maketitlehookc
    {\@bspredate \@date \@bspostdate}
    \maketitlehookd
    \par
    \vskip 1.5em}
\fi

\providecommand{\maketitlehookaa}{}

\providecommand{\maketitlehookaaa}{}

\newcommand{\prepublished}[1]{%
\def\@bsprepublished{#1}%
}

\newcommand{\postpublished}[1]{%
\def\@bspostpublished{#1}%
}

\newcommand{\presubtitle}[1]{%
\def\@bspresubtitle{#1}%
}
%    \end{macrocode}
%
% \DescribeMacro{\presubtitle} Hook after printing the subtitle.
%    \begin{macrocode}
\newcommand{\postsubtitle}[1]{%
\def\@bspostsubtitle{#1}%
}
%    \end{macrocode}
%
% Initial settings:
%
%    \begin{macrocode}
\if@titlepage
\prepublished{
\vspace*{-\baselineskip}\vspace*{-\medskipamount}\vspace*{-2em}
\begin{center}}
\postpublished{\par\end{center}\vskip 2em}

\presubtitle{\unskip\begin{center}\unskip}
\postsubtitle{\par\end{center}\vskip 2em}
\else
\prepublished{\begin{center}}
\postpublished{\par\end{center}\vskip 0.5em}

\presubtitle{\begin{center}\unskip}
\postsubtitle{\par\end{center}\vskip 0.5em}
\fi
%    \end{macrocode}
%
%    \begin{macrocode}
\end{warpprint}
%    \end{macrocode}
%
%
% \subsection{\protect\textbackslash{}maketitle for HTML output}
% \label{sec:titlehtml}
%
% An \acro{HTML} div of class |titlepage| is created, inside of which
% a \LaTeX{} \acro{PDF} minipage is generated (without \acro{HTML} tags),
% allowing the |\thanks| footnotes to be generated immediately at the end
% of the title page during \acro{HTML} output.  This is desirable when
% a large table of contents immediately follows the title.
%
% |\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{macro}{\LWR@maketitlesetup} Patches \cs{thanks} macros to
% use \LaTeX{} minipage footnotes.
%
%    \begin{macrocode}
\newcommand*{\LWR@maketitlesetup}{%
%    \end{macrocode}
% Select which kind of footnote marks to use:
%    \begin{macrocode}
\@bsmarkseries
\@mpbsmarkseries
%    \end{macrocode}
%
% Redefine the footnote mark:
%
%    \begin{macrocode}
\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}
\makethanksmark \LWR@orighspace{1in}
%    \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 \acro{HTML} entity for the double vertical bar symbol.
% The original definition used \cs{\textbar} which was not being found by \cmds{pdftotext}.
%    \begin{macrocode}
\def\@fnsymbol#1{\ensuremath{\ifcase#1\or *\or \dagger\or \ddagger\or
   \mathsection\or \mathparagraph\or \text{\HTMLunicode{2016}}\or
   **\or \dagger\dagger \or \ddagger\ddagger \else\@ctrerr\fi}}
%    \end{macrocode}
% \end{macro}
%
%\begin{macro}{\maketitle} Creates an \acro{HTML} titlepage div
%	and typesets the title, etc.
%
% Code from the \pkg{titling} package is adapted, simplified, and
% modified for \acro{HTML} output.
%
%    \begin{macrocode}
\renewcommand*{\maketitle}{%
%    \end{macrocode}
% An \acro{HTML} titlepage 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 |\thanks| footnotes:
%    \begin{macrocode}
\@thanks
%    \end{macrocode}
% Close the \acro{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. for \acro{HTML}:
%    \begin{macrocode}
\DeclareDocumentCommand{\@maketitle}{}{%
	\maketitlehooka
	\ifcsempty{@published}
		{}
		{{\@bsprepublished \@published \@bspostpublished}\maketitlehookaa}
	{\@bspretitle \@title \@bsposttitle}
	\ifcsempty{@subtitle}
		{}
		{\maketitlehookaaa{\@bspresubtitle \@subtitle \@bspostsubtitle}}
	\maketitlehookb
	{\@bspreauthor \@author \@bspostauthor}
	\maketitlehookc
	{\@bspredate \@date \@bspostdate}
	\maketitlehookd
}
%    \end{macrocode}
% \end{macro}


%    \begin{macrocode}
\providecommand{\maketitlehookaa}{}
\providecommand{\maketitlehookaaa}{}
%    \end{macrocode}


% \begin{macro}{\LWR@titlingmaketitle}
% \cs{maketitle} for use inside an \acro{HTML} \env{titlingpage} environment.
%    \begin{macrocode}
\newcommand*{\LWR@titlingmaketitle}{%
%    \end{macrocode}
% Typeset the title, etc:
%    \begin{macrocode}
\@maketitle
%    \end{macrocode}
% Immediately generate any |\thanks| footnotes:
%    \begin{macrocode}
\@thanks
}
%    \end{macrocode}
% \end{macro}


%
% \begin{macro}{\thanksmarkseries} \marg{series}
%
% Sets the type of footnote marks used by |\thanks|,
% where type is `arabic', `roman', `fnsymbol', etc.  Modified to
% use the \LaTeX{} \acro{PDF} minipage which is included with the title page.
%    \begin{macrocode}
\renewcommand{\thanksmarkseries}[1]{%
\def\@mpbsmarkseries{%
\renewcommand*{\thempfootnote}{\@nameuse{#1}{mpfootnote}}}%
\def\@bsmarkseries{\renewcommand{\thefootnote}{\@nameuse{#1}{footnote}}}%
}
%    \end{macrocode}
% \end{macro}
%
%    \begin{macrocode}
\end{warpHTML}
%    \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}
%
% \begin{environment}{abstract}
%    \begin{macrocode}
\DeclareDocumentEnvironment{abstract}{}
{
\BlockClass{abstract}
\BlockClassSingle{abstracttitle}{\abstractname}
}
{
\endBlockClass
}
%    \end{macrocode}
% \end{environment}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}






% \section{Quote and verse}

% \subsection{Citations and attributions}

% \begin{macro}{\attribution}
% for use inside quote, quotation, verse:

% ex: |\attribution{author name} --- \citetitle{book name}|

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
\newcommand{\attribution}[1]{%
\InlineClass{attribution}{—\,#1}}% emdash
\end{warpHTML}
%    \end{macrocode}
% \codeprint
%    \begin{macrocode}
\begin{warpprint}
\newcommand{\attribution}[1]{\textsc{---\,#1}}
\end{warpprint}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\citetitle}
% for use inside quote, quotation, verse:
%
% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
\newcommand{\citetitle}[1]{%
\InlineClass{citetitle}{—\,#1}}% emdash
\end{warpHTML}
%    \end{macrocode}
%
% \codeprint
%    \begin{macrocode}
\begin{warpprint}
\newcommand{\citetitle}[1]{\textsl{---\,#1}}
\end{warpprint}
%    \end{macrocode}
% \end{macro}



% \subsection{Quotes, quotations}

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}
%
% \begin{environment}{quote}
%    \begin{macrocode}
\renewenvironment*{quote}
{\LWR@htmlblocktag{blockquote}}
{\LWR@htmlblocktag{/blockquote}}

\renewenvironment*{quotation}
{\LWR@htmlblocktag{blockquotation}}
{\LWR@htmlblocktag{/blockquotation}}
%    \end{macrocode}
% \end{environment}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}



% \subsection{Verse}
%
% \limitsverse
%
% \codeall
%    \begin{macrocode}
\begin{warpall}
%    \end{macrocode}
%
% The following lengths may be set in either print or \acro{HTML} output,
% but are only used in \acro{HTML}.
% This allows the user to set \cs{vleftskip} and \cs{leftmargini} for
% print output, and optionally select different values for \acro{HTML}.
%

% \DescribeLength{HTMLvleftskip}
% Sets \cs{vleftskip} inside a \env{verse} environment in \acro{HTML}.
%    \begin{macrocode}
\newlength{\HTMLvleftskip}
\setlength{\HTMLvleftskip}{1em}
%    \end{macrocode}

% \DescribeLength{HTMLleftmargini}
% Sets \cs{leftmargini} inside a \env{verse} environment in \acro{HTML}.
%    \begin{macrocode}
\newlength{\HTMLleftmargini}
\setlength{\HTMLleftmargini}{4.5em}
%    \end{macrocode}

%    \begin{macrocode}
\end{warpall}
%    \end{macrocode}






% \section{Verbatim}

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}

% \begin{environment}{verbatim}
%
% \changes{v0.20}{2016/12/24}{Added.}
%
%    \begin{macrocode}
\AfterEndPreamble{
\AtBeginEnvironment{verbatim}{\LWR@atbeginverbatim{verbatim}\unskip\vspace*{-\baselineskip}}
\AfterEndEnvironment{verbatim}{\unskip\vspace*{-\baselineskip}\LWR@afterendverbatim}
}
%    \end{macrocode}
% \end{environment}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}




% \section{Fancyvrb}

% \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 \env{VerbatimInput} in the \acro{HTML} head.
%    \begin{macrocode}
\newbool{LWR@verbtags}
\booltrue{LWR@verbtags}
%    \end{macrocode}


% For \cs{VerbatimFootnotes}:
%    \begin{macrocode}
\renewcommand{\VerbatimFootnotes}{
\PackageError{lwarp}
{Verbatim footnotes are not yet supported by lwarp.}
{This may be improved some day.}
}
%    \end{macrocode}


% \begin{macro}{\LWR@atbeginverbatim} \marg{class}
%
% Encloses a verbatim environment with the given \acro{CSS} class.
%    \begin{macrocode}
\newcommand*{\LWR@atbeginverbatim}[1]
{%
%    \end{macrocode}
% Avoid excessive space between lines:
%    \begin{macrocode}
\setlength{\parskip}{0ex}%
%    \end{macrocode}
% Stop generating \acro{HTML} paragraph tags:
%    \begin{macrocode}
\LWR@stoppars%
%    \end{macrocode}
% Create a new |pre| of the given class:
%    \begin{macrocode}
\ifbool{LWR@verbtags}{\LWR@htmltag{pre class="#1"{}}}{}%
%    \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 \acro{CSS} for the |verse| class.
%    \begin{macrocode}
\LWR@origttfamily%
%    \end{macrocode}
% Do not produce \acro{HTML} tags for \cs{hspace} inside a verse |par|.
% Restore plain \LaTeX{} \cs{hspace} functionality:
%    \begin{macrocode}
\let\hspace\LWR@orighspace%
}
%    \end{macrocode}
% \end{macro}


% \begin{macro}{\LWR@afterendverbatim} Finishes enclosing a verbatim environment.
%    \begin{macrocode}
\newcommand*{\LWR@afterendverbatim}{%
%    \end{macrocode}
% Remove excess vertical space at the end of the |pre|:
%    \begin{macrocode}
\unskip%
%    \end{macrocode}
% At the end of the environment, close the |pre|:
%    \begin{macrocode}
\ifbool{LWR@verbtags}{\noindent\LWR@htmltag{/pre}

}{}%
%    \end{macrocode}
% Resume regular paragraph handling:
%    \begin{macrocode}
\LWR@startpars%
}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\LWR@Verbatimclass} Holds the class of the following verbatim.
%
%    \begin{macrocode}
\newcommand*{\LWR@Verbatimclass}{fancyvrb}
%    \end{macrocode}
% \end{macro}
%
% \begin{environment}{VerbatimClass} \marg{class} \oarg{Verbatim options}
%
% Creates a \env{Verbatim} enclosed in a \acro{DIV} of the given class.
%    \begin{macrocode}
\NewDocumentEnvironment{VerbatimClass}{m O{}}
{%
\renewcommand*{\LWR@Verbatimclass}{#1}%
\LWR@origVerbatim[#2]%
}
{\endVerbatim}
%    \end{macrocode}
% \end{environment}
%
% After the preamble is loaded, after any patches to \env{Verbatim}:
%    \begin{macrocode}
\AfterEndPreamble{
%    \end{macrocode}
%
% Remember the original defintion of \env{Verbatim}:
%    \begin{macrocode}
\let\LWR@origVerbatim\Verbatim
%    \end{macrocode}
%
%
% \begin{environment}{Verbatim}
%
% Patched to place the environment in a |fancyvrb| div,
% and the label in a |fancyvrblabel| div.
% Also corrects the left margin for line numbers.
% Also uses |VerbatimHTMLWidth| to control placement of line numbers on the right.
% Aligning the right margin requires knowing the width.
%
% \changes{v0.20}{2016/12/24}{Added.}
%
%    \begin{macrocode}
\renewcommand*{\Verbatim}{%
\renewcommand*{\LWR@Verbatimclass}{fancyvrb}%
\LWR@origVerbatim%
}
%    \end{macrocode}
% \end{environment}
%
%
% The following patches to \env{Verbatim} are executed at the
% start and end of the environment, depending on the choice of |frame|.
% Original code is from the \pkg{fancyvrb} package.
%    \begin{macrocode}
\newcommand*{\LWR@fvstartnone}{%
\LWR@traceinfo{fvstartnone}%
\ifbool{LWR@verbtags}{\hbox to\z@{\LWR@htmltagc{div class="\LWR@Verbatimclass"}}}{}%
\hbox to\z@{\LWR@atbeginverbatim{verbatim}}%
}

\newcommand*{\LWR@fvendnone}{%
\LWR@traceinfo{fvendnone}%
\hbox to\z@{\LWR@afterendverbatim}%
\ifbool{LWR@verbtags}{\hbox to\z@{\LWR@htmltagc{/div}}}{}%
}

\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%
\FV@BeginListFrame@Lines%
}

\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}
\def\FV@Frame@none{%
\let\FV@BeginListFrame\LWR@fvstartnone%
\let\FV@LeftListFrame\relax%
\let\FV@RightListFrame\relax%
\let\FV@EndListFrame\LWR@fvendnone}

\def\FV@Frame@single{%
\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{%
\let\FV@BeginListFrame\LWR@fvstartline%
\let\FV@LeftListFrame\relax%
\let\FV@RightListFrame\relax%
\let\FV@EndListFrame\LWR@fvendline}

\def\FV@Frame@topline{%
\let\FV@BeginListFrame\LWR@fvstartline%
\let\FV@LeftListFrame\relax%
\let\FV@RightListFrame\relax%
\let\FV@EndListFrame\LWR@fvendnone}

\def\FV@Frame@bottomline{%
\let\FV@BeginListFrame\LWR@fvstartnone%
\let\FV@LeftListFrame\relax%
\let\FV@RightListFrame\relax%
\let\FV@EndListFrame\LWR@fvendline}

\def\FV@Frame@leftline{%
% 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.
%    \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
        \LWR@htmltagc{div class="fancyvrblabel"}
		\LWR@origtextrm{\FV@LabelBegin}% \textrm preserves emdash
		\LWR@htmltagc{/div}
		\fi
      \else
%         \setbox\z@\hbox{\strut\enspace\FV@LabelEnd\enspace\strut}%
        \ifx\FV@LabelPositionBottomLine\relax
		\else
        \LWR@htmltagc{div class="fancyvrblabel"}
		\LWR@origtextrm{\FV@LabelEnd}
		\LWR@htmltagc{/div}
		\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@atbeginverbatim{bverbatim}

}

\AfterEndEnvironment{BVerbatim}
{
\leavevmode\par\vspace{-\baselineskip}
\LWR@afterendverbatim
}
%    \end{macrocode}
% \end{environment}


% \begin{environment}{LVerbatim} No changes required.
% ^^A    \begin{macrocode}
% ^^A \AtBeginEnvironment{LVerbatim}
% ^^A {
% ^^A \LWR@atbeginverbatim{lverbatim}
% ^^A \unskip\vspace{-\baselineskip}
% ^^A }

% ^^A \AfterEndEnvironment{LVerbatim}
% ^^A {
% ^^A \unskip\vspace{-\baselineskip}
% ^^A \LWR@afterendverbatim
% ^^A }
% ^^A    \end{macrocode}
% \end{environment}

% End of the modifications to make at the end of the preamble:
%    \begin{macrocode}
} % \AfterEndPreamble
%    \end{macrocode}

% 
% \begin{macro}{\UseVerbatim} \marg{text}
%
% No changes required.
% ^^A    \begin{macrocode}
% ^^A \let\LWR@origUseVerbatim\UseVerbatim
% ^^A 
% ^^A \renewcommand*{\UseVerbatim}[1]{%
% ^^A \LWR@atbeginverbatim{bverbatim}%
% ^^A \unskip\vspace{-\baselineskip}%
% ^^A \LWR@origUseVerbatim{#1}%
% ^^A \unskip%
% ^^A \LWR@afterendverbatim%
% ^^A }
% ^^A    \end{macrocode}
% \end{macro}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}




% \section{Theorems}
%
% \changes{v0.25}{2017/03/17}{Basic \LaTeX\ theorems: improved \acro{CSS}.}
%
%
% \DescribeMacro{\newtheorem} \marg{text} \oarg{counter} -or- \oarg{oldname} \marg{text}
%
% A few minor changes are made to supply \acro{HTML} tags.
%
% \begin{itemize}
% \item The entire theorem is placed into a div of class |theorem|.
% \item The label for each theorem is placed inside a span of class |theoremlabel|.
% \item The contents are placed inside a 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]{%
\BlockClass{theoremcontents}
\InlineClass{theoremlabel}{#1\ #2\ }
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@opargbegintheorem} \marg{name} \marg{number} \marg{oparg}
%    \begin{macrocode}
\renewcommand{\@opargbegintheorem}[3]{%
\BlockClass{theoremcontents}
\InlineClass{theoremlabel}{#1\ #2\ (#3)\ }
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@endtheorem}
%    \begin{macrocode}
\renewcommand*{\@endtheorem}{%
\endBlockClass% theoremcontents
}
%    \end{macrocode}
% \end{macro}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}



% \section{Lists}
%
% \limitsbabelone
%
% \limitsenumitem
%

% \subsection{Itemize}

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}

%    \begin{macrocode}
\let\LWR@origitem\item
%    \end{macrocode}


% \begin{macro}{\LWR@itemizeitem} \oarg{label}
%
% Handles |\item| inside an itemize or enumerate.
%
% See |\LWR@openparagraph| where extra |\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{\LWR@depthlistitem}{\LWR@printcloselistitem{}}%
\LWR@htmltag{li}%
\LWR@startpars%
\LWR@origitem%
}
%    \end{macrocode}
% \end{macro}


% To have a blank item, use |\mbox{}|.
% This forces a new line in print output, matching the new line which
% will appear in \acro{HTML} output.
% Ex:
%\begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
%\begin{itemize}
%\item \mbox{}
%    \begin{itemize}
%	...
%\end{Verbatim}

% \begin{environment}{itemize} \oarg{enumitem options}
%    \begin{macrocode}
\AtBeginEnvironment{itemize}{\LWR@itemizestart}

\newcommand*{\LWR@itemizestart}{%
\LWR@stoppars%
\LWR@pushoneclose{\LWR@depthlist}{\LWR@printcloseitemize{}}%
\LWR@htmltag{ul style="list-style-type:none"{}}%
\LWR@startpars%
\let\item\LWR@itemizeitem%
}

\AtEndEnvironment{itemize}{\LWR@itemizeend}

\newcommand*{\LWR@itemizeend}{%
\LWR@stoppars%
\LWR@closeprevious{\LWR@depthlistitem}%
\LWR@closeoneprevious{}%
\LWR@startpars%
}
%    \end{macrocode}
% \end{environment}



% \subsection{Enumerate}

% An \acro{HTML} unordered list is used with customized \LaTeX-generated labels.

% \begin{environment}{enumerate} \oarg{enumitem options}
%    \begin{macrocode}
\AtBeginEnvironment{enumerate}{\LWR@enumeratestart}

\newcommand*{\LWR@enumeratestart}{%
\LWR@stoppars%
\LWR@pushoneclose{\LWR@depthlist}{\LWR@printcloseitemize{}}%
\LWR@htmltag{ul style="list-style-type:none"{}}%
\LWR@startpars%
\let\item\LWR@itemizeitem%
}


\AtEndEnvironment{enumerate}{\LWR@enumerateend}

\newcommand*{\LWR@enumerateend}{%
\LWR@stoppars%
\LWR@closeprevious{\LWR@depthlistitem}%
\LWR@closeoneprevious{}%
\LWR@startpars%
}
%    \end{macrocode}
% \end{environment}


% \subsection{Description}

% \begin{macro}{\LWR@descitem} \oarg{label}
% Handles an |\item| inside a description.
%    \begin{macrocode}
\newcommand*{\LWR@descitem}[1][]%
{%
\LWR@stoppars%
\LWR@setlatestname{#1}%
\LWR@startnewdepth{\LWR@depthlistitem}{\LWR@printclosedescitem{}}%
\LWR@origitem[]%
%    \end{macrocode}
% Be sure the label doesn't print to the left of the rest of the file:
%    \begin{macrocode}
\LWR@orighspace{1in}
\LWR@htmltag{dt}#1\LWR@htmltag{/dt}%
\LWR@orignewline%
\LWR@htmltag{dd}%
\LWR@startpars%
}
%    \end{macrocode}
% \end{macro}

% \begin{environment}{description} \oarg{enumitem options}
%    \begin{macrocode}
\AtBeginEnvironment{description}{\LWR@descriptionstart}

\newcommand*{\LWR@descriptionstart}{%
\LWR@stoppars%
\LWR@pushoneclose{\LWR@depthlist}{\LWR@printclosedescription{}}%
\LWR@htmltag{dl}%
\LWR@startpars%
\let\item\LWR@descitem%
}

\AtEndEnvironment{description}{\LWR@descriptionend}

\newcommand*{\LWR@descriptionend}{%
\LWR@stoppars%
\LWR@closeprevious{\LWR@depthlistitem}%
\LWR@closeoneprevious{}%
\LWR@startpars%
}
%    \end{macrocode}
% \end{environment}


% \begin{macro}{\newlist} \marg{name} \marg{type} \marg{maxdepth}
% \begin{macro}{\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@orignewlist\newlist

\renewcommand*{\newlist}[3]{%
\LWR@orignewlist{#1}{#2}{#3}%
\AtBeginEnvironment{#1}{\csuse{LWR@#2start}}%
\AtEndEnvironment{#1}{\csuse{LWR@#2end}}%
}
%    \end{macrocode}
% \end{macro}
% \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 which is involved.
%
% 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.}
%
% \subsection{Token lookahead}

% Used by |\LWR@futurenonspacelet| to look at the next token.

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}

% \begin{macro}{\LWR@mynexttoken}
%    \begin{macrocode}
\newcommand\LWR@mynexttoken\relax
%    \end{macrocode}
% \end{macro}

% |\futurelet| copies the next token then executes a function to analyze

% |\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=\@BTfnslthree%
\else\let\next=\nexttoken\fi\next}
\def\@BTfnslthree{\afterassignment\LWR@fnslone\let\next= }
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\LWR@getmynexttoken}
% Looks ahead and copies the next token into |\LWR@mynexttoken|.
%    \begin{macrocode}
\newcommand*{\LWR@getmynexttoken}{%
% nothing must follow this next line
\LWR@futurenonspacelet\LWR@mynexttoken\LWR@tabledatacolumntag
}
%    \end{macrocode}
% \end{macro}

% \subsection{Booleans}

% \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@doinghline}
% True if the next row will have an hline above it.
%    \begin{macrocode}
\newbool{LWR@doinghline}
\boolfalse{LWR@doinghline}
%    \end{macrocode}

% \DescribeBoolean{LWR@doingtbrule}
% True if the next row will have a top/bottom rule above it.
%    \begin{macrocode}
\newbool{LWR@doingtbrule}
\boolfalse{LWR@doingtbrule}
%    \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 multi-row cell,
% and thus there is no data tag to close.
%    \begin{macrocode}
\newbool{LWR@skippingmrowcell}
%    \end{macrocode}


% \DescribeBoolean{LWR@intabularmetadata}
% True if are in a tabular but not in a data cell.
% Used to prevent extra \acro{HTML} breaks if not inside table data.
%    \begin{macrocode}
\newbool{LWR@intabularmetadata}
\boolfalse{LWR@intabularmetadata}
%    \end{macrocode}



% \subsection{Handling \& and !}
%
% \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@closetabledatacell}
% If |LWR@skippingmrowcell| then there is no data tag to close.
% Otherwise, close any paragraphs, then close the data tag.
%    \begin{macrocode}
\newcommand*{\LWR@closetabledatacell}{%
\global\booltrue{LWR@intabularmetadata}%
\ifbool{LWR@exitingtabular}{}%
{% not exiting tabular
\ifbool{LWR@skippingmrowcell}{}%
{% not skippingmrowcell
%    \end{macrocode}
% Insert any |<| then any |@| and |!| column contents:
%    \begin{macrocode}
\unskip%
\LWR@getexparray{LWR@colafterspec}{\theLWR@tablecolspos}%
\LWR@getexparray{LWR@colatspec}{\theLWR@tablecolspos}%
\LWR@getexparray{LWR@colbangspec}{\theLWR@tablecolspos}%
%    \end{macrocode}
% Close paragraphs:
%    \begin{macrocode}
\ifbool{LWR@tableparcell}{\LWR@stoppars}{}%
\global\boolfalse{LWR@tableparcell}%
%    \end{macrocode}
% Close the table data cell:
%    \begin{macrocode}
\unskip\LWR@htmltag{/td}\LWR@orignewline%
}% not skipping mrowcell
}% not exiting tabular
\global\boolfalse{LWR@skippingmrowcell}%
}
%    \end{macrocode}
% \end{macro}


% |LWR@tabulardepth| tracks whether |&| is being used inside a \env{tabular}.
%    \begin{macrocode}
\newcounter{LWR@tabulardepth}
\setcounter{LWR@tabulardepth}{0}

%    \end{macrocode}
% When not used inside a \env{tabular}, |&| performs its original
% function as recorded here ( with catcode 4 ).
%    \begin{macrocode}
\def\LWR@origampmacro{&}
%    \end{macrocode}
% See below for why the group is used.
%    \begin{macrocode}
\begingroup
%    \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 \acro{HTML} conversion.
% If not, it behaves normally.
%
% The |\catcode| allows the |&| character to be redefined.
%    \begin{macrocode}
\catcode`\&=\active

\gdef&{%
\ifthenelse{\cnttest{\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@tablecolspos}{1}%
%    \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}%
}
\endgroup
%    \end{macrocode}
% Outside the group, |&| is left its original catcode for now.
%
% \pkg{tikz} package seems to require |&| be left alone until after
% \pkg{tikz} has been loaded.
%
% \cs{LWR@lwarpStart} finally makes |&| active at the beginning of the
% \acro{HTML} conversion.
% \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}
{%
\LWR@closetabledatacell%
%    \end{macrocode}
% Finish the previous row:
%    \begin{macrocode}
\LWR@htmltag{/tr}\LWR@orignewline
\global\booltrue{LWR@intabularmetadata}
%    \end{macrocode}
% Not yet started a table row:
%    \begin{macrocode}
\global\boolfalse{LWR@startedrow}
%    \end{macrocode}
% Additional setup:
%    \begin{macrocode}
\global\boolfalse{LWR@doinghline}%
\global\boolfalse{LWR@doingtbrule}%
\LWR@clearmidrules%
%    \end{macrocode}
% Start at first column:
%    \begin{macrocode}
\setcounter{LWR@tablecolspos}{1}
%    \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{Variables}

%    \begin{macrocode}
\newcommand*{\LWR@colsresult}{}%temp storage for column format results
\newcommand*{\LWR@pposition}{}
\newcommand*{\LWR@pleft}{}
\newcommand*{\LWR@pright}{}
%    \end{macrocode}

% \begin{macro}{\LWR@tablecolspec} Holds the parsed column specification,
% of total width |LWR@tabletotalcols|.
%
% Will contain a string such as |llrrccpc|, exactly one letter per column,
% without |@|, |>|, |<|, or the vertical pipe.
%    \begin{macrocode}
\newcommand*{\LWR@tablecolspec}{}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\LWR@strresult} Holds the result of |Str| functions.
%    \begin{macrocode}
\newcommand*{\LWR@strresult}{}
%    \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@tablecolswidth}
% Holds the width of the table specification.
%
% (This is not the total \# columns.)
%    \begin{macrocode}
\newcounter{LWR@tablecolswidth}
%    \end{macrocode}


% \DescribeCounter{LWR@tablecolspos}
% Where are currently looking into the table column specification.
%    \begin{macrocode}
\newcounter{LWR@tablecolspos}
%    \end{macrocode}

% \DescribeCounter{LWR@tabletotalcols}
% Holds the final number of table columns.
%    \begin{macrocode}
\newcounter{LWR@tabletotalcols}
%    \end{macrocode}

% \DescribeCounter{LWR@tabletotalcolsnext}
% Holds the next column while parsing.
% Is one more than |LWR@tabletotalcols|.
%    \begin{macrocode}
\newcounter{LWR@tabletotalcolsnext}
%    \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.



% \subsection{Parsing @, >, <, ! columns}
%
% \begin{macro}{\LWR@parseatcolumn}
%
% Handles |@{text}| columns.
%
%    \begin{macrocode}
\newcommand*{\LWR@parseatcolumn}{%
%    \end{macrocode}
% Move to the next token after the '@':
%    \begin{macrocode}
\LWR@traceinfo{at column}%
\addtocounter{LWR@tablecolspos}{1}%
%    \end{macrocode}
% Read the next token into \cs{LWR@strresult}, expanding once:
%    \begin{macrocode}
\LWR@traceinfo{about to read the next token:}%
\expandarg%
\StrChar{\LWR@origcolspec}{\theLWR@tablecolspos}[\LWR@strresult]
\fullexpandarg%
%    \end{macrocode}
% Store the result into a data array, expanding once out of \cs{LWR@strresult}:
%    \begin{macrocode}
\LWR@traceinfo{have now read the next token}%
\ifthenelse{\cnttest{\value{LWR@tabletotalcols}}=0}
{% left edge of the table:
\LWR@traceinfo{at the left edge}%
\LWR@setexparray{LWR@colatspec}{leftedge}{\LWR@strresult}%
}%
{% not at the left edge:
\LWR@traceinfo{not at the left edge}%
\LWR@setexparray{LWR@colatspec}{\theLWR@tabletotalcols}{\LWR@strresult}%
\LWR@traceinfo{at \theLWR@tabletotalcols: %
  \LWR@getexparray{LWR@colatspec}{\theLWR@tabletotalcols})!}%
\let\LWR@strresult\relax%
\booltrue{LWR@validtablecol}%
}%
}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\LWR@parsebangcolumn}
%
% \changes{v0.22}{2017/02/28}{Added tabular \texttt{!!} column.}
%
%    \begin{macrocode}
\newcommand*{\LWR@parsebangcolumn}{%
%    \end{macrocode}
% Move to the next token after the '!':
%    \begin{macrocode}
\LWR@traceinfo{bang column}%
\addtocounter{LWR@tablecolspos}{1}%
%    \end{macrocode}
% Read the next token into \cs{LWR@strresult}, expanding once:
%    \begin{macrocode}
\LWR@traceinfo{about to read the next token:}%
\expandarg%
\StrChar{\LWR@origcolspec}{\theLWR@tablecolspos}[\LWR@strresult]
\fullexpandarg%
%    \end{macrocode}
% Store the result into a data array, expanding once out of \cs{LWR@strresult}:
%    \begin{macrocode}
\LWR@traceinfo{have now read the next token}%
\ifthenelse{\cnttest{\value{LWR@tabletotalcols}}=0}
{% left edge of the table:
\LWR@traceinfo{at the left edge}%
\LWR@setexparray{LWR@colbangspec}{leftedge}{\LWR@strresult}%
}%
{% not at the left edge:
\LWR@traceinfo{not at the left edge}%
\LWR@setexparray{LWR@colbangspec}{\theLWR@tabletotalcols}{\LWR@strresult}%
\LWR@traceinfo{bang \theLWR@tabletotalcols: \LWR@colbangspec(\theLWR@tabletotalcols)!}%
}%
\let\LWR@strresult\relax%
\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@tablecolspos}{1}%
%    \end{macrocode}
% Read the next token, expanding once into \cs{LWR@strresult}:
%    \begin{macrocode}
\expandarg%
\StrChar{\LWR@origcolspec}{\theLWR@tablecolspos}[\LWR@strresult]%
\fullexpandarg%
%    \end{macrocode}
% Store the result into a data array, expanding once out of \cs{LWR@strresult}:
%    \begin{macrocode}
\LWR@setexparray{LWR@colbeforespec}{\theLWR@tabletotalcolsnext}{\LWR@strresult}%
\let\LWR@strresult\relax%
\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@tablecolspos}{1}%
%    \end{macrocode}
% Read the next token, expanding once into \cs{LWR@strresult}:
%    \begin{macrocode}
% \StrChar{#1}{\theLWR@tablecolspos}[\LWR@strresult]
\expandarg%
\StrChar{\LWR@origcolspec}{\theLWR@tablecolspos}[\LWR@strresult]%
\fullexpandarg%
%    \end{macrocode}
% Store the result into a data array, expanding once out of \cs{LWR@strresult}:
%    \begin{macrocode}
\LWR@setexparray{LWR@colafterspec}{\theLWR@tabletotalcols}{\LWR@strresult}%
\let\LWR@strresult\relax%
\booltrue{LWR@validtablecol}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LWR@parseskipcolumn}
%
% Handles columns to skip, such as the vertical bar.
%
%    \begin{macrocode}
\newcommand*{\LWR@parseskipcolumn}{%
\booltrue{LWR@validtablecol}%
}
%    \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]{%
\appto\LWR@tablecolspec{#1}%
\addtocounter{LWR@tabletotalcols}{1}%
\addtocounter{LWR@tabletotalcolsnext}{1}%
\LWR@setexparray{LWR@colatspec}{\theLWR@tabletotalcolsnext}{\relax}%
\LWR@setexparray{LWR@colbangspec}{\theLWR@tabletotalcolsnext}{\relax}%
\LWR@setexparray{LWR@colbeforespec}{\theLWR@tabletotalcolsnext}{\relax}%
\LWR@setexparray{LWR@colafterspec}{\theLWR@tabletotalcolsnext}{\relax}%
\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
%    \begin{macrocode}
\addtocounter{LWR@tablecolspos}{1}%
}
%    \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 \texttt{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@tablecolspos}{3}%
}
%    \end{macrocode}
% \end{macro}



% \subsection{Parsing the column specifications}

% \acro{HTML} \acro{CSS} cannot exactly match the \LaTeX{} concept of a baseline for
% a table row.
% \watchout
% \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}}
% \index{tabular>baseline}\index{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 \acro{HTML}.
%
% \begin{table}
% \caption{Tabular \acro{HTML} column conversions\label{tab:columnconversions}}
% \index{tabular>HTML colummn conversion}
% \index{HTML>tabular column conversion}
%
% \medskip
%
% \hrule
% \begin{description}[parsep=.5ex]
% \item [l, r, c:] Converted to table cells without paragraph tags. \\
% Uses \acro{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 \acro{CSS} |vertical-align:bottom| is used to
% have the \acro{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 \acro{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 \acro{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, \acro{CSS} |vertical-align:middle|.
% \item [b:] With paragraph tags, \acro{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'.  From the \pkg{siunitx} package.
% \item [D:] Converted to 'c'.  From the \pkg{dcolumn} package.
% \item [@, !, \textgreater{}, \textless{}:] One each, in that order.
% \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}
%
%
%
% \begin{macro}{\LWR@parsetablecols} \marg{colspecs}
%
% Scans the column specification left to right.
%
% Builds \cs{LWR@tablecolspec} with the final specification,
% one column per entry.  The number of final columns is
% stored in |LWR@tabletotalcols|.
%
% \changes{v0.22}{2017/02/28}{Unknown table column types become \texttt{l}.
%	Added tabular \texttt{D}, \texttt{!!}, \texttt{X} columns.}
%
% \changes{v0.23}{2017/03/02}{Fix for vert bar column type.}
%
%    \begin{macrocode}
\newcommand*{\LWR@parsetablecols}[1]{%
\LWR@traceinfo{LWR@parsetablecols started}%
%    \end{macrocode}
% Remember the original supplied column spec:
%    \begin{macrocode}
\renewcommand*{\LWR@origcolspec}{#1}%
%    \end{macrocode}
% Clear the parsed resulting column spec:
%    \begin{macrocode}
\renewcommand*{\LWR@tablecolspec}{}%
%    \end{macrocode}
% Total number of columns found so far.
% Also pre-initialize the first several columns of specs:
%    \begin{macrocode}
\setcounter{LWR@tabletotalcols}{0}%
\setcounter{LWR@tabletotalcolsnext}{1}%
\LWR@setexparray{LWR@colatspec}{leftedge}{\relax}%
\LWR@setexparray{LWR@colatspec}{1}{\relax}%
\LWR@setexparray{LWR@colatspec}{2}{\relax}%
\LWR@setexparray{LWR@colatspec}{3}{\relax}%
\LWR@setexparray{LWR@colbangspec}{leftedge}{\relax}%
\LWR@setexparray{LWR@colbangspec}{1}{\relax}%
\LWR@setexparray{LWR@colbangspec}{2}{\relax}%
\LWR@setexparray{LWR@colbangspec}{3}{\relax}%
\LWR@setexparray{LWR@colbeforespec}{1}{\relax}%
\LWR@setexparray{LWR@colbeforespec}{2}{\relax}%
\LWR@setexparray{LWR@colbeforespec}{3}{\relax}%
\LWR@setexparray{LWR@colafterspec}{1}{\relax}%
\LWR@setexparray{LWR@colafterspec}{2}{\relax}%
\LWR@setexparray{LWR@colafterspec}{3}{\relax}%
%    \end{macrocode}
% Starting at the first column specification:
%    \begin{macrocode}
\setcounter{LWR@tablecolspos}{1}%
%    \end{macrocode}
% Place the colspecs string length into \cs{LWR@strresult},
% and remember the number of characters in the column specification:
%    \begin{macrocode}
\LWR@traceinfo{about to StrLen}%
\noexpandarg%
\StrLen{#1}[\LWR@strresult]%
\fullexpandarg%
\LWR@traceinfo{finished StrLen}%
\setcounter{LWR@tablecolswidth}{\LWR@strresult}%
%    \end{macrocode}
% Scan through the column specifications:
%    \begin{macrocode}
\whiledo{\not\value{LWR@tablecolspos}>\value{LWR@tablecolswidth}}{%
%    \end{macrocode}
% Place the next single-character column type into \cs{LWR@strresult}:
%    \begin{macrocode}
\noexpandarg%
\StrChar{#1}{\theLWR@tablecolspos}[\LWR@strresult]%
\fullexpandarg%
%    \end{macrocode}
% Not yet found a valid column type
%    \begin{macrocode}
\boolfalse{LWR@validtablecol}%
%    \end{macrocode}
% Note that the parameter for a |p{spec}| column is a token list which will NOT match l,c,r,p.
% \watchout
%    \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}{S}{\LWR@parsenormalcolumn{r}}{}%
\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@parseskipcolumn}{}%
\IfStrEq{\LWR@strresult}{p}{\LWR@parsepcolumn{p}}{}%
\IfStrEq{\LWR@strresult}{m}{\LWR@parsepcolumn{m}}{}%
\IfStrEq{\LWR@strresult}{b}{\LWR@parsepcolumn{b}}{}%
%    \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}
% Many people define centered versions ``|P|'', ``|M|'', and ``|B|'': \\
% \hspace*{1em}|\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}|
% \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 a |p| column:
%    \begin{macrocode}
\ifbool{LWR@validtablecol}{}{%
\LWR@parsenormalcolumn{l}%
}%
\addtocounter{LWR@tablecolspos}{1}%
}%
}%
%    \end{macrocode}
% \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}%
\ifbool{LWR@doinghline}%
{\LWR@htmltag{tr class="hline"{}}\LWR@orignewline}%
{% not doing hline
\ifbool{LWR@doingtbrule}%
{\LWR@htmltag{tr class="tbrule"{}}\LWR@orignewline}%
{\LWR@htmltag{tr}\LWR@orignewline}%
}% end of not doing hline
}% end of not started the row
}
%    \end{macrocode}
% \end{macro}



% \subsection{Data opening tag}

% \begin{macro}{\LWR@tabledatasinglecolumntag}
% Print a table data opening tag with style for alignment
%    \begin{macrocode}
\newcommand*{\LWR@tabledatasinglecolumntag}%
{%
\LWR@maybenewtablerow%
%    \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}
% Fetch the current column's alignment character into |\LWR@strresult|:
%    \begin{macrocode}
\StrChar{\LWR@tablecolspec}{\theLWR@tablecolspos}[\LWR@strresult]%
%    \end{macrocode}
% print the start of a new table data cell:
%    \begin{macrocode}
\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 \acro{HTML} class tag:
%    \begin{macrocode}
\ifthenelse{\equal{\LWR@getexparray{LWR@midrules}{\theLWR@tablecolspos}}{Y}}{rule}{}%
"{}}%
%    \end{macrocode}
% If this is a p, m, b, or X column, allow paragraphs:
%    \begin{macrocode}
\ifthenelse{%
\equal{\LWR@strresult}{p}\OR%
\equal{\LWR@strresult}{m}\OR% 
\equal{\LWR@strresult}{b}\OR%
\equal{\LWR@strresult}{P}\OR%
\equal{\LWR@strresult}{M}\OR%
\equal{\LWR@strresult}{B}\OR%
\equal{\LWR@strresult}{X}%
}%
{% allow pars
\LWR@startpars%
\global\booltrue{LWR@tableparcell}%
}% allow pars
{}% no pars
%    \end{macrocode}
% Print the |@| and |!| contents before first column,
% and then the |>| contents:
%    \begin{macrocode}
\ifthenelse{\cnttest{\value{LWR@tablecolspos}}=1}%
{%
\LWR@getexparray{LWR@colatspec}{leftedge}%
\LWR@getexparray{LWR@colbangspec}{leftedge}%
}% left edge
{}% not left edge
\LWR@getexparray{LWR@colbeforespec}{\theLWR@tablecolspos}%
\global\boolfalse{LWR@intabularmetadata}%
}% not exiting tabular
}%
%    \end{macrocode}
% \end{macro}


% \subsection{Midrules}
%
% \DescribeObject{LWR@midrules}|LWR@midrules| is a data array
% (\cref{sec:dataarray}) of columns containing
% |Y| if a midrule should be created for each column.


% \DescribeCounter{LWR@midrulecounter}
% Indexes across the |LWR@midrules| data array.
%    \begin{macrocode}
\newcounter{LWR@midrulecounter}
%    \end{macrocode}

% \begin{macro}{\LWR@clearmidrules}
% Start new midrules.  Called at beginning of tabular and also at |\\|.
%
% Clears all |LWR@midrules| markers for this line.
%    \begin{macrocode}
\newcommand*{\LWR@clearmidrules}
{%
\setcounter{LWR@midrulecounter}{1}%
\whiledo{%
\cnttest{\value{LWR@midrulecounter}}{<=}{\value{LWR@tablecolswidth}}%
}%
{%
\LWR@setexparray{LWR@midrules}{\theLWR@midrulecounter}{\relax}%
\addtocounter{LWR@midrulecounter}{1}%
}%
}
%    \end{macrocode}
% \end{macro}


% \begin{macro}{\LWR@subcmidrule} \oarg{width} \marg{trim} \marg{leftcolumn} \marg{rightcolumn}
%
% Marks |LWR@midrules| data array elements to be ``Y'' from left to right columns.
%    \begin{macrocode}
\newcommand*{\LWR@subcmidrule}[4]{%
\setcounter{LWR@midrulecounter}{#3}%
\whiledo{\cnttest{\value{LWR@midrulecounter}}{<=}{#4}}%
{%
\LWR@setexparray{LWR@midrules}{\theLWR@midrulecounter}{Y}%
\addtocounter{LWR@midrulecounter}{1}%
}% end of the whiledo
}
%    \end{macrocode}
% \end{macro}


% \begin{macro}{\LWR@docmidrule} \oarg{width} \marg{trim} \marg{leftcolumn-rightcolumn}
%
% Marks |LWR@midrules| array elements to be ``Y'' from left to right columns.
%
%    \begin{macrocode}
\NewDocumentCommand{\LWR@docmidrule}{o d() >{\SplitArgument{1}{-}}m}%
{\LWR@subcmidrule{#1}{#2}#3}
%    \end{macrocode}
% \end{macro}





% \subsection{Multicolumns}

% \subsubsection{Parsing multicolumns}

%    \begin{macrocode}
\newcounter{LWR@tablemulticolswidth}
\newcounter{LWR@tablemulticolspos}
%    \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}{\theLWR@tablemulticolspos}[\LWR@strresult]%
%    \end{macrocode}
% Add to the \acro{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}{}%
\IfStrEq{\LWR@strresult}{S}{r}{}%
\IfStrEq{\LWR@strresult}{X}{p}{}%
\LWR@traceinfo{lwr@printmccoltype done}%
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\LWR@multicolpartext}
% Print the data with paragraph tags:
%    \begin{macrocode}
\newcommand*{\LWR@multicolpartext}{%
\LWR@startpars%
\LWR@multicoltext%
\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}{\theLWR@tablemulticolspos}[\LWR@strresult]%
\LWR@strresult%
%    \end{macrocode}
% A valid column data type was found:
%    \begin{macrocode}
\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}
\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 \texttt{D}, \texttt{!!},
%	and \texttt{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}
\boolfalse{LWR@validtablecol}%
%    \end{macrocode}
% Get one token of the column spec:
%    \begin{macrocode}
\StrChar{#1}{\theLWR@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%
}{}%
\IfStrEq{\LWR@strresult}{p}{\LWR@multicolpartext}{}%
\IfStrEq{\LWR@strresult}{m}{\LWR@multicolpartext}{}%
\IfStrEq{\LWR@strresult}{b}{\LWR@multicolpartext}{}%
\IfStrEq{\LWR@strresult}{P}{\LWR@multicolpartext}{}%
\IfStrEq{\LWR@strresult}{M}{\LWR@multicolpartext}{}%
\IfStrEq{\LWR@strresult}{B}{\LWR@multicolpartext}{}%
\IfStrEq{\LWR@strresult}{S}{\LWR@multicolpartext}{}%
\IfStrEq{\LWR@strresult}{X}{\LWR@multicolpartext}{}%
\IfStrEq{\LWR@strresult}{|}{\LWR@multicolskip}{}%
\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}
\whiledo{%
\not\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{High-level multicolumn interface}

% \begin{macro}{\LWR@domulticolumn} \marg{1: numcols} \marg{2: colspec} \marg{3: text}
%
%    \begin{macrocode}
\newcommand{\LWR@multicoltext}{}

\NewDocumentCommand{\LWR@domulticolumn}{m m +m}{%
\LWR@traceinfo{lwr@domulticolumn -#1- -#2-}%
%    \end{macrocode}
% Remember the text to be inserted, and
% remember that a valid column type was found:
%    \begin{macrocode}
\renewcommand{\LWR@multicoltext}{%
#3%
\booltrue{LWR@validtablecol}%
}%
%    \end{macrocode}
% Row processing:
%    \begin{macrocode}
\LWR@maybenewtablerow%
%    \end{macrocode}
% Begin the opening table data tag:
%    \begin{macrocode}
\LWR@htmltag{td colspan="#1"
 class="td%
%    \end{macrocode}
% Print the column type:
%    \begin{macrocode}
\LWR@parsemulticolumnalignment{#2}{\LWR@printmccoltype}%
%    \end{macrocode}
% If this column has a cmidrule, add ``rule'' to the end of the \acro{HTML} class tag.
%
% If this position had a ``Y'' then add ``rule''.
%    \begin{macrocode}
\ifthenelse{\equal{\LWR@getexparray{LWR@midrules}{\theLWR@tablecolspos}}{Y}}{rule}{}%
%    \end{macrocode}
% Close the class tag's opening quote:
%    \begin{macrocode}
"%
}% end of the opening table data tag
\global\boolfalse{LWR@intabularmetadata}%
\LWR@parsemulticolumnalignment{#2}{\LWR@printmccoldata}%
}
%    \end{macrocode}
% \end{macro}


% \subsubsection{Longtable captions}

% \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?
\ifthenelse{\equal{#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
%    \begin{macrocode}
\LWR@domulticolumn{\theLWR@tabletotalcols}{P}{% \LWR@domulticolumn
% \IfBooleanTF{#1}% star?
% {\IfValueTF{#2}{\LWR@origcaption*[#2]{#3}}{\LWR@origcaption*{#3}}}
% {\IfValueTF{#2}{\LWR@origcaption[#2]{#3}}{\LWR@origcaption{#3}}}
\IfBooleanTF{#1}% star?
%    \end{macrocode}
% Star version, show a caption but do not make a LOT entry:
%    \begin{macrocode}
{% yes star
\LWR@htmlblocktag{figcaption}%
#3%
\LWR@htmlblocktag{/figcaption}%
}%
{% No star:
%    \end{macrocode}
% Not the star version:
%
% Don't step the counter if |\caption[]{A caption.}|
%    \begin{macrocode}
\ifbool{LWR@starredlongtable}%
{%
\ifthenelse{\equal{#2}{}}% TOC entry
{}%
{%
\refstepcounter{\LTcaptype}%
\protected@edef\@currentlabel{%
\csuse{p@\LTcaptype}\csuse{the\LTcaptype}}%
}%
}{}%
%    \end{macrocode}
% Create an \acro{HTML} caption.  Afterwards, maybe make a LOT entry.
%    \begin{macrocode}
\LWR@htmlblocktag{figcaption}%
\csuse{fnum@\LTcaptype}\CaptionSeparator#3%
\LWR@htmlblocktag{/figcaption}%
%    \end{macrocode}
% See if an optional caption was given:
%    \begin{macrocode}
\ifthenelse{\equal{#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%
{\csuse{ext@\LTcaptype}}%
{\LTcaptype}%
{%
\protect\numberline%
{\csuse{p@\LTcaptype}\csuse{the\LTcaptype}}%
{\ignorespaces #3\protect\relax}%
}%
}% end of No TOC entry
%    \end{macrocode}
% The optional caption has text enclosed:
%    \begin{macrocode}
{% yes TOC entry
\addcontentsline%
{\csuse{ext@\LTcaptype}}%
{\LTcaptype}%
{%
\protect\numberline%
{\csuse{p@\LTcaptype}\csuse{the\LTcaptype}}%
{\ignorespaces #2\protect\relax}%
}%
}% end of yes TOC entry
}% end of TOC entry not empty
}% end of no star
}% end of \LWR@domulticolumn

\addtocounter{LWR@tablecolspos}{\theLWR@tabletotalcols}
\addtocounter{LWR@tablecolspos}{-1}

}
%    \end{macrocode}
% \end{macro}




% \subsubsection{\textbackslash{}tabledatamulticolumntag}

% \begin{macro}{\LWR@tabledatamulticolumntag} \marg{numcols} \marg{alignment} \marg{text}
%    \begin{macrocode}
\NewDocumentCommand{\LWR@tabledatamulticolumntag}{m m +m}%
{%
\LWR@domulticolumn{#1}{#2}{#3}%
\addtocounter{LWR@tablecolspos}{#1}%
\addtocounter{LWR@tablecolspos}{-1}%
}
%    \end{macrocode}
% \end{macro}



% \subsection{Multirow}

% \DescribePackage{multirow}



% \begin{macro}{\LWR@tabledatamultirowtag}
%	\marg{numrows} \oarg{bigstruts} \marg{width} \oarg{fixup} \marg{text}
% \changes{v0.19}{2015/05/28}{Added optional args.}
%    \begin{macrocode}
\NewDocumentCommand{\LWR@tabledatamultirowtag}{m o m o m}%
{%
\LWR@maybenewtablerow%
%    \end{macrocode}
% Print the start of a new table data cell:
%    \begin{macrocode}
\LWR@htmltag{td rowspan="#1" class="td%
%    \end{macrocode}
% Append this column's spec:
%    \begin{macrocode}
\StrChar{\LWR@tablecolspec}{\theLWR@tablecolspos}%
%    \end{macrocode}
% If this column has a cmidrule, add ``rule'' to the end of the \acro{HTML} class tag:
%    \begin{macrocode}
\ifthenelse{\equal{\LWR@getexparray{LWR@midrules}{\theLWR@tablecolspos}}{Y}}{rule}{}%
"{}}
%    \end{macrocode}
% While printing the text, redefine |\\| to generate a new line
%    \begin{macrocode}
\begingroup \let\\\LWR@endofline #5 \endgroup
\LWR@stoppars%
\global\boolfalse{LWR@intabularmetadata}%
}%
%    \end{macrocode}
% \end{macro}


% \subsection{Utility macros inside a table}
%    \begin{macrocode}
\newcommand*{\LWR@donothing}{}
\newcommand*{\LWR@domidrule}{\booltrue{LWR@doinghline}}
\newcommand*{\LWR@dotbrule}{\booltrue{LWR@doingtbrule}}
%    \end{macrocode}


% \subsection{Checking for a new table cell}

% \begin{macro}{\LWR@tabledatacolumntag}
% Open a new \acro{HTML} table cell unless the next token is for a macro
% which does not create data, such as |\hline|, |\toprule|, etc:
%    \begin{macrocode}
\newbool{LWR@exitingtabular}
\newcommand*{\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}
\let\mynext\LWR@tabledatasinglecolumntag%
%    \end{macrocode}
% If exiting the tabular:
%    \begin{macrocode}
\ifthenelse{\isequivalentto{\LWR@mynexttoken}{\end}}%
{\booltrue{LWR@exitingtabular}}{}%
%    \end{macrocode}
% \env{longtable} can have a caption in a cell
%    \begin{macrocode}
\ifthenelse{\isequivalentto{\LWR@mynexttoken}{\caption}}%
{\let\mynext\LWR@donothing}{}%
%    \end{macrocode}
% Look for other things which would not start a table cell:
%    \begin{macrocode}
\ifthenelse{\isequivalentto{\LWR@mynexttoken}{\multicolumn}}%
{\let\mynext\LWR@donothing}{}%
\ifthenelse{\isequivalentto{\LWR@mynexttoken}{\multirow}}%
{\let\mynext\LWR@donothing}{}%
%    \end{macrocode}
% if come to an |\mrowcell|, this is a cell to be skipped over
%    \begin{macrocode}
\ifthenelse{\isequivalentto{\LWR@mynexttoken}{\mrowcell}}%
{\let\mynext\LWR@donothing}{}%
%
\ifthenelse{\isequivalentto{\LWR@mynexttoken}{\hline}}%
{\let\mynext\LWR@donothing}{}%
%
\ifthenelse{\isequivalentto{\LWR@mynexttoken}{\toprule}}%
{%
\let\mynext\LWR@donothing}{}%
%
\ifthenelse{\isequivalentto{\LWR@mynexttoken}{\midrule}}%
{\let\mynext\LWR@donothing}{}%
%
\ifthenelse{\isequivalentto{\LWR@mynexttoken}{\cmidrule}}%
{\let\mynext\LWR@donothing}{}%
%
\ifthenelse{\isequivalentto{\LWR@mynexttoken}{\cline}}%
{\let\mynext\LWR@donothing}{}%
%
\ifthenelse{\isequivalentto{\LWR@mynexttoken}{\bottomrule}}%
{\let\mynext\LWR@donothing}{}%
%
\ifthenelse{\isequivalentto{\LWR@mynexttoken}{\warpprintonly}}
{\let\mynext\LWR@donothing}{}%
%
\ifthenelse{\isequivalentto{\LWR@mynexttoken}{\warpHTMLonly}}
{\let\mynext\LWR@donothing}{}%
%    \end{macrocode}
% no action for an |\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}
\mynext%
}
%    \end{macrocode}
% \end{macro}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}


% \subsection{\textbackslash{}mrowcell}

% \begin{macro}{\mrowcell}
% The user must insert |\mrowcell| into any multirow cells which must be skipped.
% This command has no action during print output.
% \watchout

% \codeall
%    \begin{macrocode}
\begin{warpall}
\newcommand*{\mrowcell}{}
\end{warpall}
%    \end{macrocode}
% \end{macro}



% \subsection{New \textbackslash{}tabular definition}

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}

% \begin{environment}{LWR@tabular} \oarg{vertposition} \marg{colspecs}
%
% The new tabular environment will be |\let| in |\LWR@LwarpStart|,
% since \pkg{siunitx} might redefine tabular in the user's document.
%    \begin{macrocode}
\newenvironment*{LWR@tabular}[2][]
{%
\LWR@traceinfo{tabular started}%
\begingroup%
\addtocounter{LWR@tabulardepth}{1}%
%    \end{macrocode}
% Not yet started a table row:
%    \begin{macrocode}
\global\boolfalse{LWR@startedrow}%
%    \end{macrocode}
% Not yet doing an hline:
%    \begin{macrocode}
\global\boolfalse{LWR@doinghline}%
%    \end{macrocode}
% Not yet doing a top/bottom rule:
%    \begin{macrocode}
\global\boolfalse{LWR@doingtbrule}%
%    \end{macrocode}
% Have not yet found the end of tabular command:
%    \begin{macrocode}
\boolfalse{LWR@exitingtabular}%
%    \end{macrocode}
% Create the |table| tag:
%    \begin{macrocode}
\global\booltrue{LWR@intabularmetadata}%
\LWR@htmlblocktag{table}%
%    \end{macrocode}
% Parse the table columns:
%    \begin{macrocode}
\LWR@parsetablecols{#2}%
%    \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 \# for setting text-align:
%    \begin{macrocode}
\setcounter{LWR@tablecolspos}{1}%
%    \end{macrocode}
% Start looking for midrules:
%    \begin{macrocode}
\LWR@clearmidrules%
%    \end{macrocode}
% |\\| becomes a macro to end the table row:
%    \begin{macrocode}
\let\\\LWR@tabularendofline%
%    \end{macrocode}
% The following may appear before a data cell is created,
% so after doing their actions, we look ahead with |\LWR@getmynextoken|
% to see if the next token might create a new data cell:
%    \begin{macrocode}
\renewcommand*{\hline}{\LWR@domidrule\LWR@getmynexttoken}%
\newcommand*{\midrule}{\LWR@domidrule\LWR@getmynexttoken}%
\NewDocumentCommand{\cmidrule}{o d() m}%
{\LWR@docmidrule[##1](##2){##3}\LWR@getmynexttoken}%
\RenewDocumentCommand{\cline}{m}%
{\LWR@docmidrule{##1}\LWR@getmynexttoken}%
\newcommand*{\toprule}{\LWR@dotbrule\LWR@getmynexttoken}%
\newcommand*{\bottomrule}{\LWR@dotbrule\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 |\LWR@getmynexttoken|.
%    \begin{macrocode}
\let\multicolumn\LWR@tabledatamulticolumntag%
\let\multirow\LWR@tabledatamultirowtag%
\renewcommand*{\mrowcell}{\global\booltrue{LWR@skippingmrowcell}}%
\let\caption\LWR@longtabledatacaptiontag%
%    \end{macrocode}
% Reset for new processing:
%    \begin{macrocode}
\global\boolfalse{LWR@tableparcell}%
\global\boolfalse{LWR@skippingmrowcell}%
%    \end{macrocode}
% Look ahead for a possible table data cell:
%    \begin{macrocode}
\LWR@getmynexttoken%
}%
%    \end{macrocode}
% Ending the environment:
%    \begin{macrocode}
{%
\LWR@closetabledatacell%
\LWR@htmlblocktag{/tr}%
\LWR@htmlblocktag{/table}%
\global\boolfalse{LWR@intabularmetadata}%
%    \end{macrocode}
%    \begin{macrocode}
\addtocounter{LWR@tabulardepth}{-1}%
\endgroup%
}
%    \end{macrocode}
% \end{environment}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}




% \subsection{Array}
% \label{sec:array}

% \DescribePackage{array}
%
% \pkg{array} is also automatically loaded by siunitx.





% \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.
%
% The \pkg{zref} package is used to remember section name, file, and
% lateximage depth and number for each label.
%
% \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 \acro{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 (\acro{HTML} only)
%	\begin{description}
%	\item [\cs{label}:] Adds \acro{HTML} tags (\cref{sec:labels}),
%		plus \cs{splabel} data (\cref{sec:zrefsetup}):
%		\begin{description}
%		\item [zLWR@name:] The section name for this label.
%		\item [zLWR@htmlfilenumer:] The filenumber or name for this label.
%		\item [zLWR@lateximagedepth:] The |lateximagedepth| for this label.
%		\item [zLWR@lateximagenumber:] 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 \acro{HTML} tags.
%		See \cref{sec:references}.
%	\end{description}
% \item [Added by \pkg{amsmath}:] \hfill (print and \acro{HTML})
%	\begin{description}
%	\item [\cs{label}:] Execution is delayed until the math environment is completed.
%	\item [\cs{ltx@label}:] \LaTeX\ \cs{label},
%		(\acro{HTML:}patched by \pkg{lwarp},) later patched by \pkg{cleveref}.
%	\end{description}
% \item [Added by \pkg{cleverref}:] \hfill (print and \acro{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 (\acro{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}.
%
%    \begin{macrocode}
\newcommand*{\@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{zref-titleref} and \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{Zref setup}
% \label{sec:zrefsetup}

% See: \\
% \href{http://tex.stackexchange.com/questions/57194/extract-section-number-from-equation-reference}
%    {\ttfamily http://tex.stackexchange.com/questions/57194/ \\
%		\hspace*{2em}extract-section-number-from-equation-reference}
%
% Create a new property list called special:
%    \begin{macrocode}
\zref@newlist{special}
%    \end{macrocode}
% Define a new property which has the name of the most recently declared section:
%    \begin{macrocode}
\zref@newprop{zLWR@name}{\@currentlabelname}
%    \end{macrocode}
% Define a new property which has either a filename or a file number:
%    \begin{macrocode}
\zref@newprop{zLWR@htmlfilenumber}{%
\ifbool{FileSectionNames}{\LWR@thisfilename}{\theLWR@htmlfilenumber}%
}%
%    \end{macrocode}
% Additional properties for lateximages:
%    \begin{macrocode}
\zref@newprop{zLWR@lateximagedepth}{\arabic{LWR@lateximagedepth}}
\zref@newprop{zLWR@lateximagenumber}{\arabic{LWR@lateximagenumber}}
%    \end{macrocode}
%
% |zLWR@htmlfilenumber| property holds the file number or name
%
% Add a |LWR@htmlfilenumber| property, and lateximage properties to special:
%    \begin{macrocode}
\zref@addprop{special}{zLWR@name}
\zref@addprop{special}{zLWR@htmlfilenumber}
\zref@addprop{special}{zLWR@lateximagedepth}
\zref@addprop{special}{zLWR@lateximagenumber}
%    \end{macrocode}
% Returns the selected field:
%    \begin{macrocode}
\newcommand*{\LWR@spref}[2]{%
\zref@extractdefault{#1}{#2}{??}}
%    \end{macrocode}
% \begin{macro}{\LWR@nameref} \marg{label}
% Returns the section name for this label:
%    \begin{macrocode}
\newcommand*{\LWR@nameref}[1]{%
\LWR@spref{#1}{zLWR@name}%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\LWR@htmlfileref} \marg{label}
% \changes{v0.24}{2017/03/13}{Fix: Index links while \cs{tracinglwarp}.}
% Returns the file number for this label:
%    \begin{macrocode}
\newcommand*{\LWR@htmlfileref}[1]{%
% DO NOT USE \LWR@traceinfo HERE!  Will be expanded.
\LWR@spref{#1}{zLWR@htmlfilenumber}%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\LWR@lateximagedepthref} \marg{label}
% Returns the |lateximagedepth| for this label:
%    \begin{macrocode}
\newcommand*{\LWR@lateximagedepthref}[1]{%
\LWR@spref{#1}{zLWR@lateximagedepth}%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\LWR@lateximagenumberref} \marg{label}
% Returns the |lateximagenumber| for this label:
%    \begin{macrocode}
\newcommand*{\LWR@lateximagenumberref}[1]{%
\LWR@spref{#1}{zLWR@lateximagenumber}%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\LWR@splabel} \marg{label}
% Sanitize the name and then creates the label:
%    \begin{macrocode}
\newcommand*{\LWR@splabel}[1]{%
\LWR@setlatestname{\@currentlabelname}%
\zref@labelbylist{#1}{special}}
%    \end{macrocode}
% \end{macro}




% \subsection{Labels}
% \label{sec:labels}


% \begin{macro}{\LWR@subsublabel} \marg{label} \quad
% Creates an \acro{HTML} id tag.
%    \begin{macrocode}
\newcommand*{\LWR@subsublabel}[1]{%
%    \end{macrocode}
% Create an \acro{HTML} id tag unless are inside a lateximage,
% since it would appear in the image:
%    \begin{macrocode}
\ifthenelse{\cnttest{\value{LWR@lateximagedepth}}{>}{0}}%
{}%
{% not lateximage
%    \end{macrocode}
% If not doing a lateximage, create an \acro{HTML} ID tag:
% (To be factored\dots)
%    \begin{macrocode}
\ifbool{LWR@doingstartpars}%
{% pars allowed
\ifbool{LWR@doingapar}
{% par started
\LWR@htmltag{a id="#1"{}}\LWR@htmltag{/a}%
}% par started
{% par not started
\LWR@stoppars%
\LWR@htmltag{a id="#1"{}}\LWR@htmltag{/a}%
\LWR@startpars%
}% par not started
}% pars allowed
{% pars not allowed
\LWR@htmltag{a id="#1"{}}\LWR@htmltag{/a}%
}% pars not allowed
}% not lateximage
}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\LWR@newlabel} \marg{label} \oarg{type}
%
% \cs{label} during \acro{HTML} output when not in math mode,
% removing extra spaces around the label, as done by regular \LaTeX\ \cs{label}.
%
% \pkg{clevereref} later encases this to add its own cross-referencing.
%
% The optional \meta{type} is per the \pkg{ntheorem} package, and is ignored.
%    \begin{macrocode}
\NewDocumentCommand{\LWR@newlabel}{m o}{%
\LWR@traceinfo{LWR@newlabel: starting}%
\LWR@traceinfo{LWR@newlabel: !#1!}%
% \@bsphack%
%    \end{macrocode}
% Create a traditional LaTeX label, as modified by \pkg{cleveref}:
%    \begin{macrocode}
\LWR@origlabel{#1}%
%    \end{macrocode}
% Create a special label which holds the section number,
% |LWR@htmlfilenumber|, |LWR@lateximagedepth|, and |LWR@lateximagenumber|:
%    \begin{macrocode}
\LWR@traceinfo{LWR@newlabel: filesectionnames is \ifbool{FileSectionNames}{true}{false}}%
\LWR@traceinfo{LWR@newlabel: LWR@thisfilename is !\LWR@thisfilename!}%
\LWR@traceinfo{LWR@newlabel: LWR@htmlfilenumber is \theLWR@htmlfilenumber}%
\LWR@splabel{#1}%
\LWR@subsublabel{#1}%
% \@esphack%
\LWR@traceinfo{LWR@newlabel: done}%
}
%    \end{macrocode}
% \end{macro}
%




% \subsection{References}
% \label{sec:references}

% \begin{macro}{\LWR@startref} \marg{label} \quad
% (Common code for |\ref| and |\nameref|.)
%
% Open an \acro{HTML} tag reference to a filename, \# character, and a label.
%
%    \begin{macrocode}
\newcommand*{\LWR@startref}[1]
{%
\edef\LWR@lidref{\LWR@lateximagedepthref{#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@htmlrefsectionfilename{#1}%
\LWR@traceinfo{LWR@startref C}%
\#%
%    \end{macrocode}
% Create the destination id:
%
% See if |LWR@lateximagedepth| is unknown:
%    \begin{macrocode}
\LWR@traceinfo{LWR@startref D: !#1!}%
\ifthenelse{\equal{\LWR@lidref}{??}}%
%    \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}
{%
\LWR@traceinfo{LWR@startref D1: \LWR@lidref}%
\ifthenelse{\cnttest{\LWR@lidref}{>}{0}}%
{%
\LWR@traceinfo{LWR@startref D2: \LWR@lidref}%
lateximage\LWR@lateximagenumberref{#1}%
}%
{%
\LWR@traceinfo{LWR@startref D3}%
#1%
}%
}%
\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@origref{#2}%
\LWR@htmltag{/a}%
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\ref} * \marg{label} \quad \cs{ref} is \cs{let} to \cs{LWR@newref}
% \begin{macro}{\LWR@newref} * \marg{label} \quad
% Create an internal document reference link,
% or without a link if starred per \pkg{hyperref}.
%    \begin{macrocode}
\NewDocumentCommand{\LWR@newref}{s m}{%
\LWR@traceinfo{LWR@newref #2}%
\IfBooleanTF{#1}%
{\LWR@origref{#2}}%
{\LWR@subnewref{#2}{#2}}%
}
%    \end{macrocode}
% \end{macro}
% \end{macro}


% \begin{macro}{\pagerefPageFor} Text for starred 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@newpageref}{s m}{%
\IfBooleanTF{#1}%
{(\pagerefPageFor\LWR@origref{#2})}%
{(\cpageref{#2})}%
}
%    \end{macrocode}
% \end{macro}


% \begin{macro}{\nameref} \marg{label}
%    \begin{macrocode}
\newcommand*{\nameref}[1]{%
\LWR@traceinfo{nameref A}%
\LWR@startref{#1}%
\LWR@traceinfo{nameref B}%
\LWR@nameref{#1}%
\LWR@traceinfo{nameref C}%
\LWR@htmltag{/a}%
\LWR@traceinfo{nameref D}%
}
%    \end{macrocode}
% \end{macro}


% \begin{macro}{\Nameref} \marg{label}
% In print, adds the page number.  In \acro{HTML}, does not.
%    \begin{macrocode}
\let\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.
%
% Any reference to |\usepackage{hyperref}| must be placed inside a \env{warpprint} environment.
% \watchout
%    \begin{macrocode}
% DO NOT TELL OTHER PACKAGES TO ASSUME HYPERREF:
% \EmulatesPackage{hyperref}[2015/08/01]% Disabled.  Do not do this.
%    \end{macrocode}

% Create a link with a text name:

% \begin{macro}{\LWR@subhyperref} \marg{URL} \marg{text}
% \changes{v0.18}{2016/04/14}{Improved HTML output linebreaks.}
%    \begin{macrocode}
\NewDocumentCommand{\LWR@subhyperref}{m +m}{%
\LWR@htmltag{a href="{#1}" target="\_{}blank"\LWR@orignewline}#2\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.}
%    \begin{macrocode}
\NewDocumentCommand{\LWR@subhyperrefclass}{m +m m}{%
\LWR@htmltag{a href="{#1}"
class="#3"\LWR@orignewline}#2\LWR@htmltag{/a}%
\LWR@ensuredoingapar%
}
%    \end{macrocode}
% \end{macro}



% \begin{macro}{\href} \oarg{options} \marg{URL} \marg{text}
%
% Create a link with accompanying text:
%    \begin{macrocode}
\NewDocumentCommand{\LWR@hrefb}{O{} m +m}{%
\LWR@subhyperref{#2}{#3}%
\endgroup%
\LWR@ensuredoingapar%
}

\newcommand{\href}{%
\LWR@ensuredoingapar%
\begingroup%
\catcode`\_=12
\LWR@hrefb%
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\nolinkurl} \marg{URL}
%
% Print the name of the link without creating the link:
%    \begin{macrocode}
\newcommand*{\LWR@nolinkurlb}[1]{#1\endgroup\LWR@ensuredoingapar}

\newcommand{\nolinkurl}{%
\LWR@ensuredoingapar%
\begingroup\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:
%    \begin{macrocode}
\newcommand*{\LWR@urlb}[1]{%
\href{#1}{#1}%
\endgroup%
\LWR@ensuredoingapar%
}

\newcommand{\url}{%
\LWR@ensuredoingapar%
\begingroup\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}{Surpress extra space.}
%
%    \begin{macrocode}
\newcommand*{\LWR@subinlineimage}[5][]{%
\ifthenelse{\equal{#1}{}}%
{\LWR@htmltag{img src="#3.#4" alt="#3" style="#5" class="#2"{}}}%
{\LWR@htmltag{img src="#3.#4" alt="#1" style="#5" class="#2"{}}}%
}
%    \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 <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 \cs{begin}|{figure}|
% \item [\cs{end<type>}:] Ends the float environment. |\endfigure| or \cs{end}|{figure}|
% \item [\cs{tf@<ext>}:] The \LaTeX{} file identifier for the output file.
% \item [\texttt{LWR@have<type>}:] A boolean rememebering whether a \cs{listof} was
%	requested for a float of this type.
% \item [File with extension lo<f,t,a-z>:] An output file containing
%	the commands to build the
%	\cs{listof}{<type>}{<name>} ``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 captions}
% \label{sec:floatcaptions}

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}


% \begin{macro}{\LWR@floatbegin} \marg{type} \oarg{placement}
%
% Begins a \cs{newfloat} environment.
%    \begin{macrocode}
\NewDocumentCommand{\LWR@floatbegin}{m o}{%
\LWR@stoppars
%    \end{macrocode}
% There is a new float, so increment the unique float counter:
%    \begin{macrocode}
\addtocounter{LWR@thisfloat}{1}%
\booltrue{LWR@freezethisfloat}%
%    \end{macrocode}
%
%    \begin{macrocode}
\begingroup
%    \end{macrocode}
% Settings while inside the environment:
%    \begin{macrocode}
\LWR@origraggedright
%    \end{macrocode}
% Open an \acro{HTML} |figure| tag:
%    \begin{macrocode}
\LWR@htmltag{figure id="autofloat-\arabic{LWR@thisfloat}" class="#1"}
%    \end{macrocode}
%    \begin{macrocode}
\renewcommand*{\@captype}{#1}
\caption@settype{#1}
\LWR@startpars
}
%    \end{macrocode}
% \end{macro}
%
%
% \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}{%
\LWR@stoppars%
\LWR@htmlelementend{figure}%
\endgroup%
\boolfalse{LWR@freezethisfloat}%
\LWR@startpars%
}
%    \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}



% \DescribeCounter{LWR@thisfloat}
% 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@thisfloat}
%    \end{macrocode}

% \DescribeBoolean{LWR@freezethisfloat}
% Prevents multiple increments of \cs{LWR@thisfloat} inside a float.
%    \begin{macrocode}
\newbool{LWR@freezethisfloat}
\boolfalse{LWR@freezethisfloat}
%    \end{macrocode}

% \begin{macro}{\LWR@maybeincthisfloat}
%    \begin{macrocode}
\newcommand*{\LWR@maybeincthisfloat}{%
\ifbool{LWR@freezethisfloat}{}{\addtocounter{LWR@thisfloat}{1}}%
}
%    \end{macrocode}
% \end{macro}


% \begin{macro}{\@captype}
% Remembers which float type is in use.
%    \begin{macrocode}
\newcommand*{\@captype}{}
%    \end{macrocode}
% \end{macro}


% \subsubsection{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]{#1\CaptionSeparator#2}}
%    \end{macrocode}
% \end{macro}


% \subsubsection{Caption and LOF linking and tracking}

% When a new \acro{HTML} file is marked in the \LaTeX\ \acro{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 |autofloat| \acro{HTML} \acro{ID}
% in the \acro{HTML} output at the start of the new \acro{HTML} file.
% Meanwhile, there is a float counter used to generate an \acro{HTML} |autofloat|
% \acro{ID}s at the start of the float itself in the \acro{HTML} file.
% The |autopage| and |autofloat| 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 \acro{HTML} links in the List of Figures, etc.
%
% \DescribeCounter{LWR@nextautofloat} Tracks autofloat for floats.
% \DescribeCounter{LWR@nextautopage} Tracks autopage for floats.
%
% These are updated per float as the |.lof| file is read.
%    \begin{macrocode}
\newcounter{LWR@nextautofloat}
\newcounter{LWR@nextautopage}
%    \end{macrocode}
%
%
% \begin{macro}{\LWRsetnextfloat} \marg{autopage} \marg{autofloat}
%
% This is written to the |.lof| file just before each float's usual entry.
% The autopage and autofloat are remembered for \cs{l@figure} to use when
% creating the \acro{HTML} links.
%
%    \begin{macrocode}
\newcommand*{\LWRsetnextfloat}[2]{%
\setcounter{LWR@nextautopage}{#1}%
\setcounter{LWR@nextautofloat}{#2}%
}
%    \end{macrocode}
% \end{macro}

% \DescribeCounter{LWR@latestautopage}
% Updated each time a new \acro{HTML} file is begun.
% \cs{LWRsetnextfloat} is written with this and the autofloat
% by the modified \cs{addcontentsline} just before each float's entry.
%    \begin{macrocode}
\newcounter{LWR@latestautopage}% updated each new HTML file
\setcounter{LWR@latestautopage}{1}
%    \end{macrocode}

%    \begin{macrocode}
\let\LWR@origcaption@begin\caption@begin
\let\LWR@origcaption@end\caption@end
\let\LWR@orig@@par\@@par
%    \end{macrocode}

% \begin{macro}{\LWR@caption@begin}
% Low-level patches to create \acro{HTML} tags for captions.
%    \begin{macrocode}
\newcommand{\LWR@caption@begin}
{
\LWR@traceinfo{LWR@caption@begin}%
%    \end{macrocode}
% Keep par and minipage changes local:
%    \begin{macrocode}
\begingroup%
%    \end{macrocode}
% The \pkg{caption} code was not allowing the closing |par| tag:
%    \begin{macrocode}
\renewcommand{\@@par}{\LWR@closeparagraph\LWR@orig@@par}%
%    \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 \acro{HTML} tag:
%    \begin{macrocode}
\LWR@htmlblocktag{figcaption}%
\LWR@origcaption@begin%
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\LWR@caption@end}
% Low-level patches to create \acro{HTML} tags for captions.
%    \begin{macrocode}
\newcommand{\LWR@caption@end}
{%
\LWR@origcaption@end%
%    \end{macrocode}
% Subcaptions were being over-written by the closing \acro{HTML} tag:
%    \begin{macrocode}
\vspace*{\baselineskip}%
%    \end{macrocode}
% Closing tag:
%    \begin{macrocode}
\LWR@htmlblocktag{/figcaption}%
\endgroup%
% \leavevmode% avoid bad space factor (0) error
\LWR@traceinfo{LWR@caption@end: done}%
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\caption@begin}
% \begin{macro}{\caption@end}
% Low-level patches to create \acro{HTML} tags for captions.
%    \begin{macrocode}
\AtBeginDocument{
\let\caption@begin\LWR@caption@begin
\let\caption@end\LWR@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 \acro{HTML} anchor.
%    \begin{macrocode}
\let\LWR@origcaptionlistentry\captionlistentry

\renewcommand*{\captionlistentry}{%
\LWR@maybeincthisfloat%
\LWR@ensuredoingapar%
\LWR@htmltag{a id="autofloat-\arabic{LWR@thisfloat}"{}}\LWR@htmltag{/a}%
\LWR@origcaptionlistentry%
}

\def\LWR@LTcaptionlistentry{%
\LWR@ensuredoingapar%
\LWR@htmltag{a id="autofloat-\arabic{LWR@thisfloat}"{}}\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 autofloat 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.}
%
%    \begin{macrocode}
\let\LWR@origaddcontentsline\addcontentsline

\renewcommand*{\addcontentsline}[3]{%
\ifthenelse{\equal{#1}{toc}}{}{%
\ifthenelse{\equal{#1}{thm}}{\csdef{ext@#2}{thm}}{}
\addtocontents{\@nameuse{ext@#2}}{%
\protect\LWRsetnextfloat%
{\arabic{LWR@latestautopage}}%
{\arabic{LWR@thisfloat}}%
}% addtocontents
}% not toc
\LWR@origaddcontentsline{#1}{#2}{#3}%
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\captionof}
% Patched to track the float number since this is used outside a float,
% and also create an \acro{HTML} anchor for the virtual float.
%    \begin{macrocode}
\AtBeginDocument{
\let\LWR@origcaptionof\captionof

\renewcommand*{\captionof}{%
\LWR@maybeincthisfloat%
\LWR@stoppars
\LWR@htmltag{a id="autofloat-\arabic{LWR@thisfloat}"{}}\LWR@htmltag{/a}%
\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, LOT.
%
% The |.toc|, |.lof|, and |.lot| files are named by the source code \cs{jobname}.
%
% In \acro{HTML}, the printed tables are placed inside a div of class |.toc|, |.lof|, or |.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 \acro{HTML} output.

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}


% \subsection{Reading and printing the TOC}

% \begin{macro}{\LWR@myshorttoc} \marg{toc/lof/lot}
% \changes{v0.18}{2016/05/19}{Reorganize \cs{HomeHTMLFilename} logic.}
%
% Reads in and prints the \acro{TOC}/\acro{LOF}/\acro{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 \acro{TOC} may be referred to again in each \acro{HTML} page, and is
% used for the side\acro{TOC}.
%    \begin{macrocode}
\newcommand*{\LWR@myshorttoc}[1]{
\LWR@ensuredoingapar
%    \end{macrocode}
% Only if the file exists:
%    \begin{macrocode}
\IfFileExists{\jobname.#1}{
%    \end{macrocode}
% Make |@| a regular letter.
% Many of the commands in the file will have |@| characters in them, so |@|
% \watchout
% must be made a regular letter.
%
% For |pdflatex|, also change to |latin1| encoding.
% When reading back a file with accented characters,
% \watchout[disabled]
% the encoding change seems to be required, rather than leaving it |utf8|.
%    \begin{macrocode}
\begingroup
% \ifxetexorluatex%
% \else
% \inputencoding{latin1}% currently disabled
% \fi
\makeatletter
%    \end{macrocode}
% Read in the \acro{TOC} file:
%    \begin{macrocode}
\@input{\jobname.#1}
% \makeatother
\endgroup
}%
{}%
}
%    \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{\LWR@depthsection}}
{\LWR@closeprevious{\LWR@depthchapter}}
%    \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 \acro{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}

%
% Patch \cs{@starttoc} to encapsulate the \acro{TOC} inside \acro{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}
%
% Patch \cs{tableofcontents}, etc. to print footnotes first.
% \pkg{newfloat} uses \cs{listoffigures} for all future float types.
%    \begin{macrocode}
\let\LWR@origtableofcontents\tableofcontents
\let\LWR@origlistoffigures\listoffigures
\let\LWR@origlistoftables\listoftables
\renewcommand*{\tableofcontents}{%
%    \end{macrocode}
% Copy the |.toc| file to |.sidetoc| for printing the sidetoc.
% The original |.toc| file is renewed when \cs{tableofcontents} is finished.
%    \begin{macrocode}
\LWR@copyfile{\jobname.toc}{\jobname.sidetoc}%
\LWR@printpendingfootnotes
\LWR@origtableofcontents%
}
\renewcommand*{\listoffigures}{
\LWR@printpendingfootnotes
\LWR@origlistoffigures
}

\renewcommand*{\listoftables}{
\LWR@printpendingfootnotes
\LWR@origlistoftables
}
%    \end{macrocode}


% \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.
%    \begin{macrocode}
\NewDocumentCommand{\listof}{m +m}{%
\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.\csuse{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.
%
% \acro{CSS} may be used to format the sideTOC:
%
% \begin{docsidebar}[CSS related to sideTOC:]
% \begin{description}[parsep=0ex]
% \item [|nav.sidetoc|:] The entire sideTOC.
% \item [|div.sidetoctitle|:] The title.
% \item [|div.sidetoccontents|:] The table of contents.
% \end{description}
% \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 sidetoc.
%
%    \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@stoppars

%    \end{macrocode}
% The entire sideTOC is placed into a |nav| of class |sidetoc|.
%    \begin{macrocode}
\LWR@htmlelementclass{nav}{sidetoc}

\setcounter{tocdepth}{\value{SideTOCDepth}}

%    \end{macrocode}
% The title is placed into a div of class |sidetoctitle|, and may
% contain paragraphs.
%    \begin{macrocode}
\begin{BlockClass}{sidetoctitle}
\sidetocname
\end{BlockClass}
%    \end{macrocode}
% The table of contents is placed into a div of class |sidetoccontents|.
%    \begin{macrocode}
\begin{BlockClass}{sidetoccontents}
\LinkHome

\LWR@myshorttoc{sidetoc}
\end{BlockClass}
\LWR@htmlelementclassend{nav}{sidetoc}
}
%    \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:
%    \begin{macrocode}
\renewcommand*{\numberline}[1]{%
\LWR@sectionnumber{#1}%
}
%    \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.
%
% \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}{%
%    \end{macrocode}
% Respond to tocdepth:
%    \begin{macrocode}
\ifthenelse{\cnttest{#1}{<=}{\value{tocdepth}}}{%
\LWR@startpars%
%    \end{macrocode}
% Create an \acro{HTML} link to filename\#autosec-(page), with text of the caption,
% of the given \acro{HTML} class.
%    \begin{macrocode}
\LWR@subhyperrefclass{%
\LWR@htmlrefsectionfilename{autopage-#4}\#autosec-#4}{#3}{toc#2}%
\LWR@stoppars%
}
{}
}
%    \end{macrocode}
% \end{macro}

% \DescribeCounter{lofdepth} \acro{TOC} depth for figures.
%    \begin{macrocode}
\newcounter{lofdepth}
\setcounter{lofdepth}{1}
%    \end{macrocode}

% \DescribeCounter{lotdepth} \acro{TOC} depth for tables.
%    \begin{macrocode}
\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 \texttt{lofdepth}, \texttt{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 \acro{HTML} link to
% filename\#autofloat-(float number), with text of the caption,
% of the given \acro{HTML} class.
%    \begin{macrocode}
\LWR@subhyperrefclass{%
\LWR@htmlrefsectionfilename{autopage-\arabic{LWR@nextautopage}}%
\#autofloat-\arabic{LWR@nextautofloat}}%
{#4}{toc#2}%
\LWR@stoppars%
}{}%
}
%    \end{macrocode}
% \end{macro}

% Automatically called by |\contentsline|:
%    \begin{macrocode}
\renewcommand{\l@part}[2]{\hypertoc{-1}{part}{#1}{#2}}
\DeclareDocumentCommand{\l@chapter}{m m}
	{\hypertoc{0}{chapter}{#1}{#2}}
\renewcommand{\l@section}[2]{\hypertoc{1}{section}{#1}{#2}}
\renewcommand{\l@subsection}[2]{\hypertoc{2}{subsection}{#1}{#2}}
\renewcommand{\l@subsubsection}[2]
	{\hypertoc{3}{subsubsection}{#1}{#2}}
\renewcommand{\l@paragraph}[2]{\hypertoc{4}{paragraph}{#1}{#2}}
\renewcommand{\l@subparagraph}[2]{\hypertoc{5}{subparagraph}{#1}{#2}}
\renewcommand{\l@figure}[2]{\hypertocfloat{1}{figure}{lof}{#1}{#2}}
\renewcommand{\l@table}[2]{\hypertocfloat{1}{table}{lot}{#1}{#2}}
%    \end{macrocode}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}



% \section{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/\\
%		\hspace*{2em}how-to-mention-section-number-in-index-created-by-imakeidx}}

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}

% \begin{macro}{\LWR@indexsection}
%
% Controls whether the index will be in a section or a chapter, depending on
% the documentclass.
%    \begin{macrocode}
\@ifundefined{chapter}
	{\newcommand*{\LWR@indexsection}{\section{\indexname}}}
	{\newcommand*{\LWR@indexsection}{\chapter{\indexname}}}
%    \end{macrocode}
% \end{macro}


% \begin{macro}{\printindex}
%    \begin{macrocode}
\let\LWR@origprintindex\printindex

\renewcommand*{\printindex}
{
\LWR@indexsection
\LWR@startpars
\LWR@origprintindex
}
%    \end{macrocode}
% \end{macro}

% \begin{environment}{theindex}
%    \begin{macrocode}
\renewenvironment*{theindex}{%
\let\item\LWR@indexitem%
\let\subitem\LWR@indexsubitem%
\let\subsubitem\LWR@indexsubsubitem%
}{}
%    \end{macrocode}
% \end{environment}


% \begin{macro}{\LWR@indexitem}
%    \begin{macrocode}
\newcommand{\LWR@indexitem}{

\InlineClass{indexitem}{}
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\LWR@indexitem}
%    \begin{macrocode}
\newcommand{\LWR@indexsubitem}{

\InlineClass{indexsubitem}{}
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\LWR@indexitem}
%    \begin{macrocode}
\newcommand{\LWR@indexsubsubitem}{

\InlineClass{indexsubsubitem}{}
}
%    \end{macrocode}
% \end{macro}



% \begin{macro}{\hyperindexref} \marg{autosecnumber}
%
% |\hyperindexref{web address}| is inserted into |*.ind| by
% the xindy style file |lwarp_html.xdy|
%
% \changes{v0.20}{2016/12/19}{Print mode provided in case hyperref not used.}
%    \begin{macrocode}
\newcommand*{\hyperindexref}[1]{
\LWR@htmltag{a href="%
%    \end{macrocode}
% Create an \acro{HTML} reference to the autosection:
%    \begin{macrocode}
\LWR@htmlrefsectionfilename{autopage-#1}\#autosec-#1"{}}%
%    \end{macrocode}
% Add the section number and section name, then close the tag:
%    \begin{macrocode}
\LWR@origref{autopage-#1}\enskip\LWR@nameref{autopage-#1}%
\LWR@htmltag{/a}%
}
%    \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}




% \section{Math}
% \label{sec:math}
%
% \limitsmath
%
%
% \label{ex:mathjaxmacros}
% As an example of using custom \LaTeX\ macros with MathJax,
% \margintag{custom MathJax macros}
% place the following at the start of the document,
% after |\begin{document}|:
% \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
% \begin{warpHTML}  % Only for HTML output,
% \ifbool{mathjax}  % and only for MathJax output:
% {
% \(  % New macros for MathJax are placed inside a math expression:
% \newcommand{\expval}[1]{\langle#1\rangle}
% \newcommand{\abs}[1]{\lvert#1\rvert}
% \)
% }{}
% \end{warpHTML}
% \end{Verbatim}


% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}



% \DescribeMacro{\$}
%	Plain dollar signs appearing in the \acro{HTML} output may be interpreted
%	by MathJax to be math shifts.
%	For a plain text dollar |\$|, print it inside a span to avoid
%	it being interpreted by MathJax, unless are inside a lateximage,
%	in which case it will not be seen by MathJax.
% \changes{v0.19}{2016/06/08}{Avoids MathJax.}
% \changes{v0.26}{2017/03/30}{Dollar span avoided in a lateximage.}
%    \begin{macrocode}
\let\LWR@origtextdollar\$

\renewcommand*{\$}{%
\ifthenelse{\cnttest{\value{LWR@lateximagedepth}}{>}{0}}%
{\LWR@origtextdollar}%
{\LWR@htmltagc{span}\LWR@origtextdollar\LWR@htmltagc{/span}}%
}
%    \end{macrocode}



%
% \DescribeCounter{LWR@externalfilecnt}
% Counter for the external files which are generated and then referenced from the \acro{HTML}:
%    \begin{macrocode}
\newcounter{LWR@externalfilecnt}
%    \end{macrocode}



% \subsection{Inline and display math}

%    \begin{macrocode}
\let\LWR@origdollar=$
\let\secondorigdollar=$% balance for editor syntax highlighting
%    \end{macrocode}

%    \begin{macrocode}
\let\LWR@origopenparen\(
\let\LWR@origcloseparen\)
%    \end{macrocode}

% \DescribeObject{\$}
% \DescribeObject{\$\$}
% Redefine the dollar sign to place math inside a \env{lateximage}, or use MathJax:
%    \begin{macrocode}
\begingroup
\catcode`\$=\active%
\protected\gdef${\@ifnextchar$\LWR@doubledollar\LWR@singledollar}%
%    \end{macrocode}


% \begin{macro}{\LWR@doubledollar}
% \changes{v0.19}{2016/05/25}{MathJax support.}
% Redefine the double dollar sign to place math inside a \env{lateximage}, or use MathJax:
%    \begin{macrocode}
\gdef\LWR@doubledollar$#1$${
\ifbool{mathjax}%
%    \end{macrocode}
% For MathJax, print the math between |\[| and |\]|:
%    \begin{macrocode}
{\textbackslash[\LWR@HTMLsanitize{#1}\textbackslash]}
%    \end{macrocode}
% For SVG, print the math inside a \env{lateximage}, with an ALT tag of the \LaTeX\ code:
%    \begin{macrocode}
{% not mathjax

\begin{lateximage}%
[\textbackslash{[} \LWR@HTMLsanitize{#1} \textbackslash{]}]%
\LWR@origdollar\LWR@origdollar#1\LWR@origdollar\LWR@origdollar%
\end{lateximage}

}
}%
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\LWR@singledollar}
% \changes{v0.19}{2016/05/25}{MathJax support.}
% Redefine the single dollar sign to place math inside a \env{lateximage}, or use MathJax:
%    \begin{macrocode}
\gdef\LWR@singledollar#1${%
\ifbool{mathjax}%
%    \end{macrocode}
% For MathJax, print the math between |\(| and |\)|:
%    \begin{macrocode}
{\textbackslash(\LWR@HTMLsanitize{#1}\textbackslash)}
%    \end{macrocode}
% For SVG, print the math inside a \env{lateximage}, with an ALT tag of the \LaTeX\ code:
%    \begin{macrocode}
{% not mathjax
\begin{lateximage}%
[\textbackslash( \LWR@HTMLsanitize{#1} \textbackslash)]%
\LWR@origdollar#1\LWR@origdollar%
\end{lateximage}%
}%
}%
%    \end{macrocode}
% \end{macro}


% \begin{macro}{\(}
% \begin{macro}{\)}
% Redefine to the above dollar macros.
%    \begin{macrocode}
\gdef\(#1\){$#1$}
\gdef\[#1\]{$$#1$$}

\endgroup
%    \end{macrocode}
% \end{macro}
% \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}{displaymath}
% 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{displaymath}{\expandafter\[\BODY\]\@ignoretrue}
%    \end{macrocode}
% \end{environment}

% When the document begins, the dollar sign must be made active to trigger the new math macros:
%    \begin{macrocode}
\AtBeginDocument{\catcode`\$=\active}
%    \end{macrocode}



% \subsection{MathJax support}
% \changes{v0.19}{2016/05/25}{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 MathJax equation format
% and number for the following equations.
%
% These MathJax commands are printed inside ``\cs{(}'' and ``\cs{)}'' characters.
% They are printed to \acro{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}{
\BlockClassSingle{hidden}{
\textbackslash(
\textbackslash{}seteqsection \{\thechapter\}
\textbackslash)
}
}
{}% not using chapters

%    \end{macrocode}
% MathJax doesn't allow setting the equation number to 1:
%    \begin{macrocode}
\ifthenelse{\cnttest{\value{equation}}>0}
{
%    \end{macrocode}
% Tell 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 MathJax command inside ``\cs{(}'' and ``\cs{)}'' characters,
% to be printed to \acro{HTML}, not interpreted by \LaTeX.
%    \begin{macrocode}
\BlockClassSingle{hidden}{
\textbackslash(
\textbackslash{}seteqnumber \{\arabic{LWR@nextequation}\}
\textbackslash)
}
}{}% not eq > 1
}
%    \end{macrocode}
% \end{macro}
%
%


% \begin{macro}{\LWR@restoremathlatexformatting}
% While producing math, use regular \LaTeX\ formatting instead of \acro{HTML} tags.
%    \begin{macrocode}
\newcommand*{\LWR@restoremathlatexformatting}{%
\let\hspace\LWR@orighspace%
\let\rule\LWR@origrule%
\let\,\LWR@origcomma% disable HTML short unbreakable space
\let\textit\LWR@origtextit%
\let\textbf\LWR@origtextbf%
\let\texttt\LWR@origtexttt%
\let\textsc\LWR@origtextsc%
\let\textsf\LWR@origtextsf%
\let\textrm\LWR@origtextrm%
\renewcommand*{\thefootnote}{\fnsymbol{footnote}}%
\let\textsuperscript\LWR@origtextsuperscript%
\let\textsubscript\LWR@origtextsubscript%
\let~\LWR@origtilde%
\let\enskip\LWR@origenskip%
\let\quad\LWR@origquad%
\let\qquad\LWR@origqquad%
}
%    \end{macrocode}
% \end{macro}


% \begin{macro}{\LWR@hidelatexequation} \marg{environment} \marg{contents}
%
% Creates the \LaTeX{} version of the equation
% inside an \acro{HTML} comment.
%    \begin{macrocode}
\NewDocumentCommand{\LWR@hidelatexequation}{m +m}{%
%    \end{macrocode}
% Stop \acro{HTML} paragraph handling and open an \acro{HTML} comment:
%    \begin{macrocode}
\LWR@stoppars
\LWR@htmlopencomment

%    \end{macrocode}
% Start the LaTeX math environment inside the \acro{HTML} comment:
%    \begin{macrocode}
\begingroup
\csuse{LWR@orig#1}
%    \end{macrocode}
% While in the math environment,
% restore various commands to their \LaTeX\ meanings.
%    \begin{macrocode}
\LWR@restoremathlatexformatting
%    \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 \acro{HTML} comment:
%    \begin{macrocode}
\csuse{LWR@origend#1}
\endgroup

%    \end{macrocode}
% Close the \acro{HTML} comment and resume \acro{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 MathJax instance.
% The contents are printed to \acro{HTML} output, not interpreted by \LaTeX.
%    \begin{macrocode}
\NewDocumentCommand{\LWR@addmathjax}{m +m}{%

%    \end{macrocode}
% Enclose the MathJax environment inside printed ``\cs{(}'' and ``\cs{)}'' characters.
%    \begin{macrocode}
\textbackslash{}begin\{#1\}
%    \end{macrocode}
% Print the contents, sanitizing for \acro{HTML} special characters.
%    \begin{macrocode}
\LWR@HTMLsanitizeexpand{\detokenize\expandafter{#2}}
%    \end{macrocode}
% Close the MathJax environment:
%    \begin{macrocode}
\textbackslash{}end\{#1\}

}
%    \end{macrocode}
% \end{macro}


% \subsection{Equation environment}
%
% Remember existing \env{equation} environment:
%    \begin{macrocode}
\let\LWR@origequation\equation
\let\LWR@origendequation\endequation
%    \end{macrocode}
%
% Remove existing \env{equation} environment:
%    \begin{macrocode}
\let\equation\relax
\let\endequation\relax
%    \end{macrocode}


% \begin{environment}{equation}
% \changes{v0.19}{2016/05/25}{MathJax support.}
% 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}.
%
% For \acro{SVG} math output, 
% the contents are typeset using the original \env{equation}
% inside a \env{lateximage}, along with an ALT tag
% containing a detokenized copy of the \LaTeX\ source for
% the math.
%
% For MathJax output, the contents are typeset in an
% original \env{equation} environment placed inside a \acro{HTML}
% comment, with special processing for \cs{label}s.
% The contents are also printed to the \acro{HTML} output
% for processing by the MathJax script.
%    \begin{macrocode}
\NewEnviron{equation}{%

\ifbool{mathjax}
%    \end{macrocode}
% MathJax output:
%    \begin{macrocode}
{
%    \end{macrocode}
% Print commands to syncronize 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 \acro{HTML} comment:
%    \begin{macrocode}
\LWR@hidelatexequation{equation}{\BODY}
}
%    \end{macrocode}
% SVG output:
% Create the |lateximage| along with an \acro{HTML} 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 ALT tag containing the math source:
%    \begin{macrocode}
\begin{lateximage}[(\theequation) \textbackslash{begin\{equation\}}%
 \LWR@HTMLsanitizeexpand{\detokenize\expandafter{\BODY}}%
 \textbackslash{end\{equation\}}]% alt tag
%    \end{macrocode}
% Create the actual \LaTeX-formatted equation inside
% the |lateximage| using the contents of the environment.
%    \begin{macrocode}
\LWR@origequation
\BODY% contents collected by NewEnviron
\LWR@origendequation
\end{lateximage}%
}

%    \end{macrocode}
% After the environment, if MathJax, print the math to the \acro{HTML} output
% for MathJax processing:
%    \begin{macrocode}
}[\ifbool{mathjax}{\LWR@addmathjax{equation}{\BODY}}{}]
%    \end{macrocode}
% \end{environment}



% \subsection{AMS Math environments}
% \changes{v0.19}{2016/05/25}{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}
% \index{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@htmlmathlabel #1}%
\ifbool{mathjax}{%
%    \end{macrocode}
% The combined \LaTeX\ \& \acro{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 \acro{HTML} comment,
% insert the \LaTeX{} \& \acro{HTML} label, then
% resume the \acro{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 \acro{HTML} comment.
%    \begin{macrocode}
\newcommand*{\LWR@beginhideamsmath}{
\LWR@stoppars

\LWR@htmlopencomment

\begingroup
\LWR@restoremathlatexformatting
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\LWR@endhideamsmath}
% Ends hiding \LaTeX\ math inside an \acro{HTML} comment.
%    \begin{macrocode}
\newcommand*{\LWR@endhideamsmath}{
\endgroup

\LWR@htmlclosecomment

\LWR@startpars
}
%    \end{macrocode}
% \end{macro}




% \subsubsection{Environment patches}
% \changes{v0.19}{2016/05/25}{MathJax support added.}

% The following \pkg{amsmath} environments already collect their contents
% in \cs{@envbody} for further processing.
%
% For \acro{SVG} math: Each envrionment is encapsulated inside a \env{lateximage} environment,
% along with a special |LWRAMSMATHBODY| argument
% telling \env{lateximage} to use as the \acro{HTML} ALT tag the environment's contents which
% were automatically captured by the \AmS{} environment.
%
% For MathJax: Each environment is syched with \LaTeX's equation numbers,
% typeset with \LaTeX\ inside an \acro{HTML} comment, then
% printed to \acro{HTML} output for MathJax to process.
%

% \begin{environment}{multline}
%    \begin{macrocode}
\BeforeBeginEnvironment{multline}{
\ifbool{mathjax}
{
\LWR@syncmathjax
\booltrue{LWR@amsmultline}
\LWR@beginhideamsmath
}
{
\lateximage[LWRAMSMATHBODY]
}
}

\AfterEndEnvironment{multline}{

\ifbool{mathjax}
{
\LWR@endhideamsmath
\boolfalse{LWR@amsmultline}
\LWR@addmathjax{multline}{\the\@envbody}
}
{\endlateximage}

}
%    \end{macrocode}
% \end{environment}


% \begin{environment}{multline*}
%    \begin{macrocode}
\BeforeBeginEnvironment{multline*}{
\ifbool{mathjax}
{
\LWR@syncmathjax
\booltrue{LWR@amsmultline}
\LWR@beginhideamsmath
}
{
\lateximage[LWRAMSMATHBODY]
}
}

\AfterEndEnvironment{multline*}{

\ifbool{mathjax}
{
\LWR@endhideamsmath
\boolfalse{LWR@amsmultline}
\LWR@addmathjax{multline*}{\the\@envbody}
}
{\endlateximage}

}

%    \end{macrocode}
% \end{environment}


% \begin{environment}{gather}
%    \begin{macrocode}
\BeforeBeginEnvironment{gather}{
\ifbool{mathjax}
{
\LWR@syncmathjax
\boolfalse{LWR@amsmultline}
\LWR@beginhideamsmath
}
{
\lateximage[LWRAMSMATHBODY]
}
}

\AfterEndEnvironment{gather}{

\ifbool{mathjax}
{
\LWR@endhideamsmath
\LWR@addmathjax{gather}{\the\@envbody}
}
{\endlateximage}

}
%    \end{macrocode}
% \end{environment}

% \begin{environment}{gather*}
%    \begin{macrocode}
\BeforeBeginEnvironment{gather*}{
\ifbool{mathjax}
{
\LWR@syncmathjax
\boolfalse{LWR@amsmultline}
\LWR@beginhideamsmath
}
{
\lateximage[LWRAMSMATHBODY]
}
}

\AfterEndEnvironment{gather*}{

\ifbool{mathjax}
{
\LWR@endhideamsmath
\LWR@addmathjax{gather*}{\the\@envbody}
}
{\endlateximage}

}
%    \end{macrocode}
% \end{environment}


% \begin{environment}{align}
%    \begin{macrocode}
\BeforeBeginEnvironment{align}{
\ifbool{mathjax}
{
\LWR@syncmathjax
\boolfalse{LWR@amsmultline}
\LWR@beginhideamsmath
}
{
\lateximage[LWRAMSMATHBODY]
}
}

\AfterEndEnvironment{align}{

\ifbool{mathjax}
{
\LWR@endhideamsmath
\LWR@addmathjax{align}{\the\@envbody}
}
{\endlateximage}

}
%    \end{macrocode}
% \end{environment}


% \begin{environment}{align*}
%    \begin{macrocode}
\BeforeBeginEnvironment{align*}{
\ifbool{mathjax}
{
\LWR@syncmathjax
\boolfalse{LWR@amsmultline}
\LWR@beginhideamsmath
}
{
\lateximage[LWRAMSMATHBODY]
}
}

\AfterEndEnvironment{align*}{

\ifbool{mathjax}
{
\LWR@endhideamsmath
\LWR@addmathjax{align*}{\the\@envbody}
}
{\endlateximage}

}
%    \end{macrocode}
% \end{environment}


% \begin{environment}{flalign}
%    \begin{macrocode}
\BeforeBeginEnvironment{flalign}{
\ifbool{mathjax}
{
\LWR@syncmathjax
\boolfalse{LWR@amsmultline}
\LWR@beginhideamsmath
}
{
\lateximage[LWRAMSMATHBODY]
}
}

\AfterEndEnvironment{flalign}{

\ifbool{mathjax}
{
\LWR@endhideamsmath
\LWR@addmathjax{flalign}{\the\@envbody}
}
{\endlateximage}

}
%    \end{macrocode}
% \end{environment}


% \begin{environment}{flalign*}
%    \begin{macrocode}
\BeforeBeginEnvironment{flalign*}{
\ifbool{mathjax}
{
\LWR@syncmathjax
\boolfalse{LWR@amsmultline}
\LWR@beginhideamsmath
}
{
\lateximage[LWRAMSMATHBODY]
}
}

\AfterEndEnvironment{flalign*}{

\ifbool{mathjax}
{
\LWR@endhideamsmath
\LWR@addmathjax{flalign*}{\the\@envbody}
}
{\endlateximage}

}
%    \end{macrocode}
% \end{environment}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}





% \section{Lateximages}

% A |\lateximage| is typeset on its own \acro{PDF} page inside an \acro{HTML} comment
% which starts on the preceeding page and ends on following page, and instructions are written to
% |lateximage.txt| for |lwarpmk| to extract the |\lateximage| from the page of the \acro{PDF} file
% then generate an accompanying |.svg| file image file.  Meanwhile, instructions to
% show this image are placed into the \acro{HTML} file after the comment.
%
% An \acro{HTML} span is created to hold both the \acro{HTML} comment,
% which will have the |pdftotext| conversion,
% and also the link to the final |.svg| image.
%
% A \LaTeX\ label is used to remember which \acro{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.
%
% \limitslateximagefontsize
%
%
%
% \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 |\lateximage| inside of |\lateximage|.
%    \begin{macrocode}
\newcounter{LWR@lateximagedepth}
\setcounter{LWR@lateximagedepth}{0}
%    \end{macrocode}

% Declare the |\LWR@file| for writing
% to generate file |lateximages.txt|:
%    \begin{macrocode}
\ifcsdef{LWR@file}{}{\newwrite{\LWR@file}}
%    \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 \acro{PDF} page number of a lateximage
% to be written into |lateximages.txt|.
%    \begin{macrocode}
\newcounter{LWR@LIpage}
%    \end{macrocode}
%
%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}



% \codeall
%    \begin{macrocode}
\begin{warpall}
%    \end{macrocode}

% \begin{macro}{\LateximageFontSizeName}
% \changes{v0.19}{2016/05/29}{Add: User-adjustable math/lateximage font size.}
% Declares how large to write text in the |\lateximage|.  The |.svg| file text size
% should blend well with the surrounding \acro{HTML} text size.
%
% \emph{Do not include the leading backslash in the name.}
%    \begin{macrocode}
\newcommand*{\LateximageFontSizeName}{large}
%    \end{macrocode}
% \end{macro}

%    \begin{macrocode}
\end{warpall}
%    \end{macrocode}



% \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
% ``\&'', ``\textless'', or ``\textgreater'', which should not be allowed
% inside an \acro{HTML} ALT tag, so must convert them to \acro{HTML} entities.
%
% Two versions follow, depending on expansion needs.
% There may be a better way\dots
%    \begin{macrocode}
\newcommand{\LWR@HTMLsanitize}[1]{%
\protect\StrSubstitute{\detokenize{#1}}%
{\detokenize{&}}%
{\detokenize{&amp;}}[\LWR@strresult]%
\protect\StrSubstitute{\detokenize\expandafter{\LWR@strresult}}%
{\detokenize{<}}%
{\detokenize{&lt;}}%
[\LWR@strresult]%
\protect\StrSubstitute{\detokenize\expandafter{\LWR@strresult}}%
{\detokenize{>}}%
{\detokenize{&gt;}}%
[\LWR@strresult]%
\protect\StrSubstitute{\detokenize\expandafter{\LWR@strresult}}%
{\detokenize{##}}%
{\#}%
[\LWR@strresult]%
\LWR@strresult%
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\LWR@HTMLsanitizeexpand} \marg{text}
%
% This version expands the argument before sanitizing it.
%    \begin{macrocode}
\newcommand{\LWR@HTMLsanitizeexpand}[1]{%
\protect\StrSubstitute{\detokenize\expandafter{#1}}%
{\detokenize{&}}%
{\detokenize{&amp;}}%
[\LWR@strresult]%
\protect\StrSubstitute{\detokenize\expandafter{\LWR@strresult}}%
{\detokenize{<}}%
{\detokenize{&lt;}}%
[\LWR@strresult]%
\protect\StrSubstitute{\detokenize\expandafter{\LWR@strresult}}%
{\detokenize{>}}%
{\detokenize{&gt;}}%
[\LWR@strresult]%
\LWR@strresult%
}
%    \end{macrocode}
% \end{macro}



% \begin{environment}{lateximage} \oarg{alttag}
% \changes{v0.18}{2016/05/18}{Surpress 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.}
%    \begin{macrocode}
\NewDocumentEnvironment{lateximage}{O{image}}{%
\LWR@traceinfo{lateximage: starting on page \arabic{page}}%
\ifthenelse{\cnttest{\value{LWR@lateximagedepth}}{>}{0}}%
%    \end{macrocode}
% If nesting inside an already-existing lateximage, simply record one more level:
%    \begin{macrocode}
{%
\addtocounter{LWR@lateximagedepth}{1}%
}%
%    \end{macrocode}
% Otherwise, this is the outer-most lateximage:
%    \begin{macrocode}
{% start of outer-most lateximage
%    \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, 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:
%    \begin{macrocode}
\setcounterpageref{LWR@LIpage}{LWRlateximage\theLWR@lateximagenumber}%
\LWR@traceinfo{lateximage: LWR@LIpage is \arabic{LWR@LIpage}}%
%    \end{macrocode}
% Create an \acro{HTML} span which will hold the comment which contains the |pdftotext| translation
% of the image's page, and also will hold the link to the |.svg| file:
%    \begin{macrocode}
\LWR@htmltag{span id="lateximage\arabic{LWR@lateximagenumber}" %
class="lateximagesource"{}} \LWR@orignewline
%    \end{macrocode}
% Write instructions to the |lateximages.txt| file:
%    \begin{macrocode}
\immediate\write\LWR@file{|\theLWR@LIpage|\theLWR@externalfilecnt|}%
%    \end{macrocode}
% Place an open comment tag at the bottom of page; footnotes will be above this tag.
% This will hide any traces of the lateximage \acro{PDF} page which were picked up by
% |pdftotext|.
%    \begin{macrocode}
\LWR@htmlopencomment%
\addtocounter{LWR@lateximagedepth}{1}%
%    \end{macrocode}
% Start the new \acro{PDF} page:
%    \begin{macrocode}
\LWR@orignewpage%
%    \end{macrocode}
% Typeset the image in a ``standard'' width page and font size:
%    \begin{macrocode}
\LWR@origminipage{6in}%
\csuse{LWR@orig\LateximageFontSizeName}%
%    \end{macrocode}
% Temporarily restore formatting to its \acro{PDF} definitions:
% Do not produce \acro{HTML} tags for \cs{hspace}, etc. inside a lateximage.
%    \begin{macrocode}
\let\hspace\LWR@orighspace%
\let\rule\LWR@origrule%
\let\,\LWR@origcomma% disable HTML short unbreakable space
\let\textit\LWR@origtextit%
\let\textbf\LWR@origtextbf%
\let\texttt\LWR@origtexttt%
\let\textsc\LWR@origtextsc%
\let\textsf\LWR@origtextsf%
\let\textrm\LWR@origtextrm%
\renewcommand*{\thefootnote}{\fnsymbol{footnote}}%
\let\textsuperscript\LWR@origtextsuperscript%
\let\textsubscript\LWR@origtextsubscript%
\let~\LWR@origtilde%
\let\enskip\LWR@origenskip%
\let\quad\LWR@origquad%
\let\qquad\LWR@origqquad%
\let\tabular\LWR@origtabular%
\let\endtabular\LWR@origendtabular%
\let\newline\LWR@orignewline%
\LWR@origlabel{LWRlateximage\arabic{LWR@lateximagenumber}}%
}% end of outer-most lateximage
}% end of \begin{lateximage}
{% start of \end{lateximage}
\ifthenelse{\cnttest{\value{LWR@lateximagedepth}}{>}{1}}%
%    \end{macrocode}
% If nesting inside an already-existing lateximage, simply record one more level:
%    \begin{macrocode}
{%
\addtocounter{LWR@lateximagedepth}{-1}%
}%
%    \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 \acro{PDF} page:
%    \begin{macrocode}
\LWR@origendminipage%
\LWR@orignewpage%
\LWR@origscriptsize%
%    \end{macrocode}
% Close the \acro{HTML} comment which encapsulated any traces of the lateximage picked up by |pdftotext|:
%    \begin{macrocode}
\LWR@htmlclosecomment{}\LWR@orignewline%
\LWR@traceinfo{lateximage: The page after the image is \arabic{page}}%
%    \end{macrocode}
% Create a link to the lateximage, allowing its natural height:
%
% If the alt tag is given as ``LWRAMSMATHBODY'', then use the text collected by the
% amsmath multline, gather, or align environments.
%    \begin{macrocode}
\ifthenelse{\equal{#1}{LWRAMSMATHBODY}}%
{%
\LWR@subinlineimage[%
\LWR@HTMLsanitizeexpand{\detokenize\expandafter{\the\@envbody}}%
]%
{lateximage}%
{lateximages\OSPathSymbol{}lateximage-\theLWR@externalfilecnt}%
{svg}%
{}%
}%
{%
\LWR@subinlineimage[#1]{lateximage}%
{lateximages\OSPathSymbol{}lateximage-\theLWR@externalfilecnt}{svg}{}%
}%
% \LWR@orignewline% Removed to prevent extra space.
%    \end{macrocode}
% Be sure that are doing a paragraph:
%    \begin{macrocode}
\LWR@ensuredoingapar%
%    \end{macrocode}
% Close the \acro{HTML} span which has the |pdftotext| comment and also the link to the |.svg| image:
%    \begin{macrocode}
\LWR@htmltag{/span}%
\LWR@htmlcomment{End of lateximage}%
% \LWR@orignewline% Removed to prevent extra space.
%    \end{macrocode}
% Undo one lateximage level:
%    \begin{macrocode}
\addtocounter{LWR@lateximagedepth}{-1}%
}% end of outer-most lateximage
\LWR@traceinfo{lateximage: done}
}%
\end{warpHTML}
%    \end{macrocode}
% \codeprint
%    \begin{macrocode}
\begin{warpprint}
\newenvironment{lateximage}[1][]{\minipage{\linewidth}}{\endminipage}
\end{warpprint}
%    \end{macrocode}
% \end{environment}




% \section{\env{center}, \env{flushleft}, \env{flushright}}

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}


% \begin{environment}{center}
% Replace \env{center} functionality with \acro{CSS} tags:
%    \begin{macrocode}
\renewenvironment*{center}
{\BlockClass{center}}
{\endBlockClass}
%    \end{macrocode}
% \end{environment}

% \begin{environment}{flushright}
%    \begin{macrocode}
\renewenvironment*{flushright}
{\BlockClass{flushright}}
{\endBlockClass}
%    \end{macrocode}
% \end{environment}

% \begin{environment}{flushleft}
%    \begin{macrocode}
\renewenvironment*{flushleft}
{\BlockClass{flushleft}}
{\endBlockClass}
%    \end{macrocode}
% \end{environment}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}












% \section{Siunitx}
% \label{sec:siunitx}

% \DescribePackage{siunitx}
%
% \limitssiunitx
%

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}


% Options for siunitx:
%    \begin{macrocode}
\PassOptionsToPackage{
	detect-mode=true,
	per-mode=symbol,	% fraction is not seen by pdftotext
	text-celsius = {\HTMLentity{deg}C},
	text-degree = {\HTMLentity{deg}},
}{siunitx}
%    \end{macrocode}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}






% \section{Graphics}

% \DescribePackage{graphics}
%
% \DescribePackage{graphicx}
%
% \index{images>graphicx package}
%
% \limitsgraphics
%
% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}



% \subsection{\cs{graphicspath}}

% \begin{macro}{\graphicspath} \marg{path}
%    \begin{macrocode}
\newcommand*{\thisgraphicspath}{{}}
\renewcommand*{\graphicspath}[1]{\renewcommand*{\thisgraphicspath}{#1}}
%    \end{macrocode}
% \end{macro}

% ^^A \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
% ^^A \DeclareGraphicsExtensions{.svg,.gif,.png,.jpg}
% ^^A \DeclareGraphicsRule{.svg}{svg}{.png}{}
% ^^A \end{Verbatim}

% \begin{macro}{\DeclareGraphicsExtensions} \marg{list}
% \begin{macro}{\DeclareGraphicsRule} \marg{} \marg{} \marg{} \marg{}
%    \begin{macrocode}
\renewcommand*{\DeclareGraphicsExtensions}[1]{}
\renewcommand*{\DeclareGraphicsRule}[4]{}
%    \end{macrocode}
% \end{macro}
% \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 \acro{HTML} browsers use as much space as the
% \watchout[whitespace]
% original unscaled image would have taken,
% with the scaled image over- or under-flowing the area.

%    \begin{macrocode}
\renewcommand*{\unitspace}{}
%    \end{macrocode}

% Used to store the user's selected dimensions and \acro{HTML} class.
%
% The class defaults to ``inlineimage'' unless changed by a |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}

% Set the actions of each of the key/value combinations for
% \cs{includegraphics}.  Many are ignored.
%
% If an optional width was given, set an \acro{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}
\uselengthunit{PT}%
\renewcommand*{\LWR@igwidthstyle}{width:\rndprintlength{\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 \acro{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}
\uselengthunit{PT}%
\renewcommand*{\LWR@igheightstyle}{%
height:\rndprintlength{\LWR@igheight} %
}%
%    \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:
%    \begin{macrocode}
\define@key{igraph}{origin}{%
\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}
% ^^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.
%    \begin{macrocode}
\define@key{igraph}{scale}{%
\renewcommand*{\LWR@igxscale}{#1}%
\renewcommand*{\LWR@igyscale}{#1}}
%    \end{macrocode}
%
% Numerous ignored keys:
%    \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}{}
\define@key{igraph}{viewport}{}
\define@key{igraph}{trim}{}
\define@key{igraph}{totalheight}{}
\define@key{igraph}{keepaspectratio}{}
\define@key{igraph}{clip}{}
\define@key{igraph}{draft}{}
\define@key{igraph}{type}{}
\define@key{igraph}{ext}{}
\define@key{igraph}{read}{}
\define@key{igraph}{command}{}
%    \end{macrocode}


% \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{macrocode}
\newcommand*{\LWR@imageextension}{}
\newcommand*{\LWR@expgraphicsfilename}{}
%    \end{macrocode}

% \begin{macro}{\LWR@includegraphicsb} \oarg{options} \marg{filename}
% \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.}
%    \begin{macrocode}

\newcommand*{\LWR@includegraphicsb}[2][]
{%
%    \end{macrocode}
% Start the image tag on a new line, allow \acro{PDF} output word wrap:
%    \begin{macrocode}
\LWR@origtilde \LWR@orignewline%
%    \end{macrocode}
% Temporarily compute |\linewidth|, |\textwidth|, |\textheight| arguments with a 6x9 inch size
% until the next |\endgroup|.
%    \begin{macrocode}
\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}
% See if can find the image by adding an extension:
%
% Preference is |svgz|, then |svg|, |gif|, |png|, and |jpg|.
%
% |\detokenize\expandafter| allows underscore characters in filenames.
%
%    \begin{macrocode}
\edef\LWR@expgraphicsfilename{#2}
\renewcommand*{\LWR@imageextension}{}%
\IfFileExists{\detokenize\expandafter\thisgraphicspath\LWR@expgraphicsfilename.jpg}%
{\renewcommand*{\LWR@imageextension}{.jpg}}{}%
\IfFileExists{\detokenize\expandafter\thisgraphicspath\LWR@expgraphicsfilename.JPG}%
{\renewcommand*{\LWR@imageextension}{.JPG}}{}%
\IfFileExists{\detokenize\expandafter\thisgraphicspath\LWR@expgraphicsfilename.png}%
{\renewcommand*{\LWR@imageextension}{.png}}{}%
\IfFileExists{\detokenize\expandafter\thisgraphicspath\LWR@expgraphicsfilename.PNG}%
{\renewcommand*{\LWR@imageextension}{.PNG}}{}%
\IfFileExists{\detokenize\expandafter\thisgraphicspath\LWR@expgraphicsfilename.gif}%
{\renewcommand*{\LWR@imageextension}{.gif}}{}%
\IfFileExists{\detokenize\expandafter\thisgraphicspath\LWR@expgraphicsfilename.GIF}%
{\renewcommand*{\LWR@imageextension}{.GIF}}{}%
\IfFileExists{\detokenize\expandafter\thisgraphicspath\LWR@expgraphicsfilename.svg}%
{\renewcommand*{\LWR@imageextension}{.svg}}{}%
\IfFileExists{\detokenize\expandafter\thisgraphicspath\LWR@expgraphicsfilename.SVG}%
{\renewcommand*{\LWR@imageextension}{.SVG}}{}%
\IfFileExists{\detokenize\expandafter\thisgraphicspath\LWR@expgraphicsfilename.svgz}%
{\renewcommand*{\LWR@imageextension}{.svgz}}{}%
\IfFileExists{\detokenize\expandafter\thisgraphicspath\LWR@expgraphicsfilename.SVGZ}%
{\renewcommand*{\LWR@imageextension}{.SVGZ}}{}%
%    \end{macrocode}
%
% Convert a \acro{PDF} extension to \acro{SVG}, leave the result in |\LWR@strresult|:
%
% Must also |\detokenize| |.pdf| and |.svg| comparison strings.
%    \begin{macrocode}
\StrSubstitute{\detokenize\expandafter{\LWR@expgraphicsfilename}}%
{\detokenize{.pdf}}{\detokenize{.svg}}[\LWR@strresult]%
%
\StrSubstitute{\LWR@strresult}%
{\detokenize{.PDF}}{\detokenize{.SVG}}[\LWR@strresult]%
%    \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}
% 
% Options are in |#1|
% 
%    \begin{macrocode}
\setkeys{igraph}{#1}%
%    \end{macrocode}
% Create the \acro{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}
\href{\thisgraphicspath\LWR@strresult\LWR@imageextension}%
{% start of href
\LWR@htmltag{% start of image tags
img src="\thisgraphicspath\LWR@strresult\LWR@imageextension" \LWR@orignewline
\LWR@origtilde{} alt="\LWR@strresult" \LWR@orignewline
%    \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}
}%
{\LWR@origtilde{} style="%
\ifthenelse{\NOT\equal{\LWR@igwidthstyle}{}}%
{\LWR@igwidthstyle;}{}%
\ifthenelse{\NOT\equal{\LWR@igheightstyle}{}}%
{\LWR@igheightstyle;}{}%
\ifthenelse{\NOT\equal{\LWR@igorigin}{}}%
{\LWR@origtilde{} transform-origin: \LWR@originnames{\LWR@igorigin}; \LWR@orignewline}{}%
\ifthenelse{\NOT\equal{\LWR@igangle}{}}%
{%
\LWR@rotstyle{-ms-}{\LWR@igangle}%
\LWR@rotstyle{-webkit-}{\LWR@igangle}%
\LWR@rotstyle{}{\LWR@igangle%
}}{}%
\ifthenelse{\NOT\equal{\LWR@igxscale}{1}\OR%
\NOT\equal{\LWR@igyscale}{1}}%
{\LWR@scalestyle{-ms-}{\LWR@igxscale}{\LWR@igyscale}%
\LWR@scalestyle{-webkit-}{\LWR@igxscale}{\LWR@igyscale}%
\LWR@scalestyle{}{\LWR@igxscale}{\LWR@igyscale}}{}%
" \LWR@orignewline}{}%
%    \end{macrocode}
% Set the class:
%    \begin{macrocode}
\LWR@origtilde{} class="\LWR@igclass" \LWR@orignewline%
}% end of image tags
}% end of href
\endgroup
%    \end{macrocode}
% Return to small-sized output:
%    \begin{macrocode}
\LWR@origscriptsize
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\includegraphics} \oarg{key=val} \marg{filename}

% Handles width and height, converted to fixed width and heights.

% Converts any |.pdf| references to |.svg| for \acro{HTML}

% The user should always refer to |.pdf| in the document source.

%    \begin{macrocode}
\renewcommand*{\includegraphics}
{%
%    \end{macrocode}
% This graphic should trigger an \acro{HTML} paragraph even if alone,
% so ensure that are doing paragraph handling:
%    \begin{macrocode}
\LWR@ensuredoingapar%
\begingroup%
\LWR@includegraphicsb%
}
%    \end{macrocode}
% \end{macro}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}

% \codeprint
%
% For print output, accept and then discard the new |class| key:
%    \begin{macrocode}
\begin{warpprint}
\define@key{Gin}{class}{}
\end{warpprint}
%    \end{macrocode}


% \subsection{\cs{rotatebox}, \cs{scalebox}, \cs{reflectbox}}

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}

% \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 \acro{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 \acro{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}
%
% Will \cs{let}\cs{rotatebox}\cs{LWR@rotatebox} at \cs{LWR@LwarpStart},
% in case \cs{rotatebox} was over-written by a later package load.
%    \begin{macrocode}
\NewDocumentCommand{\LWR@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 \acro{HTML} will transform this span:
%    \begin{macrocode}
\LWR@htmltagc{span style="display: inline-block; %
%    \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@origtilde}{}%
%    \end{macrocode}
% Print the rotation information:
%    \begin{macrocode}
\LWR@rotstyle{-ms-}{#2} %
\LWR@rotstyle{-webkit-}{#2} %
\LWR@rotstyle{}{#2} %
"{}}\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}
% \end{macro}

% \begin{macro}{\scalebox} \marg{h-scale} \oarg{v-scale} \marg{text}
%
% Will \cs{let}\cs{scalebox}\cs{LWR@scalebox} at \cs{LWR@LwarpStart},
% in case \cs{scalebox} was over-written by a later package load.
%    \begin{macrocode}
\NewDocumentCommand{\LWR@scalebox}{m o m}{%
%    \end{macrocode}
% Select |inline-block| so that \acro{HTML} will transform this span:
%    \begin{macrocode}
\LWR@htmltagc{span style="display: inline-block; %
%    \end{macrocode}
% Print the scaling information:
%    \begin{macrocode}
\LWR@scalestyle{-ms-}{#1}{\IfNoValueTF{#2}{#1}{#2}} %
\LWR@scalestyle{-webkit-}{#1}{\IfNoValueTF{#2}{#1}{#2}} %
\LWR@scalestyle{}{#1}{\IfNoValueTF{#2}{#1}{#2}} %
"{}}%
%    \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}
% \end{macro}

% \begin{macro}{\reflectbox} \marg{text}
%
% Will \cs{let}\cs{reflectbox}\cs{LWR@reflectbox} at \cs{LWR@LwarpStart},
% in case \\
% \cs{reflectbox} was over-written by a later package load.
%    \begin{macrocode}
\newcommand{\LWR@reflectbox}[1]{\LWR@scalebox{-1}[1]{#1}}
%    \end{macrocode}
% \end{macro}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}


% \subsection{Null functions}
%
% These functions are not supported by \pkg{lwarp}'s \acro{HTML} conversion.

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}


% \begin{macro}{\resizebox} \marg{h-length} \marg{v-length} \marg{text}
%
% Simply prints its text argument.
%    \begin{macrocode}
\renewcommand{\resizebox}[3]{#3}
%    \end{macrocode}
% \end{macro}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}





% ^^A \RequirePackage[version=3]{mhchem}
% ^^A 
% ^^A 
% ^^A % use before and after environment hooks
% ^^A \let\LWR@origce\ce
% ^^A 
% ^^A \renewcommand{\ce}[1]{
% ^^A \begin{lateximage}
% ^^A \LWR@origce{#1}
% ^^A \end{lateximage}
% ^^A }
% ^^A 
% ^^A 
% ^^A \RequirePackage{rsphrase}





% \section{Cleverref}
% \label{sec:cleveref}

% \DescribePackage{cleveref}
% \pkg{cleveref} package is used as-is with minor patches.
%
% \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 \acro{HTML} conversion requires \pkg{cleveref}.
% The user's document may not require \pkg{cleveref}, thus the user
% may never explicitly load it, so during \acro{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 \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}

% \changes{v0.19}{2016/06/06}{cleveref: Loaded \cs{AtEndPreamble}.}



%
% \cs{AtEndPreable} forces \pkg{cleveref} to be loaded last:
%
% \changes{v0.19}{2016/06/06}{cleveref: Loaded \cs{AtEndPreamble}.}
%
%
%
% \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}:
% \end{flushleft}
%    \begin{macrocode}
\AfterEndPreamble{
%    \end{macrocode}

% \begin{macro}{\@@setcref} \marg{kindofref} \marg{label}

% ^^A |\@templabel| becomes the section number

% ^^A original: \def\@@setcref#1#2{\cref@getlabel{#2}{\@templabel}#1{\@templabel}{}{}}

%    \begin{macrocode}
\renewcommand*{\@@setcref}[2]{#1{\ref{#2}}{}{}}
%    \end{macrocode}
% \end{macro}

% ^^A orig:
% ^^A  \def\@@setcrefrange#1#2#3{%
% ^^A    \cref@getlabel{#2}{\@labela}%
% ^^A    \cref@getlabel{#3}{\@labelb}%
% ^^A    #1{\@labela}{\@labelb}{}{}{}{}}

%\begin{macro}{\@@setcrefrange} \marg{text} \marg{label} \marg{label}
%    \begin{macrocode}
\renewcommand{\@@setcrefrange}[3]{%
#1{\ref{#2}}{\ref{#3}}{}{}{}{}}
%    \end{macrocode}
% \end{macro}

% ^^A  orig:
% ^^A  \def\@@setcpageref#1#2{%
% ^^A    \cref@getpageref{#2}{\@temppage}#1{\@temppage}{}{}}



% \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''
%
%    \begin{macrocode}
\renewcommand*{\@@setcpageref}[2]{%
#1{\cpagerefFor\ \cref{#2}}{}{}%
}
%    \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}
\renewcommand{\@@setcpagerefrange}[3]{%
#1{\cpagerefFor\ \cref{#2}}{\cref{#3}}{}{}{}{}}
}% AfterEndPreamble
%    \end{macrocode}


%
% Remember and patch some label-related defintions.
% These will be further encased and patched by other packages later.
%
%    \begin{macrocode}
\let\LWR@origlabel\label
\let\label\LWR@newlabel
\let\LWR@origref\ref
\let\ref\LWR@newref%	\end{ syntax highlighting
\let\LWR@origpageref\pageref
\let\pageref\LWR@newpageref



\end{warpHTML}
%    \end{macrocode}





% \section{Picture}
% \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}.}
%    \begin{macrocode}
\BeforeBeginEnvironment{picture}{%
\lateximage%
\let\makebox\LWR@origmakebox%
}

\AfterEndEnvironment{picture}{\endlateximage}
%    \end{macrocode}
% \end{environment}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}





% \section{Boxes and Minipages}
%
% A \acro{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}
%
% Remember the original definitions:
%    \begin{macrocode}
\let\LWR@origminipage\minipage
\let\LWR@origendminipage\endminipage
%    \end{macrocode}
%
%
% \subsection{Footnote handling}
% \label{sec:footnotesminipage}
%
% Also see \cref{sec:footnotes} for other forms of footnotes.
%
%
% \subsection{Minipage handling}
%
% \begin{macro}{\LWR@endminipage}
% Used to close a minipage.
%
% Copied the \LaTeX{} definition and modified to create a |mpfootnotes| div class:
%    \begin{macrocode}
\def\LWR@endminipage{%
    \par
    \unskip
    \ifvoid\@mpfootins\else
      \vskip\skip\@mpfootins
      \normalcolor
		\LWR@htmldivclass{mpfootnotes}
		\LWR@origmedskip
      \unvbox\@mpfootins
		\LWR@htmldivclassend{mpfootnotes}
    \fi
    \@minipagefalse
  \color@endgroup
  \egroup
  \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\LWR@subminipage}
% Used to create a \acro{PDF} minipage without creating an \acro{HTML} minipage.
% This allows footnotes to appear at the bottom of the minipage instead of
% the bottom of the \acro{HTML} page.
%    \begin{macrocode}
\newcommand*{\LWR@subminipage}{%
\LWR@stoppars
\LWR@origminipage{6in}
%    \end{macrocode}
% |\raggedright| cancels hyphenation, which will be done by \acro{HTML} instead.
%    \begin{macrocode}
\LWR@origraggedright%
%    \end{macrocode}
% Resume paragraph tag handling for the contents of the minipage:
%    \begin{macrocode}
\LWR@startpars%
}
%    \end{macrocode}
% \end{macro}


% \begin{macro}{\LWR@endsubminipage}
% Closes the subminipage.
%    \begin{macrocode}
\newcommand*{\LWR@endsubminipage}{%
\LWR@stoppars%
\LWR@endminipage% The following empty line is required:

}
%    \end{macrocode}
% \end{macro}


% \DescribeBoolean{LWR@minipagefullwidth} Should the next minipage have no \acro{HTML} |width|?
%    \begin{macrocode}
\newbool{LWR@minipagefullwidth}
\boolfalse{LWR@minipagefullwidth}
%    \end{macrocode}
%
% \begin{macro}{\minipagefullwidth} Requests that the next minipage
% have no |width| tag in \acro{HTML}:
% \changes{v0.19}{2016/05/28}{Added: No width tag for the next minipage in HTML.}
%
% \codehtml
%
%    \begin{macrocode}
\newcommand*{\minipagefullwidth}{\booltrue{LWR@minipagefullwidth}}
\end{warpHTML}
%    \end{macrocode}
%
% \codeprint
%
%    \begin{macrocode}
\begin{warpprint}
\newcommand*{\minipagefullwidth}{}
\end{warpprint}
%    \end{macrocode}
%
% \codehtml
%
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}
% \end{macro}
%
%
% \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.}
%
% The vertical positions may be 'c', 't', or 'b'.
% The inner position may also be 's'.
%
% When using |\linewidth|, |\textwidth|, or |\textheight|, these are scaled proportionally to a
% 6\texttimes{}9 inch text area.
%
%    \begin{macrocode}
\RenewDocumentEnvironment{minipage}{O{t} o O{t} m}
{%
%    \end{macrocode}
% Pre-compute the given width and height:
%    \begin{macrocode}
%    \end{macrocode}
% Reset the text area if are starting the outer-most minipage:
%    \begin{macrocode}
\LWR@traceinfo{starting minipage of width #4}%
\uselengthunit{in}%
\setlength{\LWR@minipagewidth}{#4}%
\ifthenelse{\cnttest{\value{LWR@minipagedepth}}{=}{0}}{%
\addtolength{\LWR@minipagewidth}{3em}% room for frames
\setlength{\linewidth}{6in}%
\setlength{\textwidth}{6in}%
\setlength{\textheight}{9in}%
}{}%
\LWR@traceinfo{computed width is \rndprintlength{\LWR@minipagewidth}}
\addtocounter{LWR@minipagedepth}{1}%
\setlength{\LWR@minipageheight}{\textheight}% default unless specified
\IfValueTF{#2}{\setlength{\LWR@minipageheight}{#2}}{}%
%    \end{macrocode}
% \LaTeX{} wants to start a paragraph for the new 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}
\LWR@stoppars%
%    \end{macrocode}
% Create the |<div>| tag with optional alignment style:
%    \begin{macrocode}
\LWR@traceinfo{minipage: creating div class}%
\LWR@htmltag{div class="minipage" style="%
\ifthenelse{\equal{#1}{t}}{vertical-align: bottom ; }{}%
\ifthenelse{\equal{#1}{c}}{vertical-align: middle ; }{}%
\ifthenelse{\equal{#1}{b}}{vertical-align: top ; }{}%
\ifthenelse{\equal{#3}{t}}{justify-content: flex-start ; }{}%
\ifthenelse{\equal{#3}{c}}{justify-content: center ; }{}%
\ifthenelse{\equal{#3}{b}}{justify-content: flex-end ; }{}%
\ifthenelse{\equal{#3}{s}}{justify-content: space-between ; }{}%
%    \end{macrocode}
% Print the width and optional height styles:
%    \begin{macrocode}
\LWR@traceinfo{minipage: about to print the width of \rndprintlength{\LWR@minipagewidth}}%
\uselengthunit{PT}%
\ifbool{LWR@minipagefullwidth}%
{\boolfalse{LWR@minipagefullwidth}}%
{%
\ifthenelse{\lengthtest{#4}=\linewidth}%
{}%
{width:\rndprintlength{\LWR@minipagewidth} ; }%
}%
\LWR@traceinfo{minipage: about to print the height}%
\IfValueTF{#2}{height:\rndprintlength{\LWR@minipageheight} ; }{}%
"{}}%
%    \end{macrocode}
% Finish with an empty line to start  \LaTeX{} minipage processing on a new line.
% Use a large minipage area to avoid the unnecessary wrapping of tags.
%    \begin{macrocode}

\LWR@origminipage{6in}% The preceding empty line is required.
%    \end{macrocode}
% Set the user-accessible minipage and text width and height values inside the minipage.
% These do not affect the actual size of the large minipage created by
% \cs{LWR@origminipage} above, but are used by any reference to \cs{linewidth}, etc.
% inside the \acro{PDF} minipage being created here.
%    \begin{macrocode}
\setlength{\linewidth}{#4}% the original width
\setlength{\textwidth}{6in}%
\setlength{\textheight}{9in}%
%    \end{macrocode}
% |\raggedright| cancels hyphenation, which will be done by \acro{HTML} instead.
%    \begin{macrocode}
\LWR@origraggedright%
%    \end{macrocode}
% Resume paragraph tag handling for the contents of the minipage:
%    \begin{macrocode}
\LWR@startpars%
\LWR@traceinfo{minipage: finished starting the minipage}%
}
%    \end{macrocode}
% End the environment with \LaTeX{} processing and closing tag:
%    \begin{macrocode}
{%
\LWR@stoppars%
\LWR@endminipage% The following empty line is required:

\LWR@htmldivclassend{minipage}%
\vspace{1\baselineskip}% required for subcaption
\addtocounter{LWR@minipagedepth}{-1}%
\LWR@startpars%
%    \end{macrocode}
% Prevent paragraph tags around horizontal white space
% until the start of the next paragraph:
%    \begin{macrocode}
\global\booltrue{LWR@minipagethispar}%
}
%    \end{macrocode}
% \end{environment}
%
%
% \subsection{Parbox, makebox, framebox, fbox, raisebox}
%
%
% \begin{macro}{\parbox} \oarg{pos} \oarg{height} \oarg{inner-pos} \marg{width} \marg{text}
%
% A parbox uses the minipage code:
%    \begin{macrocode}
\RenewDocumentCommand{\parbox}{O{t} o O{t} m +m}
{
\LWR@traceinfo{parbox of width #4}%
\begin{minipage}[#1][#2][#3]{#4}
#5
\end{minipage}
}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\makebox} \oarg{width} \oarg{pos} \marg{text}
%
% Width and position are ignored.
%    \begin{macrocode}
\let\LWR@origmakebox\makebox

\RenewDocumentCommand{\makebox}{o o m}{%
\mbox{#3}
}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\framebox} \oarg{width} \oarg{pos} \marg{text}
%
% Width and position are ignored.
%    \begin{macrocode}
\RenewDocumentCommand{\framebox}{o o m}{%
\fbox{#3}
}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\fbox} \marg{text}
%    \begin{macrocode}
\let\LWR@origfbox\fbox
%
\renewcommand*{\fbox}[1]{%
\InlineClass{framebox}{#1}%
}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\raisebox} \marg{raiselen} \oarg{height} \oarg{depth} \marg{text}
%    \begin{macrocode}
\RenewDocumentCommand{\raisebox}{m o o m}{%
#4%
}
%    \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}

% \begin{macro}{\emph} \marg{text}
%    \begin{macrocode}
\renewcommand{\emph}[1]{\LWR@htmlspan{em}{#1}}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\textmd} \marg{text}
%    \begin{macrocode}
\renewcommand{\textmd}[1]{\LWR@htmlspan{textmd}{#1}}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\textbf} \marg{text}
%    \begin{macrocode}
\renewcommand{\textbf}[1]{\LWR@htmlspan{b}{#1}}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\textrm} \marg{text}
%    \begin{macrocode}
\renewcommand{\textrm}[1]{\InlineClass{textrm}{#1}}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\textsf} \marg{text}
%    \begin{macrocode}
\renewcommand{\textsf}[1]{\InlineClass{textsf}{#1}}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\texttt} \marg{text}
%    \begin{macrocode}
\renewcommand{\texttt}[1]{\LWR@htmlspan{kbd}{#1}}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\textup} \marg{text}
%    \begin{macrocode}
\renewcommand{\textup}[1]{\LWR@htmlspan{textup}{#1}}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\textit} \marg{text}
%    \begin{macrocode}
\renewcommand{\textit}[1]{\LWR@htmlspan{i}{#1}}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\textsc} \marg{text}
%    \begin{macrocode}
\renewcommand{\textsc}[1]{\InlineClass{textsc}{#1}}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\textnormal} \marg{text}
%    \begin{macrocode}
\renewcommand{\textnormal}[1]{\textmd{\textrm{\textup{#1}}}}
%    \end{macrocode}
% \end{macro}



% \begin{macro}{\mdseries}
%    \begin{macrocode}
\renewcommand*{\mdseries}{}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\bfseries}
%    \begin{macrocode}
\renewcommand*{\bfseries}{}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\rmfamily}
%    \begin{macrocode}
\renewcommand*{\rmfamily}{}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\sffamily}

%    \begin{macrocode}
\renewcommand*{\sffamily}{}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\ttfamily}
%    \begin{macrocode}
\renewcommand*{\ttfamily}{}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\upshape}
%    \begin{macrocode}
\renewcommand*{\upshape}{}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\itshape}
%    \begin{macrocode}
\renewcommand*{\itshape}{}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\scshape}
%    \begin{macrocode}
\renewcommand*{\scshape}{}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\scshape}
%    \begin{macrocode}
\renewcommand*{\normalfont}{}
%    \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}
%    \begin{macrocode}
\renewcommand{\textsuperscript}[1]{\LWR@htmlspan{sup}{#1}}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\textsubscript} \marg{text}
%    \begin{macrocode}
\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}{\hfill}
% \changes{v0.20}{2016/12/12}{Inserts a \cs{qquad}.}
%    \begin{macrocode}
\renewcommand*{\hfill}{\qquad}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\hrulefill}
% \changes{v0.20}{2017/01/19}{Inserts a short rule.}
%    \begin{macrocode}
\renewcommand*{\hrulefill}{\rule{1in}{1pt}}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\dotfill}
% \changes{v0.20}{2017/01/19}{Inserts an ellipsis.}
%    \begin{macrocode}
\renewcommand*{\dotfill}{\dots}
%    \end{macrocode}
% \end{macro}



%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}





% \section{Skips, spaces, font sizes}

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}

% |\,| must be redefined after |\RequirePackage{printlen}|
%    \begin{macrocode}
\let\LWR@origcomma\,
\let\LWR@origtilde~
\let\LWR@origenskip\enskip
\let\LWR@origquad\quad
\let\LWR@origqquad\qquad
\let\LWR@orighspace\hspace
\let\LWR@origrule\rule
\let\LWR@origmedskip\medskip
%    \end{macrocode}

% Direct-formatting space commands become \acro{HTML} entities:
%    \begin{macrocode}
\renewcommand*{\,}{\HTMLunicode{202f}}	% HTML thin non-breakable space
%    \end{macrocode}
% ^^A \renewcommand*{\,}{\HTMLunicode{2009}}	% HTML thin wrappable space
% ^^A \renewcommand*{\,}{\HTMLentity{nbsp}}	% regular-width non-breakable space
%    \begin{macrocode}
\renewcommand*{~}{\HTMLentity{nbsp}}
\renewcommand*{\textellipsis}{\HTMLunicode{2026}}
%    \end{macrocode}
% Direct-formatting font sizes are ignored:
%    \begin{macrocode}
\let\LWR@orignormalsize\normalsize
\let\LWR@origsmall\small
\let\LWR@origfootnotesize\footnotesize
\let\LWR@origscriptsize\scriptsize
\let\LWR@origtiny\tiny
\let\LWR@origlarge\large
\let\LWR@origLarge\Large
\let\LWR@origLARGE\LARGE
\let\LWR@orighuge\huge
\let\LWR@origHuge\Huge
\renewcommand*{\normalsize}{}
\renewcommand*{\small}{}
\renewcommand*{\footnotesize}{}
\renewcommand*{\scriptsize}{}
\renewcommand*{\tiny}{}
\renewcommand*{\large}{}
\renewcommand*{\Large}{}
\renewcommand*{\LARGE}{}
\renewcommand*{\huge}{}
\renewcommand*{\Huge}{}

\renewcommand*{\onecolumn}{}

\renewcommand{\twocolumn}[1][]{

#1

}
%    \end{macrocode}


% \begin{macro}{\newline}
% Uses \acro{HTML} |<br />| tag
%    \begin{macrocode}
\newcommand*{\LWR@newlinebr}{\unskip\LWR@htmltag{br /}\LWR@orignewline}%
\let\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}
\NewDocumentCommand{\LWR@endofline}{s o}
{%
\newline%
}
%    \end{macrocode}
% \end{macro}





% \begin{macro}{\LWR@minipagestartpars}
% \changes{v0.19}{2016/05/31}{Surpresses paragraph tags between minipages.}
% \index{minipage>horizontal space between}
% \index{space>horizontal between minipages}
% \index{horizontal space>between minipages}
% Minipages are often placed side-by-side inside figures, with a bit of
% horizontal space to separate them.  Since \acro{HTML} does not allow
% a \tag{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
% surpresses 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 surpressed 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 surpress their surrounding paragraph
% tags.  |LWR@minipagethispar| is cleared at the next
% end of paragraph, when the \acro{HTML} paragraph closing tag is
% generated.
%
% Placed just before \cs{hspace}, \cs{quad}, or \cs{qquad}'s \acro{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 \acro{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.
%    \begin{macrocode}
\renewcommand*{\quad}{%
\LWR@minipagestoppars%
\HTMLunicode{2001}%
\LWR@minipagestartpars%
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\qquad}
% Handles special minipage \& horizontal space interactions.
%    \begin{macrocode}
\renewcommand*{\qquad}{\quad\quad}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\enskip}
% Handles special minipage \& horizontal space interactions.
%    \begin{macrocode}
\renewcommand*{\enskip}{%
\LWR@minipagestoppars%
\HTMLunicode{2000}%
\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@hspace} * \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}
\NewDocumentCommand{\LWR@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}
\ifthenelse{\dimtest{\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}
\ifthenelse{\dimtest{\LWR@tempwidth}{=}{.16667em}}
{%
\HTMLunicode{2009}% thin breakable space
}%
%    \end{macrocode}
% Print the span with the converted width.  Not rounded.
%    \begin{macrocode}
{%
\uselengthunit{PT}%
\LWR@htmltagc{%
span style="width:\printlength{\LWR@tempwidth}; display:inline-block;"%
}%
\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%
}%
}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\hspace} * \marg{length}
%
% Handles special minipage \& horizontal space interactions.
%    \begin{macrocode}
\let\hspace\LWR@hspace
%    \end{macrocode}
% \end{macro}


% \begin{macro}{\linebreak} \oarg{num} \qquad
% Inserts an \acro{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}{\LWR@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}
\NewDocumentCommand{\LWR@rule}{o m m}{%
%    \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.
%    \begin{macrocode}
\uselengthunit{PT}%
\LWR@htmltagc{%
span
style=" %
%    \end{macrocode}
% The background color is used to draw the filled rule.
% The color may be changed by \cs{textcolor}.
%    \begin{macrocode}
background:\LWR@currenttextcolor; %
%    \end{macrocode}
% The width and height are printed, converted to PT:
%    \begin{macrocode}
width:\printlength{\LWR@tempwidth}; %
height:\printlength{\LWR@tempheight}; %
%    \end{macrocode}
% The raise height is converted to a \acro{CSS} transform.
% The |*2| raise multiplier is to approximately match \acro{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 \acro{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 \acro{HTML} with an ex unit.
%    \begin{macrocode}
\IfValueTF{#1}%
{%
\setlength{\LWR@tempraise}{0pt-#1}%
\setlength{\LWR@tempraise}{\LWR@tempraise*2}%
\LWR@orignewline%
-ms-transform: translate(0pt,\printlength{\LWR@tempraise}); %
\LWR@orignewline%
-webkit-transform: translate(0pt,\printlength{\LWR@tempraise}); %
\LWR@orignewline%
transform: translate(0pt,\printlength{\LWR@tempraise}); %
\LWR@orignewline%
}{}%
%    \end{macrocode}
% Display inline-block to place the span inline with the text:
%    \begin{macrocode}
display:inline-block;"%
}%
\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
}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\rule} \oarg{raise} \marg{width} \marg{height}
% \changes{v0.19}{2016/06/01}{Added}
%
% Handles special minipage \& horizontal space interactions.
%    \begin{macrocode}
\let\rule\LWR@rule
%    \end{macrocode}
% \end{macro}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}




% \section{\textbackslash{}phantomsection}

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}

% \begin{macro}{\phantomsection}
% Emulate the hyperref |\phantomsection| command,
% often used to insert the bibliography into table of contents:
%    \begin{macrocode}
\newcommand*{\phantomsection}{\section*{}}
%    \end{macrocode}
% \end{macro}


%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}





% \section{\textbackslash{}LaTeX and other logos}

% Logos for \acro{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 |\let| in |\LWR@LwarpStart|.
%
% For \acro{CSS} conversions, see: \\
% \url{http://edward.oconnor.cx/2007/08/tex-poshlet} \\
% \url{http://nitens.org/taraborelli/texlogo}
%
%
%
% \subsection{HTML logos}
%
% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}


% \begin{macro}{\TeX} \TeX
% \nopagebreak
%
% |latexlogo| is a \acro{CSS} class used to properly typeset the E and A in \LaTeX{} and friends.
%
% |latexlogofont| is a \acro{CSS} class used to select the font for the rest of the logo in
% \LaTeX, \LuaTeX, \ConTeXt, etc.
%    \begin{macrocode}
\newcommand*{\LWR@TeX}
{\InlineClass{latexlogofont}%
{\InlineClass{latexlogo}{T\textsubscript{e}X}}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LaTeX}
% \begin{macro}{\LaTeXe} \LaTeX, \LaTeXe
%    \begin{macrocode}
\newcommand*{\LWR@LaTeX}
{\InlineClass{latexlogofont}%
{\InlineClass{latexlogo}%
{L\textsuperscript{a}T\textsubscript{e}X}}}

\renewcommand*{\LaTeXe}
{\LaTeX\InlineClass{latexlogofont}%
{\,2\textsubscript{\textit{\HTMLunicode{3B5}}}}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\LuaTeX}
% \begin{macro}{\LuaLaTeX} \LuaTeX, \LuaLaTeX
%    \begin{macrocode}
\newcommand*{\LWR@LuaTeX}{\InlineClass{latexlogofont}{Lua}\TeX}
\newcommand*{\LWR@LuaLaTeX}{\InlineClass{latexlogofont}{Lua}\LaTeX}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\XeTeX}
% \begin{macro}{\XeLaTeX} \XeTeX, \XeLaTeX
% \nopagebreak
%
% |xetexlogo| is a \acro{CSS} class which aligns the backwards E in \XeTeX{} and spaces \TeX{}
% appropriately.
%
% |xelatexlogo| is a \acro{CSS} class which aligns the backwards E in \XeLaTeX{} and spaces
% \LaTeX{} appropriately.
%    \begin{macrocode}
\newcommand*{\Xe}
  {X\textsubscript{\HTMLunicode{18e}}}
\newcommand*{\LWR@XeTeX}{\InlineClass{xetexlogo}{\Xe}\TeX}
\newcommand*{\LWR@XeLaTeX}{\InlineClass{xelatexlogo}{\Xe}\LaTeX}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\ConTeXt} \ConTeXt
%    \begin{macrocode}
\newcommand*{\LWR@ConTeXt}
{\InlineClass{latexlogofont}{Con}\TeX{}%
\InlineClass{latexlogofont}{t}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\BibTeX}
% \begin{macro}{\MakeIndex} \BibTeX, \MakeIndex
%    \begin{macrocode}
\providecommand*{\BibTeX}
{\InlineClass{latexlogofont}{B\textsc{ib}}\TeX}

\newcommand*{\MakeIndex}
{\InlineClass{latexlogofont}{\textit{MakeIndex}}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\AmS} \AmS
% \nopagebreak
%
% |amslogo| is a \acro{CSS} class used for the \AmS logo.
%    \begin{macrocode}
\AtBeginDocument{\DeclareDocumentCommand{\AmS}{}
{\InlineClass{amslogo}{\textit{A\textsubscript{M}S}}}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\MiKTeX} \MiKTeX
%    \begin{macrocode}
\newcommand*{\MiKTeX}{\InlineClass{latexlogofont}{MiK}\TeX}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\LyX} \LyX
% \nopagebreak
%
% |lyxlogo| is a \acro{CSS} class used for the \LyX logo.
%    \begin{macrocode}
\newcommand*{\LyX}{\InlineClass{lyxlogo}{LyX}}
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}
%
% \subsection{Print logos}
%
% \codeprint
%    \begin{macrocode}
\begin{warpprint}
\newcommand*{\XeTeXrevE}
  {\hspace{-.1667em}\raisebox{-.5ex}{\reflectbox{E}}\hspace{-.125em}}
\providecommand*{\XeTeX}{\mbox{X\XeTeXrevE\TeX}}
\providecommand*{\XeLaTeX}{\mbox{X\XeTeXrevE\LaTeX}}
\providecommand*{\AmS}{%
\leavevmode\hbox{$\mathcal A\kern-.2em\lower.376ex%
\hbox{$\mathcal M$}\kern-.2em\mathcal S$}}
\newcommand*{\LyX}{\textsf{LyX}}
\providecommand*{\LuaTeX}{\mbox{Lua\TeX}}
\providecommand*{\LuaLaTeX}{\mbox{Lua\LaTeX}}
\providecommand*{\BibTeX}{\mbox{B\textsc{ib}\TeX}}
\providecommand*{\MakeIndex}{\mbox{\textit{MakeIndex}}}
\providecommand*{\ConTeXt}{\mbox{Con\TeX{}t}}
\providecommand*{\MiKTeX}{\mbox{MiK\TeX}}
\end{warpprint}
%    \end{macrocode}


% \section{\textbackslash{}AtBeginDocument, \textbackslash{}AtEndDocument}

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}

% \begin{macro}{\LWR@LwarpStart}
% \begin{macro}{\LWR@LwarpEnd}
% Automatically sets up the \acro{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}



% \clearpage

% \section{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 |xelatex| or |lualatex|, in print-document generation mode,
% which is the default unless the |warpHTML| option is given.
% |lwarpmk.conf| is then used by the utility |lwarpmk|.
%
% An example |lwarpmk.conf|:
% \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4,formatcom={\unskip}]
% opsystem = "Unix"   -- or "Windows"
% latexname = "pdflatex"   -- or "lualatex" or "xelatex"
% sourcename = "projectname"   -- your .tex source
% homehtmlfilename = "index"   -- or "projectname"
% htmlfilename = ""   -- or "projectname" if numbered HTML files
% \end{Verbatim}
%
% Defaults unless already over-ridden by the user:
%    \begin{macrocode}
\providecommand*{\HomeHTMLFileName}{\BaseJobname}
\providecommand*{\HTMLFileName}{}
\providecommand*{\UseLatexmk}{false}
%    \end{macrocode}


% \codeprint
%    \begin{macrocode}
\begin{warpprint}
\ifcsdef{LWR@file}{}{\newwrite{\LWR@file}}
\immediate\openout\LWR@file=lwarpmk.conf
\ifwindows
\immediate\write\LWR@file{opsystem = "Windows"}
\else
\immediate\write\LWR@file{opsystem = "Unix"}
\fi
\ifPDFTeX
\immediate\write\LWR@file{latexname = "pdflatex"}
\fi
\ifXeTeX
\immediate\write\LWR@file{latexname = "xelatex"}
\fi
\ifLuaTeX
\immediate\write\LWR@file{latexname = "lualatex"}
\fi
\immediate\write\LWR@file{sourcename = "\jobname"}
\immediate\write\LWR@file{%
homehtmlfilename = "\HomeHTMLFileName"%
}
\immediate\write\LWR@file{htmlfilename = "\HTMLFileName"}
\immediate\write\LWR@file{uselatexmk = "\UseLatexmk"}
\immediate\closeout\LWR@file
\end{warpprint}
%    \end{macrocode}








% \clearpage
% \section{Trademarks}
%
% \changes{v0.14}{2016/03/29}{Docs: Trademarks section.}
%
% \begin{itemize}
% \item \TeX\ is a trademark of American Mathematical Society.
% \item Adobe®  and Adobe Framemaker® are either registered trademarks or
%	trademarks of Adobe Systems Incorporated in the United States and/or other countries.
% \item Linux® is the registered trademark of Linus Torvalds in the U.S.\ and other countries.
% \item Mac\,OS® is a trademark of Apple Inc.
% \item MadCap Flare™ is the property of MadCap Software, Inc.
% \item MathJax is copyright 2009 and later.
%	The MathJax Consortium is a joint venture of the American Mathematical Society (AMS)
%	and the Society for Industrial and Applied Mathematics (SIAM)
%	to advance mathematical and scientific content on the web.
% \item Microsoft®, Encarta, MSN, and Windows® are either registered trademarks or
%	trademarks of Microsoft Corporation in the United States and/or other countries.
% \item UNIX® is a registered trademark of The Open Group.
% \end{itemize}

% \iffalse
%</package>
% \fi
%
%
%
% \clearpage
%
%
% \iffalse
%<*lwarp-newproject>
% \fi
%
% \part{lwarp-newproject.sty}
%
% \changes{v0.20}{2016/12/20}{\pkg{lwarp-newproject}: Added.}
%
% \section{lwarp-newproject}
%
% \DescribePackage{lwarp-newproject}
% \pkg{lwarp-newproject} is used to create lwarp-specific
% system files in a new project.
%
% \DescribeOption[lwarp-newproject]{warpprint} Configuration files are only
%	created if the |warpprint| option was used.  When this is the case,
%	\pkg{lwarp-newproject} knows that \cs{jobname} is the source code's filename
%	(as opposed to the |<project>_html.tex| filename).
%
% \DescribeOption[lwarp-newproject]{warpHTML} Does not create configuration files.
%	|warpprint| or |warpHTML| are passed to both \pkg{lwarp} and
%	\pkg{lwarp-newproject} by |lwarpmk|, depending on whether |lwarpmk print|
%	or |lwarpmk html| was used.
%
% \DescribeOption[lwarp-newproject]{BaseJobName} |BaseJobname=somename| sets
%	\cs{BaseJobname} to |somename|, which is used to set \cs{HomeHTMLFileName},
%	which is then written to the |lwarpmk.conf| and |<project>.lwarpmkconf|
%	configuration files.
%
%	\cs{BaseJobname} is also written to |<project>_html.tex| as an option
%	given for the \pkg{lwarp} and \pkg{lwarp-newproject} packages during the
%	creation of \acro{HTML} output.
%
%	\cs{BaseJobname} is the \cs{jobname} of the printed version, even while compiling
%	the \acro{HTML} version, where \cs{jobname} has |_html| appended.
%
% \DescribeOption[lwarp-newproject]{lwarpmk} Tells |lwarp-newproject| to
%	generate a local copy of |lwarpmk| called |lwarpmk.lua|.
%	Useful for archiving for future use.
%	This file may be made executable and acts just like |lwarpmk|.
%
% In the document source:
% \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4,formatcom={\unskip}]
% \documentclass{article} % or book, report
% ...
% (font selection, input encoding)
% ...
% \newcommand*{\HomeHTMLFileName}{index}, or {projectname}
% \newcommand*{\HTMLFileName}{}
% \usepackage{lwarp-newproject}
% \usepackage{lwarp}
% ...
% (load other packages, the rest of the preamble)
% ...
% \NewCSS{project.css}
% \NewHTMLdescription{Summarize this webpage.}
% ...
% \begin{document}
% ...
% \end{document}
% \end{Verbatim}
%
% Place |\usepackage{lwarp-newproject}| just before |\usepackage{lwarp}| in the
% document source.  The operating system and \TeX\ engine will be auto-detected,
% and a customized |lwarpmk.conf| file will be generated, along with
% the other support files (|*.css|, |lwarp_html.xdy|, |lwarp_mathjax.txt|).
% Rename |sample_project.css| to your own custom |projectname.css| and
% edit it if desired.
%
% After the first compile, |\usepackage{lwarp-newproject}|
% may be commented out unless the configuration changes.
% For example, it may be re-enabled
% to switch between |pdflatex|, |xelatex|, and |lualatex|, in which case
% a new manual compile (without using |lwarpmk|) will auto-configure and
% regenerate the files.  It may also be left enabled at all times, in which case
% the configuration files will be regenerated each time.  Note that your own
% |projectname.css| file will not be over-written by the newly regenerated
% |sample_project.css|.
%

% Discard all options for \pkg{lwarp-newproject}:
%    \begin{macrocode}
\ProvidesPackage{lwarp-newproject}

\RequirePackage{etoolbox}
\RequirePackage{comment}
\RequirePackage{fancyvrb}
\RequirePackage{ifplatform}% sense op-system platform
\RequirePackage{iftex}% sense pdflatex/lualatex/xelatex
\RequirePackage{kvoptions}
\SetupKeyvalOptions{family=LWRNP,prefix=LWRNP@}
%    \end{macrocode}


% Generate config files?
%    \begin{macrocode}
\newbool{LWRNP@genconf}
\boolfalse{LWRNP@genconf}
%    \end{macrocode}

% Optionally generate a local copy of |lwarpmk|.  Default to no:
%    \begin{macrocode}
\excludecomment{LWR@createlwarpmk}
%    \end{macrocode}

% Process options:
%    \begin{macrocode}
\DeclareVoidOption{warpprint}{\booltrue{LWRNP@genconf}}
\DeclareVoidOption{warpHTML}{\boolfalse{LWRNP@genconf}}
\DeclareVoidOption{lwarpmk}{\includecomment{LWR@createlwarpmk}}
\DeclareStringOption[\jobname]{BaseJobname}

\booltrue{LWRNP@genconf}% warpprint

\ProcessKeyvalOptions*\relax
%    \end{macrocode}




% Assign the \cs{BaseJobname} if the user hasn't provided one:
%    \begin{macrocode}
\providecommand*{\BaseJobname}{\LWRNP@BaseJobname}
%    \end{macrocode}

% Defaults unless already over-ridden by the user:
%    \begin{macrocode}
% \ifbool{LWRNP@genconf}{
\providecommand*{\HomeHTMLFileName}{\BaseJobname}
% }{}
\providecommand*{\HTMLFileName}{}
\providecommand*{\UseLatexmk}{false}
%    \end{macrocode}
% 
% 


\ifbool{LWRNP@genconf}{\typeout{lwarp-newproject: generating configuration files}}{}


% \subsection{project\_html.tex}
%
% \DescribeFile{project_html.tex} Used to allow an \acro{HTML} version of the
% document to exist alongside the print version.
%
% Only write |\jobname_html.tex| if generating the print version.
%    \begin{macrocode}
\ifbool{LWRNP@genconf}{
\ifcsdef{LWR@file}{}{\newwrite{\LWR@file}}
\immediate\openout\LWR@file=\jobname_html.tex
\immediate\write\LWR@file{%
\detokenize{\PassOptionsToPackage}%
{warpHTML,BaseJobname=\jobname}{lwarp}%
}
\immediate\write\LWR@file{%
\detokenize{\PassOptionsToPackage}%
{warpHTML,BaseJobname=\jobname}{lwarp-newproject}%
}
\immediate\write\LWR@file{%
\detokenize{\input}\string{\jobname.tex\string }%
}
\immediate\closeout\LWR@file
}{}
%    \end{macrocode}


% \subsection{project.lwarpmkconf}
%
% \DescribeFile{project.lwarpmkconf} The configuration file for |lwarpmk|.
%
%
%    \begin{macrocode}
\ifbool{LWRNP@genconf}{
\ifcsdef{LWR@file}{}{\newwrite{\LWR@file}}
\immediate\openout\LWR@file=\jobname.lwarpmkconf
\ifwindows
\immediate\write\LWR@file{opsystem = "Windows"}
\else
\immediate\write\LWR@file{opsystem = "Unix"}
\fi
\ifPDFTeX
\immediate\write\LWR@file{latexname = "pdflatex"}
\fi
\ifXeTeX
\immediate\write\LWR@file{latexname = "xelatex"}
\fi
\ifLuaTeX
\immediate\write\LWR@file{latexname = "lualatex"}
\fi
\immediate\write\LWR@file{sourcename = "\jobname"}
\immediate\write\LWR@file{%
homehtmlfilename = "\HomeHTMLFileName"%
}
\immediate\write\LWR@file{htmlfilename = "\HTMLFileName"}
\immediate\write\LWR@file{uselatexmk = "\UseLatexmk"}
\immediate\closeout\LWR@file
}{}
%    \end{macrocode}




% \subsection{lwarp.css}

% \DescribeFile{lwarp.css}
% This is the base \acro{css} layer used by \pkg{lwarp}.
%
% This must be present both when compiling the project
% and also when distributing the \acro{HTML} files.
%
% \changes{v0.26}{2017/03/30}{\texttt{lwarp.css}: Improved responsive
%	\texttt{marginpar} and \texttt{marginblock}.}
%
%    \begin{macrocode}
\begin{VerbatimOut}{lwarp.css}
/*
  CSS stylesheet for the LaTeX lwarp package
  Copyright 2016-2017 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.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 ;}

/* Holds a section number to add space between it and the name */
span.sectionnumber { margin-right: .6em }

/* Inserted in front of index lines */
span.indexitem {margin-left: 0em}
span.indexsubitem {margin-left: 2em}
span.indexsubsubitem {margin-left: 4em}

div.hidden { display: none ; }

kbd {
    font-family: "DejaVu Mono", "Bitstream Vera Mono", "Lucida Console",
        "Nimbus Mono L", "Liberation Mono", "FreeMono", "Andale Mono",
        "Courier New", monospace;
    font-size: 100% ;
}

span.strong { font-weight: bold; }

span.textmd { font-weight: normal; }

span.textsc { font-variant: small-caps; }

span.textup { font-variant: normal; }

span.textrm {
    font-family: "DejaVu Serif", "Bitstream Vera Serif",
    "Lucida Bright", Georgia, serif;
}

span.textsf {
     font-family: "DejaVu Sans", "Bitstream Vera Sans",
        Geneva, Verdana, sans-serif ;
}

span.attribution {
  margin-left: 1em ; font-size: 80% ; font-variant: small-caps;
}

span.citetitle {
  margin-left: 1em ; font-size: 80% ; font-style: oblique;
}

span.poemtitle {
  font-size: 120% ; font-weight: bold;
}

blockquote {
	margin-left: 0px ;
	margin-right: 0px ;
}

blockquote p {
  line-height: 1.5;
    text-align: left ;
    font-size: .85em ;
    margin-left: 3em ;
	margin-right: 3em ;
}

blockquotation {
	margin-left: 0px ;
	margin-right: 0px ;
}

blockquotation p {
  line-height: 1.5;
    text-align: left ;
    font-size: .85em ;
    margin-left: 3em ;
	margin-right: 3em ;
}

div.epigraph {
  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{
    text-align:right ;
    margin-left:auto ;
/*     max-width: 50% ; */
    border-top: 1px solid #A0A0A0 ;
    padding-bottom: 3ex ;
    line-height: 1.2;
}

div.epigraph p { padding: .5ex ; margin: 0ex ;}
div.epigraphsource p { padding: .5ex 0ex 0ex 0ex ; margin: 0ex ;}


/* lettrine package: */
span.lettrine { font-size: 3ex ; float: left ; }
span.lettrinetext { font-variant: small-caps ; }

/* ulem and soul packages: */
span.uline {
    text-decoration: underline ;
    text-decoration-skip ;
}

span.uuline {
    text-decoration: underline ;
    text-decoration-skip ;
    text-decoration-style: double ;
}

span.uwave {
    text-decoration: underline ;
    text-decoration-skip ;
    text-decoration-style: wavy ;
}

span.sout {
    text-decoration: line-through ;
}

span.xout {
    text-decoration: line-through ;
}

span.dashuline {
    text-decoration: underline ;
    text-decoration-skip ;
    text-decoration-style: dashed ;
}

span.dotuline {
    text-decoration: underline ;
    text-decoration-skip ;
    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;
}


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 ;
}
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 ;  }



/* Title of the file */
h1 {
  margin: 0ex 0em 0ex 0em ;
  line-height: 1.3;
  text-align: center ;
}

/* Part */
h2 {
  margin: 1ex 0em 1ex 0em ;
  line-height: 1.3;
  text-align: center ;
}

/* Chapter */
h3 {
  margin: 3ex 0em 1ex 0em ;
  line-height: 1.3;
}

/* Section */
h4 {
  margin: 3ex 0em 1ex 0em ;
  line-height: 1.3;
}

/* Sub-Section */
h5 {
  margin: 3ex 0em 1ex 0em ;
  line-height: 1.3;
}

/* Sub-Sub-Section */
h6 {
  margin: 3ex 0em 1ex 0em ;
  line-height: 1.3;
}


div.titlepage {
  text-align: center ;
}

.footnotes {
    font-size: .85em ;
    margin: 3ex 1em 0ex 1em ;
    padding-bottom: 1ex ;
	border-top: 1px solid silver ;
}

.marginpar {
    max-width:50%;
    float:right;
    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 {
    max-width:50%;
    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 {
    display: block ;
    margin: 0pt auto 0pt auto ;
}

div.marginblock div.minipage p { font-size: 85%}

div.marginblock br { margin-bottom: 2ex ; }


section.textbody div.footnotes{
    margin: 3ex 0em 0ex 0em ;
    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 ;
}



ol {
  margin: 1ex 1em 1ex 0em;
  line-height: 1.2;
}

ul, body dir, body menu {
  margin: 1ex 1em 1ex 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 ;
}


.inlineprogramlisting {
  font-family: "DejaVu Mono", "Bitstream Vera Mono", "Lucida Console",
        "Nimbus Mono L", "Liberation Mono", "FreeMono", "Andale Mono",
        "Courier New", monospace;
  overflow-x: auto;
}


div.abstract {
  margin: 2em 5% 2em 5% ;
  padding: 1ex 1em 1ex 1em ;
/*  font-weight: bold ; */
  font-size: 90% ;
}

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-weight:bold;
    text-align: center ;
}


.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 ; }





/* Minipage environments, vertically aligned to top, center, bottom: */
.minipage {
    /* 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;
}

/* Paragraphs in the flexbox did not collapse their margins. */
/* Have not yet researched this. */
.minipage p {margin: .75ex 0em .75ex 0em ;}



.framebox {
    margin: 0ex ;
    padding: 0ex ;
   border: 1px solid black;
     border-radius: 0px ;
    padding: .3ex .2em 0ex .2em ;
    margin: .1ex ;
  display: inline-block ;
}


.mdframed {
/*     padding: 0ex ; */
/*    border: 1px solid blafck; */
/*      border-radius: 0px ; */
    padding: 0ex ;
    margin: 3ex 5% 3ex 5% ;
/*   display: inline-block ; */
}

.mdframed p { padding: 0ex .5em 0ex .5em ; }

.mdframed dl { padding: 0ex .5em 0ex .5em ; }

.mdframedtitle {
    padding: .5em ;
    display: block ;
    font-size: 130%
}

.mdframedsubtitle {
    padding: 0ex .5em 0ex .5em ;
    display: block ;
    font-size: 115% ;
}

.mdframedsubsubtitle {
    padding: 0ex .5em 0ex .5em ;
    display: block ;
}

.mdtheorem {
    padding: 0ex .5em 0ex .5em ;
    margin: 3ex 5% 3ex 5% ;
/*   display: inline-block ; */
}


/* framed package */
.framed {
    margin: 3ex 0em 3ex 0em ;
   border: 1px solid black;
     border-radius: 0px ;
    padding: .3ex 1em 0ex 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 }



dl {
  margin: 1ex 2em 1ex 0em;
  line-height: 1.3;
}

dl dt {
  margin-top: 1ex;
    font-weight: bold;
}

dl dd p { margin-top: 0em; }


nav.toc, nav.lof, nav.lot, nav.lol, nav.lothm {
    font-family: "URW Classico", Optima, "Linux Biolinum O",
        "DejaVu Sans", "Bitstream Vera Sans",
        Geneva, Verdana, sans-serif ;
    margin-bottom: 4ex ;
}

nav.toc p, nav.lof p, nav.lot p, nav.lol p, nav.lothm 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: 3ex auto 3ex 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 div.minipage p { font-size: 85% ; }

figure.subfigure, figure.subtable  {
    display: inline-block ; margin: 3ex 1em 3ex 1em ;
}

figcaption .minipage { margin:0 ; padding: 0 }

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 ; }

figcaption , .lstlistingtitle {
    font-size: .85em ;
    text-align: center ;
    font-weight: bold ;
	margin-top: 1ex ;
	margin-bottom: 1ex ;
}

figure.subfigure figcaption, figure.subtable figcaption  {
    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 figcaption {
	border: none ;
	background: none ;
}


table {
    margin: 1ex auto 1ex auto ;
    border-collapse: collapse ;
    border-spacing: 0px ;
    line-height: 1.3 ;
    }

tr.hline {border-top: 1px solid silver ; margin-top: 0ex ;
    margin-bottom: 0ex ; } /* for \hline */

tr.tbrule {border-top: 1px solid black ; margin-top: 0ex ;
    margin-bottom: 0ex ; } /* for \toprule, \bottomrule */

td {padding: 1ex .5em 1ex .5em ;}

table td.tdl { text-align: left ; vertical-align: middle ; }
table td.tdc { 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.tdlrule { text-align: left ; border-top: 1px solid silver ;
    vertical-align: middle ; } /* for cmidrule */
table td.tdcrule { text-align: center ; border-top: 1px solid silver ;
    vertical-align: middle ; }
table td.tdrrule { text-align: right ; border-top: 1px solid silver ;
    vertical-align: middle ; }
table td.tdprule { text-align: left ; border-top: 1px solid silver ;
    vertical-align: bottom ; }
table td.tdmrule { text-align: left ; border-top: 1px solid silver ;
    vertical-align: middle ; }
table td.tdbrule { text-align: left ; border-top: 1px solid silver ;
    vertical-align: top ; }
table td.tdPrule { text-align: center ; border-top: 1px solid silver ;
    vertical-align: bottom ; }
table td.tdMrule { text-align: center ; border-top: 1px solid silver ;
    vertical-align: middle ; }
table td.tdBrule { text-align: center ; border-top: 1px solid silver ;
    vertical-align: top ; }

/* 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:.85em;
    text-align: left ;
}

.tnotes dl dt p {margin-bottom:0px;}

.tnoteitemheader {margin-right: 1em;}



/* 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 ;}




/* 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 ;
}





div.published
{
    text-align: center ;
    font-variant: normal ;
    font-style: italic ;
    font-size: 1em ;
    margin: 3ex 0em 3ex 0em ;
}

div.subtitle
{
    text-align: center ;
    font-variant: normal ;
    font-style: italic ;
    font-size: 1.25em ;
    margin: 3ex 0em 3ex 0em ;
}

div.subtitle p { margin: 1ex ; }

div.author
{
    font-variant: normal ;
    font-style: normal ;
    font-size: 1em ;
    margin: 3ex 0em 3ex 0em ;
}

div.author table {
    margin: 3ex 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: 6ex 0em 6ex 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:right ;
}

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:right ;
}


header{
    line-height: 1.2 ;
    font-size: 1em ;
/*     border-bottom: 2px solid silver ; */
    margin: 0px ;
    padding: 0ex 1em 0ex 1em ;
    text-align:center ;
}

header p {margin:0ex;padding:4ex 0em 2ex 0em ;text-align:center;}


footer{
    font-size: .85em ;
    line-height: 1.2 ;
    margin-top: 1ex ;
    border-top: 2px solid silver ;
    padding: 2ex 1em 2ex 1em ;
    clear:right ;
    text-align:left ;
}


a.linkhome { font-weight:bold ; font-size: 1em ;}


div.lateximagesource { padding: 0px ; margin: 0px ; display: none; }

img.lateximage{
    padding: 0px 0px 0px 0px ;
    box-shadow: none ;
    border: none ;
    background: none ;
    margin: 0px 0px -.15ex 0px ;
        /* pdfcrop leaves a slight margin, adjust to baseline */
    max-width: 100% ;
    border-radius: 0ex ;
    border: none ;
}



nav.sidetoc {
    font-family: "DejaVu Serif", "Bitstream Vera Serif",
        "Lucida Bright", Georgia, serif;
    float:right ;
    width: 20%;
    border-left: 1px solid silver;
    border-top: 1px solid silver;
    border-bottom: 1px solid silver;
/*     border-top: 2px solid #808080 ; */
    background: #FAF7F4 ;
    padding: 2ex 0em 2ex 1em ;
    margin: 0ex 0em 2ex 1em ;
    font-size:.9em ;
    border-radius: 20px 0px 0px 20px ;
    }

div.sidetoccontents {
/*     border-top: 1px solid silver ; */
    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 to support algorithmicx: */
span.floatright { float: right ; }




/* 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 CSS LaTeX and related logos:
Based on:
http://edward.oconnor.cx/2007/08/tex-poshlet
http://nitens.org/taraborelli/texlogo
*/

.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;
    letter-spacing: .03em ;
    font-size: 1.1em;
}

.latexlogo sup {
  text-transform: uppercase;
  letter-spacing: .03em ;
  font-size: 0.85em;
  vertical-align: 0.15em;
  margin-left: -0.36em;
  margin-right: -0.15em;
}

.latexlogo sub {
  text-transform: uppercase;
  vertical-align: -0.5ex;
  margin-left: -0.1667em;
  margin-right: -0.125em;
  font-size: 1em;
}

.xetexlogo {
    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;
}

/* A smaller gap between Xe and Tex v.s. LaTeX: */
.xetexlogo sub {
  text-transform: uppercase;
  vertical-align: -0.5ex;
  margin-left: -0.0667em;
  margin-right: -0.2em;
  font-size: 1em;
  letter-spacing: .03em ;
}

/* A large gap between Xe and LaTeX v.s. TeX: */
.xelatexlogo sub {
  text-transform: uppercase;
  vertical-align: -0.5ex;
  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; }

@media screen and (max-width: 45em) {
/*     nav.sidetoc {display:none;} */
    nav.sidetoc {
        float: none ;
        width: 100% ;
        margin: 5ex 0px 5ex 0px ;
        padding: 0 ;
        border-radius: 0 ;
        border-bottom: 1px solid black ;
        border-top: 1px solid black ;
        box-shadow: none ;
    }
/*     nav.topnavigation { display:block } */
    nav.botnavigation { display:block }
    .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;
    }
    nav.sidetoc { display:none; }
    nav.topnavigation { display: none; }
    nav.botnavigation { display: none; }
}

@media handheld {
    nav.sidetoc { display:none; }
    nav.topnavigation { display:block }
    nav.botnavigation { display:block }
}

@media projection {
    nav.sidetoc { display:none; }
    nav.topnavigation { display:block }
    nav.botnavigation { display:block }
}
\end{VerbatimOut}
% \end{Verbatim}% for syntax highlighting
%    \end{macrocode}




% \subsection{lwarp\_sagebrush.css}

% \DescribeFile{lwarp_sagebrush.css}
% An optional \acro{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 \acro{HTML} files.
%
%    \begin{macrocode}
\begin{VerbatimOut}{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;}



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 {
    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;
}



.minipage {
    background-color: #eeeee7 ;
    border: 1px solid silver ;
	border-radius: 1ex ;
}

.framed .minipage , .framedleftbar .minipage {
	border: none ;
	background: none ;
	padding: 0ex ;
	margin: 0ex ;
}

figure.figure .minipage, figcaption .minipage { border: none; }

div.marginblock 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 ;
}

/*
figcaption {
    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);
}



nav.sidetoc {
    background-color: #F7F7F0 ;
    background-image: linear-gradient(to bottom, #F7F7F0, #C0C0C0);
    box-shadow: 3px 3px 3px #808080 ;
    border-radius: 0px 0px 0px 20px ;
    }

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) {
    nav.sidetoc { border-radius: 0 ; }
}


\end{VerbatimOut}
% \end{Verbatim}% for syntax highlighting
%    \end{macrocode}




% \subsection{lwarp\_formal.css}

% \DescribeFile{lwarp_formal.css}
% An optional \acro{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 \acro{HTML} files.
%
%    \begin{macrocode}
\begin{VerbatimOut}{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 ;
}



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 ;
}



.verse {
    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;
}


figure {
    margin: 3ex 5% 3ex 5% ;
    padding: 1ex 1em 1ex 1em ;
    background-color: #fffcf5 ;
    overflow-x: auto ;
    border: none ;
/*     border-top: 1px solid silver; */
/*     border-bottom: 1px solid silver; */
}


figcaption , .lstlisting {
    border: none ;
/*     border-top: 1px solid silver ; */
/*     border-bottom: 1px solid silver ; */
    background-color: #fffcf5 ;
}

.tnotes {
    background: #fffcf5 ;
}

.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;
}

nav.sidetoc {
    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);
    border-radius: 0px 0px 0px 20px ;
}

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 ;
    clear:right ;
    text-align:left ;
}

nav.botnavigation {
    background: #dedcd5 ;
    border-top: 1px solid black ;
}
\end{VerbatimOut}
% \end{Verbatim}% for syntax highlighting
%    \end{macrocode}



% \subsection{sample\_project.css}

% \DescribeFile{sample_project.css}
% The project-specific \acro{css} file.  Use with \cs{NewCSS}.
%
% If used, this must be present both when compiling the project
% and also when distributing the \acro{HTML} files.
%
%    \begin{macrocode}
\begin{VerbatimOut}{sample_project.css}
/* ( --- Start of project.css --- ) */
/* A sample project-specific CSS file for lwarp --- ) */

/* Load default lwarp settings: */
@import url("lwarp.css") ;
/* or lwarp_formal.css, lwarp_sagebrush.css */

/* Project-specific CSS setting follow here. */
/* . . . */

/* ( --- End of project.css --- ) */
\end{VerbatimOut}
% \end{Verbatim}% for syntax highlighting
%    \end{macrocode}



% \subsection{lwarp\_html.xdy}

% \DescribeFile{lwarp_html.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 \acro{HTML} files.
%
%    \begin{macrocode}
\begin{VerbatimOut}{lwarp_html.xdy}
(require "tex/inputenc/latin.xdy")
(merge-rule "\\PS *" "Postscript")
(require "texindy.xdy")
(require "page-ranges.xdy")
(require "book-order.xdy")
(markup-locref :open "\hyperindexref{" :close "}")
\end{VerbatimOut}
% \end{Verbatim}% for syntax highlighting
%    \end{macrocode}



% \subsection{lwarp\_mathjax.txt}

% \DescribeFile{lwarp_mathjax.txt}
% Used by \pkg{lwarp} when using MathJax.
%
% This must be present when compiling the project,
% but does not need to be present when distributing
% the resulting \acro{HTML} files.

%    \begin{macrocode}
\begin{VerbatimOut}{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)
            {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>

<!-- https://github.com/mathjax/MathJax-third-party-extensions/
                                           tree/master/siunitx -->
<script type="text/x-mathjax-config">
 MathJax.Hub.Config({
   extensions: ["tex2jax.js","[Contrib]/siunitx/siunitx.js"],
   jax: ["input/TeX","output/HTML-CSS"],
   tex2jax: {inlineMath: [["$","$"],["\\(","\\)"]]},
   TeX: {extensions: ["AMSmath.js","AMSsymbols.js", "sinuitx.js"]}
 });
 </script>

<script type="text/x-mathjax-config">
MathJax.Hub.Config({
    TeX: {
    equationNumbers: {
        autoNumber: "AMS"
    }
    }
});
</script>

<script
  src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full">
</script>
\end{VerbatimOut}
% \end{Verbatim}% for syntax highlighting
%    \end{macrocode}



% \subsection{Lwarpmk option}

% The following is only generated if the |lwarpmk| option
%	was given to \pkg{lwarp-newproject}.
%    \begin{macrocode}
\begin{LWR@createlwarpmk}
%    \end{macrocode}

% \DescribeFile{lwarpmk} Creates a local copy of |lwarpmk|:
%
% \changes{v0.21}{2017/02/11}{lwarpmk: Fix: \protect\texttt{lwarpmk again} for Windows.}
% \changes{v0.21}{2017/02/22}{lwarpmk: Fix: \protect\texttt{lwarpmk limages} for Windows.}
% \changes{v0.21}{2017/02/22}{lwarpmk: Fix: \protect\texttt{lwarpmk} uses \texttt{lateximages} text file instead of shell script.}
%
%
%    \begin{macrocode}
\begin{VerbatimOut}{lwarpmk.lua}
#!/usr/bin/env texlua

-- Copyright 2016-2017 Brian Dunn

-- Print the usage of the lwarpmk command:

printversion = "v0.27"

function printhelp ()
print ("lwarpmk: Use lwarpmk -h or lwarpmk --help for help.") ;
end

function printusage ()
print ( [[

lwarpmk print [project]: Compile a print version.
lwarpmk printindex [project]: Process the index for the print version.
lwarpmk html [project]: Compile an HTML version.
lwarpmk htmlindex [project]: Process the index for the html version.
lwarpmk again [project]: Touch the source code to trigger recompiles.
lwarpmk limages [project]: Process the "lateximages" created by lwarp.sty.
lwarpmk pdftohtml [project]:
    For use with latexmk or a Makefile:
    Convert project_html.pdf to project_html.html and
    individual HTML files.
lwarpmk clean [project]: Remove project.aux, .toc, .lof, .lot, .idx, .ind, .log
lwarpmk cleanall [project]: Remove auxiliary files and also project.pdf, *.html
lwarpmk -h: Print this help message.
lwarpmk --help: Print this help message.

]] )
printconf ()
end

-- Print the format of the configuration file lwarpmk.conf:

function printconf ()
print ( [[
An example lwarpmk.conf or <project>.lwarpmkconf project file:
--
opsystem = "Unix"   (or "Windows")
latexname = "pdflatex"  (or "lualatex", or "xelatex")
sourcename = "projectname"  (the source-code filename w/o .tex)
homehtmlfilename = "index"  (or perhaps the project name)
htmlfilename = ""  (or "projectname" - filename prefix)
uselatexmk = "false"  (or "true" to use latexmk to build PDFs)
--
Filenames must contain only letters, numbers, underscore, or dash.
Values must be in "quotes".

]] ) ;
end


-- Split one large sourcefile into a number of files,
-- starting with destfile.
-- The file is split at each occurance of <!--|Start file|newfilename|*

function splitfile (destfile,sourcefile)
print ("lwarpmk: Splitting " .. sourcefile .. " into " .. destfile) ;
io.input(sourcefile)
io.output(destfile)
for line in io.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
end -- function

-- Incorrect value, so print an error and exit.

function cvalueerror ( line, linenum , cvalue )
    print ( linenum .. " : " .. line ) ;
    print ("lwarpmk: incorrect variable value \"" .. cvalue .. "\" in lwarpmk.conf.\n" ) ;
    printconf () ;
    os.exit(1) ;
end

-- Load settings from the project's "lwarpmk.conf" file:

function loadconf ()
-- Default configuration filename:
local conffile = "lwarpmk.conf"
-- Optional configuration filename:
if arg[2] ~= nil then conffile = arg[2]..".lwarpmkconf" end
-- Verify the file exists:
if (lfs.attributes(conffile,"mode")==nil) then -- file not exists
print("lwarpmk: " .. conffile .." does not exist.")
print("lwarpmk: " .. arg[2] .. " does not appear to be a project name.\n")
printhelp () ;
os.exit(1) -- exit the entire lwarpmk script
else -- file exists
-- Read the file:
print ("lwarpmk: Reading " .. conffile ..".")
io.input(conffile) ;
-- Scan each line:
local linenum = 0
for line in io.lines() do -- scan lines
linenum = linenum + 1
i,j,cvarname,cvalue = string.find (line,"([%w-_]*)%s*=%s*\"([%w-_]*)\"") ;
-- Error if incorrect enclosing characters:
if ( i == nil ) then
print ( linenum .. " : " .. line ) ;
print ( "lwarpmk: Incorrect entry in " .. conffile ..".\n" ) ;
printconf () ;
os.exit(1) ;
end
if ( cvarname == "opsystem" ) then
    -- Verify choice of opsystem:
    if ( (cvalue == "Unix") or (cvalue == "Windows") ) then
        opsystem = cvalue
    else
        cvalueerror ( line, linenum , cvalue )
    end
elseif ( cvarname == "latexname" ) then
    -- Verify choice of LaTeX compiler:
    if (
        (cvalue == "pdflatex") or
        (cvalue == "xelatex") or
        (cvalue == "lualatex")
    ) then
        latexname = 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 == "uselatexmk" ) then uselatexmk = cvalue
else
print ( linenum .. " : " .. line ) ;
print ("lwarpmk: Incorrect variable name \"" .. cvarname .. "\" in " .. conffile ..".\n" ) ;
printconf () ;
os.exit(1) ;
end
end -- do scan lines
end -- file exists
-- Select some operating-system commands:
if opsystem=="Unix" then  -- For Unix / Linux / Mac OS:
rmname = "rm"
mvname = "mv"
touchnamepre = "touch"
touchnamepost = ""
dirslash = "/"
opquote= "\'"
elseif opsystem=="Windows" then -- For Windows
rmname = "DEL"
mvname = "MOVE"
touchnamepre = "COPY /b"
touchnamepost = "+,,"
dirslash = "\\"
opquote= "\""
else print ( "lwarpmk: Select Unix or Windows for opsystem" )
end --- for Windows
end -- loadconf


function refreshdate ()
os.execute(touchnamepre .. " " .. sourcename .. ".tex " .. touchnamepost)
end


-- Scan the LaTeX log file for the phrase "Rerun to get",
-- indicating that the file should be compiled again.
-- Return true if found.

function reruntoget (filesource)
io.input(filesource)
for line in io.lines() do
if ( string.find(line,"Rerun to get") ~= nil ) then return true end
end
return false
end

-- Compile one time, return true if should compile again.
-- fsuffix is "" for print, "_html" for HTML output.

function onetime (fsuffix)
print("lwarpmk: Compiling with " .. latexname .. " " .. sourcename..fsuffix)
err = os.execute(
--    "echo " ..
    latexname .. " " .. sourcename..fsuffix )
if ( err ~= 0 ) then print ( "lwarpmk: Compile error.") ; os.exit(1) ; end
return (reruntoget(sourcename .. fsuffix .. ".log") ) ;
end

-- Compile up to five times.
-- fsuffix is "" for print, "_html" for HTML output

function manytimes (fsuffix)
if onetime(fsuffix) == true then
if onetime(fsuffix) == true then
if onetime(fsuffix) == true then
if onetime(fsuffix) == true then
if onetime(fsuffix) == true then
end end end end end
end

-- Exit if the given file does not exist.

function verifyfileexists (filename)
if (lfs.attributes ( filename , "modification" ) == nil ) then
print ( "lwarpmk: " .. filename .. " not found." ) ;
os.exit (1) ;
end
end

-- Convert <project>_html.pdf into HTML files:

function pdftohtml ()
    -- Convert to text:
    print ("lwarpmk: Converting " .. sourcename .."_html.pdf to " .. sourcename .. "_html.html")
    os.execute("pdftotext  -enc UTF-8  -nopgbrk  -layout " .. sourcename .. "_html.pdf " .. sourcename .. "_html.html")
    -- Split the result into individual HTML files:
    splitfile (homehtmlfilename .. ".html" , sourcename .. "_html.html")
end

-- Remove auxiliary files:

function removeaux ()
    os.execute ( rmname .. " " ..
        sourcename ..".aux " .. sourcename .. "_html.aux " ..
        sourcename ..".toc " .. sourcename .. "_html.toc " ..
        sourcename ..".lof " .. sourcename .. "_html.lof " ..
        sourcename ..".lot " .. sourcename .. "_html.lot " ..
        sourcename ..".idx " .. sourcename .. "_html.idx " ..
        sourcename ..".ind " .. sourcename .. "_html.ind " ..
        sourcename ..".log " .. sourcename .. "_html.log "
        )
end



-- Create lateximages based on lateximages.txt:
function createlateximages ()
print ("lwarpmk: Creating lateximages.")
io.input("lateximages.txt")
-- Create the lateximages directory, ignore error if alreadt exists
err = os.execute("mkdir lateximages")
-- Scan lateximages.txt
for line in io.lines() do
-- lwimgpage is the page number in the PDF which has the image
-- lwimgnum is the sequential lateximage number to assign for the image
i,j,lwimgpage,lwimgnum = string.find (line,"|(.*)|(.*)|")
-- For each entry:
if ( (i~=nil) ) then
-- Separate out the image into its own single-page pdf:
err = os.execute(
"pdfseparate -f " .. lwimgpage .. " -l " ..
 lwimgpage .. " " .. sourcename .."_html.pdf lateximagetemp-%d.pdf")
-- Crop the image:
err = os.execute(
"pdfcrop --hires lateximagetemp-" .. lwimgpage ..".pdf lateximage-" .. lwimgnum ..".pdf")
if ( err ~= 0 ) then print ( "lwarpmk: File error.") ; os.exit(1) ; end
-- Convert the image to svg:
err = os.execute(
"pdftocairo -svg lateximage-" .. lwimgnum ..".pdf lateximage-" .. lwimgnum ..".svg")
if ( err ~= 0 ) then print ( "lwarpmk: File error.") ; os.exit(1) ; end
-- Move the result into lateximages/:
err = os.execute(
mvname .. " lateximage-" .. lwimgnum ..".svg lateximages" .. dirslash )
if ( err ~= 0 ) then print ( "lwarpmk: File error.") ; os.exit(1) ; end
-- Remove the temporary files:
err = os.execute(
rmname .. " lateximage-" .. lwimgnum ..".pdf lateximagetemp-" .. lwimgpage ..".pdf")
if ( err ~= 0 ) then print ( "lwarpmk: File error.") ; os.exit(1) ; end
end
end -- do
end -- function




-- 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 ( uselatexmk == "true" ) then
    os.execute ( "latexmk -pdf -dvi- -ps- -pdflatex=\"" .. latexname .." %O %S\" " .. sourcename ..".tex" ) ;
    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("")
        print ("lwarpmk: Done.") ;
    else
        print ("lwarpmk: " .. sourcename .. ".pdf is up to date.") ;
    end
end -- not latexmk

-- lwarp printindex:
-- Compile the index then touch the source
-- to trigger a recompile of the document:

elseif arg[1] == "printindex" then
loadconf ()
print ("lwarpmk: Processing the index.")
os.execute("texindy -M lwarp_html.xdy " .. sourcename .. ".idx")
print ("lwarpmk: Forcing an update of " .. sourcename ..".tex.")
refreshdate ()
print ("lwarpmk: " .. sourcename ..".tex is ready to be recompiled.")
print ("lwarpmk: Done.")

-- lwarpmk html:

elseif arg[1] == "html" then
loadconf ()
if ( uselatexmk == "true" ) then
    -- The recorder option is required to detect changes in <project>.tex
    -- while we are loading <project>_html.tex.
    err=os.execute ( "latexmk -pdf -dvi- -ps- -recorder "
        .. "-e "
        .. opquote .. "$makeindex = q/texindy -M lwarp_html.xdy/" .. opquote
        .. " -pdflatex=\"" .. latexname .." %O %S\" "
        .. sourcename .."_html.tex" ) ;
    if ( err ~= 0 ) then print ( "lwarpmk: Compile error.") ; os.exit(1) ; end
    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("_html")
        pdftohtml ()
        print ("lwarpmk: Done.")
    else
        print ("lwarpmk: " .. homehtmlfilename .. ".html is up to date.")
    end
end -- not latexmk

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 ()
print ("lwarpmk: Processing the index.")
os.execute("texindy -M lwarp_html.xdy " .. sourcename .. "_html.idx")
print ("lwarpmk: Forcing an update of " .. sourcename ..".tex.")
refreshdate ()
print ("lwarpmk: " .. sourcename ..".tex is ready to be recompiled.")
print ("lwarpmk: Done.")

-- lwarpmk limages:
-- Scan the lateximages.txt file to create lateximages,
-- then touch the source to trigger a recompile.

elseif arg[1] == "limages" then
loadconf ()
print ("lwarpmk: Processing images.")
createlateximages ()
print ("lwarpmk: Forcing an update of " .. sourcename ..".tex.")
refreshdate ()
print ("lwarpmk: " .. sourcename ..".tex is ready to be recompiled.")
print ("lwarpmk: Done.")

-- lwarpmk again:
-- Touch the source to trigger a recompile.

elseif arg[1] == "again" then
loadconf ()
print ("lwarpmk: Forcing an update of " .. sourcename ..".tex.")
refreshdate ()
print ("lwarpmk: " .. sourcename ..".tex is ready to be recompiled.")
print ("lwarpmk: Done.")

-- lwarpmk clean:
-- Remove project.aux, .toc, .lof, .lot, .idx, .ind, .log

elseif arg[1] == "clean" then
loadconf ()
removeaux ()
print ("lwarpmk: Done.")

-- lwarpmk cleanall
-- Remove project.aux, .toc, .lof, .lot, .idx, .ind, .log
--    and also project.pdf, *.html

elseif arg[1] == "cleanall" then
loadconf ()
removeaux ()
os.execute ( rmname .. " " ..
    sourcename .. ".pdf " .. sourcename .. "_html.pdf " ..
    "*.html"
    )
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 ()

else
print ("lwarpmk: Unknown command \""..arg[1].."\".\n")
printhelp ()
end

end -- not --version
\end{VerbatimOut}
% \end{Verbatim}% for syntax highlighting
%    \end{macrocode}

%    \begin{macrocode}
\end{LWR@createlwarpmk}
%    \end{macrocode}


% \iffalse
%</lwarp-newproject>
% \fi
%
%
%
%
%
% \changes{v0.20}{2016/12/12}{Code factored into independent \texttt{lwarp\_html} files.}
%
%
%
%
% \clearpage
%
% \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
%
% Accept all options for \pkg{lwarp-abstract}:
%    \begin{macrocode}
\LWR@ProvidesPackagePass{abstract}
%    \end{macrocode}


%    \begin{macrocode}
\AtBeginDocument{
\BeforeBeginEnvironment{abstract}{\BlockClass{abstract}}
\AfterEndEnvironment{abstract}{\endBlockClass}
}

\renewcommand{\@bsrunintitle}{%
\hspace*{\abstitleskip}%
{\abstractnamefont%
\InlineClass{abstractrunintitle}{\abstractname}%
\@bslabeldelim}%
}

\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

%    \end{macrocode}


% \iffalse
%</abstract>
% \fi
%
%
%
% \clearpage
%
% \iffalse
%<*afterpage>
% \fi
%
% \part{lwarp-afterpage.sty}
%
% \section{Afterpage}
%
% \DescribePackage{afterpage} Not used.
%
% \changes{v0.20}{2017/01/11}{\pkg{afterpage}: Added.}
%
% \codehtml
%
% Discard all options for \pkg{lwarp-afterpage}:
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{afterpage}
%    \end{macrocode}
%
%    \begin{macrocode}
\newcommand{\afterpage}[1]{#1}
%    \end{macrocode}
%
% \iffalse
%</afterpage>
% \fi
%
%
%
% \clearpage
%
% \iffalse
%<*algorithmicx>
% \fi
%
% \part{lwarp-algorithmicx.sty}
%
% \section{Algorithmicx}
% \label{sec:algorithmicx}
%
% \DescribePackage{algorithmicx}
% \pkg{algorithmicx} is supported with minor adjustments.
%
% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackagePass{algorithmicx}
%    \end{macrocode}


%
%
% Inside the \env{algorithmic} environment, level indenting is converted to a \tag{span}
% of the required length, and comments are placed inside a \tag{span} which is floated right.
%
% \limitscombiningfloats
%
% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}

%    \begin{macrocode}
\AtBeginEnvironment{algorithmic}{%
%
\let\origALG@doentity\ALG@doentity%
%
\renewcommand*{\ALG@doentity}{%
\origALG@doentity%
\uselengthunit{PT}%
\LWR@htmltagc{%
span style="width:\rndprintlength{\ALG@thistlm}; display:inline-block;"%
}%
\LWR@htmltagc{/span}%
}%
%
\let\origComment\Comment%
%
\renewcommand{\Comment}[1]{\InlineClass{floatright}{\origComment{#1}}}%
}
%    \end{macrocode}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}

% \iffalse
%</algorithmicx>
% \fi
%
%
%
% \iffalse
%<*alltt>
% \fi
%
% \part{lwarp-alltt.sty}

% \section{Alltt}
%
% \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}
%    \end{macrocode}

%    \begin{macrocode}
\AfterEndPreamble{
\AtBeginEnvironment{alltt}{\LWR@atbeginverbatim{alltt}\unskip\vspace*{-\baselineskip}}
\AfterEndEnvironment{alltt}{\unskip\vspace*{-\baselineskip}\LWR@afterendverbatim}
}
%    \end{macrocode}

% \iffalse
%</alltt>
% \fi
%
%
%
% \clearpage
%
% \iffalse
%<*amsthm>
% \fi

% \part{lwarp-amsthm.sty}

% \section{AMSthm}
%
% \credits{Publications Technical Group --- American Mathematical Society}
%
% \DescribePackage{amsthm}
% \pkg{amsthm} is patched for use by \pkg{lwarp}.
%
% \changes{v0.25}{2017/03/15}{\pkg{amsthm}: Added.}
%
% \begin{description}
% \item[CSS styling of theorems and proofs:] \
% \begin{description}
% \item [Theorem:] \tag{div} of class |amsthmbody<theoremstyle>|
% \item [Theorem Name:] \tag{span} of class |amsthmname<theoremtyle>|
% \item [Theorem Number:] \tag{span} of class |amsthmnumber<theoremstyle>|
% \item [Theorem Note:] \tag{span} of class |amsthmnote<theoremstyle>|
% \item [Proof:] \tag{div} of class |amsthmproof|
% \item [Proof Name:] \tag{span} of class |amsthmproofname|
% \end{description}
% where |<theoremstyle>| is |plain|, |definition|, etc.
% \end{description}
% 
%
% \codehtml
%
%    \begin{macrocode}
\LWR@ProvidesPackagePass{amsthm}
%    \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}% new
  }{%
    \thm@style{#1}%
	\renewcommand{\LWR@newtheoremstyle}{#1}% new
  }%
}
%    \end{macrocode}

% Patched to remember the style for this theorem type:
%    \begin{macrocode}
\def\@xnthm#1#2{%
  \csedef{LWR@thmstyle#2}{\LWR@newtheoremstyle}% new
  \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{\csuse{LWR@thmstyle#2}}}% new
  }%
  \@tempa
}
%    \end{macrocode}

% Patched to enclose with \acro{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 \acro{CSS}:
%    \begin{macrocode}
\def\@begintheorem#1#2[#3]{%
  \BlockClass{amsthmbody\LWR@thisthmstyle}% new
  \deferred@thm@head{
	\the\thm@headfont \thm@indent
    \@ifempty{#1}{\let\thmname\@gobble}{\LWR@haveamsthmname}% new
    \@ifempty{#2}{\let\thmnumber\@gobble}{\LWR@haveamsthmnumber}% new
    \@ifempty{#3}{\let\thmnote\@gobble}{\LWR@haveamsthmnote}% new
    \thm@swap\swappedhead\thmhead{#1}{#2}{#3}%
    \the\thm@headpunct~
    \thmheadnl % possibly a newline.
    \hskip\thm@headsep
  }%
  \ignorespaces}
%    \end{macrocode}
%
% Patched for \acro{CSS}:
%    \begin{macrocode}
\def\@endtheorem{\endBlockClass\endtrivlist\@endpefalse }
%    \end{macrocode}
%
%
% Proof QED symbol:
%    \begin{macrocode}
\AtBeginDocument{
\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
}
%    \end{macrocode}
%
% Patched for \acro{CSS}:
%    \begin{macrocode}
\renewenvironment{proof}[1][\proofname]{\par
	\BlockClass{amsthmproof}% new
  \pushQED{\qed}%
  \normalfont \topsep6\p@\@plus6\p@\relax
  \trivlist
  \item[\hskip\labelsep
        \InlineClass{amsthmproofname}{#1\@addpunct{.}}]\ignorespaces% changes
}{%
  \InlineClass{theoremendmark}{\popQED}\endtrivlist%
  \endBlockClass% new
  \@endpefalse
}
%    \end{macrocode}


% \iffalse
%</amsthm>
% \fi
%
%
%
% \iffalse
%<*bookmark>
% \fi

% \part{lwarp-bookmark.sty}

% \section{Bookmark}
%
% \DescribePackage{bookmark}
% \pkg{bookmark} is emulated during \acro{HTML} output, and
% the \pkg{bookmark} package is ignored.

% \changes{v0.20}{2017/01/03}{\pkg{bookmark}: Added.}
%
% \codehtml
%
% Discard all options for \pkg{lwarp-bookmark}:
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{bookmark}
%    \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
%
%
%
%
% \clearpage
%
% \iffalse
%<*booktabs>
% \fi

% \part{lwarp-booktabs.sty}

% \section{Booktabs}
% \label{sec:booktabs}
%
%
% \DescribePackage{booktabs}
% \pkg{booktabs} is emulated during \acro{HTML} output, and
% the \pkg{booktabs} package is ignored.

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{booktabs}
%    \end{macrocode}
%
% Booktabs emulation is spread among the tabular code.
%
%
% Emulated for source compatibility.
%    \begin{macrocode}
\newcommand*{\addlinespace}[1]{}
\newcommand*{\morecmidrules}{}
\newcommand*{\specialrule}[3]{}
%    \end{macrocode}

% \iffalse
%</booktabs>
% \fi
%
%
%
% \iffalse
%<*ccaption>
% \fi

% \part{lwarp-ccaption.sty}

% \section{Ccaption}
%
% \DescribePackage{ccaption}
% \pkg{ccaption} is not used.
% The user is recommended to use \pkg{caption} instead.

% \changes{v0.25}{2017/03/16}{\pkg{ccaption}: Prevented.}

% \codehtml
%    \begin{macrocode}
\LWR@loadnever{ccaption}{caption}
%    \end{macrocode}


% \iffalse
%</ccaption>
% \fi
%
%
%
% \clearpage
%
% \iffalse
%<*changepage>
% \fi

% \part{lwarp-changepage.sty}

% \section{Changepage}
%
% \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}
%    \end{macrocode}

%    \begin{macrocode}
\newif\ifoddpage
\DeclareRobustCommand{\checkoddpage}{\oddpagetrue}
\DeclareRobustCommand{\changetext}[5]{}
\DeclareRobustCommand{\changepage}[9]{}
\newenvironment{adjustwidth}[2]{}{}
\newenvironment{adjustwidth*}[2]{}{}
%    \end{macrocode}

% \iffalse
%</changepage>
% \fi
%
%
%
%
%
%
% \clearpage
%
% \iffalse
%<*cutwin>
% \fi
%
% \part{lwarp-cutwin.sty}
%
% \section{Cutwin}
%
% \DescribePackage{cutwin} Emulated.
%
% \changes{v0.26}{2017/03/30}{\pkg{cutwin}: Added.}
%
% \codehtml
%
% Discard all options for \pkg{lwarp-cutwin}:
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{cutwin}
%    \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
%<*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 during \acro{HTML} output, and
% the \pkg{dcolumn} package is ignored.
%
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{dcolumn}
%    \end{macrocode}
%
% \iffalse
%</dcolumn>
% \fi
%
%
%
%
%
% \clearpage
%
% \iffalse
%<*draftwatermark>
% \fi

% \part{lwarp-draftwatermark.sty}

% \section{Draftwatermark}
% \label{sec:draftwatermark}
%
% \changes{v0.20}{2017/01/11}{\pkg{draftwatermark}: Added.}
%
% \DescribePackage{draftwatermark}
% \pkg{draftwatermark} is emulated during \acro{HTML} output, and
% the \pkg{draftwatermark} package is ignored.

% \codehtml

%    \begin{macrocode}
\LWR@ProvidesPackageDrop{draftwatermark}
%    \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
%<*ellipsis>
% \fi

% \part{lwarp-ellipsis.sty}

% \section{Ellipsis}
% \label{sec:ellipsis}
%
% \changes{v0.25}{2017/03/16}{\pkg{ellipsis}: Added.}
%
% \DescribePackage{ellipsis}
% \pkg{ellipsis} is emulated during \acro{HTML} output, and
% the \pkg{ellipsis} package is ignored.

%    \begin{macrocode}
\LWR@ProvidesPackageDrop{ellipsis}

\newcommand{\ellipsisgap}{0.1em}
%    \end{macrocode}

% \iffalse
%</ellipsis>
% \fi
%
%
%
%
% \clearpage
%
% \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}
%    \end{macrocode}

% \iffalse
%</emptypage>
% \fi
%
%
%
%
% \clearpage
%
% \iffalse
%<*endnotes>
% \fi

% \part{lwarp-endnotes.sty}
%
% \section{Endnotes}
%
% \credits{John Lavagnino}
%
% \DescribePackage{endnotes}
%
%
% \changes{v0.26}{2017/03/27}{\pkg{endnotes}: Added.}
%
%
% Discard all options for \pkg{lwarp-endnotes}:
%
% \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{\textsuperscript{\normalfont\theenmark}}}
\def\makeenmark{\@makeenmark}
%    \end{macrocode}
%
% \iffalse
%</endnotes>
% \fi
%
%
%
%
%
% \clearpage
%
% \iffalse
%<*enumerate>
% \fi

% \part{lwarp-enumerate.sty}

% \section{Enumerate}
%
% \DescribePackage{enumerate}
% \pkg{enumerate} is ignored.
% \pkg{enumitem} is then modified per the |shortlabels| option.
%
% \limitsenumerate
%
% \changes{v0.22}{2017/03/02}{\pkg{enumerate}: Added.}
%
% \codehtml
%
% Discard all options for \pkg{lwarp-enumerate}:
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{enumerate}
%    \end{macrocode}


%    \begin{macrocode}
% \DeclareOption{shortlabels}
% {
\def\enit@shl#1{%
     \ifnum\enit@type=\tw@
       \enit@toks{#1}%
     \else
       \def\enit@c{#1}%
       \enit@first#1,\@nil\@@nil % Returns enit@toks
    \fi}
% }
%    \end{macrocode}


% \iffalse
%</enumerate>
% \fi
%
%
%
% \clearpage
%
% \iffalse
%<*epigraph>
% \fi

% \part{lwarp-epigraph.sty}

% \section{Epigraph}
% \label{sec:epigraph}
%
%
% \DescribePackage{epigraph}
% \pkg{epigraph} is emulated during \acro{HTML} output, and
% the \pkg{epigraph} package is ignored.

% \codehtml

%    \begin{macrocode}
\LWR@ProvidesPackageDrop{epigraph}
%    \end{macrocode}

%    \begin{macrocode}
\newcommand{\qitem}[2]
{
\begin{BlockClass}{qitem}
#1
\begin{BlockClass}{epigraphsource}
#2
\end{BlockClass}
\end{BlockClass}
}
%    \end{macrocode}

%    \begin{macrocode}
\newcommand{\epigraph}[2]
{
\begin{BlockClass}{epigraph}
\qitem{#1}{#2}
\end{BlockClass}
}

\newenvironment*{epigraphs}
{\BlockClass{epigraph}}
{\endBlockClass}
%    \end{macrocode}
%
% Use \acro{CSS} to format epigraphs.
%
% The following are null commands for source compatibility:
%    \begin{macrocode}
\newlength{\epigraphwidth}
\setlength{\epigraphwidth}{.5\linewidth}
\newenvironment*{flushepinormal}{}{}
\newcommand{\textflush}[1]{flushepinormal}
\newcommand{\epigraphflush}[1]{flushright}
\newcommand{\sourceflush}[1]{flushright}
\newcommand*{\epigraphsize}{\small}
\newlength{\epigraphrule}
\newlength{\beforeepigraphskip}
\newlength{\afterepigraphskip}
\newcommand{\epigraphhead}[2][0]{#2}
\newcommand{\dropchapter}[1]{}
\newcommand*{\undodrop}{}
\newcommand{\cleartoevenpage}[1][]{}
%    \end{macrocode}

% \iffalse
%</epigraph>
% \fi
%
%
%
%
% \iffalse
%<*eso-pic>
% \fi

% \part{lwarp-eso-pic.sty}

% \section{Eso-pic}
% \label{sec:eso-pic}
%
% \changes{v0.20}{2017/01/11}{\pkg{eso-pic}: Added.}
%
% \DescribePackage{eso-pic}
% \pkg{eso-pic} is emulated during \acro{HTML} output, and
% the \pkg{eso-pic} package is ignored.

% \codehtml

%    \begin{macrocode}
\LWR@ProvidesPackageDrop{eso-pic}
%    \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}{}
\let\AddToShipoutPicture\AddToShipoutPictureBG
\NewDocumentCommand{\AddToShipoutPictureFG}{s +m}{}
\newcommand*{\ClearShipoutPictureBG}{}
\newcommand*{\ClearShipoutPicture}{}
\newcommand*{\ClearShipoutPictureFG}{}
\newcommand{\gridSetup}[6][]{}
%    \end{macrocode}

% \iffalse
%</eso-pic>
% \fi
%
%
%
% \clearpage
%
% \iffalse
%<*everypage>
% \fi

% \part{lwarp-everypage.sty}

% \section{Everypage}
% \label{sec:everypage}
%
% \changes{v0.20}{2017/01/11}{\pkg{everypage}: Added.}
%
% \DescribePackage{everypage}
% \pkg{everypage} is emulated during \acro{HTML} output, and
% the \pkg{everypage} package is ignored.

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{everypage}
%    \end{macrocode}

%    \begin{macrocode}
\newcommand*{\AddEverypageHook}[1]{}
\newcommand*{\AddThispageHook}[1]{}
%    \end{macrocode}

% \iffalse
%</everypage>
% \fi
%
%
% \iffalse
%<*extramarks>
% \fi

% \part{lwarp-extramarks.sty}

% \section{Extramarks}
%
% \DescribePackage{extramarks}
% \pkg{extramarks} is not used.
%
% \changes{v0.20}{2017/01/11}{\pkg{extramarks}: Added.}
%
% \codehtml
%
% Discard all options for \pkg{lwarp-extramarks}:
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{extramarks}
%    \end{macrocode}

%    \begin{macrocode}
\newcommand*{\extramarks}[2]{}
\newcommand*{\firstleftxmark}{}
\newcommand*{\lastleftxmark}{}
\newcommand*{\firstrightxmark}{}
\newcommand*{\lastrightxmark}{}
\newcommand*{\firstxmark}{}
\newcommand*{\lastxmark}{}
\newcommand*{\topxmark}{}
\newcommand*{\topleftxmark}{}
\newcommand*{\firstleftmark}{}
\newcommand*{\lastrightmark}{}
%    \end{macrocode}

% \iffalse
%</extramarks>
% \fi
%
%
%
% \clearpage
%
% \iffalse
%<*fancyhdr>
% \fi

% \part{lwarp-fancyhdr.sty}

% \section{Fancyhdr}
%
% \DescribePackage{fancyhdr}
% \pkg{fancyhdr} is nullified.
%
% \changes{v0.20}{2017/01/11}{\pkg{fancyhdr}: Added.}
%
% \codehtml
%
% Discard all options for \pkg{lwarp-fancyhdr}:
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{fancyhdr}
%    \end{macrocode}

%    \begin{macrocode}
\newcommand*{\fancyhead}[2][]{}
\newcommand*{\fancyfoot}[2][]{}
\newcommand*{\fancyhf}[2][]{}
\newcommand*{\fancypagestyle}[2]{}
\newcommand*{\lhead}[1]{}
\newcommand*{\chead}[1]{}
\newcommand*{\rhead}[1]{}
\newcommand*{\lfoot}[1]{}
\newcommand*{\cfoot}[1]{}
\newcommand*{\rfoot}[1]{}
\newcommand*{\headrulewidth}{}
\newcommand*{\footrulewidth}{}
\newcommand*{\fancyheadoffset}[2][]{}
\newcommand*{\fancyfootoffset}[2][]{}
\newcommand*{\fancyhfoffset}[2][]{}
\newcommand*{\iffloatpage}[2]{#2}
\newcommand*{\ifftopfloat}[2]{#2}
\newcommand*{\iffbotfloat}[2]{#2}
%    \end{macrocode}

% \iffalse
%</fancyhdr>
% \fi
%
%
%
%
% \clearpage
%
% \iffalse
%<*float>
% \fi

% \part{lwarp-float.sty}

% \section{Float and \cs{newfloat}}
% \label{sec:newfloat}
% \label{sec:float}
%
% \DescribePackage{float}
% \pkg{float} is emulated during \acro{HTML} output, and
% the \pkg{float} package is ignored.
%
% \changes{v0.20}{2017/01/22}{Improved float caption type handling.}
%
%
% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{float}[2016/03/04]
%    \end{macrocode}

%
% See \cref{sec:listof} for the \cs{listof} command.


% \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.
%
% ``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}
% \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}
% \end{macro}

% \begin{macro}{\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{macro}

% \begin{macro}{\floatplacement} \marg{type} \marg{placement}
%
% Float placement is ignored.
%    \begin{macrocode}
\newcommand*{\floatplacement}[2]{%
\SetupFloatingEnvironment{#1}{placement=#2}%
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\floatstyle} \marg{style}
%
% Float styles are ignored.
%    \begin{macrocode}
\newcommand{\floatstyle}[1]{%
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\restylefloat} * \marg{style}
%
% Float styles are ignored.
%    \begin{macrocode}
\NewDocumentCommand{\restylefloat}{s m}{%
}
%    \end{macrocode}
% \end{macro}

% \iffalse
%</float>
% \fi
%
%
%
%
%
%
% \clearpage
%
% \iffalse
%<*floatflt>
% \fi
%
% \part{lwarp-floatflt.sty}
%
% \section{Floatflt}
%
% \DescribePackage{floatflt} Emulated.
%
% \changes{v0.26}{2017/03/30}{\pkg{floatflt}: Added.}
%
% \codehtml
%
% Discard all options for \pkg{lwarp-floatflt}:
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{floatflt}
%    \end{macrocode}
%
%
%
% Borrowed from the \pkg{lwarp} version of \pkg{keyfloat}:
%    \begin{macrocode}
\DeclareDocumentEnvironment{KFLT@marginfloat}{O{-1.2ex} m}
{% start
\LWR@maybeincthisfloat%
% \BlockClass{marginblock}
\LWR@stoppars%
\LWR@htmltag{div class="marginblock" id="autofloat-\arabic{LWR@thisfloat}"}
\LWR@startpars%
\captionsetup{type=#2}%
}
{
% \endBlockClass
\LWR@htmldivclassend{div}
}

\DeclareDocumentEnvironment{floatingfigure}{o m}
  {\begin{KFLT@marginfloat}{figure}}
  {\end{KFLT@marginfloat}}

\DeclareDocumentEnvironment{floatingtable}{o +m}
  {\begin{KFLT@marginfloat}{table}#2}
  {\end{KFLT@marginfloat}}
%    \end{macrocode}
%
% \iffalse
%</floatflt>
% \fi
%
%
%
%
% \clearpage
%
% \iffalse
%<*floatrow>
% \fi

% \part{lwarp-floatrow.sty}

% \section{Floatrow}
% \label{sec:floatrow}
%
% \DescribePackage{floatrow}
% \pkg{floatrow} is emulated during \acro{HTML} output, and
% the \pkg{floatrow} package is ignored.

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{floatrow}
%    \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}

% ^^A \begin{macro}{\floatbox}
% \cs{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}
% ^^A \end{macro}


% 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}


% ^^A \begin{macro}{\newfloatcommand} \marg{1 command} \marg{2 captype}
% ^^A	\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}
% ^^A \end{macro}

% ^^A \begin{macro}{\renewfloatcommand} \marg{1 command} \marg{2 captype}
% ^^A	\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}
% ^^A \end{macro}

% ^^A \begin{macro}{\ffigbox} \oarg{width} \oarg{height} \oarg{vposn}
% ^^A	\marg{caption commands} \marg{contents}
%    \begin{macrocode}
\newfloatcommand{ffigbox}{figure}[\nocapbeside][]
%    \end{macrocode}
% ^^A \end{macro}
%
% ^^A \begin{macro}{\ttabbox} \oarg{width} \oarg{height} \oarg{vposn}
% ^^A	\marg{caption commands} \marg{contents}
% \changes{v0.15}{2016/03/31}{Fixed \& handling.}
%    \begin{macrocode}
\newfloatcommand{ttabbox}{table}[\captop][\FBwidth]
%    \end{macrocode}
% ^^A \end{macro}
%
% ^^A \begin{macro}{\fcapside} \oarg{width} \oarg{height} \oarg{vposn}
% ^^A	\marg{caption commands} \marg{contents}
%    \begin{macrocode}
\newfloatcommand{fcapside}{figure}[\capbeside][]
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{environment}{floatrow} \oarg{numfloats}
% \changes{v0.20}{2016/08/20}{Fix: \cs{linewidth} in a floatrow.}
%
% The row of floats is placed into a \tag{div} of class |floatrow|.
%    \begin{macrocode}
\newenvironment*{floatrow}[1][2]
{
\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}
% ^^A \end{environment}
%
% 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}

% ^^A \begin{macro}{\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}
% ^^A \end{macro}

% Not used:
%    \begin{macrocode}
\newcommand{\buildFBBOX}[2]{}
\newcommand*{\CenterFloatBoxes}{}
\newcommand*{\TopFloatBoxes}{}
\newcommand*{\BottomFloatBoxes}{}
\newcommand*{\PlainFloatBoxes}{}

\newcommand{\capsubrowsettings}{}

\NewDocumentCommand{\RawFloats}{o o}{}
%    \end{macrocode}

% ^^A \begin{macro}{\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}
% ^^A \end{macro}


% ^^A \begin{macro}{\floatfoot} \marg{text}
%
% Places additional text inside a float,
% inside a \acro{CSS} \tag{div} of class |floatfoot|.
%    \begin{macrocode}
\NewDocumentCommand{\floatfoot}{s +m}{%
\begin{BlockClass}{floatfoot}
#2
\end{BlockClass}
}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \DescribeBoolean{LWR@insubfloatrow}
% Used to compute \cs{linewidth}.
%    \begin{macrocode}
\newbool{LWR@insubfloatrow}
\boolfalse{LWR@insubfloatrow}
%    \end{macrocode}

% ^^A \begin{environment}{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 \tag{div} of class |floatrow|:
%    \begin{macrocode}
\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}
% ^^A \end{environment}

% \iffalse
%</floatrow>
% \fi
%
%
%
% \clearpage
%
% \iffalse
%<*fontenc>
% \fi
%
% \part{lwarp-fontenc.sty}
%
% \section{Fontenc}
%
% \DescribePackage{fontenc}
% Error if \pkg{fontenc} is loaded after \pkg{lwarp}.
%
% \changes{v0.21}{2017/02/22}{\pkg{fontenc}: Added.}
%

% Discard all options for \pkg{lwarp-fontenc}:

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{fontenc}
%    \end{macrocode}

%    \begin{macrocode}
\LWR@loadbefore{fontenc}
%    \end{macrocode}

% \iffalse
%</fontenc>
% \fi
%
%
%
%
% \iffalse
%<*fontspec>
% \fi
%
% \part{lwarp-fontspec.sty}
%
% \section{Fontspec}
%
% \DescribePackage{fontspec}
% Error if \pkg{fontspec} is loaded after \pkg{lwarp}.
%
% \changes{v0.21}{2017/02/22}{\pkg{fontspec}: Added.}
%

% Discard all options for \pkg{lwarp-fontspec}:
%
% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{fontspec}
%    \end{macrocode}

%    \begin{macrocode}
\LWR@loadbefore{fontspec}
%    \end{macrocode}

% \iffalse
%</fontspec>
% \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 during \acro{HTML} output, and
% the \pkg{footmisc} package is ignored.
%
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{footmisc}
%    \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
%
%
%
% \clearpage
%
% \iffalse
%<*footnote>
% \fi
%
% \part{lwarp-footnote.sty}
%
% \section{Footnote}
%
% \DescribePackage{footnote}
% \pkg{footnote} is used with minor patches.
%
% \changes{v0.26}{2017/03/26}{\pkg{footnote}: Added.}
%
% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackagePass{footnote}
%    \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
\newcommand*{\fn@endnote}{\LWR@htmltagc{/\LWR@tagregularparagraph}}
%    \end{macrocode}
%
% Removed print-version formatting:
%    \begin{macrocode}
\def\fn@startfntext{%
  \setbox\z@\vbox\bgroup%
    \fn@startnote%
    \fn@prefntext%
    \ignorespaces%
}
%    \end{macrocode}
%
% Removed print-version formatting, added closing paragraph tag:
%    \begin{macrocode}
\def\fn@endfntext{%
	\LWR@htmltagc{/\LWR@tagregularparagraph}%
    \fn@postfntext%
  \egroup%
  \begingroup%
    \let\@makefntext\@empty%
    \let\@finalstrut\@gobble%
    \let\rule\@gobbletwo%
    \@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
%<*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}
%    \end{macrocode}
%
%
% \iffalse
%</footnotehyper>
% \fi
%
%
%
%
%
% \clearpage
%
% \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}
%    \end{macrocode}


%    \begin{macrocode}

\renewenvironment{framed}{%
\BlockClass{framed}%
}
{\endBlockClass}

\renewenvironment{oframed}{%
\BlockClass{framed}%
}
{\endBlockClass}


\renewenvironment{shaded}{%
\convertcolorspec{named}{shadecolor}{HTML}\LWR@tempcolor%
\BlockClass{framed}[background: \#\LWR@tempcolor]%
}
{\endBlockClass}

\renewenvironment{shaded*}{%
\convertcolorspec{named}{shadecolor}{HTML}\LWR@tempcolor%
\BlockClass{framed}[background: \#\LWR@tempcolor]%
}
{\endBlockClass}


\renewenvironment{leftbar}{%
	\BlockClass{framedleftbar}
  \def\FrameCommand{}%
  \MakeFramed {}
}%
 {\endMakeFramed\endBlockClass}


\renewenvironment{snugshade}{%
\convertcolorspec{named}{shadecolor}{HTML}\LWR@tempcolor%
\BlockClass{snugframed}[background: \#\LWR@tempcolor]%
}
{\endBlockClass}

\renewenvironment{snugshade*}{%
\convertcolorspec{named}{shadecolor}{HTML}\LWR@tempcolor%
\BlockClass{snugframed}[background: \#\LWR@tempcolor]%
}
{\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%
\begin{BlockClass}{framed}[border: 3px solid \#\LWR@tempcolor]%
\ifthenelse{\isempty{#1}}{}{% not empty
\begin{BlockClass}{framedtitle}[background: \#\LWR@tempcolor]%
\textcolor{TFTitleColor}{\textbf{#1}}%
\end{BlockClass}
}% not empty

#7

\ifthenelse{\isempty{#2}}{}{% not empty
\convertcolorspec{named}{TFFrameColor}{HTML}\LWR@tempcolor%
\begin{BlockClass}{framedtitle}[background: \#\LWR@tempcolor]%
\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
%
%
%
%
% \clearpage
%
% \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}
%    \end{macrocode}

% \iffalse
%</ftnright>
% \fi
%
%
%
%
% \iffalse
%<*geometry>
% \fi

% \part{lwarp-geometry.sty}

% \section{Geometry}
%
% \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}
%    \end{macrocode}

%    \begin{macrocode}
\renewcommand*{\geometry}[1]{}
\renewcommand*{\newgeometry}[1]{}
\renewcommand*{\restoregeometry}{}
\renewcommand*{\savegeometry}[1]{}
\renewcommand*{\loadgeometry}[1]{}
%    \end{macrocode}

% \iffalse
%</geometry>
% \fi
%
%
% \clearpage
%
% \iffalse
%<*graphics>
% \fi

% \part{lwarp-graphics.sty}

% \section{Graphics}
%
% \DescribePackage{graphics}
% \pkg{graphics} is not used.
% The user is required to use \pkg{graphicx} instead.

% \codehtml
%    \begin{macrocode}
\LWR@loadnever{graphics}{graphicx}
%    \end{macrocode}


% \iffalse
%</graphics>
% \fi
%
%
%
% \iffalse
%<*graphicx>
% \fi

% \part{lwarp-graphicx.sty}

% \section{Graphicx}
%
% \DescribePackage{graphicx}
% \pkg{graphicx} is emulated during \acro{HTML} output, and
% the \pkg{graphicx} package is ignored.

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{graphicx}
%    \end{macrocode}


% \iffalse
%</graphicx>
% \fi
%
%
%
% \clearpage
%
% \iffalse
%<*hyperref>
% \fi

% \part{lwarp-hyperref.sty}

% \section{Hyperref}
%
% \DescribePackage{hyperref}
% \pkg{hyperref} is emulated during \acro{HTML} output, and
% the \pkg{hyperref} package is ignored.

% \changes{v0.20}{2017/01/03}{\pkg{hyperref}: Additional user macros.}
%
% \codehtml
%    \begin{macrocode}
% \LWR@ProvidesPackageDrop{hyperref}
\typeout{Using the lwarp html version of package `hyperref' — discarding options.}
\typeout{    Are not using ProvidesPackage, so that other packages}
\typeout{    do not attempt to patch lwarp's version of `hyperref'.}
% \ProvidesPackage{lwarp-#1-#2}
\DeclareOption*{}
\ProcessOptions\relax
%    \end{macrocode}

%    \begin{macrocode}
\newcommand*{\hypersetup}[1]{}
\newcommand*{\hyperbaseurl}[1]{}
%    \end{macrocode}



% ^^A \begin{macro}{\hyperimage} \marg{url} \marg{alt text}
%
% Insert an image with alt text:
%    \begin{macrocode}
\NewDocumentCommand{\LWR@hyperimageb}{m +m}{%
\LWR@htmltag{img src="#1" alt="#2" class="hyperimage"{}}%
\endgroup%
\LWR@ensuredoingapar%
}

\newcommand{\hyperimage}{%
\LWR@ensuredoingapar%
\begingroup\catcode`\_=12
\LWR@hyperimageb%
}
%    \end{macrocode}
% ^^A \end{macro}
%
%
% ^^A \begin{macro}{\hyperdef} \marg{1: category} \marg{2: name} \marg{3: text}
% Creates an HTML anchor to |category.name| with the given text.
%
%    \begin{macrocode}
\NewDocumentCommand{\hyperdef}{m m +m}{%
\LWR@ensuredoingapar%
\LWR@subsublabel{#1.#2}%
#3%
}
%    \end{macrocode}
% ^^A \end{macro}
%
%
% ^^A \begin{macro}{\LWR@hyperrefb} \marg{1: URL} \marg{2: category}
% ^^A							\marg{3: name} \marg{4: text}
%
% Creates an HTML link to |URL#category.name| with the given text.
%    \begin{macrocode}
\NewDocumentCommand{\LWR@hyperrefb}{m m m +m}{%
\LWR@htmltag{a href="#1\LWR@hashmark#2.#3"}%
#4%
\LWR@htmltag{/a}%
\endgroup%
}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\LWR@hyperrefc} \oarg{label} \marg{text}
%
% Creates text as an HTML link to the \LaTeX\ label.
%    \begin{macrocode}
\NewDocumentCommand{\LWR@hyperrefc}{O{label} +m}{
\LWR@startref{#1}%
#2%
\LWR@htmltag{/a}%
\endgroup%
}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\hyperref}
% ^^A	\marg{1: URL} \marg{2: category} \marg{3: name} \marg{4: text} \quad -or-
%
% ^^A	\oarg{1: label} \marg{2: text}
%
%    \begin{macrocode}
\newcommand{\hyperref}{%
\LWR@ensuredoingapar%
\begingroup\catcode`\_=12
\@ifnextchar[\LWR@hyperrefc\LWR@hyperrefb%
}
%    \end{macrocode}
% ^^A \end{macro}



% ^^A \begin{macro}{\hypertarget} \marg{name} \marg{text}
% Creates an anchor to |name| with the given text.
%
%    \begin{macrocode}
\NewDocumentCommand{\hypertarget}{m +m}{%
\label{#1}%
#2%
}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\hyperlink} \marg{name} \marg{text}
%
% Creates a link to the anchor created by hypertarget,
% with the given link text.
%
%    \begin{macrocode}
\NewDocumentCommand{\hyperlink}{m +m}{%
\hyperref[#1]{#2}%
}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\autoref} * \marg{label}
%
% For \acro{HTML}, \cs{cleverref} is used instead.
%
%    \begin{macrocode}
\NewDocumentCommand{\autoref}{s m}{%
\IfBooleanTF{#1}{\ref{#2}}{\cref{#2}}%
}
%    \end{macrocode}
% ^^A \end{macro}
%
%
% ^^A \begin{macro}{\autopageref} \marg{label}
%
% For \acro{HTML}, \cs{cleverref} is used instead.
%
%    \begin{macrocode}
\NewDocumentCommand{\autopageref}{s m}{%
\IfBooleanTF{#1}{\cpageref{#2}}{\cref{#2}}%
}
%    \end{macrocode}
% ^^A \end{macro}



% ^^A \begin{macro}{\pdfstringdef} \marg{macroname} \marg{\TeX{}string}
%
%    \begin{macrocode}
\newcommand{\pdfstringdef}[2]{}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\pdfbookmark} \oarg{level} \marg{text} \marg{name}
%
%    \begin{macrocode}
\newcommand{\pdfbookmark}[3][]{}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\currentpdfbookmark} \marg{text} \marg{name}
%
%    \begin{macrocode}
\newcommand{\currentpdfbookmark}[2]{}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\subpdfbookmark} \marg{text} \marg{name}
%
%    \begin{macrocode}
\newcommand{\subpdfbookmark}[2]{}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\belowpdfbookmark} \marg{text} \marg{name}
%
%    \begin{macrocode}
\newcommand{\belowpdfbookmark}[2]{}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\texorpdfstring} \marg{\TeX{}string} \marg{PDFstring}
%
%    \begin{macrocode}
\newcommand{\texorpdfstring}[2]{#2}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\hypercalcbp} \marg{dimen} \quad
% From \pkg{hyperref}.
%
%    \begin{macrocode}
\def\hypercalcbp#1{%
\strip@pt\dimexpr 0.99626401\dimexpr(#1)\relax\relax
}%
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\Acrobatmenu} \marg{menuoption} \marg{text}
%
%    \begin{macrocode}
\newcommand{\Acrobatmenu}[2]{}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\TextField} \oarg{parameters} \marg{label}
%
%    \begin{macrocode}
\newcommand*{\TextField}[2][]{}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\CheckBox} \oarg{parameters} \marg{label}
%
%    \begin{macrocode}
\newcommand*{\CheckBox}[2][]{}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\ChoiceMenu} \oarg{parameters} \marg{label} \marg{choices}
%
%    \begin{macrocode}
\newcommand{\ChoiceMenu}[3][]{}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\PushButton} \oarg{parameters} \marg{label}
%
%    \begin{macrocode}
\newcommand*{\PushButton}[2][]{}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\Submit} \oarg{parameters} \marg{label}
%
%    \begin{macrocode}
\newcommand*{\Submit}[2][]{}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\Reset} \oarg{parameters} \marg{label}
%
%    \begin{macrocode}
\newcommand*{\Reset}[2][]{}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\LayoutTextField} \marg{label} \marg{field}
%
%    \begin{macrocode}
\newcommand*{\LayoutTextField}[2]{}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\LayoutChoiceField} \marg{label} \marg{field}
%
%    \begin{macrocode}
\newcommand*{\LayoutChoiceField}[2]{}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\LayoutCheckField} \marg{label} \marg{field}
%
%    \begin{macrocode}
\newcommand*{\LayoutCheckField}[2]{}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\MakeRadioField} \marg{width} \marg{height}
%
%    \begin{macrocode}
\newcommand*{\MakeRadioField}[2]{}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\MakeCheckField} \marg{width} \marg{height}
%
%    \begin{macrocode}
\newcommand*{\MakeCheckField}[2]{}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\MakeTextField} \marg{width} \marg{height}
%
%    \begin{macrocode}
\newcommand*{\MakeTextField}[2]{}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\MakeChoiceField} \marg{width} \marg{height}
%
%    \begin{macrocode}
\newcommand*{\MakeChoiceField}[2]{}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\MakeFieldButton} \marg{text}
%
%    \begin{macrocode}
\newcommand{\MakeFieldButton}[1]{}
%    \end{macrocode}
% ^^A \end{macro}

% \iffalse
%</hyperref>
% \fi
%
%
%
% \iffalse
%<*indentfirst>
% \fi

% \part{lwarp-indentfirst.sty}

% \section{Indentfirst}
%
% \DescribePackage{indentfirst}
% \pkg{indentfirst} is ignored.
%
% \changes{v0.22}{2017/03/01}{\pkg{indentfirst}: Added.}
%
% Discard all options for \pkg{lwarp-indentfirst}:

% \codehtml
%
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{indentfirst}
%    \end{macrocode}

% \iffalse
%</indentfirst>
% \fi
%
%
%
%
% \iffalse
%<*inputenc>
% \fi
%
% \part{lwarp-inputenc.sty}
%
% \section{Inputenc}
%
% \DescribePackage{inputenc}
% Error if \pkg{inputenc} is loaded after \pkg{lwarp}.
%
% \changes{v0.21}{2017/02/22}{\pkg{inputenc}: Added.}
%

% Discard all options for \pkg{lwarp-inputenc}:

% \codehtml
%
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{inputenc}
%    \end{macrocode}

%    \begin{macrocode}
\LWR@loadbefore{inputenc}
%    \end{macrocode}

% \iffalse
%</inputenc>
% \fi
%
%
%
% \clearpage
%
% \iffalse
%<*keyfloat>
% \fi

% \part{lwarp-keyfloat.sty}

% \section{Keyfloat}
% \label{sec:keyfloat}
%
% \DescribePackage{keyfloat}
% \pkg{keyfloat} is supported with minor adjustments.
%
% \changes{v0.20}{2017/01/16}{\pkg{keyfloat}: Added.}
%
% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackagePass{keyfloat}
%    \end{macrocode}

% After \pkg{keyfloat} has loaded:
%    \begin{macrocode}
\AtBeginDocument{
%    \end{macrocode}


%    \begin{macrocode}
\let\KFLT@boxinner\relax
\let\endKFLT@boxinner\relax

\NewEnviron{KFLT@boxinner}
{%
\LWR@traceinfo{kflt@boxinner}%
\LWR@stoppars%
\KFLT@frame{\BODY}%
\LWR@startpars%
\LWR@traceinfo{ended kflt@boxinner}%
}
%    \end{macrocode}


%    \begin{macrocode}
\DeclareDocumentEnvironment{KFLT@marginfloat}{O{-1.2ex} m}
{% start
\LWR@maybeincthisfloat%
% \BlockClass{marginblock}
\LWR@stoppars%
\LWR@htmltag{div class="marginblock" id="autofloat-\arabic{LWR@thisfloat}"}
\LWR@startpars%
\captionsetup{type=#2}%
}
{
% \endBlockClass
\LWR@htmldivclassend{div}
}
%    \end{macrocode}


%    \begin{macrocode}
}% AtBeginDocument
%    \end{macrocode}


% \iffalse
%</keyfloat>
% \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}
%    \end{macrocode}

%    \begin{macrocode}
\NewDocumentCommand{\layout}{s}{}
%    \end{macrocode}

% \iffalse
%</layout>
% \fi
%
%
%
%
% \iffalse
%<*letterspace>
% \fi

% \part{lwarp-letterspace.sty}

% \section{Letterspace}
%
% \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}
%    \end{macrocode}

%    \begin{macrocode}
\newcommand*\lsstyle{}
\newcommand\textls[2][]{}
\def\textls#1#{}
\newcommand*\lslig[1]{#1}
%    \end{macrocode}

% \iffalse
%</letterspace>
% \fi
%
%
%
%
% \clearpage
%
% \iffalse
%<*lettrine>
% \fi
%
% \part{lwarp-lettrine.sty}
%
% \section{Lettrine}
%
% \credits{Daniel Flipo}
%
% \DescribePackage{lettrine} Emulated.
%
% \changes{v0.27}{2017/04/02}{\pkg{lettrine}: Added.}
%
% \codehtml
%
% Discard all options for \pkg{lwarp-lettrine}:
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{lettrine}
%    \end{macrocode}
%
% The initial letter is in a \tag{span} of class |lettrine|, and the following
% text is in a \tag{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} %
}

\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
%
%
%
%
%
% \clearpage
%
% \iffalse
%<*lips>
% \fi

% \part{lwarp-lips.sty}

% \section{Lips}
% \label{sec:lips}
%
% \changes{v0.25}{2017/03/16}{\pkg{lips}: Added.}
%
% \DescribePackage{lips}
% \pkg{lips} is emulated during \acro{HTML} output, and
% the \pkg{lips} package is ignored.

%    \begin{macrocode}
% \LWR@ProvidesPackageDrop{lips}
\PackageInfo{lwarp}{Using the lwarp version of package `lips'.}%
\ProvidesPackage{lwarp-lips}

\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
%
%
%
% \clearpage
%
% \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}
%    \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}}
%
%
%
% 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}
%
%
% ^^A \begin{macro}{\lst@Init} \marg{backslash-processing}
% Done at the start of a listing.
%    \begin{macrocode}
\renewcommand{\lst@Init}[1]{%
%    \end{macrocode}
% First, perform the \pkg{listings} initialization:
%    \begin{macrocode}
\LWR@traceinfo{lst@Init}%
\renewcommand*{\@captype}{lstlisting}%
\LWR@origlst@Init{#1}%
\LWR@traceinfo{finished origlst@Init}%
\lst@ifdisplaystyle%
%    \end{macrocode}
% Creating a display.
%
% Disable line numbers,
% produce the |<pre>|, then
% reenable line numbers.
%    \begin{macrocode}
\LWR@traceinfo{About to create verbatim.}%
\let\lsthk@EveryPar\relax%
\LWR@atbeginverbatim{programlisting}%

\let\lsthk@EveryPar\LWR@origlsthkEveryPar%
\else%
%    \end{macrocode}
% Inline, so open a |<span>|
%    \begin{macrocode}
\ifbool{LWR@verbtags}{\LWR@htmltag{span class="inlineprogramlisting"}}{}%
\fi%
}
%    \end{macrocode}
% ^^A \end{macro}
%
%
% ^^A \begin{macro}{\lst@DeInit} Done at the end of a listing.
%    \begin{macrocode}
\renewcommand*{\lst@DeInit}{%
\lst@ifdisplaystyle%
%    \end{macrocode}
% Creating a display.
%
% Disable line numbers,
% produce the |</pre>|, then
% reenable line numbers:
%    \begin{macrocode}
\let\lsthk@EveryPar\relax%

\LWR@afterendverbatim%
\let\lsthk@EveryPar\LWR@origlsthkEveryPar%
\else%
%    \end{macrocode}
% Inline, so create the closing |</span>|:
%    \begin{macrocode}
\ifbool{LWR@verbtags}{\noindent\LWR@htmltag{/span}}{}%
\fi%
%    \end{macrocode}
% Final \pkg{listings} deinit:
%    \begin{macrocode}
\LWR@origlst@DeInit%
}
%    \end{macrocode}
% ^^A \end{macro}
%
%
%
% ^^A \begin{macro}{\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 \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 \acro{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:
%    \begin{macrocode}
                  \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}
% ^^A \end{macro}
%
%
% Patched to keep left line numbers outside of the left margin, and
% place right line numbers in a field \cs{VerbatimHTMLWidth} wide.
%
% ^^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{%
% \llap{
\LWR@orignormalfont%
\lst@numberstyle{\thelstnumber}\kern\lst@numbersep%
% }
}
\\%
     right&\def\lst@PlaceNumber{\rlap{\LWR@orignormalfont
                \kern\VerbatimHTMLWidth \kern\lst@numbersep
                \lst@numberstyle{\thelstnumber}}}%
    }{\PackageError{Listings}{Numbers #1 unknown}\@ehc}}
%    \end{macrocode}
%
%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}

% \iffalse
%</listings>
% \fi
%
%
%
%
% \clearpage
%
% \iffalse
%<*longtable>
% \fi

% \part{lwarp-longtable.sty}

% \section{Longtable}
% \label{sec:longtable}
%
%
% \DescribePackage{longtable}
% \pkg{longtable} is emulated during \acro{HTML} output, and
% the \pkg{longtable} package is ignored.

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{longtable}
%    \end{macrocode}

% 
% To emulate longtable:

% For longtable |\endhead|, |\endfoot|, and |\endlastfoot| rows, use \\
% \watchout
% 	\hspace*{.25in}|\warpprintonly{row contents}|\\
% instead of \\
% 	\hspace*{.25in}|\begin{warpprint}| \ldots |\end{warpprint}|. \\
% Doing so helps avoid ``Misplaced |\noalign|.'' when using |\begin{warpprint}|.
%
% Keep the |\endfirsthead| row, which is still relevent to \acro{HTML} output.
%
% 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}}
%


% \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 thrown away.
%    \begin{macrocode}
\newenvironment{longtable*}[2][]{%
\LWR@floatbegin{table}%
\setcaptiontype{\LTcaptype}%
\caption@setoptions{longtable}%
\caption@setoptions{@longtable}%
\caption@LT@setup%
\booltrue{LWR@starredlongtable}%
\let\captionlistentry\LWR@LTcaptionlistentry%
\LWR@tabular{#2}
}
{\endLWR@tabular\LWR@floatend}

\newenvironment{longtable}[2][]{%
\LWR@floatbegin{table}%
\setcaptiontype{\LTcaptype}%
\caption@setoptions{longtable}%
\caption@setoptions{@longtable}%
\caption@LT@setup%
\refstepcounter{\LTcaptype}%
\let\captionlistentry\LWR@LTcaptionlistentry%
\LWR@tabular{#2}
}
{\endLWR@tabular\LWR@floatend}

%    \end{macrocode}
% \end{environment}

% Provided for compatibility, but ignored:
%    \begin{macrocode}
\newcounter{LTchunksize}
\def\endhead{\LWR@tabularendofline}% throws away options //[dim] and //*
\def\endfirsthead{\LWR@tabularendofline}
\def\endfoot{\LWR@tabularendofline}
\def\endlastfoot{\LWR@tabularendofline}
\newcommand\tabularnewline{\LWR@tabularendofline}
\newcommand{\setlongtables}{}% Obsolete command, does nothing.
\newlength{\LTleft}
\newlength{\LTright}
\newlength{\LTpre}
\newlength{\LTpost}
\newlength{\LTcapwidth}
%    \end{macrocode}
% |\kill| is ignored, place a |\kill| line inside \\
%	\hspace*{2em}|\begin{warpprint}| \ldots  |\end{warpprint}|
% or \cs{warpingprintonly}.
%    \begin{macrocode}
\renewcommand*{\kill}{\LWR@tabularendofline}
%    \end{macrocode}

% \iffalse
%</longtable>
% \fi
%
%
%
% \clearpage
%
% \iffalse
%<*lscape>
% \fi

% \part{lwarp-lscape.sty}

% \section{Lscape}
%
% \DescribePackage{lscape}
% \pkg{lscape} is nullified.
%
% \changes{v0.22}{2017/03/01}{\pkg{lscape}: Added.}
%
% \codehtml
%
% Discard all options for \pkg{lwarp-lscape}.
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{lscape}
%    \end{macrocode}

%    \begin{macrocode}
\newenvironment*{landscape}{}{}
%    \end{macrocode}

% \iffalse
%</lscape>
% \fi
%
%
%
% \iffalse
%<*ltcaption>
% \fi

% \part{lwarp-ltcaption.sty}

% \section{Ltcaption}
% \label{sec:ltcaption}
%
%
% \DescribePackage{ltcaption}
% \pkg{ltcaption} is emulated during \acro{HTML} output, and
% the \pkg{ltcaption} package is ignored.

% \changes{v0.20}{2017/01/29}{\pkg{ltcaption}: Added.}

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{ltcaption}
%    \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
%
%
%
%
%
% \clearpage
%
% \iffalse
%<*marginfix>
% \fi
%
% \part{lwarp-marginfix.sty}
%
% \section{Marginfix}
%
% \DescribePackage{marginfix} Not used.
%
% \changes{v0.26}{2017/03/29}{\pkg{marginfix}: Added.}
%
% \codehtml
%
% Discard all options for \pkg{lwarp-marginfix}:
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{marginfix}
%    \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
%
%
%
%
%
% \clearpage
%
% \iffalse
%<*marginnote>
% \fi
%
% \part{lwarp-marginnote.sty}
%
% \section{Marginnote}
%
% \DescribePackage{marginnote} Emulated.
%
% \changes{v0.26}{2017/03/30}{\pkg{marginnote}: Added.}
%
% \codehtml
%
% Discard all options for \pkg{lwarp-marginnote}:
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{marginnote}
%    \end{macrocode}
%
%    \begin{macrocode}
\NewDocumentCommand{\marginnote}{o +m o}{\marginpar{#2}}
\newcommand*{\marginnoteleftadjust}{}
\newcommand*{\marginnoterightadjust}{}
\newcommand*{\marginnotetextwidth}{}
\let\marginnotetextwidth\textwidth
\newcommand*{\marginnotevadjust}{}
\newcommand*{\marginfont}{}
\newcommand*{\raggedleftmarginnote}{}
\newcommand*{\raggedrightmarginnote}{}
%    \end{macrocode}
%
% \iffalse
%</marginnote>
% \fi
%
%
%
%
% \iffalse
%<*mcaption>
% \fi

% \part{lwarp-mcaption.sty}

% \section{Mcaption}
%
% \DescribePackage{mcaption}
% \pkg{mcaption} is nullified.
%
% \changes{v0.22}{2017/03/01}{\pkg{mcaption}: Added.}
%
% \codehtml
%
% Discard all options for \pkg{lwarp-mcaption}:
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{mcaption}
%    \end{macrocode}

%    \begin{macrocode}
\newenvironment{margincap}{}{}
\newcommand*{\margincapalign}{}
\newlength{\margincapsep}
%    \end{macrocode}

% \iffalse
%</mcaption>
% \fi
%
%
%
%
% \clearpage
%
% \iffalse
%<*mdframed>
% \fi

% \part{lwarp-mdframed.sty}

% \section{Mdframed}
% \label{sec:mdframed}
%
%
% \DescribePackage{mdframed}
% \pkg{mdframed} is loaded with options forced to
% |framemethod=none|.
%
% \changes{v0.17}{2016/04/14}{\pkg{mdframed}: Added.}
%
% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{mdframed}
%    \end{macrocode}
%
%
%
% \limitsmdframed
%
% Environments created or encapsulated by \pkg{mdframed} are enclosed in a
% \margintag{CSS classes}
% \tag{div} of class |md<environmentname>|, or |mdframed| otherwise.
%
% Frame titles are placed into a \tag{span} of class |mdframedtitle|.
% Subtitles are in a \tag{span} of class |mdframedsubtitle|, and likewise for subsubtitles.
%
% Pre-existing hooks are used to patch extra functions before and after the frames.
%

% \pkg{amsthm} must be loaded before \pkg{mdframed}
%    \begin{macrocode}
\LWR@origRequirePackage{amsthm}
%    \end{macrocode}
%
% Do not require \tikz{} or pstricks:
%    \begin{macrocode}
\LWR@origRequirePackage[framemethod=none]{mdframed}
%    \end{macrocode}
%
% ^^A \DescribeMacro{\mdfsetup}
% To handle CSS and paragraphs,
% patch code at start and end of environment and contents.
% \cs{LWR@origraggedright} helps avoid hyphenation.
%
% \changes{v0.25}{2017/03/16}{\pkg{mdframed}: Help avoid hyphenation.}
%
%    \begin{macrocode}
\mdfsetup{
startcode={\LWR@mdframedstart\LWR@origraggedright},
endcode={\LWR@mdframedend},
startinnercode={\LWR@startpars\LWR@origraggedright},
endinnercode={\LWR@stoppars},
}
%    \end{macrocode}
%
%
% ^^A \begin{macro}{\LWR@mdfprintcolor} \marg{mdfcolorkey}
%
% Given the \pkg{mdframed} key, print the color.
%    \begin{macrocode}
\newcommand*{\LWR@mdfprintcolor}[1]{%
\convertcolorspec{named}{\csuse{mdf@#1}}{HTML}\LWR@tempcolor%
\#\LWR@tempcolor
}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\LWR@mdfprintlength} \marg{mdflengthkey}
%
% Given the \pkg{mdframed} key, print the length.
%    \begin{macrocode}
\newcommand*{\LWR@mdfprintlength}[1]{%
\rndprintlength{\csuse{mdf@#1@length}}
}
%    \end{macrocode}
% ^^A \end{macro}

%
% ^^A \begin{macro}{\LWR@mdframedstart}
% Actions before an mdframe starts.
%
% Encapsulate a frame inside a \tag{div} of the desired |class|.
%    \begin{macrocode}
\newcommand*{\LWR@mdframedstart}{%
%    \end{macrocode}
% Turn off paragraph handling during the generation of
% the encapsulating tags:
%    \begin{macrocode}
\LWR@stoppars%
%    \end{macrocode}
% Below, print HTML pt units:
%    \begin{macrocode}
\uselengthunit{PT}%
%    \end{macrocode}
% Open a \tag{div} and with custom |class| and custom |style|:
%    \begin{macrocode}
\LWR@htmltagc{div class="\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 modified \cs{hspace} and \cs{rule},
% so restore them to their originals while inside \env{mdframed}:
%    \begin{macrocode}
\let\hspace\LWR@orighspace%
\let\rule\LWR@origrule%
}
%    \end{macrocode}
% ^^A \end{macro}
%
% ^^A \begin{macro}{\LWR@mdframedend}
% Actions after an mdframe ends.
%
% After closing the \tag{div}, globally restore to the default environment type:
%    \begin{macrocode}
\newcommand*{\LWR@mdframedend}{
%    \end{macrocode}
% Close the custom \tag{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%
}
%    \end{macrocode}
% ^^A \end{macro}
%
%
% ^^A \begin{macro}{\mdfframedtitleenv} \marg{title}
%
% Encapsulation of the original which places the title
% inside a \tag{span} of class |mdframedtitle|:
%    \begin{macrocode}
\let\LWR@origmdfframedtitleenv\mdfframedtitleenv

\newlength{\LWR@titleroundcorner}

\renewrobustcmd\mdfframedtitleenv[1]{%
\LWR@origmdfframedtitleenv{%
%    \end{macrocode}
% Below, print HTML pt lengths:
%    \begin{macrocode}
\uselengthunit{PT}%
%    \end{macrocode}
% Open a \tag{span} with a custom |class| and custom |style|:
%    \begin{macrocode}
\LWR@htmltagc{span class="mdframedtitle" \LWR@orignewline
style=" \LWR@orignewline
%    \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}
% The title's top border radius is adjusted for the line width:
%    \begin{macrocode}
border-radius:
\setlength{\LWR@titleroundcorner}
	{\maxof{\mdf@roundcorner@length-\mdf@linewidth@length}{0pt}}
	\rndprintlength{\LWR@titleroundcorner}
	\rndprintlength{\LWR@titleroundcorner}
	0pt 0pt
	\LWR@orignewline
%    \end{macrocode}
% Finish the custom style and the opening span tag:
%    \begin{macrocode}
" \LWR@orignewline
}% span
%    \end{macrocode}
% Restrict paragraph tags inside a span:
%    \begin{macrocode}
\begin{LWR@nestspan}%
%    \end{macrocode}
% Print the title inside the span:
%    \begin{macrocode}
#1%
%    \end{macrocode}
% Closee the span and unnest the paragraph tag restriction:
%    \begin{macrocode}
\LWR@htmltagc{/span}%
\end{LWR@nestspan}%
}
}
%    \end{macrocode}
% ^^A \end{macro}
%
%
% ^^A \begin{macro}{\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 \tag{span} of class |mdframedsubtitle|:
%    \begin{macrocode}
\NewDocumentCommand{\LWR@mdfsubtitlecommon}{m o m}
{% the following empty line is required

%    \end{macrocode}
% Special handling for mdframed:
% Subtitles have \cs{par}s around them,
% so temporarily disable them here.
%    \begin{macrocode}
\let\par\LWR@origpar%
%    \end{macrocode}
% Open a \tag{span} with a custom |class| and custom |style|:
%    \begin{macrocode}
\LWR@htmltagc{span class="mdframed#1title"
style=" \LWR@orignewline
%    \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 span tag:
%    \begin{macrocode}
"}% span
%    \end{macrocode}
% Restrict paragraph tags inside a span:
%    \begin{macrocode}
\begin{LWR@nestspan}%
%    \end{macrocode}
% Perform the original subtitle action:
%    \begin{macrocode}
\IfNoValueTF{#2}
{\csuse{LWR@origmdf#1title}{#3}}%
{\csuse{LWR@origmdf#1title}[#2]{#3}}%
%    \end{macrocode}
% Close the span and unnest the paragraph tag restriction:
%    \begin{macrocode}
\LWR@htmltagc{/span}% the following empty line is required
\end{LWR@nestspan}% must follow the /span or an extra <p> appears

}
%    \end{macrocode}
% ^^A \end{macro}
%
% ^^A \begin{macro}{\LWR@mdfsubtitle} \oarg{options} \marg{title}
%    \begin{macrocode}
\let\LWR@origmdfsubtitle\mdfsubtitle

\newcommand*{\LWR@mdfsubtitle}{%
\LWR@mdfsubtitlecommon{sub}%
}
\let\mdfsubtitle\LWR@mdfsubtitle
%    \end{macrocode}
% ^^A \end{macro}
%
%
% ^^A \begin{macro}{\LWR@mdfsubsubtitle} \oarg{options} \marg{title}
%    \begin{macrocode}
\let\LWR@origmdfsubsubtitle\mdfsubsubtitle

\newcommand*{\LWR@mdfsubsubtitle}{%
\LWR@mdfsubtitlecommon{subsub}%
}
\let\mdfsubsubtitle\LWR@mdfsubsubtitle
%    \end{macrocode}
% ^^A \end{macro}
%
%
%
% ^^A \begin{macro}{\LWR@mdthisenv}
% Stores the environment of the frame about to be created:
%    \begin{macrocode}
\newcommand*{\LWR@mdthisenv}{mdframed}
%    \end{macrocode}
% ^^A \end{macro}
%
%
% ^^A \begin{macro}{\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}
% ^^A \end{macro}
%
% ^^A \begin{macro}{\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}
% ^^A \end{macro}
%
%
% ^^A \begin{macro}{\mdtheorem} \oarg{mdframed-options}{envname}
%        \oarg{numberedlike} \marg{caption} \oarg{within}
%
% Modified from the original to remember the environment.
%    \begin{macrocode}
\let\LWR@origmdtheorem\mdtheorem

\DeclareDocumentCommand{\LWR@mdtheorem}{O{} m o m o}{%
\LWR@origmdtheorem[#1]{#2}[#3]{#4}[#5]%
\BeforeBeginEnvironment{#2}{\renewcommand*{\LWR@mdthisenv}{md#2}}%
}

\let\mdtheorem\LWR@mdtheorem
%    \end{macrocode}
% ^^A \end{macro}
%
%
% ^^A \begin{macro}{\newmdtheoremenv} \oarg{mdframed-options}{envname}
%        \oarg{numberedlike} \marg{caption} \oarg{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}}{%
     \IfValueTF{#3}{\newtheorem{#2}[#3]{#4}}{}%
     \IfValueTF{#5}{\newtheorem{#2}{#4}[#5]}{}%
    }%
\BeforeBeginEnvironment{#2}{%
\renewcommand*{\LWR@mdthisenv}{md#2}%
\begin{mdframed}[#1]}%
\AfterEndEnvironment{#2}{%
\end{mdframed}}%
}
%    \end{macrocode}
% ^^A \end{macro}

% \iffalse
%</mdframed>
% \fi
%
%
%
%
% \clearpage
%
% \iffalse
%<*microtype>
% \fi

% \part{lwarp-microtype.sty}

% \section{Microtype}
%
% \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, Lua\LaTeX.}
%
% \codehtml
%
% Discard all options for \pkg{lwarp-microtype}:
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{microtype}
%    \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
%
%
%
%
% \clearpage
%
% \iffalse
%<*mparhack>
% \fi
%
% \part{lwarp-mparhack.sty}
%
% \section{Mparhack}
%
% \DescribePackage{mparhack} Not used.
%
% \changes{v0.26}{2017/03/29}{\pkg{mparhack}: Added.}
%
% \codehtml
%
% Discard all options for \pkg{lwarp-mparhack}:
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{mparhack}
%    \end{macrocode}
%
% \iffalse
%</mparhack>
% \fi
%
%
%
%
% \clearpage
%
% \iffalse
%<*multicol>
% \fi

% \part{lwarp-multicol.sty}

% \section{Multicol}
% \label{sec:multicol}
%
%
% \DescribePackage{multicol}
% \pkg{multicol} is emulated during \acro{HTML} output, and
% the \pkg{multicol} package is ignored.

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{multicol}[2015/09/13]
%    \end{macrocode}

% Multicols are converted into a 1--3 column display, browser-supported.
%
% The optional multicols heading is placed inside a \tag{div} of class |multicolsheading|.
%
% The content is placed inside a \tag{div} of class |multicols|.

%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}

% ^^A \begin{environment}{multicols} * \marg{numcols} \oarg{heading}
%    \begin{macrocode}
\NewDocumentEnvironment{multicols}{s m o}
%    \end{macrocode}
% \acro{HTML} div class to contain everything:
%    \begin{macrocode}
{\BlockClass{multicols}
%    \end{macrocode}
% Optional \acro{HTML} div class for the heading:
%    \begin{macrocode}
\IfValueTF{#3}{\begin{BlockClass}{multicolsheading}#3\end{BlockClass}}{}}
%    \end{macrocode}
% When done with the environment, close the div:
%    \begin{macrocode}
{\endBlockClass}
%    \end{macrocode}
% ^^A \end{environment}

% Emulated null functions which are not used in \acro{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}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}

% \iffalse
%</multicol>
% \fi
%
%
%
%
%
% \clearpage
%
% \iffalse
%<*multirow>
% \fi

% \part{lwarp-multirow.sty}

% \section{Multirow}
% \label{sec:multirow}
%
% \DescribePackage{multirow}
% \pkg{multirow} is emulated during \acro{HTML} output, and
% the \pkg{multirow} package is ignored.

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{multirow}
%    \end{macrocode}

% \iffalse
%</multirow>
% \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}
\typeout{Using the lwarp html version of package `nameref' — discarding options.}
\typeout{    Are not using ProvidesPackage, so that other packages}
\typeout{    do not attempt to patch lwarp's version of `nameref'.}
\DeclareOption*{}
\ProcessOptions\relax
%    \end{macrocode}

% \iffalse
%</nameref>
% \fi
%
%
%
%
% \clearpage
%
% \iffalse
%<*needspace>
% \fi

% \part{lwarp-needspace.sty}

% \section{Needspace}
%
% \DescribePackage{needspace}
% \pkg{needspace} is not used during \acro{HTML} conversion.
%
% \changes{v0.20}{2016/12/22}{\pkg{needspace}: Added.}
%
% \codehtml
%
% Discard all options for \pkg{lwarp-needspace}:
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{needspace}

\newcommand*{\needspace}[1]{}
\DeclareDocumentCommand{\Needspace}{s m}{}
%    \end{macrocode}

% \iffalse
%</needspace>
% \fi
%
%
%
%
% \iffalse
%<*newclude>
% \fi
%
% \part{lwarp-newclude.sty}
%
% \section{Newclude}
%
% \DescribePackage{newclude}
% Error if \pkg{newclude} is loaded after \pkg{lwarp}.
%
% \changes{v0.21}{2017/02/22}{\pkg{newclude}: Added.}
%

% Discard all options for \pkg{lwarp-newclude}:

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{newclude}
%    \end{macrocode}

%    \begin{macrocode}
\LWR@loadbefore{newclude}
%    \end{macrocode}

% \iffalse
%</newclude>
% \fi
%
%
%
%
%
% \clearpage
%
% \iffalse
%<*newunicodechar>
% \fi
%
% \part{lwarp-newunicodechar.sty}
%
% \section{Newunicodechar}
%
% \DescribePackage{newunicodechar}
% Error if \pkg{newunicodechar} is loaded after \pkg{lwarp}.
%
% \changes{v0.21}{2017/02/22}{\pkg{newunicodechar}: Added.}
%

% Discard all options for \pkg{lwarp-newunicodechar}:

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{newunicodechar}
%    \end{macrocode}

%    \begin{macrocode}
\LWR@loadbefore{newunicodechar}
%    \end{macrocode}

% \iffalse
%</newunicodechar>
% \fi
%
%
%
%
% \iffalse
%<*nextpage>
% \fi

% \part{lwarp-nextpage.sty}

% \section{Nextpage}
%
% \DescribePackage{nextpage}
% \pkg{nextpage} is nullified.
%
% \changes{v0.22}{2017/03/01}{\pkg{nextpage}: Added.}
%
% \codehtml
%
% Discard all options for \pkg{lwarp-nextpage}.
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{nextpage}
%    \end{macrocode}

%    \begin{macrocode}
\newcommand{\cleartoevenpage}[1][]{}
\newcommand{\movetoevenpage}[1][]{}
\newcommand{\cleartooddpage}[1][]{}
\newcommand{\movetooddpage}[1][]{}
%    \end{macrocode}

% \iffalse
%</nextpage>
% \fi
%
%
%
% \iffalse
%<*nowidow>
% \fi

% \part{lwarp-nowidow.sty}

% \section{Nowidow}
%
% \DescribePackage{nowidow}
% \pkg{nowidow} is not used during HTML conversion.
%
% \changes{v0.20}{2017/01/03}{\pkg{nowidow}: Added.}
%
%
% Discard all options for \pkg{lwarp-nowidow}:

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{nowidow}
%    \end{macrocode}

% ^^A \begin{macro}{\nowidow} \oarg{lines}
% ^^A \begin{macro}{\setnowidow} \oarg{lines}
%    \begin{macrocode}
\newcommand*{\nowidow}[1][]{}
\newcommand*{\setnowidow}[1][]{}
%    \end{macrocode}
% ^^A \end{macro}
% ^^A \end{macro}

% ^^A \begin{macro}{\noclub} \oarg{lines}
% ^^A \begin{macro}{\setnoclub} \oarg{lines}
%    \begin{macrocode}
\newcommand*{\noclub}[1][]{}
\newcommand*{\setnoclub}[1][]{}
%    \end{macrocode}
% ^^A \end{macro}
% ^^A \end{macro}

% \iffalse
%</nowidow>
% \fi
%
%
%
%
% \clearpage
%
% \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.}
%
% \begin{description}
% \item[CSS styling of theorems and proofs:] \
% \begin{description}
% \item [Theorem:] \tag{div} of class |theorembody<theoremstyle>|
% \item [Theorem Header:] \tag{span} of class |theoremheader<style>|
% \end{description}
% where |<theoremstyle>| is |plain|, |break|, etc.
% \end{description}
%
% \limitsntheorem
%
% Options |amsthm| or |standard| choose which set of theorems and proofs
% to initialize.
%
% The options |thmmarks| and |amsmath| are disabled, since they
% \watchout[Disabled options]
% 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}
%    \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}
\gdef\theoremstyle#1{%
   \@ifundefined{th@#1}{\@warning
          {Unknown theoremstyle `#1'. Using `plain'}%
          \theorem@style{plain}
            \renewcommand{\LWR@newtheoremstyle}{plain}% new
			}%
      {
		\theorem@style{#1}
        \renewcommand{\LWR@newtheoremstyle}{#1}% new
		}
}
%    \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}% new
     \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{\csuse{LWR@thmstyle#1}}}% new
  \fi
}

\gdef\@ynthm#1#2{%
  \ifthm@tempif
     \csedef{LWR@thmstyle#1}{\LWR@newtheoremstyle}% new
     \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{\csuse{LWR@thmstyle#1}}}% new
  \fi
}

\gdef\@othm#1[#2]#3{%
  \@ifundefined{c@#2}{\@nocounterr{#2}}%
   {\ifthm@tempif
     \csedef{LWR@thmstyle#1}{\LWR@newtheoremstyle}% new
     \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{\csuse{LWR@thmstyle#1}}}% new
  \fi}
}
%    \end{macrocode}
%
%
% Mimics a float by incrementing the float counter and generating
% an \acro{HTML} anchor.  These are used for list-of-theorem cross-references.
%    \begin{macrocode}
\newcommand{\LWR@inctheorem}{%
\addtocounter{LWR@thisfloat}{1}%
\LWR@stoppars%
\LWR@htmltag{a id="autofloat-\arabic{LWR@thisfloat}"{}}\LWR@htmltag{/a}%
\LWR@startpars%
}
%    \end{macrocode}
%
%
% The following are patched for \acro{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{%
\BlockClass{theorembody#1}%\LWR@thisthmstyle% new
\LWR@inctheorem% new
#2}%
    \def\@opargbegintheorem####1####2####3{%
\BlockClass{theorembody#1}%\LWR@thisthmstyle% new
\LWR@inctheorem% new
#3}%
}%
}%
{\PackageError{\basename}{Theorem style #1 already defined}\@eha}
}

\renewtheoremstyle{plain}%
  {\item[\hskip\labelsep \theorem@headerfont
	\InlineClass{theoremheaderplain}{##1\ ##2\theorem@separator}]}%
  {\item[\hskip\labelsep \theorem@headerfont
	\InlineClass{theoremheaderplain}{##1\ ##2\ (##3)\theorem@separator}]}

\renewtheoremstyle{break}%
  {\item[
% 		\rlap{\vbox{\hbox{
	\hskip\labelsep \theorem@headerfont
	\InlineClass{theoremheaderbreak}{##1\ ##2\theorem@separator}\newline
% 		}\hbox{\strut}}}
	]}%
  {\item[
% 		\rlap{\vbox{\hbox{
	\hskip\labelsep \theorem@headerfont
	\InlineClass{theoremheaderbreak}{##1\ ##2\ (##3)\theorem@separator}\newline
% 		}\hbox{\strut}}}
	]}

\renewtheoremstyle{change}%
  {\item[\hskip\labelsep
	\theorem@headerfont
	\InlineClass{theoremheaderchange}{##2\ ##1\theorem@separator}]}%
  {\item[\hskip\labelsep
	\theorem@headerfont
	\InlineClass{theoremheaderchange}{##2\ ##1\ (##3)\theorem@separator}]}

\renewtheoremstyle{changebreak}%
  {\item[
% 		\rlap{\vbox{\hbox{
			\hskip\labelsep \theorem@headerfont
			\InlineClass{theoremheaderchangebreak}{##2\ ##1\theorem@separator}\newline
% 		}\hbox{\strut}}}
	]}%
  {\item[
% 		\rlap{\vbox{\hbox{
			\hskip\labelsep \theorem@headerfont
			\InlineClass{theoremheaderchangebreak}{##2\ ##1\ (##3)\theorem@separator}\newline
% 		}\hbox{\strut}}}
	]}

\renewtheoremstyle{margin}%
  {\item[\hskip\labelsep\theorem@headerfont
		\InlineClass{theoremheadermargin}{##2 \qquad ##1\theorem@separator}
	]}%
  {\item[\hskip\labelsep\theorem@headerfont
		\InlineClass{theoremheadermargin}{##2 \qquad ##1\ (##3)\theorem@separator}
	]}

\renewtheoremstyle{marginbreak}%
  {\item[\hskip\labelsep\theorem@headerfont
	\InlineClass{theoremheadermarginbreak}{##2 \qquad ##1\theorem@separator}\newline
	]}%
  {\item[\hskip\labelsep\theorem@headerfont
	\InlineClass{theoremheadermarginbreak}{##2 \qquad ##1\ (##3)\theorem@separator}\newline
	]}

\renewtheoremstyle{nonumberplain}%
  {\item[\theorem@headerfont\hskip\labelsep
	\InlineClass{theoremheaderplain}{##1\theorem@separator}]}%
  {\item[\theorem@headerfont\hskip \labelsep
	\InlineClass{theoremheaderplain}{##1\ (##3)\theorem@separator}]}

\renewtheoremstyle{nonumberbreak}%
  {\item[
% 		\rlap{\vbox{\hbox{
	\hskip\labelsep \theorem@headerfont
	\InlineClass{theoremheaderbreak}{##1\theorem@separator}\newline
% 		}\hbox{\strut}}}
	]}%
  {\item[
% 		\rlap{\vbox{\hbox{
	\hskip\labelsep \theorem@headerfont
	\InlineClass{theoremheaderbreak}{##1\ (##3)\theorem@separator}\newline
% 		}\hbox{\strut}}}
	]}

\renewtheoremstyle{empty}%
  {\item[]}%
  {\item[\theorem@headerfont \hskip\labelsep\relax
	\InlineClass{theoremheaderplain}{##3}]}

\renewtheoremstyle{emptybreak}%
  {\item[]}%
  {\item[\theorem@headerfont \hskip\labelsep\relax
	\InlineClass{theoremheaderplain}{##3}] \ \newline}
%    \end{macrocode}
%
% The following manually adjust the \acro{CSS} for the standard configuration
% objects which are not a purely plain style:
%    \begin{macrocode}
\ifbool{LWR@ntheoremamsthm}{}{
% upright text via CSS
\newtheoremstyle{plainupright}%
  {\item[\hskip\labelsep \theorem@headerfont
	\InlineClass{theoremheaderplain}{##1\ ##2\theorem@separator}]}%
  {\item[\hskip\labelsep \theorem@headerfont
	\InlineClass{theoremheaderplain}{##1\ ##2\ (##3)\theorem@separator}]}

% upright text and small caps header via CSS
\newtheoremstyle{nonumberplainuprightsc}%
  {\item[\theorem@headerfont\hskip\labelsep
	\InlineClass{theoremheadersc}{##1\theorem@separator}]}%
  {\item[\theorem@headerfont\hskip \labelsep
	\InlineClass{theoremheadersc}{##1\ (##3)\theorem@separator}]}
%    \end{macrocode}
%
% The following standard configuration is renewed using the new \acro{CSS}:
%    \begin{macrocode}
\theoremstyle{plainupright}
\theorembodyfont{\upshape}
\theoremsymbol{\ensuremath{_\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{\ensuremath{_\blacksquare}}
\renewtheorem{Proof}{Proof}
\renewtheorem{proof}{Proof}
\renewtheorem{Beweis}{Beweis}
\renewtheorem{beweis}{Beweis}
\qedsymbol{\ensuremath{_\blacksquare}}

\theoremsymbol{}
}% not amsthm
%    \end{macrocode}
%
%
% Only if the |amsthm| option was given:
%    \begin{macrocode}
\ifbool{LWR@ntheoremamsthm}{

\gdef\th@plain{%
  \def\theorem@headerfont{\normalfont\bfseries}\itshape%
  \def\@begintheorem##1##2{%
		\BlockClass{theorembodyplain}% new
		\LWR@inctheorem% new
      \item[\hskip\labelsep
% 			\theorem@headerfont
 			\InlineClass{theoremheaderplain}{##1\ ##2.}
		]}%
  \def\@opargbegintheorem##1##2##3{%
		\BlockClass{theorembodyplain}% new
		\LWR@inctheorem% new
     \item[\hskip\labelsep
% 			\theorem@headerfont
 		\InlineClass{theoremheaderplain}{##1\ ##2\ (##3).}
		]}}

\gdef\th@nonumberplain{%
  \def\theorem@headerfont{\normalfont\bfseries}\itshape%
  \def\@begintheorem##1##2{%
		\BlockClass{theorembodyplain}% new
		\LWR@inctheorem% new
      \item[\hskip\labelsep
% 			\theorem@headerfont
 			\InlineClass{theoremheaderplain}{##1.}
		]}%
  \def\@opargbegintheorem##1##2##3{%
		\BlockClass{theorembodyplain}% new
		\LWR@inctheorem% new
     \item[\hskip\labelsep
% 			\theorem@headerfont
 		\InlineClass{theoremheaderplain}{##1\ (##3).}
		]}}

\gdef\th@definition{%
  \def\theorem@headerfont{\normalfont\bfseries}\normalfont%
  \def\@begintheorem##1##2{%
		\BlockClass{theorembodydefinition}% new
		\LWR@inctheorem% new
      \item[\hskip\labelsep
% 			\theorem@headerfont
 			\InlineClass{theoremheaderdefinition}{##1\ ##2.}
		]}%
  \def\@opargbegintheorem##1##2##3{%
		\BlockClass{theorembodydefinition}% new
		\LWR@inctheorem% new
     \item[\hskip\labelsep
% 			\theorem@headerfont
 		\InlineClass{theoremheaderdefinition}{##1\ ##2\ (##3).}
		]}}

\gdef\th@nonumberdefinition{%
  \def\theorem@headerfont{\normalfont\bfseries}\normalfont%
  \def\@begintheorem##1##2{%
		\BlockClass{theorembodydefinition}% new
		\LWR@inctheorem% new
      \item[\hskip\labelsep
% 			\theorem@headerfont
 			\InlineClass{theoremheaderdefinition}{##1.}
		]}%
  \def\@opargbegintheorem##1##2##3{%
		\BlockClass{theorembodydefinition}% new
		\LWR@inctheorem% new
     \item[\hskip\labelsep
% 			\theorem@headerfont
 		\InlineClass{theoremheaderdefinition}{##1\ (##3).}
		]}}

\gdef\th@remark{%
  \def\theorem@headerfont{\itshape}\normalfont%
  \def\@begintheorem##1##2{%
		\BlockClass{theorembodyremark}% new
		\LWR@inctheorem% new
      \item[\hskip\labelsep
% 			\theorem@headerfont
 			\InlineClass{theoremheaderremark}{##1\ ##2.}
		]}%
  \def\@opargbegintheorem##1##2##3{%
		\BlockClass{theorembodyremark}% new
		\LWR@inctheorem% new
     \item[\hskip\labelsep
% 			\theorem@headerfont
 		\InlineClass{theoremheaderremark}{##1\ ##2\ (##3).}
		]}}

\gdef\th@nonumberremark{%
  \def\theorem@headerfont{\itshape}\normalfont%
  \def\@begintheorem##1##2{%
		\BlockClass{theorembodyremark}% new
		\LWR@inctheorem% new
      \item[\hskip\labelsep
% 			\theorem@headerfont
 			\InlineClass{theoremheaderremark}{##1.}
		]}%
  \def\@opargbegintheorem##1##2##3{%
		\BlockClass{theorembodyremark}% new
		\LWR@inctheorem% new
     \item[\hskip\labelsep
% 			\theorem@headerfont
 		\InlineClass{theoremheaderremark}{##1\ (##3).}
		]}}

\gdef\th@proof{%
  \def\theorem@headerfont{\normalfont\bfseries}\itshape%
  \def\@begintheorem##1##2{%
		\BlockClass{theorembodyproof}% new
		\LWR@inctheorem% new
      \item[\hskip\labelsep
% 			\theorem@headerfont
 			\InlineClass{theoremheaderproof}{##1.}
		]}%
  \def\@opargbegintheorem##1##2##3{%
		\BlockClass{theorembodyroof}% new
		\LWR@inctheorem% new
     \item[\hskip\labelsep
% 			\theorem@headerfont
 		\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{\ensuremath{_\blacksquare}}
	\@thm{proof}{proof}{#1}
}%
{\@endtheorem}

}{}% amsthm option
%    \end{macrocode}
%
% Patched for \acro{CSS}:
%    \begin{macrocode}
\let\LWR@origendtheorem\@endtheorem
\renewcommand{\@endtheorem}{%
\ifbool{LWR@ntheoremmarks}{%
\ifsetendmark%
\InlineClass{theoremendmark}{\csname\InTheoType Symbol\endcsname}%
\setendmarkfalse%
\fi%
}{}%
\LWR@origendtheorem%
\ifbool{LWR@ntheoremmarks}{\global\setendmarktrue}{}%
\endBlockClass%
}
%    \end{macrocode}

%    \begin{macrocode}
\gdef\NoEndMark{\global\setendmarkfalse}
%    \end{macrocode}



% 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 \acro{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}

% Proof QED symbol:
%    \begin{macrocode}

\newcommand{\qed}{\qquad\the\qedsymbol}

\AtBeginDocument{
\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
}
%    \end{macrocode}
%
% \cs{thref} \marg{label}
%    \begin{macrocode}
\newcommand*{\thref}[1]{\cref{#1}}
%    \end{macrocode}
%
% \iffalse
%</ntheorem>
% \fi
%
%
%
%
% \clearpage
%
% \iffalse
%<*pagenote>
% \fi

% \part{lwarp-pagenote.sty}

% \section{Pagenote}
%
% \DescribePackage{pagenote}
% \pkg{pagenote} works as-is.
%
% It is only included as an |lwarp-pagenote.sty| file because
% past versions of \pkg{lwarp} used \pkg{pagenote} to emulate
% footnotes, and so the file may exist on current installations,
% and should be over-written by this newer version.
%
% \changes{v0.26}{2017/03/29}{\pkg{pagenote}: Supported as-is.}
%
% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackagePass{pagenote}
%    \end{macrocode}
%
% \iffalse
%</pagenote>
% \fi
%
%
%
%
%
% \clearpage
%
% \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}
%    \end{macrocode}

% \iffalse
%</parskip>
% \fi
%
%
%
%
% \iffalse
%<*placeins>
% \fi
%
% \part{lwarp-placeins.sty}
%
% \section{Placeins}
%
% \DescribePackage{placeins}
% \pkg{placeins} is not used during HTML conversion.
%
% \changes{v0.20}{2017/01/19}{\pkg{placeins}: Added.}
%

% Discard all options for \pkg{lwarp-placeins}:

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{placeins}
%    \end{macrocode}

%    \begin{macrocode}
\newcommand*{\FloatBarrier}{}
%    \end{macrocode}

% \iffalse
%</placeins>
% \fi
%
%
%
%
% \clearpage
%
% \iffalse
%<*ragged2e>
% \fi
%
% \part{lwarp-ragged2e.sty}
%
% \section{Ragged2e}
%
% \DescribePackage{ragged2e}
% \pkg{ragged2e} is not used during HTML conversion.
%
% \changes{v0.20}{2017/01/19}{\pkg{ragged2e}: Added.}
%

% Discard all options for \pkg{lwarp-ragged2e}:

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{ragged2e}
%    \end{macrocode}

%    \begin{macrocode}
\newcommand*{\Centering}{\centering}
\newcommand*{\RaggedLeft}{\raggedleft}
\newcommand*{\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
%
%
%
%
% \clearpage
%
% \iffalse
%<*rotating>
% \fi

% \part{lwarp-rotating.sty}

% \section{Rotating}
%
% \DescribePackage{rotating}
% \pkg{rotating} is emulated during \acro{HTML} output, and
% the \pkg{rotating} package is ignored.
%
% All rotations are ignored in \acro{HTML} output.
%
% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{rotating}
%    \end{macrocode}

%    \begin{macrocode}
\let\sidewaystable\table
\let\endsidewaystable\endtable

\let\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
%
%
%
%
%
% \clearpage
%
% \iffalse
%<*setspace>
% \fi

% \part{lwarp-setspace.sty}

% \section{Setspace}
%
% \DescribePackage{setspace}
% \pkg{setspace} is not used during HTML conversion.
%
% \changes{v0.20}{2016/12/22}{\pkg{setspace}: Improved support.}
%

% Discard all options for \pkg{lwarp-setspace}:

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{setspace}

\newcommand*{\setstretch}[1]{}
\newcommand*{\SetSinglespace}[1]{}
\newcommand*{\singlespacing}{}
\newcommand*{\onehalfspacing}{}
\newcommand*{\doublespacing}{}

\newenvironment*{singlespace}
{\BlockClass{singlespace}}
{\endBlockClass}

\newenvironment*{singlespace*}
{\BlockClass{singlespace}}
{\endBlockClass}

\newenvironment*{spacing}[1]{

}{

}

\newenvironment*{onehalfspace}
{\BlockClass{onehalfspace}}
{\endBlockClass}

\newenvironment*{doublespace}
{\BlockClass{doublespace}}
{\endBlockClass}
%    \end{macrocode}

% \iffalse
%</setspace>
% \fi
%
%
%
%
%
% clearpage
%
% \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}
%    \end{macrocode}

% \iffalse
%</showidx>
% \fi
%
%
%
%
%
% \iffalse
%<*showkeys>
% \fi

% \part{lwarp-showkeys.sty}

% \section{Showkeys}
%
% \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}
%    \end{macrocode}

%    \begin{macrocode}
\NewDocumentCommand{\showkeys}{s}{}
%    \end{macrocode}

% \iffalse
%</showkeys>
% \fi
%
%
%
%
%
% \clearpage
%
% \iffalse
%<*sidecap>
% \fi

% \part{lwarp-sidecap.sty}

% \section{Sidecap}
%
% \DescribePackage{sidecap}
% \pkg{sidecap} is nullified.
%
% \changes{v0.22}{2017/03/01}{\pkg{sidecap}: Added.}
%
% \codehtml
%
% Discard all options for \pkg{lwarp-sidecap}.
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{sidecap}
%    \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
%
%
%
%
%
% \clearpage
%
% \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}:
%
% Stop paragraph handling while creating the caption:
%    \begin{macrocode}
\RenewDocumentCommand \sidecaption {s o o m}
{
	\LWR@stoppars
  \captionsetup{style=sidecaption}
  \IfBooleanTF{#1}
  { % starred
    \IfNoValueOrEmptyTF{#2}
    {\marginnote{\caption*{#4}}}
    {\marginnote{\caption*{#4}}[#2]}
  }
  { % unstarred
  \IfNoValueOrEmptyTF{#2}
    {\def\@sidenotes@sidecaption@tof{#4}}
    {\def\@sidenotes@sidecaption@tof{#2}}
  \IfNoValueOrEmptyTF{#3}
    {\marginnote{\caption[\@sidenotes@sidecaption@tof]{#4}}}
    {\marginnote{\caption[\@sidenotes@sidecaption@tof]{#4}}[#3]}
  }
	\LWR@startpars
}
%    \end{macrocode}
%
%
%
% Borrowed from the \pkg{lwarp} version of \pkg{keyfloat}:
%    \begin{macrocode}
\DeclareDocumentEnvironment{KFLT@marginfloat}{O{-1.2ex} m}
{% start
\LWR@maybeincthisfloat%
% \BlockClass{marginblock}
\LWR@stoppars%
\LWR@htmltag{div class="marginblock" id="autofloat-\arabic{LWR@thisfloat}"}
\LWR@startpars%
\captionsetup{type=#2}%
}
{
% \endBlockClass
\LWR@htmldivclassend{div}
}

\RenewDocumentEnvironment{marginfigure}{o}
  {\begin{KFLT@marginfloat}{figure}}
  {\end{KFLT@marginfloat}}

\RenewDocumentEnvironment{margintable}{o}
  {\begin{KFLT@marginfloat}{table}}
  {\end{KFLT@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
%
%
%
%
%
% \clearpage
%
% \iffalse
%<*soul>
% \fi
%
% \part{lwarp-soul.sty}
%
% \section{Soul}
%
% \credits{Melchior FRANZ}
%
% \DescribePackage{soul} Emulated.
%
% \changes{v0.27}{2017/04/02}{\pkg{soul}: Added.}
%
% \codehtml
%
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{soul}
%    \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}
%
% Basic markup with \acro{CSS}:
%    \begin{macrocode}
\newcommand{\so}[1]{\InlineClass{letterspacing}{#1}}
\newcommand{\caps}[1]{\InlineClass{capsspacing}{#1}}
%    \end{macrocode}
%
% Add colors if not empty:
%    \begin{macrocode}
\newcommand{\LWR@soulcolor}[4]{%
\ifcsempty{#2}%
{%
\InlineClass{#3}{#1}}%
{%
\convertcolorspec{named}{\csuse{#2}}{HTML}\LWR@tempcolor%
\InlineClass{#3}[#4: \#\LWR@tempcolor]{#1}%
}%
}

\newcommand{\ul}[1]{%
\LWR@soulcolor{#1}{LWR@soululcolor}{uline}{text-decoration-color}%
}

\newcommand{\st}[1]{
\LWR@soulcolor{#1}{LWR@soulstcolor}{sout}{text-decoration-color}%
}

\newcommand{\hl}[1]{
\LWR@soulcolor{#1}{LWR@soulhlcolor}{highlight}{background-color}%
}
%    \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
%
%
%
%
%
%
% \clearpage
%
% \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}
%    \end{macrocode}

% \cs{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}% new
\LWR@stoppars% new
    \@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
	\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}%
    \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% new
% 			\box\@tempboxa
			#4
			\LWR@stoppars% new
        }{%
		\LWR@startpars% new
        \@ifundefined{FBsc@max}%
            {
% 				\box\@tempboxa
				#4
			}%
            {\ifx\FBsuboheight\relax
%                \box\@tempboxa
				#4
             \else
%                \vbox to \FBsuboheight{\FBafil\box\@tempboxa\FBbfil}%
				#4
             \fi}%
		\LWR@stoppars% new
          \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}% new
\LWR@startpars% new
  \endgroup\ignorespaces%
}%
%    \end{macrocode}

% \cs{sf@subcaption} \marg{1 type} \marg{2 lof entry} \marg{3 caption}
%    \begin{macrocode}
\long\def\sf@subcaption#1#2#3{%
\LWR@stoppars% new
  \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}% new
			\LWR@htmlblocktag{figcaption}% new
			\caption@make
				{\@nameuse{sub\@captype name}}%
				{\@nameuse{thesub\@captype}}%
				{#3}
			\LWR@htmlblocktag{/figcaption}% new
\LWR@traceinfo{sfsubcap B2}% new
% 			}%
		}%
        {\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}% new
               \caption@make
                   {\@nameuse{sub\@captype name}}%
                   {\@nameuse{thesub\@captype}}%
                   {#3}
\LWR@traceinfo{sfsubcap C1}% new
% 			}%
%              \hss

% 			}
		  }
		}%
  \egroup
\LWR@startpars% new
}
%    \end{macrocode}

% \cs{caption@@@make} \marg{caption label} \marg{caption text}
%    \begin{macrocode}
\renewcommand\caption@@@make[2]{%
\LWR@startpars% new
  \sbox\@tempboxa{#1}%
  \ifdim\wd\@tempboxa=\z@
    \let\caption@lsep\relax
  \fi
  \caption@ifempty{#2}{%
    \let\caption@lsep\@empty
    \let\caption@tfmt\@firstofone
  }%
%   \@setpar{\@@par\caption@@par}\caption@@par
\renewcommand{\@@par}{\LWR@closeparagraph\LWR@orig@@par}% new
  \caption@applyfont
  \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}
	\LWR@ensuredoingapar% new
      \caption@ifstrut
        {\ifhmode\@finalstrut\strutbox\fi}%
        {}%
      \par}}
\LWR@stoppars% new
}
%    \end{macrocode}


% Patches for \cs{sf@sub@label}:
%    \begin{macrocode}
\def\subfloat@label{%
\LWR@ensuredoingapar% new
  \@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}



% Patches for \cs{subref}.
%
% 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}
% 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@origpageref{sub@#1}}
%    \end{macrocode}
%
% Defining new subfloats.  The |l@sub<type>| for each is redefined.
%    \begin{macrocode}
\let\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}
%
% Pre-defined for figures and tables:
%    \begin{macrocode}
\renewcommand{\l@subfigure}[2]{\hypertocfloat{2}{subfigure}{lof}{#1}{#2}}
\renewcommand{\l@subtable}[2]{\hypertocfloat{2}{subtable}{lot}{#1}{#2}}
% \def\subfigure{\subfloat}
% \def\subtable{\subfloat}
%    \end{macrocode}


% \iffalse
%</subfig>
% \fi
%
%
%
%
% \clearpage
%
% \iffalse
%<*tabularx>
% \fi

% \part{lwarp-tabularx.sty}

% \section{Tabularx}
%
% \DescribePackage{tabularx}
% \pkg{tabularx} is emulated by \pkg{lwarp}.
%
% \changes{v0.22}{2017/03/01}{\pkg{tabularx}: Added.}
%
% \codehtml
%
% Discard all options for \pkg{lwarp-tabularx}:
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{tabularx}
%    \end{macrocode}

%    \begin{macrocode}
\newenvironment{tabularx}[2]
{\tabular{#2}}
{\endtabular}

\newenvironment{tabularx*}[2]
{\tabular{#2}}
{\endtabular}
%    \end{macrocode}

% \iffalse
%</tabularx>
% \fi
%
%
%
%
% \clearpage
%
% \iffalse
%<*textpos>
% \fi

% \part{lwarp-textpos.sty}

% \section{Textpos}
% \label{sec:textpos}
%
% \changes{v0.20}{2017/01/11}{\pkg{textpos}: Added.}
%
% \DescribePackage{textpos}
% \pkg{textpos} is emulated during \acro{HTML} output, and
% the \pkg{textpos} package is ignored.

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{textpos}
%    \end{macrocode}

%    \begin{macrocode}
\NewDocumentEnvironment{textblock}{m 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]{}
%    \end{macrocode}

% \iffalse
%</textpos>
% \fi
%
%
%
%
% \clearpage
%
% \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{description}
% \item[CSS styling of theorems and proofs:] \
% \begin{description}
% \item [Theorem:] \tag{div} of class |theorembody<theoremstyle>|
% \item [Theorem Header:] \tag{span} of class |theoremheader|
% \end{description}
% where |<theoremstyle>| is |plain|, |break|, etc.
% \end{description}
%
%
% \codehtml
%
%    \begin{macrocode}
\LWR@ProvidesPackagePass{theorem}
%    \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}
\gdef\theoremstyle#1{%
   \@ifundefined{th@#1}{\@warning
          {Unknown theoremstyle `#1'. Using `plain'}%
          \theorem@style{plain}%
           \renewcommand{\LWR@newtheoremstyle}{plain}% new
          }%
      {%
          \theorem@style{#1}%
          \renewcommand{\LWR@newtheoremstyle}{#1}% new
      }%
      \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}% new
    \@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{\csuse{LWR@thmstyle#1}}}% new
   }}

\gdef\@ynthm#1#2{%
	\expandafter\@ifdefinable\csname #1\endcsname
   {
	\csedef{LWR@thmstyle#1}{\LWR@newtheoremstyle}% new
	\@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{\csuse{LWR@thmstyle#1}}}% new
   }}

\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}% new
	\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{\csuse{LWR@thmstyle#1}}}% new
	}%
  \fi}
%    \end{macrocode}
%
%
% The following are patched for \acro{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|.
%    \begin{macrocode}
\gdef\th@plain{%\normalfont\itshape
  \def\@begintheorem##1##2{%
	\BlockClass{theorembody\LWR@thisthmstyle}% new
        \item[\hskip\labelsep
			\InlineClass{theoremheader}{##1\ ##2}
		]}%
\def\@opargbegintheorem##1##2##3{%
	\BlockClass{theorembody\LWR@thisthmstyle}% new
   \item[\hskip\labelsep
		\InlineClass{theoremheader}{##1\ ##2\ (##3)}
	]}
}

\gdef\th@break{%\normalfont\slshape
  \def\@begintheorem##1##2{%
	\BlockClass{theorembody\LWR@thisthmstyle}% new
	\item[\hskip \labelsep
		\InlineClass{theoremheader}{##1\ ##2}\newline%
	]}%
\def\@opargbegintheorem##1##2##3{%
	\BlockClass{theorembody\LWR@thisthmstyle}% new
  \item[\hskip \labelsep
		\InlineClass{theoremheader}{##1\ ##2\ (##3)}\newline
	]}
}

\gdef\th@marginbreak{%\normalfont\slshape
  \def\@begintheorem##1##2{
	\BlockClass{theorembody\LWR@thisthmstyle}% new
	\item[\hskip\labelsep %
		\InlineClass{theoremheader}{##2	\qquad ##1}\newline
	]}%
\def\@opargbegintheorem##1##2##3{%
	\BlockClass{theorembody\LWR@thisthmstyle}% new
	\item[\hskip\labelsep %
		\InlineClass{theoremheader}{##2	\qquad ##1\ %
		(##3)}\newline
	]}
}

\gdef\th@changebreak{%\normalfont\slshape
  \def\@begintheorem##1##2{
	\BlockClass{theorembody\LWR@thisthmstyle}% new
	\item[\hskip\labelsep
		\InlineClass{theoremheader}{##2\ ##1}\newline
	]}%
\def\@opargbegintheorem##1##2##3{%
	\BlockClass{theorembody\LWR@thisthmstyle}% new
	\item[\hskip\labelsep
		\InlineClass{theoremheader}{ ##2\ ##1\ %
		(##3)}\newline
	]}
}

\gdef\th@change{%\normalfont\slshape
  \def\@begintheorem##1##2{
	\BlockClass{theorembody\LWR@thisthmstyle}% new
	\item[\hskip\labelsep
		\InlineClass{theoremheader}{##2\ ##1}
	]}%
\def\@opargbegintheorem##1##2##3{%
	\BlockClass{theorembody\LWR@thisthmstyle}% new
	\item[\hskip\labelsep
		\InlineClass{theoremheader}{##2\ ##1\ (##3)}
	]}
}

\gdef\th@margin{%\normalfont\slshape
  \def\@begintheorem##1##2{
	\BlockClass{theorembody\LWR@thisthmstyle}% new
	\item[\hskip\labelsep
		\InlineClass{theoremheader}{##2 \qquad ##1}
	]}%
\def\@opargbegintheorem##1##2##3{%
	\BlockClass{theorembody\LWR@thisthmstyle}% new
	\item[\hskip\labelsep
			\InlineClass{theoremheader}{##2 \qquad ##1\ (##3)}
	]}
}
%    \end{macrocode}
%
% Patched for \acro{CSS}:
%    \begin{macrocode}
\gdef\@endtheorem{\endBlockClass\endtrivlist}
%    \end{macrocode}
%
% \iffalse
%</theorem>
% \fi
%
%
%
% \clearpage
%
% \iffalse
%<*threeparttable>
% \fi

% \part{lwarp-threeparttable.sty}

% \section{Threeparttable}
% \label{sec:threeparttable}
%
%
% \DescribePackage{threeparttable}
% \pkg{threeparttable} is emulated during \acro{HTML} output, and
% the \pkg{threeparttable} package is ignored.

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{threeparttable}
%    \end{macrocode}



% ^^A \begin{macro}{\LWR@printtablenote} \marg{text}
%
% Prints the table note item header inside a \acro{CSS} class of |tnoteitemheader|.
%    \begin{macrocode}
\newcommand{\LWR@printtablenote}[1]{\InlineClass{tnoteitemheader}{#1}}
%    \end{macrocode}
% ^^A \end{macro}



% ^^A \begin{environment}{threeparttable} \oarg{alignment}
% To emulate threeparttable:
%    \begin{macrocode}
\newenvironment*{threeparttable}[1][b]{}{}
%    \end{macrocode}
% ^^A \end{environment}

% ^^A \begin{environment}{tablenotes} \oarg{options}
% \changes{v0.19}{2016/06/01}{CSS for table note item.}
%    \begin{macrocode}
\newenvironment*{tablenotes}[1][]
{%
\BlockClass{tnotes}%
\setlist[description]{format=\LWR@printtablenote}%
\description%
}
{%
\enddescription%
\endBlockClass%
}
%    \end{macrocode}
% ^^A \end{environment}
% ^^A \begin{macro}{\tnote}
%    \begin{macrocode}
\newcommand{\tnote}[1]{\textsuperscript{#1}}
%    \end{macrocode}
% ^^A \end{macro}

% \iffalse
%</threeparttable>
% \fi
%
%
%
%
%
% \clearpage
%
% \iffalse
%<*tikz>
% \fi

% \part{lwarp-tikz.sty}
%
% \section{Tikz}
%
% \DescribePackage{tikz}
% \pkg{tikz} is supported.
%
% \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}
%    \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.
% \index{tikz>dollar redefined}
% \index{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.
%

% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}

%    \begin{macrocode}
\newboolean{LWR@tikzbabel}

\@ifpackagelater{tikz}{2013/12/20}% Test for Tikz version v3.0.0
{\usetikzlibrary{babel}\booltrue{LWR@tikzbabel}}
{\boolfalse{LWR@tikzbabel}}
%    \end{macrocode}


% \begin{environment}{tikzpicture}
% |tikzpicture| environment is enclosed inside a |\lateximage|.
% May be used as-is, and its contents will be converted to an image.
%
% \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.}
%
%    \begin{macrocode}
\BeforeBeginEnvironment{tikzpicture}{%
\lateximage%
\ifbool{LWR@tikzbabel}% Test for Tikz version v3.0.0
{}%
{\catcode`\$=3} % dollar sign is math shift
}

\AfterEndEnvironment{tikzpicture}{%
\endlateximage%
\ifbool{LWR@tikzbabel}% Test for Tikz version v3.0.0
{}%
{\catcode`\$=\active}%
}
%    \end{macrocode}
% \end{environment}

%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}

% \iffalse
%</tikz>
% \fi
%
%
%
%
%
% \clearpage
%
% \iffalse
%<*titleps>
% \fi

% \part{lwarp-titleps.sty}

% \section{Titleps}
%
% \DescribePackage{titleps}
% \pkg{titleps} is loaded and used by \pkg{lwarp} during \acro{HTML} output.
% All user options and macros are ignored and disabled.

% \changes{v0.20}{2017/01/03}{\pkg{titleps}: Added.}
%
%
% Discard all options for \pkg{lwarp-titleps}:

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{titleps}
%    \end{macrocode}
%
% \cs{pagestyle} and \cs{thispagestyle} are already disabled in the \pkg{lwarp} code.
%
% ^^A \begin{macro}{\newpagestyle} \marg{name} \oarg{style} \marg{commands}
% ^^A \begin{macro}{\renewpagestyle} \marg{name} \oarg{style} \marg{commands}
%    \begin{macrocode}
\RenewDocumentCommand{\newpagestyle}{m o m}{}
\RenewDocumentCommand{\renewpagestyle}{m o m}{}
%    \end{macrocode}
% ^^A \end{macro}
% ^^A \end{macro}

% ^^A \begin{macro}{\sethead} \oarg{el} \oarg{ec} \oarg{er} \marg{ol} \marg{oc} \marg{or}
% ^^A \begin{macro}{\setfoot} \oarg{el} \oarg{ec} \oarg{er} \marg{ol} \marg{oc} \marg{or}
%    \begin{macrocode}
\RenewDocumentCommand{\sethead}{o o o m m m}{}
\RenewDocumentCommand{\setfoot}{o o o m m m}{}
%    \end{macrocode}
% ^^A \end{macro}
% ^^A \end{macro}

% ^^A \begin{macro}{\settitlemarks} * \marg{names}
%    \begin{macrocode}
\RenewDocumentCommand{\settitlemarks}{s m}{}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\headrule}
% ^^A \begin{macro}{\footrule}
%    \begin{macrocode}
\renewcommand*{\headrule}{}
\renewcommand*{\footrule}{}
%    \end{macrocode}
% ^^A \end{macro}
% ^^A \end{macro}

% ^^A \begin{macro}{\setheadrule} \marg{length}
% ^^A \begin{macro}{\setfootrule} \marg{length}
%    \begin{macrocode}
\renewcommand*{\setheadrule}[1]{}
\renewcommand*{\setfootrule}[1]{}
%    \end{macrocode}
% ^^A \end{macro}
% ^^A \end{macro}

% ^^A \begin{macro}{\makeheadrule}
% ^^A \begin{macro}{\makefootrule}
%    \begin{macrocode}
\newcommand*{\makeheadrule}{}
\newcommand*{\makefootrule}{}
%    \end{macrocode}
% ^^A \end{macro}
% ^^A \end{macro}

% ^^A \begin{macro}{\setmarkboth} \marg{code}
%    \begin{macrocode}
\renewcommand{\setmarkboth}[1]{}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\widenhead}
%    \begin{macrocode}
\RenewDocumentCommand{\widenhead}{s o o m m}{}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\bottitlemarks}
% ^^A \begin{macro}{\toptitlemarks}
% ^^A \begin{macro}{\firsttitlemarks}
% ^^A \begin{macro}{\nexttitlemarks}
% ^^A \begin{macro}{\outertitlemarks}
% ^^A \begin{macro}{\innertitlemarks}
%    \begin{macrocode}
\renewcommand*{\bottitlemarks}{}
\renewcommand*{\toptitlemarks}{}
\renewcommand*{\firsttitlemarks}{}
\renewcommand*{\nexttoptitlemarks}{}
\renewcommand*{\outertitlemarks}{}
\renewcommand*{\innertitlemarks}{}
%    \end{macrocode}
% ^^A \end{macro}
% ^^A \end{macro}
% ^^A \end{macro}
% ^^A \end{macro}
% ^^A \end{macro}
% ^^A \end{macro}

% ^^A \begin{macro}{\newtitlemark} * \marg{name}
%    \begin{macrocode}
\RenewDocumentCommand{\newtitlemark}{s m}{}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\pretitlemark} * \marg{section} \marg{text}
%    \begin{macrocode}
\RenewDocumentCommand{\pretitlemark}{s m m}{}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\ifsamemark} \marg{group} \marg{command} \marg{true} \marg{false}
%    \begin{macrocode}
\renewcommand{\ifsamemark}[4]{}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\setfloathead} * \oarg{.} \oarg{.} \oarg{.} \marg{.} \marg{.} \marg{.} \marg{extra} \oarg{which}
% ^^A \begin{macro}{\setfloatfoot} * \oarg{.} \oarg{.} \oarg{.} \marg{.} \marg{.} \marg{.} \marg{extra} \oarg{which}
%    \begin{macrocode}
\NewDocumentCommand{\setfloathead}{s o o o m m m m m}{}
\NewDocumentCommand{\setfloatfoot}{s o o o m m m m m}{}
%    \end{macrocode}
% ^^A \end{macro}
% ^^A \end{macro}

% ^^A \begin{macro}{\nextfloathead} * \oarg{.} \oarg{.} \oarg{.} \marg{.} \marg{.} \marg{.} \marg{extra} \oarg{which}
% ^^A \begin{macro}{\nextfloatfoot} * \oarg{.} \oarg{.} \oarg{.} \marg{.} \marg{.} \marg{.} \marg{extra} \oarg{which}
%    \begin{macrocode}
\NewDocumentCommand{\nextfloathead}{s o o o m m m m m}{}
\NewDocumentCommand{\nextfloatfoot}{s o o o m m m m m}{}
%    \end{macrocode}
% ^^A \end{macro}
% ^^A \end{macro}

% ^^A \begin{macro}{\newmarkset} \marg{markset}
%    \begin{macrocode}
\newcommand{\newmarkset}[1]{}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\newextramark} * \marg{markset} \marg{macro-name}
%    \begin{macrocode}
\NewDocumentCommand{\newextramarkset}{s m m}{}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\botextramarks} \marg{markset}
% ^^A \begin{macro}{\topextramarks} \marg{markset}
% ^^A \begin{macro}{\firstextramarks} \marg{markset}
% ^^A \begin{macro}{\nextextramarks} \marg{markset}
% ^^A \begin{macro}{\outerextramarks} \marg{markset}
% ^^A \begin{macro}{\innerextramarks} \marg{markset}
%    \begin{macrocode}
\newcommand{\botextramarks}[1]{}
\newcommand{\topextramarks}[1]{}
\newcommand{\firstextramarks}[1]{}
\newcommand{\nexttopextramarks}[1]{}
\newcommand{\outerextramarks}[1]{}
\newcommand{\innerextramarks}[1]{}
%    \end{macrocode}
% ^^A \end{macro}
% ^^A \end{macro}
% ^^A \end{macro}
% ^^A \end{macro}
% ^^A \end{macro}
% ^^A \end{macro}

% \iffalse
%</titleps>
% \fi
%
%
%
%
% \clearpage
%
% \iffalse
%<*titlesec>
% \fi

% \part{lwarp-titlesec.sty}

% \section{Titlesec}
%
% \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}
%    \end{macrocode}

% ^^A \begin{macro}{\titlelabel} \marg{label-format}
%    \begin{macrocode}
\newcommand*{\titlelabel}[1]{}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\titleformat*} \marg{command} \marg{format}
%
% ^^A \begin{macro}{\titleformat} \marg{command} \oarg{shape} \marg{format}
% ^^A						\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}
% ^^A \end{macro}
% ^^A \end{macro}

% ^^A \begin{macro}{\chaptertitlename}
%    \begin{macrocode}
\@ifundefined{@chapapp}{\let\@chapapp\chaptername}{}
\newcommand\chaptertitlename{\@chapapp}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\titlespacing} * \marg{command} \marg{left} \marg{before} \marg{after} \oarg{right}
%
%    \begin{macrocode}
\NewDocumentCommand{\titlespacing}{s m m m m o}{}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\filright}
% ^^A \begin{macro}{\filcenter}
% ^^A \begin{macro}{\filleft}
% ^^A \begin{macro}{\fillast}
% ^^A \begin{macro}{\filinner}
% ^^A \begin{macro}{\filouter}
%    \begin{macrocode}
\newcommand*{\filright}{}
\newcommand*{\filcenter}{}
\newcommand*{\filleft}{}
\newcommand*{\fillast}{}
\newcommand*{\filinner}{}
\newcommand*{\filouter}{}
%    \end{macrocode}
% ^^A \end{macro}
% ^^A \end{macro}
% ^^A \end{macro}
% ^^A \end{macro}
% ^^A \end{macro}
% ^^A \end{macro}

% ^^A \begin{macro}{\wordsep}
%    \begin{macrocode}
\newcommand\wordsep{\fontdimen\tw@\font \@plus
  \fontdimen\thr@@\font \@minus \fontdimen4\font}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\titleline} * \oarg{align} \marg{material}
%    \begin{macrocode}
\NewDocumentCommand{\titleline}{s o m}{}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\titlerule} \oarg{height}
%    \begin{macrocode}
\providecommand*\titlerule{\@ifstar{\ttl@row}{\ttl@rule}}
\newcommand*{\ttl@rule}[1][]{}
\newcommand*{\ttl@row}[2][]{}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\iftitlemeasuring} \marg{true} \marg{false}
%    \begin{macrocode}
\newcommand{\iftitlemeasuring}[2]{#2}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\assignpagestyle} \marg{command} \marg{pagestyle}
%    \begin{macrocode}
\newcommand{\assignpagestyle}[2]{#2}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\titleclass} \marg{name} \oarg{startlevel} \marg{class} \oarg{cmd}
%    \begin{macrocode}
\NewDocumentCommand{\titleclass}{m o m o}
%    \end{macrocode}
% ^^A \end{macro}

% \iffalse
%</titlesec>
% \fi
%
%
%
%
%
% \clearpage
%
% \iffalse
%<*titletoc>
% \fi

% \part{lwarp-titletoc.sty}

% \section{Titletoc}
%
% \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}
%    \end{macrocode}
%

% ^^A \begin{macro}{\dottedcontents} \marg{section} \oarg{left} \marg{above} \marg{label} \marg{leader}
%    \begin{macrocode}
\NewDocumentCommand{\dottedcontents}{m o m m m}{}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\titlecontents} * \marg{section} \oarg{left} \marg{above}
% ^^A		\marg{numbered} \marg{numberless} \marg{filler}
% ^^A		\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}
% ^^A \end{macro}

% ^^A \begin{macro}{\contentsmargin} \oarg{correction} \marg{right}
%    \begin{macrocode}
\newcommand{\contentsmargin}[2][]{}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\thecontentslabel}
% ^^A \begin{macro}{\thecontentspage}
%    \begin{macrocode}
\newcommand*{\thecontentslabel}{thecontentslabel}
\newcommand*{\thecontentspage}{thecontentspage}
%    \end{macrocode}
% ^^A \end{macro}
% ^^A \end{macro}

% ^^A \begin{macro}{\contentslabel} \oarg{format} \marg{space}
% ^^A \begin{macro}{\contentspage} \oarg{format}
%    \begin{macrocode}
\newcommand{\contentslabel}[2][]{\thecontentslabel}
\newcommand{\contentspage}[1][]{\thecontentspage}
%    \end{macrocode}
% ^^A \end{macro}
% ^^A \end{macro}

% ^^A \begin{macro}{\contentspush} \marg{text}
%    \begin{macrocode}
\newcommand{\contentspush}[1]{}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\contentsuse} \marg{name} \marg{text}
%    \begin{macrocode}
\newcommand{\contentsuse}[2]{}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\startcontents} \oarg{name}
% ^^A \begin{macro}{\stopcontents} \oarg{name}
% ^^A \begin{macro}{\resumecontents} \oarg{name}
%    \begin{macrocode}
\newcommand*{\startcontents}[1][]{}
\newcommand*{\stopcontents}[1][]{}
\newcommand*{\resumecontents}[1][]{}
%    \end{macrocode}
% ^^A \end{macro}
% ^^A \end{macro}
% ^^A \end{macro}

% ^^A \begin{macro}{\printcontents} \oarg{name} \marg{prefix} \marg{start} \marg{code}
%    \begin{macrocode}
\newcommand{\printcontents}[4][]{}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\startlist} \oarg{name} \marg{list}
% ^^A \begin{macro}{\stoplist} \oarg{name} \marg{list}
% ^^A \begin{macro}{\resumelist} \oarg{name} \marg{list}
%    \begin{macrocode}
\newcommand{\startlist}[2][]{}
\newcommand{\stoplist}[2][]{}
\newcommand{\resumelist}[2][]{}
%    \end{macrocode}
% ^^A \end{macro}
% ^^A \end{macro}
% ^^A \end{macro}

% ^^A \begin{macro}{\printlist} \oarg{name} \marg{list} \marg{prefix} \marg{code}
%    \begin{macrocode}
\newcommand{\printlist}[4][]{}
%    \end{macrocode}
% ^^A \end{macro}


% \iffalse
%</titletoc>
% \fi
%
%
%
%
% \clearpage
%
% \iffalse
%<*titling>
% \fi

% \part{lwarp-titling.sty}

% \section{Titling}
%
% \DescribePackage{titling}
% \pkg{titling} is used by \pkg{lwarp}.
% The following patches are not needed by \pkg{lwarp},
% but are required if the user requests \pkg{titling}.
%
% \pkg{lwarp} uses page notes for footnotes, so the various
% \pkg{titling} footnote restyling commands have no effect.
%
% \changes{v0.20}{2017/01/22}{\pkg{titling}: Improved compatibility.}
%
%
% Pass all options to \pkg{lwarp-titling}:

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackagePass{titling}
%    \end{macrocode}
%
%
% Patch \cs{@bsmtitlempty}:
%    \begin{macrocode}
\let\LWR@orig@bsmtitlempty\@bsmtitlempty
\renewcommand*{\@bsmtitlempty}{%
\LWR@orig@bsmtitlempty%
\global\let\published\relax%
\global\let\subtitle\relax%
}
%    \end{macrocode}
%
%
% Patch \cs{keepthetitle}:
%    \begin{macrocode}
\let\LWR@origkeepthetitle\keepthetitle
\renewcommand*{\keepthetitle}{%
\LWR@orig@keepthetitle%
\global\let\@published\@empty%
\global\let\@subtitle\@empty%
}
%    \end{macrocode}
%
%
% Patch \cs{killtitle}:
%    \begin{macrocode}
\let\LWR@origkilltitle\killtitle
\renewcommand*{\killtitle}{%
\LWR@orig@killtitle%
\global\let\thepublished\relax%
\global\let\thesubtitle\relax%
}
%    \end{macrocode}
%
%
% \iffalse
%</titling>
% \fi
%
%
%
%
%
% \clearpage
%
% \iffalse
%<*tocloft>
% \fi

% \part{lwarp-tocloft.sty}

% \section{Tocloft}
%
% \DescribePackage{tocloft}
% \pkg{tocloft} is emulated.
% Most user options and macros are ignored and disabled.
% \cs{newlistof} and \cs{cftchapterprecis} are supported.

% \changes{v0.20}{2017/01/03}{\pkg{tocloft}: Added.}
%
%
% Discard all options for \pkg{lwarp-tocloft}:

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{tocloft}
%    \end{macrocode}
%

% ^^A \begin{macro}{\tocloftpagestyle} \marg{style}
%    \begin{macrocode}
\newcommand{\tocloftpagestyle}[1]{}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\cftmarktoc}
% ^^A \begin{macro}{\cfttoctitlefont}
% ^^A \begin{macro}{\cftaftertoctitle}
%    \begin{macrocode}
\newcommand*{\cftmarktoc}{}
\newcommand*{\cfttoctitlefont}{}
\newcommand*{\cftaftertoctitle}{}
%    \end{macrocode}
% ^^A \end{macro}
% ^^A \end{macro}
% ^^A \end{macro}

%    \begin{macrocode}
\newlength{\cftbeforetoctitleskip}
\newlength{\cftaftertoctitleskip}
%    \end{macrocode}


% ^^A \begin{macro}{\cftmarklof}
% ^^A \begin{macro}{\cftloftitlefont}
% ^^A \begin{macro}{\cftafterloftitle}
%    \begin{macrocode}
\newcommand*{\cftmarklof}{}
\newcommand*{\cftloftitlefont}{}
\newcommand*{\cftafterloftitle}{}
%    \end{macrocode}
% ^^A \end{macro}
% ^^A \end{macro}
% ^^A \end{macro}

%    \begin{macrocode}
\newlength{\cftbeforeloftitleskip}
\newlength{\cftafterloftitleskip}
%    \end{macrocode}


% ^^A \begin{macro}{\cftmarklot}
% ^^A \begin{macro}{\cftlottitlefont}
% ^^A \begin{macro}{\cftafterlottitle}
%    \begin{macrocode}
\newcommand*{\cftmarklot}{}
\newcommand*{\cftlottitlefont}{}
\newcommand*{\cftafterlottitle}{}
%    \end{macrocode}
% ^^A \end{macro}
% ^^A \end{macro}
% ^^A \end{macro}

%    \begin{macrocode}
\newlength{\cftbeforelottitleskip}
\newlength{\cftafterlottitleskip}
%    \end{macrocode}


% ^^A \begin{macro}{\cftdot}
% ^^A \begin{macro}{\cftdotsep}
% ^^A \begin{macro}{\cftnodots}
%    \begin{macrocode}
\newcommand*{\cftdot}{.}
\providecommand*{\cftdotsep}{1}
\newcommand*{\cftnodots}{5000}

\providecommand{\cftdotfill}[1]{}
%    \end{macrocode}
% ^^A \end{macro}
% ^^A \end{macro}
% ^^A \end{macro}

% ^^A \begin{macro}{\cftsetpnumwidth} \marg{length}
% ^^A \begin{macro}{\cftsetrmarg} \marg{length}
%    \begin{macrocode}
\newcommand*{\cftsetpnumwidth}[1]{}
\newcommand*{\cftsetrmarg}[1]{}
%    \end{macrocode}
% ^^A \end{macro}
% ^^A \end{macro}

% ^^A \begin{macro}{\cftpnumalign} \marg{alignment}
%    \begin{macrocode}
\newcommand*{\cftpnumalign}[1]{}
%    \end{macrocode}
% ^^A \end{macro}

%    \begin{macrocode}
\newlength{\cftparskip}
%    \end{macrocode}



%    \begin{macrocode}
\newlength{\cftbeforepartskip}
\newlength{\cftpartindent}
\newlength{\cftpartnumwidth}
\newcommand*{\cftpartfont}{}
\newcommand*{\cftpartpresnum}{}
\newcommand*{\cftpartaftersnum}{}
\newcommand*{\cftpartaftersnumb}{}
\newcommand*{\cftpartleader}{}
\newcommand*{\cftpartdotsep}{1}
\newcommand*{\cftpartpagefont}{}
\newcommand*{\cftpartafterpnum}{}
%    \end{macrocode}

%    \begin{macrocode}
\newlength{\cftbeforechapskip}
\newlength{\cftchapindent}
\newlength{\cftchapnumwidth}
\newcommand*{\cftchapfont}{}
\newcommand*{\cftchappresnum}{}
\newcommand*{\cftchapaftersnum}{}
\newcommand*{\cftchapaftersnumb}{}
\newcommand*{\cftchapleader}{}
\newcommand*{\cftchapdotsep}{1}
\newcommand*{\cftchappagefont}{}
\newcommand*{\cftchapafterpnum}{}
%    \end{macrocode}

%    \begin{macrocode}
\newlength{\cftbeforesecskip}
\newlength{\cftsecindent}
\newlength{\cftsecnumwidth}
\newcommand*{\cftsecfont}{}
\newcommand*{\cftsecpresnum}{}
\newcommand*{\cftsecaftersnum}{}
\newcommand*{\cftsecaftersnumb}{}
\newcommand*{\cftsecleader}{}
\newcommand*{\cftsecdotsep}{1}
\newcommand*{\cftsecpagefont}{}
\newcommand*{\cftsecafterpnum}{}
%    \end{macrocode}

%    \begin{macrocode}
\newlength{\cftbeforesubsecskip}
\newlength{\cftsubsecindent}
\newlength{\cftsubsecnumwidth}
\newcommand*{\cftsubsecfont}{}
\newcommand*{\cftsubsecpresnum}{}
\newcommand*{\cftsubsecaftersnum}{}
\newcommand*{\cftsubsecaftersnumb}{}
\newcommand*{\cftsubsecleader}{}
\newcommand*{\cftsubsecdotsep}{1}
\newcommand*{\cftsubsecpagefont}{}
\newcommand*{\cftsubsecafterpnum}{}
%    \end{macrocode}

%    \begin{macrocode}
\newlength{\cftbeforesubsubsecskip}
\newlength{\cftsubsubsecindent}
\newlength{\cftsubsubsecnumwidth}
\newcommand*{\cftsubsubsecfont}{}
\newcommand*{\cftsubsubsecpresnum}{}
\newcommand*{\cftsubsubsecaftersnum}{}
\newcommand*{\cftsubsubsecaftersnumb}{}
\newcommand*{\cftsubsubsecleader}{}
\newcommand*{\cftsubsubsecdotsep}{1}
\newcommand*{\cftsubsubsecpagefont}{}
\newcommand*{\cftsubsubsecafterpnum}{}
%    \end{macrocode}

%    \begin{macrocode}
\newlength{\cftbeforeparaskip}
\newlength{\cftparaindent}
\newlength{\cftparanumwidth}
\newcommand*{\cftparafont}{}
\newcommand*{\cftparapresnum}{}
\newcommand*{\cftparaaftersnum}{}
\newcommand*{\cftparaaftersnumb}{}
\newcommand*{\cftparaleader}{}
\newcommand*{\cftparadotsep}{1}
\newcommand*{\cftparapagefont}{}
\newcommand*{\cftparaafterpnum}{}
%    \end{macrocode}

%    \begin{macrocode}
\newlength{\cftbeforesubparaskip}
\newlength{\cftsubparaindent}
\newlength{\cftsubparanumwidth}
\newcommand*{\cftsubparafont}{}
\newcommand*{\cftsubparapresnum}{}
\newcommand*{\cftsubparaaftersnum}{}
\newcommand*{\cftsubparaaftersnumb}{}
\newcommand*{\cftsubparaleader}{}
\newcommand*{\cftsubparadotsep}{1}
\newcommand*{\cftsubparapagefont}{}
\newcommand*{\cftsubparaafterpnum}{}
%    \end{macrocode}

%    \begin{macrocode}
\newlength{\cftbeforefigskip}
\newlength{\cftfigindent}
\newlength{\cftfignumwidth}
\newcommand*{\cftfigfont}{}
\newcommand*{\cftfigpresnum}{}
\newcommand*{\cftfigaftersnum}{}
\newcommand*{\cftfigaftersnumb}{}
\newcommand*{\cftfigleader}{}
\newcommand*{\cftfigdotsep}{1}
\newcommand*{\cftfigpagefont}{}
\newcommand*{\cftfigafterpnum}{}
%    \end{macrocode}

%    \begin{macrocode}
\newlength{\cftbeforesubfigskip}
\newlength{\cftsubfigindent}
\newlength{\cftsubfignumwidth}
\newcommand*{\cftsubfigfont}{}
\newcommand*{\cftsubfigpresnum}{}
\newcommand*{\cftsubfigaftersnum}{}
\newcommand*{\cftsubfigaftersnumb}{}
\newcommand*{\cftsubfigleader}{}
\newcommand*{\cftsubfigdotsep}{1}
\newcommand*{\cftsubfigpagefont}{}
\newcommand*{\cftsubfigafterpnum}{}
%    \end{macrocode}

%    \begin{macrocode}
\newlength{\cftbeforetabskip}
\newlength{\cfttabindent}
\newlength{\cfttabnumwidth}
\newcommand*{\cfttabfont}{}
\newcommand*{\cfttabpresnum}{}
\newcommand*{\cfttabaftersnum}{}
\newcommand*{\cfttabaftersnumb}{}
\newcommand*{\cfttableader}{}
\newcommand*{\cfttabdotsep}{1}
\newcommand*{\cfttabpagefont}{}
\newcommand*{\cfttabafterpnum}{}
%    \end{macrocode}

%    \begin{macrocode}
\newlength{\cftbeforesubtabskip}
\newlength{\cftsubtabindent}
\newlength{\cftsubtabnumwidth}
\newcommand*{\cftsubtabfont}{}
\newcommand*{\cftsubtabpresnum}{}
\newcommand*{\cftsubtabaftersnum}{}
\newcommand*{\cftsubtabaftersnumb}{}
\newcommand*{\cftsubtableader}{}
\newcommand*{\cftsubtabdotsep}{1}
\newcommand*{\cftsubtabpagefont}{}
\newcommand*{\cftsubtabafterpnum}{}
%    \end{macrocode}

%    \begin{macrocode}
\newcommand{\cftsetindents}[3]{}
%    \end{macrocode}

%    \begin{macrocode}
\newcommand{\pagenumbersoff}[1]{}
\newcommand{\pagenumberson}[1]{}
%    \end{macrocode}


% ^^A \begin{macro}{\newlistof} \oarg{within} \marg{type} \marg{ext} \marg{listofname}
%
% Emulated through the \cs{newfloat} mechanism.
%    \begin{macrocode}
\NewDocumentCommand{\newlistof}{o m m m}
{%
\IfValueTF{#1}
{\newfloat{#2}{tbp}{#3}[#1]}
{\newfloat{#2}{tbp}{#3}}
\@namedef{listof#2}{\listof{#2}{#4}}
\@namedef{#2depth}{1}
\expandafter\newlength\csuse{cftbefore#2skip}
\expandafter\newlength\csuse{cft#2indent}
\expandafter\newlength\csuse{cft#2numwidth}
\@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}{}
}
%    \end{macrocode}
% ^^A \end{macro}


% \cs{cftchapterprecis} from \pkg{tocloft}:
%    \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}

% \iffalse
%</tocloft>
% \fi
%
%
%
%
%
%
% \clearpage
%
% \iffalse
%<*trivfloat>
% \fi

% \part{lwarp-trivfloat.sty}

% \section{Trivfloat}
% \label{sec:trivfloat}
%
% \DescribePackage{trivfloat}
% \pkg{trivfloat} is forced to use the built-in \pkg{lwarp}
% emulation for floats.


% Discard all options for \pkg{lwarp-trivfloat}.
% This tells \pkg{trivfloat} not to use \pkg{floatrow} or \pkg{memoir}.

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{trivfloat}
\LWR@origRequirePackage{trivfloat}
%    \end{macrocode}

%
% \codeall
%    \begin{macrocode}
\begin{warpall}
%    \end{macrocode}

% 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}
%
%
%    \begin{macrocode}
\end{warpall}
%    \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}
% \index{newfloat>with trivfloat, algorithmic}
% \index{trivfloat>with newfloat, algorithmic}
% \index{algorithmic>with newfloat, trivfloat}
%
% \codeall
%    \begin{macrocode}
\begin{warpall}
%    \end{macrocode}

% \textcolor{red}{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{docsidebar}
% \cs{makeatletter} \\
% \cs{setcounter\{tfl\@float\@cnt\}\{1\}} \%	start trivfloats with .lob \\
% \cs{makeatletter}
% \end{docsidebar}

%    \begin{macrocode}
\end{warpall}
%    \end{macrocode}

% \iffalse
%</trivfloat>
% \fi
%
%
%
%
%
%
% \clearpage
%
% \iffalse
%<*ulem>
% \fi
%
% \part{lwarp-ulem.sty}
%
% \section{Ulem}
%
% \credits{Donald Arseneau}
%
% \DescribePackage{ulem} Emulated.
%
% \changes{v0.27}{2017/04/02}{\pkg{ulem}: Added.}
%
% \codehtml
%
% Original \pkg{lwarp} definitions:
%    \begin{macrocode}
\let\LWR@ulemorigemph\emph
\let\LWR@ulemorigtextbf\textbf
%    \end{macrocode}
%
% Basic markup commands, using \acro{CSS}:
%    \begin{macrocode}
\NewDocumentCommand{\uline}{+m}{%
\InlineClass{uline}{#1}%
}

\NewDocumentCommand{\uuline}{+m}{%
\InlineClass{uuline}{#1}%
}

\NewDocumentCommand{\uwave}{+m}{%
\InlineClass{uwave}{#1}%
}

\NewDocumentCommand{\sout}{+m}{%
\InlineClass{sout}{#1}%
}

\NewDocumentCommand{\xout}{+m}{%
\InlineClass{xout}{#1}%
}

\NewDocumentCommand{\dashuline}{+m}{%
\InlineClass{dashuline}{#1}%
}

\NewDocumentCommand{\dotuline}{+m}{%
\InlineClass{dotuline}{#1}%
}
%    \end{macrocode}
%
% Nullified parameters:
%    \begin{macrocode}
\NewDocumentCommand{\ULthickness}{}{}
\newlength{\ULdepth}
%    \end{macrocode}
%
% Nullified/emulated macros:
%    \begin{macrocode}
\NewDocumentCommand{\markoverwith}{m}{}
\NewDocumentCommand{\ULon}{+m}{\uline{#1}}
%    \end{macrocode}
%
% \cs{useunder} only works with \cs{textbf}, etc, but not \cs{bfseries}, etc.
%    \begin{macrocode}
\NewDocumentCommand{\useunder}{m m m}{%
\relax%
\ifx\relax#3\relax\else % argumentative command
    \def#3{#1}\MakeRobust{#3}\fi
}
%    \end{macrocode}
%
% Triggered by package options, also available for the users:
%    \begin{macrocode}
\newcommand*{\normalem}{\let\emph\LWR@ulemorigemph}
\newcommand*{\ULforem}{\let\emph\uline}
\ULforem% default
%    \end{macrocode}
%
%
% Package options:
%    \begin{macrocode}
\DeclareOption{normalem}{\normalem}
\DeclareOption{ULforem}{\ULforem}
\DeclareOption{normalbf}{}
\DeclareOption{UWforbf}{\useunder{\uwave}{\bf}{\textbf}}
%    \end{macrocode}
%
% Emulate the original package:
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{ulem}
%    \end{macrocode}
%
% \iffalse
%</ulem>
% \fi
%
%
%
%
%
% \clearpage
%
% \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}
%    \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 \acro{HTML} |pre|.
%    \begin{macrocode}
\AfterEndPreamble{
%    \end{macrocode}
% At the beginning of the \env{verse} environment:
%    \begin{macrocode}
\AtBeginEnvironment{verse}
{%
%    \end{macrocode}
% \DescribePackage{verse}\DescribePackage{memoir}\index{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 |pdfcrop|
% to crop the entire page further to the left:
% \DescribeLength{vleftskip}
%    \begin{macrocode}
\ifdef{\vleftskip}{%
\setlength{\vleftskip}{\HTMLvleftskip}
\setlength{\leftmargini}{\HTMLleftmargini}
}{}
\LWR@atbeginverbatim{verse}
\unskip\vspace{-\baselineskip}
}
%    \end{macrocode}
% After the end of the \env{verse} environment, which places the |pre| tag at the
% regular left margin:
%    \begin{macrocode}
\AfterEndEnvironment{verse}{
\unskip\vspace{-\baselineskip}
\LWR@afterendverbatim
}
%    \end{macrocode}
% Patch to place poemtitle inside an \acro{HTML} span of class |poemtitle|:
%    \begin{macrocode}
\ifdef{\poemtitle}{
\DeclareDocumentCommand{\@vstypeptitle}{m}{%
   \vspace{\beforepoemtitleskip}%
   {\InlineClass{poemtitle}{\poemtitlefont #1}\par}%
   \vspace{\afterpoemtitleskip}%
 }
}{}

}
%    \end{macrocode}
% \end{environment}

% \iffalse
%</verse>
% \fi
%
%
%
%
% \clearpage
%
% \iffalse
%<*wallpaper>
% \fi

% \part{lwarp-wallpaper.sty}

% \section{Wallpaper}
% \label{sec:wallpaper}
%
% \changes{v0.20}{2017/01/11}{\pkg{wallpaper}: Added.}
%
% \DescribePackage{wallpaper}
% \pkg{wallpaper} is emulated during \acro{HTML} output, and
% the \pkg{wallpaper} package is ignored.

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{wallpaper}
%    \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
%
%
%
%
% \clearpage
%
% \iffalse
%<*wrapfig>
% \fi

% \part{lwarp-wrapfig.sty}

% \section{Wrapfig}
% \label{sec:wrapfig}
%
% \changes{v0.20}{2017/01/11}{\pkg{wrapfig}: Added.}
%
% \DescribePackage{wrapfig}
% \pkg{wrapfig} is emulated during \acro{HTML} output, and
% the \pkg{wrapfig} package is ignored.

% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackageDrop{wrapfig}
%    \end{macrocode}

% Computed width of a wrapped object.
%	Used to print the \acro{HTML} style.
%    \begin{macrocode}
\newlength{\LWR@wrapwidth}
%    \end{macrocode}


%    \begin{macrocode}

\newcommand*{\LWR@wrapposition}{}

\newcommand*{\LWR@subwrapfigure}[2]{%
\LWR@maybeincthisfloat%
\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@wrapwidth}{#2}%
\addtolength{\LWR@wrapwidth}{4em}%
\uselengthunit{PT}%
% \BlockClass{marginblock}[%
% width:\rndprintlength{\LWR@wrapwidth} ; %
% \LWR@wrapposition%
% ]%
\LWR@stoppars%
\LWR@htmltag{div class="marginblock" id="autofloat-\arabic{LWR@thisfloat}"
style="width:\rndprintlength{\LWR@wrapwidth} ; %
\LWR@wrapposition"%
}
\LWR@startpars
}


\NewDocumentEnvironment{wrapfigure}{o m o m}
{%
\LWR@subwrapfigure{#2}{#4}%
\captionsetup{type=figure}%
}
{
\LWR@htmldivclassend{div}
}


\NewDocumentEnvironment{wraptable}{o m o m}
{%
\LWR@subwrapfigure{#2}{#4}%
\captionsetup{type=table}%
}
{
\LWR@htmldivclassend{div}
}


\NewDocumentEnvironment{wrapfloat}{m o m o m}
{%
\LWR@subwrapfigure{#3}{#5}%
\captionsetup{type=#1}%
}
{
\LWR@htmldivclassend{div}
}

\newlength{\wrapoverhang}
%    \end{macrocode}

% \iffalse
%</wrapfig>
% \fi
%
%
%
% \clearpage
%
% \iffalse
%<*xcolor>
% \fi

% \part{lwarp-xcolor.sty}

% \section{Xcolor}
%
% \DescribePackage{xcolor}
% \pkg{xcolor} is supported by lwarp.
%
% \limitsxcolor

% \codehtml
%
%    \begin{macrocode}
\LWR@ProvidesPackagePass{xcolor}
%    \end{macrocode}


% ^^A \begin{macro}{\LWR@tempcolor} The color converted to \acro{HTML} colorspace.
%    \begin{macrocode}
\newcommand*{\LWR@tempcolor}{}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\LWR@currenttextcolor} The color to use for text and \cs{rule},
% defaulting to black.
%    \begin{macrocode}
\newcommand*{\LWR@currenttextcolor}{black}
%    \end{macrocode}
% ^^A \end{macro}



% ^^A \begin{macro}{\LWR@colorstyle}
% \cs{LWR@colorstyle}	\marg{1: styletext} \marg{2: model}
% 									\marg{3: color} \marg{4: spancontents}
%
% \changes{v0.19}{2016/06/01}{Supports colored \cs{rule}.}
%
% Creates a styled span with a color converted to \acro{HTML} hex colorspace.
% Uses |LWR@spandepth| to prevent paragraph tags inside the span.
% If used for \cs{textcolor}, with a styletext of |color:|, then the new color is
% copied into \\ \cs{LWR@currenttextcolor} for possible re-use in \cs{rule}.
%    \begin{macrocode}
\NewDocumentCommand{\LWR@colorstyle}{m m m m}{%
%    \end{macrocode}
% Use the \pkg{xcolor} package to convert to an \acro{HTML} color space:
%    \begin{macrocode}
\convertcolorspec{#2}{#3}{HTML}\LWR@tempcolor%
%    \end{macrocode}
% If is a \cs{textcolor}, save a copy of this color for use by \cs{rule}:
%    \begin{macrocode}
\ifthenelse{\equal{#1}{color:}}%
{\renewcommand*{\LWR@currenttextcolor}{\#\LWR@tempcolor}}{}%
%    \end{macrocode}
% Create the \acro{HTML} \tag{span} with the styled color:
%    \begin{macrocode}
\LWR@htmltagc{span style="#1\#\LWR@tempcolor"{}}%
\begin{LWR@nestspan}%
%    \end{macrocode}
% Prevent additional paragraph tags inside this span:
%    \begin{macrocode}
%    \end{macrocode}
% Print the contents then close the span:
%    \begin{macrocode}
#4%
\LWR@htmltagc{/span}%
\end{LWR@nestspan}%
%    \end{macrocode}
% For paragraph-tag handling:
%    \begin{macrocode}
\LWR@ensuredoingapar%
}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \DescribeMacro{\color}
% \cs{color} appears in the \LaTeX{} \acro{PDF} output,
% but is ignored by |pdftotext| and thus is ignored in the \acro{HTML} file.
% Text styling by local group is not yet supported.

% Each of the following macros is given a temporary name, and is |\let| to the final
% name once the \acro{HTML} conversion starts.

% ^^A \begin{macro}{\textcolor}
% \cs{textcolor}
% \oarg{model} \marg{color} \marg{text}
% is converted into an \acro{HTML} hex color span.
%    \begin{macrocode}
\NewDocumentCommand{\LWR@textcolor}{O{named} m m}{%
\begingroup%
\LWR@colorstyle{color:}{#1}{#2}{#3}%
\endgroup%
}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\pagecolor}
% \cs{pagecolor}
% \oarg{model} \marg{color}
% is ignored.  Use |\NewCSS| instead.
%    \begin{macrocode}
\newcommand*{\LWR@pagecolor}[2][named]{}
%    \end{macrocode}
% ^^A \end{macro}


% ^^A \begin{macro}{\colorbox}
% \cs{colorbox}
% \oarg{model} \marg{color} \marg{text}
% is converted into an \acro{HTML} hex background color span.
%
%    \begin{macrocode}
\NewDocumentCommand{\LWR@colorbox}{O{named} m m}{%
\begingroup%
\LWR@colorstyle{background:}{#1}{#2}{#3}%
\endgroup%
}
%    \end{macrocode}
% ^^A \end{macro}

% ^^A \begin{macro}{\fcolorbox}
% \cs{fcolorbox}
% \oarg{framemodel} \marg{framecolor} \oarg{boxmodel} \marg{boxcolor} \marg{text}
% is converted into a framed \acro{HTML} hex background color span.
%
% A background color of "none" creates a colored frame without a background color.
%
%    \begin{macrocode}
\NewDocumentCommand{\LWR@fcolorbox}{O{named} m O{named} m m}{%
\begingroup%
\ifthenelse{\equal{#4}{none}}{% no background color
\LWR@colorstyle{border:1px solid }{#1}{#2}{#5}%
}{% yes background color
\LWR@colorstyle{border:1px solid }{#1}{#2}%
{\LWR@colorstyle{background:}{#3}{#4}{#5}}%
}%
\endgroup%
}
%    \end{macrocode}
% ^^A \end{macro}


% Redirect to new definitions:
%    \begin{macrocode}
\let\textcolor\LWR@textcolor
\let\pagecolor\LWR@pagecolor
\let\colorbox\LWR@colorbox
\let\fcolorbox\LWR@fcolorbox
%    \end{macrocode}
%
%
% \iffalse
%</xcolor>
% \fi
%
%
%
% \clearpage
%
% \iffalse
%<*xfrac>
% \fi

% \part{lwarp-xfrac.sty}

% \section{Xfrac}
% \label{sec:xfrac}
%
% \DescribePackage{xfrac} Supported by adding \pkg{xfrac} instances.
%
% \codehtml
%    \begin{macrocode}
\LWR@ProvidesPackagePass{xfrac}
%    \end{macrocode}

% In the user's document preamble, \pkg{lwarp} should be loaded
% after font-related setup.
% \watchout[font size]
% During \acro{HTML} conversion, this font is used by \pkg{lwarp}
% to generate its initial \acro{PDF} output containing \acro{HTML} tags,
% later to be converted by |pdftotext| to a plain text file.
% While the text may be in any font which |pdftotext| can read, the math is
% directly converted into \acro{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 \acro{HTML} tags.  \cs{scalebox} is made null inside the numerator and
% denominator, since the \acro{HTML} tags should not be scaled, and we do not
% want to introduce additional \acro{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}


% ^^A \begin{macro}{\xfracHTMLfontsize}
% \changes{v0.19}{2016/06/06}{Added.}
% \index{font>size --- xfrac}
% User-redefinable macro which controls the font size of the fraction.
%    \begin{macrocode}
\newcommand*{\xfracHTMLfontsize}{.6em}
%    \end{macrocode}
% ^^A \end{macro}

%    \begin{macrocode}
\end{warpall}
%    \end{macrocode}


% \codehtml
%    \begin{macrocode}
\begin{warpHTML}
%    \end{macrocode}


% A span for a small font, used in the numerator and denominator:
% \margintag{font size}
%    \begin{macrocode}
\newcommand*{\LWR@htmlsmallfontstart}{%
\LWR@htmltagc{span style="font-size:\xfracHTMLfontsize"{}}%
\LWR@nestspan%
%
}

\newcommand*{\LWR@htmlsmallfontend}{%
\LWR@htmltagc{/span}%
\endLWR@nestspan%
}
%    \end{macrocode}
% A nullified \cs{scalebox} command, to avoid introducing \acro{HTML} scaling tags:
% \margintag{\cs{scalebox}}
%    \begin{macrocode}
\NewDocumentCommand{\LWR@noscalebox}{m o m}{#3}
%    \end{macrocode}

% Instances of \pkg{xfrac} for various font choices:
% \margintag{instances}
%
% Produce \acro{HTML} tags for a small superscript numerator and
% a small (non-subscript) denominator.
%
% Scaling is turned off so that \cmds{pdftotext} correctly reads the result.
%
% \changes{v0.16}{2016/04/07}{xfrac: Adjusted for the use of any font:}
%    \begin{macrocode}
\DeclareInstance{xfrac}{default}{text}{
numerator-format = {%
\let\scalebox\LWR@noscalebox%
\LWR@htmlsmallfontstart\textsuperscript{#1}\,\LWR@htmlsmallfontend},
denominator-format = {%
\let\scalebox\LWR@noscalebox%
\LWR@htmlsmallfontstart{}\,#1\LWR@htmlsmallfontend},
%    \end{macrocode}
% For |pdftotext|, do not scale the text:
%    \begin{macrocode}
scaling = false
}
\DeclareInstance{xfrac}{lmr}{text}{
numerator-format = {%
\let\scalebox\LWR@noscalebox%
\LWR@htmlsmallfontstart\textsuperscript{#1}\,\LWR@htmlsmallfontend},
denominator-format = {%
\let\scalebox\LWR@noscalebox%
\LWR@htmlsmallfontstart{}\,#1\LWR@htmlsmallfontend},
%    \end{macrocode}
% For |pdftotext|, do not scale the text:
%    \begin{macrocode}
scaling = false
}
\DeclareInstance{xfrac}{lmss}{text}{
numerator-format = {%
\let\scalebox\LWR@noscalebox%
\LWR@htmlsmallfontstart\textsuperscript{#1}\,\LWR@htmlsmallfontend},
denominator-format = {%
\let\scalebox\LWR@noscalebox%
\LWR@htmlsmallfontstart{}\,#1\LWR@htmlsmallfontend},
%    \end{macrocode}
% For |pdftotext|, do not scale the text:
%    \begin{macrocode}
scaling = false
}
\DeclareInstance{xfrac}{lmtt}{text}{
numerator-format = {%
\let\scalebox\LWR@noscalebox%
\LWR@htmlsmallfontstart\textsuperscript{#1}\,\LWR@htmlsmallfontend},
denominator-format = {%
\let\scalebox\LWR@noscalebox%
\LWR@htmlsmallfontstart{}\,#1\LWR@htmlsmallfontend},
%    \end{macrocode}
% For |pdftotext|, do not scale the text:
%    \begin{macrocode}
scaling = false
}
%    \end{macrocode}
%
%    \begin{macrocode}
\end{warpHTML}
%    \end{macrocode}
%
% \iffalse
%</xfrac>
% \fi
%
%
%
%
%
%
%
%
%
%
%
% \clearpage
% \renewcommand*{\partname}{}
% \renewcommand*{\thepart}{}
% \part{Change History and Index}
% \label{sec:changehistory}
%
% \pagestyle{plain}
%
% \Finale
%
%
%
%
%
\endinput





