texlive[44935] Master/texmf-dist: jmlr (1aug17)

commits+karl at tug.org commits+karl at tug.org
Tue Aug 1 23:39:04 CEST 2017


Revision: 44935
          http://tug.org/svn/texlive?view=revision&revision=44935
Author:   karl
Date:     2017-08-01 23:39:04 +0200 (Tue, 01 Aug 2017)
Log Message:
-----------
jmlr (1aug17)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/jmlr/CHANGES
    trunk/Master/texmf-dist/doc/latex/jmlr/INSTALL
    trunk/Master/texmf-dist/doc/latex/jmlr/README
    trunk/Master/texmf-dist/doc/latex/jmlr/jmlr.pdf
    trunk/Master/texmf-dist/doc/latex/jmlr/sample-books/jmlrbook-sample.pdf
    trunk/Master/texmf-dist/doc/latex/jmlr/sample-books/proceedings-sample.pdf
    trunk/Master/texmf-dist/doc/latex/jmlr/sample-papers/jmlr-sample.pdf
    trunk/Master/texmf-dist/doc/latex/jmlr/sample-papers/jmlrwcp-sample.pdf
    trunk/Master/texmf-dist/doc/latex/jmlr/sample-papers/jmlrwcp-sample.tex
    trunk/Master/texmf-dist/source/latex/jmlr/jmlr.dtx
    trunk/Master/texmf-dist/source/latex/jmlr/jmlr.ins
    trunk/Master/texmf-dist/tex/latex/jmlr/jmlr.cls
    trunk/Master/texmf-dist/tex/latex/jmlr/jmlrbook.cls

Added Paths:
-----------
    trunk/Master/texmf-dist/tex/latex/jmlr/jmlrutils.sty

Modified: trunk/Master/texmf-dist/doc/latex/jmlr/CHANGES
===================================================================
--- trunk/Master/texmf-dist/doc/latex/jmlr/CHANGES	2017-08-01 21:38:49 UTC (rev 44934)
+++ trunk/Master/texmf-dist/doc/latex/jmlr/CHANGES	2017-08-01 21:39:04 UTC (rev 44935)
@@ -1,3 +1,9 @@
+v1.24:
+
+  * moved non-class related code into new package jmlrutils.sty
+
+  * fixed bug in \includeteximage
+
 v1.23:
 
   * added pmlr class option

Modified: trunk/Master/texmf-dist/doc/latex/jmlr/INSTALL
===================================================================
--- trunk/Master/texmf-dist/doc/latex/jmlr/INSTALL	2017-08-01 21:38:49 UTC (rev 44934)
+++ trunk/Master/texmf-dist/doc/latex/jmlr/INSTALL	2017-08-01 21:39:04 UTC (rev 44935)
@@ -31,10 +31,6 @@
 unzip jmlr.tds.zip -d ~/texmf/
 texhash ~/texmf/
 
-Move the makejmlrbook Perl script from scripts/jmlr/ to somewhere
-on your path. If you are using Windows, you will also need to
-move makejmlrbook.bat to the same location.
-
 INSTALLING FROM DTX AND INS
 ===========================
 
@@ -59,11 +55,8 @@
 
 Move the documentation to TEXMF/doc/latex/jmlr/
 
-Move jmlr.cls and jmlrbook.cls to TEXMF/tex/latex/jmlr/
+Move jmlrutils.sty, jmlr.cls and jmlrbook.cls to TEXMF/tex/latex/jmlr/
 
 *Remember to refresh TeX's database*
 
-Move the makejmlrbook Perl script to somewhere on your path. If
-you are using Windows, you will also need to move makejmlrbook.bat
-to the same location.
 

Modified: trunk/Master/texmf-dist/doc/latex/jmlr/README
===================================================================
--- trunk/Master/texmf-dist/doc/latex/jmlr/README	2017-08-01 21:38:49 UTC (rev 44934)
+++ trunk/Master/texmf-dist/doc/latex/jmlr/README	2017-08-01 21:39:04 UTC (rev 44935)
@@ -1,6 +1,6 @@
-LaTeX Class : jmlr bundle v1.23
+LaTeX Class : jmlr bundle v1.24
 
-Last Modified : 2017-03-09
+Last Modified : 2017-08-01
 
 Author        : Nicola L. C. Talbot
 
@@ -8,13 +8,19 @@
 
    * jmlr class
    * jmlrbook class
+   * jmlrutils package
 
-The jmlr class is a LaTeX2e class for articles for the Journal of
-Machine Learning Research (JMLR) or the JMLR Workshop and Conference
+The jmlr class is a LaTeX class for articles for the Journal of
+Machine Learning Research (JMLR) or the Proceedings of Machine
+Learning Research (PMLR) formerly JMLR Workshop and Conference
 Proceedings (JMLR W&CP). It is designed as a replacement for both
 jmlr2e.sty and jmlrwcp2e.sty.
 
-The jmlrbook class is a LaTeX2e class that can be used to combine
+The jmlrutils package is automatically loaded by the jmlr class, but
+may be used with other classes. (You may need to additionally load
+graphicx and algorithm2e, which jmlr.cls does automatically.)
+
+The jmlrbook class is a LaTeX class that can be used to combine
 articles written using the jmlr class into a book. The jmlrbook
 class uses the combine class and the hyperref package to produce
 either a colour hyperlinked book for on-line viewing or a greyscale
@@ -21,7 +27,8 @@
 nonhyperlinked book for printing. Production editors can use the
 makejmlrbookgui application
 (http://www.dickimaw-books.com/software/makejmlrbookgui/) to
-generate the proceedings.
+generate the proceedings. The makejmlrbook Perl script is deprecated
+and may be removed in future releases.
 
 INSTALLATION
 
@@ -31,6 +38,7 @@
 
 jmlr class requirements:
 
+  jmlrutils
   xcolor
   amsmath
   amssymb
@@ -60,7 +68,7 @@
 
 RELATED SOFTWARE:
 
-http://www.dickimaw-books.com/apps/makejmlrbookgui/
+http://www.dickimaw-books.com/software/makejmlrbookgui/
 
 Author's home page: http://www.dickimaw-books.com/
 

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

Modified: trunk/Master/texmf-dist/doc/latex/jmlr/sample-books/jmlrbook-sample.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/jmlr/sample-books/proceedings-sample.pdf
===================================================================
(Binary files differ)

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

Modified: trunk/Master/texmf-dist/doc/latex/jmlr/sample-papers/jmlrwcp-sample.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/jmlr/sample-papers/jmlrwcp-sample.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/jmlr/sample-papers/jmlrwcp-sample.tex	2017-08-01 21:38:49 UTC (rev 44934)
+++ trunk/Master/texmf-dist/doc/latex/jmlr/sample-papers/jmlrwcp-sample.tex	2017-08-01 21:39:04 UTC (rev 44935)
@@ -552,13 +552,15 @@
 
 Enumerated textual algorithms can be displayed using the
 \texttt{algorithm} environment. Within this environment, use
-\verb|\caption| to set the caption and you can use an
-\texttt{enumerate} or nested \texttt{enumerate} environments.
+use an \texttt{enumerate} or nested \texttt{enumerate} environments.
 For example, see \algorithmref{alg:gauss}. Note that algorithms
 float like figures and tables.
 
 \begin{algorithm}[htbp]
-\caption{The Gauss-Seidel Algorithm}\label{alg:gauss}
+\floatconts
+{alg:gauss}% label
+{\caption{The Gauss-Seidel Algorithm}}
+{% contents
 \begin{enumerate}
   \item For $k=1$ to maximum number of iterations
     \begin{enumerate}
@@ -572,8 +574,12 @@
       \end{enumerate}
     \end{enumerate}
 \end{enumerate}
+}
 \end{algorithm}
 
+You can use \verb|\caption| and \verb|\label| without using
+\verb|\floatconts| (as in \algorithmref{alg:moore}).
+
 If you'd rather have the same numbering throughout the algorithm
 but still want the convenient indentation of nested 
 \texttt{enumerate} environments, you can use the

Modified: trunk/Master/texmf-dist/source/latex/jmlr/jmlr.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/jmlr/jmlr.dtx	2017-08-01 21:38:49 UTC (rev 44934)
+++ trunk/Master/texmf-dist/source/latex/jmlr/jmlr.dtx	2017-08-01 21:39:04 UTC (rev 44935)
@@ -1,13 +1,14 @@
 %\iffalse
-% jmlr.dtx generated using makedtx version 1.1 (c) Nicola Talbot
+% jmlr.dtx generated using makedtx version 1.2 (c) Nicola Talbot
 % Command line args:
+%   -doc "jmlr-manual.tex"
+%   -src "jmlrutils.sty\Z=>jmlrutils.sty"
 %   -src "jmlr.cls\Z=>jmlr.cls"
 %   -src "jmlrbook.cls\Z=>jmlrbook.cls"
+%   -author "Nicola Talbot"
 %   -section "chapter"
-%   -author "Nicola Talbot"
-%   -doc "jmlr-manual.tex"
 %   jmlr
-% Created on 2017/3/9 9:50
+% Created on 2017/8/1 16:57
 %\fi
 %\iffalse
 %<*package>
@@ -51,9 +52,8 @@
 
 \doxitem{Option}{option}{package options}
 
-\CheckSum{4965}
+\CheckSum{5030}
 
-
 \newcommand*{\appopt}[1]{\texttt{-{}-#1}}
 
 \begin{document}
@@ -70,7 +70,7 @@
 % \author{Nicola L. C. Talbot\\[10pt]
 %\url{http://www.dickimaw-books.com/}}
 %
-% \date{2017-03-09 (version 1.23)}
+% \date{2017-08-01 (version 1.24)}
 % \maketitle
 %\tableofcontents
 %
@@ -83,10 +83,9 @@
 %\cls{combine} class to collate the articles into a book.
 %\sectionref{sec:jmlr} describes how to use the \clsfmt{jmlr} class.
 %Note that JMLR W\&CP (JMLR: Workshop and Conference Proceedings)
-%will soon be renamed PMLR (Proceedings of Machine Learning
-%Research). The new \clsopt{pmlr} class option has been added
-%in anticipation of this, but only use it once the official
-%name change has taken place.
+%has been renamed PMLR (Proceedings of Machine Learning
+%Research). Articles for new proceedings should use the \clsopt{pmlr}
+%class option.
 %
 %The \clsfmt{jmlrbook} class is for combining articles that use the
 %\clsfmt{jmlr} class into a
@@ -107,6 +106,13 @@
 %PDF\LaTeX. \sectionref{sec:jmlrbook} describes how to use the
 %\clsfmt{jmlrbook} class.
 %
+%As from v1.24, some non-class dependent commands and environments
+%have been moved to a new package \sty{jmlrutils} (see
+%\sectionref{sec:jmlrutils}). This package is automatically loaded by
+%\clsfmt{jmlr}, but may be used with other classes. (Note that you
+%will need to explicitly load \sty{algorithm2e} if you want to use
+%the \env{algorithm} environment.)
+%
 %\begin{important}
 %Note that the \clsfmt{jmlr} (and therefore \clsfmt{jmlrbook}) class automatically loads
 %the \sty{hyperref} package, but some packages need to be loaded
@@ -131,23 +137,25 @@
 %bib file for the proceedings (according to the PMLR specifications). It can also
 %create a grey nonhyperlinked PDF/X compliant print version of the
 %book. The application can be downloaded from
-%\url{http://www.dickimaw-books.com/apps/makejmlrbookgui/} where
+%\url{http://www.dickimaw-books.com/software/makejmlrbookgui/} where
 %there is also a
-%\href{http://www.dickimaw-books.com/apps/makejmlrbookgui/manual/troubleshooting.html}{troubleshooting
+%\href{http://www.dickimaw-books.com/software/makejmlrbookgui/manual/troubleshooting.html}{troubleshooting
 %section}.
 %
 %There is also a Perl script called \app{makejmlrbook}, which is
 %distributed with the \clsfmt{jmlr} and \clsfmt{jmlrbook} bundle,
-%however it has been superseded by \app{makejmlrbookgui}. Note that
-%PMLR (formerly JMLR W\&CP) has new format guidelines that are
-%followed by new versions of \app{makejmlrbookgui} but not by the
-%Perl script \app{makejmlrbook}, so that script is no longer
-%documented and may be dropped from future versions of this bundle.
+%however it is now deprecated and has been superseded by
+%\app{makejmlrbookgui}. Note that PMLR (formerly JMLR W\&CP) has new
+%format guidelines that are followed by new versions of
+%\app{makejmlrbookgui} but not by the Perl script \app{makejmlrbook},
+%so that script is no longer documented or supported and may be
+%dropped from future versions of this bundle.
 %
 %\section{Required Packages}
 %
 %The \clsfmt{jmlr} class is based on the \cls{article} class and loads
-%the following packages: \sty{amsmath}, \sty{amssymb},
+%the following packages: \sty{jmlrutils} (see \sectionref{sec:jmlrutils}), 
+%\sty{amsmath}, \sty{amssymb},
 %\sty{natbib}, \sty{url}, \sty{graphicx} and \sty{algorithm2e},
 %\sty{hyperref}, \sty{nameref}, \sty{xcolor} and \sty{xkeyval}.
 %Note that unlike the \sty{jmlr2e} and \sty{jmlrwcp2e} packages,
@@ -386,6 +394,8 @@
 %\begin{verbatim}
 %\url{http://theoval.cmp.uea.ac.uk/~nlct/}
 %\end{verbatim}
+%This command is provided by the \sty{url} package which is
+%automatically loaded.
 %
 %\begin{definition}[\DescribeMacro{\mailto}]
 %\cs{mailto}\marg{email address}
@@ -392,7 +402,9 @@
 %\end{definition}
 %This will typeset the given email address in a typewriter font.
 %Note that this is not the same as \cs{Email}, which should only be
-%used in the argument of \cs{author}.
+%used in the argument of \cs{author}. This command is provided by the
+%supplementary package \sty{jmlrutils}. Other commands are described
+%in \sectionref{sec:jmlrutils}.
 %
 %\section{Structure}
 %
@@ -480,8 +492,43 @@
 %
 %See the \ctandoc{natbib} for further details.
 %
-%\section{Figures and Tables}
+%\section{\styfmt{jmlrutils} supplementary package}
+%\label{sec:jmlrutils}
 %
+%The \sty{jmlrutils} package is automatically loaded by the
+%\clsfmt{jmlr} class but may be used with other classes.
+%
+%\subsection{Package Options}
+%
+%The following options may be passed to the \styfmt{jmlrutils}
+%package if it is to be used without the \clsfmt{jmlr} class.
+%\begin{description}
+%\item[\pkgopt{maths}] Define the commands \cs{set} and \cs{oldvec}
+%and redefine \cs{vec}. This will also automatically load the
+%\sty{amsmath} package. (Default.)
+%\item[\pkgopt{nomaths}] Don't define \cs{set} and \cs{oldvec} 
+%and don't redefine \cs{vec}.
+%\item[\pkgopt{theorems}] Define the theorem commands and
+%environments listed in \sectionref{sec:theorems}. (Default.)
+%\item[\pkgopt{notheorems}] Don't define the theorem commands and
+%environments.
+%\item[\pkgopt{subfloats}] Define the sub-figure and sub-table
+%commands listed in \sectionref{sec:subfloats}. (Default.)
+%\item[\pkgopt{nosubfloats}] Don't define the sub-figure and
+%sub-table commands.
+%\end{description}
+%The non-default options are provided when \styfmt{jmlrutils} is
+%loaded without the \clsfmt{jmlr} class.
+%Don't try passing the non-default options to \styfmt{jmlrutils} if
+%you are using the \clsfmt{jmlr} class as this could interfere with
+%the build process for the proceedings or book.
+%
+%The \styfmt{jmlrutils} package doesn't recognise any of the
+%\clsfmt{jmlr} class options (such as \pkgopt{tablecaption}).
+%
+%\subsection{Figures and Tables}
+%\label{sec:floats}
+%
 %Floats, such as figures, tables and algorithms, are moving objects
 %and are supposed to float to the nearest convenient location.
 %Please don't force them to go in a particular place. In general
@@ -507,13 +554,13 @@
 %\caption{A Sample Caption With Some \emph{Emphasized Words}.}
 %\end{verbatim}
 %
-%The \clsfmt{jmlr} class provides the following command for displaying
+%The \styfmt{jmlrutils} package provides the following command for displaying
 %the contents of a figure or table:
 %\begin{definition}[\DescribeMacro{\floatconts}]
 %\cs{floatconts}\marg{label}\marg{caption command}\marg{contents}
 %\end{definition}
 %This ensures that the caption is correctly positioned and that
-%the contents are centered. For example:
+%the contents are centred. For example:
 %\begin{verbatim}
 %\begin{table}[htbp]
 %\floatconts
@@ -527,6 +574,11 @@
 %  }
 %\end{table}
 %\end{verbatim}
+%If the \clsfmt{jmlr} class is used, the table caption (when used
+%with \cs{floatconts}) will obey the \clsopt{tablecaption} class option,
+%otherwise it will be placed above the table contents. Within the
+%\env{figure} environment, \cs{floatconts} will put the caption below
+%the contents. This command may be used within other floats.
 %
 %The \clsfmt{jmlr} class automatically loads \sty{graphicx} which
 %defines:
@@ -534,6 +586,10 @@
 %\cs{includegraphics}\oarg{options}\marg{file name}
 %\end{definition}
 %where \meta{options} is a comma-separated list of options.
+%If you are using \styfmt{jmlrutils} with another class you need to load 
+%\sty{graphicx} in order to use this command. See the documentation
+%for the \sty{graphicx} package for further details of this command
+%and other provided commands.
 %
 %For example, suppose you have an image called 
 %\texttt{mypic.png} in a subdirectory called \texttt{images}:
@@ -547,14 +603,15 @@
 %\end{verbatim}
 %
 %Note that you shouldn't specify the file extension when including
-%the image. It's helpful if you can also provide a grayscale
-%version of color images. This should be labeled as the color
-%image but with \texttt{-gray} immediately before the extension.
-%(The extension need not be the same as that of the color image.)
-%For example, if you have an image called \texttt{mypic.pdf}, the
-%grayscale can be called \texttt{mypic-gray.pdf}, 
-%\texttt{mypic-gray.png} or \texttt{mypic-gray.jpg}.
-%See \sectionref{sec:color} for further details.
+%the image when using the \clsfmt{jmlr} class. It's helpful if you
+%can also provide a grayscale version of colour images. This should be
+%labelled as the colour image but with \texttt{-gray} immediately
+%before the extension.  (The extension need not be the same as that
+%of the colour image.) For example, if you have an image called
+%\texttt{mypic.pdf}, the grayscale can be called
+%\texttt{mypic-gray.pdf}, \texttt{mypic-gray.png} or
+%\texttt{mypic-gray.jpg}.  See \sectionref{sec:color} for further
+%details.
 %
 %\begin{definition}[\DescribeMacro{\includeteximage}]
 %\cs{includeteximage}\oarg{options}\marg{file name}
@@ -564,14 +621,19 @@
 %The optional argument is a key=value comma-separated list
 %where the keys are a subset of those provided by 
 %\linebreak\cs{includegraphics}. The main keys are: \texttt{width},
-%\texttt{height}, \texttt{scale} and \texttt{angle}.
+%\texttt{height}, \texttt{scale} and \texttt{angle}. Some
+%of the keys specific to image files (such as the bounding box 
+%and type keys) do nothing with \cs{includeteximage}.
 %
-%\subsection{Sub-Figures and Sub-Tables}
+%\subsubsection{Sub-Figures and Sub-Tables}
+%\label{sec:subfloats}
 %
 %The \sty{subfig} package causes a problem for \clsfmt{jmlrbook} so
 %the \clsfmt{jmlr} class will give an error if it is used. Therefore
 %the \clsfmt{jmlr} class provides its own commands for including
-%sub-figures and sub-tables.
+%sub-figures and sub-tables. If you aren't using the \clsfmt{jmlr}
+%class, you can prevent \styfmt{jmlrutils} from defining these
+%commands with the \pkgopt{nosubfloats} package option.
 %
 %\begin{definition}[\DescribeMacro{\subfigure}]
 %\cs{subfigure}\oarg{title}\oarg{valign}\marg{contents}
@@ -611,19 +673,23 @@
 %This is an analogous command for sub-tables. The default value
 %for \meta{valign} is \texttt{t}.
 %
-%\section{Algorithms}
+%\subsection{Algorithms}
+%The \clsfmt{jmlr} class automatically loads the \sty{algorithm2e}
+%package. If you are using \styfmt{jmlrutils} with another class, you
+%will need to load \sty{algorithm2e} if you want to use the
+%\env{algorithm} and \env{algorithm2e} environments described below.
 %
 %\begin{definition}[\DescribeEnv{algorithm}]
-%\cs{begin}\{algorithm\}\\
+%\cs{begin}\{algorithm\}\oarg{placement}\\
 %\meta{contents}\\
 %\cs{end}\{algorithm\}
 %\end{definition}
 %Enumerated textual algorithms can be displayed using the 
-%\envfmt{algorithm} environment. Within this environment, use
-%\ics{caption} to set the caption (and \ics{label} to cross-reference
-%it). Within the body of the environment you can use the
-%\env{enumerate} environment.
+%\envfmt{algorithm} environment. 
+%The optional argument is as for \env{figure} and \env{table}.
 %
+%Within the body of the
+%environment you can use the \env{enumerate} environment.
 %\begin{definition}[\DescribeEnv{enumerate*}]
 %\cs{begin}\{enumerate*\}\\
 %\cs{item} \meta{text}\\
@@ -632,9 +698,13 @@
 %\end{definition}
 %If you want to have nested \env{enumerate} environments but you want
 %to keep the same numbering throughout the algorithm, you can use the
-%\envfmt{enumerate*} environment, provided by the \clsfmt{jmlr}
-%class. For example:
+%\envfmt{enumerate*} environment, provided by the \styfmt{jmlrutils}
+%package. For example:
 %\begin{verbatim}
+%\begin{algorithm}
+%\floatconts{alg:path}%label
+%{\caption{Shortest Path}}% caption
+%{% contents
 %\begin{enumerate*}
 %  \item Set the label of vertex $s$ to 0
 %  \item Set $i=0$
@@ -652,6 +722,7 @@
 %    \end{enumerate*}
 %  \end{enumerate*}
 %\end{enumerate*}
+%}
 %\end{algorithm}
 %\end{verbatim}
 %
@@ -668,8 +739,8 @@
 %\begin{algorithm2e}
 %\caption{Computing Net Activation}
 %\label{alg:net}
-%\dontprintsemicolon
-%\linesnumbered
+%\DontPrintSemicolon
+%\LinesNumbered
 %\KwIn{$x_1, \ldots, x_n, w_1, \ldots, w_n$}
 %\KwOut{$y$, the net activation}
 %$y\leftarrow 0$\;
@@ -681,7 +752,7 @@
 %
 %See the \ctandoc{algorithm2e} for more details.
 %
-%\section{Description Lists}
+%\subsection{Description Lists}
 %
 %\begin{definition}[\DescribeEnv{altdescription}]
 %\cs{begin}\{altdescription\}\marg{widest label}\\
@@ -699,9 +770,16 @@
 %\end{altdescription}
 %\end{verbatim}
 %
-%\section{Theorems, Lemmas etc}
+%\subsection{Theorems, Lemmas etc}
+%\label{sec:theorems}
 %
-%The \clsfmt{jmlr} class provides the following theorem-like
+%The \clsfmt{jmlrbook} class doesn't work well with common theorem
+%packages, so \styfmt{jmlrutils} provides theorem code that won't
+%conflict with \clsfmt{jmlrbook}. If you're using \styfmt{jmlrutils}
+%without the \clsfmt{jmlr} class, you can prevent the definition of
+%these commands with the \pkgopt{notheorems} package option.
+%
+%The \styfmt{jmlrutils} package provides the following theorem-like
 %environments: \env{theorem}, \env{example}, \env{lemma},
 %\env{proposition}, \env{remark}, \env{corollary}, \env{definition},
 %\env{conjecture} and \env{axiom}. Within the body of those
@@ -778,11 +856,11 @@
 %\end{note}
 %\end{verbatim}
 %
-%\section{Cross-Referencing}
+%\subsection{Cross-Referencing}
 %\label{sec:crossref}
 %
 %Always use \ics{label} when cross-referencing, rather than writing
-%the number explicitly. The \clsfmt{jmlr} class provides some 
+%the number explicitly. The \styfmt{jmlrutils} package provides some 
 %convenience commands to assist referencing. These commands,
 %described below, can all take a comma-separated list of labels.
 %
@@ -880,23 +958,42 @@
 %\end{definition}
 %Used to refer to an example or multiple examples.
 %
-%\section{Mathematics}
+%\subsection{Mathematics}
 %
-%The \clsfmt{jmlr} class loads the \sty{amsmath} package so you can use
-%any of the commands and environments defined in that package.  A
-%brief summary of some of the more common commands and environments
-%is provided here.  See the \ctandoc{amsmath} for further details.
+%The \clsfmt{jmlr} class loads the \sty{amsmath} package so you can
+%use any of the commands and environments defined in that package.
+%The \styfmt{jmlrutils} package will load \sty{amsmath} if the
+%default \pkgopt{maths} package option is used but won't load
+%\sty{amsmath} if the \pkgopt{nomaths} option is used. A brief
+%summary of some of the more common commands and environments is
+%provided here.  See the \ctandoc{amsmath} for further details.
 %
 %\begin{definition}[\DescribeMacro{\set}]
-%\cs{set}\marg{text}
+%\cs{set}\marg{maths}
 %\end{definition}
 %In addition to the commands provided by \sty{amsmath}, the
-%\clsfmt{jmlr} class also provides the \cs{set} command which can
+%\styfmt{jmlrutils} package also provides the \cs{set} command which can
 %be used to typeset a set. For example:
 %\begin{verbatim}
 %The universal set is denoted $\set{U}$
 %\end{verbatim}
+%This command won't be provided if the \pkgopt{nomaths} option is
+%used.
 %
+%\begin{definition}[\DescribeMacro{\vec}]
+%\cs{vec}\marg{maths}
+%\end{definition}
+%The \cs{vec} command is redefined by \styfmt{jmlrutils} to use
+%\cs{boldsymbol}, which is provided by \sty{amsmath}.
+%(This command won't be redefined if the \pkgopt{nomaths} option is
+%used.) If you require
+%the original \cs{vec}, you can access it with:
+%\begin{definition}[\DescribeMacro{\orgvec}]
+%\cs{orgvec}\marg{maths}
+%\end{definition}
+%This command won't be provided if the \pkgopt{nomaths} option is
+%used.
+%
 %Unnumbered single-line equations should be displayed using
 %\cs{[} and \cs{]}. For example:
 %\begin{verbatim}
@@ -909,6 +1006,10 @@
 %\cos^2\theta + \sin^2\theta \equiv 1
 %\end{equation}
 %\end{verbatim}
+%The above are provided by the \LaTeX\ kernel but may be adjusted by
+%packages such as \sty{amsmath}. The commands and environments below
+%are provided by \sty{amsmath}.
+%
 %Multi-lined numbered equations should be displayed using the
 %\env{align} environment. For example:
 %\begin{verbatim}
@@ -1009,7 +1110,8 @@
 %need to modify your code. The \clsfmt{jmlr} class checks for
 %the existence of the grayscale version if it is print mode 
 %(provided you have used \ics{includegraphics} and haven't
-%specified the file extension).
+%specified the file extension). This check is performed by code
+%provided by the \clsfmt{jmlr} class not the \styfmt{jmlrutils} package.
 %
 %\begin{definition}[\DescribeMacro{\ifprint}]
 %\cs{ifprint}\marg{true part}\marg{false part}
@@ -1041,8 +1143,10 @@
 %\urlfootref{http://www.tex.ac.uk/faq}{UK TUG FAQ}.
 %
 %If you are unfamiliar or just getting started with \LaTeX, there's
-%a list of on-line introductions to \LaTeX\ at:
+%a list of on-line introductions to \LaTeX\ at
 %\url{http://www.tex.ac.uk/cgi-bin/texfaq2html?label=man-latex}
+%or have a look at 
+%\href{http://www.dickimaw-books.com/latex/novices}{\LaTeX\ for Complete Novices}.
 %
 %There are also forums, mailing lists and newsgroups. For example,
 %\TeX\ on StackExchange (\url{http://tex.stackexchange.com/}),
@@ -1088,7 +1192,7 @@
 %compile as stand-alone documents (and run Bib\TeX\ where
 %necessary). You can use the \app{makejmlrbookgui} application to compile
 %the book. See 
-%\url{http://www.dickimaw-books.com/apps/makejmlrbookgui/} for details.
+%\url{http://www.dickimaw-books.com/software/makejmlrbookgui/} for details.
 %
 %\section{\clsfmt{jmlrbook} Class Options}
 %\begin{description}
@@ -1626,7 +1730,7 @@
 %The \app{makejmlrbookgui} application provides some diagnostic
 %tools, which can help detect some common problems. It's manual also
 %has a
-%\href{http://www.dickimaw-books.com/apps/makejmlrbookgui/manual/troubleshooting.html}{troubleshooting
+%\href{http://www.dickimaw-books.com/software/makejmlrbookgui/manual/troubleshooting.html}{troubleshooting
 %section}.
 %
 %\StopEventually{\clearpage\phantomsection
@@ -1638,6 +1742,923 @@
 %\chapter{The Code}
 %\iffalse
 %    \begin{macrocode}
+%<*jmlrutils.sty>
+%    \end{macrocode}
+%\fi
+%\section{jmlrutils.sty Code}
+%Non-class dependent code. This package is automatically loaded by
+%\cls{jmlr} but may be used with other classes.
+%    \begin{macrocode}
+\ProvidesPackage{jmlrutils}[2017/08/01]
+%    \end{macrocode}
+% Package options:
+%\begin{macro}{\ifjmlrutilsmaths}
+%Determine if the maths commands should be provided.
+%    \begin{macrocode}
+\newif\ifjmlrutilsmaths
+\jmlrutilsmathstrue
+%    \end{macrocode}
+%\end{macro}
+%    \begin{macrocode}
+\DeclareOption{maths}{\jmlrutilsmathstrue}
+\DeclareOption{nomaths}{\jmlrutilsmathsfalse}
+%    \end{macrocode}
+%
+%\begin{macro}{\ifjmlrutilstheorems}
+%Determine if the theorem environments should be provided.
+%    \begin{macrocode}
+\newif\ifjmlrutilstheorems
+\jmlrutilstheoremstrue
+%    \end{macrocode}
+%\end{macro}
+%    \begin{macrocode}
+\DeclareOption{theorems}{\jmlrutilstheoremstrue}
+\DeclareOption{notheorems}{\jmlrutilstheoremsfalse}
+%    \end{macrocode}
+%
+%\begin{macro}{\ifjmlrutilssubfloats}
+%Determine if the sub-floats should be provided.
+%    \begin{macrocode}
+\newif\ifjmlrutilssubfloats
+\jmlrutilssubfloatstrue
+%    \end{macrocode}
+%\end{macro}
+%    \begin{macrocode}
+\DeclareOption{subfloats}{\jmlrutilssubfloatstrue}
+\DeclareOption{nosubfloats}{\jmlrutilssubfloatsfalse}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\ProcessOptions
+%    \end{macrocode}
+% Requires \sty{etoolbox}:
+%    \begin{macrocode}
+\RequirePackage{etoolbox}
+%    \end{macrocode}
+%If the maths commands are needed, load \sty{amsmath}.
+%    \begin{macrocode}
+\ifjmlrutilsmaths
+  \RequirePackage{amsmath}
+\fi
+%    \end{macrocode}
+% The conditional \cs{iftablecaptiontop} will already have been
+% defined by the \cls{jmlr} class, so only needs to be defined
+% if not already done.
+%\begin{macro}{\iftablecaptiontop}
+%    \begin{macrocode}
+\@ifundefined{iftablecaptiontop}
+{\newif\iftablecaptiontop
+\tablecaptiontoptrue}
+{}
+%    \end{macrocode}
+%\end{macro}
+%
+%\subsection{Cross-Referencing}
+% Convenient macros for cross-referencing.
+%    \begin{macrocode}
+\newcommand*{\@jmlr at reflistsep}{, }
+\newcommand*{\@jmlr at reflistlastsep}{ and }
+\newcommand*{\sectionrefname}{Section}
+\newcommand*{\sectionsrefname}{Sections}
+\newcommand*{\equationrefname}{Equation}
+\newcommand*{\equationsrefname}{Equations}
+\newcommand*{\tablerefname}{Table}
+\newcommand*{\tablesrefname}{Tables}
+\newcommand*{\figurerefname}{Figure}
+\newcommand*{\figuresrefname}{Figures}
+\newcommand*{\algorithmrefname}{Algorithm}
+\newcommand*{\algorithmsrefname}{Algorithms}
+\newcommand*{\theoremrefname}{Theorem}
+\newcommand*{\theoremsrefname}{Theorems}
+\newcommand*{\lemmarefname}{Lemma}
+\newcommand*{\lemmasrefname}{Lemmas}
+\newcommand*{\remarkrefname}{Remark}
+\newcommand*{\remarksrefname}{Remarks}
+\newcommand*{\corollaryrefname}{Corollary}
+\newcommand*{\corollarysrefname}{Corollaries}
+\newcommand*{\definitionrefname}{Definition}
+\newcommand*{\definitionsrefname}{Definitions}
+\newcommand*{\conjecturerefname}{Conjecture}
+\newcommand*{\conjecturesrefname}{Conjectures}
+\newcommand*{\axiomrefname}{Axiom}
+\newcommand*{\axiomsrefname}{Axioms}
+\newcommand*{\examplerefname}{Example}
+\newcommand*{\examplesrefname}{Examples}
+\newcommand*{\appendixrefname}{Appendix}
+\newcommand*{\appendixsrefname}{Appendices}
+\newcommand*{\partrefname}{Part}
+\newcommand*{\partsrefname}{Parts}
+%    \end{macrocode}
+%\begin{macro}{\objectref}
+% Cross-reference a particular structural element. The first
+% argument is the list of labels, the second argument is a
+% control sequence containing the singular tag, the third
+% argument a control sequence containing the plural tag,
+% the fourth argument is text to go before the reference number,
+% e.g.\ an opening bracket, and the fifth argument is text
+% to go after the reference number, e.g.\ a closing bracket.
+%\changes{1.24}{2017-08-01}{changed \cs{DeclareRobustCommand}
+%to \cs{newrobustcmd}}
+%    \begin{macrocode}
+\newrobustcmd*{\objectref}[5]{%
+  \let\@objectname\@empty
+  \def\@objectref{}%
+  \let\@prevsep\@empty
+  \@for\@thislabel:=#1\do{%
+    \toks@{\@prevsep}%
+    \protected at edef\@objectref{\@objectref\the\toks@
+      #4\ref{\@thislabel}#5}%
+    \ifx\@objectname\@empty
+      \let\@objectname#2% singular tag
+    \else
+      \let\@objectname#3% plural tag
+      \let\@prevsep\@jmlr at reflistsep
+    \fi
+  }%
+  \ifx\@objectname#3% plural tag
+    \let\@prevsep\@jmlr at reflistlastsep
+  \fi
+  \@objectname~\@objectref
+}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\sectionref}
+%    \begin{macrocode}
+\newcommand*{\sectionref}[1]{%
+  \objectref{#1}{\sectionrefname}{\sectionsrefname}{}{}}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\equationref}
+%    \begin{macrocode}
+\newcommand*{\equationref}[1]{%
+  \objectref{#1}{\equationrefname}{\equationsrefname}()}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\tableref}
+%    \begin{macrocode}
+\newcommand*{\tableref}[1]{%
+  \objectref{#1}{\tablerefname}{\tablesrefname}{}{}}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\figureref}
+%    \begin{macrocode}
+\newcommand*{\figureref}[1]{%
+  \objectref{#1}{\figurerefname}{\figuresrefname}{}{}}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\algorithmref}
+%    \begin{macrocode}
+\newcommand*{\algorithmref}[1]{%
+  \objectref{#1}{\algorithmrefname}{\algorithmsrefname}{}{}}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\theoremmref}
+%    \begin{macrocode}
+\newcommand*{\theoremref}[1]{%
+  \objectref{#1}{\theoremrefname}{\theoremsrefname}{}{}}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\lemmaref}
+%    \begin{macrocode}
+\newcommand*{\lemmaref}[1]{%
+  \objectref{#1}{\lemmarefname}{\lemmasrefname}{}{}}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\remarkref}
+%    \begin{macrocode}
+\newcommand*{\remarkref}[1]{%
+  \objectref{#1}{\remarkrefname}{\remarksrefname}{}{}}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\corollaryref}
+%    \begin{macrocode}
+\newcommand*{\corollaryref}[1]{%
+  \objectref{#1}{\corollaryrefname}{\corollarysrefname}{}{}}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\definitionref}
+%    \begin{macrocode}
+\newcommand*{\definitionref}[1]{%
+  \objectref{#1}{\definitionrefname}{\definitionsrefname}{}{}}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\conjectureref}
+%    \begin{macrocode}
+\newcommand*{\conjectureref}[1]{%
+  \objectref{#1}{\conjecturerefname}{\conjecturesrefname}{}{}}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\axiomref}
+%    \begin{macrocode}
+\newcommand*{\axiomref}[1]{%
+  \objectref{#1}{\axiomrefname}{\axiomsrefname}{}{}}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\exampleref}
+%    \begin{macrocode}
+\newcommand*{\exampleref}[1]{%
+  \objectref{#1}{\examplerefname}{\examplesrefname}{}{}}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\appendixref}
+%    \begin{macrocode}
+\newcommand*{\appendixref}[1]{%
+  \objectref{#1}{\appendixrefname}{\appendixsrefname}{}{}}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\partref}
+%    \begin{macrocode}
+\newcommand*{\partref}[1]{%
+  \objectref{#1}{\partrefname}{\partsrefname}{}{}}
+%    \end{macrocode}
+%\end{macro}
+%
+%\subsection{Figures, Tables and Algorithms}
+%
+%\begin{macro}{\floatconts}
+% The first argument is the label, the second argument contains the
+% caption (using \cs{caption}) and the third argument contains the
+% contents of the float
+%    \begin{macrocode}
+\newcommand{\floatconts}[3]{%
+  \@ifundefined{\@captype conts}{\tableconts{#1}{#2}{#3}}%
+  {\csname\@captype conts\endcsname{#1}{#2}{#3}}%
+}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\tableconts}
+%This will already have been defined if the \clsfmt{jmlr} class was
+%loaded.
+%    \begin{macrocode}
+\providecommand{\tableconts}[3]{%
+  #2\label{#1}\vskip\baselineskip
+  {\centering #3\par}%
+}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\figureconts}
+%    \begin{macrocode}
+\newcommand{\figureconts}[3]{%
+  {\centering #3\par}%
+  \vskip\baselineskip
+  #2\label{#1}%
+}
+%    \end{macrocode}
+%\end{macro}
+%
+%The following macro and environment assume that \sty{algorithm2e}
+%has been loaded (which is done by the \cls{jmlr} class). If the
+%\styfmt{jmlrutils} package is loaded without the \cls{jmlr} class,
+%the \sty{algorithm2e} package will have to be explicitly loaded.
+%\begin{macro}{\algocfconts}
+%\changes{1.09}{2010/12/01}{new}
+%Command used by \cs{floatconts} to display the caption contents.
+%    \begin{macrocode}
+\newcommand{\algocfconts}[3]{%
+  \@algocf at pre@ruled
+  #2\label{#1}\kern2pt\hrule height.8pt depth0pt\kern2pt%
+  #3\@algocf at pre@ruled
+}
+%    \end{macrocode}
+%\end{macro}
+%
+% The \env{algorithm} environment should float like a figure or table.
+% It should use the same counter as the \env{algorithm2e} environment.
+%\changes{1.09}{2010/12/01}{caption set up so that it doesn't use a
+%box}
+%    \begin{macrocode}
+\newenvironment{algorithm}[1][htbp]%
+{%
+  \ifundef{\algocf}%
+  {`algorithm2e' package is required if you want to
+   use the algorithm environment}%
+  {}%
+  \begin{algocf}[#1]%
+  \renewcommand\@makecaption[2]{%
+    \hskip\AlCapHSkip
+    \parbox[t]{\hsize}{\algocf at captiontext{##1}{##2}}%
+  }%
+}%
+{%
+  \end{algocf}%
+}
+%    \end{macrocode}
+%
+%\begin{macro}{\@jmlr at ifgraphicxloaded}
+%    \begin{macrocode}
+\AtBeginDocument{%
+ \@ifpackageloaded{graphicx}%
+ {\let\@jmlr at ifgraphicxloaded\@firstoftwo}%
+ {\let\@jmlr at ifgraphicxloaded\@secondoftwo}%
+}
+%    \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\includeteximage}
+% Provide a command like \cs{includegraphics} that includes a 
+% file containing \LaTeX\ picture code (e.g.\ \sty{pgf}).
+%    \begin{macrocode}
+\newcommand*{\includeteximage}[2][]{%
+  \@jmlr at ifgraphicxloaded
+  {%
+    \def\Gin at req@sizes{%
+      \Gin at req@height\Gin at nat@height
+      \Gin at req@width\Gin at nat@width}%
+    \begingroup
+      \let\input at path\Ginput at path
+      \IfFileExists{#2}%
+      {%
+        \toks@{\input{#2}}%
+        \ifstrempty{#1}
+        {}%
+        {%
+          \@tempswatrue
+          \setkeys{Gin}{#1}%
+          \Gin at esetsize
+        }%
+        \the\toks@
+      }%
+      {\@warning{File `#2' not found}}%
+    \endgroup
+  }%
+  {\PackageError{jmlrutils}{`graphicx' package is required
+   if you want to use \string\includeteximage}{}}%
+}
+%    \end{macrocode}
+%\end{macro}
+%
+%Sub floats.
+%    \begin{macrocode}
+\ifjmlrutilssubfloats
+%    \end{macrocode}
+% The \sty{subfig} package breaks jmlrbook.cls, so define \ics{subfig}
+% here. (This is fairly primitive.)
+%\begin{macro}{\c at subfigure}
+% Define subfigure counter:
+%    \begin{macrocode}
+  \newcounter{subfigure}
+  \@addtoreset{subfigure}{figure}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\thesubfigure}
+%    \begin{macrocode}
+  \renewcommand*{\thesubfigure}{\alph{subfigure}}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\p at subfigure}
+%    \begin{macrocode}
+  \renewcommand*{\p at subfigure}{\expandafter\@p at subfigure}
+  \newcommand*{\@p at subfigure}[1]{%
+    \protect\@subfigurelabel{\thefigure}{\thesubfigure}%
+  }
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@subfigurelabel}
+% Define how label appears.
+%    \begin{macrocode}
+  \newcommand*\@subfigurelabel[2]{#1\subfigurelabel{#2}}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\subfigref}
+% Reference the sub-figure without including the figure number.
+%    \begin{macrocode}
+  \newcommand*\@subfigref[1]{%
+    {%
+      \def\@subfigurelabel##1##2{\subfigurelabel{##2}}%
+      \ref{#1}%
+    }%
+  }
+  \newcommand*{\subfigref}[1]{%
+    \let\@objectname\@empty
+    \def\@objectref{}%
+    \let\@prevsep\@empty
+    \@for\@thislabel:=#1\do{%
+      \toks@{\@prevsep}%
+      \protected at edef\@objectref{\@objectref\the\toks@
+        \protect\@subfigref{\@thislabel}}%
+        \ifx\@objectname\@empty
+	  \let\@objectname\@nil
+        \else
+	  \let\@objectname\relax
+          \let\@prevsep\@jmlr at reflistsep
+        \fi
+    }%
+    \ifx\@objectname\relax
+      \let\@prevsep\@jmlr at reflistlastsep
+    \fi
+    \@objectref
+  }
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\subfigurelabel}
+%    \begin{macrocode}
+  \newcommand*{\subfigurelabel}[1]{(\emph{#1})}
+%    \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@subfloatcapbox}
+% Box to store subfloat caption.
+%    \begin{macrocode}
+  \newsavebox\@subfloatcapbox
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@subfloatcontsbox}
+% Box to store subfloat contents.
+%    \begin{macrocode}
+  \newsavebox\@subfloatcontsbox
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\subfigure}
+%    \begin{macrocode}
+  \newcommand*{\subfigure}[1][]{%
+    \bgroup
+    \def\@subfigcap{#1}%
+    \@subfigure
+  }
+%    \end{macrocode}
+%\changes{1.09}{2010/12/01}{Added check to determine whether the
+%subfigure caption is wider than the subfigure}
+%    \begin{macrocode}
+  \newcommand*{\@subfigure}[2][b]{%
+    \advance\c at figure by 1\relax
+    \refstepcounter{subfigure}%
+    \sbox\@subfloatcapbox{\subfigurelabel{\thesubfigure}%
+    \ifx\@subfigcap\@empty
+    \else
+      \space\@subfigcap
+    \fi}%
+    \sbox\@subfloatcontsbox{#2}%
+    \settowidth{\@tempdima}{\usebox\@subfloatcontsbox}%
+    \settowidth{\@tempdimb}{\usebox\@subfloatcapbox}%
+    \ifdim\@tempdimb>\@tempdima
+      \settowidth\@tempdimb{\subfigurelabel{\thesubfigure}\space}%
+      \addtolength{\@tempdima}{-\@tempdimb}%
+      \sbox\@subfloatcapbox{\subfigurelabel{\thesubfigure}\space
+        \parbox[t]{\@tempdima}{\@subfigcap}}%
+    \fi
+    \begin{tabular}[#1]{@{}c@{}}%
+    \usebox\@subfloatcontsbox\\\usebox\@subfloatcapbox
+    \end{tabular}%
+    \egroup
+  }
+%    \end{macrocode}
+%\end{macro}
+%
+% Sub-tables:
+%\begin{macro}{\c at subtable}
+% Define subtable counter:
+%    \begin{macrocode}
+  \newcounter{subtable}
+  \@addtoreset{subtable}{table}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\thesubtable}
+%    \begin{macrocode}
+  \renewcommand*{\thesubtable}{\alph{subtable}}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\p at subtable}
+%    \begin{macrocode}
+  \renewcommand*{\p at subtable}{\expandafter\@p at subtable}
+  \newcommand*{\@p at subtable}[1]{%
+    \protect\@subtablelabel{\thetable}{\thesubtable}%
+  }
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@subtablelabel}
+% Define how label appears.
+%    \begin{macrocode}
+  \newcommand*\@subtablelabel[2]{#1\subtablelabel{#2}}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\subtabref}
+% Reference the sub-table without including the table number.
+%    \begin{macrocode}
+  \newcommand*\@subtabref[1]{%
+    {%
+      \def\@subtablelabel##1##2{\subtablelabel{##2}}%
+      \ref{#1}%
+    }%
+  }
+  \newcommand*{\subtabref}[1]{%
+    \let\@objectname\@empty
+    \def\@objectref{}%
+    \let\@prevsep\@empty
+    \@for\@thislabel:=#1\do{%
+      \toks@{\@prevsep}%
+      \protected at edef\@objectref{\@objectref\the\toks@
+        \protect\@subtabref{\@thislabel}}%
+        \ifx\@objectname\@empty
+	  \let\@objectname\@nil
+        \else
+	  \let\@objectname\relax
+          \let\@prevsep\@jmlr at reflistsep
+        \fi
+    }%
+    \ifx\@objectname\relax
+      \let\@prevsep\@jmlr at reflistlastsep
+    \fi
+    \@objectref
+  }
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\subtablelabel}
+%    \begin{macrocode}
+  \newcommand*{\subtablelabel}[1]{(\emph{#1})}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\subtable}
+%    \begin{macrocode}
+  \newcommand*{\subtable}[1][]{%
+    \def\@subtabcap{#1}%
+    \@subtable
+  }
+%    \end{macrocode}
+%\changes{1.09}{2010/12/01}{Added check to determine whether the
+%subtable caption is wider than the subtable}
+%    \begin{macrocode}
+  \newcommand*{\@subtable}[2][t]{%
+    \refstepcounter{subtable}%
+    \sbox\@subfloatcapbox{\subtablelabel{\thesubtable}%
+    \ifx\@subtabcap\@empty
+    \else
+      \space\@subtabcap
+    \fi}%
+    \sbox\@subfloatcontsbox{#2}%
+    \settowidth{\@tempdima}{\usebox\@subfloatcontsbox}%
+    \settowidth{\@tempdimb}{\usebox\@subfloatcapbox}%
+    \ifdim\@tempdimb>\@tempdima
+      \settowidth\@tempdimb{\subtablelabel{\thesubtable}\space}%
+      \addtolength{\@tempdima}{-\@tempdimb}%
+      \sbox\@subfloatcapbox{\subtablelabel{\thesubtable}\space
+        \parbox[t]{\@tempdima}{\@subtabcap}}%
+    \fi
+    \begin{tabular}[#1]{@{}c@{}}%
+    \usebox\@subfloatcapbox\\\usebox\@subfloatcontsbox
+    \end{tabular}
+  }
+%    \end{macrocode}
+%\end{macro}
+%End of sub-floats.
+%    \begin{macrocode}
+\fi
+%    \end{macrocode}
+%
+%\subsection{General Markup}
+%Provide maths command if required.
+%    \begin{macrocode}
+\ifjmlrutilsmaths
+%    \end{macrocode}
+%\begin{macro}{\set}
+%    \begin{macrocode}
+  \newcommand*{\set}[1]{\ensuremath{\mathcal{#1}}}
+%    \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\orgvec}
+%\changes{1.21}{2015-02-24}{new}
+%Keep a copy of original \cs{vec} in case it's wanted.
+%    \begin{macrocode}
+  \let\orgvec\vec
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\vec}
+% Redefine \cs{vec} to produce a bold symbol. The \sty{amsmath}
+%package is required for this.
+%    \begin{macrocode}
+  \renewcommand*{\vec}[1]{\boldsymbol{#1}}
+%    \end{macrocode}
+%\end{macro}
+%End of maths commands.
+%    \begin{macrocode}
+\fi
+%    \end{macrocode}
+%
+%\begin{environment}{enumerate*}
+% Define an enumerate style environment where the nested environments
+% all use the same counter. It uses the enumi counter.
+%    \begin{macrocode}
+\newenvironment{enumerate*}%
+{%
+  \ifnum\@enumdepth=0\relax
+    \setcounter{enumi}{0}%
+  \fi
+  \ifnum\@enumdepth>\thr@@
+    \@toodeep
+  \else
+    \advance\@enumdepth\@ne
+    \def\@enumctr{enumi}%
+    \list
+      {\labelenumi}%
+      {\@nmbrlisttrue\def\@listctr{enumi}%
+       \def\makelabel##1{\hss\llap{##1}}}%
+  \fi
+}%
+{\endlist}
+%    \end{macrocode}
+%\end{environment}
+%
+%\begin{environment}{altdescription}
+% Define a description like environment where the indent is
+% computed from the widest label. The optional argument is 
+% the widest label.
+%    \begin{macrocode}
+\newenvironment{altdescription}[1]%
+  {\list{}%
+    {%
+      \settowidth{\labelwidth}{\altdescriptionlabel{#1}}%
+      \setlength{\labelsep}{15pt}%
+      \setlength{\leftmargin}{2\labelsep}%
+      \addtolength{\leftmargin}{\labelwidth}%
+      \setlength{\rightmargin}{\labelsep}%
+      \let\makelabel\altdescriptionlabel
+    }%
+  }%
+  {\endlist}
+
+\newcommand*{\altdescriptionlabel}[1]{\normalfont\bfseries #1\hfill}
+%    \end{macrocode}
+%\end{environment}
+%
+%\begin{macro}{\mailto}
+% Syntax: \cs{mailto}\marg{address}
+%    \begin{macrocode}
+\newcommand*{\mailto}[1]{\texttt{#1}}
+%    \end{macrocode}
+%\end{macro}
+%
+%\subsection{Proofs and Theorems}
+%    \begin{macrocode}
+\ifjmlrutilstheorems
+%    \end{macrocode}
+% This code is taken from jmlr2e.sty
+%\begin{macro}{\jmlrBlackBox}
+% End of proof marker.
+%\changes{1.24}{2017-08-01}{new}
+%This command was formerly called \cs{BlackBox} but has been renamed
+%in case of a clash with symbol packages.
+%    \begin{macrocode}
+  \newcommand{\jmlrBlackBox}{\rule{1.5ex}{1.5ex}}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\BlackBox}
+% Backward compatibility in case it was used explicitly.
+%    \begin{macrocode}
+  \providecommand{\BlackBox}{\jmlrBlackBox}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\jmlrQED}
+%\changes{1.21}{2015-02-24}{new}
+%\changes{1.24}{2017-08-01}{changed to use \cs{par}}
+%    \begin{macrocode}
+  \newcommand{\jmlrQED}{\hfill\jmlrBlackBox\par\bigskip}
+%    \end{macrocode}
+%\end{macro}
+%\begin{environment}{proof}
+% Proof environment
+%    \begin{macrocode}
+  \newenvironment{proof}%
+  {%
+   \par\noindent{\bfseries\upshape Proof\ }%
+  }%
+  {\jmlrQED}
+%    \end{macrocode}
+%\end{environment}
+%
+% Since \sty{theorem}, \sty{ntheorem} and \sty{amsthm} all cause
+% problems with the \cls{jmlr} and \cls{jmlrbook} classes,
+% this package provides a simple alternative.
+%
+%\begin{macro}{\theorembodyfont}
+%\changes{1.18}{2013-10-17}{new}
+%\begin{definition}
+%\cs{theorembodyfont}\marg{font declarations}
+%\end{definition}
+%    \begin{macrocode}
+  \newcommand*{\theorembodyfont}[1]{%
+    \renewcommand*{\@theorembodyfont}{#1}%
+  }
+  \newcommand*{\@theorembodyfont}{\normalfont\itshape}%
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\theoremheaderfont}
+%\changes{1.18}{2013-10-17}{new}
+%\begin{definition}
+%\cs{theoremheaderfont}\marg{font declarations}
+%\end{definition}
+%    \begin{macrocode}
+  \newcommand*{\theoremheaderfont}[1]{%
+    \renewcommand*{\@theoremheaderfont}{#1}%
+  }
+  \newcommand*{\@theoremheaderfont}{\normalfont\bfseries }%
+%    \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\theoremsep}
+%\changes{1.18}{2013-10-17}{new}
+%\begin{definition}
+%\cs{theoremsep}\marg{separation code}
+%\end{definition}
+%    \begin{macrocode}
+  \newcommand*{\theoremsep}[1]{%
+    \renewcommand*{\@theoremsep}{#1}%
+  }
+  \newcommand*{\@theoremsep}{}%
+%    \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\theorempostheader}
+%\changes{1.18}{2013-10-17}{new}
+%\begin{definition}
+%\cs{theorempostheader}\marg{text}
+%\end{definition}
+%    \begin{macrocode}
+  \newcommand*{\theorempostheader}[1]{%
+    \renewcommand*{\@theorempostheader}{#1}%
+  }
+  \newcommand*{\@theorempostheader}{}%
+%    \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\newtheorem}
+%\changes{1.18}{2013-10-17}{new}
+%    \begin{macrocode}
+  \let\jmlr at org@newtheorem\newtheorem
+  \renewcommand*{\newtheorem}{\@ifstar\jmlr at snewtheorem\jmlr at newtheorem}
+%    \end{macrocode}
+% Define starred version:
+%\begin{definition}
+%\cs{newtheorem*}\marg{env-name}\marg{title tag}
+%\end{definition}
+%    \begin{macrocode}
+  \newcommand*{\jmlr at snewtheorem}[2]{%
+    \cslet{jmlr at thm@#1 at body@font}{\@theorembodyfont}%
+    \cslet{jmlr at thm@#1 at header@font}{\@theoremheaderfont}%
+    \cslet{jmlr at thm@#1 at sep}{\@theoremsep}%
+    \cslet{jmlr at thm@#1 at postheader}{\@theorempostheader}%
+    \newenvironment{#1}%
+    {%
+      \trivlist
+        \item
+        [%
+          \hskip\labelsep{\csuse{jmlr at thm@#1 at header@font}#2%
+            \csuse{jmlr at thm@#1 at postheader}%
+          }%
+        ]%
+        \mbox{}\csuse{jmlr at thm@#1 at sep}%
+        \csuse{jmlr at thm@#1 at body@font}%
+    }%
+    {%
+      \endtrivlist
+    }%
+  }
+%    \end{macrocode}
+%\end{macro}
+% Unstarred version needs adjusting to take the style into account:
+%\begin{macro}{\@othm}
+%\changes{1.18}{2013-10-17}{new}
+%    \begin{macrocode}
+  \newcommand{\jmlr at newtheorem}[1]{%
+    \cslet{jmlr at thm@#1 at body@font}{\@theorembodyfont}%
+    \cslet{jmlr at thm@#1 at header@font}{\@theoremheaderfont}%
+    \cslet{jmlr at thm@#1 at sep}{\@theoremsep}%
+    \cslet{jmlr at thm@#1 at postheader}{\@theorempostheader}%
+    \jmlr at org@newtheorem{#1}%
+  }
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@xthm}
+%\changes{1.18}{2013-10-17}{new}
+%    \begin{macrocode}
+  \renewcommand*{\@xthm}[2]{%
+    \def\@jmlr at currentthm{#1}%
+    \@begintheorem{#2}{\csname the#1\endcsname}%
+    \ignorespaces
+  }
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@ythm}
+%\changes{1.18}{2013-10-17}{new}
+%    \begin{macrocode}
+  \def\@ythm#1#2[#3]{%
+    \def\@jmlr at currentthm{#1}%
+    \@opargbegintheorem{#2}{\csname the#1\endcsname}{#3}%
+    \ignorespaces
+  }
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@begintheorem}
+%\changes{1.18}{2013-10-17}{new}
+%    \begin{macrocode}
+  \renewcommand*{\@begintheorem}[2]{%
+    \ifdef{\@jmlr at currentthm}%
+    {%
+      \letcs{\jmlr at this@theoremheader}{jmlr at thm@\@jmlr at currentthm @header at font}%
+      \letcs{\jmlr at this@theorembody}{jmlr at thm@\@jmlr at currentthm @body at font}%
+      \letcs{\jmlr at this@theoremsep}{jmlr at thm@\@jmlr at currentthm @sep}%
+      \letcs{\jmlr at this@theorempostheader}%
+         {jmlr at thm@\@jmlr at currentthm @postheader}%
+    }%
+    {%
+      \let\jmlr at this@theorembody\@theorembodyfont
+      \let\jmlr at this@theoremheader\@theoremheaderfont
+      \let\jmlr at this@theoremsep\@theoremsep
+      \let\jmlr at this@theorempostheader\@theorempostheader
+    }%
+    \trivlist
+      \item
+       [%
+        \hskip\labelsep{\jmlr at this@theoremheader #1\ #2%
+           \jmlr at this@theorempostheader}%
+       ]%
+      \mbox{}\jmlr at this@theoremsep
+      \jmlr at this@theorembody
+  }
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@opargbegintheorem}
+%\changes{1.18}{2013-10-17}{new}
+%    \begin{macrocode}
+  \renewcommand*{\@opargbegintheorem}[3]{%
+    \ifdef{\@jmlr at currentthm}%
+    {%
+      \letcs{\jmlr at this@theoremheader}{jmlr at thm@\@jmlr at currentthm @header at font}%
+      \letcs{\jmlr at this@theorembody}{jmlr at thm@\@jmlr at currentthm @body at font}%
+      \letcs{\jmlr at this@theoremsep}{jmlr at thm@\@jmlr at currentthm @sep}%
+      \letcs{\jmlr at this@theorempostheader}%
+         {jmlr at thm@\@jmlr at currentthm @postheader}%
+    }%
+    {%
+      \let\jmlr at this@theorembody\@theorembodyfont
+      \let\jmlr at this@theoremheader\@theoremheaderfont
+      \let\jmlr at this@theoremsep\@theoremsep
+      \let\jmlr at this@theorempostheader\@theorempostheader
+    }%
+    \trivlist
+     \item[\hskip\labelsep{\jmlr at this@theoremheader #1\ #2\ (#3)%
+       \jmlr at this@theorempostheader}]%
+     \mbox{}\jmlr at this@theoremsep
+     \jmlr at this@theorembody
+  }
+%    \end{macrocode}
+%\end{macro}
+%
+%\begin{environment}{example}
+%    \begin{macrocode}
+  \newtheorem{example}{Example} 
+%    \end{macrocode}
+%\end{environment}
+%\begin{environment}{theorem}
+%    \begin{macrocode}
+  \newtheorem{theorem}{Theorem}
+%    \end{macrocode}
+%\end{environment}
+%\begin{environment}{lemma}
+%    \begin{macrocode}
+  \newtheorem{lemma}[theorem]{Lemma} 
+%    \end{macrocode}
+%\end{environment}
+%\begin{environment}{proposition}
+%    \begin{macrocode}
+  \newtheorem{proposition}[theorem]{Proposition} 
+%    \end{macrocode}
+%\end{environment}
+%\begin{environment}{remark}
+%    \begin{macrocode}
+  \newtheorem{remark}[theorem]{Remark}
+%    \end{macrocode}
+%\end{environment}
+%\begin{environment}{corollary}
+%    \begin{macrocode}
+  \newtheorem{corollary}[theorem]{Corollary}
+%    \end{macrocode}
+%\end{environment}
+%\begin{environment}{definition}
+%    \begin{macrocode}
+  \newtheorem{definition}[theorem]{Definition}
+%    \end{macrocode}
+%\end{environment}
+%\begin{environment}{conjecture}
+%    \begin{macrocode}
+  \newtheorem{conjecture}[theorem]{Conjecture}
+%    \end{macrocode}
+%\end{environment}
+%\begin{environment}{axiom}
+%    \begin{macrocode}
+  \newtheorem{axiom}[theorem]{Axiom}
+%    \end{macrocode}
+%\end{environment}
+% End of theorem definitions.
+%    \begin{macrocode}
+\fi
+%    \end{macrocode}
+%\iffalse
+%    \begin{macrocode}
+%</jmlrutils.sty>
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
 %<*jmlr.cls>
 %    \end{macrocode}
 %\fi
@@ -1649,7 +2670,7 @@
 % Declare class and required TeX format:
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{jmlr}[2017/03/09 v1.23 (NLCT) Journal of Machine Learning Research]
+\ProvidesClass{jmlr}[2017/08/01 v1.24 (NLCT) Journal of Machine Learning Research]
 %    \end{macrocode}
 %\changes{1.10}{2011-01-05}{hyperref now loaded by jmlr instead of
 %jmlrbook}
@@ -1706,15 +2727,45 @@
 \DeclareOptionX{final}{\setlength\overfullrule{0pt}}
 %    \end{macrocode}
 %\end{option}
+% Can't load \sty{jmlrutils} here but need the \cs{iftablecaptiontop}
+% conditional for the class options.
 %\begin{macro}{\iftablecaptiontop}
-% Determine if the table captions should go at the top.
 %\changes{1.07}{2010-06-17}{new}
 %    \begin{macrocode}
 \newif\iftablecaptiontop
 \tablecaptiontoptrue
+%    \end{macrocode}
+%\end{macro}
+% Provide table contents command that uses this conditional.
+% (The \sty{jmlrutils} package doesn't use it.)
+%\begin{macro}{\tableconts}
+%    \begin{macrocode}
+\newcommand{\tableconts}[3]{%
+  \iftablecaptiontop
+    #2\label{#1}\vskip\baselineskip
+    {\centering #3\par}%
+  \else
+    {\centering #3\par}%
+    \vskip\baselineskip
+    #2\label{#1}%
+  \fi
+}
+%    \end{macrocode}
+%\end{macro}
+% Determine if the table captions should go at the top.
+%\begin{option}{tablecaptiontop}
+%    \begin{macrocode}
 \DeclareOptionX{tablecaptiontop}{\tablecaptiontoptrue}
+%    \end{macrocode}
+%\end{option}
+%\begin{option}{tablecaptiontop}
+%    \begin{macrocode}
 \DeclareOptionX{tablecaptionbottom}{\tablecaptiontopfalse}
-
+%    \end{macrocode}
+%\end{option}
+%\begin{option}{tablecaption}
+%Key=value interface.
+%    \begin{macrocode}
 \define at choicekey{jmlr.cls}{tablecaption}[\val\nr]{top,bottom}{%
   \ifcase\nr\relax
     \tablecaptiontoptrue
@@ -1723,13 +2774,18 @@
   \fi
 }
 %    \end{macrocode}
-%\end{macro}
+%\end{option}
 %\begin{macro}{\ifjmlrhtml}
 % Determine if we are using \app{TeX4ht}. (Deprecated.)
+%This option should no longer be used. The PMLR have changed
+%the submission guidelines and the production editor should
+%no longer supply HTML files.
 %    \begin{macrocode}
 \newif\ifjmlrhtml
 \jmlrhtmlfalse
-\DeclareOptionX{html}{\jmlrhtmltrue}
+\DeclareOptionX{html}{%
+ \ClassWarning{jmlr}{html option is now deprecated}%
+ \jmlrhtmltrue}
 \DeclareOptionX{nohtml}{\jmlrhtmlfalse}
 %    \end{macrocode}
 %\end{macro}
@@ -1789,7 +2845,7 @@
 }
 %    \end{macrocode}
 %\end{macro}
-% This isn't an article for a workshop:
+% This is a journal (non JMLR W\&CP\slash PMLR) article:
 %    \begin{macrocode}
 \DeclareOptionX{nowcp}{\jmlrnowcp}
 %    \end{macrocode}
@@ -1880,7 +2936,8 @@
 \RequirePackage{natbib}
 \RequirePackage{graphicx}
 \RequirePackage{url}
-\RequirePackage[x11names]{xcolor}
+\PassOptionsToPackage{x11names}{xcolor}
+\RequirePackage{xcolor}
 %    \end{macrocode}
 % Allow old command names in the event that the proceedings contains
 % a mixture of papers that use old and new versions. (This means
@@ -1891,8 +2948,18 @@
 %\end{verbatim}
 % I don't know why, but it's outside the control of this class.
 %    \begin{macrocode}
-\RequirePackage[algo2e,ruled]{algorithm2e}
+\PassOptionsToPackage{algo2e,ruled}{algorithm2e}
+\RequirePackage{algorithm2e}
 %    \end{macrocode}
+% Set the algorithm margin to zero.
+%    \begin{macrocode}
+\setlength\algomargin{0pt}
+%    \end{macrocode}
+%Load \sty{jmlrutils} before \sty{hyperref}.
+%\changes{1.24}{??}{added \styfmt{jmlrutils}}
+%    \begin{macrocode}
+\RequirePackage{jmlrutils}
+%    \end{macrocode}
 % Do all the stuff that needs to be done before \sty{hyperref} is
 % loaded:
 %    \begin{macrocode}
@@ -2864,246 +3931,20 @@
 \def\belowstrut#1{\rule[-#1]{0in}{#1}\ignorespaces}
 %    \end{macrocode}
 %\begin{macro}{\acks}
-% Acknowledgments
+% Acknowledgements
 %    \begin{macrocode}
-\long\def\acks#1{\section*{Acknowledgments}#1}
+\newcommand{\acks}[1]{\section*{Acknowledgments}#1}
 %    \end{macrocode}
 %\end{macro}
 % Research Note
 %\begin{macro}{\researchnote}
 %    \begin{macrocode}
-\long\def\researchnote#1{\noindent {\LARGE\itshape Research Note} #1}
+\newcommand{\researchnote}[1]{\noindent {\LARGE\itshape Research Note} #1}
 %    \end{macrocode}
 %\end{macro}
 %
-%\begin{macro}{\set}
-%    \begin{macrocode}
-\newcommand*{\set}[1]{\ensuremath{\mathcal{#1}}}
-%    \end{macrocode}
-%\end{macro}
+%Other macros now moved to \sty{jmlrutils}.
 %
-% Convenient macros for cross-referencing.
-%    \begin{macrocode}
-\newcommand*{\@jmlr at reflistsep}{, }
-\newcommand*{\@jmlr at reflistlastsep}{ and }
-\newcommand*{\sectionrefname}{Section}
-\newcommand*{\sectionsrefname}{Sections}
-\newcommand*{\equationrefname}{Equation}
-\newcommand*{\equationsrefname}{Equations}
-\newcommand*{\tablerefname}{Table}
-\newcommand*{\tablesrefname}{Tables}
-\newcommand*{\figurerefname}{Figure}
-\newcommand*{\figuresrefname}{Figures}
-\newcommand*{\algorithmrefname}{Algorithm}
-\newcommand*{\algorithmsrefname}{Algorithms}
-\newcommand*{\theoremrefname}{Theorem}
-\newcommand*{\theoremsrefname}{Theorems}
-\newcommand*{\lemmarefname}{Lemma}
-\newcommand*{\lemmasrefname}{Lemmas}
-\newcommand*{\remarkrefname}{Remark}
-\newcommand*{\remarksrefname}{Remarks}
-\newcommand*{\corollaryrefname}{Corollary}
-\newcommand*{\corollarysrefname}{Corollaries}
-\newcommand*{\definitionrefname}{Definition}
-\newcommand*{\definitionsrefname}{Definitions}
-\newcommand*{\conjecturerefname}{Conjecture}
-\newcommand*{\conjecturesrefname}{Conjectures}
-\newcommand*{\axiomrefname}{Axiom}
-\newcommand*{\axiomsrefname}{Axioms}
-\newcommand*{\examplerefname}{Example}
-\newcommand*{\examplesrefname}{Examples}
-\newcommand*{\appendixrefname}{Appendix}
-\newcommand*{\appendixsrefname}{Appendices}
-\newcommand*{\partrefname}{Part}
-\newcommand*{\partsrefname}{Parts}
-%    \end{macrocode}
-%\begin{macro}{\objectref}
-% Cross-reference a particular structural element. The first
-% argument is the list of labels, the second argument is a
-% control sequence containing the singular tag, the third
-% argument a control sequence containing the plural tag,
-% the fourth argument is text to go before the reference number,
-% e.g.\ an opening bracket, and the fifth argument is text
-% to go after the reference number, e.g.\ a closing bracket.
-%    \begin{macrocode}
-\DeclareRobustCommand*{\objectref}[5]{%
-  \let\@objectname\@empty
-  \def\@objectref{}%
-  \let\@prevsep\@empty
-  \@for\@thislabel:=#1\do{%
-    \toks@{\@prevsep}%
-    \protected at edef\@objectref{\@objectref\the\toks@
-      #4\ref{\@thislabel}#5}%
-    \ifx\@objectname\@empty
-      \let\@objectname#2% singular tag
-    \else
-      \let\@objectname#3% plural tag
-      \let\@prevsep\@jmlr at reflistsep
-    \fi
-  }%
-  \ifx\@objectname#3% plural tag
-    \let\@prevsep\@jmlr at reflistlastsep
-  \fi
-  \@objectname~\@objectref
-}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\sectionref}
-%    \begin{macrocode}
-\newcommand*{\sectionref}[1]{%
-  \objectref{#1}{\sectionrefname}{\sectionsrefname}{}{}}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\equationref}
-%    \begin{macrocode}
-\newcommand*{\equationref}[1]{%
-  \objectref{#1}{\equationrefname}{\equationsrefname}()}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\tableref}
-%    \begin{macrocode}
-\newcommand*{\tableref}[1]{%
-  \objectref{#1}{\tablerefname}{\tablesrefname}{}{}}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\figureref}
-%    \begin{macrocode}
-\newcommand*{\figureref}[1]{%
-  \objectref{#1}{\figurerefname}{\figuresrefname}{}{}}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\algorithmref}
-%    \begin{macrocode}
-\newcommand*{\algorithmref}[1]{%
-  \objectref{#1}{\algorithmrefname}{\algorithmsrefname}{}{}}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\theoremmref}
-%    \begin{macrocode}
-\newcommand*{\theoremref}[1]{%
-  \objectref{#1}{\theoremrefname}{\theoremsrefname}{}{}}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\lemmaref}
-%    \begin{macrocode}
-\newcommand*{\lemmaref}[1]{%
-  \objectref{#1}{\lemmarefname}{\lemmasrefname}{}{}}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\remarkref}
-%    \begin{macrocode}
-\newcommand*{\remarkref}[1]{%
-  \objectref{#1}{\remarkrefname}{\remarksrefname}{}{}}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\corollaryref}
-%    \begin{macrocode}
-\newcommand*{\corollaryref}[1]{%
-  \objectref{#1}{\corollaryrefname}{\corollarysrefname}{}{}}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\definitionref}
-%    \begin{macrocode}
-\newcommand*{\definitionref}[1]{%
-  \objectref{#1}{\definitionrefname}{\definitionsrefname}{}{}}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\conjectureref}
-%    \begin{macrocode}
-\newcommand*{\conjectureref}[1]{%
-  \objectref{#1}{\conjecturerefname}{\conjecturesrefname}{}{}}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\axiomref}
-%    \begin{macrocode}
-\newcommand*{\axiomref}[1]{%
-  \objectref{#1}{\axiomrefname}{\axiomsrefname}{}{}}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\exampleref}
-%    \begin{macrocode}
-\newcommand*{\exampleref}[1]{%
-  \objectref{#1}{\examplerefname}{\examplesrefname}{}{}}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\appendixref}
-%    \begin{macrocode}
-\newcommand*{\appendixref}[1]{%
-  \objectref{#1}{\appendixrefname}{\appendixsrefname}{}{}}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\partref}
-%    \begin{macrocode}
-\newcommand*{\partref}[1]{%
-  \objectref{#1}{\partrefname}{\partsrefname}{}{}}
-%    \end{macrocode}
-%\end{macro}
-%
-%\begin{macro}{\floatconts}
-% The first argument is the label, the second argument contains the
-% caption (using \cs{caption}) and the third argument is the
-% contents of the float
-%    \begin{macrocode}
-\newcommand{\floatconts}[3]{%
-  \@ifundefined{\@captype conts}{\tableconts{#1}{#2}{#3}}%
-  {\csname\@captype conts\endcsname{#1}{#2}{#3}}%
-}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\tableconts}
-%    \begin{macrocode}
-\newcommand{\tableconts}[3]{%
-  \iftablecaptiontop
-    #2\label{#1}\vskip\baselineskip
-    {\centering #3\par}%
-  \else
-    {\centering #3\par}%
-    \vskip\baselineskip
-    #2\label{#1}%
-  \fi
-}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\figureconts}
-%    \begin{macrocode}
-\newcommand{\figureconts}[3]{%
-  {\centering #3\par}%
-  \vskip\baselineskip
-  #2\label{#1}%
-}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\algocfconts}
-%\changes{1.09}{2010/12/01}{new}
-%    \begin{macrocode}
-\newcommand{\algocfconts}[3]{%
-  \@algocf at pre@ruled
-  #2\label{#1}\kern2pt\hrule height.8pt depth0pt\kern2pt%
-  #3\@algocf at pre@ruled
-}
-%    \end{macrocode}
-%\end{macro}
-%
-%\begin{macro}{\includeteximage}
-% Provide a command like \cs{includegraphics} that includes a 
-% file containing \LaTeX\ picture code (e.g.\ \sty{pgf}).
-%    \begin{macrocode}
-\newcommand*{\includeteximage}[2][]{%
-  \def\Gin at req@sizes{%
-    \Gin at req@height\Gin at nat@height
-    \Gin at req@width\Gin at nat@width}%
-  \begingroup
-    \@tempswafalse
-    \let\input at path\Ginput at path
-    \toks@{\InputIfFileExists{#2}{}{\@warning{File `#1' not found}}}%
-    \setkeys{Gin}{#1}%
-    \Gin at esetsize
-    \the\toks@
-  \endgroup
-}
-%    \end{macrocode}
-%\end{macro}
-%
 %\begin{macro}{\ifprint}
 % Provide command to check if this is the printed greyscale
 % version or the online colour version.
@@ -3157,29 +3998,6 @@
 \fi
 %    \end{macrocode}
 %
-% The \env{algorithm} environment should float like a figure or table.
-% It should use the same counter as the \env{algorithm2e} environment.
-%\changes{1.09}{2010/12/01}{caption set up so that it doesn't use a
-%box}
-%    \begin{macrocode}
-\newenvironment{algorithm}[1][htbp]%
-{%
-  \begin{algocf}[#1]%
-  \renewcommand\@makecaption[2]{%
-    \hskip\AlCapHSkip
-    \parbox[t]{\hsize}{\algocf at captiontext{##1}{##2}}%
-  }%
-}%
-{%
-  \end{algocf}%
-}
-%    \end{macrocode}
-%
-% Set the algorithm margin to zero.
-%    \begin{macrocode}
-\setlength\algomargin{0pt}
-%    \end{macrocode}
-%
 %\begin{macro}{\artappendix}
 % Switch to appendices in an article
 %    \begin{macrocode}
@@ -3212,530 +4030,6 @@
 %    \end{macrocode}
 %\end{macro}
 %
-%\subsection{Proofs and Theorems}
-% This code is taken from jmlr2e.sty
-%\begin{macro}{\BlackBox}
-% End of proof marker
-%    \begin{macrocode}
-\newcommand{\BlackBox}{\rule{1.5ex}{1.5ex}}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\jmlrQED}
-%\changes{1.21}{2015-02-24}{new}
-%    \begin{macrocode}
-\newcommand*{\jmlrQED}{\hfill\BlackBox\\[2mm]}
-%    \end{macrocode}
-%\end{macro}
-%\begin{environment}{proof}
-% Proof environment
-%    \begin{macrocode}
-\newenvironment{proof}%
-{%
- \par\noindent{\bfseries\upshape Proof\ }%
-}%
-{\jmlrQED}
-%    \end{macrocode}
-%\end{environment}
-%
-% Since \sty{theorem}, \sty{ntheorem} and \sty{amsthm} all cause
-% problems with this class, provide a simple alternative.
-%
-%\begin{macro}{\theorembodyfont}
-%\changes{1.18}{2013-10-17}{new}
-%\begin{definition}
-%\cs{theorembodyfont}\marg{font declarations}
-%\end{definition}
-%    \begin{macrocode}
-\newcommand*{\theorembodyfont}[1]{%
-  \renewcommand*{\@theorembodyfont}{#1}%
-}
-\newcommand*{\@theorembodyfont}{\normalfont\itshape}%
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\theoremheaderfont}
-%\changes{1.18}{2013-10-17}{new}
-%\begin{definition}
-%\cs{theoremheaderfont}\marg{font declarations}
-%\end{definition}
-%    \begin{macrocode}
-\newcommand*{\theoremheaderfont}[1]{%
-  \renewcommand*{\@theoremheaderfont}{#1}%
-}
-\newcommand*{\@theoremheaderfont}{\normalfont\bfseries }%
-%    \end{macrocode}
-%\end{macro}
-%
-%\begin{macro}{\theoremsep}
-%\changes{1.18}{2013-10-17}{new}
-%\begin{definition}
-%\cs{theoremsep}\marg{separation code}
-%\end{definition}
-%    \begin{macrocode}
-\newcommand*{\theoremsep}[1]{%
-  \renewcommand*{\@theoremsep}{#1}%
-}
-\newcommand*{\@theoremsep}{}%
-%    \end{macrocode}
-%\end{macro}
-%
-%\begin{macro}{\theorempostheader}
-%\changes{1.18}{2013-10-17}{new}
-%\begin{definition}
-%\cs{theorempostheader}\marg{text}
-%\end{definition}
-%    \begin{macrocode}
-\newcommand*{\theorempostheader}[1]{%
-  \renewcommand*{\@theorempostheader}{#1}%
-}
-\newcommand*{\@theorempostheader}{}%
-%    \end{macrocode}
-%\end{macro}
-%
-%\begin{macro}{\newtheorem}
-%\changes{1.18}{2013-10-17}{new}
-%    \begin{macrocode}
-\let\jmlr at org@newtheorem\newtheorem
-\renewcommand*{\newtheorem}{\@ifstar\jmlr at snewtheorem\jmlr at newtheorem}
-%    \end{macrocode}
-% Define starred version:
-%\begin{definition}
-%\cs{newtheorem*}\marg{env-name}\marg{title tag}
-%\end{definition}
-%    \begin{macrocode}
-\newcommand*{\jmlr at snewtheorem}[2]{%
-  \cslet{jmlr at thm@#1 at body@font}{\@theorembodyfont}%
-  \cslet{jmlr at thm@#1 at header@font}{\@theoremheaderfont}%
-  \cslet{jmlr at thm@#1 at sep}{\@theoremsep}%
-  \cslet{jmlr at thm@#1 at postheader}{\@theorempostheader}%
-  \newenvironment{#1}%
-  {%
-    \trivlist
-      \item
-      [%
-        \hskip\labelsep{\csuse{jmlr at thm@#1 at header@font}#2%
-          \csuse{jmlr at thm@#1 at postheader}%
-        }%
-      ]%
-      \mbox{}\csuse{jmlr at thm@#1 at sep}%
-      \csuse{jmlr at thm@#1 at body@font}%
-  }%
-  {%
-    \endtrivlist
-  }%
-}
-%    \end{macrocode}
-%\end{macro}
-% Unstarred version needs adjusting to take the style into account:
-%\begin{macro}{\@othm}
-%\changes{1.18}{2013-10-17}{new}
-%    \begin{macrocode}
-\newcommand{\jmlr at newtheorem}[1]{%
-  \cslet{jmlr at thm@#1 at body@font}{\@theorembodyfont}%
-  \cslet{jmlr at thm@#1 at header@font}{\@theoremheaderfont}%
-  \cslet{jmlr at thm@#1 at sep}{\@theoremsep}%
-  \cslet{jmlr at thm@#1 at postheader}{\@theorempostheader}%
-  \jmlr at org@newtheorem{#1}%
-}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\@xthm}
-%\changes{1.18}{2013-10-17}{new}
-%    \begin{macrocode}
-\renewcommand*{\@xthm}[2]{%
-  \def\@jmlr at currentthm{#1}%
-  \@begintheorem{#2}{\csname the#1\endcsname}%
-  \ignorespaces
-}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\@ythm}
-%\changes{1.18}{2013-10-17}{new}
-%    \begin{macrocode}
-\def\@ythm#1#2[#3]{%
-  \def\@jmlr at currentthm{#1}%
-  \@opargbegintheorem{#2}{\csname the#1\endcsname}{#3}%
-  \ignorespaces
-}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\@begintheorem}
-%\changes{1.18}{2013-10-17}{new}
-%    \begin{macrocode}
-\renewcommand*{\@begintheorem}[2]{%
-  \ifdef{\@jmlr at currentthm}%
-  {%
-    \letcs{\jmlr at this@theoremheader}{jmlr at thm@\@jmlr at currentthm @header at font}%
-    \letcs{\jmlr at this@theorembody}{jmlr at thm@\@jmlr at currentthm @body at font}%
-    \letcs{\jmlr at this@theoremsep}{jmlr at thm@\@jmlr at currentthm @sep}%
-    \letcs{\jmlr at this@theorempostheader}%
-       {jmlr at thm@\@jmlr at currentthm @postheader}%
-  }%
-  {%
-    \let\jmlr at this@theorembody\@theorembodyfont
-    \let\jmlr at this@theoremheader\@theoremheaderfont
-    \let\jmlr at this@theoremsep\@theoremsep
-    \let\jmlr at this@theorempostheader\@theorempostheader
-  }%
-  \trivlist
-    \item
-     [%
-      \hskip\labelsep{\jmlr at this@theoremheader #1\ #2%
-       \jmlr at this@theorempostheader}%
-     ]%
-    \mbox{}\jmlr at this@theoremsep
-    \jmlr at this@theorembody
-}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\@opargbegintheorem}
-%\changes{1.18}{2013-10-17}{new}
-%    \begin{macrocode}
-\renewcommand*{\@opargbegintheorem}[3]{%
-  \ifdef{\@jmlr at currentthm}%
-  {%
-    \letcs{\jmlr at this@theoremheader}{jmlr at thm@\@jmlr at currentthm @header at font}%
-    \letcs{\jmlr at this@theorembody}{jmlr at thm@\@jmlr at currentthm @body at font}%
-    \letcs{\jmlr at this@theoremsep}{jmlr at thm@\@jmlr at currentthm @sep}%
-    \letcs{\jmlr at this@theorempostheader}%
-       {jmlr at thm@\@jmlr at currentthm @postheader}%
-  }%
-  {%
-    \let\jmlr at this@theorembody\@theorembodyfont
-    \let\jmlr at this@theoremheader\@theoremheaderfont
-    \let\jmlr at this@theoremsep\@theoremsep
-    \let\jmlr at this@theorempostheader\@theorempostheader
-  }%
-  \trivlist
-   \item[\hskip\labelsep{\jmlr at this@theoremheader #1\ #2\ (#3)%
-     \jmlr at this@theorempostheader}]%
-   \mbox{}\jmlr at this@theoremsep
-   \jmlr at this@theorembody
-}
-%    \end{macrocode}
-%\end{macro}
-%
-%\begin{environment}{example}
-%    \begin{macrocode}
-\newtheorem{example}{Example} 
-%    \end{macrocode}
-%\end{environment}
-%\begin{environment}{theorem}
-%    \begin{macrocode}
-\newtheorem{theorem}{Theorem}
-%    \end{macrocode}
-%\end{environment}
-%\begin{environment}{lemma}
-%    \begin{macrocode}
-\newtheorem{lemma}[theorem]{Lemma} 
-%    \end{macrocode}
-%\end{environment}
-%\begin{environment}{proposition}
-%    \begin{macrocode}
-\newtheorem{proposition}[theorem]{Proposition} 
-%    \end{macrocode}
-%\end{environment}
-%\begin{environment}{remark}
-%    \begin{macrocode}
-\newtheorem{remark}[theorem]{Remark}
-%    \end{macrocode}
-%\end{environment}
-%\begin{environment}{corollary}
-%    \begin{macrocode}
-\newtheorem{corollary}[theorem]{Corollary}
-%    \end{macrocode}
-%\end{environment}
-%\begin{environment}{definition}
-%    \begin{macrocode}
-\newtheorem{definition}[theorem]{Definition}
-%    \end{macrocode}
-%\end{environment}
-%\begin{environment}{conjecture}
-%    \begin{macrocode}
-\newtheorem{conjecture}[theorem]{Conjecture}
-%    \end{macrocode}
-%\end{environment}
-%\begin{environment}{axiom}
-%    \begin{macrocode}
-\newtheorem{axiom}[theorem]{Axiom}
-%    \end{macrocode}
-%\end{environment}
-%
-%\begin{macro}{\orgvec}
-%\changes{1.21}{2015-02-24}{new}
-%Keep a copy of original \cs{vec} in case it's wanted.
-%    \begin{macrocode}
-\let\orgvec\vec
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\vec}
-% Redefine \cs{vec} to produce a bold symbol
-%    \begin{macrocode}
-\renewcommand*{\vec}[1]{\boldsymbol{#1}}
-%    \end{macrocode}
-%\end{macro}
-%
-%\begin{environment}{enumerate*}
-% Define an enumerate style environment where the nested environments
-% all use the same counter. It uses the enumi counter.
-%    \begin{macrocode}
-\newenvironment{enumerate*}%
-{%
-  \ifnum\@enumdepth=0\relax
-    \setcounter{enumi}{0}%
-  \fi
-  \ifnum\@enumdepth>\thr@@
-    \@toodeep
-  \else
-    \advance\@enumdepth\@ne
-    \def\@enumctr{enumi}%
-    \list
-      {\labelenumi}%
-      {\@nmbrlisttrue\def\@listctr{enumi}%
-       \def\makelabel##1{\hss\llap{##1}}}%
-  \fi
-}%
-{\endlist}
-%    \end{macrocode}
-%\end{environment}
-%
-%\begin{environment}{altdescription}
-% Define a description like environment where the indent is
-% computed from the widest label. The optional argument is 
-% the widest label.
-%    \begin{macrocode}
-\newenvironment{altdescription}[1]%
-  {\list{}%
-    {%
-      \settowidth{\labelwidth}{\altdescriptionlabel{#1}}%
-      \setlength{\labelsep}{15pt}%
-      \setlength{\leftmargin}{2\labelsep}%
-      \addtolength{\leftmargin}{\labelwidth}%
-      \setlength{\rightmargin}{\labelsep}%
-      \let\makelabel\altdescriptionlabel
-    }%
-  }%
-  {\endlist}
-
-\newcommand*{\altdescriptionlabel}[1]{\normalfont\bfseries #1\hfill}
-%    \end{macrocode}
-%\end{environment}
-%
-%\begin{macro}{\mailto}
-% Syntax: \cs{mailto}\marg{address}
-%    \begin{macrocode}
-\newcommand*{\mailto}[1]{\texttt{#1}}
-%    \end{macrocode}
-%\end{macro}
-%
-% The \sty{subfig} package breaks jmlrbook.cls, so define \ics{subfig}
-% here. (This is fairly primitive.)
-%\begin{macro}{\c at subfigure}
-% Define subfigure counter:
-%    \begin{macrocode}
-\newcounter{subfigure}
-\@addtoreset{subfigure}{figure}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\thesubfigure}
-%    \begin{macrocode}
-\renewcommand*{\thesubfigure}{\alph{subfigure}}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\p at subfigure}
-%    \begin{macrocode}
-\renewcommand*{\p at subfigure}{\expandafter\@p at subfigure}
-\newcommand*{\@p at subfigure}[1]{%
-  \protect\@subfigurelabel{\thefigure}{\thesubfigure}%
-}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\@subfigurelabel}
-% Define how label appears.
-%    \begin{macrocode}
-\newcommand*\@subfigurelabel[2]{#1\subfigurelabel{#2}}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\subfigref}
-% Reference the sub-figure without including the figure number.
-%    \begin{macrocode}
-\newcommand*\@subfigref[1]{%
-  {%
-    \def\@subfigurelabel##1##2{\subfigurelabel{##2}}%
-    \ref{#1}%
-  }%
-}
-\newcommand*{\subfigref}[1]{%
-  \let\@objectname\@empty
-  \def\@objectref{}%
-  \let\@prevsep\@empty
-  \@for\@thislabel:=#1\do{%
-    \toks@{\@prevsep}%
-    \protected at edef\@objectref{\@objectref\the\toks@
-      \protect\@subfigref{\@thislabel}}%
-      \ifx\@objectname\@empty
-	\let\@objectname\@nil
-      \else
-	\let\@objectname\relax
-        \let\@prevsep\@jmlr at reflistsep
-      \fi
-  }%
-  \ifx\@objectname\relax
-    \let\@prevsep\@jmlr at reflistlastsep
-  \fi
-  \@objectref
-}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\subfigurelabel}
-%    \begin{macrocode}
-\newcommand*{\subfigurelabel}[1]{(\emph{#1})}
-%    \end{macrocode}
-%\end{macro}
-%
-%\begin{macro}{\@subfloatcapbox}
-% Box to store subfloat caption.
-%    \begin{macrocode}
-\newsavebox\@subfloatcapbox
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\@subfloatcontsbox}
-% Box to store subfloat contents.
-%    \begin{macrocode}
-\newsavebox\@subfloatcontsbox
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\subfigure}
-%    \begin{macrocode}
-\newcommand*{\subfigure}[1][]{%
-  \bgroup
-  \def\@subfigcap{#1}%
-  \@subfigure
-}
-%    \end{macrocode}
-%\changes{1.09}{2010/12/01}{Added check to determine whether the
-%subfigure caption is wider than the subfigure}
-%    \begin{macrocode}
-\newcommand*{\@subfigure}[2][b]{%
-  \advance\c at figure by 1\relax
-  \refstepcounter{subfigure}%
-  \sbox\@subfloatcapbox{\subfigurelabel{\thesubfigure}%
-  \ifx\@subfigcap\@empty
-  \else
-    \space\@subfigcap
-  \fi}%
-  \sbox\@subfloatcontsbox{#2}%
-  \settowidth{\@tempdima}{\usebox\@subfloatcontsbox}%
-  \settowidth{\@tempdimb}{\usebox\@subfloatcapbox}%
-  \ifdim\@tempdimb>\@tempdima
-    \settowidth\@tempdimb{\subfigurelabel{\thesubfigure}\space}%
-    \addtolength{\@tempdima}{-\@tempdimb}%
-    \sbox\@subfloatcapbox{\subfigurelabel{\thesubfigure}\space
-      \parbox[t]{\@tempdima}{\@subfigcap}}%
-  \fi
-  \begin{tabular}[#1]{@{}c@{}}%
-  \usebox\@subfloatcontsbox\\\usebox\@subfloatcapbox
-  \end{tabular}%
-  \egroup
-}
-%    \end{macrocode}
-%\end{macro}
-%
-% Sub-tables:
-%\begin{macro}{\c at subtable}
-% Define subtable counter:
-%    \begin{macrocode}
-\newcounter{subtable}
-\@addtoreset{subtable}{table}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\thesubtable}
-%    \begin{macrocode}
-\renewcommand*{\thesubtable}{\alph{subtable}}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\p at subtable}
-%    \begin{macrocode}
-\renewcommand*{\p at subtable}{\expandafter\@p at subtable}
-\newcommand*{\@p at subtable}[1]{%
-  \protect\@subtablelabel{\thetable}{\thesubtable}%
-}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\@subtablelabel}
-% Define how label appears.
-%    \begin{macrocode}
-\newcommand*\@subtablelabel[2]{#1\subtablelabel{#2}}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\subtabref}
-% Reference the sub-table without including the table number.
-%    \begin{macrocode}
-\newcommand*\@subtabref[1]{%
-  {%
-    \def\@subtablelabel##1##2{\subtablelabel{##2}}%
-    \ref{#1}%
-  }%
-}
-\newcommand*{\subtabref}[1]{%
-  \let\@objectname\@empty
-  \def\@objectref{}%
-  \let\@prevsep\@empty
-  \@for\@thislabel:=#1\do{%
-    \toks@{\@prevsep}%
-    \protected at edef\@objectref{\@objectref\the\toks@
-      \protect\@subtabref{\@thislabel}}%
-      \ifx\@objectname\@empty
-	\let\@objectname\@nil
-      \else
-	\let\@objectname\relax
-        \let\@prevsep\@jmlr at reflistsep
-      \fi
-  }%
-  \ifx\@objectname\relax
-    \let\@prevsep\@jmlr at reflistlastsep
-  \fi
-  \@objectref
-}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\subtablelabel}
-%    \begin{macrocode}
-\newcommand*{\subtablelabel}[1]{(\emph{#1})}
-%    \end{macrocode}
-%\end{macro}
-%\begin{macro}{\subtable}
-%    \begin{macrocode}
-\newcommand*{\subtable}[1][]{%
-  \def\@subtabcap{#1}%
-  \@subtable
-}
-%    \end{macrocode}
-%\changes{1.09}{2010/12/01}{Added check to determine whether the
-%subtable caption is wider than the subtable}
-%    \begin{macrocode}
-\newcommand*{\@subtable}[2][t]{%
-  \refstepcounter{subtable}%
-  \sbox\@subfloatcapbox{\subtablelabel{\thesubtable}%
-  \ifx\@subtabcap\@empty
-  \else
-    \space\@subtabcap
-  \fi}%
-  \sbox\@subfloatcontsbox{#2}%
-  \settowidth{\@tempdima}{\usebox\@subfloatcontsbox}%
-  \settowidth{\@tempdimb}{\usebox\@subfloatcapbox}%
-  \ifdim\@tempdimb>\@tempdima
-    \settowidth\@tempdimb{\subtablelabel{\thesubtable}\space}%
-    \addtolength{\@tempdima}{-\@tempdimb}%
-    \sbox\@subfloatcapbox{\subtablelabel{\thesubtable}\space
-      \parbox[t]{\@tempdima}{\@subtabcap}}%
-  \fi
-  \begin{tabular}[#1]{@{}c@{}}%
-  \usebox\@subfloatcapbox\\\usebox\@subfloatcontsbox
-  \end{tabular}
-}
-%    \end{macrocode}
-%\end{macro}
-%
 %\subsection{Compatibility with combine.cls}
 %
 % Define chapters to make this class play nicely with \cls{combine}.
@@ -4384,7 +4678,7 @@
 %    \end{macrocode}
 % Declare class:
 %    \begin{macrocode}
-\ProvidesClass{jmlrbook}[2017/03/09 v1.23 (NLCT) JMLR Book Style]
+\ProvidesClass{jmlrbook}[2017/08/01 v1.24 (NLCT) JMLR Book Style]
 %    \end{macrocode}
 % Need \sty{xkeyval} package to have key=value class options
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/jmlr/jmlr.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/jmlr/jmlr.ins	2017-08-01 21:38:49 UTC (rev 44934)
+++ trunk/Master/texmf-dist/source/latex/jmlr/jmlr.ins	2017-08-01 21:39:04 UTC (rev 44935)
@@ -1,4 +1,4 @@
-% jmlr.ins generated using makedtx version 1.1 2017/3/9 9:50
+% jmlr.ins generated using makedtx version 1.2 2017/8/1 16:57
 \input docstrip
 
 \preamble
@@ -8,7 +8,7 @@
 
  This work may be distributed and/or modified under the
  conditions of the LaTeX Project Public License, either version 1.3
- of this license of (at your option) any later version.
+ 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
@@ -18,13 +18,15 @@
 
  The Current Maintainer of this work is Nicola Talbot.
 
- This work consists of the files jmlr.dtx and jmlr.ins and the derived files jmlr.cls, jmlrbook.cls.
+ This work consists of the files jmlr.dtx and jmlr.ins and the derived files jmlrutils.sty, jmlr.cls, jmlrbook.cls.
 
 \endpreamble
 
 \askforoverwritefalse
 
-\generate{\file{jmlr.cls}{\usepreamble\defaultpreamble
+\generate{\file{jmlrutils.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{jmlr.dtx}{jmlrutils.sty,package}}
+\file{jmlr.cls}{\usepreamble\defaultpreamble
 \usepostamble\defaultpostamble\from{jmlr.dtx}{jmlr.cls,package}}
 \file{jmlrbook.cls}{\usepreamble\defaultpreamble
 \usepostamble\defaultpostamble\from{jmlr.dtx}{jmlrbook.cls,package}}

Modified: trunk/Master/texmf-dist/tex/latex/jmlr/jmlr.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/jmlr/jmlr.cls	2017-08-01 21:38:49 UTC (rev 44934)
+++ trunk/Master/texmf-dist/tex/latex/jmlr/jmlr.cls	2017-08-01 21:39:04 UTC (rev 44935)
@@ -11,7 +11,7 @@
 %% 
 %%  This work may be distributed and/or modified under the
 %%  conditions of the LaTeX Project Public License, either version 1.3
-%%  of this license of (at your option) any later version.
+%%  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
@@ -21,7 +21,7 @@
 %% 
 %%  The Current Maintainer of this work is Nicola Talbot.
 %% 
-%%  This work consists of the files jmlr.dtx and jmlr.ins and the derived files jmlr.cls, jmlrbook.cls.
+%%  This work consists of the files jmlr.dtx and jmlr.ins and the derived files jmlrutils.sty, jmlr.cls, jmlrbook.cls.
 %% 
 %% \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
@@ -41,7 +41,7 @@
 %% First editor:
 %% Second editor:
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{jmlr}[2017/03/09 v1.23 (NLCT) Journal of Machine Learning Research]
+\ProvidesClass{jmlr}[2017/08/01 v1.24 (NLCT) Journal of Machine Learning Research]
 \RequirePackage{xkeyval}
 \RequirePackage{calc}
 \RequirePackage{etoolbox}
@@ -60,9 +60,18 @@
 \DeclareOptionX{final}{\setlength\overfullrule{0pt}}
 \newif\iftablecaptiontop
 \tablecaptiontoptrue
+\newcommand{\tableconts}[3]{%
+  \iftablecaptiontop
+    #2\label{#1}\vskip\baselineskip
+    {\centering #3\par}%
+  \else
+    {\centering #3\par}%
+    \vskip\baselineskip
+    #2\label{#1}%
+  \fi
+}
 \DeclareOptionX{tablecaptiontop}{\tablecaptiontoptrue}
 \DeclareOptionX{tablecaptionbottom}{\tablecaptiontopfalse}
-
 \define at choicekey{jmlr.cls}{tablecaption}[\val\nr]{top,bottom}{%
   \ifcase\nr\relax
     \tablecaptiontoptrue
@@ -72,7 +81,9 @@
 }
 \newif\ifjmlrhtml
 \jmlrhtmlfalse
-\DeclareOptionX{html}{\jmlrhtmltrue}
+\DeclareOptionX{html}{%
+ \ClassWarning{jmlr}{html option is now deprecated}%
+ \jmlrhtmltrue}
 \DeclareOptionX{nohtml}{\jmlrhtmlfalse}
 \def\pt at size{11pt}
 \DeclareOptionX{10pt}{\renewcommand{\pt at size}{10pt}}
@@ -134,8 +145,12 @@
 \RequirePackage{natbib}
 \RequirePackage{graphicx}
 \RequirePackage{url}
-\RequirePackage[x11names]{xcolor}
-\RequirePackage[algo2e,ruled]{algorithm2e}
+\PassOptionsToPackage{x11names}{xcolor}
+\RequirePackage{xcolor}
+\PassOptionsToPackage{algo2e,ruled}{algorithm2e}
+\RequirePackage{algorithm2e}
+\setlength\algomargin{0pt}
+\RequirePackage{jmlrutils}
 \jmlrprehyperref
 \@ifundefined{@pre at hyperref}{}{\@pre at hyperref}
 \RequirePackage{hyperref}
@@ -570,128 +585,8 @@
    \fi}
 \def\abovestrut#1{\rule[0in]{0in}{#1}\ignorespaces}
 \def\belowstrut#1{\rule[-#1]{0in}{#1}\ignorespaces}
-\long\def\acks#1{\section*{Acknowledgments}#1}
-\long\def\researchnote#1{\noindent {\LARGE\itshape Research Note} #1}
-\newcommand*{\set}[1]{\ensuremath{\mathcal{#1}}}
-\newcommand*{\@jmlr at reflistsep}{, }
-\newcommand*{\@jmlr at reflistlastsep}{ and }
-\newcommand*{\sectionrefname}{Section}
-\newcommand*{\sectionsrefname}{Sections}
-\newcommand*{\equationrefname}{Equation}
-\newcommand*{\equationsrefname}{Equations}
-\newcommand*{\tablerefname}{Table}
-\newcommand*{\tablesrefname}{Tables}
-\newcommand*{\figurerefname}{Figure}
-\newcommand*{\figuresrefname}{Figures}
-\newcommand*{\algorithmrefname}{Algorithm}
-\newcommand*{\algorithmsrefname}{Algorithms}
-\newcommand*{\theoremrefname}{Theorem}
-\newcommand*{\theoremsrefname}{Theorems}
-\newcommand*{\lemmarefname}{Lemma}
-\newcommand*{\lemmasrefname}{Lemmas}
-\newcommand*{\remarkrefname}{Remark}
-\newcommand*{\remarksrefname}{Remarks}
-\newcommand*{\corollaryrefname}{Corollary}
-\newcommand*{\corollarysrefname}{Corollaries}
-\newcommand*{\definitionrefname}{Definition}
-\newcommand*{\definitionsrefname}{Definitions}
-\newcommand*{\conjecturerefname}{Conjecture}
-\newcommand*{\conjecturesrefname}{Conjectures}
-\newcommand*{\axiomrefname}{Axiom}
-\newcommand*{\axiomsrefname}{Axioms}
-\newcommand*{\examplerefname}{Example}
-\newcommand*{\examplesrefname}{Examples}
-\newcommand*{\appendixrefname}{Appendix}
-\newcommand*{\appendixsrefname}{Appendices}
-\newcommand*{\partrefname}{Part}
-\newcommand*{\partsrefname}{Parts}
-\DeclareRobustCommand*{\objectref}[5]{%
-  \let\@objectname\@empty
-  \def\@objectref{}%
-  \let\@prevsep\@empty
-  \@for\@thislabel:=#1\do{%
-    \toks@{\@prevsep}%
-    \protected at edef\@objectref{\@objectref\the\toks@
-      #4\ref{\@thislabel}#5}%
-    \ifx\@objectname\@empty
-      \let\@objectname#2% singular tag
-    \else
-      \let\@objectname#3% plural tag
-      \let\@prevsep\@jmlr at reflistsep
-    \fi
-  }%
-  \ifx\@objectname#3% plural tag
-    \let\@prevsep\@jmlr at reflistlastsep
-  \fi
-  \@objectname~\@objectref
-}
-\newcommand*{\sectionref}[1]{%
-  \objectref{#1}{\sectionrefname}{\sectionsrefname}{}{}}
-\newcommand*{\equationref}[1]{%
-  \objectref{#1}{\equationrefname}{\equationsrefname}()}
-\newcommand*{\tableref}[1]{%
-  \objectref{#1}{\tablerefname}{\tablesrefname}{}{}}
-\newcommand*{\figureref}[1]{%
-  \objectref{#1}{\figurerefname}{\figuresrefname}{}{}}
-\newcommand*{\algorithmref}[1]{%
-  \objectref{#1}{\algorithmrefname}{\algorithmsrefname}{}{}}
-\newcommand*{\theoremref}[1]{%
-  \objectref{#1}{\theoremrefname}{\theoremsrefname}{}{}}
-\newcommand*{\lemmaref}[1]{%
-  \objectref{#1}{\lemmarefname}{\lemmasrefname}{}{}}
-\newcommand*{\remarkref}[1]{%
-  \objectref{#1}{\remarkrefname}{\remarksrefname}{}{}}
-\newcommand*{\corollaryref}[1]{%
-  \objectref{#1}{\corollaryrefname}{\corollarysrefname}{}{}}
-\newcommand*{\definitionref}[1]{%
-  \objectref{#1}{\definitionrefname}{\definitionsrefname}{}{}}
-\newcommand*{\conjectureref}[1]{%
-  \objectref{#1}{\conjecturerefname}{\conjecturesrefname}{}{}}
-\newcommand*{\axiomref}[1]{%
-  \objectref{#1}{\axiomrefname}{\axiomsrefname}{}{}}
-\newcommand*{\exampleref}[1]{%
-  \objectref{#1}{\examplerefname}{\examplesrefname}{}{}}
-\newcommand*{\appendixref}[1]{%
-  \objectref{#1}{\appendixrefname}{\appendixsrefname}{}{}}
-\newcommand*{\partref}[1]{%
-  \objectref{#1}{\partrefname}{\partsrefname}{}{}}
-\newcommand{\floatconts}[3]{%
-  \@ifundefined{\@captype conts}{\tableconts{#1}{#2}{#3}}%
-  {\csname\@captype conts\endcsname{#1}{#2}{#3}}%
-}
-\newcommand{\tableconts}[3]{%
-  \iftablecaptiontop
-    #2\label{#1}\vskip\baselineskip
-    {\centering #3\par}%
-  \else
-    {\centering #3\par}%
-    \vskip\baselineskip
-    #2\label{#1}%
-  \fi
-}
-\newcommand{\figureconts}[3]{%
-  {\centering #3\par}%
-  \vskip\baselineskip
-  #2\label{#1}%
-}
-\newcommand{\algocfconts}[3]{%
-  \@algocf at pre@ruled
-  #2\label{#1}\kern2pt\hrule height.8pt depth0pt\kern2pt%
-  #3\@algocf at pre@ruled
-}
-\newcommand*{\includeteximage}[2][]{%
-  \def\Gin at req@sizes{%
-    \Gin at req@height\Gin at nat@height
-    \Gin at req@width\Gin at nat@width}%
-  \begingroup
-    \@tempswafalse
-    \let\input at path\Ginput at path
-    \toks@{\InputIfFileExists{#2}{}{\@warning{File `#1' not found}}}%
-    \setkeys{Gin}{#1}%
-    \Gin at esetsize
-    \the\toks@
-  \endgroup
-}
+\newcommand{\acks}[1]{\section*{Acknowledgments}#1}
+\newcommand{\researchnote}[1]{\noindent {\LARGE\itshape Research Note} #1}
 \providecommand{\ifprint}[2]{\ifgrayscale#1\else#2\fi}
 %%    \begin{macrocode}
 \ifjmlrhtml
@@ -734,18 +629,6 @@
       \fi
     \endgroup}
 \fi
-\newenvironment{algorithm}[1][htbp]%
-{%
-  \begin{algocf}[#1]%
-  \renewcommand\@makecaption[2]{%
-    \hskip\AlCapHSkip
-    \parbox[t]{\hsize}{\algocf at captiontext{##1}{##2}}%
-  }%
-}%
-{%
-  \end{algocf}%
-}
-\setlength\algomargin{0pt}
 \newcommand{\artappendix}{\par
   \setcounter{section}{0}
   \setcounter{subsection}{0}
@@ -755,280 +638,6 @@
 }
 \let\appendix\artappendix
 \newcommand{\booklinebreak}[1][]{}
-\newcommand{\BlackBox}{\rule{1.5ex}{1.5ex}}
-\newcommand*{\jmlrQED}{\hfill\BlackBox\\[2mm]}
-\newenvironment{proof}%
-{%
- \par\noindent{\bfseries\upshape Proof\ }%
-}%
-{\jmlrQED}
-\newcommand*{\theorembodyfont}[1]{%
-  \renewcommand*{\@theorembodyfont}{#1}%
-}
-\newcommand*{\@theorembodyfont}{\normalfont\itshape}%
-\newcommand*{\theoremheaderfont}[1]{%
-  \renewcommand*{\@theoremheaderfont}{#1}%
-}
-\newcommand*{\@theoremheaderfont}{\normalfont\bfseries }%
-\newcommand*{\theoremsep}[1]{%
-  \renewcommand*{\@theoremsep}{#1}%
-}
-\newcommand*{\@theoremsep}{}%
-\newcommand*{\theorempostheader}[1]{%
-  \renewcommand*{\@theorempostheader}{#1}%
-}
-\newcommand*{\@theorempostheader}{}%
-\let\jmlr at org@newtheorem\newtheorem
-\renewcommand*{\newtheorem}{\@ifstar\jmlr at snewtheorem\jmlr at newtheorem}
-\newcommand*{\jmlr at snewtheorem}[2]{%
-  \cslet{jmlr at thm@#1 at body@font}{\@theorembodyfont}%
-  \cslet{jmlr at thm@#1 at header@font}{\@theoremheaderfont}%
-  \cslet{jmlr at thm@#1 at sep}{\@theoremsep}%
-  \cslet{jmlr at thm@#1 at postheader}{\@theorempostheader}%
-  \newenvironment{#1}%
-  {%
-    \trivlist
-      \item
-      [%
-        \hskip\labelsep{\csuse{jmlr at thm@#1 at header@font}#2%
-          \csuse{jmlr at thm@#1 at postheader}%
-        }%
-      ]%
-      \mbox{}\csuse{jmlr at thm@#1 at sep}%
-      \csuse{jmlr at thm@#1 at body@font}%
-  }%
-  {%
-    \endtrivlist
-  }%
-}
-\newcommand{\jmlr at newtheorem}[1]{%
-  \cslet{jmlr at thm@#1 at body@font}{\@theorembodyfont}%
-  \cslet{jmlr at thm@#1 at header@font}{\@theoremheaderfont}%
-  \cslet{jmlr at thm@#1 at sep}{\@theoremsep}%
-  \cslet{jmlr at thm@#1 at postheader}{\@theorempostheader}%
-  \jmlr at org@newtheorem{#1}%
-}
-\renewcommand*{\@xthm}[2]{%
-  \def\@jmlr at currentthm{#1}%
-  \@begintheorem{#2}{\csname the#1\endcsname}%
-  \ignorespaces
-}
-\def\@ythm#1#2[#3]{%
-  \def\@jmlr at currentthm{#1}%
-  \@opargbegintheorem{#2}{\csname the#1\endcsname}{#3}%
-  \ignorespaces
-}
-\renewcommand*{\@begintheorem}[2]{%
-  \ifdef{\@jmlr at currentthm}%
-  {%
-    \letcs{\jmlr at this@theoremheader}{jmlr at thm@\@jmlr at currentthm @header at font}%
-    \letcs{\jmlr at this@theorembody}{jmlr at thm@\@jmlr at currentthm @body at font}%
-    \letcs{\jmlr at this@theoremsep}{jmlr at thm@\@jmlr at currentthm @sep}%
-    \letcs{\jmlr at this@theorempostheader}%
-       {jmlr at thm@\@jmlr at currentthm @postheader}%
-  }%
-  {%
-    \let\jmlr at this@theorembody\@theorembodyfont
-    \let\jmlr at this@theoremheader\@theoremheaderfont
-    \let\jmlr at this@theoremsep\@theoremsep
-    \let\jmlr at this@theorempostheader\@theorempostheader
-  }%
-  \trivlist
-    \item
-     [%
-      \hskip\labelsep{\jmlr at this@theoremheader #1\ #2%
-       \jmlr at this@theorempostheader}%
-     ]%
-    \mbox{}\jmlr at this@theoremsep
-    \jmlr at this@theorembody
-}
-\renewcommand*{\@opargbegintheorem}[3]{%
-  \ifdef{\@jmlr at currentthm}%
-  {%
-    \letcs{\jmlr at this@theoremheader}{jmlr at thm@\@jmlr at currentthm @header at font}%
-    \letcs{\jmlr at this@theorembody}{jmlr at thm@\@jmlr at currentthm @body at font}%
-    \letcs{\jmlr at this@theoremsep}{jmlr at thm@\@jmlr at currentthm @sep}%
-    \letcs{\jmlr at this@theorempostheader}%
-       {jmlr at thm@\@jmlr at currentthm @postheader}%
-  }%
-  {%
-    \let\jmlr at this@theorembody\@theorembodyfont
-    \let\jmlr at this@theoremheader\@theoremheaderfont
-    \let\jmlr at this@theoremsep\@theoremsep
-    \let\jmlr at this@theorempostheader\@theorempostheader
-  }%
-  \trivlist
-   \item[\hskip\labelsep{\jmlr at this@theoremheader #1\ #2\ (#3)%
-     \jmlr at this@theorempostheader}]%
-   \mbox{}\jmlr at this@theoremsep
-   \jmlr at this@theorembody
-}
-\newtheorem{example}{Example}
-\newtheorem{theorem}{Theorem}
-\newtheorem{lemma}[theorem]{Lemma}
-\newtheorem{proposition}[theorem]{Proposition}
-\newtheorem{remark}[theorem]{Remark}
-\newtheorem{corollary}[theorem]{Corollary}
-\newtheorem{definition}[theorem]{Definition}
-\newtheorem{conjecture}[theorem]{Conjecture}
-\newtheorem{axiom}[theorem]{Axiom}
-\let\orgvec\vec
-\renewcommand*{\vec}[1]{\boldsymbol{#1}}
-\newenvironment{enumerate*}%
-{%
-  \ifnum\@enumdepth=0\relax
-    \setcounter{enumi}{0}%
-  \fi
-  \ifnum\@enumdepth>\thr@@
-    \@toodeep
-  \else
-    \advance\@enumdepth\@ne
-    \def\@enumctr{enumi}%
-    \list
-      {\labelenumi}%
-      {\@nmbrlisttrue\def\@listctr{enumi}%
-       \def\makelabel##1{\hss\llap{##1}}}%
-  \fi
-}%
-{\endlist}
-\newenvironment{altdescription}[1]%
-  {\list{}%
-    {%
-      \settowidth{\labelwidth}{\altdescriptionlabel{#1}}%
-      \setlength{\labelsep}{15pt}%
-      \setlength{\leftmargin}{2\labelsep}%
-      \addtolength{\leftmargin}{\labelwidth}%
-      \setlength{\rightmargin}{\labelsep}%
-      \let\makelabel\altdescriptionlabel
-    }%
-  }%
-  {\endlist}
-
-\newcommand*{\altdescriptionlabel}[1]{\normalfont\bfseries #1\hfill}
-\newcommand*{\mailto}[1]{\texttt{#1}}
-\newcounter{subfigure}
-\@addtoreset{subfigure}{figure}
-\renewcommand*{\thesubfigure}{\alph{subfigure}}
-\renewcommand*{\p at subfigure}{\expandafter\@p at subfigure}
-\newcommand*{\@p at subfigure}[1]{%
-  \protect\@subfigurelabel{\thefigure}{\thesubfigure}%
-}
-\newcommand*\@subfigurelabel[2]{#1\subfigurelabel{#2}}
-\newcommand*\@subfigref[1]{%
-  {%
-    \def\@subfigurelabel##1##2{\subfigurelabel{##2}}%
-    \ref{#1}%
-  }%
-}
-\newcommand*{\subfigref}[1]{%
-  \let\@objectname\@empty
-  \def\@objectref{}%
-  \let\@prevsep\@empty
-  \@for\@thislabel:=#1\do{%
-    \toks@{\@prevsep}%
-    \protected at edef\@objectref{\@objectref\the\toks@
-      \protect\@subfigref{\@thislabel}}%
-      \ifx\@objectname\@empty
-\let\@objectname\@nil
-      \else
-\let\@objectname\relax
-        \let\@prevsep\@jmlr at reflistsep
-      \fi
-  }%
-  \ifx\@objectname\relax
-    \let\@prevsep\@jmlr at reflistlastsep
-  \fi
-  \@objectref
-}
-\newcommand*{\subfigurelabel}[1]{(\emph{#1})}
-\newsavebox\@subfloatcapbox
-\newsavebox\@subfloatcontsbox
-\newcommand*{\subfigure}[1][]{%
-  \bgroup
-  \def\@subfigcap{#1}%
-  \@subfigure
-}
-\newcommand*{\@subfigure}[2][b]{%
-  \advance\c at figure by 1\relax
-  \refstepcounter{subfigure}%
-  \sbox\@subfloatcapbox{\subfigurelabel{\thesubfigure}%
-  \ifx\@subfigcap\@empty
-  \else
-    \space\@subfigcap
-  \fi}%
-  \sbox\@subfloatcontsbox{#2}%
-  \settowidth{\@tempdima}{\usebox\@subfloatcontsbox}%
-  \settowidth{\@tempdimb}{\usebox\@subfloatcapbox}%
-  \ifdim\@tempdimb>\@tempdima
-    \settowidth\@tempdimb{\subfigurelabel{\thesubfigure}\space}%
-    \addtolength{\@tempdima}{-\@tempdimb}%
-    \sbox\@subfloatcapbox{\subfigurelabel{\thesubfigure}\space
-      \parbox[t]{\@tempdima}{\@subfigcap}}%
-  \fi
-  \begin{tabular}[#1]{@{}c@{}}%
-  \usebox\@subfloatcontsbox\\\usebox\@subfloatcapbox
-  \end{tabular}%
-  \egroup
-}
-\newcounter{subtable}
-\@addtoreset{subtable}{table}
-\renewcommand*{\thesubtable}{\alph{subtable}}
-\renewcommand*{\p at subtable}{\expandafter\@p at subtable}
-\newcommand*{\@p at subtable}[1]{%
-  \protect\@subtablelabel{\thetable}{\thesubtable}%
-}
-\newcommand*\@subtablelabel[2]{#1\subtablelabel{#2}}
-\newcommand*\@subtabref[1]{%
-  {%
-    \def\@subtablelabel##1##2{\subtablelabel{##2}}%
-    \ref{#1}%
-  }%
-}
-\newcommand*{\subtabref}[1]{%
-  \let\@objectname\@empty
-  \def\@objectref{}%
-  \let\@prevsep\@empty
-  \@for\@thislabel:=#1\do{%
-    \toks@{\@prevsep}%
-    \protected at edef\@objectref{\@objectref\the\toks@
-      \protect\@subtabref{\@thislabel}}%
-      \ifx\@objectname\@empty
-\let\@objectname\@nil
-      \else
-\let\@objectname\relax
-        \let\@prevsep\@jmlr at reflistsep
-      \fi
-  }%
-  \ifx\@objectname\relax
-    \let\@prevsep\@jmlr at reflistlastsep
-  \fi
-  \@objectref
-}
-\newcommand*{\subtablelabel}[1]{(\emph{#1})}
-\newcommand*{\subtable}[1][]{%
-  \def\@subtabcap{#1}%
-  \@subtable
-}
-\newcommand*{\@subtable}[2][t]{%
-  \refstepcounter{subtable}%
-  \sbox\@subfloatcapbox{\subtablelabel{\thesubtable}%
-  \ifx\@subtabcap\@empty
-  \else
-    \space\@subtabcap
-  \fi}%
-  \sbox\@subfloatcontsbox{#2}%
-  \settowidth{\@tempdima}{\usebox\@subfloatcontsbox}%
-  \settowidth{\@tempdimb}{\usebox\@subfloatcapbox}%
-  \ifdim\@tempdimb>\@tempdima
-    \settowidth\@tempdimb{\subtablelabel{\thesubtable}\space}%
-    \addtolength{\@tempdima}{-\@tempdimb}%
-    \sbox\@subfloatcapbox{\subtablelabel{\thesubtable}\space
-      \parbox[t]{\@tempdima}{\@subtabcap}}%
-  \fi
-  \begin{tabular}[#1]{@{}c@{}}%
-  \usebox\@subfloatcapbox\\\usebox\@subfloatcontsbox
-  \end{tabular}
-}
 \newcounter{chapter}
 \renewcommand\thechapter{\@arabic\c at chapter}
 \newcommand\@chapapp{\chaptername}

Modified: trunk/Master/texmf-dist/tex/latex/jmlr/jmlrbook.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/jmlr/jmlrbook.cls	2017-08-01 21:38:49 UTC (rev 44934)
+++ trunk/Master/texmf-dist/tex/latex/jmlr/jmlrbook.cls	2017-08-01 21:39:04 UTC (rev 44935)
@@ -11,7 +11,7 @@
 %% 
 %%  This work may be distributed and/or modified under the
 %%  conditions of the LaTeX Project Public License, either version 1.3
-%%  of this license of (at your option) any later version.
+%%  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
@@ -21,7 +21,7 @@
 %% 
 %%  The Current Maintainer of this work is Nicola Talbot.
 %% 
-%%  This work consists of the files jmlr.dtx and jmlr.ins and the derived files jmlr.cls, jmlrbook.cls.
+%%  This work consists of the files jmlr.dtx and jmlr.ins and the derived files jmlrutils.sty, jmlr.cls, jmlrbook.cls.
 %% 
 %% \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
@@ -41,7 +41,7 @@
 %% First editor:
 %% Second editor:
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{jmlrbook}[2017/03/09 v1.23 (NLCT) JMLR Book Style]
+\ProvidesClass{jmlrbook}[2017/08/01 v1.24 (NLCT) JMLR Book Style]
 \RequirePackage{xkeyval}
 \RequirePackage{setspace}
 \newcommand*\jmlrprefacepath{}

Added: trunk/Master/texmf-dist/tex/latex/jmlr/jmlrutils.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/jmlr/jmlrutils.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/jmlr/jmlrutils.sty	2017-08-01 21:39:04 UTC (rev 44935)
@@ -0,0 +1,495 @@
+%%
+%% This is file `jmlrutils.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% jmlr.dtx  (with options: `jmlrutils.sty,package')
+%% 
+%%  jmlr.dtx
+%%  Copyright 2017 Nicola Talbot
+%% 
+%%  This work may be distributed and/or modified under the
+%%  conditions of the LaTeX Project Public License, either version 1.3
+%%  of this license or (at your option) any later version.
+%%  The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%%  and version 1.3 or later is part of all distributions of LaTeX
+%%  version 2005/12/01 or later.
+%% 
+%%  This work has the LPPL maintenance status `maintained'.
+%% 
+%%  The Current Maintainer of this work is Nicola Talbot.
+%% 
+%%  This work consists of the files jmlr.dtx and jmlr.ins and the derived files jmlrutils.sty, jmlr.cls, jmlrbook.cls.
+%% 
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
+%% First editor:
+%% Second editor:
+\ProvidesPackage{jmlrutils}[2017/08/01]
+\newif\ifjmlrutilsmaths
+\jmlrutilsmathstrue
+\DeclareOption{maths}{\jmlrutilsmathstrue}
+\DeclareOption{nomaths}{\jmlrutilsmathsfalse}
+\newif\ifjmlrutilstheorems
+\jmlrutilstheoremstrue
+\DeclareOption{theorems}{\jmlrutilstheoremstrue}
+\DeclareOption{notheorems}{\jmlrutilstheoremsfalse}
+\newif\ifjmlrutilssubfloats
+\jmlrutilssubfloatstrue
+\DeclareOption{subfloats}{\jmlrutilssubfloatstrue}
+\DeclareOption{nosubfloats}{\jmlrutilssubfloatsfalse}
+\ProcessOptions
+\RequirePackage{etoolbox}
+\ifjmlrutilsmaths
+  \RequirePackage{amsmath}
+\fi
+\@ifundefined{iftablecaptiontop}
+{\newif\iftablecaptiontop
+\tablecaptiontoptrue}
+{}
+\newcommand*{\@jmlr at reflistsep}{, }
+\newcommand*{\@jmlr at reflistlastsep}{ and }
+\newcommand*{\sectionrefname}{Section}
+\newcommand*{\sectionsrefname}{Sections}
+\newcommand*{\equationrefname}{Equation}
+\newcommand*{\equationsrefname}{Equations}
+\newcommand*{\tablerefname}{Table}
+\newcommand*{\tablesrefname}{Tables}
+\newcommand*{\figurerefname}{Figure}
+\newcommand*{\figuresrefname}{Figures}
+\newcommand*{\algorithmrefname}{Algorithm}
+\newcommand*{\algorithmsrefname}{Algorithms}
+\newcommand*{\theoremrefname}{Theorem}
+\newcommand*{\theoremsrefname}{Theorems}
+\newcommand*{\lemmarefname}{Lemma}
+\newcommand*{\lemmasrefname}{Lemmas}
+\newcommand*{\remarkrefname}{Remark}
+\newcommand*{\remarksrefname}{Remarks}
+\newcommand*{\corollaryrefname}{Corollary}
+\newcommand*{\corollarysrefname}{Corollaries}
+\newcommand*{\definitionrefname}{Definition}
+\newcommand*{\definitionsrefname}{Definitions}
+\newcommand*{\conjecturerefname}{Conjecture}
+\newcommand*{\conjecturesrefname}{Conjectures}
+\newcommand*{\axiomrefname}{Axiom}
+\newcommand*{\axiomsrefname}{Axioms}
+\newcommand*{\examplerefname}{Example}
+\newcommand*{\examplesrefname}{Examples}
+\newcommand*{\appendixrefname}{Appendix}
+\newcommand*{\appendixsrefname}{Appendices}
+\newcommand*{\partrefname}{Part}
+\newcommand*{\partsrefname}{Parts}
+\newrobustcmd*{\objectref}[5]{%
+  \let\@objectname\@empty
+  \def\@objectref{}%
+  \let\@prevsep\@empty
+  \@for\@thislabel:=#1\do{%
+    \toks@{\@prevsep}%
+    \protected at edef\@objectref{\@objectref\the\toks@
+      #4\ref{\@thislabel}#5}%
+    \ifx\@objectname\@empty
+      \let\@objectname#2% singular tag
+    \else
+      \let\@objectname#3% plural tag
+      \let\@prevsep\@jmlr at reflistsep
+    \fi
+  }%
+  \ifx\@objectname#3% plural tag
+    \let\@prevsep\@jmlr at reflistlastsep
+  \fi
+  \@objectname~\@objectref
+}
+\newcommand*{\sectionref}[1]{%
+  \objectref{#1}{\sectionrefname}{\sectionsrefname}{}{}}
+\newcommand*{\equationref}[1]{%
+  \objectref{#1}{\equationrefname}{\equationsrefname}()}
+\newcommand*{\tableref}[1]{%
+  \objectref{#1}{\tablerefname}{\tablesrefname}{}{}}
+\newcommand*{\figureref}[1]{%
+  \objectref{#1}{\figurerefname}{\figuresrefname}{}{}}
+\newcommand*{\algorithmref}[1]{%
+  \objectref{#1}{\algorithmrefname}{\algorithmsrefname}{}{}}
+\newcommand*{\theoremref}[1]{%
+  \objectref{#1}{\theoremrefname}{\theoremsrefname}{}{}}
+\newcommand*{\lemmaref}[1]{%
+  \objectref{#1}{\lemmarefname}{\lemmasrefname}{}{}}
+\newcommand*{\remarkref}[1]{%
+  \objectref{#1}{\remarkrefname}{\remarksrefname}{}{}}
+\newcommand*{\corollaryref}[1]{%
+  \objectref{#1}{\corollaryrefname}{\corollarysrefname}{}{}}
+\newcommand*{\definitionref}[1]{%
+  \objectref{#1}{\definitionrefname}{\definitionsrefname}{}{}}
+\newcommand*{\conjectureref}[1]{%
+  \objectref{#1}{\conjecturerefname}{\conjecturesrefname}{}{}}
+\newcommand*{\axiomref}[1]{%
+  \objectref{#1}{\axiomrefname}{\axiomsrefname}{}{}}
+\newcommand*{\exampleref}[1]{%
+  \objectref{#1}{\examplerefname}{\examplesrefname}{}{}}
+\newcommand*{\appendixref}[1]{%
+  \objectref{#1}{\appendixrefname}{\appendixsrefname}{}{}}
+\newcommand*{\partref}[1]{%
+  \objectref{#1}{\partrefname}{\partsrefname}{}{}}
+\newcommand{\floatconts}[3]{%
+  \@ifundefined{\@captype conts}{\tableconts{#1}{#2}{#3}}%
+  {\csname\@captype conts\endcsname{#1}{#2}{#3}}%
+}
+\providecommand{\tableconts}[3]{%
+  #2\label{#1}\vskip\baselineskip
+  {\centering #3\par}%
+}
+\newcommand{\figureconts}[3]{%
+  {\centering #3\par}%
+  \vskip\baselineskip
+  #2\label{#1}%
+}
+\newcommand{\algocfconts}[3]{%
+  \@algocf at pre@ruled
+  #2\label{#1}\kern2pt\hrule height.8pt depth0pt\kern2pt%
+  #3\@algocf at pre@ruled
+}
+\newenvironment{algorithm}[1][htbp]%
+{%
+  \ifundef{\algocf}%
+  {`algorithm2e' package is required if you want to
+   use the algorithm environment}%
+  {}%
+  \begin{algocf}[#1]%
+  \renewcommand\@makecaption[2]{%
+    \hskip\AlCapHSkip
+    \parbox[t]{\hsize}{\algocf at captiontext{##1}{##2}}%
+  }%
+}%
+{%
+  \end{algocf}%
+}
+\AtBeginDocument{%
+ \@ifpackageloaded{graphicx}%
+ {\let\@jmlr at ifgraphicxloaded\@firstoftwo}%
+ {\let\@jmlr at ifgraphicxloaded\@secondoftwo}%
+}
+\newcommand*{\includeteximage}[2][]{%
+  \@jmlr at ifgraphicxloaded
+  {%
+    \def\Gin at req@sizes{%
+      \Gin at req@height\Gin at nat@height
+      \Gin at req@width\Gin at nat@width}%
+    \begingroup
+      \let\input at path\Ginput at path
+      \IfFileExists{#2}%
+      {%
+        \toks@{\input{#2}}%
+        \ifstrempty{#1}
+        {}%
+        {%
+          \@tempswatrue
+          \setkeys{Gin}{#1}%
+          \Gin at esetsize
+        }%
+        \the\toks@
+      }%
+      {\@warning{File `#2' not found}}%
+    \endgroup
+  }%
+  {\PackageError{jmlrutils}{`graphicx' package is required
+   if you want to use \string\includeteximage}{}}%
+}
+\ifjmlrutilssubfloats
+  \newcounter{subfigure}
+  \@addtoreset{subfigure}{figure}
+  \renewcommand*{\thesubfigure}{\alph{subfigure}}
+  \renewcommand*{\p at subfigure}{\expandafter\@p at subfigure}
+  \newcommand*{\@p at subfigure}[1]{%
+    \protect\@subfigurelabel{\thefigure}{\thesubfigure}%
+  }
+  \newcommand*\@subfigurelabel[2]{#1\subfigurelabel{#2}}
+  \newcommand*\@subfigref[1]{%
+    {%
+      \def\@subfigurelabel##1##2{\subfigurelabel{##2}}%
+      \ref{#1}%
+    }%
+  }
+  \newcommand*{\subfigref}[1]{%
+    \let\@objectname\@empty
+    \def\@objectref{}%
+    \let\@prevsep\@empty
+    \@for\@thislabel:=#1\do{%
+      \toks@{\@prevsep}%
+      \protected at edef\@objectref{\@objectref\the\toks@
+        \protect\@subfigref{\@thislabel}}%
+        \ifx\@objectname\@empty
+  \let\@objectname\@nil
+        \else
+  \let\@objectname\relax
+          \let\@prevsep\@jmlr at reflistsep
+        \fi
+    }%
+    \ifx\@objectname\relax
+      \let\@prevsep\@jmlr at reflistlastsep
+    \fi
+    \@objectref
+  }
+  \newcommand*{\subfigurelabel}[1]{(\emph{#1})}
+  \newsavebox\@subfloatcapbox
+  \newsavebox\@subfloatcontsbox
+  \newcommand*{\subfigure}[1][]{%
+    \bgroup
+    \def\@subfigcap{#1}%
+    \@subfigure
+  }
+  \newcommand*{\@subfigure}[2][b]{%
+    \advance\c at figure by 1\relax
+    \refstepcounter{subfigure}%
+    \sbox\@subfloatcapbox{\subfigurelabel{\thesubfigure}%
+    \ifx\@subfigcap\@empty
+    \else
+      \space\@subfigcap
+    \fi}%
+    \sbox\@subfloatcontsbox{#2}%
+    \settowidth{\@tempdima}{\usebox\@subfloatcontsbox}%
+    \settowidth{\@tempdimb}{\usebox\@subfloatcapbox}%
+    \ifdim\@tempdimb>\@tempdima
+      \settowidth\@tempdimb{\subfigurelabel{\thesubfigure}\space}%
+      \addtolength{\@tempdima}{-\@tempdimb}%
+      \sbox\@subfloatcapbox{\subfigurelabel{\thesubfigure}\space
+        \parbox[t]{\@tempdima}{\@subfigcap}}%
+    \fi
+    \begin{tabular}[#1]{@{}c@{}}%
+    \usebox\@subfloatcontsbox\\\usebox\@subfloatcapbox
+    \end{tabular}%
+    \egroup
+  }
+  \newcounter{subtable}
+  \@addtoreset{subtable}{table}
+  \renewcommand*{\thesubtable}{\alph{subtable}}
+  \renewcommand*{\p at subtable}{\expandafter\@p at subtable}
+  \newcommand*{\@p at subtable}[1]{%
+    \protect\@subtablelabel{\thetable}{\thesubtable}%
+  }
+  \newcommand*\@subtablelabel[2]{#1\subtablelabel{#2}}
+  \newcommand*\@subtabref[1]{%
+    {%
+      \def\@subtablelabel##1##2{\subtablelabel{##2}}%
+      \ref{#1}%
+    }%
+  }
+  \newcommand*{\subtabref}[1]{%
+    \let\@objectname\@empty
+    \def\@objectref{}%
+    \let\@prevsep\@empty
+    \@for\@thislabel:=#1\do{%
+      \toks@{\@prevsep}%
+      \protected at edef\@objectref{\@objectref\the\toks@
+        \protect\@subtabref{\@thislabel}}%
+        \ifx\@objectname\@empty
+  \let\@objectname\@nil
+        \else
+  \let\@objectname\relax
+          \let\@prevsep\@jmlr at reflistsep
+        \fi
+    }%
+    \ifx\@objectname\relax
+      \let\@prevsep\@jmlr at reflistlastsep
+    \fi
+    \@objectref
+  }
+  \newcommand*{\subtablelabel}[1]{(\emph{#1})}
+  \newcommand*{\subtable}[1][]{%
+    \def\@subtabcap{#1}%
+    \@subtable
+  }
+  \newcommand*{\@subtable}[2][t]{%
+    \refstepcounter{subtable}%
+    \sbox\@subfloatcapbox{\subtablelabel{\thesubtable}%
+    \ifx\@subtabcap\@empty
+    \else
+      \space\@subtabcap
+    \fi}%
+    \sbox\@subfloatcontsbox{#2}%
+    \settowidth{\@tempdima}{\usebox\@subfloatcontsbox}%
+    \settowidth{\@tempdimb}{\usebox\@subfloatcapbox}%
+    \ifdim\@tempdimb>\@tempdima
+      \settowidth\@tempdimb{\subtablelabel{\thesubtable}\space}%
+      \addtolength{\@tempdima}{-\@tempdimb}%
+      \sbox\@subfloatcapbox{\subtablelabel{\thesubtable}\space
+        \parbox[t]{\@tempdima}{\@subtabcap}}%
+    \fi
+    \begin{tabular}[#1]{@{}c@{}}%
+    \usebox\@subfloatcapbox\\\usebox\@subfloatcontsbox
+    \end{tabular}
+  }
+\fi
+\ifjmlrutilsmaths
+  \newcommand*{\set}[1]{\ensuremath{\mathcal{#1}}}
+  \let\orgvec\vec
+  \renewcommand*{\vec}[1]{\boldsymbol{#1}}
+\fi
+\newenvironment{enumerate*}%
+{%
+  \ifnum\@enumdepth=0\relax
+    \setcounter{enumi}{0}%
+  \fi
+  \ifnum\@enumdepth>\thr@@
+    \@toodeep
+  \else
+    \advance\@enumdepth\@ne
+    \def\@enumctr{enumi}%
+    \list
+      {\labelenumi}%
+      {\@nmbrlisttrue\def\@listctr{enumi}%
+       \def\makelabel##1{\hss\llap{##1}}}%
+  \fi
+}%
+{\endlist}
+\newenvironment{altdescription}[1]%
+  {\list{}%
+    {%
+      \settowidth{\labelwidth}{\altdescriptionlabel{#1}}%
+      \setlength{\labelsep}{15pt}%
+      \setlength{\leftmargin}{2\labelsep}%
+      \addtolength{\leftmargin}{\labelwidth}%
+      \setlength{\rightmargin}{\labelsep}%
+      \let\makelabel\altdescriptionlabel
+    }%
+  }%
+  {\endlist}
+
+\newcommand*{\altdescriptionlabel}[1]{\normalfont\bfseries #1\hfill}
+\newcommand*{\mailto}[1]{\texttt{#1}}
+\ifjmlrutilstheorems
+  \newcommand{\jmlrBlackBox}{\rule{1.5ex}{1.5ex}}
+  \providecommand{\BlackBox}{\jmlrBlackBox}
+  \newcommand{\jmlrQED}{\hfill\jmlrBlackBox\par\bigskip}
+  \newenvironment{proof}%
+  {%
+   \par\noindent{\bfseries\upshape Proof\ }%
+  }%
+  {\jmlrQED}
+  \newcommand*{\theorembodyfont}[1]{%
+    \renewcommand*{\@theorembodyfont}{#1}%
+  }
+  \newcommand*{\@theorembodyfont}{\normalfont\itshape}%
+  \newcommand*{\theoremheaderfont}[1]{%
+    \renewcommand*{\@theoremheaderfont}{#1}%
+  }
+  \newcommand*{\@theoremheaderfont}{\normalfont\bfseries }%
+  \newcommand*{\theoremsep}[1]{%
+    \renewcommand*{\@theoremsep}{#1}%
+  }
+  \newcommand*{\@theoremsep}{}%
+  \newcommand*{\theorempostheader}[1]{%
+    \renewcommand*{\@theorempostheader}{#1}%
+  }
+  \newcommand*{\@theorempostheader}{}%
+  \let\jmlr at org@newtheorem\newtheorem
+  \renewcommand*{\newtheorem}{\@ifstar\jmlr at snewtheorem\jmlr at newtheorem}
+  \newcommand*{\jmlr at snewtheorem}[2]{%
+    \cslet{jmlr at thm@#1 at body@font}{\@theorembodyfont}%
+    \cslet{jmlr at thm@#1 at header@font}{\@theoremheaderfont}%
+    \cslet{jmlr at thm@#1 at sep}{\@theoremsep}%
+    \cslet{jmlr at thm@#1 at postheader}{\@theorempostheader}%
+    \newenvironment{#1}%
+    {%
+      \trivlist
+        \item
+        [%
+          \hskip\labelsep{\csuse{jmlr at thm@#1 at header@font}#2%
+            \csuse{jmlr at thm@#1 at postheader}%
+          }%
+        ]%
+        \mbox{}\csuse{jmlr at thm@#1 at sep}%
+        \csuse{jmlr at thm@#1 at body@font}%
+    }%
+    {%
+      \endtrivlist
+    }%
+  }
+  \newcommand{\jmlr at newtheorem}[1]{%
+    \cslet{jmlr at thm@#1 at body@font}{\@theorembodyfont}%
+    \cslet{jmlr at thm@#1 at header@font}{\@theoremheaderfont}%
+    \cslet{jmlr at thm@#1 at sep}{\@theoremsep}%
+    \cslet{jmlr at thm@#1 at postheader}{\@theorempostheader}%
+    \jmlr at org@newtheorem{#1}%
+  }
+  \renewcommand*{\@xthm}[2]{%
+    \def\@jmlr at currentthm{#1}%
+    \@begintheorem{#2}{\csname the#1\endcsname}%
+    \ignorespaces
+  }
+  \def\@ythm#1#2[#3]{%
+    \def\@jmlr at currentthm{#1}%
+    \@opargbegintheorem{#2}{\csname the#1\endcsname}{#3}%
+    \ignorespaces
+  }
+  \renewcommand*{\@begintheorem}[2]{%
+    \ifdef{\@jmlr at currentthm}%
+    {%
+      \letcs{\jmlr at this@theoremheader}{jmlr at thm@\@jmlr at currentthm @header at font}%
+      \letcs{\jmlr at this@theorembody}{jmlr at thm@\@jmlr at currentthm @body at font}%
+      \letcs{\jmlr at this@theoremsep}{jmlr at thm@\@jmlr at currentthm @sep}%
+      \letcs{\jmlr at this@theorempostheader}%
+         {jmlr at thm@\@jmlr at currentthm @postheader}%
+    }%
+    {%
+      \let\jmlr at this@theorembody\@theorembodyfont
+      \let\jmlr at this@theoremheader\@theoremheaderfont
+      \let\jmlr at this@theoremsep\@theoremsep
+      \let\jmlr at this@theorempostheader\@theorempostheader
+    }%
+    \trivlist
+      \item
+       [%
+        \hskip\labelsep{\jmlr at this@theoremheader #1\ #2%
+           \jmlr at this@theorempostheader}%
+       ]%
+      \mbox{}\jmlr at this@theoremsep
+      \jmlr at this@theorembody
+  }
+  \renewcommand*{\@opargbegintheorem}[3]{%
+    \ifdef{\@jmlr at currentthm}%
+    {%
+      \letcs{\jmlr at this@theoremheader}{jmlr at thm@\@jmlr at currentthm @header at font}%
+      \letcs{\jmlr at this@theorembody}{jmlr at thm@\@jmlr at currentthm @body at font}%
+      \letcs{\jmlr at this@theoremsep}{jmlr at thm@\@jmlr at currentthm @sep}%
+      \letcs{\jmlr at this@theorempostheader}%
+         {jmlr at thm@\@jmlr at currentthm @postheader}%
+    }%
+    {%
+      \let\jmlr at this@theorembody\@theorembodyfont
+      \let\jmlr at this@theoremheader\@theoremheaderfont
+      \let\jmlr at this@theoremsep\@theoremsep
+      \let\jmlr at this@theorempostheader\@theorempostheader
+    }%
+    \trivlist
+     \item[\hskip\labelsep{\jmlr at this@theoremheader #1\ #2\ (#3)%
+       \jmlr at this@theorempostheader}]%
+     \mbox{}\jmlr at this@theoremsep
+     \jmlr at this@theorembody
+  }
+  \newtheorem{example}{Example}
+  \newtheorem{theorem}{Theorem}
+  \newtheorem{lemma}[theorem]{Lemma}
+  \newtheorem{proposition}[theorem]{Proposition}
+  \newtheorem{remark}[theorem]{Remark}
+  \newtheorem{corollary}[theorem]{Corollary}
+  \newtheorem{definition}[theorem]{Definition}
+  \newtheorem{conjecture}[theorem]{Conjecture}
+  \newtheorem{axiom}[theorem]{Axiom}
+\fi
+\endinput
+%%
+%% End of file `jmlrutils.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/jmlr/jmlrutils.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property


More information about the tex-live-commits mailing list