texlive[45722] trunk: lwarp (9nov17)

commits+karl at tug.org commits+karl at tug.org
Thu Nov 9 02:32:04 CET 2017


Revision: 45722
          http://tug.org/svn/texlive?view=revision&revision=45722
Author:   karl
Date:     2017-11-09 02:32:04 +0100 (Thu, 09 Nov 2017)
Log Message:
-----------
lwarp (9nov17)

Modified Paths:
--------------
    trunk/Build/source/texk/texlive/linked_scripts/lwarp/lwarpmk.lua
    trunk/Build/source/texk/texlive/linked_scripts/texlive/tlmgr.pl
    trunk/Master/texmf-dist/doc/latex/lwarp/README.txt
    trunk/Master/texmf-dist/doc/latex/lwarp/lwarp.pdf
    trunk/Master/texmf-dist/scripts/lwarp/lwarpmk.lua
    trunk/Master/texmf-dist/source/latex/lwarp/lwarp.dtx
    trunk/Master/texmf-dist/source/latex/lwarp/lwarp.ins
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-hyperref.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-multirow.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-breakurl.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-luatodonotes.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-todonotes.sty

Modified: trunk/Build/source/texk/texlive/linked_scripts/lwarp/lwarpmk.lua
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/lwarp/lwarpmk.lua	2017-11-09 01:22:12 UTC (rev 45721)
+++ trunk/Build/source/texk/texlive/linked_scripts/lwarp/lwarpmk.lua	2017-11-09 01:32:04 UTC (rev 45722)
@@ -4,7 +4,7 @@
 
 -- Print the usage of the lwarpmk command:
 
-printversion = "v0.42"
+printversion = "v0.43"
 
 function printhelp ()
 print ("lwarpmk: Use lwarpmk -h or lwarpmk --help for help.") ;

Modified: trunk/Build/source/texk/texlive/linked_scripts/texlive/tlmgr.pl
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/texlive/tlmgr.pl	2017-11-09 01:22:12 UTC (rev 45721)
+++ trunk/Build/source/texk/texlive/linked_scripts/texlive/tlmgr.pl	2017-11-09 01:32:04 UTC (rev 45722)
@@ -1,5 +1,5 @@
 #!/usr/bin/env perl
-# $Id: tlmgr.pl 45623 2017-10-27 14:41:58Z preining $
+# $Id: tlmgr.pl 45719 2017-11-08 12:19:02Z preining $
 #
 # Copyright 2008-2017 Norbert Preining
 # This file is licensed under the GNU General Public License version 2
@@ -6,8 +6,8 @@
 # or any later version.
 #
 
-my $svnrev = '$Revision: 45623 $';
-my $datrev = '$Date: 2017-10-27 16:41:58 +0200 (Fri, 27 Oct 2017) $';
+my $svnrev = '$Revision: 45719 $';
+my $datrev = '$Date: 2017-11-08 13:19:02 +0100 (Wed, 08 Nov 2017) $';
 my $tlmgrrevision;
 my $prg;
 if ($svnrev =~ m/: ([0-9]+) /) {
@@ -1491,7 +1491,7 @@
   if ($opts{'data'}) {
     @adds = @datafields;
   }
-  print "[\n" if ($fmt eq "json");
+  print "[" if ($fmt eq "json");
   my $first = 1;
   foreach my $ppp (@whattolist) {
     next if ($ppp =~ m/^00texlive\./);
@@ -3638,7 +3638,7 @@
   my $is_available = (defined($remtlp) ? 1 : 0);
   if (!($is_installed || $is_available)) {
     # output proper JSON for unavailable packages
-    print "{ \"name\":\"$p\", \"available\":false }\n";
+    print "{ \"name\":\"$p\", \"available\":false }";
     #tlwarn("$prg: package $p not found neither locally nor remote!\n");
     #return($F_WARNING);
     return($F_OK);
@@ -3652,7 +3652,7 @@
                           lrev      => ($is_installed ? $loctlp->revision : 0),
                           rrev      => ($is_available ? $remtlp->revision : 0),
                           revision  => undef);
-  print $str, "\n";
+  print $str;
   return($F_OK);
 }
 
@@ -8554,6 +8554,13 @@
 C<(not verified)>.  Either way, by default the installation and/or
 updates proceed normally.
 
+If a program C<gpg> is available (that is, it is found in the C<PATH>),
+cryptographic signatures will be checked. In this case we require that
+the main repository is signed. This is not required for additional r
+repositories. If C<gpg> is not available, signatures are not checked
+and no verification is carried out, but C<tlmgr> proceeds normally.
+This is the behavior of C<tlmgr> up to TeX Live 2016.
+
 The attempted verification can be suppressed by specifying
 C<--no-verify-downloads> on the command line, or the entry
 C<verify-downloads = 0> in a C<tlmgr> config file (described in
@@ -8561,6 +8568,9 @@
 I<require> verification by specifying C<--require-verification> on the
 command line, or C<require-verification = 1> in a C<tlmgr> config file;
 in this case, if verification is not possible, the program quits.
+Note that as mentioned above, if C<gpg> is available, the main repository
+is always required to have a signature. Using the C<--require-verification>
+switch, C<tlmgr> also requires signatures from additional repositories.
 
 Cryptographic verification requires checksum checking (described just
 above) to succeed, and a working GnuPG (C<gpg>) program (see below for
@@ -9146,7 +9156,7 @@
 distribution (L<http://tug.org/texlive>) and both are licensed under the
 GNU General Public License Version 2 or later.
 
-$Id: tlmgr.pl 45623 2017-10-27 14:41:58Z preining $
+$Id: tlmgr.pl 45719 2017-11-08 12:19:02Z preining $
 =cut
 
 # to remake HTML version: pod2html --cachedir=/tmp tlmgr.pl >/tmp/tlmgr.html

Modified: trunk/Master/texmf-dist/doc/latex/lwarp/README.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/lwarp/README.txt	2017-11-09 01:22:12 UTC (rev 45721)
+++ trunk/Master/texmf-dist/doc/latex/lwarp/README.txt	2017-11-09 01:32:04 UTC (rev 45722)
@@ -1,5 +1,5 @@
 
-LaTeX lwarp package v0.42   README.txt
+LaTeX lwarp package v0.43   README.txt
 
 Files included are:
 

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

Modified: trunk/Master/texmf-dist/scripts/lwarp/lwarpmk.lua
===================================================================
--- trunk/Master/texmf-dist/scripts/lwarp/lwarpmk.lua	2017-11-09 01:22:12 UTC (rev 45721)
+++ trunk/Master/texmf-dist/scripts/lwarp/lwarpmk.lua	2017-11-09 01:32:04 UTC (rev 45722)
@@ -4,7 +4,7 @@
 
 -- Print the usage of the lwarpmk command:
 
-printversion = "v0.42"
+printversion = "v0.43"
 
 function printhelp ()
 print ("lwarpmk: Use lwarpmk -h or lwarpmk --help for help.") ;

Modified: trunk/Master/texmf-dist/source/latex/lwarp/lwarp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/lwarp/lwarp.dtx	2017-11-09 01:22:12 UTC (rev 45721)
+++ trunk/Master/texmf-dist/source/latex/lwarp/lwarp.dtx	2017-11-09 01:32:04 UTC (rev 45722)
@@ -16,7 +16,7 @@
 % \iffalse
 %<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
 %<package>\ProvidesPackage{lwarp}
-%<package>    [2017/10/30 v0.42  Allows LaTeX to directly produce HTML5 output.]
+%<package>    [2017/11/08 v0.43  Allows LaTeX to directly produce HTML5 output.]
 %
 %<*driver>
 \documentclass{ltxdoc}
@@ -266,6 +266,8 @@
 \newrobustcmd{\CTAN}{\acro{CTAN}}
 \newrobustcmd{\TDS}{\acro{TDS}}
 
+\newcommand{\DescribeDefault}[1]{\margintag{\footnotesize \textcolor{green!50!black}{Default: \texttt{#1}}}}
+
 \newcommand{\goesto}{$\Rightarrow$}
 
 \newcommand{\credits}[1]{{\footnotesize(\textit{Based on original code by} \textsc{#1}.)}}
@@ -642,7 +644,14 @@
 }
 
 \newcommand{\limitsreferences}{%
+Labels with special characters may be a problem.
+\margintag{labels}
+It is best to stick with alpha-numeric, hyphen, and perhaps the colon (if not French).
+The underscore currently does not yet work when generating math for MathJax.
+\watchout[underscores]
+
 \cs{nameref} refers to the most recently-used section where the \cs{label}
+\margintag{\cs{nameref}}
 was defined.
 If no section has been defined before the \cs{label},
 \watchout[empty link]
@@ -1615,6 +1624,18 @@
 \end{docsidebar}
 }
 
+\newcommand{\limitstodonotes}{%
+\pkg{todonotes} and \pkg{luatodonotes} are only emulated as if they were loaded
+with the \texttt{disable} option.
+All functions are disabled, but source compatibility is provided
+with the print version.
+
+\pkg{todonotes} and \pkg{luatodonotes} use \pkg{xkeyval}, so if the user's
+\watchout[\pkg{xkeyvalue}]
+document uses \cs{presetkeys} then \pkg{xkeyval} will have
+to be loaded explictly by the user's document.
+}
+
 \newcommand{\limitsnewtxmath}{%
 The proper load order is:
 \watchout[loading sequence]
@@ -1672,7 +1693,7 @@
 %<*package>
 % \fi
 %
-% \CheckSum{14824}
+% \CheckSum{14970}
 %
 % \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
@@ -1756,6 +1777,7 @@
 % \changes{v0.40}{2017/09/25}{\ 2017/09/25}
 % \changes{v0.41}{2017/10/07}{\ 2017/10/07}
 % \changes{v0.42}{2017/10/30}{\ 2017/10/30}
+% \changes{v0.43}{2017/11/08}{\ 2017/11/08}
 
 
 
@@ -1940,8 +1962,35 @@
 % For a detailed list of changes, see the Change History on page \pageref{sec:changehistory}.
 %
 % \begin{description}
+% \item[v0.43:] \
+%   \begin{itemize}
+%       \item Docs: Reorganized \HTML\ customization, added an \HTML\ settings table.
+%           See \cref{sec:htmlsettings}.
+%       \item Added |FootnoteDepth| to control the placement
+%           \margintag{footnotes}
+%           of pending footnotes before section breaks.
+%           By default, pending footnotes are printed before
+%           each \cs{subparagraph} or higher.
+%       \item Fix: Expansion in section name. \margintag{sectioning}
+%       \item Fix: Ignore spaces in tabular column specification.
+%           \margintag{\env{tabular}}
+%       \item Fix: Tabular rules at bottom or when finishing incomplete rows.
+%       \item Fix: \cs{multicolumn} at/bang/before/after specifications, trim,
+%           and vertical rules.
+%       \item Fix: \pkg{supertabular} and \pkg{xtab} column misalignment.
+%       \item Fix: \env{equation*}.
+%           \margintag{math}
+%       \item Fix: \SVG\ math in a section name.
+%       \item Fix: \cs{ref} and \cs{eqref} in \SVG\ math.
+%       \item Added \pkg{todonotes} and \pkg{luatodonotes} (but only |disabled|).
+%           \margintag{packages}
+%       \item Added \pkg{breakurl}.
+%       \item \pkg{hyperref}: Fix: Several macros were made robust, \cs{Gauge} added.
+%   \end{itemize}
+% \needspace{2\baselineskip}
 % \item[v0.42:] \
 %   \begin{itemize}
+%       \item Added \TeX\ development support page.\margintag{Support \TeX!}
 %       \item Improved assitance for word-processor conversions when
 %           \margintag{word-processor conversion}
 %           boolean |FormatWP| is set |true|.
@@ -2625,7 +2674,7 @@
 % \midrule
 %
 % Cross-references: & Emulated, with hyperlinks.
-%   \pkg{hyperref}, \pkg{cleveref}, \pkg{varioref}, \pkg{url}. \\
+%   \pkg{hyperref}, \pkg{cleveref}, \pkg{varioref}, \pkg{url}, \pkg{breakurl}. \\
 %
 % Languages: & \pkg{babel}.  (\pkg{polyglossia} is untested.) \\
 %
@@ -2633,7 +2682,8 @@
 %
 % Margin notes: & \pkg{marginfit}, \pkg{marginfix}. \\
 %
-% Footnotes: & \pkg{footnote}, \pkg{footmisc},
+% Footnotes: & Adds \cmds{FootnoteDepth} to print footnotes at section breaks.
+%   \pkg{footnote}, \pkg{footmisc},
 %	\pkg{marginnote}, \pkg{sidenote}, \pkg{pagenote}, \pkg{endnotes}. \\
 %
 % \midrule
@@ -3660,335 +3710,34 @@
 % \clearpage
 % \subsection{Changing the CSS style}
 %
-% \DescribeMacro{\CSSFilename}
-% \cs{CSSFilename} may be used to choose which |.css| file is used to display
-% each section of the web page.  Use \cs{CSSFilename} before |\begin{document}|
-% to assign the style of the home page.
-% If different parts of the website should have different styles,
-% call \cs{CSSFilename} again before each section heading which creates a new file.
+% For a formal \CSS\ style, add to the preamble:
+% \begin{sourcedisplay}
+% \cs{usepackage}\{lwarp\} \\
+% \dots \\
+% \textcolor{red}{\cs{CSSFilename}\{lwarp\_formal.css\}} \\
+% \dots \\
+% \cs{begin}\{document\} \\
+% \end{sourcedisplay}
 %
-% The styles provided by \pkg{lwarp} include:
-% \begin{description}
-% \item[|lwarp.css|:] A default style if \cs{CSSFilename} is not used.  This
-%	style is comparable to a plain \LaTeX\ document.
-%	To set this style, you may use |\CSSFilename{lwarp.css}|, or no \cs{CSSFilename} call at all.
-% \item[|lwarp\_formal.css|:] A formal style with a serif fonts and a traditional
-%	look.
-% \item[|lwarp\_sagebrush.css|:] A style with muted colors, gradient backgrounds,
-%	additional borders, and rounded corners.
-% \end{description}
+% For a modern \CSS\ style, |lwarp_sagebrush.css| is also provided:
+% \begin{sourcedisplay}
+% \cs{CSSFilename}\{lwarp\_sagebrush.css\}
+% \end{sourcedisplay}
 %
-% To see each style in use, change the \cs{CSSFilename} entry in the tutorial,
-% |lwarpmk html| again, and then reload the webpage.
+% See \cref{sec:csscustomization} for more information about modifying the CSS styling
+% of the document.
 %
-% A customized style may also be created.
-% \margintag{Custom \CSS}
-% For each new project a file
-% called |sample_project.css| is generated.  This may be renamed to
-% |<project>.css| then used by assigning |\CSSFilename{<project>.css}|.
 %
-% Note that |sample_project.css| is overwritten whenever \pkg{lwarp}
-% is loaded in print mode.
-% It is therefore important to rename the file \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 \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 \HTML\ output.
-% Watch for the correct placement of each!\watchout[Placement!]
+% A number of settings may be made to control the \HTML\ output, including
+% filename generation, automatic compilation, math output, document splitting,
+% meta data, and page headers and footers.
 %
-% Note that if changes are made,
-% \watchout[Changes!]
-% it is best to first:
-% \begin{enumerate}
-% \item Clear all the \HTML, \PDF, and auxiliary files: \userentry{lwarpmk clearall}
-% \item Recompile the print version in order to recreate
-%	the configuration files for |lwarpmk|: \userentry{lwarpmk print}
-% \item Finally, recompile the \HTML\ version with the new settings: \userentry{lwarpmk html}
-% \end{enumerate}
+% See \cref{sec:htmlsettings} for more information.
 %
-% \begin{description}[style=unboxed]
 %
-% \item[Options for the \pkg{lwarp} package:] \ \newline
-%	Use the following as options for |\usepackage[<options>]{lwarp}|:
-%
-%	\begin{description}
-%
-% \ItemDescribeOption{HomeHTMLFilename} Filename of the homepage, without
-%	the ``|.html|'' suffix.
-%	Defaults to the \cs{BaseJobname}.  A common setting is:
-%	\begin{sourcedisplay}
-%	|HomeHTMLFilename=index|
-%	\end{sourcedisplay}
-%	causing the
-%	homepage to be the file |index.html|.  Underscores are allowed in
-%	\margintag{filename underscores}
-%	|HomeHTMLFilename| and |HTMLFilename| options, but may need to be escaped
-%	elsewhere, such as when appearing in a list:
-%	\index{underscore>filename}\index{file>underscore}
-%	\changes{v0.24}{2017/03/13}{Docs: Filename underscore.}
-%	\begin{sourcedisplay}
-%	     \cs{item} [\cs{href}\{file\textcolor{red}{\textbackslash\_}name.pdf\}\{text\}] \textbackslash
-%	\end{sourcedisplay}
-%
-% \ItemDescribeOption{HTMLFilename} A filename prefix for the rest of the \HTML\ web pages.
-%	Useful for numbered web pages with a common prefix.  May be empty.
-%
-% \ItemDescribeOption{latexmk} Controls whether
-%	\pkg{lwarp} uses |latexmk| to
-%	compile the document.  This setting is written to |lwarpmk|'s configuration
-%	files.  Defaults to false.
-%
-% \ItemDescribeOption{mathsvg} Selects \SVG\ display for math output.  (The default.)
-%
-% \ItemDescribeOption{mathjax} Selects MathJax for math output.
-%
-%	\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\TOC.
-%	Defaults to 1, causing the side\TOC\ to show sections but not subsections.
-%
-%	Each subpage of the website has its own small table of contents
-%	\margintag{side\TOC}
-%	on the side (the ``side\TOC'').  Its depth is set by |SideTOCDepth|.
-%	This side\TOC\ is only shown if the web page is wide enough.
-%	When using a narrow web browser window,
-%	``responsive web design'' is used to show the side\TOC\ at the top of the
-%	page and a link back to ``Home'' at the bottom.
-%
-%	\label{sec:filedepth}
-%	It is recommended to set:
-%	\begin{sourcedisplay}
-%	|SideTOCDepth|\,=\,|FileDepth|
-%	\end{sourcedisplay}
-%	or
-%	\begin{sourcedisplay}
-%	|SideTOCDepth|\,=\,|FileDepth|+1
-%	\end{sourcedisplay}
-%
-%	If |SideTOCDepth|\,<\,|FileDepth|, web pages will be inaccessible via the
-%	side\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 \HTML\ website to be one single file.
-%	\begin{itemize}
-%	\item To place the entire file into one \HTML\ page, use:
-%		\begin{sourcedisplay}
-%		\cs{setcounter}\{FileDepth\}\{-5\}
-%		\end{sourcedisplay}
-%	\item To split the \HTML\ file at \cs{section} depth, use:
-%		\begin{sourcedisplay}
-%		\cs{setcounter}\{FileDepth\}\{1\}
-%		\end{sourcedisplay}
-%	\item To ensure that the \HTML\ pages/files are accessible:
-%		\watchout\\
-%		Place a \cs{tableofcontents} somewhere before the first section
-%		break (therefore in the ``home page''), and set
-%		\begin{sourcedisplay}
-%		tocdepth\,>=\,FileDepth
-%		\end{sourcedisplay}
-%		\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 |HTMLFilename| option is used as a prefix.
-%
-%	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|.
-%	\footnote{See \cs{SetHTMLFileNumber} to number grouped by chapter, for example.}
-%	\begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
-%	\usepackage[
-%		HomeHTMLFilename=index,
-%		HTMLFilename={node-}
-%	]{lwarp}
-%	\boolfalse{FileSectionNames}
-%	\end{Verbatim}
-%
-%	\item[Named \HTML\ sections, no prefix:] \
-%
-%	Example: |index.html|, and |About.html|, |Products.html|
-%	\begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
-%	\usepackage[
-%		HomeHTMLFilename=index,
-%		HTMLFilename={}
-%	]{lwarp}
-%	\booltrue{FileSectionNames}
-%	\end{Verbatim}
-%
-%	\item[Named \HTML\ sections, with prefix:] \
-%
-%	Example: Homepage |mywebsite.html|, and additional pages such
-%	as |mywebsite-About.html|, etc.
-%	\begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
-%	\usepackage[
-%		HomeHTMLFilename=mywebsite,
-%		HTMLFilename={mywebsite-}
-%	]{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''.
-%
-% \end{description}
-%
-%
-% \item[Placed before \texttt{\cs{begin}\{document\}},
-%	or before any sectioning command which causes a file break:] \
-%
-% \begin{description}
-% \ItemDescribeMacro{\CSSFilename}  \marg{filename.css} \quad
-%	Sets the \CSS\ file to use for the following
-%	files.  May be changed before each each sectioning command which would
-%	cause a file split.
-%
-%	The \CSS\ styles of the web pages are set by the \cs{CSSFilename} command.
-%	If \cs{CSSFilename} is not used, a default plain style is used to mimic printed
-%	\LaTeX\ output.  |lwarp_sagebrush.css| is a semi-fancy colored style as shown
-%	in this tutorial.  Change it to |lwarp_formal.css| for a more formal look,
-%	or comment out the \cs{CSSFilename} command to see the default.
-%	\cs{CSSFilename} may be used before each file break to set the \CSS\ for
-%	individual pagess of the website.
-%
-% \ItemDescribeMacro{\HTMLLanguage} The \HTML\ file's |html lang| tag.
-%	Defaults to |en-US|.
-%
-% \ItemDescribeMacro{\HTMLAuthor} The \HTML\ header's meta author.
-%	Defaults to \cs{theauthor}.
-%
-% \ItemDescribeMacro{\HTMLDescription} \marg{description} \quad
-%	Sets the \HTML\ \attribute{description} tag for
-%	the following files.  May be changed before each each sectioning command which would
-%	cause a file split.
-%
-% \ItemDescribeMacro{\HTMLFirstPageTop} \marg{contents} \quad
-%	A user-definable custom action applied
-%	to the top of the home page.  Useful for logos, etc.
-%	Defaults empty.
-%	Ignored in print output.
-%
-% \ItemDescribeMacro{\HTMLPageTop}  \marg{contents} \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{\HTMLPageBottom}  \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}
-%
-%
-% \needspace{2\baselineskip}
-% \item[Placed in the home page before the first sectioning command which causes a file break:] \
-%
-% \begin{description}
-% \ItemDescribeMacro{\tableofcontents}
-% Used to place a table of contents on the home page.
-% This command must be used before the first file split,
-% \watchout[TOC on the homepage!]
-% so that a way is available to navigate to other files from the homepage.
-%
-% Links to each chapter/section are provided, as selected by |tocdepth|.
-% \end{description}
-%
-%
-% \needspace{2\baselineskip}
-% \item[Placed in the document wherever necessary:] \
-%
-% \begin{description}
-% \ItemDescribeEnv{warpprint} An environment which is only used
-%	while generating print output.  Place here anything which does not
-%	apply to \HTML\ and which may cause problems with \pkg{lwarp}.
-%	If \pkg{lwarp} knows about and emulates or supports
-%	a package then its related macros, lengths, counters, etc. probably won't have
-%	to be placed inside a \env{warpprint} environment, but unknown packages
-%	may cause problems which may be isolated from \pkg{lwarp} using this environment.
-%
-% \ItemDescribeEnv{warpHTML} An environment which is only used
-%	while generating \HTML\ output.  This is useful for website logos and
-%	other items which have no purpose in printed output.
-%
-% \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}}
@@ -4265,12 +4014,35 @@
 % See \cref{sec:modifylwarpmk}.
 %
 %
+% \clearpage
 %
-%
 % \subsection{\protect\pkg{lwarp} package loading and options}
 % \label{sec:loading}
 % \index{settings>lwarp package options}
 % 
+% \begin{table}
+% \caption{Package options\label{tab:options}}
+% \centering
+% \begin{tabular}{>{\ttfamily}lp{3.25in}}
+% Option & Description \\ \midrule
+% warpprint & Generate print output, and also generate configuration files. \\
+% warpHTML & Generate \HTML\ output. \\
+% mathsvg & Show math using \SVG\ images. \\
+% mathjax & Show math using MathJax. \\
+% OSWindows & Force compatibility with MS-Windows. \\
+% BaseJobname & The \cs{jobname} to use.
+%   Set to the \cs{jobname} of the printed version even while generating \HTML. \\
+% HomeHTMLFilename & The filename of the home page. \\
+% HTMLFilename & A prefix for the filenames of the remaining web pages. \\
+% IndexLanguage & The |xindy| language option used for index and glossary generation. \\
+% latexmk & Boolean for |lwarpmk| to use |latexmk| for compiling documents. \\
+% lwarpmk & Generate a local copy of |lwarpmk.lua|. \\
+% xdyFilename & Set a custom filename for |xindy|. \\
+% \bottomrule
+% \end{tabular}
+% \end{table}
+%
+%
 % \pkg{lwarp} supports |book|, |report|, and |article| classes.
 %
 % Load the \pkg{lwarp} package immediately after the font and UTF-8 setup commands.
@@ -4281,6 +4053,7 @@
 %
 % \DescribeOption{warpprint}
 % \DescribeOption{warpHTML}
+% Usually controlled by |lwarpmk|, and not set in the document.
 % 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
@@ -4296,33 +4069,439 @@
 % For math display, select |mathsvg| (default), or |mathjax|.
 % For more information about the math options, see \cref{sec:limitsmath}.
 % 
-% See \cref{tab:options} for the full list of options.
+% \DescribeOption{OSWindows} See \cref{sec:OSportabilityusage} if using Windows.
 %
+% \DescribeOption{BaseJobname}  Not intended for the user.
+%   Used internally by \pkg{lwarp} when
+%   creating the |*_html.tex| file used to compile the \HTML\ version.
+%   See \cref{sec:handlingpackageoptions}.
 %
+% \DescribeOption{HomeHTMLFilename}  See \cref{sec:htmlsettings}.
+%
+% \DescribeOption{HTMLFilename}  See \cref{sec:htmlsettings}.
+%
+% \DescribeOption{IndexLanguage} If using an index or glossary,
+%   see \cref{sec:handlingpackageoptions}.
+%
+% \DescribeOption{latexmk} Has |lwarpmk| use |latexmk| to recompile the
+%   document several times if necessary.
+%   Otherwise, |lwarpmk| attempts to determing for itself whether to recompile.
+%   See \cref{sec:htmlsettings}.
+%
+% \DescribeOption{lwarpmk}  If you wish to have \pkg{lwarp} generate a local
+%   copy of |lwarpmk.lua| for archival or local-installation purposes,
+%   compile the print version with the |lwarpmk| option set.
+%   See \cref{sec:handlingpackageoptions}.
+%
+% \DescribeOption{xdyFilename} The default |xindy| filename is |lwarp.xdy|.
+%   If you wish to use a custom |.xdy| file for
+%   index generation, see \cref{sec:handlingpackageoptions}.
+%
+%
+%
+% \clearpage
+%
+% \subsection{Customizing the HTML output}
+% \label{sec:htmlsettings}
+% \index{settings>HTML conversion}
+% \index{HTML>conversion settings}
+%
+% \changes{v0.43}{2017/11/04}{Docs: HTML settings table.}
+% \changes{v0.43}{2017/11/06}{Docs: Reorganized HTML customization.}
 % \begin{table}
-% \caption{Package options\label{tab:options}}
-% \centering
-% \begin{tabular}{>{\ttfamily}lp{3.25in}}
-% Option & Description \\ \hline
-% warpprint & Generate print output, and also generate configuration files. \\
-% warpHTML & Generate \HTML\ output. \\
-% mathsvg & Show math using \SVG\ images. \\
-% mathjax & Show math using MathJax. \\
-% OSWindows & Force compatibility with MS-Windows. \\
-% BaseJobname & The \cs{jobname} to use.
-%	Set to the \cs{jobname} of the printed version even while generating \HTML. \\
-% HomeHTMLFilename & The filename of the home page. \\
-% HTMLFilename & A prefix for the filenames of the remaining web pages. \\
-% IndexLanguage & The |xindy| language option used for index and glossary generation. \\
-% latexmk & Boolean for |lwarpmk| to use |latexmk| for compiling documents.
-%	Otherwise, |lwarpmk| attempts to recompile several times by itself. \\
-% lwarpmk & Generate a local copy of |lwarpmk.lua|. \\
-% xdyFilename & Tells |lwarpmk| to use a custom filename for |xindy|, instead of |lwarp.xdy|. \\
+% \caption{HTML settings}
+% \begin{tabular}{>{\ttfamily}lp{3in}}
+% \toprule
+% Option & Description \\ \midrule
+% SideTOCDepth & Sectioning depth of the side\TOC. \\
+% FileDepth & Sectioning depth of the file splits. \\
+% CombineHigherDepths & Combine higher section levels. \\
+% FileSectionNames & Use section names for file names, else use numbers. \\
+% FootnoteDepth & Sectioning depth of footnotes. \\
+% \cs{abstractname} & The name of the abstract. \\
+% \cs{CSSFilename} & The \CSS\ for the following files. \\
+% \cs{HTMLLanguage} & The |html lang| tag. \\
+% \cs{HTMLAuthor} & The \HTML\ |author| meta tag. \\
+% \cs{HTMLDescription} & The \HTML\ |description| meta tag. \\
+% \cs{HTMLFirstPageTop} & Heading for the home page. \\
+% \cs{HTMLPageTop} & Heading for the other pages. \\
+% \cs{HTMLPageBottom} & Footing for all pages. \\
+% \bottomrule
 % \end{tabular}
 % \end{table}
 %
+% Several settings may be used to customize the \HTML\ output.
+% Watch for the correct placement of each!\watchout[Placement!]
 %
+% Note that if changes are made,
+% \watchout[Changes!]
+% it is best to first:
+% \begin{enumerate}
+% \item Clear all the \HTML, \PDF, and auxiliary files: \userentry{lwarpmk clearall}
+% \item Recompile the print version in order to recreate
+%   the configuration files for |lwarpmk|: \userentry{lwarpmk print}
+% \item Finally, recompile the \HTML\ version with the new settings: \userentry{lwarpmk html}
+% \end{enumerate}
+%
+% \begin{description}[style=unboxed]
+%
+% \item[Options for the \pkg{lwarp} package:] \ \newline
+%   Use the following as options for |\usepackage[<options>]{lwarp}|:
+%
+%   \begin{description}
+%
+% \ItemDescribeOption{HomeHTMLFilename} \DescribeDefault{\cs{BaseJobname}}
+%   Filename of the homepage, without
+%   the ``|.html|'' suffix.
+%   Defaults to the \cs{BaseJobname}.  A common setting is:
+%   \begin{sourcedisplay}
+%   |HomeHTMLFilename=index|
+%   \end{sourcedisplay}
+%   causing the
+%   homepage to be the file |index.html|.  Underscores are allowed in
+%   \margintag{filename underscores}
+%   |HomeHTMLFilename| and |HTMLFilename| options, but may need to be escaped
+%   elsewhere, such as when appearing in a list:
+%   \index{underscore>filename}\index{file>underscore}
+%   \changes{v0.24}{2017/03/13}{Docs: Filename underscore.}
+%   \begin{sourcedisplay}
+%        \cs{item} [\cs{href}\{file\textcolor{red}{\textbackslash\_}name.pdf\}\{text\}] \textbackslash
+%   \end{sourcedisplay}
+%   See \cref{sec:filenameexamples} for examples of naming and numbering \HTML\ files.
+%
+% \ItemDescribeOption{HTMLFilename} \DescribeDefault{<empty>}
+%   A filename prefix for the rest of the \HTML\ web pages.
+%   Useful for numbered web pages with a common prefix.  May be empty.
+%   See \cref{sec:filenameexamples} for examples of naming and numbering \HTML\ files.
+%
+% \ItemDescribeOption{latexmk} \DescribeDefault{false}
+%   Controls whether \pkg{lwarp} uses |latexmk| to
+%   compile the document.  This setting is written to |lwarpmk|'s configuration
+%   files.
+%
+% \ItemDescribeOption{mathsvg} \DescribeDefault{true}
+%   Selects \SVG\ display for math output.  (The default.)
+%
+% \ItemDescribeOption{mathjax} \DescribeDefault{false}
+%   Selects MathJax for math output.
+%
+%   \end{description} \bigskip
+%
+% \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} \DescribeDefault{1}
+%   Sectioning depth of the side\TOC.
+%   Defaults to 1, causing the side\TOC\ to show sections but not subsections.
+%
+%   Each subpage of the website has its own small table of contents
+%   \margintag{side\TOC}
+%   on the side (the ``side\TOC'').  Its depth is set by |SideTOCDepth|.
+%   This side\TOC\ is only shown if the web page is wide enough.
+%   When using a narrow web browser window,
+%   ``responsive web design'' is used to show the side\TOC\ at the top of the
+%   page and a link back to ``Home'' at the bottom.
+%
+%   \label{sec:filedepth}
+%   It is recommended to set:
+%   \begin{sourcedisplay}
+%   |SideTOCDepth|\,=\,|FileDepth|
+%   \end{sourcedisplay}
+%   or
+%   \begin{sourcedisplay}
+%   |SideTOCDepth|\,=\,|FileDepth|+1
+%   \end{sourcedisplay}
+%
+%   If |SideTOCDepth|\,<\,|FileDepth|,
+%       \watchout[inaccessible pages]
+%       web pages will be inaccessible via the side\TOC.
+%   \index{file>inaccessible}
+%   \index{page>inacessible}
+%   \index{missing sections}
+%   \index{section>missing}
+%
+% \ItemDescribeCounter{FileDepth}  \DescribeDefault{-5}
+%   Sectioning depth of file splits.
+%   Defaults to -5, causing the entire \HTML\ website to be one single file.
+%   \begin{itemize}
+%   \item To place the entire file into one \HTML\ page, use:
+%       \begin{sourcedisplay}
+%       \cs{setcounter}\{FileDepth\}\{-5\}
+%       \end{sourcedisplay}
+%   \item To split the \HTML\ file at \cs{section} depth, use:
+%       \begin{sourcedisplay}
+%       \cs{setcounter}\{FileDepth\}\{1\}
+%       \end{sourcedisplay}
+%   \item To ensure that the \HTML\ pages/files are accessible:
+%       \watchout\\
+%       Place a \cs{tableofcontents} somewhere before the first section
+%       break (therefore in the ``home page''), and set
+%       \begin{sourcedisplay}
+%       tocdepth\,>=\,FileDepth
+%       \end{sourcedisplay}
+%       \index{file>inaccessible}
+%       \index{page>inacessible}
+%       \index{missing sections}
+%       \index{section>missing}
+%   \end{itemize}
+%
+% \ItemDescribeBoolean{CombineHigherDepths}  \DescribeDefault{true}
+%   Combine a higher section with
+%   its first lower subsections, down to the |FileDepth|.
+%   Defaults to true.  Set to false to simulate the concept of a chapter
+%   opening on its own page, for example.
+%
+%   The file splits are controlled by the counter |FileDepth| and
+%   the boolean |CombineHigherDepths|.
+%   Setting |FileDepth| to 0 splits the file
+%   at chapters, 1 at sections, etc.  |CombineHigherDepths| controls whether
+%   to combine pages at levels higher than the chosen |FileDepth|, such as
+%   in this tutorial where the page which opens the chapter also contains the
+%   first section.
+%   Be careful to set |tocdepth| and |SideTOCDepth| to allow
+%   \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} \DescribeDefault{true}
+%   If true, web page filenames are derived from a sanitized version
+%   of the section names.  If false, web pages are numbered.
+%   Either way, the |HTMLFilename| option is used as a prefix.
+%   See \cref{sec:filenameexamples} for examples of naming and numbering \HTML\ files.
+%
+% \ItemDescribeCounter{FootnoteDepth} \DescribeDefault{5}
+%   Determines where to place pending footnotes.
+%   |5| places footnotes before each break down to the \cs{subparagraph} level.
+%   |1| places footnotes before each \cs{section} break.
+%   Any pending footnotes are also placed at the bottom of each page
+%   before each file break.
+%
+% \ItemDescribeMacro{\abstractname}  \DescribeDefault{Abstract}
+%   The name of the abstract.
+%   This may also be over-written
+%   by the \pkg{babel} package.  Defaults to ``Abstract''.
+%
+% \end{description}
+%
+%
+% \item[Placed before \texttt{\cs{begin}\{document\}},
+%   or before any sectioning command which causes a file break:] \
+%
+% \begin{description}
+% \ItemDescribeMacro{\CSSFilename}  \marg{filename.css}  \DescribeDefault{lwarp.css} \quad
+%   Sets the \CSS\ file to use for the following
+%   files.  May be changed before each each sectioning command which would
+%   cause a file split.
+%
+%   The \CSS\ styles of the web pages are set by the \cs{CSSFilename} command.
+%   If \cs{CSSFilename} is not used, a default plain style is used to mimic printed
+%   \LaTeX\ output.  |lwarp_sagebrush.css| is a semi-fancy colored style as shown
+%   in this tutorial.  Change it to |lwarp_formal.css| for a more formal look,
+%   or comment out the \cs{CSSFilename} command to see the default.
+%   \cs{CSSFilename} may be used before each file break to set the \CSS\ for
+%   individual pagess of the website.
+%
+% \ItemDescribeMacro{\HTMLLanguage}  \marg{langauge} \DescribeDefault{en-US} \quad
+%   The \HTML\ file's |html lang| meta tag.
+%   Defaults to |en-US|.
+%
+% \ItemDescribeMacro{\HTMLAuthor}  \marg{author} \DescribeDefault{\cs{theauthor}} \quad
+%   The \HTML\ header's meta author.
+%   Defaults to \cs{theauthor}.
+%
+% \ItemDescribeMacro{\HTMLDescription} \marg{description}  \DescribeDefault{<empty>} \quad
+%   Sets the \HTML\ \attribute{description} tag for
+%   the following files.  May be changed before each each sectioning command which would
+%   cause a file split.
+%
+% \ItemDescribeMacro{\HTMLFirstPageTop} \marg{contents}  \DescribeDefault{<empty>} \quad
+%   A user-definable custom action applied
+%   to the top of the home page.  Useful for logos, etc.
+%   Defaults empty.
+%   Ignored in print output.
+%
+% \ItemDescribeMacro{\HTMLPageTop}  \marg{contents}  \DescribeDefault{<empty>} \quad
+%   A user-definable custom action applied to
+%   the top of pages other than the home page.   Useful for logos, etc.
+%   Defaults empty.
+%   |\LinkHome| may be used to place a link back to the homepage.
+%   Ignored in print output.
+%
+% \ItemDescribeMacro{\HTMLPageBottom}  \marg{contents}  \DescribeDefault{<empty>} \quad
+%   A user-definable custom action applied to the
+%   bottom of each web page.
+%   Useful for authors, copyright notices, contact information, etc.
+%   Defaults empty.
+%   |\LinkHome| may be used to place a link back to the homepage.
+%   Ignored in print output.
+%
+% \end{description}
+%
+%
+% \needspace{2\baselineskip}
+% \item[Placed in the home page before the first sectioning command which causes a file break:] \
+%
+% \begin{description}
+% \ItemDescribeMacro{\tableofcontents}
+% Used to place a table of contents on the home page.
+% This command must be used before the first file split,
+% \watchout[TOC on the homepage!]
+% so that a way is available to navigate to other files from the homepage.
+%
+% Links to each chapter/section are provided, as selected by |tocdepth|.
+% \end{description}
+%
+%
+% \needspace{2\baselineskip}
+% \item[Placed in the document wherever necessary:] \
+%
+% \begin{description}
+% \ItemDescribeEnv{warpprint} An environment which is only used
+%   while generating print output.  Place here anything which does not
+%   apply to \HTML\ and which may cause problems with \pkg{lwarp}.
+%   If \pkg{lwarp} knows about and emulates or supports
+%   a package then its related macros, lengths, counters, etc. probably won't have
+%   to be placed inside a \env{warpprint} environment, but unknown packages
+%   may cause problems which may be isolated from \pkg{lwarp} using this environment.
+%
+% \ItemDescribeEnv{warpHTML} An environment which is only used
+%   while generating \HTML\ output.  This is useful for website logos and
+%   other items which have no purpose in printed output.
+%
+% \ItemDescribeMacro{\warpprintonly} \marg{contents} \quad
+%   A macro version of the \env{warpprint} environment.
+%
+% \ItemDescribeMacro{\warpHTMLonly} \marg{contents} \quad
+%   A macro version of the \env{warpHTML} environment.
+% \end{description}
+%
+% \end{description}
+%
+%
+% \subsubsection{Example HTML file naming}
+% \label{sec:filenameexamples}
+% \index{HTML>filename generation}
+% \changes{v0.20}{2016/09/11}{Docs: Examples for generating \HTML\ file names.}
+%
+%   Examples of ways to name or number \HTML\ files:
+%   \begin{description}
+%   \item[Numbered \HTML\ nodes:] \
+%
+%   Example: Homepage |index.html|, and |node-1|, |node-2|.
+%   \footnote{See \cs{SetHTMLFileNumber} to number in groups by chapter, for example.}
+%   \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
+%   \usepackage[
+%       HomeHTMLFilename=index,
+%       HTMLFilename={node-}
+%   ]{lwarp}
+%   \boolfalse{FileSectionNames}
+%   \end{Verbatim}
+%
+%   \item[Named \HTML\ sections, no prefix:] \
+%
+%   Example: |index.html|, and |About.html|, |Products.html|
+%   \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
+%   \usepackage[
+%       HomeHTMLFilename=index,
+%       HTMLFilename={}
+%   ]{lwarp}
+%   \booltrue{FileSectionNames}
+%   \end{Verbatim}
+%
+%   \item[Named \HTML\ sections, with prefix:] \
+%
+%   Example: Homepage |mywebsite.html|, and additional pages such
+%   as \\
+%   |mywebsite-About.html|, |mywebsite-Products|, etc.
+%   \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4]
+%   \usepackage[
+%       HomeHTMLFilename=mywebsite,
+%       HTMLFilename={mywebsite-}
+%   ]{lwarp}
+%   \booltrue{FileSectionNames}
+%   \end{Verbatim}
+%   \end{description}
+%
+%
+% \subsection{Customizing the CSS}
+% \label{sec:csscustomization}
+%
+% \DescribeMacro{\CSSFilename} \DescribeDefault{lwarp.css}
+% \cs{CSSFilename} may be used to choose which |.css| file is used to display
+% each page of the web site.  Use \cs{CSSFilename} before |\begin{document}|
+% to assign the style of the home page.
+% If different parts of the website should have different styles,
+% call \cs{CSSFilename} again before each section heading which creates a new file.
+% This may be changed numerous times throughout the file, resulting in
+% different \HTML\ pages having different \CSS\ files assigned:
+%   \begin{Verbatim}[gobble=2,tabsize=4]
+%       ...
+%       \newCSS{myCSS.css}
+%       \chapter{Another Chapter}
+%       ...
+%   \end{Verbatim}
+% \index{CSS>file selection}
+% \index{CSS>per HTML page}
+% \index{settings>CSS selection}
+%
+% The styles provided by \pkg{lwarp} include:
+% \begin{description}
+% \item[|lwarp.css|:] A default style if \cs{CSSFilename} is not used.  This
+%   style is comparable to a plain \LaTeX\ document.
+%   To set this style, you may use |\CSSFilename{lwarp.css}|, or no \cs{CSSFilename} call at all.
+% \item[|lwarp\_formal.css|:] A formal style with a serif fonts and a traditional
+%   look.
+% \item[|lwarp\_sagebrush.css|:] A style with muted colors, gradient backgrounds,
+%   additional borders, and rounded corners.
+% \end{description}
+%
+% To see each style in use, change the \cs{CSSFilename} entry in the tutorial,
+% |lwarpmk html| again, and then reload the tutorial webpage.
+%
+% A customized style may also be created.
+% \margintag{Custom \CSS}
+% For each new project a file
+% called |sample_project.css| is generated.  This may be renamed to
+% |<project>.css| then used by assigning |\CSSFilename{<project>.css}|.
+%
+% Note that |sample_project.css| is overwritten whenever \pkg{lwarp}
+% is loaded in print mode.
+% It is therefore important to rename the file \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 \CSS\ may be made by making entries
+% later in the |<project>.css| file.
+%
+% \label{sec:projectcss}
+% \DescribeFile{lwarp.css}\DescribeFile{project.css}\DescribeFile{sample_project.css}\label{sec:lwarpcss}
+% It is best to make a local project-specific \CSS\ file such as |project.css|, containing only
+% things which are different from |lwarp.css|.
+% The file |project.css| should refer to |lwarp.css| as follows:
+%   \index{CSS>project-specific changes}\index{CSS>lwarp.css}
+%   \index{settings>\CSS\ project-specific}
+% \vspace{-2ex}
+% \VerbatimInput[frame=lines]{sample_project.css}
+%
+% Finally use |\CSSFilename{<project>.css}| in the document to activate the custom \CSS.
 % 
+% 
 % \subsection{Selecting the operating system}
 % \label{sec:OSportabilityusage}
 % \changes{v0.11}{2016/03/11}{Added section: Selecting the operating system.}
@@ -4516,38 +4695,6 @@
 %	May be set empty to cancel the meta author tag.
 %
 %
-% \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 \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>\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{\CSSFilename}
-% For each section at which \HTML\ files are split,
-% |\CSSFilename| may be used before the sectioning command to select a \CSS\ file for that and all
-% following sections.  This may be changed numerous times throughout the file, resulting in
-% different \HTML\ pages having different \CSS\ files assigned:
-%	\begin{Verbatim}[gobble=2,tabsize=4]
-%		...
-%		\newCSS{myCSS.css}
-%		\chapter{Another Chapter}
-%		...
-%	\end{Verbatim}
-% \index{CSS>file selection}
-% \index{CSS>per HTML page}
-% \index{settings>CSS selection}
-%
-%
 % \subsection{Modifying \protect\texttt{xindy} index processing}
 % \label{sec:modifyxindy}
 %
@@ -4773,6 +4920,8 @@
 %
 % \subsection{Cross-references}
 %
+% \index{math>labels --- valid characters}
+% \index{label>valid characters}
 % \limitsreferences
 %
 % \subsubsection{Page references} The printed page does not translate
@@ -5043,12 +5192,17 @@
 % \limitsbabeltwo
 %
 % 
+% \needspace{5\baselineskip}
 %
+% \subsubsection{\pkg{todonotes} package}
 %
+% \DescribePackage{todonotes}
+% \limitstodonotes
 %
 %
 %
 %
+%
 % \clearpage
 %
 % \section{EPUB conversion}
@@ -5070,10 +5224,9 @@
 % A special boolean is provided to simplify the process of
 % converting \pkg{lwarp} \HTML\ output to \EPUB:
 %
-% \DescribeBoolean{FormatEPUB}
+% \DescribeBoolean{FormatEPUB}  \DescribeDefault{false}
 % \begin{docsidebar}[\texttt{FormatEPUB}]
 %	\raggedright
-%	Default false.
 %	|FormatEPUB| changes \HTML\ output for easy \EPUB\ conversion
 %	via an external program. Removes per-file headers, footers, and nav.
 %	Adds footnotes per chapter/section.
@@ -5095,7 +5248,7 @@
 % Several changes are then made to the \HTML\ output:
 %	\begin{itemize}
 %	\item Headers, footers, and navigation are removed at file splits.
-%	\item Any accumulated footnotes are printed at the bottom of each file split.
+%	\item Any accumulated footnotes are printed at the bottom of each section.
 %	\end{itemize}
 %
 % The resulting files will be ready to be loaded into an \EPUB\ conversion
@@ -5185,10 +5338,9 @@
 % A special boolean is provided to simplify the process of
 % converting \pkg{lwarp} \HTML\ output to \EPUB:
 %
-% \DescribeBoolean{FormatWP}
+% \DescribeBoolean{FormatWP} \DescribeDefault{false}
 % \begin{docsidebar}[\texttt{FormatWP}]
 %	\raggedright
-%	Default false.
 %	Changes \HTML\ output for easier conversion
 %	by a word processor.
 %	Removes headers and nav, prints footnotes per section,
@@ -5214,11 +5366,7 @@
 %       section headings will import as \UI{Heading~1} for the title, \UI{Heading~2}
 %       for \cs{section}, etc.
 %	\item Headers, footers, and navigation are removed at file splits.
-%	\item Any accumulated footnotes are printed at the bottom of each file split.
-%		These will have to be manually moved to their proper place in
-%		the document.  \pkg{lwarp} does not know where the page breaks
-%		will be in the word processor's document, so the footnotes are
-%		simply moved to the end of each sectional break.
+%	\item Any accumulated footnotes are printed at the bottom of each section.
 %	\item Forces single-file output.
 %	\item Turns off \HTML\ debugging comments.
 %		These are comments appearing inside the \HTML\ code,
@@ -5268,7 +5416,6 @@
 % \subsection{Additional modifications}
 %
 % \newcommand{\describeWPMarkFloats}{
-%   Default |false|.
 %   Adds
 %   \begin{sourcedisplay}
 %   === begin table === \\
@@ -5286,7 +5433,7 @@
 %   to word-processor frames and captions.
 % }
 %
-% \DescribeBoolean{WPMarkFloats}
+% \DescribeBoolean{WPMarkFloats} \DescribeDefault{false}
 %	\begin{docsidebar}[\texttt{WPMarkFloats}]
 %	\raggedright
 %   \describeWPMarkFloats
@@ -5294,7 +5441,6 @@
 %
 %
 % \newcommand{\describeWPMarkMinipages}{
-%   Default |false|.
 %   Adds
 %   \begin{sourcedisplay}
 %   === begin minipage === \\
@@ -5306,7 +5452,7 @@
 %   to word-processor frames.
 % }
 %
-% \DescribeBoolean{WPMarkMinipages}
+% \DescribeBoolean{WPMarkMinipages} \DescribeDefault{false}
 %   \begin{docsidebar}[\texttt{WPMarkMinipages}]
 %   \raggedright
 %   \describeWPMarkMinipages
@@ -5314,7 +5460,6 @@
 %
 %
 % \newcommand{\describeWPMarkTOC}{
-%   Default |true|.
 %   While formatting for word processors, adds
 %   \begin{sourcedisplay}
 %   === table of contents === \\
@@ -5325,7 +5470,7 @@
 %   \emph{If set |false|, the actual \acro{TOC} is printed instead.}
 % }
 %
-% \DescribeBoolean{WPMarkTOC}
+% \DescribeBoolean{WPMarkTOC} \DescribeDefault{true}
 %   \begin{docsidebar}[\texttt{WPMarkTOC}]
 %   \raggedright
 %   \describeWPMarkTOC
@@ -5333,7 +5478,6 @@
 %
 %
 % \newcommand{\describeWPMarkLOFT}{
-%   Default |false|.
 %   While formatting for word processors, adds
 %   \begin{sourcedisplay}
 %   === list of figures === \quad \textrm{\textit{and\,/\,or}} \\
@@ -5345,7 +5489,7 @@
 %   \emph{If set |false|, the actual lists are printed instead.}
 % }
 %
-% \DescribeBoolean{WPMarkLOFT}
+% \DescribeBoolean{WPMarkLOFT} \DescribeDefault{false}
 %   \begin{docsidebar}[\texttt{WPMarkLOFT}]
 %   \raggedright
 %   \describeWPMarkLOFT
@@ -5353,13 +5497,12 @@
 %
 %
 % \newcommand{\describeWPMarkMath}{
-%   Default |false|.
 %   While formatting for word processors,
 %   prints math as \LaTeX\ code instead of creating \SVG\ images or MathJax.
 %   This is useful for cut/paste into the LibreOffice Writer TeXMaths extension.
 % }
 %
-% \DescribeBoolean{WPMarkMath}
+% \DescribeBoolean{WPMarkMath} \DescribeDefault{false}
 % \DescribeProgram{TeXMaths}
 %   \margintag{siunitx}
 %   \begin{docsidebar}[\texttt{WPMarkMath}]
@@ -5378,7 +5521,6 @@
 %
 %
 % \newcommand*{\describeWPTitleHeading}{
-%   Default |false|.
 %   While formatting for word processors,
 %   |true| sets the document title to \element{h1}, which is expected for \HTML\ documents,
 %   but also causes the lower-level section headings to start at \UI{Heading 2} when
@@ -5389,7 +5531,7 @@
 %   See \cref{tab:WPsectionheadings} on \cpageref{tab:WPsectionheadings}.
 % }
 %
-% \DescribeBoolean{WPTitleHeading}
+% \DescribeBoolean{WPTitleHeading} \DescribeDefault{false}
 %   \margintag{section headings}
 %   \begin{docsidebar}[\texttt{WPTitleHeading}]
 %   \raggedright
@@ -6278,7 +6420,7 @@
 
 
 
-% \DescribeOption{HomeHTMLFilename}
+% \DescribeOption{HomeHTMLFilename} \DescribeDefault{\cs{\BaseJobname}}
 % The filename of the homepage.
 % The default is the jobname.
 % This option is stored into \cs{LWR at HomeHTMLFilename},
@@ -6292,7 +6434,7 @@
 %    \end{macrocode}
 
 
-% \DescribeOption{HTMLFilename}
+% \DescribeOption{HTMLFilename} \DescribeDefault{<empty>}
 % The filename prefix of web pages after the homepage.
 % The default is empty, no prefix.
 % This option is stored into \cs{LWR at HTMLFilename},
@@ -6552,6 +6694,7 @@
 \LWR at loadafter{booktabs}
 \LWR at loadafter{boxedminipage}
 \LWR at loadafter{boxedminipage2e}
+\LWR at loadafter{breakurl}
 \LWR at loadafter{ccaption}
 \LWR at loadafter{changepage}
 \LWR at loadafter{chngpage}
@@ -6609,6 +6752,7 @@
 \LWR at loadafter{longtable}
 \LWR at loadafter{lscape}
 \LWR at loadafter{ltcaption}
+\LWR at loadafter{luatodonotes}
 \LWR at loadafter{marginfit}
 \LWR at loadafter{marginfix}
 \LWR at loadafter{marginnote}
@@ -6678,6 +6822,7 @@
 \LWR at loadafter{titling}
 \LWR at loadafter{tocbibind}
 \LWR at loadafter{tocloft}
+\LWR at loadafter{todonotes}
 \LWR at loadafter{transparent}
 \LWR at loadafter{trivfloat}
 \LWR at loadafter{typearea}
@@ -7520,7 +7665,7 @@
 % \end{macro}
 
 
-% \DescribeBoolean{HTMLDebugComments} Default false.
+% \DescribeBoolean{HTMLDebugComments}  \DescribeDefault{false}
 %	Add comments in \HTML\
 %	about closing \element{div}s, sections, etc.
 %	\index{HTML>conversion settings>debug comments}
@@ -7566,7 +7711,7 @@
 %
 % \subsection{User-level controls}
 %
-% \DescribeBoolean{FormatEPUB}  Default false.
+% \DescribeBoolean{FormatEPUB}   \DescribeDefault{false}
 %	Changes \HTML\ output for easy \EPUB\ conversion
 %	via an external program. Removes per-file headers, footers, and nav.
 %	Adds footnotes per chapter/section.
@@ -7581,7 +7726,7 @@
 %    \end{macrocode}
 %
 %
-% \DescribeBoolean{FormatWP} Default false.
+% \DescribeBoolean{FormatWP}  \DescribeDefault{false}
 %	Changes \HTML\ output for easier conversion
 %	by a word processor.
 %	Removes headers and nav, prints footnotes per section,
@@ -7598,7 +7743,7 @@
 %    \end{macrocode}
 %
 %
-% \DescribeBoolean{WPMarkFloats}
+% \DescribeBoolean{WPMarkFloats} \DescribeDefault{false}
 % \describeWPMarkFloats
 %	\footnote{Perhaps some day word processors will have \HTML\ import options
 %	for identifying \element{figure} and \element{figcaption} tags
@@ -7614,7 +7759,7 @@
 \boolfalse{WPMarkFloats}
 %    \end{macrocode}
 
-% \DescribeBoolean{WPMarkMinipages}
+% \DescribeBoolean{WPMarkMinipages} \DescribeDefault{false}
 % \changes{v0.42}{2017/10/18}{Added boolean \protect\texttt{WPMarkMinipages}.}
 % \describeWPMarkMinipages
 %    \begin{macrocode}
@@ -7622,7 +7767,7 @@
 \boolfalse{WPMarkMinipages}
 %    \end{macrocode}
 
-% \DescribeBoolean{WPMarkTOC}
+% \DescribeBoolean{WPMarkTOC} \DescribeDefault{true}
 % \changes{v0.42}{2017/10/18}{Added boolean \protect\texttt{WPMarkTOC}.}
 % \describeWPMarkTOC
 %    \begin{macrocode}
@@ -7631,7 +7776,7 @@
 %    \end{macrocode}
 
 
-% \DescribeBoolean{WPMarkLOFT}
+% \DescribeBoolean{WPMarkLOFT} \DescribeDefault{false}
 % \changes{v0.42}{2017/10/19}{Added boolean \protect\texttt{WPMarkLOFT}.}
 % \describeWPMarkLOFT
 %    \begin{macrocode}
@@ -7640,7 +7785,7 @@
 %    \end{macrocode}
 
 
-% \DescribeBoolean{WPMarkMath}
+% \DescribeBoolean{WPMarkMath} \DescribeDefault{false}
 % \changes{v0.42}{2017/10/19}{Added boolean \protect\texttt{WPMarkMath}.}
 % \describeWPMarkMath
 %    \begin{macrocode}
@@ -7649,7 +7794,7 @@
 %    \end{macrocode}
 
 
-% \DescribeBoolean{WPTitleHeading}
+% \DescribeBoolean{WPTitleHeading} \DescribeDefault{false}
 % \changes{v0.42}{2017/10/19}{Added boolean \protect\texttt{WPTitleHeading}.}
 % \describeWPTitleHeading
 %    \begin{macrocode}
@@ -9889,7 +10034,7 @@
 \begin{warpprint}
 \begin{filecontents*}{sample_project.css}
 /* ( --- Start of project.css --- ) */
-/* A sample project-specific CSS file for lwarp --- ) */
+/* ( --- A sample project-specific CSS file for lwarp --- ) */
 
 /* Load default lwarp settings: */
 @import url("lwarp.css") ;
@@ -10087,7 +10232,7 @@
 
 -- Print the usage of the lwarpmk command:
 
-printversion = "v0.42"
+printversion = "v0.43"
 
 function printhelp ()
 print ("lwarpmk: Use lwarpmk -h or lwarpmk --help for help.") ;
@@ -12254,7 +12399,7 @@
 \begin{warpall}
 %    \end{macrocode}
 
-% In the following, catcode is manually changes back and forth
+% In the following, catcode is manually changed back and forth
 % without groups, since new macros are being defined which must
 % not be contained within the groups.
 %    \begin{macrocode}
@@ -12472,6 +12617,28 @@
 % \subsection{Regular page footnote implementation}
 % \label{sec:footnotesregular}
 %
+%
+% \codeall
+%    \begin{macrocode}
+\begin{warpall}
+%    \end{macrocode}
+
+% \DescribeCounter{FootnoteDepth} \DescribeDefault{5} Determines how deeply
+% to place footnotes in the \HTML\ files, similar to |tocdepth|.
+% The default of |5| places footnotes before each \cs{subparagraph} or higher.
+% See \cref{tab:depthsheadings} for a table of \LaTeX\ section headings.
+% \changes{v0.43}{2017/11/08}{Added \protect\texttt{FootnoteDepth}.}
+%    \begin{macrocode}
+\newcounter{FootnoteDepth}
+\setcounter{FootnoteDepth}{5}
+%    \end{macrocode}
+
+%    \begin{macrocode}
+\end{warpall}
+%    \end{macrocode}
+
+
+
 % \codehtml
 %    \begin{macrocode}
 \begin{warpHTML}
@@ -12642,11 +12809,16 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\LWR at epubprintpendingfootnotes}
+% \begin{macro}{\LWR at maybeprintpendingfootnotes} \marg{depth}
 % Used to print footnotes before sections only if formatting for an \EPUB\ or word processor:
+% \changes{v0.43}{2017/11/08}{Added \protect\texttt{FootnoteDepth}.}
 %    \begin{macrocode}
-\newcommand*{\LWR at epubprintpendingfootnotes}{%
-\ifthenelse{\boolean{FormatEPUB}\OR\boolean{FormatWP}}%
+\newcommand*{\LWR at maybeprintpendingfootnotes}[1]{%
+\ifboolexpr{
+    not test{\ifnumcomp{#1}{>}{\value{FootnoteDepth}}} or
+    bool{FormatEPUB} or
+    bool{FormatWP}
+}%
 {\LWR at printpendingfootnotes}%
 {}%
 }
@@ -12915,7 +13087,7 @@
 %    \begin{macrocode}
 \ifbool{FileSectionNames}%
 {\LWR at filenamenoblanks{#1}}
-{\renewcommand*{\LWR at thisfilename}{\theLWR at htmlfilenumber}}
+{\renewcommand*{\LWR at thisfilename}{\arabic{LWR at htmlfilenumber}}}
 %    \end{macrocode}
 
 % Include an \HTML\ comment to instruct lwarpmk
@@ -13248,7 +13420,17 @@
 % \end{macro}
 %
 %
+% \DescribeCounter{LWR at currentautosec} Records the page number when the section
+%   was created.  If a math expression is included in the section name,
+%   and SVG math is used, the corresponding \env{lateximage} will cause the
+%   page number to change by the time the following autosec label is created.
+% \changes{v0.43}{2017/11/01}{\protect\texttt{LWR at currentautosec}: Added.}
+%    \begin{macrocode}
+\newcounter{LWR at currentautosec}
+%    \end{macrocode}
 %
+%
+%
 % \begin{macro}{\LWR at section} * \oarg{TOC name} \marg{name} \marg{sectiontype}
 %
 % \changes{v0.20}{2017/01/09}{Combined higher-level sections together into files.}
@@ -13260,14 +13442,6 @@
 %    \begin{macrocode}
 \DeclareDocumentCommand{\LWR at section}{m m m m}{%
 \LWR at traceinfo{LWR at section |#2| |#3|}%
-% \ifthenelse{%
-% % \equal{#2}{\-NoValue-}\AND%
-% \isempty{#3}%
-% }%
-% {% empty section name
-% \LWR at traceinfo{LWR at section: empty section}%
-% }% empty section name
-% {% not an empty section name
 \LWR at traceinfo{LWR at section: not an empty section}%
 \LWR at stoppars%
 %    \end{macrocode}
@@ -13299,7 +13473,10 @@
         \cnttest{\csuse{LWR at depth#4}}{<=}{\value{LWR at prevFileDepth}}%
     \)%
     \AND%
-    \NOT\equal{#3}{}% phantomsection
+%    \end{macrocode}
+% \changes{v0.43}{2017/10/31}{Fix: Expansion in comparison.}
+%    \begin{macrocode}
+    \NOT\isempty{#3}% phantomsection
 }%
 %    \end{macrocode}
 % If so: start a new \HTML\ file:
@@ -13340,10 +13517,14 @@
 %    \end{macrocode}
 % Print an opening comment with the level and the name;
 % ex: ``section'' ``Introduction''
+% \changes{v0.43}{2017/10/31}{Fix: Nullify fonts inside HTML comment.}
 %    \begin{macrocode}
 
 \ifbool{HTMLDebugComments}{%
+    \begingroup%
+    \LWR at nullfonts%
     \LWR at htmlcomment{Opening #4 ``#3''{}}%
+    \endgroup%
 }{}%
 
 %    \end{macrocode}
@@ -13359,6 +13540,10 @@
 %    \begin{macrocode}
 \LWR at createautosec{\csuse{LWR at tag#4}}%
 %    \end{macrocode}
+% \changes{v0.43}{2017/11/01}{Fix: Math in section name.}
+%    \begin{macrocode}
+\setcounter{LWR at currentautosec}{\value{page}}
+%    \end{macrocode}
 % Check if starred:
 %    \begin{macrocode}
 \IfBooleanTF{#1}%
@@ -13454,8 +13639,9 @@
 \LWR at htmltag{\csuse{LWR at tag#4end}}%
 %    \end{macrocode}
 % Generate a \LaTeX{} label:
+% \changes{v0.43}{2017/11/01}{Fix: Math in section name.}
 %    \begin{macrocode}
-\label{autopage-\thepage}%
+\label{autopage-\theLWR at currentautosec}%
 %    \end{macrocode}
 % Start paragraph handing unless is an inline paragraph or subparagraph:
 %    \begin{macrocode}
@@ -13496,7 +13682,6 @@
 \global\boolfalse{LWR at forcinghtmltoc}%
 }%
 %
-% }% not an empty section name
 \LWR at traceinfo{LWR at section: done}%
 }
 %    \end{macrocode}
@@ -13512,7 +13697,7 @@
 %
 %    \begin{macrocode}
 \DeclareDocumentCommand{\part}{s o m}{%
-\LWR at epubprintpendingfootnotes%
+\LWR at maybeprintpendingfootnotes{\LWR at depthpart}%
 \LWR at stoppars%
 
 \LWR at startnewdepth{\LWR at depthpart}{\LWR at printclosepart}%
@@ -13535,7 +13720,7 @@
 {%
 \DeclareDocumentCommand{\chapter}{s o m}{%
 \LWR at traceinfo{chapter #3}%
-\LWR at epubprintpendingfootnotes%
+\LWR at maybeprintpendingfootnotes{\LWR at depthchapter}%
 \LWR at stoppars%
 
 \LWR at startnewdepth{\LWR at depthchapter}{\LWR at printclosechapter}%
@@ -13551,7 +13736,7 @@
 % \begin{macro}{\section} * \oarg{TOC name} \marg{name}
 %    \begin{macrocode}
 \DeclareDocumentCommand{\section}{s o m}{%
-\LWR at epubprintpendingfootnotes%
+\LWR at maybeprintpendingfootnotes{\LWR at depthsection}%
 \LWR at stoppars%
 
 \LWR at startnewdepth{\LWR at depthsection}{\LWR at printclosesection}%
@@ -13566,7 +13751,7 @@
 % \begin{macro}{\subsection} * \oarg{TOC name} \marg{name}
 %    \begin{macrocode}
 \DeclareDocumentCommand{\subsection}{s o m}{%
-\LWR at epubprintpendingfootnotes%
+\LWR at maybeprintpendingfootnotes{\LWR at depthsubsection}%
 \LWR at stoppars%
 
 \LWR at startnewdepth{\LWR at depthsubsection}{\LWR at printclosesubsection}%
@@ -13581,7 +13766,7 @@
 % \begin{macro}{\subsubsection} * \oarg{TOC name} \marg{name}
 %    \begin{macrocode}
 \DeclareDocumentCommand{\subsubsection}{s o m}{%
-\LWR at epubprintpendingfootnotes%
+\LWR at maybeprintpendingfootnotes{\LWR at depthsubsubsection}%
 \LWR at stoppars%
 
 \LWR at startnewdepth{\LWR at depthsubsubsection}%
@@ -13598,7 +13783,7 @@
 % \begin{macro}{\paragraph} * \oarg{TOC name} \marg{name}
 %    \begin{macrocode}
 \DeclareDocumentCommand{\paragraph}{s o m}{%
-\LWR at epubprintpendingfootnotes%
+\LWR at maybeprintpendingfootnotes{\LWR at depthparagraph}%
 \LWR at stoppars%
 
 \LWR at startnewdepth{\LWR at depthparagraph}{\LWR at printcloseparagraph}%
@@ -13613,7 +13798,7 @@
 % \begin{macro}{\subparagraph} * \oarg{TOC name} \marg{name}
 %    \begin{macrocode}
 \DeclareDocumentCommand{\subparagraph}{s o m}{%
-\LWR at epubprintpendingfootnotes%
+\LWR at maybeprintpendingfootnotes{\LWR at depthsubparagraph}%
 \LWR at stoppars%
 
 \LWR at startnewdepth{\LWR at depthsubparagraph}{\LWR at printclosesubparagraph}%
@@ -15322,6 +15507,13 @@
 \boolfalse{LWR at startedrow}
 %    \end{macrocode}
 
+% \DescribeBoolean{LWR at tabularcelladded}
+% True if have added a data cell for this position.
+%    \begin{macrocode}
+\newbool{LWR at tabularcelladded}
+\boolfalse{LWR at tabularcelladded}
+%    \end{macrocode}
+
 % \DescribeBoolean{LWR at doinghline}
 % True if the next row will have an hline or midrule above it.
 % Also used for \cs{midrule}.
@@ -15410,8 +15602,8 @@
 \ifbool{LWR at skipatbang}%
 {}%
 {%
-    \LWR at printatbang{at}{\theLWR at tablecolspos}%
-    \LWR at printatbang{bang}{\theLWR at tablecolspos}%
+    \LWR at printatbang{at}{\arabic{LWR at tablecolindex}}%
+    \LWR at printatbang{bang}{\arabic{LWR at tablecolindex}}%
 }%
 }
 %    \end{macrocode}
@@ -15454,7 +15646,7 @@
             bool{LWR at emptyatbang}
         }%
         {}%
-        {\LWR at getexparray{LWR at colafterspec}{\theLWR at tablecolspos}}%
+        {\LWR at getexparray{LWR at colafterspec}{\arabic{LWR at tablecolindex}}}%
 %    \end{macrocode}
 % Close paragraphs:
 %    \begin{macrocode}
@@ -15465,6 +15657,7 @@
 % Skip the |@| and |!| cells if are closing a multicolumn cell.
 %    \begin{macrocode}
         \leavevmode\unskip\LWR at htmltag{/td}\LWR at orignewline%
+        \global\booltrue{LWR at tabularcelladded}%
         \LWR at insertatbangcols%
     }% not skipping mrowcell
 }% not exiting tabular
@@ -15569,8 +15762,12 @@
 %    \end{macrocode}
 % Move to the next column.
 %    \begin{macrocode}
-    \addtocounter{LWR at tablecolspos}{1}%
+    \addtocounter{LWR at tablecolindex}{1}%
 %    \end{macrocode}
+% Have not yet added data in this column:
+%    \begin{macrocode}
+\boolfalse{LWR at tabularcelladded}%
+%    \end{macrocode}
 % Look at the next token to decide multi or single column data tag.
 %    \begin{macrocode}
     \LWR at getmynexttoken%
@@ -15632,29 +15829,37 @@
 %    \end{macrocode}
 % Reenable the table data tags until finished with the final row:
 %    \begin{macrocode}
-\boolfalse{LWR at exitingtabular}%
+\global\boolfalse{LWR at exitingtabular}%
 %    \end{macrocode}
 % Generate table data tags and ampersands until the right edge:
 %    \begin{macrocode}
-\whiledo{\value{LWR at tablecolspos}<\value{LWR at tabletotalcols}}{%
-\LWR at tabledatasinglecolumntag%
+\whiledo{%
+    \(%
+        \boolean{LWR at intabularmetadata} \AND%
+        \NOT\boolean{LWR at tabularcelladded} \AND%
+        \cnttest{\value{LWR at tablecolindex}}{=}{\value{LWR at tabletotalcols}}%
+    \) \OR%
+    \cnttest{\value{LWR at tablecolindex}}{<}{\value{LWR at tabletotalcols}}%
+}{%
+    \LWR at tabledatasinglecolumntag%
 %    \end{macrocode}
 % The following is essentially \cs{LWR at tabularampersand} with
 % |LWR at emptyatbang| added to empty the following cells:
 %    \begin{macrocode}
     \LWR at closetabledatacell%
-    \addtocounter{LWR at tablecolspos}{1}%
+    \addtocounter{LWR at tablecolindex}{1}%
+    \boolfalse{LWR at tabularcelladded}%
     \global\booltrue{LWR at emptyatbang}%
 %    \end{macrocode}
 % Starts the next cell:
 %    \begin{macrocode}
-    \LWR at getmynexttoken%
+    \ifthenelse{%
+        \cnttest{\value{LWR at tablecolindex}}{<}{\value{LWR at tabletotalcols}}%
+    }%
+    {\LWR at getmynexttoken}%
+    {}%
 }%
 %    \end{macrocode}
-% Required to close the final cell:
-%    \begin{macrocode}
-\LWR at closetabledatacell%
-%    \end{macrocode}
 % Reenable the original |LWR at exitingtabular| to close the entire table:
 %    \begin{macrocode}
 \endgroup%
@@ -15677,7 +15882,7 @@
 %    \begin{macrocode}
 \NewDocumentCommand{\LWR at tabularendofline}{s o}
 {%
-\ifthenelse{\value{LWR at tablecolspos}<\value{LWR at tabletotalcols}}{%
+\ifthenelse{\value{LWR at tablecolindex}<\value{LWR at tabletotalcols}}{%
     \LWR at tabularfinishrow%
 }%
 {%
@@ -15700,8 +15905,12 @@
 %    \end{macrocode}
 % Start at first column:
 %    \begin{macrocode}
-\setcounter{LWR at tablecolspos}{1}
+\setcounter{LWR at tablecolindex}{1}%
 %    \end{macrocode}
+% Have not yet added data in this column:
+%    \begin{macrocode}
+\boolfalse{LWR at tabularcelladded}%
+%    \end{macrocode}
 % Look at the next token to decide between single column data tag
 % or a special case:
 %    \begin{macrocode}
@@ -15744,35 +15953,50 @@
 % \end{macro}
 
 
-% \DescribeCounter{LWR at tablecolswidth}
-% Holds the width of the table columns specification.
+% \DescribeCounter{LWR at tablecolspecwidth}
+% Holds the number of tokens in the table columns specification.
 %
-% This is the number of tokens, including one for each |@| etc. column, and also
-% one each for the parameters of |p|, |@|, etc. columns, and three for each |D| column.
+% This is includes one for each |@|, |!|, |<|, |>| column,
+% and also one for each of the parameters of |p|, |@|, |!|, |<|, |>| columns,
+% and three for each |D| column.
 %
 % (This is not the total \# of \LaTeX\ columns in the table.)
 %    \begin{macrocode}
-\newcounter{LWR at tablecolswidth}
+\newcounter{LWR at tablecolspecwidth}
 %    \end{macrocode}
 
+% \DescribeCounter{LWR at tablecolspecindex}
+% While parsing the \LaTeX\ table column specification,
+% starts at 1 and is incremented per token of the specification.
+% While producing the table, resets to 1 at the start of the table and
+% also at each end of line, and is incremented by 1 by each ampersand.
+%    \begin{macrocode}
+\newcounter{LWR at tablecolspecindex}
+%    \end{macrocode}
 
-% \DescribeCounter{LWR at tablecolspos}
-% Where are currently looking into the table column specification.
-% Index starts at 1.
+% \DescribeCounter{LWR at tablecolindex}
+% While parsing the \LaTeX\ table column specification,
+% starts at 1 and is incremented per token of the specification.
+% While producing the table, resets to 1 at the start of the table and
+% also at each end of line, and is incremented by 1 by each ampersand.
 %    \begin{macrocode}
-\newcounter{LWR at tablecolspos}
+\newcounter{LWR at tablecolindex}
 %    \end{macrocode}
 
 % \DescribeCounter{LWR at tabletotalcols}
-% Holds the final number of table columns, not counting |@| and |!| columns.
-% This is equal to the number of cells in each row.
+% While parsing a table column specification,
+% begins at 0 and increments by 1 per \LaTeX\ table column.
+% Eventually holds the final number of \LaTeX\ table columns in each row,
+% not counting |@| and |!| columns.
+% (In \HTML, |@| and |!| cells become their own columns, but are not included in
+% |LWR at tabletotalcols|.)
 %    \begin{macrocode}
 \newcounter{LWR at tabletotalcols}
 %    \end{macrocode}
 
 % \DescribeCounter{LWR at tabletotalcolsnext}
-% Holds the next column while parsing.
-% Is one more than |LWR at tabletotalcols|.
+% Holds the next \LaTeX\ table column index while parsing,
+% equal to one more than |LWR at tabletotalcols|.
 %    \begin{macrocode}
 \newcounter{LWR at tabletotalcolsnext}
 %    \end{macrocode}
@@ -15812,16 +16036,16 @@
 % Move to the next token after the '@':
 %    \begin{macrocode}
 \LWR at traceinfo{at column}%
-\addtocounter{LWR at tablecolspos}{1}%
+\addtocounter{LWR at tablecolspecindex}{1}%
 %    \end{macrocode}
-% Read the next token into \cs{LWR at strresult}, expanding once:
+% Read the next token into \cs{LWR at colparameter}, expanding once:
 %    \begin{macrocode}
 \LWR at traceinfo{about to read the next token:}%
 \expandarg%
-\StrChar{\LWR at origcolspec}{\theLWR at tablecolspos}[\LWR at colparameter]
+\StrChar{\LWR at origcolspec}{\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]
 \fullexpandarg%
 %    \end{macrocode}
-% Store the result into a data array, expanding once out of \cs{LWR at strresult}:
+% Store the result into a data array, expanding once out of \cs{LWR at colparameter}:
 %    \begin{macrocode}
 \LWR at traceinfo{have now read the next token}%
 \ifthenelse{\cnttest{\value{LWR at tabletotalcols}}=0}
@@ -15833,9 +16057,9 @@
 }%
 {% not at the left edge:
     \LWR at traceinfo{not at the left edge}%
-    \LWR at setexparray{LWR at colatspec}{\theLWR at tabletotalcols}{\LWR at colparameter}%
-    \LWR at traceinfo{at \theLWR at tabletotalcols: %
-    \LWR at getexparray{LWR at colatspec}{\theLWR at tabletotalcols}}%
+    \LWR at setexparray{LWR at colatspec}{\arabic{LWR at tabletotalcols}}{\LWR at colparameter}%
+    \LWR at traceinfo{at \arabic{LWR at tabletotalcols}: %
+    \LWR at getexparray{LWR at colatspec}{\arabic{LWR at tabletotalcols}}}%
 }%
 \let\LWR at colparameter\relax%
 \booltrue{LWR at validtablecol}%
@@ -15855,16 +16079,16 @@
 % Move to the next token after the '!':
 %    \begin{macrocode}
 \LWR at traceinfo{bang column}%
-\addtocounter{LWR at tablecolspos}{1}%
+\addtocounter{LWR at tablecolspecindex}{1}%
 %    \end{macrocode}
-% Read the next token into \cs{LWR at strresult}, expanding once:
+% Read the next token into \cs{LWR at colparameter}, expanding once:
 %    \begin{macrocode}
 \LWR at traceinfo{about to read the next token:}%
 \expandarg%
-\StrChar{\LWR at origcolspec}{\theLWR at tablecolspos}[\LWR at colparameter]
+\StrChar{\LWR at origcolspec}{\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]
 \fullexpandarg%
 %    \end{macrocode}
-% Store the result into a data array, expanding once out of \cs{LWR at strresult}:
+% Store the result into a data array, expanding once out of \cs{LWR at colparameter}:
 %    \begin{macrocode}
 \LWR at traceinfo{have now read the next token}%
 \ifthenelse{\cnttest{\value{LWR at tabletotalcols}}=0}
@@ -15874,8 +16098,8 @@
 }%
 {% not at the left edge:
     \LWR at traceinfo{not at the left edge}%
-    \LWR at setexparray{LWR at colbangspec}{\theLWR at tabletotalcols}{\LWR at colparameter}%
-    \LWR at traceinfo{bang \theLWR at tabletotalcols: \LWR at colparameter!}%
+    \LWR at setexparray{LWR at colbangspec}{\arabic{LWR at tabletotalcols}}{\LWR at colparameter}%
+    \LWR at traceinfo{bang \arabic{LWR at tabletotalcols}: \LWR at colparameter!}%
 }%
 \let\LWR at colparameter\relax%
 \booltrue{LWR at validtablecol}%
@@ -15894,17 +16118,17 @@
 %    \end{macrocode}
 % Move to the next token after the '>':
 %    \begin{macrocode}
-\addtocounter{LWR at tablecolspos}{1}%
+\addtocounter{LWR at tablecolspecindex}{1}%
 %    \end{macrocode}
-% Read the next token, expanding once into \cs{LWR at strresult}:
+% Read the next token, expanding once into \cs{LWR at colparameter}:
 %    \begin{macrocode}
 \expandarg%
-\StrChar{\LWR at origcolspec}{\theLWR at tablecolspos}[\LWR at colparameter]%
+\StrChar{\LWR at origcolspec}{\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]%
 \fullexpandarg%
 %    \end{macrocode}
-% Store the result into a data array, expanding once out of \cs{LWR at strresult}:
+% Store the result into a data array, expanding once out of \cs{LWR at colparameter}:
 %    \begin{macrocode}
-\LWR at setexparray{LWR at colbeforespec}{\theLWR at tabletotalcolsnext}{\LWR at colparameter}%
+\LWR at setexparray{LWR at colbeforespec}{\arabic{LWR at tabletotalcolsnext}}{\LWR at colparameter}%
 \let\LWR at colparameter\relax%
 \booltrue{LWR at validtablecol}%
 }
@@ -15920,18 +16144,17 @@
 %    \end{macrocode}
 % Move to the next token after the '<':
 %    \begin{macrocode}
-\addtocounter{LWR at tablecolspos}{1}%
+\addtocounter{LWR at tablecolspecindex}{1}%
 %    \end{macrocode}
-% Read the next token, expanding once into \cs{LWR at strresult}:
+% Read the next token, expanding once into \cs{LWR at colparameter}:
 %    \begin{macrocode}
-% \StrChar{#1}{\theLWR at tablecolspos}[\LWR at colparameter]
 \expandarg%
-\StrChar{\LWR at origcolspec}{\theLWR at tablecolspos}[\LWR at colparameter]%
+\StrChar{\LWR at origcolspec}{\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]%
 \fullexpandarg%
 %    \end{macrocode}
-% Store the result into a data array, expanding once out of \cs{LWR at strresult}:
+% Store the result into a data array, expanding once out of \cs{LWR at colparameter}:
 %    \begin{macrocode}
-\LWR at setexparray{LWR at colafterspec}{\theLWR at tabletotalcols}{\LWR at colparameter}%
+\LWR at setexparray{LWR at colafterspec}{\arabic{LWR at tabletotalcols}}{\LWR at colparameter}%
 \let\LWR at colparameter\relax%
 \booltrue{LWR at validtablecol}%
 }
@@ -15954,7 +16177,7 @@
     \LWR at setexparray{LWR at colbarspec}{leftedge}{tvertbarl}%
 }%
 {% not at the left edge:
-    \LWR at setexparray{LWR at colbarspec}{\theLWR at tabletotalcols}{tvertbarr}%
+    \LWR at setexparray{LWR at colbarspec}{\arabic{LWR at tabletotalcols}}{tvertbarr}%
 }%
 \booltrue{LWR at validtablecol}%
 }
@@ -15973,12 +16196,12 @@
 \appto\LWR at tablecolspec{#1}%
 \addtocounter{LWR at tabletotalcols}{1}%
 \addtocounter{LWR at tabletotalcolsnext}{1}%
-\LWR at traceinfo{normal column \theLWR at tabletotalcols: #1}%
-\LWR at setexparray{LWR at colatspec}{\theLWR at tabletotalcolsnext}{}%
-\LWR at setexparray{LWR at colbangspec}{\theLWR at tabletotalcolsnext}{}%
-\LWR at setexparray{LWR at colbeforespec}{\theLWR at tabletotalcolsnext}{}%
-\LWR at setexparray{LWR at colafterspec}{\theLWR at tabletotalcolsnext}{}%
-\LWR at setexparray{LWR at colbarspec}{\theLWR at tabletotalcolsnext}{}%
+\LWR at traceinfo{normal column \arabic{LWR at tabletotalcols}: #1}%
+\LWR at setexparray{LWR at colatspec}{\arabic{LWR at tabletotalcolsnext}}{}%
+\LWR at setexparray{LWR at colbangspec}{\arabic{LWR at tabletotalcolsnext}}{}%
+\LWR at setexparray{LWR at colbeforespec}{\arabic{LWR at tabletotalcolsnext}}{}%
+\LWR at setexparray{LWR at colafterspec}{\arabic{LWR at tabletotalcolsnext}}{}%
+\LWR at setexparray{LWR at colbarspec}{\arabic{LWR at tabletotalcolsnext}}{}%
 \booltrue{LWR at validtablecol}%
 }
 %    \end{macrocode}
@@ -15998,7 +16221,7 @@
 %    \end{macrocode}
 % Skips the following width token:
 %    \begin{macrocode}
-\addtocounter{LWR at tablecolspos}{1}%
+\addtocounter{LWR at tablecolspecindex}{1}%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -16022,7 +16245,7 @@
 %    \end{macrocode}
 % Skips the following three parameters.
 %    \begin{macrocode}
-\addtocounter{LWR at tablecolspos}{3}%
+\addtocounter{LWR at tablecolspecindex}{3}%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -16127,6 +16350,12 @@
 %    \begin{macrocode}
 \renewcommand*{\LWR at origcolspec}{#1}%
 %    \end{macrocode}
+% Remove spaces:
+% \changes{v0.43}{2017/11/01}{Ignore spaces in col spec.}
+%    \begin{macrocode}
+\expandarg%
+\StrSubstitute{\LWR at origcolspec}{ }{}[\LWR at origcolspec]%
+%    \end{macrocode}
 % Clear the parsed resulting column spec:
 %    \begin{macrocode}
 \renewcommand*{\LWR at tablecolspec}{}%
@@ -16157,27 +16386,27 @@
 %    \end{macrocode}
 % Starting at the first column specification:
 %    \begin{macrocode}
-\setcounter{LWR at tablecolspos}{1}%
+\setcounter{LWR at tablecolspecindex}{1}%
 %    \end{macrocode}
 % Place the colspecs string length into \cs{LWR at strresult},
 % and remember the number of characters in the column specification:
 %    \begin{macrocode}
 \LWR at traceinfo{about to StrLen}%
-\noexpandarg%
-\StrLen{#1}[\LWR at strresult]%
+\expandarg%
+\StrLen{\LWR at origcolspec}[\LWR at strresult]%
 \fullexpandarg%
 \LWR at traceinfo{finished StrLen}%
-\setcounter{LWR at tablecolswidth}{\LWR at strresult}%
+\setcounter{LWR at tablecolspecwidth}{\LWR at strresult}%
 %    \end{macrocode}
 % Scan through the column specifications:
 %    \begin{macrocode}
-\whiledo{\not\value{LWR at tablecolspos}>\value{LWR at tablecolswidth}}{%
+\whiledo{\not\value{LWR at tablecolspecindex}>\value{LWR at tablecolspecwidth}}{%
 %    \end{macrocode}
 % Place the next single-character column type into \cs{LWR at strresult}:
 %    \begin{macrocode}
-\noexpandarg%
-\StrChar{#1}{\theLWR at tablecolspos}[\LWR at strresult]%
-\LWR at traceinfo{position \arabic{LWR at tablecolspos}: \LWR at strresult}%
+\expandarg%
+\StrChar{\LWR at origcolspec}{\arabic{LWR at tablecolspecindex}}[\LWR at strresult]%
+\LWR at traceinfo{position \arabic{LWR at tablecolspecindex}: \LWR at strresult}%
 \fullexpandarg%
 %    \end{macrocode}
 % Not yet found a valid column type
@@ -16229,9 +16458,9 @@
     \LWR at traceinfo{invalid column type: \LWR at strresult}%
     \LWR at parsenormalcolumn{l}%
 }%
-\addtocounter{LWR at tablecolspos}{1}%
+\addtocounter{LWR at tablecolspecindex}{1}%
+}% whiledo
 }%
-}%
 %    \end{macrocode}
 % \end{macro}
 
@@ -16333,6 +16562,7 @@
     {\LWR at atbangspec}%
 %
     \LWR at htmltag{/td}\LWR at orignewline%
+    \global\booltrue{LWR at tabularcelladded}%
 }% not empty
 }%
 %    \end{macrocode}
@@ -16342,7 +16572,7 @@
 % \begin{macro}{\LWR at addleftmostbartag}
 %    \begin{macrocode}
 \newcommand*{\LWR at addleftmostbartag}{%
-\ifnumcomp{\value{LWR at tablecolspos}}{=}{1}{%
+\ifnumcomp{\value{LWR at tablecolindex}}{=}{1}{%
     \LWR at printbartag{leftedge}%
 }{}%
 }
@@ -16353,7 +16583,7 @@
 % \begin{macro}{\LWR at tabularleftedge}
 %    \begin{macrocode}
 \newcommand*{\LWR at tabularleftedge}{%
-\ifthenelse{\cnttest{\value{LWR at tablecolspos}}=1}%
+\ifthenelse{\cnttest{\value{LWR at tablecolindex}}=1}%
 {%
     \LWR at printatbang{at}{leftedge}%
     \LWR at printatbang{bang}{leftedge}%
@@ -16395,7 +16625,7 @@
 %    \end{macrocode}
 % Fetch the current column's alignment character into |\LWR at strresult|:
 %    \begin{macrocode}
-        \StrChar{\LWR at tablecolspec}{\theLWR at tablecolspos}[\LWR at strresult]%
+        \StrChar{\LWR at tablecolspec}{\arabic{LWR at tablecolindex}}[\LWR at strresult]%
 %    \end{macrocode}
 % print the start of a new table data cell:
 %    \begin{macrocode}
@@ -16410,7 +16640,7 @@
 %    \begin{macrocode}
         \LWR at addcmidruletrim%
         \LWR at addleftmostbartag%
-        \LWR at printbartag{\theLWR at tablecolspos}%
+        \LWR at printbartag{\arabic{LWR at tablecolindex}}%
         "%
 %    \end{macrocode}
 % \changes{v0.42}{2017/10/26}{If \protect\texttt{FormatWP} add cell alignment.}
@@ -16442,7 +16672,9 @@
 %    \begin{macrocode}
         \ifboolexpr{bool{LWR at tabularmutemods} or bool{LWR at emptyatbang}}%
         {}%
-        {\LWR at getexparray{LWR at colbeforespec}{\theLWR at tablecolspos}}%
+        {%
+            \LWR at getexparray{LWR at colbeforespec}{\arabic{LWR at tablecolindex}}%
+        }%
         \global\boolfalse{LWR at intabularmetadata}%
     }% not exiting tabular
 }{}% in tabular metadata
@@ -16522,13 +16754,13 @@
 {%
 \setcounter{LWR at midrulecounter}{1}%
 \whiledo{%
-\cnttest{\value{LWR at midrulecounter}}{<=}{\value{LWR at tablecolswidth}}%
+\cnttest{\value{LWR at midrulecounter}}{<=}{\value{LWR at tablecolspecwidth}}%
 }%
 {%
-\LWR at setexparray{LWR at midrules}{\theLWR at midrulecounter}{0pt}%
+\LWR at setexparray{LWR at midrules}{\arabic{LWR at midrulecounter}}{0pt}%
 \setlength{\LWR at thiscmidrulewidth}{\LWR at cmidrulewidth}%
-\LWR at setexparray{LWR at trimlrules}{\theLWR at midrulecounter}{}%
-\LWR at setexparray{LWR at trimrrules}{\theLWR at midrulecounter}{}%
+\LWR at setexparray{LWR at trimlrules}{\arabic{LWR at midrulecounter}}{}%
+\LWR at setexparray{LWR at trimrrules}{\arabic{LWR at midrulecounter}}{}%
 \addtocounter{LWR at midrulecounter}{1}%
 }%
 }
@@ -16552,7 +16784,7 @@
 \setcounter{LWR at midrulecounter}{#3}%
 \whiledo{\cnttest{\value{LWR at midrulecounter}}{<=}{#4}}%
 {%
-\LWR at setexparray{LWR at midrules}{\theLWR at midrulecounter}{#1}%
+\LWR at setexparray{LWR at midrules}{\arabic{LWR at midrulecounter}}{#1}%
 \addtocounter{LWR at midrulecounter}{1}%
 }% whiledo
 \IfSubStr{#2}{l}{\LWR at setexparray{LWR at trimlrules}{#3}{l}}{}%
@@ -16629,7 +16861,7 @@
 %
 %    \begin{macrocode}
 \newcommand*{\LWR at subaddcmidruletrim}[2]{%
-\setlength{\LWR at templengthone}{\LWR at getexparray{LWR at midrules}{\theLWR at tablecolspos}}%
+\setlength{\LWR at templengthone}{\LWR at getexparray{LWR at midrules}{\arabic{LWR at tablecolindex}}}%
 \ifdimcomp{\LWR at templengthone}{>}{0pt}%
 {%
 %    \end{macrocode}
@@ -16657,8 +16889,8 @@
 %    \begin{macrocode}
 \newcommand*{\LWR at addcmidruletrim}{%
 \LWR at subaddcmidruletrim%
-{\LWR at getexparray{LWR at trimlrules}{\theLWR at tablecolspos}}%
-{\LWR at getexparray{LWR at trimrrules}{\theLWR at tablecolspos}}%
+{\LWR at getexparray{LWR at trimlrules}{\arabic{LWR at tablecolindex}}}%
+{\LWR at getexparray{LWR at trimrrules}{\arabic{LWR at tablecolindex}}}%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -16745,7 +16977,7 @@
 %    \begin{macrocode}
 \newcommand*{\LWR at addformatwpalignment}{%
 \ifbool{FormatWP}{%
-\StrChar{\LWR at tablecolspec}{\theLWR at tablecolspos}[\LWR at strresult]%
+\StrChar{\LWR at tablecolspec}{\arabic{LWR at tablecolindex}}[\LWR at strresult]%
 \ifdefstring{\LWR at strresult}{l}{\LWR at WPcell{left}{middle}}{}%
 \ifdefstring{\LWR at strresult}{c}{\LWR at WPcell{center}{middle}}{}%
 \ifdefstring{\LWR at strresult}{r}{\LWR at WPcell{right}{middle}}{}%
@@ -16774,8 +17006,12 @@
 \newcounter{LWR at tablemulticolspos}
 %    \end{macrocode}
 
+% Remembers multicolumn vertical rules if found in the column spec.
+%    \begin{macrocode}
+\newbool{LWR at mcolvertbarl}
+\newbool{LWR at mcolvertbarr}
+%    \end{macrocode}
 
-
 % \begin{macro}{\LWR at printmccoltype} \marg{colspec}
 % Print any valid column type found.  Does not print |@|, |!|, |>|, or |<| columns
 % or their associated tokens.
@@ -16787,7 +17023,7 @@
 %    \end{macrocode}
 % Get one token of the column spec:
 %    \begin{macrocode}
-\StrChar{#1}{\theLWR at tablemulticolspos}[\LWR at strresult]%
+\StrChar{#1}{\arabic{LWR at tablemulticolspos}}[\LWR at strresult]%
 %    \end{macrocode}
 % Add to the \HTML\ tag depending on which column type is found:
 %    \begin{macrocode}
@@ -16802,6 +17038,14 @@
 \IfStrEq{\LWR at strresult}{B}{B}{}%
 \IfStrEq{\LWR at strresult}{S}{r}{}%
 \IfStrEq{\LWR at strresult}{X}{p}{}%
+%    \end{macrocode}
+% \changes{v0.43}{2017/11/07}{Added vertical rules.}
+%    \begin{macrocode}
+\IfStrEq{\LWR at strresult}{|}{%
+    \ifthenelse{\value{LWR at tablemulticolspos}=1}%
+        {\booltrue{LWR at mcolvertbarl}}%
+        {\booltrue{LWR at mcolvertbarr}}%
+}{}%
 \LWR at traceinfo{lwr at printmccoltype done}%
 }
 %    \end{macrocode}
@@ -16823,7 +17067,7 @@
 %    \begin{macrocode}
 \newcommand*{\LWR at multicolother}[1]{%
 \addtocounter{LWR at tablemulticolspos}{1}%
-\StrChar{#1}{\theLWR at tablemulticolspos}[\LWR at strresult]%
+\StrChar{#1}{\arabic{LWR at tablemulticolspos}}[\LWR at strresult]%
 \LWR at strresult%
 %    \end{macrocode}
 % A valid column data type was found:
@@ -16863,7 +17107,7 @@
 %    \end{macrocode}
 % Get one token of the column spec:
 %    \begin{macrocode}
-\StrChar{#1}{\theLWR at tablemulticolspos}[\LWR at strresult]%
+\StrChar{#1}{\arabic{LWR at tablemulticolspos}}[\LWR at strresult]%
 %    \end{macrocode}
 % Print the text depending on which column type is found.
 % Also handles |@|, |>|, |<| as it comes to them.
@@ -16920,7 +17164,7 @@
 % Scan across the tokens in the column spec:
 %    \begin{macrocode}
 \whiledo{%
-\not\value{LWR at tablemulticolspos}>\value{LWR at tablemulticolswidth}%
+    \NOT\value{LWR at tablemulticolspos}>\value{LWR at tablemulticolswidth}%
 }%
 {%
 %    \end{macrocode}
@@ -16945,33 +17189,47 @@
 \newcommand{\LWR at multicoltext}{}
 %    \end{macrocode}
 
+% To find multicolumn right trim:
+%    \begin{macrocode}
+\newcounter{LWR at lastmulticolumn}
+%    \end{macrocode}
 
+
 % \begin{macro}{\LWR at domulticolumn}
-%   \oarg{1: vpos} \oarg{2: \#rows} \marg{3: numcols} \marg{4: colspec} \marg{5: text}
+%   \oarg{1: vpos} \oarg{2: \#rows}
+%   \marg{3: numLaTeXcols} \marg{4: numHTMLcols}
+%   \marg{5: colspec} \marg{6: text}
 %
 % \changes{v0.39}{2017/08/30}{Add: Optional \protect\texttt{vpos} and \# rows.}
 % \changes{v0.41}{2017/09/28}{Add: \cs{cmidrule} trims.}
 %
 %    \begin{macrocode}
-\NewDocumentCommand{\LWR at domulticolumn}{o o m m +m}{%
-\LWR at traceinfo{lwr at domulticolumn -#1- -#2- -#3- -#4-}%
+\NewDocumentCommand{\LWR at domulticolumn}{o o m m m +m}{%
+\LWR at traceinfo{LWR at domulticolumn -#1- -#2- -#4- -#5-}%
 %    \end{macrocode}
 % Remember the text to be inserted, and
 % remember that a valid column type was found:
 %    \begin{macrocode}
 \renewcommand{\LWR at multicoltext}{%
-#5%
+#6%
 \booltrue{LWR at validtablecol}%
 }%
 %    \end{macrocode}
+% Compute the rightmost column to be included.
+% This is used to create the right trim.
+% \changes{v0.43}{2017/11/07}{Fix: Multicolumn trim.}
+%    \begin{macrocode}
+\setcounter{LWR at lastmulticolumn}{\value{LWR at tablecolindex}}%
+\addtocounter{LWR at lastmulticolumn}{#3}%
+\addtocounter{LWR at lastmulticolumn}{-1}%
+%    \end{macrocode}
 % Row processing:
 %    \begin{macrocode}
 \LWR at maybenewtablerow%
-\LWR at tabularleftedge%
 %    \end{macrocode}
 % Begin the opening table data tag:
 %    \begin{macrocode}
-\LWR at htmltag{td colspan="#3" %
+\LWR at htmltag{td colspan="#4" %
 %    \end{macrocode}
 % 
 %    \begin{macrocode}
@@ -16990,19 +17248,27 @@
 %    \begin{macrocode}
  class="td%
 %    \end{macrocode}
-% Print the column type:
+% Print the column type and vertical bars:
 %    \begin{macrocode}
-\LWR at parsemulticolumnalignment{#4}{\LWR at printmccoltype}%
+\boolfalse{LWR at mcolvertbarl}%
+\boolfalse{LWR at mcolvertbarr}%
+\LWR at parsemulticolumnalignment{#5}{\LWR at printmccoltype}%
 %    \end{macrocode}
 % If this column has a cmidrule, add ``rule'' to the end of the \HTML\ class tag.
 %
-% If this position had a ``Y'' then add ``rule''.
+% If this position had a ``Y'' then add ``rule'' for a horizontal rule:
+% \changes{v0.43}{2017/11/07}{Fix: Multicolumn trim.}
+%    \begin{macrocode}
+\LWR at subaddcmidruletrim%
+{\LWR at getexparray{LWR at trimlrules}{\arabic{LWR at tablecolindex}}}%
+{\LWR at getexparray{LWR at trimrrules}{\arabic{LWR at lastmulticolumn}}}%
+%    \end{macrocode}
 % Also add vertical bar class.
 % \changes{v0.41}{2017/10/07}{Added vertical rules.}
+% \changes{v0.43}{2017/11/07}{Fix for vertical rules.}
 %    \begin{macrocode}
-\LWR at addcmidruletrim%
-\LWR at addleftmostbartag%
-\LWR at printbartag{\theLWR at tablecolspos}%
+\ifbool{LWR at mcolvertbarl}{ tvertbarl}{}%
+\ifbool{LWR at mcolvertbarr}{ tvertbarr}{}%
 %    \end{macrocode}
 % Close the class tag's opening quote:
 %    \begin{macrocode}
@@ -17016,7 +17282,7 @@
 \LWR at tdendstyles%
 }% end of the opening table data tag
 \global\boolfalse{LWR at intabularmetadata}%
-\LWR at parsemulticolumnalignment{#4}{\LWR at printmccoldata}%
+\LWR at parsemulticolumnalignment{#5}{\LWR at printmccoldata}%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -17031,16 +17297,16 @@
 %    \end{macrocode}
 % Figure out how many extra \HTML\ columns to add for |@| and |!| columns:
 %    \begin{macrocode}
-\LWR at tabularhtmlcolumns{\theLWR at tablecolspos}{#1}
+\LWR at tabularhtmlcolumns{\arabic{LWR at tablecolindex}}{#1}
 %    \end{macrocode}
 % Create the multicolumn tag:
 %    \begin{macrocode}
-\LWR at domulticolumn{\theLWR at tabhtmlcoltotal}{#2}{#3}%
+\LWR at domulticolumn{#1}{\arabic{LWR at tabhtmlcoltotal}}{#2}{#3}%
 %    \end{macrocode}
 % Move to the next \LaTeX\ column:
 %    \begin{macrocode}
-\addtocounter{LWR at tablecolspos}{#1}%
-\addtocounter{LWR at tablecolspos}{-1}%
+\addtocounter{LWR at tablecolindex}{#1}%
+\addtocounter{LWR at tablecolindex}{-1}%
 %    \end{macrocode}
 % Skip any trailing |@| or |!| columns for this cell:
 %    \begin{macrocode}
@@ -17093,11 +17359,12 @@
 % Figure out how many extra \HTML\ columns to add for |@| and |!| columns
 % found between the first and the last column:
 %    \begin{macrocode}
-\LWR at tabularhtmlcolumns{1}{\theLWR at tabletotalcols}
+\LWR at tabularhtmlcolumns{1}{\arabic{LWR at tabletotalcols}}
 %    \end{macrocode}
 % Create the multicolumn tag:
 %    \begin{macrocode}
-\LWR at domulticolumn{\theLWR at tabhtmlcoltotal}{P}{% \LWR at domulticolumn
+\LWR at domulticolumn{\arabic{LWR at tabletotalcols}}{\arabic{LWR at tabhtmlcoltotal}}{P}%
+{% \LWR at domulticolumn
 \IfBooleanTF{#1}% star?
 %    \end{macrocode}
 % Star version, show a caption but do not make a LOT entry:
@@ -17176,8 +17443,8 @@
 \booltrue{LWR at skipatbang}%
 }% end of \LWR at domulticolumn
 
-\addtocounter{LWR at tablecolspos}{\theLWR at tabletotalcols}
-\addtocounter{LWR at tablecolspos}{-1}
+\addtocounter{LWR at tablecolindex}{\arabic{LWR at tabletotalcols}}
+\addtocounter{LWR at tablecolindex}{-1}
 
 }
 %    \end{macrocode}
@@ -17204,6 +17471,33 @@
 \newcounter{LWR at tabhtmlcoltotal}
 %    \end{macrocode}
 
+
+% \begin{macro}{\LWR at subtabularhtmlcolumns} \marg{index}
+%
+% Factored from \cs{LWr at tabularhtmlcolumns}, which follows.
+%    \begin{macrocode}
+\newcommand*{\LWR at subtabularhtmlcolumns}[1]{%
+%    \end{macrocode}
+% Temporarily define a macro equal to the |@| specification for this column:
+%    \begin{macrocode}
+    \edef\LWR at atbangspec{\LWR at getexparray{LWR at colatspec}{#1}}%
+%    \end{macrocode}
+% If the |@| specification is not empty, add to the count:
+%    \begin{macrocode}
+    \ifdefempty{\LWR at atbangspec}%
+        {}%
+        {\addtocounter{LWR at tabhtmlcoltotal}{1}}%
+%    \end{macrocode}
+% Likewise for the |!| columns:
+%    \begin{macrocode}
+    \edef\LWR at atbangspec{\LWR at getexparray{LWR at colbangspec}{#1}}%
+    \ifdefempty{\LWR at atbangspec}%
+        {}%
+        {\addtocounter{LWR at tabhtmlcoltotal}{1}}%
+}
+%    \end{macrocode}
+% \end{macro}
+
 % \begin{macro}{\LWR at tabularhtmlcolumns}
 %   \marg{starting \LaTeX\ column} \marg{number \LaTeX\ columns}
 %
@@ -17223,31 +17517,16 @@
 \setcounter{LWR at tabhtmlcolend}{#1}%
 \addtocounter{LWR at tabhtmlcolend}{#2}%
 %    \end{macrocode}
+% If at the left edge, add the at/bang columns for the left edge:
+%    \begin{macrocode}
+\ifthenelse{\value{LWR at tabhtmlcolindex}=1}{%
+    \LWR at subtabularhtmlcolumns{leftedge}%
+}{}%
+%    \end{macrocode}
 % Walk across the \LaTeX\ columns looking for |@| and |!| columns:
 %    \begin{macrocode}
 \whiledo{\value{LWR at tabhtmlcolindex}<\value{LWR at tabhtmlcolend}}{%
-%    \end{macrocode}
-% Temporarily define a macro equal to the |@| specification for this column:
-%    \begin{macrocode}
-    \edef\LWR at atbangspec{\LWR at getexparray{LWR at colatspec}%
-        {\theLWR at tabhtmlcolindex}}%
-%    \end{macrocode}
-% If the |@| specification is not empty, add to the count:
-%    \begin{macrocode}
-    \ifdefempty{\LWR at atbangspec}%
-        {}%
-        {\addtocounter{LWR at tabhtmlcoltotal}{1}}%
-%    \end{macrocode}
-% Likewise for the |!| columns:
-%    \begin{macrocode}
-    \edef\LWR at atbangspec{\LWR at getexparray{LWR at colbangspec}%
-        {\theLWR at tabhtmlcolindex}}%
-    \ifdefempty{\LWR at atbangspec}%
-        {}%
-        {\addtocounter{LWR at tabhtmlcoltotal}{1}}%
-%    \end{macrocode}
-% Move to the next \LaTeX\ column:
-%    \begin{macrocode}
+    \LWR at subtabularhtmlcolumns{\arabic{LWR at tabhtmlcolindex}}%
     \addtocounter{LWR at tabhtmlcolindex}{1}%
 }% whiledo
 }
@@ -17384,9 +17663,9 @@
 % See \cref{sec:limitstabular}.
 %
 % \changes{v0.39}{2017/08/29}{Added.}
-%
+% \changes{v0.43}{2017/11/07}{\cs{newcommand} instead of \cs{relax} to fix \pkg{supertabular} and \pkg{xtab}.}
 %    \begin{macrocode}
-\let\TabularMacro\relax
+\newcommand*{\TabularMacro}{}
 %    \end{macrocode}
 % \end{macro}
 
@@ -17488,7 +17767,7 @@
 % If exiting the tabular:
 %    \begin{macrocode}
 \ifdefequal{\LWR at mynexttoken}{\end}%
-    {\booltrue{LWR at exitingtabular}}{}%
+    {\global\booltrue{LWR at exitingtabular}}{}%
 %    \end{macrocode}
 % \env{longtable} can have a caption in a cell
 %    \begin{macrocode}
@@ -17650,7 +17929,7 @@
 {
 \newcommand*{\LWR at hline}[1][]{%
     \ifbool{FormatWP}%
-    {\LWR at docmidrule{1-\theLWR at tabletotalcols}}%
+    {\LWR at docmidrule{1-\arabic{LWR at tabletotalcols}}}%
     {\booltrue{LWR at doinghline}}%
     \LWR at getmynexttoken}%
 }
@@ -17657,7 +17936,7 @@
 {
 \newcommand*{\LWR at hline}{%
     \ifbool{FormatWP}%
-    {\LWR at docmidrule{1-\theLWR at tabletotalcols}}%
+    {\LWR at docmidrule{1-\arabic{LWR at tabletotalcols}}}%
     {\booltrue{LWR at doinghline}}%
     \LWR at getmynexttoken}%
 }
@@ -17731,8 +18010,8 @@
 % Have not yet found the end of tabular command.
 % Unmute the |@| and |!| columns.
 %    \begin{macrocode}
-\boolfalse{LWR at exitingtabular}%
-\boolfalse{LWR at tabularmutemods}%
+\global\boolfalse{LWR at exitingtabular}%
+\global\boolfalse{LWR at tabularmutemods}%
 %    \end{macrocode}
 % Create the |table| tag:
 %    \begin{macrocode}
@@ -17750,10 +18029,14 @@
 %    \begin{macrocode}
 \LWR at stoppars%
 %    \end{macrocode}
-% Track column \# for setting text-align:
+% Track column \#:
 %    \begin{macrocode}
-\setcounter{LWR at tablecolspos}{1}%
+\setcounter{LWR at tablecolindex}{1}%
 %    \end{macrocode}
+% Have not yet added data in this column:
+%    \begin{macrocode}
+\boolfalse{LWR at tabularcelladded}%
+%    \end{macrocode}
 % Start looking for midrules:
 %    \begin{macrocode}
 \LWR at clearmidrules%
@@ -17780,10 +18063,10 @@
 \DeclareDocumentCommand{\toprule}{o d()}
     {%
         \IfValueTF{##1}%
-            {\LWR at docmidrule[##1](){1-\theLWR at tabletotalcols}}%
+            {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}}%
             {%
                 \ifbool{FormatWP}%
-                {\LWR at docmidrule[##1](){1-\theLWR at tabletotalcols}}%
+                {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}}%
                 {\booltrue{LWR at doingtbrule}}%
             }%
     \LWR at getmynexttoken}%
@@ -17791,10 +18074,10 @@
 \DeclareDocumentCommand{\midrule}{o d()}%
     {%
         \IfValueTF{##1}%
-            {\LWR at docmidrule[##1](){1-\theLWR at tabletotalcols}}%
+            {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}}%
             {%
                 \ifbool{FormatWP}%
-                {\LWR at docmidrule[##1](){1-\theLWR at tabletotalcols}}%
+                {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}}%
                 {\booltrue{LWR at doinghline}}%
             }%
     \LWR at getmynexttoken}%
@@ -17805,10 +18088,10 @@
 \DeclareDocumentCommand{\bottomrule}{o d()}
     {%
         \IfValueTF{##1}%
-            {\LWR at docmidrule[##1](){1-\theLWR at tabletotalcols}}%
+            {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}}%
             {%
                 \ifbool{FormatWP}%
-                {\LWR at docmidrule[##1](){1-\theLWR at tabletotalcols}}%
+                {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}}%
                 {\booltrue{LWR at doingtbrule}}%
             }%
     \LWR at getmynexttoken}%
@@ -17816,7 +18099,7 @@
 \DeclareDocumentCommand{\addlinespace}{o}{}%
 \DeclareDocumentCommand{\morecmidrules}{}{}%
 \DeclareDocumentCommand{\specialrule}{m m m d()}%
-    {\LWR at docmidrule[##1](){1-\theLWR at tabletotalcols}\LWR at getmynexttoken}%
+    {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}\LWR at 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,
@@ -17830,7 +18113,6 @@
 }%
 \renewcommand*{\mcolrowcell}{%
     \LWR at maybenewtablerow%
-    \LWR at tabularleftedge%
     \global\booltrue{LWR at skippingmcolrowcell}%
 }%
 \LetLtxMacro{\caption}{\LWR at longtabledatacaptiontag}%
@@ -17858,7 +18140,14 @@
 %    \begin{macrocode}
 {%
 \LWR at traceinfo{LWR at tabular ending}%
-\ifthenelse{\value{LWR at tablecolspos}<\value{LWR at tablecolswidth}}{%
+\ifthenelse{%
+    \(%
+        \boolean{LWR at intabularmetadata} \AND%
+        \NOT\boolean{LWR at tabularcelladded} \AND%
+        \cnttest{\value{LWR at tablecolindex}}{=}{\value{LWR at tabletotalcols}}%
+    \) \OR%
+    \cnttest{\value{LWR at tablecolindex}}{<}{\value{LWR at tabletotalcols}}%
+}{%
     \LWR at tabularfinishrow%
 }%
 {%
@@ -18056,7 +18345,7 @@
 % Define a new property which has either a filename or a file number:
 %    \begin{macrocode}
 \zref at newprop{zLWR at htmlfilenumber}{%
-\ifbool{FileSectionNames}{\LWR at thisfilename}{\theLWR at htmlfilenumber}%
+\ifbool{FileSectionNames}{\LWR at thisfilename}{\arabic{LWR at htmlfilenumber}}%
 }%
 %    \end{macrocode}
 % Additional properties for lateximages:
@@ -18188,7 +18477,7 @@
 %    \begin{macrocode}
 \LWR at traceinfo{LWR at newlabel: filesectionnames is \ifbool{FileSectionNames}{true}{false}}%
 \LWR at traceinfo{LWR at newlabel: LWR at thisfilename is !\LWR at thisfilename!}%
-\LWR at traceinfo{LWR at newlabel: LWR at htmlfilenumber is \theLWR at htmlfilenumber}%
+\LWR at traceinfo{LWR at newlabel: LWR at htmlfilenumber is \arabic{LWR at htmlfilenumber}}%
 \LWR at splabel{#1}%
 \LWR at subsublabel{#1}%
 % \@esphack%
@@ -18324,8 +18613,10 @@
 
 
 % \begin{macro}{\nameref} \marg{label}
+%
+% \changes{v0.43}{2017/10/31}{Made robust.}
 %    \begin{macrocode}
-\newcommand*{\nameref}[1]{%
+\DeclareRobustCommand*{\nameref}[1]{%
 \LWR at traceinfo{nameref A}%
 \LWR at startref{#1}%
 \LWR at traceinfo{nameref B}%
@@ -18396,6 +18687,8 @@
 % \begin{macro}{\href} \oarg{options} \marg{URL} \marg{text}
 %
 % Create a link with accompanying text:
+%
+% \changes{v0.43}{2017/10/31}{Made robust.}
 %    \begin{macrocode}
 \NewDocumentCommand{\LWR at hrefb}{O{} m +m}{%
 \LWR at subhyperref{#2}{#3}%
@@ -18403,7 +18696,7 @@
 \LWR at ensuredoingapar%
 }
 
-\newcommand{\href}{%
+\DeclareRobustCommand*{\href}{%
 \LWR at ensuredoingapar%
 \begingroup%
 \catcode`\_=12
@@ -18415,10 +18708,11 @@
 % \begin{macro}{\nolinkurl} \marg{URL}
 %
 % Print the name of the link without creating the link:
+% \changes{v0.43}{2017/10/31}{Made robust.}
 %    \begin{macrocode}
 \newcommand*{\LWR at nolinkurlb}[1]{#1\endgroup\LWR at ensuredoingapar}
 
-\newcommand{\nolinkurl}{%
+\DeclareRobustCommand*{\nolinkurl}{%
 \LWR at ensuredoingapar%
 \begingroup\catcode`\_=12
 \LWR at nolinkurlb%
@@ -18432,6 +18726,8 @@
 % Create a link whose text name is the address of the link.
 % The \pkg{url} package may redefine \cs{url}, so it is \cs{let} to \cs{LWR at urla}here
 % and also redefined by \pkg{lwarp-url}.
+%
+% \changes{v0.43}{2017/10/31}{Made robust.}
 %    \begin{macrocode}
 \newcommand*{\LWR at urlb}[1]{%
 \href{#1}{#1}%
@@ -18439,7 +18735,7 @@
 \LWR at ensuredoingapar%
 }
 
-\newcommand{\LWR at urla}{%
+\DeclareRobustCommand*{\LWR at urla}{%
 \LWR at ensuredoingapar%
 \begingroup\catcode`\_=12
 \LWR at urlb%
@@ -19485,12 +19781,15 @@
 % \changes{v0.40}{2017/09/09}{Improved symbols inside a \env{lateximage}.}
 % \changes{v0.40}{2017/09/09}{Improved \protect\LaTeX\ logos inside a \env{lateximage}.}
 % \changes{v0.40}{2017/09/09}{Nullified \cs{InlineClass}, etc. inside a \env{lateximage}.}
-% \changes{v0.42}{2017/10/16}{Improved \cs{ensuremath}.}
 %
 %    \begin{macrocode}
 \newcommand*{\LWR at restoreorigformatting}{%
 \LWR at traceinfo{LWR at restoreorigformatting}%
 \linespread{1}%
+%    \end{macrocode}
+% \changes{v0.43}{2017/10/31}{Fix: \cs{ref} in math or lateximage.}
+%    \begin{macrocode}
+\LetLtxMacro\ref\LWR at origref%{} syntax highlighting
 \RenewDocumentCommand{\InlineClass}{o m +m}{##3}%
 \RenewDocumentEnvironment{BlockClass}{o m}{}{}%
 \renewcommand{\BlockClassSingle}[2]{##2}%
@@ -19562,7 +19861,15 @@
 \let\LaTeX\LWR at origLaTeX%
 \let\LaTeXe\LWR at origLaTeXe%
 \renewcommand*{\Xe}{X\textsubscript{E}}%
+%    \end{macrocode}
+% \changes{v0.42}{2017/10/16}{Improved \cs{ensuremath}.}
+%    \begin{macrocode}
 \LetLtxMacro\@ensuredmath\LWR at origensuredmath%
+%    \end{macrocode}
+% \changes{v0.43}{2017/10/31}{Fix: Improved math inside lateximages.}
+%    \begin{macrocode}
+\csletcs{equation*}{LWR at origequationstar}%
+\csletcs{endequation*}{LWR at origendequationstar}%
 %
 \LWR at restoreorigaccents%
 %
@@ -19652,7 +19959,7 @@
 %
 % Redefine the double dollar sign to place math inside a \env{lateximage}, or use MathJax:
 %    \begin{macrocode}
-\gdef\LWR at doubledollar$#1$${
+\protected\gdef\LWR at doubledollar$#1$${
 %    \end{macrocode}
 % If MathJax or formatting for a word processor, print the \LaTeX\ expression:
 % \changes{v0.42}{2017/10/26}{If \protect\texttt{FormatWP} print LaTeX expression.}
@@ -19693,7 +20000,7 @@
 %
 % \changes{v0.42}{2017/10/26}{If \protect\texttt{FormatWP} print LaTeX expression.}
 %    \begin{macrocode}
-\gdef\LWR at subsingledollar#1{%
+\protected\gdef\LWR at subsingledollar#1{%
 \ifboolexpr{bool{mathjax} or ( bool{FormatWP} and bool{WPMarkMath} ) }%
 %    \end{macrocode}
 % For MathJax, print the math between |\(| and |\)|:
@@ -19712,7 +20019,7 @@
 }%
 }
 
-\gdef\LWR at singledollar#1${%
+\protected\gdef\LWR at singledollar#1${%
 \LWR at subsingledollar{#1}%
 }
 %    \end{macrocode}
@@ -19723,8 +20030,9 @@
 % \begin{macro}{\)}
 % Redefine to the above dollar macros.
 %    \begin{macrocode}
-\gdef\(#1\){$#1$}
-\gdef\[#1\]{$$#1$$}
+\protected\gdef\(#1\){%
+$#1$}
+\protected\gdef\[#1\]{$$#1$$}
 
 \endgroup
 
@@ -20002,7 +20310,19 @@
 % \end{environment}
 
 
+% \begin{environment}{equation*}
+%    \begin{macrocode}
+\csletcs{LWR at origequationstar}{equation*}
+\csletcs{LWR at origendequationstar}{endequation*}
+\renewenvironment*{equation*}
+{\displaymath}
+{\enddisplaymath}
+%    \end{macrocode}
+% \end{environment}
 
+
+
+
 % \subsection{AMS Math environments}
 % \changes{v0.19}{2016/05/25}{MathJax support added.}
 %
@@ -20853,7 +21173,7 @@
 %    \end{macrocode}
 % Figure out what the next page number will be:
 %    \begin{macrocode}
-    \setcounterpageref{LWR at LIpage}{LWRlateximage\theLWR at lateximagenumber}%
+    \setcounterpageref{LWR at LIpage}{LWRlateximage\arabic{LWR at lateximagenumber}}%
     \LWR at traceinfo{lateximage: LWR at LIpage is \arabic{LWR at LIpage}}%
 %    \end{macrocode}
 % Create an \HTML\ span which will hold the comment which contains the |pdftotext| translation
@@ -21496,14 +21816,17 @@
 % These will be further encased and patched by other packages later.
 %
 %    \begin{macrocode}
-\let\LWR at origlabel\label
-\let\label\LWR at newlabel
-\let\LWR at origref\ref
-\let\ref\LWR at newref%	\end{ syntax highlighting
-\let\LWR at origpageref\pageref
-\let\pageref\LWR at newpageref
+\LetLtxMacro\LWR at origlabel\label
+% \LetLtxMacro\label\LWR at newlabel
+\RenewDocumentCommand{\label}{}{\LWR at newlabel}
 
+\LetLtxMacro\LWR at origref\ref
+% \LetLtxMacro\ref\LWR at newref
+\RenewDocumentCommand{\ref}{}{\LWR at newref}%
 
+\LetLtxMacro\LWR at origpageref\pageref
+% \LetLtxMacro\pageref\LWR at newpageref
+\RenewDocumentCommand{\pageref}{}{\LWR at newpageref}
 
 \end{warpHTML}
 %    \end{macrocode}
@@ -22335,6 +22658,7 @@
 % \changes{v0.34}{2017/08/05}{Improved font control.}
 % \changes{v0.36}{2017/08/15}{Fix: Filenames while using MathJax.}
 % \changes{v0.40}{2017/09/21}{Fix: Long arguments for expandable command.}
+% \changes{v0.43}{2017/10/31}{Fix: Nullify dollar inside filesnames.}
 %    \begin{macrocode}
 \newcommand*{\LWR at nullfonts}{%
 \LetLtxMacro{\emph}{\LWR at nullemph}%
@@ -22371,6 +22695,7 @@
 \RenewDocumentCommand{\LWR at htmlspanclass}{o m +m}{##3}%
 \DeclareExpandableDocumentCommand{\InlineClass}{+o +m +m}{##3}%
 \DeclareRobustCommand{\LWR at HTMLtextstyle}[3]{##3}%
+\DeclareRobustCommand{\LWR at subsingledollar}[1]{}%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -24374,9 +24699,52 @@
 %
 %
 %
+% \iffalse
+%<*breakurl>
+% \fi
 %
+% \part{lwarp-breakurl.sty}
 %
+% \section{breakurl}
+%
+% \DescribePackage{breakurl}
+% \pkg{breakurl} is emulated.
+%
+% \changes{v0.43}{2017/10/31}{\pkg{breakurl}: Added.}
+%
+% \codehtml
+%
+%    \begin{macrocode}
+\LWR at ProvidesPackageDrop{breakurl}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\LetLtxMacro\burl\url
+
+\NewDocumentCommand{\LWR at burlaltb}{O{} +m m}{%
+\LWR at subhyperref{#3}{#2}% order reversed from \href
+\endgroup%
+\LWR at ensuredoingapar%
+}
+
+\DeclareRobustCommand*{\burlalt}{%
+\LWR at ensuredoingapar%
+\begingroup%
+\catcode`\_=12
+\LWR at burlaltb%
+}
+\LetLtxMacro\urlalt\burlalt
+%    \end{macrocode}
+%
 % \iffalse
+%</breakurl>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
 %<*caption2>
 % \fi
 %
@@ -27879,6 +28247,8 @@
 % \begin{noindmacro}{\hyperimage} \marg{url} \marg{alt text}
 %
 % Insert an image with alt text:
+%
+% \changes{v0.43}{2017/10/31}{\pkg{hyperref}: Made robust.}
 %    \begin{macrocode}
 \NewDocumentCommand{\LWR at hyperimageb}{m +m}{%
 \LWR at htmltag{img src="#1" alt="#2" class="hyperimage"{}}%
@@ -27886,7 +28256,7 @@
 \LWR at ensuredoingapar%
 }
 
-\newcommand{\hyperimage}{%
+\DeclareRobustCommand*{\hyperimage}{%
 \LWR at ensuredoingapar%
 \begingroup\catcode`\_=12
 \LWR at hyperimageb%
@@ -27941,8 +28311,9 @@
 % \marg{1: URL} \marg{2: category} \marg{3: name} \marg{4: text} \quad ---\,or\,--- \\
 % \oarg{1: label} \marg{2: text}
 %
+% \changes{v0.43}{2017/10/31}{\pkg{hyperref}: Made robust.}
 %    \begin{macrocode}
-\newcommand{\hyperref}{%
+\DeclareRobustCommand*{\hyperref}{%
 \LWR at ensuredoingapar%
 \begingroup\catcode`\_=12
 \@ifnextchar[\LWR at hyperrefc\LWR at hyperrefb%
@@ -28071,9 +28442,10 @@
 
 
 % \begin{noindmacro}{\TextField} \oarg{parameters} \marg{label}
+% \changes{v0.43}{2017/10/31}{\pkg{hyperref}: Made robust.}
 %
 %    \begin{macrocode}
-\newcommand*{\TextField}[2][]{}
+\DeclareRobustCommand{\TextField}[2][]{}
 %    \end{macrocode}
 % \end{noindmacro}
 
@@ -28081,7 +28453,7 @@
 % \begin{noindmacro}{\CheckBox} \oarg{parameters} \marg{label}
 %
 %    \begin{macrocode}
-\newcommand*{\CheckBox}[2][]{}
+\DeclareRobustCommand{\CheckBox}[2][]{}
 %    \end{macrocode}
 % \end{noindmacro}
 
@@ -28089,7 +28461,7 @@
 % \begin{noindmacro}{\ChoiceMenu} \oarg{parameters} \marg{label} \marg{choices}
 %
 %    \begin{macrocode}
-\newcommand{\ChoiceMenu}[3][]{}
+\DeclareRobustCommand{\ChoiceMenu}[3][]{}
 %    \end{macrocode}
 % \end{noindmacro}
 
@@ -28097,7 +28469,7 @@
 % \begin{noindmacro}{\PushButton} \oarg{parameters} \marg{label}
 %
 %    \begin{macrocode}
-\newcommand*{\PushButton}[2][]{}
+\DeclareRobustCommand{\PushButton}[2][]{}
 %    \end{macrocode}
 % \end{noindmacro}
 
@@ -28105,7 +28477,7 @@
 % \begin{noindmacro}{\Submit} \oarg{parameters} \marg{label}
 %
 %    \begin{macrocode}
-\newcommand*{\Submit}[2][]{}
+\DeclareRobustCommand{\Submit}[2][]{}
 %    \end{macrocode}
 % \end{noindmacro}
 
@@ -28113,11 +28485,20 @@
 % \begin{noindmacro}{\Reset} \oarg{parameters} \marg{label}
 %
 %    \begin{macrocode}
-\newcommand*{\Reset}[2][]{}
+\DeclareRobustCommand{\Reset}[2][]{}
 %    \end{macrocode}
 % \end{noindmacro}
 
 
+% \begin{noindmacro}{\Gauge} \oarg{parameters} \marg{label}
+%
+% \changes{v0.43}{2017/10/31}{\pkg{hyperref}: \cs{Gauge} added.}
+%    \begin{macrocode}
+\DeclareRobustCommand{\Gauge}[2][]{}
+%    \end{macrocode}
+% \end{noindmacro}
+
+
 % \begin{noindmacro}{\LayoutTextField} \marg{label} \marg{field}
 %
 %    \begin{macrocode}
@@ -29086,8 +29467,45 @@
 %
 %
 %
+% \iffalse
+%<*luatodonotes>
+% \fi
 %
+% \part{lwarp-luatodonotes.sty}
+%
+% \section{luatodonotes}
+%
+% \DescribePackage{luatodonotes}
+% \pkg{luatodonotes} is emulated.
+%
+% \limitstodonotes
+%
+% \changes{v0.43}{2017/10/07}{\pkg{luatodonotes}: Added.}
+%
+% \codehtml
+%
+%    \begin{macrocode}
+\LWR at ProvidesPackageDrop{luatodonotes}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\newcommand{\listoftodos}[1][]{}
+\newcommand{\todo}[2][]{}
+\newcommand{\missingfigure}[2][]{}
+\newcommand{\todototoc}{}
+\newcommand{\todoarea}[3][]{}%
+%    \end{macrocode}
+%
 % \iffalse
+%</luatodonotes>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
 %<*marginfit>
 % \fi
 %
@@ -30226,7 +30644,7 @@
 %    \end{macrocode}
 % Append this column's spec:
 %    \begin{macrocode}
-\StrChar{\LWR at tablecolspec}{\theLWR at tablecolspos}%
+\StrChar{\LWR at tablecolspec}{\arabic{LWR at tablecolindex}}%
 %    \end{macrocode}
 % If this column has a cmidrule, add ``rule'' to the end of the \HTML\ class tag.
 % Also add the vertical bar class.
@@ -30234,7 +30652,7 @@
 %    \begin{macrocode}
 \LWR at addcmidruletrim%
 \LWR at addleftmostbartag%
-\LWR at printbartag{\theLWR at tablecolspos}%
+\LWR at printbartag{\arabic{LWR at tablecolindex}}%
 "%
 %    \end{macrocode}
 % \changes{v0.42}{2017/10/26}{\pkg{multirow}: If \protect\texttt{FormatWP} add cell alignment.}
@@ -30248,7 +30666,7 @@
 % \changes{v0.41}{2017/10/05}{Fix: \protect\textless\ spec.}
 % The column's |<| spec:
 %    \begin{macrocode}
-\LWR at getexparray{LWR at colbeforespec}{\theLWR at tablecolspos}%
+\LWR at getexparray{LWR at colbeforespec}{\arabic{LWR at tablecolindex}}%
 %    \end{macrocode}
 % While printing the text, redefine |\\| to generate a new line
 %    \begin{macrocode}
@@ -30282,18 +30700,19 @@
 %    \end{macrocode}
 % Figure out how many extra \HTML\ columns to add for |@| and |!| columns:
 %    \begin{macrocode}
-\LWR at tabularhtmlcolumns{\theLWR at tablecolspos}{#1}
+\LWR at tabularhtmlcolumns{\arabic{LWR at tablecolindex}}{#1}
 %    \end{macrocode}
 % Create the multicolumn/multirow tag:
 %    \begin{macrocode}
-\begingroup\LetLtxMacro{\\}{\LWR at endofline}%
-\LWR at domulticolumn[#3][#4]{\theLWR at tabhtmlcoltotal}{#2}{#8}%
+\begingroup%
+\LetLtxMacro{\\}{\LWR at endofline}%
+\LWR at domulticolumn[#3][#4]{#1}{\arabic{LWR at tabhtmlcoltotal}}{#2}{#8}%
 \endgroup%
 %    \end{macrocode}
 % Move to the next \LaTeX\ column:
 %    \begin{macrocode}
-\addtocounter{LWR at tablecolspos}{#1}%
-\addtocounter{LWR at tablecolspos}{-1}%
+\addtocounter{LWR at tablecolindex}{#1}%
+\addtocounter{LWR at tablecolindex}{-1}%
 %    \end{macrocode}
 % Skip any trailing |@| or |!| columns for this cell:
 %    \begin{macrocode}
@@ -35217,10 +35636,44 @@
 %
 %
 %
+% \iffalse
+%<*todonotes>
+% \fi
 %
+% \part{lwarp-todonotes.sty}
 %
+% \section{todonotes}
 %
+% \DescribePackage{todonotes}
+% \pkg{todonotes} is emulated.
+%
+% \limitstodonotes
+%
+% \changes{v0.43}{2017/10/07}{\pkg{todonotes}: Added.}
+%
+% \codehtml
+%
+%    \begin{macrocode}
+\LWR at ProvidesPackageDrop{todonotes}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\newcommand{\listoftodos}[1][]{}
+\newcommand{\todo}[2][]{}
+\newcommand{\missingfigure}[2][]{}
+\newcommand{\todototoc}{}
+%    \end{macrocode}
+%
 % \iffalse
+%</todonotes>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
 %<*transparent>
 % \fi
 %

Modified: trunk/Master/texmf-dist/source/latex/lwarp/lwarp.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/lwarp/lwarp.ins	2017-11-09 01:22:12 UTC (rev 45721)
+++ trunk/Master/texmf-dist/source/latex/lwarp/lwarp.ins	2017-11-09 01:32:04 UTC (rev 45722)
@@ -55,6 +55,7 @@
 \file{lwarp-booktabs.sty}{\from{lwarp.dtx}{booktabs}}
 \file{lwarp-boxedminipage.sty}{\from{lwarp.dtx}{boxedminipage}}
 \file{lwarp-boxedminipage2e.sty}{\from{lwarp.dtx}{boxedminipage2e}}
+\file{lwarp-breakurl.sty}{\from{lwarp.dtx}{breakurl}}
 \file{lwarp-ccaption.sty}{\from{lwarp.dtx}{ccaption}}
 \file{lwarp-changepage.sty}{\from{lwarp.dtx}{changepage}}
 \file{lwarp-chngpage.sty}{\from{lwarp.dtx}{chngpage}}
@@ -117,6 +118,7 @@
 \file{lwarp-longtable.sty}{\from{lwarp.dtx}{longtable}}
 \file{lwarp-lscape.sty}{\from{lwarp.dtx}{lscape}}
 \file{lwarp-ltcaption.sty}{\from{lwarp.dtx}{ltcaption}}
+\file{lwarp-luatodonotes.sty}{\from{lwarp.dtx}{luatodonotes}}
 \file{lwarp-marginfit.sty}{\from{lwarp.dtx}{marginfit}}
 \file{lwarp-marginfix.sty}{\from{lwarp.dtx}{marginfix}}
 \file{lwarp-marginnote.sty}{\from{lwarp.dtx}{marginnote}}
@@ -187,6 +189,7 @@
 \file{lwarp-titling.sty}{\from{lwarp.dtx}{titling}}
 \file{lwarp-tocbibind.sty}{\from{lwarp.dtx}{tocbibind}}
 \file{lwarp-tocloft.sty}{\from{lwarp.dtx}{tocloft}}
+\file{lwarp-todonotes.sty}{\from{lwarp.dtx}{todonotes}}
 \file{lwarp-transparent.sty}{\from{lwarp.dtx}{transparent}}
 \file{lwarp-trivfloat.sty}{\from{lwarp.dtx}{trivfloat}}
 \file{lwarp-typearea.sty}{\from{lwarp.dtx}{typearea}}

Added: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-breakurl.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-breakurl.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-breakurl.sty	2017-11-09 01:32:04 UTC (rev 45722)
@@ -0,0 +1,36 @@
+%%
+%% This is file `lwarp-breakurl.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% lwarp.dtx  (with options: `breakurl')
+%% This is a generated file.
+%% 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.
+\LWR at ProvidesPackageDrop{breakurl}
+\LetLtxMacro\burl\url
+
+\NewDocumentCommand{\LWR at burlaltb}{O{} +m m}{%
+\LWR at subhyperref{#3}{#2}% order reversed from \href
+\endgroup%
+\LWR at ensuredoingapar%
+}
+
+\DeclareRobustCommand*{\burlalt}{%
+\LWR at ensuredoingapar%
+\begingroup%
+\catcode`\_=12
+\LWR at burlaltb%
+}
+\LetLtxMacro\urlalt\burlalt
+\endinput
+%%
+%% End of file `lwarp-breakurl.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-breakurl.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-hyperref.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-hyperref.sty	2017-11-09 01:22:12 UTC (rev 45721)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-hyperref.sty	2017-11-09 01:32:04 UTC (rev 45722)
@@ -33,7 +33,7 @@
 \LWR at ensuredoingapar%
 }
 
-\newcommand{\hyperimage}{%
+\DeclareRobustCommand*{\hyperimage}{%
 \LWR at ensuredoingapar%
 \begingroup\catcode`\_=12
 \LWR at hyperimageb%
@@ -57,7 +57,7 @@
 \endgroup%
 }
 
-\newcommand{\hyperref}{%
+\DeclareRobustCommand*{\hyperref}{%
 \LWR at ensuredoingapar%
 \begingroup\catcode`\_=12
 \@ifnextchar[\LWR at hyperrefc\LWR at hyperrefb%
@@ -97,18 +97,20 @@
 
 \newcommand{\Acrobatmenu}[2]{}
 
-\newcommand*{\TextField}[2][]{}
+\DeclareRobustCommand{\TextField}[2][]{}
 
-\newcommand*{\CheckBox}[2][]{}
+\DeclareRobustCommand{\CheckBox}[2][]{}
 
-\newcommand{\ChoiceMenu}[3][]{}
+\DeclareRobustCommand{\ChoiceMenu}[3][]{}
 
-\newcommand*{\PushButton}[2][]{}
+\DeclareRobustCommand{\PushButton}[2][]{}
 
-\newcommand*{\Submit}[2][]{}
+\DeclareRobustCommand{\Submit}[2][]{}
 
-\newcommand*{\Reset}[2][]{}
+\DeclareRobustCommand{\Reset}[2][]{}
 
+\DeclareRobustCommand{\Gauge}[2][]{}
+
 \newcommand*{\LayoutTextField}[2]{}
 
 \newcommand*{\LayoutChoiceField}[2]{}

Added: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-luatodonotes.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-luatodonotes.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-luatodonotes.sty	2017-11-09 01:32:04 UTC (rev 45722)
@@ -0,0 +1,26 @@
+%%
+%% This is file `lwarp-luatodonotes.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% lwarp.dtx  (with options: `luatodonotes')
+%% This is a generated file.
+%% 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.
+\LWR at ProvidesPackageDrop{luatodonotes}
+\newcommand{\listoftodos}[1][]{}
+\newcommand{\todo}[2][]{}
+\newcommand{\missingfigure}[2][]{}
+\newcommand{\todototoc}{}
+\newcommand{\todoarea}[3][]{}%
+\endinput
+%%
+%% End of file `lwarp-luatodonotes.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-luatodonotes.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-multirow.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-multirow.sty	2017-11-09 01:22:12 UTC (rev 45721)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-multirow.sty	2017-11-09 01:32:04 UTC (rev 45722)
@@ -35,10 +35,10 @@
 padding-\LWR at multirowborder: 2px" %
 }%
 class="td%
-\StrChar{\LWR at tablecolspec}{\theLWR at tablecolspos}%
+\StrChar{\LWR at tablecolspec}{\arabic{LWR at tablecolindex}}%
 \LWR at addcmidruletrim%
 \LWR at addleftmostbartag%
-\LWR at printbartag{\theLWR at tablecolspos}%
+\LWR at printbartag{\arabic{LWR at tablecolindex}}%
 "%
 \LWR at tdstartstyles%
 \LWR at addcmidrulewidth%
@@ -45,7 +45,7 @@
 \LWR at addformatwpalignment%
 \LWR at tdendstyles%
 }%
-\LWR at getexparray{LWR at colbeforespec}{\theLWR at tablecolspos}%
+\LWR at getexparray{LWR at colbeforespec}{\arabic{LWR at tablecolindex}}%
 \begingroup\LetLtxMacro{\\}{\LWR at endofline}#6\endgroup%
 \LWR at stoppars%
 \global\boolfalse{LWR at intabularmetadata}%
@@ -53,12 +53,13 @@
 \LWR at traceinfo{*** multirow done}%
 }%
 \NewDocumentCommand{\multicolumnrow}{m m O{} m O{} m O{} +m}{%
-\LWR at tabularhtmlcolumns{\theLWR at tablecolspos}{#1}
-\begingroup\LetLtxMacro{\\}{\LWR at endofline}%
-\LWR at domulticolumn[#3][#4]{\theLWR at tabhtmlcoltotal}{#2}{#8}%
+\LWR at tabularhtmlcolumns{\arabic{LWR at tablecolindex}}{#1}
+\begingroup%
+\LetLtxMacro{\\}{\LWR at endofline}%
+\LWR at domulticolumn[#3][#4]{#1}{\arabic{LWR at tabhtmlcoltotal}}{#2}{#8}%
 \endgroup%
-\addtocounter{LWR at tablecolspos}{#1}%
-\addtocounter{LWR at tablecolspos}{-1}%
+\addtocounter{LWR at tablecolindex}{#1}%
+\addtocounter{LWR at tablecolindex}{-1}%
 \booltrue{LWR at skipatbang}%
 }
 \appto{\LWR at restoreorigformatting}{%

Added: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-todonotes.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-todonotes.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-todonotes.sty	2017-11-09 01:32:04 UTC (rev 45722)
@@ -0,0 +1,25 @@
+%%
+%% This is file `lwarp-todonotes.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% lwarp.dtx  (with options: `todonotes')
+%% This is a generated file.
+%% 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.
+\LWR at ProvidesPackageDrop{todonotes}
+\newcommand{\listoftodos}[1][]{}
+\newcommand{\todo}[2][]{}
+\newcommand{\missingfigure}[2][]{}
+\newcommand{\todototoc}{}
+\endinput
+%%
+%% End of file `lwarp-todonotes.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-todonotes.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp.sty	2017-11-09 01:22:12 UTC (rev 45721)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp.sty	2017-11-09 01:32:04 UTC (rev 45722)
@@ -17,7 +17,7 @@
 %% version 2005/12/01 or later.
 \NeedsTeXFormat{LaTeX2e}[1999/12/01]
 \ProvidesPackage{lwarp}
-    [2017/10/30 v0.42  Allows LaTeX to directly produce HTML5 output.]
+    [2017/11/08 v0.43  Allows LaTeX to directly produce HTML5 output.]
 
 
 
@@ -220,6 +220,7 @@
 \LWR at loadafter{booktabs}
 \LWR at loadafter{boxedminipage}
 \LWR at loadafter{boxedminipage2e}
+\LWR at loadafter{breakurl}
 \LWR at loadafter{ccaption}
 \LWR at loadafter{changepage}
 \LWR at loadafter{chngpage}
@@ -272,6 +273,7 @@
 \LWR at loadafter{longtable}
 \LWR at loadafter{lscape}
 \LWR at loadafter{ltcaption}
+\LWR at loadafter{luatodonotes}
 \LWR at loadafter{marginfit}
 \LWR at loadafter{marginfix}
 \LWR at loadafter{marginnote}
@@ -335,6 +337,7 @@
 \LWR at loadafter{titling}
 \LWR at loadafter{tocbibind}
 \LWR at loadafter{tocloft}
+\LWR at loadafter{todonotes}
 \LWR at loadafter{transparent}
 \LWR at loadafter{trivfloat}
 \LWR at loadafter{typearea}
@@ -2603,7 +2606,7 @@
 \begin{warpprint}
 \begin{filecontents*}{sample_project.css}
 /* ( --- Start of project.css --- ) */
-/* A sample project-specific CSS file for lwarp --- ) */
+/* ( --- A sample project-specific CSS file for lwarp --- ) */
 
 /* Load default lwarp settings: */
 @import url("lwarp.css") ;
@@ -2739,7 +2742,7 @@
 
 -- Print the usage of the lwarpmk command:
 
-printversion = "v0.42"
+printversion = "v0.43"
 
 function printhelp ()
 print ("lwarpmk: Use lwarpmk -h or lwarpmk --help for help.") ;
@@ -4076,6 +4079,13 @@
 
 \end{warpall}
 
+\begin{warpall}
+
+\newcounter{FootnoteDepth}
+\setcounter{FootnoteDepth}{5}
+
+\end{warpall}
+
 \begin{warpHTML}
 
 \newbox\LWR at footnotes
@@ -4147,8 +4157,12 @@
     \end{BlockClass}
 \fi
 }
-\newcommand*{\LWR at epubprintpendingfootnotes}{%
-\ifthenelse{\boolean{FormatEPUB}\OR\boolean{FormatWP}}%
+\newcommand*{\LWR at maybeprintpendingfootnotes}[1]{%
+\ifboolexpr{
+    not test{\ifnumcomp{#1}{>}{\value{FootnoteDepth}}} or
+    bool{FormatEPUB} or
+    bool{FormatWP}
+}%
 {\LWR at printpendingfootnotes}%
 {}%
 }
@@ -4280,7 +4294,7 @@
 
 \ifbool{FileSectionNames}%
 {\LWR at filenamenoblanks{#1}}
-{\renewcommand*{\LWR at thisfilename}{\theLWR at htmlfilenumber}}
+{\renewcommand*{\LWR at thisfilename}{\arabic{LWR at htmlfilenumber}}}
 
 \LWR at htmlblockcomment{%
 |Start file|%
@@ -4373,6 +4387,7 @@
 \def\@seccntformat#1{\csname the#1\endcsname\protect\quad}
 \newcommand*{\simplechapterdelim}{}
 \let\@chapcntformat\@seccntformat
+\newcounter{LWR at currentautosec}
 \DeclareDocumentCommand{\LWR at section}{m m m m}{%
 \LWR at traceinfo{LWR at section |#2| |#3|}%
 \LWR at traceinfo{LWR at section: not an empty section}%
@@ -4395,7 +4410,7 @@
         \cnttest{\csuse{LWR at depth#4}}{<=}{\value{LWR at prevFileDepth}}%
     \)%
     \AND%
-    \NOT\equal{#3}{}% phantomsection
+    \NOT\isempty{#3}% phantomsection
 }%
 {% new file
     \LWR at traceinfo{LWR at section: new HTML file}%
@@ -4414,7 +4429,10 @@
 }%
 
 \ifbool{HTMLDebugComments}{%
+    \begingroup%
+    \LWR at nullfonts%
     \LWR at htmlcomment{Opening #4 ``#3''{}}%
+    \endgroup%
 }{}%
 
 \ifthenelse{%
@@ -4423,6 +4441,7 @@
 {\LWR at startpars}%
 {}%
 \LWR at createautosec{\csuse{LWR at tag#4}}%
+\setcounter{LWR at currentautosec}{\value{page}}
 \IfBooleanTF{#1}%
 {%
 \ifbool{LWR at forcinghtmltoc}%
@@ -4479,7 +4498,7 @@
 }% end of not starred
 #3%
 \LWR at htmltag{\csuse{LWR at tag#4end}}%
-\label{autopage-\thepage}%
+\label{autopage-\theLWR at currentautosec}%
 \ifthenelse{%
     \cnttest{\csuse{LWR at depth#4}}{<}{\LWR at depthparagraph}%
 }%
@@ -4504,7 +4523,7 @@
 
 
 \DeclareDocumentCommand{\part}{s o m}{%
-\LWR at epubprintpendingfootnotes%
+\LWR at maybeprintpendingfootnotes{\LWR at depthpart}%
 \LWR at stoppars%
 
 \LWR at startnewdepth{\LWR at depthpart}{\LWR at printclosepart}%
@@ -4519,7 +4538,7 @@
 {%
 \DeclareDocumentCommand{\chapter}{s o m}{%
 \LWR at traceinfo{chapter #3}%
-\LWR at epubprintpendingfootnotes%
+\LWR at maybeprintpendingfootnotes{\LWR at depthchapter}%
 \LWR at stoppars%
 
 \LWR at startnewdepth{\LWR at depthchapter}{\LWR at printclosechapter}%
@@ -4530,7 +4549,7 @@
 }
 
 \DeclareDocumentCommand{\section}{s o m}{%
-\LWR at epubprintpendingfootnotes%
+\LWR at maybeprintpendingfootnotes{\LWR at depthsection}%
 \LWR at stoppars%
 
 \LWR at startnewdepth{\LWR at depthsection}{\LWR at printclosesection}%
@@ -4539,7 +4558,7 @@
 }
 
 \DeclareDocumentCommand{\subsection}{s o m}{%
-\LWR at epubprintpendingfootnotes%
+\LWR at maybeprintpendingfootnotes{\LWR at depthsubsection}%
 \LWR at stoppars%
 
 \LWR at startnewdepth{\LWR at depthsubsection}{\LWR at printclosesubsection}%
@@ -4548,7 +4567,7 @@
 }
 
 \DeclareDocumentCommand{\subsubsection}{s o m}{%
-\LWR at epubprintpendingfootnotes%
+\LWR at maybeprintpendingfootnotes{\LWR at depthsubsubsection}%
 \LWR at stoppars%
 
 \LWR at startnewdepth{\LWR at depthsubsubsection}%
@@ -4558,7 +4577,7 @@
 }
 
 \DeclareDocumentCommand{\paragraph}{s o m}{%
-\LWR at epubprintpendingfootnotes%
+\LWR at maybeprintpendingfootnotes{\LWR at depthparagraph}%
 \LWR at stoppars%
 
 \LWR at startnewdepth{\LWR at depthparagraph}{\LWR at printcloseparagraph}%
@@ -4567,7 +4586,7 @@
 }
 
 \DeclareDocumentCommand{\subparagraph}{s o m}{%
-\LWR at epubprintpendingfootnotes%
+\LWR at maybeprintpendingfootnotes{\LWR at depthsubparagraph}%
 \LWR at stoppars%
 
 \LWR at startnewdepth{\LWR at depthsubparagraph}{\LWR at printclosesubparagraph}%
@@ -5198,6 +5217,9 @@
 \newbool{LWR at startedrow}
 \boolfalse{LWR at startedrow}
 
+\newbool{LWR at tabularcelladded}
+\boolfalse{LWR at tabularcelladded}
+
 \newbool{LWR at doinghline}
 \boolfalse{LWR at doinghline}
 
@@ -5225,8 +5247,8 @@
 \ifbool{LWR at skipatbang}%
 {}%
 {%
-    \LWR at printatbang{at}{\theLWR at tablecolspos}%
-    \LWR at printatbang{bang}{\theLWR at tablecolspos}%
+    \LWR at printatbang{at}{\arabic{LWR at tablecolindex}}%
+    \LWR at printatbang{bang}{\arabic{LWR at tablecolindex}}%
 }%
 }
 
@@ -5248,10 +5270,11 @@
             bool{LWR at emptyatbang}
         }%
         {}%
-        {\LWR at getexparray{LWR at colafterspec}{\theLWR at tablecolspos}}%
+        {\LWR at getexparray{LWR at colafterspec}{\arabic{LWR at tablecolindex}}}%
         \ifbool{LWR at tableparcell}{\LWR at stoppars}{}%
         \global\boolfalse{LWR at tableparcell}%
         \leavevmode\unskip\LWR at htmltag{/td}\LWR at orignewline%
+        \global\booltrue{LWR at tabularcelladded}%
         \LWR at insertatbangcols%
     }% not skipping mrowcell
 }% not exiting tabular
@@ -5285,7 +5308,8 @@
 {%
     \unskip%
     \LWR at closetabledatacell%
-    \addtocounter{LWR at tablecolspos}{1}%
+    \addtocounter{LWR at tablecolindex}{1}%
+\boolfalse{LWR at tabularcelladded}%
     \LWR at getmynexttoken%
 }%
 {\LWR at origampmacro}%
@@ -5304,15 +5328,26 @@
 \ifbool{LWR at exitingtabular}{%
     \booltrue{LWR at tabularmutemods}%
 }{}%
-\boolfalse{LWR at exitingtabular}%
-\whiledo{\value{LWR at tablecolspos}<\value{LWR at tabletotalcols}}{%
-\LWR at tabledatasinglecolumntag%
+\global\boolfalse{LWR at exitingtabular}%
+\whiledo{%
+    \(%
+        \boolean{LWR at intabularmetadata} \AND%
+        \NOT\boolean{LWR at tabularcelladded} \AND%
+        \cnttest{\value{LWR at tablecolindex}}{=}{\value{LWR at tabletotalcols}}%
+    \) \OR%
+    \cnttest{\value{LWR at tablecolindex}}{<}{\value{LWR at tabletotalcols}}%
+}{%
+    \LWR at tabledatasinglecolumntag%
     \LWR at closetabledatacell%
-    \addtocounter{LWR at tablecolspos}{1}%
+    \addtocounter{LWR at tablecolindex}{1}%
+    \boolfalse{LWR at tabularcelladded}%
     \global\booltrue{LWR at emptyatbang}%
-    \LWR at getmynexttoken%
+    \ifthenelse{%
+        \cnttest{\value{LWR at tablecolindex}}{<}{\value{LWR at tabletotalcols}}%
+    }%
+    {\LWR at getmynexttoken}%
+    {}%
 }%
-\LWR at closetabledatacell%
 \endgroup%
 \global\boolfalse{LWR at emptyatbang}%
 }{}% ifboolexpr
@@ -5321,7 +5356,7 @@
 
 \NewDocumentCommand{\LWR at tabularendofline}{s o}
 {%
-\ifthenelse{\value{LWR at tablecolspos}<\value{LWR at tabletotalcols}}{%
+\ifthenelse{\value{LWR at tablecolindex}<\value{LWR at tabletotalcols}}{%
     \LWR at tabularfinishrow%
 }%
 {%
@@ -5334,7 +5369,8 @@
 \global\boolfalse{LWR at doingtbrule}%
 \global\boolfalse{LWR at doingcmidrule}%
 \LWR at clearmidrules%
-\setcounter{LWR at tablecolspos}{1}
+\setcounter{LWR at tablecolindex}{1}%
+\boolfalse{LWR at tabularcelladded}%
 \LWR at getmynexttoken%
 }
 
@@ -5351,10 +5387,12 @@
 
 \newcommand*{\LWR at origcolspec}{}
 
-\newcounter{LWR at tablecolswidth}
+\newcounter{LWR at tablecolspecwidth}
 
-\newcounter{LWR at tablecolspos}
+\newcounter{LWR at tablecolspecindex}
 
+\newcounter{LWR at tablecolindex}
+
 \newcounter{LWR at tabletotalcols}
 
 \newcounter{LWR at tabletotalcolsnext}
@@ -5363,10 +5401,10 @@
 \newcommand*{\LWR at colparameter}{}
 \newcommand*{\LWR at parseatcolumn}{%
 \LWR at traceinfo{at column}%
-\addtocounter{LWR at tablecolspos}{1}%
+\addtocounter{LWR at tablecolspecindex}{1}%
 \LWR at traceinfo{about to read the next token:}%
 \expandarg%
-\StrChar{\LWR at origcolspec}{\theLWR at tablecolspos}[\LWR at colparameter]
+\StrChar{\LWR at origcolspec}{\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]
 \fullexpandarg%
 \LWR at traceinfo{have now read the next token}%
 \ifthenelse{\cnttest{\value{LWR at tabletotalcols}}=0}
@@ -5378,9 +5416,9 @@
 }%
 {% not at the left edge:
     \LWR at traceinfo{not at the left edge}%
-    \LWR at setexparray{LWR at colatspec}{\theLWR at tabletotalcols}{\LWR at colparameter}%
-    \LWR at traceinfo{at \theLWR at tabletotalcols: %
-    \LWR at getexparray{LWR at colatspec}{\theLWR at tabletotalcols}}%
+    \LWR at setexparray{LWR at colatspec}{\arabic{LWR at tabletotalcols}}{\LWR at colparameter}%
+    \LWR at traceinfo{at \arabic{LWR at tabletotalcols}: %
+    \LWR at getexparray{LWR at colatspec}{\arabic{LWR at tabletotalcols}}}%
 }%
 \let\LWR at colparameter\relax%
 \booltrue{LWR at validtablecol}%
@@ -5387,10 +5425,10 @@
 }
 \newcommand*{\LWR at parsebangcolumn}{%
 \LWR at traceinfo{bang column}%
-\addtocounter{LWR at tablecolspos}{1}%
+\addtocounter{LWR at tablecolspecindex}{1}%
 \LWR at traceinfo{about to read the next token:}%
 \expandarg%
-\StrChar{\LWR at origcolspec}{\theLWR at tablecolspos}[\LWR at colparameter]
+\StrChar{\LWR at origcolspec}{\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]
 \fullexpandarg%
 \LWR at traceinfo{have now read the next token}%
 \ifthenelse{\cnttest{\value{LWR at tabletotalcols}}=0}
@@ -5400,27 +5438,27 @@
 }%
 {% not at the left edge:
     \LWR at traceinfo{not at the left edge}%
-    \LWR at setexparray{LWR at colbangspec}{\theLWR at tabletotalcols}{\LWR at colparameter}%
-    \LWR at traceinfo{bang \theLWR at tabletotalcols: \LWR at colparameter!}%
+    \LWR at setexparray{LWR at colbangspec}{\arabic{LWR at tabletotalcols}}{\LWR at colparameter}%
+    \LWR at traceinfo{bang \arabic{LWR at tabletotalcols}: \LWR at colparameter!}%
 }%
 \let\LWR at colparameter\relax%
 \booltrue{LWR at validtablecol}%
 }
 \newcommand*{\LWR at parsebeforecolumn}{%
-\addtocounter{LWR at tablecolspos}{1}%
+\addtocounter{LWR at tablecolspecindex}{1}%
 \expandarg%
-\StrChar{\LWR at origcolspec}{\theLWR at tablecolspos}[\LWR at colparameter]%
+\StrChar{\LWR at origcolspec}{\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]%
 \fullexpandarg%
-\LWR at setexparray{LWR at colbeforespec}{\theLWR at tabletotalcolsnext}{\LWR at colparameter}%
+\LWR at setexparray{LWR at colbeforespec}{\arabic{LWR at tabletotalcolsnext}}{\LWR at colparameter}%
 \let\LWR at colparameter\relax%
 \booltrue{LWR at validtablecol}%
 }
 \newcommand*{\LWR at parseaftercolumn}{%
-\addtocounter{LWR at tablecolspos}{1}%
+\addtocounter{LWR at tablecolspecindex}{1}%
 \expandarg%
-\StrChar{\LWR at origcolspec}{\theLWR at tablecolspos}[\LWR at colparameter]%
+\StrChar{\LWR at origcolspec}{\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]%
 \fullexpandarg%
-\LWR at setexparray{LWR at colafterspec}{\theLWR at tabletotalcols}{\LWR at colparameter}%
+\LWR at setexparray{LWR at colafterspec}{\arabic{LWR at tabletotalcols}}{\LWR at colparameter}%
 \let\LWR at colparameter\relax%
 \booltrue{LWR at validtablecol}%
 }
@@ -5431,7 +5469,7 @@
     \LWR at setexparray{LWR at colbarspec}{leftedge}{tvertbarl}%
 }%
 {% not at the left edge:
-    \LWR at setexparray{LWR at colbarspec}{\theLWR at tabletotalcols}{tvertbarr}%
+    \LWR at setexparray{LWR at colbarspec}{\arabic{LWR at tabletotalcols}}{tvertbarr}%
 }%
 \booltrue{LWR at validtablecol}%
 }
@@ -5439,23 +5477,23 @@
 \appto\LWR at tablecolspec{#1}%
 \addtocounter{LWR at tabletotalcols}{1}%
 \addtocounter{LWR at tabletotalcolsnext}{1}%
-\LWR at traceinfo{normal column \theLWR at tabletotalcols: #1}%
-\LWR at setexparray{LWR at colatspec}{\theLWR at tabletotalcolsnext}{}%
-\LWR at setexparray{LWR at colbangspec}{\theLWR at tabletotalcolsnext}{}%
-\LWR at setexparray{LWR at colbeforespec}{\theLWR at tabletotalcolsnext}{}%
-\LWR at setexparray{LWR at colafterspec}{\theLWR at tabletotalcolsnext}{}%
-\LWR at setexparray{LWR at colbarspec}{\theLWR at tabletotalcolsnext}{}%
+\LWR at traceinfo{normal column \arabic{LWR at tabletotalcols}: #1}%
+\LWR at setexparray{LWR at colatspec}{\arabic{LWR at tabletotalcolsnext}}{}%
+\LWR at setexparray{LWR at colbangspec}{\arabic{LWR at tabletotalcolsnext}}{}%
+\LWR at setexparray{LWR at colbeforespec}{\arabic{LWR at tabletotalcolsnext}}{}%
+\LWR at setexparray{LWR at colafterspec}{\arabic{LWR at tabletotalcolsnext}}{}%
+\LWR at setexparray{LWR at colbarspec}{\arabic{LWR at tabletotalcolsnext}}{}%
 \booltrue{LWR at validtablecol}%
 }
 
 \newcommand*{\LWR at parsepcolumn}[1]{%
 \LWR at parsenormalcolumn{#1}%
-\addtocounter{LWR at tablecolspos}{1}%
+\addtocounter{LWR at tablecolspecindex}{1}%
 }
 
 \newcommand*{\LWR at parseDcolumn}[1]{%
 \LWR at parsenormalcolumn{#1}%
-\addtocounter{LWR at tablecolspos}{3}%
+\addtocounter{LWR at tablecolspecindex}{3}%
 }
 
 
@@ -5463,6 +5501,8 @@
 \newcommand*{\LWR at parsetablecols}[1]{%
 \LWR at traceinfo{LWR at parsetablecols started}%
 \renewcommand*{\LWR at origcolspec}{#1}%
+\expandarg%
+\StrSubstitute{\LWR at origcolspec}{ }{}[\LWR at origcolspec]%
 \renewcommand*{\LWR at tablecolspec}{}%
 \setcounter{LWR at tabletotalcols}{0}%
 \setcounter{LWR at tabletotalcolsnext}{1}%
@@ -5484,17 +5524,17 @@
 \LWR at setexparray{LWR at colbarspec}{1}{}%
 \LWR at setexparray{LWR at colbarspec}{2}{}%
 \LWR at setexparray{LWR at colbarspec}{3}{}%
-\setcounter{LWR at tablecolspos}{1}%
+\setcounter{LWR at tablecolspecindex}{1}%
 \LWR at traceinfo{about to StrLen}%
-\noexpandarg%
-\StrLen{#1}[\LWR at strresult]%
+\expandarg%
+\StrLen{\LWR at origcolspec}[\LWR at strresult]%
 \fullexpandarg%
 \LWR at traceinfo{finished StrLen}%
-\setcounter{LWR at tablecolswidth}{\LWR at strresult}%
-\whiledo{\not\value{LWR at tablecolspos}>\value{LWR at tablecolswidth}}{%
-\noexpandarg%
-\StrChar{#1}{\theLWR at tablecolspos}[\LWR at strresult]%
-\LWR at traceinfo{position \arabic{LWR at tablecolspos}: \LWR at strresult}%
+\setcounter{LWR at tablecolspecwidth}{\LWR at strresult}%
+\whiledo{\not\value{LWR at tablecolspecindex}>\value{LWR at tablecolspecwidth}}{%
+\expandarg%
+\StrChar{\LWR at origcolspec}{\arabic{LWR at tablecolspecindex}}[\LWR at strresult]%
+\LWR at traceinfo{position \arabic{LWR at tablecolspecindex}: \LWR at strresult}%
 \fullexpandarg%
 \boolfalse{LWR at validtablecol}%
 \IfStrEq{\LWR at strresult}{l}{\LWR at parsenormalcolumn{l}}{}%
@@ -5522,9 +5562,9 @@
     \LWR at traceinfo{invalid column type: \LWR at strresult}%
     \LWR at parsenormalcolumn{l}%
 }%
-\addtocounter{LWR at tablecolspos}{1}%
+\addtocounter{LWR at tablecolspecindex}{1}%
+}% whiledo
 }%
-}%
 
 
 \newcommand*{\LWR at maybenewtablerow}
@@ -5580,17 +5620,18 @@
     {}%
     {\LWR at atbangspec}%
     \LWR at htmltag{/td}\LWR at orignewline%
+    \global\booltrue{LWR at tabularcelladded}%
 }% not empty
 }%
 
 \newcommand*{\LWR at addleftmostbartag}{%
-\ifnumcomp{\value{LWR at tablecolspos}}{=}{1}{%
+\ifnumcomp{\value{LWR at tablecolindex}}{=}{1}{%
     \LWR at printbartag{leftedge}%
 }{}%
 }
 
 \newcommand*{\LWR at tabularleftedge}{%
-\ifthenelse{\cnttest{\value{LWR at tablecolspos}}=1}%
+\ifthenelse{\cnttest{\value{LWR at tablecolindex}}=1}%
 {%
     \LWR at printatbang{at}{leftedge}%
     \LWR at printatbang{bang}{leftedge}%
@@ -5607,12 +5648,12 @@
     \ifbool{LWR at exitingtabular}{}%
     {% not exiting tabular
         \LWR at tabularleftedge%
-        \StrChar{\LWR at tablecolspec}{\theLWR at tablecolspos}[\LWR at strresult]%
+        \StrChar{\LWR at tablecolspec}{\arabic{LWR at tablecolindex}}[\LWR at strresult]%
         \LWR at htmltag{td class="td%
         \LWR at strresult%
         \LWR at addcmidruletrim%
         \LWR at addleftmostbartag%
-        \LWR at printbartag{\theLWR at tablecolspos}%
+        \LWR at printbartag{\arabic{LWR at tablecolindex}}%
         "%
         \LWR at tdstartstyles%
         \LWR at addcmidrulewidth%
@@ -5635,7 +5676,9 @@
         {}% no pars
         \ifboolexpr{bool{LWR at tabularmutemods} or bool{LWR at emptyatbang}}%
         {}%
-        {\LWR at getexparray{LWR at colbeforespec}{\theLWR at tablecolspos}}%
+        {%
+            \LWR at getexparray{LWR at colbeforespec}{\arabic{LWR at tablecolindex}}%
+        }%
         \global\boolfalse{LWR at intabularmetadata}%
     }% not exiting tabular
 }{}% in tabular metadata
@@ -5662,13 +5705,13 @@
 {%
 \setcounter{LWR at midrulecounter}{1}%
 \whiledo{%
-\cnttest{\value{LWR at midrulecounter}}{<=}{\value{LWR at tablecolswidth}}%
+\cnttest{\value{LWR at midrulecounter}}{<=}{\value{LWR at tablecolspecwidth}}%
 }%
 {%
-\LWR at setexparray{LWR at midrules}{\theLWR at midrulecounter}{0pt}%
+\LWR at setexparray{LWR at midrules}{\arabic{LWR at midrulecounter}}{0pt}%
 \setlength{\LWR at thiscmidrulewidth}{\LWR at cmidrulewidth}%
-\LWR at setexparray{LWR at trimlrules}{\theLWR at midrulecounter}{}%
-\LWR at setexparray{LWR at trimrrules}{\theLWR at midrulecounter}{}%
+\LWR at setexparray{LWR at trimlrules}{\arabic{LWR at midrulecounter}}{}%
+\LWR at setexparray{LWR at trimrrules}{\arabic{LWR at midrulecounter}}{}%
 \addtocounter{LWR at midrulecounter}{1}%
 }%
 }
@@ -5677,7 +5720,7 @@
 \setcounter{LWR at midrulecounter}{#3}%
 \whiledo{\cnttest{\value{LWR at midrulecounter}}{<=}{#4}}%
 {%
-\LWR at setexparray{LWR at midrules}{\theLWR at midrulecounter}{#1}%
+\LWR at setexparray{LWR at midrules}{\arabic{LWR at midrulecounter}}{#1}%
 \addtocounter{LWR at midrulecounter}{1}%
 }% whiledo
 \IfSubStr{#2}{l}{\LWR at setexparray{LWR at trimlrules}{#3}{l}}{}%
@@ -5710,7 +5753,7 @@
 }
 
 \newcommand*{\LWR at subaddcmidruletrim}[2]{%
-\setlength{\LWR at templengthone}{\LWR at getexparray{LWR at midrules}{\theLWR at tablecolspos}}%
+\setlength{\LWR at templengthone}{\LWR at getexparray{LWR at midrules}{\arabic{LWR at tablecolindex}}}%
 \ifdimcomp{\LWR at templengthone}{>}{0pt}%
 {%
     \LWR at origtilde tdrule#1#2%
@@ -5723,8 +5766,8 @@
 
 \newcommand*{\LWR at addcmidruletrim}{%
 \LWR at subaddcmidruletrim%
-{\LWR at getexparray{LWR at trimlrules}{\theLWR at tablecolspos}}%
-{\LWR at getexparray{LWR at trimrrules}{\theLWR at tablecolspos}}%
+{\LWR at getexparray{LWR at trimlrules}{\arabic{LWR at tablecolindex}}}%
+{\LWR at getexparray{LWR at trimrrules}{\arabic{LWR at tablecolindex}}}%
 }
 
 \newcommand{\LWR at addrulewidth}[2]{%
@@ -5759,7 +5802,7 @@
 
 \newcommand*{\LWR at addformatwpalignment}{%
 \ifbool{FormatWP}{%
-\StrChar{\LWR at tablecolspec}{\theLWR at tablecolspos}[\LWR at strresult]%
+\StrChar{\LWR at tablecolspec}{\arabic{LWR at tablecolindex}}[\LWR at strresult]%
 \ifdefstring{\LWR at strresult}{l}{\LWR at WPcell{left}{middle}}{}%
 \ifdefstring{\LWR at strresult}{c}{\LWR at WPcell{center}{middle}}{}%
 \ifdefstring{\LWR at strresult}{r}{\LWR at WPcell{right}{middle}}{}%
@@ -5777,9 +5820,12 @@
 \newcounter{LWR at tablemulticolswidth}
 \newcounter{LWR at tablemulticolspos}
 
+\newbool{LWR at mcolvertbarl}
+\newbool{LWR at mcolvertbarr}
+
 \newcommand*{\LWR at printmccoltype}[1]{%
 \LWR at traceinfo{lwr at printmccoltype -#1-}%
-\StrChar{#1}{\theLWR at tablemulticolspos}[\LWR at strresult]%
+\StrChar{#1}{\arabic{LWR at tablemulticolspos}}[\LWR at strresult]%
 \IfStrEq{\LWR at strresult}{l}{l}{}%
 \IfStrEq{\LWR at strresult}{c}{c}{}%
 \IfStrEq{\LWR at strresult}{r}{r}{}%
@@ -5791,6 +5837,11 @@
 \IfStrEq{\LWR at strresult}{B}{B}{}%
 \IfStrEq{\LWR at strresult}{S}{r}{}%
 \IfStrEq{\LWR at strresult}{X}{p}{}%
+\IfStrEq{\LWR at strresult}{|}{%
+    \ifthenelse{\value{LWR at tablemulticolspos}=1}%
+        {\booltrue{LWR at mcolvertbarl}}%
+        {\booltrue{LWR at mcolvertbarr}}%
+}{}%
 \LWR at traceinfo{lwr at printmccoltype done}%
 }
 
@@ -5802,7 +5853,7 @@
 
 \newcommand*{\LWR at multicolother}[1]{%
 \addtocounter{LWR at tablemulticolspos}{1}%
-\StrChar{#1}{\theLWR at tablemulticolspos}[\LWR at strresult]%
+\StrChar{#1}{\arabic{LWR at tablemulticolspos}}[\LWR at strresult]%
 \LWR at strresult%
 \booltrue{LWR at validtablecol}%
 }
@@ -5814,7 +5865,7 @@
 \newcommand*{\LWR at printmccoldata}[1]{%
 \LWR at traceinfo{lwr at printmccoldata -#1}%
 \boolfalse{LWR at validtablecol}%
-\StrChar{#1}{\theLWR at tablemulticolspos}[\LWR at strresult]%
+\StrChar{#1}{\arabic{LWR at tablemulticolspos}}[\LWR at strresult]%
 \IfStrEq{\LWR at strresult}{l}{\LWR at multicoltext}{}%
 \IfStrEq{\LWR at strresult}{c}{\LWR at multicoltext}{}%
 \IfStrEq{\LWR at strresult}{r}{\LWR at multicoltext}{}%
@@ -5844,7 +5895,7 @@
 \StrLen{#1}[\LWR at strresult]%
 \setcounter{LWR at tablemulticolswidth}{\LWR at strresult}%
 \whiledo{%
-\not\value{LWR at tablemulticolspos}>\value{LWR at tablemulticolswidth}%
+    \NOT\value{LWR at tablemulticolspos}>\value{LWR at tablemulticolswidth}%
 }%
 {%
 #2{#1}%
@@ -5855,15 +5906,19 @@
 
 \newcommand{\LWR at multicoltext}{}
 
-\NewDocumentCommand{\LWR at domulticolumn}{o o m m +m}{%
-\LWR at traceinfo{lwr at domulticolumn -#1- -#2- -#3- -#4-}%
+\newcounter{LWR at lastmulticolumn}
+
+\NewDocumentCommand{\LWR at domulticolumn}{o o m m m +m}{%
+\LWR at traceinfo{LWR at domulticolumn -#1- -#2- -#4- -#5-}%
 \renewcommand{\LWR at multicoltext}{%
-#5%
+#6%
 \booltrue{LWR at validtablecol}%
 }%
+\setcounter{LWR at lastmulticolumn}{\value{LWR at tablecolindex}}%
+\addtocounter{LWR at lastmulticolumn}{#3}%
+\addtocounter{LWR at lastmulticolumn}{-1}%
 \LWR at maybenewtablerow%
-\LWR at tabularleftedge%
-\LWR at htmltag{td colspan="#3" %
+\LWR at htmltag{td colspan="#4" %
 \IfValueT{#2}{ % rows?
 rowspan="#2" %
 \IfValueT{#1}{% vpos?
@@ -5872,10 +5927,14 @@
 }% vpos?
 }% rows?
  class="td%
-\LWR at parsemulticolumnalignment{#4}{\LWR at printmccoltype}%
-\LWR at addcmidruletrim%
-\LWR at addleftmostbartag%
-\LWR at printbartag{\theLWR at tablecolspos}%
+\boolfalse{LWR at mcolvertbarl}%
+\boolfalse{LWR at mcolvertbarr}%
+\LWR at parsemulticolumnalignment{#5}{\LWR at printmccoltype}%
+\LWR at subaddcmidruletrim%
+{\LWR at getexparray{LWR at trimlrules}{\arabic{LWR at tablecolindex}}}%
+{\LWR at getexparray{LWR at trimrrules}{\arabic{LWR at lastmulticolumn}}}%
+\ifbool{LWR at mcolvertbarl}{ tvertbarl}{}%
+\ifbool{LWR at mcolvertbarr}{ tvertbarr}{}%
 "%
 \LWR at tdstartstyles%
 \LWR at addcmidrulewidth%
@@ -5883,16 +5942,16 @@
 \LWR at tdendstyles%
 }% end of the opening table data tag
 \global\boolfalse{LWR at intabularmetadata}%
-\LWR at parsemulticolumnalignment{#4}{\LWR at printmccoldata}%
+\LWR at parsemulticolumnalignment{#5}{\LWR at printmccoldata}%
 }
 
 
 \NewDocumentCommand{\LWR at htmlmulticolumn}{m m +m}%
 {%
-\LWR at tabularhtmlcolumns{\theLWR at tablecolspos}{#1}
-\LWR at domulticolumn{\theLWR at tabhtmlcoltotal}{#2}{#3}%
-\addtocounter{LWR at tablecolspos}{#1}%
-\addtocounter{LWR at tablecolspos}{-1}%
+\LWR at tabularhtmlcolumns{\arabic{LWR at tablecolindex}}{#1}
+\LWR at domulticolumn{#1}{\arabic{LWR at tabhtmlcoltotal}}{#2}{#3}%
+\addtocounter{LWR at tablecolindex}{#1}%
+\addtocounter{LWR at tablecolindex}{-1}%
 \booltrue{LWR at skipatbang}%
 }
 
@@ -5907,8 +5966,9 @@
     {\LWR at setlatestname{#2}}% given and non-empty
 }% optional given
 {\LWR at setlatestname{#3}}% no optional
-\LWR at tabularhtmlcolumns{1}{\theLWR at tabletotalcols}
-\LWR at domulticolumn{\theLWR at tabhtmlcoltotal}{P}{% \LWR at domulticolumn
+\LWR at tabularhtmlcolumns{1}{\arabic{LWR at tabletotalcols}}
+\LWR at domulticolumn{\arabic{LWR at tabletotalcols}}{\arabic{LWR at tabhtmlcoltotal}}{P}%
+{% \LWR at domulticolumn
 \IfBooleanTF{#1}% star?
 {% yes star
     \LWR at figcaption%
@@ -5958,8 +6018,8 @@
 \booltrue{LWR at skipatbang}%
 }% end of \LWR at domulticolumn
 
-\addtocounter{LWR at tablecolspos}{\theLWR at tabletotalcols}
-\addtocounter{LWR at tablecolspos}{-1}
+\addtocounter{LWR at tablecolindex}{\arabic{LWR at tabletotalcols}}
+\addtocounter{LWR at tablecolindex}{-1}
 
 }
 
@@ -5969,22 +6029,27 @@
 \newcounter{LWR at tabhtmlcolend}
 \newcounter{LWR at tabhtmlcoltotal}
 
+\newcommand*{\LWR at subtabularhtmlcolumns}[1]{%
+    \edef\LWR at atbangspec{\LWR at getexparray{LWR at colatspec}{#1}}%
+    \ifdefempty{\LWR at atbangspec}%
+        {}%
+        {\addtocounter{LWR at tabhtmlcoltotal}{1}}%
+    \edef\LWR at atbangspec{\LWR at getexparray{LWR at colbangspec}{#1}}%
+    \ifdefempty{\LWR at atbangspec}%
+        {}%
+        {\addtocounter{LWR at tabhtmlcoltotal}{1}}%
+}
+
 \newcommand*{\LWR at tabularhtmlcolumns}[2]{%
 \setcounter{LWR at tabhtmlcolindex}{#1}%
 \setcounter{LWR at tabhtmlcoltotal}{#2}%
 \setcounter{LWR at tabhtmlcolend}{#1}%
 \addtocounter{LWR at tabhtmlcolend}{#2}%
+\ifthenelse{\value{LWR at tabhtmlcolindex}=1}{%
+    \LWR at subtabularhtmlcolumns{leftedge}%
+}{}%
 \whiledo{\value{LWR at tabhtmlcolindex}<\value{LWR at tabhtmlcolend}}{%
-    \edef\LWR at atbangspec{\LWR at getexparray{LWR at colatspec}%
-        {\theLWR at tabhtmlcolindex}}%
-    \ifdefempty{\LWR at atbangspec}%
-        {}%
-        {\addtocounter{LWR at tabhtmlcoltotal}{1}}%
-    \edef\LWR at atbangspec{\LWR at getexparray{LWR at colbangspec}%
-        {\theLWR at tabhtmlcolindex}}%
-    \ifdefempty{\LWR at atbangspec}%
-        {}%
-        {\addtocounter{LWR at tabhtmlcoltotal}{1}}%
+    \LWR at subtabularhtmlcolumns{\arabic{LWR at tabhtmlcolindex}}%
     \addtocounter{LWR at tabhtmlcolindex}{1}%
 }% whiledo
 }
@@ -6025,7 +6090,7 @@
 
 
 \begin{warpall}
-\let\TabularMacro\relax
+\newcommand*{\TabularMacro}{}
 
 \end{warpall}
 
@@ -6057,7 +6122,7 @@
 \LWR at traceinfo{LWR at tabledatacolumntag}%
 \let\mynext\LWR at tabledatasinglecolumntag%
 \ifdefequal{\LWR at mynexttoken}{\end}%
-    {\booltrue{LWR at exitingtabular}}{}%
+    {\global\booltrue{LWR at exitingtabular}}{}%
 \ifdefequal{\LWR at mynexttoken}{\caption}%
     {\let\mynext\LWR at donothing}{}%
 \ifdefequal{\LWR at mynexttoken}{\multicolumn}%
@@ -6127,7 +6192,7 @@
 {
 \newcommand*{\LWR at hline}[1][]{%
     \ifbool{FormatWP}%
-    {\LWR at docmidrule{1-\theLWR at tabletotalcols}}%
+    {\LWR at docmidrule{1-\arabic{LWR at tabletotalcols}}}%
     {\booltrue{LWR at doinghline}}%
     \LWR at getmynexttoken}%
 }
@@ -6134,7 +6199,7 @@
 {
 \newcommand*{\LWR at hline}{%
     \ifbool{FormatWP}%
-    {\LWR at docmidrule{1-\theLWR at tabletotalcols}}%
+    {\LWR at docmidrule{1-\arabic{LWR at tabletotalcols}}}%
     {\booltrue{LWR at doinghline}}%
     \LWR at getmynexttoken}%
 }
@@ -6165,14 +6230,15 @@
 \global\boolfalse{LWR at doingtbrule}%
 \global\boolfalse{LWR at doingcmidrule}%
 \LWR at nullifyNoAutoSpacing%
-\boolfalse{LWR at exitingtabular}%
-\boolfalse{LWR at tabularmutemods}%
+\global\boolfalse{LWR at exitingtabular}%
+\global\boolfalse{LWR at tabularmutemods}%
 \global\booltrue{LWR at intabularmetadata}%
 \LWR at forcenewpage
 \LWR at htmlblocktag{table}%
 \LWR at parsetablecols{#2}%
 \LWR at stoppars%
-\setcounter{LWR at tablecolspos}{1}%
+\setcounter{LWR at tablecolindex}{1}%
+\boolfalse{LWR at tabularcelladded}%
 \LWR at clearmidrules%
 \LetLtxMacro{\\}{\LWR at tabularendofline}%
 \LWR at traceinfo{LWR at tabular: redefining macros}%
@@ -6182,10 +6248,10 @@
 \DeclareDocumentCommand{\toprule}{o d()}
     {%
         \IfValueTF{##1}%
-            {\LWR at docmidrule[##1](){1-\theLWR at tabletotalcols}}%
+            {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}}%
             {%
                 \ifbool{FormatWP}%
-                {\LWR at docmidrule[##1](){1-\theLWR at tabletotalcols}}%
+                {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}}%
                 {\booltrue{LWR at doingtbrule}}%
             }%
     \LWR at getmynexttoken}%
@@ -6192,10 +6258,10 @@
 \DeclareDocumentCommand{\midrule}{o d()}%
     {%
         \IfValueTF{##1}%
-            {\LWR at docmidrule[##1](){1-\theLWR at tabletotalcols}}%
+            {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}}%
             {%
                 \ifbool{FormatWP}%
-                {\LWR at docmidrule[##1](){1-\theLWR at tabletotalcols}}%
+                {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}}%
                 {\booltrue{LWR at doinghline}}%
             }%
     \LWR at getmynexttoken}%
@@ -6204,10 +6270,10 @@
 \DeclareDocumentCommand{\bottomrule}{o d()}
     {%
         \IfValueTF{##1}%
-            {\LWR at docmidrule[##1](){1-\theLWR at tabletotalcols}}%
+            {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}}%
             {%
                 \ifbool{FormatWP}%
-                {\LWR at docmidrule[##1](){1-\theLWR at tabletotalcols}}%
+                {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}}%
                 {\booltrue{LWR at doingtbrule}}%
             }%
     \LWR at getmynexttoken}%
@@ -6214,7 +6280,7 @@
 \DeclareDocumentCommand{\addlinespace}{o}{}%
 \DeclareDocumentCommand{\morecmidrules}{}{}%
 \DeclareDocumentCommand{\specialrule}{m m m d()}%
-    {\LWR at docmidrule[##1](){1-\theLWR at tabletotalcols}\LWR at getmynexttoken}%
+    {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}\LWR at getmynexttoken}%
 \renewcommand{\multicolumn}{\LWR at htmlmulticolumn}%
 \renewcommand*{\mrowcell}{%
     \LWR at maybenewtablerow%
@@ -6223,7 +6289,6 @@
 }%
 \renewcommand*{\mcolrowcell}{%
     \LWR at maybenewtablerow%
-    \LWR at tabularleftedge%
     \global\booltrue{LWR at skippingmcolrowcell}%
 }%
 \LetLtxMacro{\caption}{\LWR at longtabledatacaptiontag}%
@@ -6239,7 +6304,14 @@
 }%
 {%
 \LWR at traceinfo{LWR at tabular ending}%
-\ifthenelse{\value{LWR at tablecolspos}<\value{LWR at tablecolswidth}}{%
+\ifthenelse{%
+    \(%
+        \boolean{LWR at intabularmetadata} \AND%
+        \NOT\boolean{LWR at tabularcelladded} \AND%
+        \cnttest{\value{LWR at tablecolindex}}{=}{\value{LWR at tabletotalcols}}%
+    \) \OR%
+    \cnttest{\value{LWR at tablecolindex}}{<}{\value{LWR at tabletotalcols}}%
+}{%
     \LWR at tabularfinishrow%
 }%
 {%
@@ -6279,7 +6351,7 @@
 \zref at newlist{special}
 \zref at newprop{zLWR at name}{\@currentlabelname}
 \zref at newprop{zLWR at htmlfilenumber}{%
-\ifbool{FileSectionNames}{\LWR at thisfilename}{\theLWR at htmlfilenumber}%
+\ifbool{FileSectionNames}{\LWR at thisfilename}{\arabic{LWR at htmlfilenumber}}%
 }%
 \zref at newprop{zLWR at lateximagedepth}{\arabic{LWR at lateximagedepth}}
 \zref at newprop{zLWR at lateximagenumber}{\arabic{LWR at lateximagenumber}}
@@ -6333,7 +6405,7 @@
 \LWR at origlabel{#1}%
 \LWR at traceinfo{LWR at newlabel: filesectionnames is \ifbool{FileSectionNames}{true}{false}}%
 \LWR at traceinfo{LWR at newlabel: LWR at thisfilename is !\LWR at thisfilename!}%
-\LWR at traceinfo{LWR at newlabel: LWR at htmlfilenumber is \theLWR at htmlfilenumber}%
+\LWR at traceinfo{LWR at newlabel: LWR at htmlfilenumber is \arabic{LWR at htmlfilenumber}}%
 \LWR at splabel{#1}%
 \LWR at subsublabel{#1}%
 \LWR at traceinfo{LWR at newlabel: done}%
@@ -6393,7 +6465,7 @@
 {(\cpageref{#2})}%
 }
 
-\newcommand*{\nameref}[1]{%
+\DeclareRobustCommand*{\nameref}[1]{%
 \LWR at traceinfo{nameref A}%
 \LWR at startref{#1}%
 \LWR at traceinfo{nameref B}%
@@ -6426,7 +6498,7 @@
 \LWR at ensuredoingapar%
 }
 
-\newcommand{\href}{%
+\DeclareRobustCommand*{\href}{%
 \LWR at ensuredoingapar%
 \begingroup%
 \catcode`\_=12
@@ -6435,7 +6507,7 @@
 
 \newcommand*{\LWR at nolinkurlb}[1]{#1\endgroup\LWR at ensuredoingapar}
 
-\newcommand{\nolinkurl}{%
+\DeclareRobustCommand*{\nolinkurl}{%
 \LWR at ensuredoingapar%
 \begingroup\catcode`\_=12
 \LWR at nolinkurlb%
@@ -6447,7 +6519,7 @@
 \LWR at ensuredoingapar%
 }
 
-\newcommand{\LWR at urla}{%
+\DeclareRobustCommand*{\LWR at urla}{%
 \LWR at ensuredoingapar%
 \begingroup\catcode`\_=12
 \LWR at urlb%
@@ -6871,6 +6943,7 @@
 \newcommand*{\LWR at restoreorigformatting}{%
 \LWR at traceinfo{LWR at restoreorigformatting}%
 \linespread{1}%
+\LetLtxMacro\ref\LWR at origref%{} syntax highlighting
 \RenewDocumentCommand{\InlineClass}{o m +m}{##3}%
 \RenewDocumentEnvironment{BlockClass}{o m}{}{}%
 \renewcommand{\BlockClassSingle}[2]{##2}%
@@ -6943,6 +7016,8 @@
 \let\LaTeXe\LWR at origLaTeXe%
 \renewcommand*{\Xe}{X\textsubscript{E}}%
 \LetLtxMacro\@ensuredmath\LWR at origensuredmath%
+\csletcs{equation*}{LWR at origequationstar}%
+\csletcs{endequation*}{LWR at origendequationstar}%
 \LWR at restoreorigaccents%
 \LWR at FBcancel%
 }
@@ -6971,7 +7046,7 @@
 \catcode`\$=\active%
 \protected\gdef${\@ifnextchar$\LWR at doubledollar\LWR at singledollar}%
 
-\gdef\LWR at doubledollar$#1$${
+\protected\gdef\LWR at doubledollar$#1$${
 \ifboolexpr{bool{mathjax} or ( bool{FormatWP} and bool{WPMarkMath} ) }%
 {
 
@@ -6989,7 +7064,7 @@
 
 }% not mathjax
 }%
-\gdef\LWR at subsingledollar#1{%
+\protected\gdef\LWR at subsingledollar#1{%
 \ifboolexpr{bool{mathjax} or ( bool{FormatWP} and bool{WPMarkMath} ) }%
 {%
         {\textbackslash(\LWR at HTMLsanitize{#1}\textbackslash)}%
@@ -7002,12 +7077,13 @@
 }%
 }
 
-\gdef\LWR at singledollar#1${%
+\protected\gdef\LWR at singledollar#1${%
 \LWR at subsingledollar{#1}%
 }
 
-\gdef\(#1\){$#1$}
-\gdef\[#1\]{$$#1$$}
+\protected\gdef\(#1\){%
+$#1$}
+\protected\gdef\[#1\]{$$#1$$}
 
 \endgroup
 
@@ -7104,6 +7180,12 @@
 
 ]
 
+\csletcs{LWR at origequationstar}{equation*}
+\csletcs{LWR at origendequationstar}{endequation*}
+\renewenvironment*{equation*}
+{\displaymath}
+{\enddisplaymath}
+
 \newbool{LWR at amsmultline}
 \boolfalse{LWR at amsmultline}
 
@@ -7540,7 +7622,7 @@
     \LWR at ensuredoingapar%
     \addtocounter{LWR at externalfilecnt}{1}%
     \LWR at traceinfo{lateximage: LWR at externalfilecnt is \arabic{LWR at externalfilecnt}}%
-    \setcounterpageref{LWR at LIpage}{LWRlateximage\theLWR at lateximagenumber}%
+    \setcounterpageref{LWR at LIpage}{LWRlateximage\arabic{LWR at lateximagenumber}}%
     \LWR at traceinfo{lateximage: LWR at LIpage is \arabic{LWR at LIpage}}%
     \LWR at htmltag{span id="lateximage\arabic{LWR at lateximagenumber}" %
     class="lateximagesource"{}} \LWR at orignewline
@@ -7806,13 +7888,15 @@
 #1{\cpagerefFor\ \cref{#2}}{\cref{#3}}{}{}{}{}}
 }% AfterEndPreamble
 
-\let\LWR at origlabel\label
-\let\label\LWR at newlabel
-\let\LWR at origref\ref
-\let\ref\LWR at newref% \end{ syntax highlighting
-\let\LWR at origpageref\pageref
-\let\pageref\LWR at newpageref
+\LetLtxMacro\LWR at origlabel\label
+\RenewDocumentCommand{\label}{}{\LWR at newlabel}
 
+\LetLtxMacro\LWR at origref\ref
+\RenewDocumentCommand{\ref}{}{\LWR at newref}%
+
+\LetLtxMacro\LWR at origpageref\pageref
+\RenewDocumentCommand{\pageref}{}{\LWR at newpageref}
+
 \end{warpHTML}
 
 
@@ -8202,6 +8286,7 @@
 \RenewDocumentCommand{\LWR at htmlspanclass}{o m +m}{##3}%
 \DeclareExpandableDocumentCommand{\InlineClass}{+o +m +m}{##3}%
 \DeclareRobustCommand{\LWR at HTMLtextstyle}[3]{##3}%
+\DeclareRobustCommand{\LWR at subsingledollar}[1]{}%
 }
 
 \renewcommand*{\mdseries}{}



More information about the tex-live-commits mailing list