%\iffalse
% jmlr.dtx generated using makedtx version 1.2 (c) Nicola Talbot
% Command line args:
%   -src "jmlrutils.sty\Z=>jmlrutils.sty"
%   -src "jmlr.cls\Z=>jmlr.cls"
%   -src "(jmlrbook.*\.cls)\Z=>\1"
%   -section "chapter"
%   -doc "jmlr-manual.tex"
%   -author "Nicola Talbot"
%   jmlr
% Created on 2022/2/9 16:53
%\fi
%\iffalse
%<*package>
%% \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         \~}
%</package>
%\fi
% \iffalse
% Doc-Source file to use with LaTeX2e
% Copyright (C) 2022 Nicola Talbot, all rights reserved.
% \fi
% \iffalse
%<*driver>
\documentclass[report,widecs]{nlctdoc}

\usepackage{amsmath}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{ifthen}
\usepackage[colorlinks,
            bookmarks,
            hyperindex=false,
            pdfauthor={Nicola L.C. Talbot},
            pdftitle={Articles for Proceedings of Machine Learning
Research (PMLR)},
            pdfkeywords={pmlr,jmlr wcp,jmlr}]{hyperref}

\doxitem{Option}{option}{package options}

\CheckSum{5415}

\newcommand*{\appopt}[1]{\texttt{-{}-#1}}

\begin{document}
\DocInput{jmlr.dtx}
\end{document}
%</driver>
%\fi
%\MakeShortVerb{"}
%\DeleteShortVerb{\|}
%
% \title{Articles for Proceedings of Machine Learning Research (PMLR)
%formerly Journal of Machine Learning Research Workshop and
%Conference Proceedings (JMLR W\&CP)}
% \author{Nicola L. C. Talbot\\[10pt]
%\url{http://www.dickimaw-books.com/}}
%
% \date{2022-02-09 (version 1.30)}
% \maketitle
%\tableofcontents
%
%\chapter{Introduction}
%
%The \clsfmt{jmlr} class was designed primarily for the Journal of
%Machine Learning Research Workshop and Conference Proceedings (JMLR
%W\&CP) based on the \sty{jmlrwcp2e} package to make it easier for
%production editors to combine articles into a single book.
%
%The \clsopt{nowcp} option implements the \sty{jmlr2e} style to make it
%easier to include reprints from JMLR articles. If you are an author
%wanting to submit an article to the JMLR, please see their
%guidelines and use their official package.
%
%Since the creation of this class, the JMLR W\&CP has changed its name to
%the Proceedings of Machine Learning Research (PMLR). Articles
%submitted to the PMLR should use the \clsopt{pmlr} option. Reprints of
%old JMLR W\&CP articles should use the \clsopt{wcp} option. 
%
%The \clsfmt{jmlrbook} class was provided to combine articles that
%use the \clsfmt{jmlr} class into a book. The \cls{combine} class
%internally used by \clsfmt{jmlrbook} has stopped work following
%changes to the \LaTeX\ kernel in 2020.  This means that the
%\clsfmt{jmlrbook} class is now deprecated. This only affects
%production editors not article authors.
%
%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
%before \sty{hyperref}.
%\end{important}
%
%Anything that needs to be done before \sty{hyperref} is loaded can be specified 
%by defining the command
%\begin{definition}[\DescribeMacro{\jmlrprehyperref}]
%\cs{jmlrprehyperref}
%\end{definition}
%\emph{before} the class is loaded. For
%example, to load the packages \styfmt{foo} and \styfmt{bar} before 
%\sty{hyperref}, you can do:
%\begin{verbatim}
%\newcommand{\jmlrprehyperref}{\usepackage{foo,bar}}
%\documentclass{jmlr}
%\end{verbatim}
%
%\section{Required Packages}
%
%The \clsfmt{jmlr} class is based on the \cls{article} class and loads
%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,
%this class file does not load the obsolete \sty{epsfig} package.
%
%\chapter{Guidelines for Article Authors}
%\label{sec:jmlr}
%
%Article authors should use the \clsfmt{jmlr} class with the
%\clsopt{pmlr} option. This class
%comes with the example file \texttt{pmlr-sample.tex}, which can be used as 
%a template.
%
%The following class options are available:
%\begin{description}
%\item[\clsopt{pmlr}] The article is for the Proceedings of Machine
%Learning Research (PMLR).
%\item[\clsopt{wcp}] The article is for JMLR Workshop and Conference 
%Proceedings (JMLR W\&CP).
%\item[\clsopt{nowcp}] The article is for the Journal of Machine
%Learning Research (default).
%
%\item[\clsopt{twocolumn}] Use two-column style. The title and author
%information will span both columns through the use of the optional
%argument of \cs{twocolumn}. This means that no page break can occur
%in the title and author list.
%
%\item[\clsopt{onecolumn}] Use one-column style (default).
%
%\item[\clsopt{color}] Color version (see \sectionref{sec:color}).
%
%\item[\clsopt{gray}] Grayscale version (see \sectionref{sec:color}).
%
%\item[{\clsopt[top]{tablecaption}}] in a \env{table} environment,
%\ics{floatconts} puts the caption at the top.
%
%\item[{\clsopt[bottom]{tablecaption}}] in a \env{table} environment,
%\ics{floatconts} puts the caption at the bottom.
%
%\item[\clsopt{cleveref}] This option is passed to \sty{jmlrutils} 
%(see \sectionref{sec:jmlrutils}).
%
%\item[\clsopt{nocleveref}] This option is passed to \sty{jmlrutils} 
%(see \sectionref{sec:jmlrutils}).
%
%\end{description}
%
%\section{Title Information}
%
%The \clsfmt{jmlr} class uses different syntax from \sty{jmlr2e} and
%\sty{jmlrwcp2e} to specify the title information. In particular, it
%doesn't define \cs{jmlrheading} and \cs{ShortHeading}. Instead, the
%following commands should be used:
%
%\begin{definition}[\DescribeMacro{\jmlrvolume}]
%\cs{jmlrvolume}\marg{number}
%\end{definition}
%This specifies the volume number. For example:
%\begin{verbatim}
%\jmlrvolume{2}
%\end{verbatim}
%
%\begin{definition}[\DescribeMacro{\jmlryear}]
%\cs{jmlryear}\marg{year}
%\end{definition}
%This specifies the year. For example:
%\begin{verbatim}
%\jmlryear{2010}
%\end{verbatim}
%
%\begin{definition}[\DescribeMacro{\jmlrsubmitted}]
%\cs{jmlrsubmitted}\marg{date}
%\end{definition}
%This specifies the submission date.
%
%\begin{definition}[\DescribeMacro{\jmlrpublished}]
%\cs{jmlrpublished}\marg{date}
%\end{definition}
%This specifies the publication date.
%
%\begin{definition}[\DescribeMacro{\jmlrworkshop}]
%\cs{jmlrworkshop}\marg{title}
%\end{definition}
%This specifies the workshop title (for use with the \clsopt{wcp}
%class option).
%
%The title information is specified using the commands described
%below. These commands should typically go in the preamble. As
%with most class files, The title itself is produced using
%\begin{definition}[\DescribeMacro{\maketitle}]
%\cs{maketitle}
%\end{definition}
%This command should go after \verb|\begin{document}|. For example:
%\begin{verbatim}
%\begin{document}
%\maketitle
%\end{verbatim}
%Before \cs{maketitle}, you must specify the title information
%using the following commands:
%
%\begin{definition}[\DescribeMacro{\title}]
%\cs{title}\oarg{short title}\marg{title}
%\end{definition}
%This specifies the article's title. A short title for the page
%header can be supplied via the optional argument \meta{short title}.
%If you want to force a line break in the title, use
%\begin{definition}[\DescribeMacro{\titlebreak}]
%\cs{titlebreak}
%\end{definition}
%instead of \cs{newline} or \verb|\\| as this will ensure that the
%line break doesn't also end up in the table of contents or bookmarks
%when the article is included in a book. If there is content within
%the title that should not appear in the page headings or table of
%contents (for example, a footnote) use
%\begin{definition}[\DescribeMacro{\titletag}]
%\cs{titletag}\marg{title only stuff}
%\end{definition}
%For example:
%\begin{verbatim}
%\title{An Interesting Paper\titlebreak
%With a Line Break\titletag{\thanks{and an
%acknowledgement}}}
%\end{verbatim}
%
%
%\begin{definition}[\DescribeMacro{\editor}]
%\cs{editor}\marg{name}
%\end{definition}
%This specifies the editor's name. If there is more than one 
%editor, use:
%\begin{definition}[\DescribeMacro{\editors}]
%\cs{editors}\marg{names}
%\end{definition}
%
%\begin{definition}[\DescribeMacro{\author}]
%\cs{author}\marg{author specs}
%\end{definition}
%This specifies the author. The specifications \meta{author specs}
%are a bit different to \sty{jmlr2e} and \sty{jmlrwcp2e}. Use
%\begin{definition}[\DescribeMacro{\Name}]
%\cs{Name}\oarg{abbreviated name}\marg{author's name}
%\end{definition}
%to specify the author's name. Note that if the surname contains a
%space it must be grouped (enclosed in braces \{\}). Similarly if
%the initial letter of each forename is a diacritic it must be
%grouped. If the abbreviation of the name doesn't get parsed
%properly you can override the default using the optional argument. (See below for examples.)
%
%If there is any content within \meta{author's name} that shouldn't
%get copied to the header, footer or table of contents, it should be
%enclosed within the argument of
%\begin{definition}[\DescribeMacro{\nametag}]
%\cs{nametag}\marg{title only stuff}
%\end{definition}
%For example:
%\begin{verbatim}
%\Name{Ann Other\nametag{\thanks{formerly with some other
%institute}}}
%\end{verbatim}
%
%\begin{important}
%Ensure no space occurs before \cs{nametag} otherwise the surname
%will be interpreted as an empty string because the space is used to
%separate the forenames from the surname.
%\end{important}
%
%\begin{definition}[\DescribeMacro{\Email}]
%\cs{Email}\marg{author's email}
%\end{definition}
%This specifies the author's email address. It should only be used
%within the argument to \cs{author}.
%
%\begin{definition}[\DescribeMacro{\and}]
%\cs{and}
%\end{definition}
%This should be used to separate two authors with the same address.
%
%\begin{definition}[\DescribeMacro{\AND}]
%\cs{AND}
%\end{definition}
%This should be used to separate authors with different addresses.
%
%\begin{definition}[\DescribeMacro{\\}]
%\verb|\\|
%\end{definition}
%This should be used before an author's address or between authors
%with the same address where there are more that two authors.
%
%\begin{definition}[\DescribeMacro{\addr}]
%\cs{addr}
%\end{definition}
%This should be used at the start of the address.
%
%\begin{description}
%\item[Example 1] Two authors with the same address:
%\begin{verbatim}
%\author{\Name{Jane Doe} \Email{abc@sample.com}\and
%   \Name{John {Basey Fisher}} \Email{xyz@sample.com}\\
%   \addr Address}
%\end{verbatim}
%In this example, the second author has a space in his surname
%so the surname needs to be grouped.
%
%\item[Example 2] Three authors with the same address:
%\begin{verbatim}
%\author{\Name{Fred Arnold {de la Cour}} \Email{an1@sample.com}\\
%   \Name{Jack Jones} \Email{an3@sample.com}\\
%   \Name{{\'E}louise {\'E}abhla Finchley} \Email{an2@sample.com}\\
%   \addr Address}
%\end{verbatim}
%In this example, the third author has an accent on her
%forename initials so grouping is required. 
%
%\item[Example 3] Authors with a different address:
%\begin{verbatim}
%\author{\Name{John Smith} \Email{abc@sample.com}\\
%  \addr Address 1
%  \AND
%  \Name{May Brown} \Email{xyz@sample.com}\\
%  \addr Address 2
% }
%\end{verbatim}
%
%\item[Example 4] The author is actually a company so there's no
%first name and surname:
%\begin{verbatim}
%\author{\Name[Some Company, Ltd]{Some Company, Ltd}\Email{xyz:some.com}\\
%  \addr Address
%}
%\end{verbatim}
%\end{description}
%
%\section{Font Changing Commands}
%
%Use the \LaTeXe\ font changing commands, such as \cs{bfseries} or
%\cs{textbf}\marg{text}, rather than the obsolete \LaTeX2.09
%commands, such as \cs{bf}. (The obsolete font changing commands
%will produce a warning if used.)
%
%\begin{definition}[\DescribeMacro{\url}]
%\cs{url}\marg{address}
%\end{definition}
%This will typeset \meta{address} in a typewriter font. Special
%characters, such as \verb|~|, are correctly displayed. Example:
%\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}
%\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}. This command is provided by the
%supplementary package \sty{jmlrutils}. Other commands are described
%in \sectionref{sec:jmlrutils}.
%
%\section{Structure}
%
%\begin{definition}[\DescribeEnv{abstract}]
%\cs{begin}\{abstract\}\\
%\meta{text}\\
%\cs{end}\{abstract\}
%\end{definition}
%The abstract text should be displayed using the \envfmt{abstract}
%environment.
%
%\begin{definition}[\DescribeEnv{keywords}]
%\cs{begin}\{keywords\}\meta{keyword list}\cs{end}\{keywords\}
%\end{definition}
%The keywords should be displayed using the \envfmt{keywords}
%environment.
%
%\begin{definition}[\DescribeMacro{\acks}]
%\cs{acks}\marg{text}
%\end{definition}
%This displays the acknowledgements.
%
%\begin{definition}[\DescribeMacro{\section}]
%\cs{section}\marg{title}
%\end{definition}
%Section titles are created using \cs{section}. The heading is
%automatically numbered and can be cross-referenced using
%\cs{label} and \cs{ref}. Unnumbered sections can be produced
%using:
%\begin{definition}[\DescribeMacro{\section*}]
%\cs{section*}\marg{title}
%\end{definition}
%
%\begin{definition}[\DescribeMacro{\subsection}]
%\cs{subsection}\marg{title}
%\end{definition}
%Sub-section titles are created using \cs{subsection}. Unnumbered 
%sub-sections can be produced using:
%\begin{definition}[\DescribeMacro{\subsection*}]
%\cs{subsection*}\marg{title}
%\end{definition}
%
%\begin{definition}[\DescribeMacro{\subsubsection}]
%\cs{subsubsection}\marg{title}
%\end{definition}
%Sub-sub-section titles are created using \cs{subsubsection}.
%Unnumbered sub-sub-sections can be produced using:
%\begin{definition}[\DescribeMacro{\subsubsection*}]
%\cs{subsubsection*}\marg{title}
%\end{definition}
%
%Further sectioning levels can be obtained using \cs{paragraph}
%and \cs{subparagraph}, but these are unnumbered with running heads.
%
%\begin{definition}[\DescribeMacro{\appendix}]
%\cs{appendix}
%\end{definition}
%Use \cs{appendix} to switch to the appendices. This changes
%\cs{section} to produce an appendix. Example:
%\begin{verbatim}
%\appendix
%\chapter{Proof of Theorems}
%\end{verbatim}
%
%\section{Citations and Bibliography}
%
%The \clsfmt{jmlr} class automatically loads \sty{natbib} and sets
%the bibliography style to \texttt{plainnat}. References should
%be stored in a \texttt{.bib} file.
%
%\begin{definition}[\DescribeMacro{\bibliography}]
%\cs{bibliography}\marg{bib file}
%\end{definition}
%This displays the bibliography.
%
%\begin{definition}[\DescribeMacro{\citep}]
%\cs{citep}\oarg{pre note}\oarg{post note}\marg{label}
%\end{definition}
%Use \cs{citep} for a parenthetical citation.
%
%\begin{definition}[\DescribeMacro{\citet}]
%\cs{citet}\oarg{note}\marg{label}
%\end{definition}
%Use \cs{citet} for a textual citation.
%
%See the \ctandoc{natbib} for further details.
%
%\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{cleveref}] Loads \sty{aliascnt} and \sty{cleveref} 
%and defines the theorem environments with aliased counters. Note
%that this option is largely redundant with \pkgopt{notheorems}. When
%\sty{jmlrutils} is loaded implicitly by \cls{jmlr}, this option will
%also ensure that \sty{hyperref} is loaded before \sty{cleveref}. If
%\sty{jmlrutils} is loaded without \cls{jmlr} then \sty{hyperref}
%won't be loaded unless \ics{jmlrprehyperref} is defined.
%
%\item[\pkgopt{nocleveref}] Don't load \sty{aliascnt} and
%\sty{cleveref} (default).
%
%\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
%it's best to use the \texttt{htbp} specifier and don't put
%the float in the middle of a paragraph (that is, make sure there's
%a paragraph break above and below the float). Floats are supposed
%to have a little extra space above and below them to make them 
%stand out from the rest of the text. This extra space is put in
%automatically and shouldn't need modifying.
%
%To ensure consistency, please \emph{\bfseries don't} try changing the
%format of the caption by doing something like:
%\begin{verbatim}
%\caption{\textit{A Sample Caption.}}
%\end{verbatim}
%or
%\begin{verbatim}
%\caption{\em A Sample Caption.}
%\end{verbatim}
%You can, of course, change the font for individual words or
%phrases. For example:
%\begin{verbatim}
%\caption{A Sample Caption With Some \emph{Emphasized Words}.}
%\end{verbatim}
%
%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 centred. For example:
%\begin{verbatim}
%\begin{table}[htbp]
%\floatconts
%  {tab:example}% label
%  {\caption{An Example Table}}% caption command
%  {%
%    \begin{tabular}{ll}
%    \bfseries Dataset & \bfseries Result\\
%    Data1 & 0.123456
%    \end{tabular}
%  }
%\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:
%\begin{definition}[\DescribeMacro{\includegraphics}]
%\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}:
%\begin{verbatim}
%\begin{figure}[htbp]
%\floatconts
%  {fig:example}% label
%  {\caption{An Example Figure}}% caption command
%  {\includegraphics[width=0.5\textwidth]{images/mypic}}
%\end{figure}
%\end{verbatim}
%
%Note that you shouldn't specify the file extension when including
%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}
%\end{definition}
%If your image file is made up of \LaTeX\ code (e.g.\ \sty{tikz}
%commands) the file can be included using \cs{includeteximage}.
%The optional argument is a key=value comma-separated list
%where the available keys are a subset of those provided by 
%\sty{graphicx}'s \cs{includegraphics}. The main keys are: \texttt{width},
%\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}.
%
%\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. If you aren't using the \clsfmt{jmlr}
%class, you can prevent \styfmt{jmlrutils} from defining these
%commands with the \pkgopt{nosubfloats} package option.
%
%Sub-float captions that are wider than the corresponding sub-float content
%are placed inside a \cs{parbox} set to the width of the sub-float
%content. This allows long captions to line wrap in a mini-paragraph
%below the sub-float. However, if the sub-float is very narrow, this
%can lead to badly-broken sub-captions that generate overfull or
%underfull hbox warnings. You can specify a minimum width for
%sub-float captions by setting the following length:
%\begin{definition}[\DescribeMacro{\jmlrminsubcaptionwidth}]
%\cs{jmlrminsubcaptionwidth}
%\end{definition}
%The default value is 0pt. The value should be set with
%\cs{setlength}. The assignment can be localised by placing it within
%a group or environment.
%
%\begin{definition}[\DescribeMacro{\subfigure}]
%\cs{subfigure}\oarg{title}\oarg{valign}\marg{contents}
%\end{definition}
%This makes a sub-figure where \meta{contents} denotes the contents
%of the sub-figure. This should also include the \cs{label}.
%The first optional argument \meta{title} indicates a caption for
%the sub-figure. By default, the sub-figures are aligned at the
%base. This can be changed with the second optional argument
%\meta{valign}, which may be one of: \texttt{t} (top), \texttt{c}
%(centred) or \texttt{b} (base).
%
%For example, suppose there are two images files, \texttt{mypic1.png}
%and \texttt{mypic2.png}, in the subdirectory \texttt{images}.
%Then they can be included as sub-figures as follows:
%\begin{verbatim}
%\begin{figure}[htbp]
%\floatconts
%  {fig:example2}% label for whole figure
%  {\caption{An Example Figure.}}% caption for whole figure
%  {%
%    \subfigure{%
%      \label{fig:pic1}% label for this sub-figure
%      \includegraphics{images/mypic1}
%    }\qquad % space out the images a bit
%    \subfigure{%
%      \label{fig:pic2}% label for this sub-figure
%      \includegraphics{images/mypic2}
%    }
%  }
%\end{figure}
%\end{verbatim}
%
%\begin{definition}[\DescribeMacro{\subtable}]
%\cs{subtable}\oarg{title}\oarg{valign}\marg{contents}
%\end{definition}
%This is an analogous command for sub-tables. The default value
%for \meta{valign} is \texttt{t}.
%
%\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\}\oarg{placement}\\
%\meta{contents}\\
%\cs{end}\{algorithm\}
%\end{definition}
%Enumerated textual algorithms can be displayed using the 
%\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}\\
%\ldots\\
%\cs{end}\{enumerate*\}
%\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 \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$
%  \begin{enumerate*}
%    \item \label{step:locate}Locate all unlabelled vertices 
%          adjacent to a vertex labelled $i$ and label them $i+1$
%    \item If vertex $t$ has been labelled,
%    \begin{enumerate*}
%      \item[] the shortest path can be found by backtracking, and 
%      the length is given by the label of $t$.
%    \end{enumerate*}
%    otherwise
%    \begin{enumerate*}
%      \item[] increment $i$ and return to step~\ref{step:locate}
%    \end{enumerate*}
%  \end{enumerate*}
%\end{enumerate*}
%}
%\end{algorithm}
%\end{verbatim}
%
%
%\begin{definition}[\DescribeEnv{algorithm2e}]
%\cs{begin}\{algorithm2e\}\\
%\meta{contents}\\
%\cs{end}\{algorithm2e\}
%\end{definition}
%Pseudo code can be displayed using the \envfmt{algorithm2e} environment,
%provided by the \sty{algorithm2e} package, which is automatically
%loaded. For example:
%\begin{verbatim}
%\begin{algorithm2e}
%\caption{Computing Net Activation}
%\label{alg:net}
%\DontPrintSemicolon
%\LinesNumbered
%\KwIn{$x_1, \ldots, x_n, w_1, \ldots, w_n$}
%\KwOut{$y$, the net activation}
%$y\leftarrow 0$\;
%\For{$i\leftarrow 1$ \KwTo $n$}{
%  $y \leftarrow y + w_i*x_i$\;
%}
%\end{algorithm2e}
%\end{verbatim}
%
%See the \ctandoc{algorithm2e} for more details.
%
%\subsection{Description Lists}
%
%\begin{definition}[\DescribeEnv{altdescription}]
%\cs{begin}\{altdescription\}\marg{widest label}\\
%\cs{item}\oarg{label} \meta{item text}\\
%\cs{end}\{altdescription\}
%\end{definition}
%In addition to the standard \env{description} environment, the
%\clsfmt{jmlr} class also provides the \envfmt{altdescription} environment.
%This has an argument that should be the widest label used in the
%list. For example:
%\begin{verbatim}
%\begin{altdescription}{differentiate}
%\item[add] A method that adds two variables.
%\item[differentiate] A method that differentiates a function.
%\end{altdescription}
%\end{verbatim}
%
%\subsection{Theorems, Lemmas etc}
%\label{sec:theorems}
%
%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
%environments, you can use the \env{proof} environment to display the
%proof if need be. The theorem-like environments all take an
%optional argument, which gives the environment a title. For example:
%
%\begin{verbatim}
%\begin{theorem}[An Example Theorem]
%\label{thm:example}
%This is the theorem.
%\begin{proof}
%This is the proof.
%\end{proof}
%\end{theorem}
%\end{verbatim}
%
%You can define your own numbered theorem-like environment using:
%\begin{definition}[\DescribeMacro{\newtheorem}]
%\cs{newtheorem}\marg{name}\oarg{counter}\marg{title}\oarg{outer
%counter}
%\end{definition}
%or you can define an unnumbered theorem-like environment using:
%\begin{definition}[\DescribeMacro{\newtheorem*}]
%\cs{newtheorem*}\marg{name}\marg{title}
%\end{definition}
%where \meta{name} is the name of the new environment and
%\meta{title} is the title tag at the start of the environment. In
%the case of the numbered theorems, \meta{counter} is a predefined
%counter to use with this theorem. If omitted, a new counter called
%\meta{name} will be defined. The final optional argument \meta{outer
%counter} is the name of a parent counter which, when incremented, should 
%reset the theorem counter.
%
%Both \cs{newtheorem} and \cs{newtheorem*} set the new theorem's
%style to the current defined style. The current style is set using
%the following commands:
%\begin{definition}[\DescribeMacro{\theorembodyfont}]
%\cs{theorembodyfont}\marg{declarations}
%\end{definition}
%This sets the font declarations used in the body of the theorem.
%This defaults to \cs{itshape}.
%\begin{definition}[\DescribeMacro{\theoremheaderfont}]
%\cs{theoremheaderfont}\marg{declarations}
%\end{definition}
%This sets the font declarations used for the theorem title.
%This defaults to \cs{bfseries}.
%\begin{definition}[\DescribeMacro{\theorempostheader}]
%\cs{theorempostheader}\marg{text}
%\end{definition}
%This indicates what should occur at the end of the title. This
%defaults to nothing.
%\begin{definition}[\DescribeMacro{\theoremsep}]
%\cs{theoremsep}\marg{text}
%\end{definition}
%This indicates what to put between the header and the body of the
%environment. This defaults to nothing.
%
%For example, to define an unnumbered theorem-like environment called
%\qt{note} with the title \qt{Note} followed by a colon and a new
%line between the title and the body of the \texttt{note}
%environment:
%\begin{verbatim}
% \theorembodyfont{\upshape}
% \theoremheaderfont{\scshape}
% \theorempostheader{:}
% \theoremsep{\newline}
% \newtheorem*{note}{Note}
%\end{verbatim}
%Now it can be used in the document environment:
%\begin{verbatim}
%\begin{note}
%This is an numbered theorem-like environment.
%\end{note}
%\end{verbatim}
%
%\subsection{Cross-Referencing}
%\label{sec:crossref}
%
%Always use \ics{label} when cross-referencing, rather than writing
%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.
%
%\begin{definition}[\DescribeMacro{\sectionref}]
%\cs{sectionref}\marg{label list}
%\end{definition}
%Used to refer to a section or sections. For example, if you defined 
%a section as follows:
%\begin{verbatim}
%\chapter{Results}\label{sec:results}
%\end{verbatim}
%you can refer to it as follows:
%\begin{verbatim}
%The results are detailed in \sectionref{sec:results}.
%\end{verbatim}
%This command may also be used for sub-sections and sub-sub-sections.
%
%\begin{definition}[\DescribeMacro{\appendixref}]
%\cs{appendixref}\marg{label list}
%\end{definition}
%Used to refer to an appendix or multiple appendices.
%
%\begin{definition}[\DescribeMacro{\equationref}]
%\cs{equationref}\marg{label list}
%\end{definition}
%Used to refer to an equation or multiple equations.
%
%\begin{definition}[\DescribeMacro{\tableref}]
%\cs{tableref}\marg{label list}
%\end{definition}
%Used to refer to a table or multiple tables. This can also be
%used for sub-tables where the main table number is also required.
%
%\begin{definition}[\DescribeMacro{\subtabref}]
%\cs{subtabref}\marg{label list}
%\end{definition}
%Used to refer to sub-tables without the main table number, e.g.
%(\emph{a}) or (\emph{b}).
%
%\begin{definition}[\DescribeMacro{\figureref}]
%\cs{figureref}\marg{label list}
%\end{definition}
%Used to refer to a figure or multiple figures. This can also
%be used for sub-figures where the main figure number is also
%required, e.g.\ 2(\emph{a}) or 4(\emph{b}).
%
%\begin{definition}[\DescribeMacro{\subfigref}]
%\cs{subfigref}\marg{label list}
%\end{definition}
%Used to refer to sub-figures without the main figure number, e.g.
%(\emph{a}) or (\emph{b}).
%
%\begin{definition}[\DescribeMacro{\algorithmref}]
%\cs{algorithmref}\marg{label list}
%\end{definition}
%Used to refer to an algorithm or multiple algorithms.
%
%\begin{definition}[\DescribeMacro{\theoremref}]
%\cs{theoremref}\marg{label list}
%\end{definition}
%Used to refer to a theorem or multiple theorems.
%
%\begin{definition}[\DescribeMacro{\lemmaref}]
%\cs{lemmaref}\marg{label list}
%\end{definition}
%Used to refer to a lemma or multiple lemmas.
%
%\begin{definition}[\DescribeMacro{\remarkref}]
%\cs{remarkref}\marg{label list}
%\end{definition}
%Used to refer to a remark or multiple remarks.
%
%\begin{definition}[\DescribeMacro{\corollaryref}]
%\cs{corollaryref}\marg{label list}
%\end{definition}
%Used to refer to a corollary or multiple corollaries.
%
%\begin{definition}[\DescribeMacro{\definitionref}]
%\cs{definitionref}\marg{label list}
%\end{definition}
%Used to refer to a definition or multiple definitions.
%
%\begin{definition}[\DescribeMacro{\conjectureref}]
%\cs{conjectureref}\marg{label list}
%\end{definition}
%Used to refer to a conjecture or multiple conjectures.
%
%\begin{definition}[\DescribeMacro{\axiomref}]
%\cs{axiomref}\marg{label list}
%\end{definition}
%Used to refer to an axiom or multiple axioms.
%
%\begin{definition}[\DescribeMacro{\exampleref}]
%\cs{exampleref}\marg{label list}
%\end{definition}
%Used to refer to an example or multiple examples.
%
%\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.
%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{maths}
%\end{definition}
%In addition to the commands provided by \sty{amsmath}, the
%\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}
%\[E = m c^2\]
%\end{verbatim}
%Numbered single-line equations should be displayed using the
%\env{equation} environment. For example:
%\begin{verbatim}
%\begin{equation}\label{eq:trigrule}
%\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}
%\begin{align}
%f(x) &= x^2 + x\label{eq:f}\\
%f'(x) &= 2x + 1\label{eq:df}
%\end{align}
%\end{verbatim}
%Unnumbered multi-lined equations should be displayed using the
%\env{align*} environment. For example:
%\begin{verbatim}
%\begin{align*}
%f(x) &= (x+1)(x-1)\\
%&= x^2 - 1
%\end{align*}
%\end{verbatim}
%If you want to mix numbered with unnumbered lines use the
%\env{align} environment and suppress unwanted line numbers with
%\cs{nonumber}. For example:
%\begin{verbatim}
%\begin{align}
%y &= x^2 + 3x - 2x + 1\nonumber\\
%&= x^2 + x + 1\label{eq:y}
%\end{align}
%\end{verbatim}
%An equation that is too long to fit on a single line can be
%displayed using the \env{split} environment. 
%
%Text can be embedded in an equation using \ics{text}\marg{text} or 
%you can use \ics{intertext}\marg{text} to interupt a multi-line
%environment such as \env{align}.
%
%Predefined operator names are listed in \tableref{tab:operatornames}. 
%For additional operators, either use 
%\begin{definition}[\DescribeMacro{\operatorname}]
%\cs{operatorname}\marg{name}
%\end{definition}
%for example
%\begin{verbatim}
%If $X$ and $Y$ are independent,
%$\operatorname{var}(X+Y) = 
%\operatorname{var}(X) + \operatorname{var}(Y)$
%\end{verbatim}
%or declare it with
%\begin{definition}[\DescribeMacro{\DeclareMathOperator}]
%\cs{DeclareMathOperator}\marg{command}\marg{name}
%\end{definition}
%for example
%\begin{verbatim}
%\DeclareMathOperator{\var}{var}
%\end{verbatim}
%and then use this new command:
%\begin{verbatim}
%If $X$ and $Y$ are independent,
%$\var(X+Y) = \var(X)+\var(Y)$
%\end{verbatim}
%
%If you want limits that go above and
%below the operator (like \ics{sum}) use the starred versions
%(\ics{operatorname*} or \ics{DeclareMathOperator*}).
%
%\begin{table}[htbp]
%\caption{Predefined Operator Names (taken from 
%   \sty{amsmath} documentation)}
%\label{tab:operatornames}%
%\vskip\baselineskip
%\centering
%\begin{tabular}{rlrlrlrl}
%\cs{arccos} & $\arccos$ &  \cs{deg} & $\deg$ &  \cs{lg} & $\lg$ &  \cs{projlim} & $\projlim$ \\
%\cs{arcsin} & $\arcsin$ &  \cs{det} & $\det$ &  \cs{lim} & $\lim$ &  \cs{sec} & $\sec$ \\
%\cs{arctan} & $\arctan$ &  \cs{dim} & $\dim$ &  \cs{liminf} & $\liminf$ &  \cs{sin} & $\sin$ \\
%\cs{arg} & $\arg$ &  \cs{exp} & $\exp$ &  \cs{limsup} & $\limsup$ &  \cs{sinh} & $\sinh$ \\
%\cs{cos} & $\cos$ &  \cs{gcd} & $\gcd$ &  \cs{ln} & $\ln$ &  \cs{sup} & $\sup$ \\
%\cs{cosh} & $\cosh$ &  \cs{hom} & $\hom$ &  \cs{log} & $\log$ &  \cs{tan} & $\tan$ \\
%\cs{cot} & $\cot$ &  \cs{inf} & $\inf$ &  \cs{max} & $\max$ &  \cs{tanh} & $\tanh$ \\
%\cs{coth} & $\coth$ &  \cs{injlim} & $\injlim$ &  \cs{min} & $\min$ \\
%\cs{csc} & $\csc$ &  \cs{ker} & $\ker$ &  \cs{Pr} & $\Pr$
%\end{tabular}\par
%\begin{tabular}{rlrl}
%\cs{varlimsup} & $\varlimsup$ 
%& \cs{varinjlim} & $\varinjlim$\\
%\cs{varliminf} & $\varliminf$ 
%& \cs{varprojlim} & $\varprojlim$
%\end{tabular}
%
%\end{table}
%
%\section{Color vs Grayscale}
%\label{sec:color}
%
%If the proceedings are to be incorporated into a black and white
%printed book, it can be helpful if authors supply grayscale versions
%of their image files. This section can be ignored if your article
%will only be available online.
%
%With external PDF, PNG or JPG graphic files, the grayscale version
%should be named with \texttt{-gray} added to the basename (before
%the image file extension).
%
%For example, if the file is called \texttt{myimage.png},
%then the gray version should be \texttt{myimage-gray.png} or
%\texttt{myimage-gray.pdf} or \texttt{myimage-gray.jpg}. You don't
%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). 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}
%\end{definition}
%You can use \cs{ifprint} to determine which mode you are in.
%For example:
%\begin{verbatim}
%in \figureref{fig:nodes}, the
%\ifprint{dark gray}{purple}
%ellipse represents an input and the
%\ifprint{light gray}{yellow} ellipse
%represents an output.
%\end{verbatim}
%Another example:
%\begin{verbatim}
%{\ifprint{\bfseries}{\color{red}}important text!}
%\end{verbatim}
%
%You can use the class option \clsopt{gray} to see how the
%document will appear in gray scale mode.
%
%The \sty{xcolor} class is loaded with the \pkgoptfmt{x11names}
%option, so you can use any of the x11 predefined colors (listed
%in the \ctandoc{xcolor}).
%
%\section{Where To Go For Help}
%
%If you have a general \LaTeX\ query, the first place to go to is the 
%\urlfootref{https://texfaq.org/}{\TeX\ FAQ}.
%
%If you are unfamiliar or just getting started with \LaTeX, there's
%a list of on-line introductions to \LaTeX\ at
%\url{https://texfaq.org/FAQ-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{https://tex.stackexchange.com/}),
%the \LaTeX\ Community (\url{https://latex.org/forum/}),
%the \texttt{texhax} mailing list 
%(\url{http://tug.org/mailman/listinfo/texhax}) and
%\texttt{comp.text.tex} (archives available at
%\url{http://groups.google.com/group/comp.text.tex/}).
%
%Documentation for packages or classes can be found using the
%\texttt{texdoc} application. For example:
%\begin{verbatim}
%texdoc natbib
%\end{verbatim}
%Alternatively, you can go to 
%\texttt{http://www.ctan.org/pkg/}\meta{name} where
%\meta{name} is the name of the package. For example:
%\url{http://www.ctan.org/pkg/natbib}
%
%For a general guide to preparing papers (regardless of whether you
%are using \LaTeX\ or a word processor), see Kate L.~Turabian, \qt{A
%manual for writers of term papers, theses, and dissertations}, The
%University of Chicago Press, 1996.
%
%\chapter{Guidelines for Production Editors}
%\label{sec:jmlrbook}
%
%The \clsfmt{jmlrbook} class is now obsolete as it has stopped
%working following changes to the \LaTeX\ kernel in 2020. The class
%is described here for archival purposes.
%
%To prepare articles for PMLR, you will need to manually set the
%first page number using:
%\begin{definition}[\DescribeMacro\firstpageno]
%\cs{firstpageno}\marg{n}
%\end{definition}
%
%Please follow the
%\href{https://proceedings.mlr.press/spec.html}{PMLR specifications}.
%
%
%\section{\clsfmt{jmlrbook} Class Options}
%\begin{description}
%\item[\clsopt{nowcp}]The imported pre-published articles were 
%published in the Journal of Machine Learning Research (default).
%\item[\clsopt{pmlr}] The imported pre-published articles were
%published in the Proceedings of Machine Learning Research (PMLR).
%\item[\clsopt{wcp}] The imported pre-published articles were
%published in the JMLR Workshop and Conference Proceedings (JMLR
%W\&CP).
%
%If the book has a mixture of JMLR, JMLR W\&CP or PMLR articles, you
%can switch between them using
%\begin{definition}[\DescribeMacro{\jmlrnowcp}]
%\cs{jmlrnowcp}
%\end{definition}
%(for JMLR) or
%\begin{definition}[\DescribeMacro{\jmlrwcp}]
%\cs{jmlrwcp}
%\end{definition}
%(for JMLR W\&CP) or
%\begin{definition}[\DescribeMacro{\jmlrpmlr}]
%\cs{jmlrpmlr}
%\end{definition}
%(for PMLR).
%Alternatively, you can set the name of the journal or conference
%proceedings using:
%\begin{definition}[\DescribeMacro{\jmlrproceedings}]
%\cs{jmlrproceedings}\marg{short title}\marg{long title}
%\end{definition}
%
%\item[\clsopt{color}] Color version (see \sectionref{sec:color}). 
%Use this option for the on-line version with hyperlinks enabled
%(default).
%
%\item[\clsopt{gray}] Grayscale version (see \sectionref{sec:color}). 
%Use this option for the print version without hyperlinks.
%
%\item[{\clsopt[top]{tablecaption}}] in a \env{table} environment,
%\ics{floatconts} puts the caption at the top.
%
%\item[{\clsopt[bottom]{tablecaption}}] in a \env{table} environment,
%\ics{floatconts} puts the caption at the bottom.
%
%\item[\clsopt{letterpaper}] Set the paper size to letter (default).
%
%\item[\clsopt{7x10}] Set the paper size to $7\times10$ inches.
%
%\item[\clsopt{10pt}] Use 10pt as the normal text size.
%\item[\clsopt{11pt}] Use 11pt as the normal text size (default).
%\item[\clsopt{12pt}] Use 12pt as the normal text size.
%
%\end{description}
%
%\section{The Preamble}
%
%Any packages that the imported articles load (which aren't 
%automatically loaded by \clsfmt{jmlr}) must be loaded in the book's
%preamble. For example, if one or more of the articles load the
%\sty{siunitx} package, this package must be loaded in the book.
%
%Commands that are defined in the imported articles will be local
%to that article unless they have been globally defined using
%\ics{gdef} or \ics{global}. Since most authors use \ics{newcommand}
%and \ics{newenvironment} (or \ics{renewcommand} and 
%\ics{renewenvironment}) this shouldn't cause a conflict if more
%that one article has defined the same command or environment.
%For example, in the sample files supplied, both 
%\texttt{paper1/paper1.tex} and \texttt{paper2/paper2.tex} have 
%defined the command \cs{samplecommand} using \cs{newcommand}. As
%long as this command isn't also defined in the book, there won't
%be a conflict.
%
%\begin{definition}[\DescribeMacro{\title}]
%\cs{title}\oarg{PDF title}\marg{book title}
%\end{definition}
%In the book preamble, \cs{title} sets the book title and the optional
%argument is used for the PDF title, which will be displayed
%when the reader views the PDF file's properties in their PDF viewer.
%(Note that in the imported articles, \cs{title} sets the article's
%title and the optional argument sets the short title for the
%page header and table of contents.)
%
%\begin{definition}[\DescribeMacro{\author}]
%\cs{author}\oarg{PDF author(s)}\marg{book author(s)}
%\end{definition}
%In the book preamble, \cs{author} sets the book's author (or editor)
%and the optional argument is used for the PDF author, which will be
%displayed when the reader views the PDF file's properties in their
%PDF viewer.  (Note that in the imported articles, \cs{author} sets
%the article's author and the optional argument sets the short author
%list for the page header.)
%
%\begin{definition}[\DescribeMacro{\volume}]
%\cs{volume}\marg{number}
%\end{definition}
%This command sets the book's volume number. Omit if the book has no
%volume number.
%
%\begin{definition}[\DescribeMacro{\subtitle}]
%\cs{subtitle}\marg{sub-title}
%\end{definition}
%This command sets the book's subtitle. Omit if the book has no 
%sub-title.
%
%\begin{definition}[\DescribeMacro{\logo}]
%\cs{logo}\oarg{url}\marg{image command}
%\end{definition}
%This sets the book's title image. Use \ics{includegraphics} and
%omit the file extension. If you provide a grayscale version as
%well as a color version, the grayscale version will be used for
%the print version of the book. (See \sectionref{sec:color} 
%for further details.) The optional argument, if present, was
%formerly used by \app{makejmlrbookgui} to make the logo a link to 
%\meta{url} on the index HTML page. (The HTML pages are no longer
%generated by the application as PMLR now generate the HTML from 
%the .bib file for the proceedings.)
%
%\begin{definition}[\DescribeMacro{\team}]
%\cs{team}\marg{team title}
%\end{definition}
%This can be used to set the name of the editorial team. This 
%command may be omitted if not required.
%
%\begin{definition}[\DescribeMacro{\productioneditor}]
%\cs{productioneditor}\marg{name}
%\end{definition}
%This command may be used to name the production editor. The command
%may be omitted if not required.
%
%\begin{definition}[\DescribeMacro{\jmlrlocation}]
%\cs{jmlrlocation}\marg{location}
%\end{definition}
%This specifies the workshop location. By default this doesn't appear
%on the title page.  See \sectionref{sec:modifytitle} for details on
%how to modify the layout of the title page.
%
%\section{Main Book Commands}
%
%All commands that are provided by the \clsfmt{jmlr} class are 
%also available with the \clsfmt{jmlrbook} class, but some commands
%might behave differently depending on whether they are in the
%main part of the book or within the imported articles.
%
%In the main part of the book you can use the following commands:
%\begin{definition}[\DescribeMacro{\maketitle}]
%\cs{maketitle}
%\end{definition}
%This displays the book's title page. Note that \cs{maketitle} has
%a different effect when used in imported articles.
%
%\begin{definition}[\DescribeMacro{\frontmatter}]
%\cs{frontmatter}
%\end{definition}
%Use this command at the start of the front matter (e.g.\ before the
%foreword or preface). This will make chapters unnumbered even if you
%use \cs{chapter} instead of \cs{chapter*}. It also sets the page
%style and sets the page numbering to lower case Roman numerals.
%
%\begin{definition}[\DescribeEnv{authorsignoff}]
%\cs{begin}\{authorsignoff\}\\
%\meta{author list}\\
%\cs{end}\{authorsignoff\}
%\end{definition}
%This environment may be used by the author signing off at the end of a chapter such as the
%foreword. Within the environment use:
%\begin{definition}[\DescribeMacro{\Author}]
%\cs{Author}\marg{details}
%\end{definition}
%for the author's details. More than one \cs{Author} should be used
%if there is more than one author. Example:
%\begin{verbatim}
%\begin{authorsignoff}
%\Author{Nicola Talbot\\
%University of East Anglia}
%\Author{Anne Author\\
%University of No Where}
%\end{authorsignoff}
%\end{verbatim}
%
%\begin{definition}[\DescribeEnv{preface}]
%\cs{begin}\{preface\}\oarg{filename}
%\end{definition}
%This environment may be used to typeset the preface. This starts a
%new chapter using
%\begin{verbatim}
%\chapter{\prefacename}
%\end{verbatim}
%\DescribeMacro{\prefacename}where \cs{prefacename} defaults to 
%``Preface''. This environment should typically go in the front
%matter and is provided to allow \app{makejmlrbookgui} create a
%standalone document for the preface. The optional argument is the
%filename (without any extension or path) that will be used by
%\app{makejmlrbookgui}. This defaults to \texttt{preface} but, to
%conform with PMLR guidelines, should be changed to the surname of
%the first author (editor) followed by the final two digits of the
%year. See the PMLR website for further details of the guidelines.
%
%\begin{definition}[\DescribeEnv{signoff}]
%\cs{begin}\{signoff\}\oarg{team name}\marg{date}\\
%\meta{editor list}\\
%\cs{end}\{signoff\}
%\end{definition}
%This environment may be used by the editorial team when signing off
%a chapter such as the preface. If the optional argument is omitted,
%\qt{The Editorial Team} is used. If you are using the \env{preface}
%environment described above, the \env{signoff} environment must go
%inside the \env{preface} environment.
%
%Within the \env{signoff} environment use:
%\begin{definition}[\DescribeMacro{\Editor}]
%\cs{Editor}\marg{details}
%\end{definition}
%for each editor. Example:
%\begin{verbatim}
%\begin{signoff}{March 2010}
%% First editor:
%\Editor{Nicola Talbot\\
%University of East Anglia\\
%\mailto{N.Talbot@uea.ac.uk}}
%% Second editor:
%\Editor{Anne Editor\\
%University of Nowhere\\
%\mailto{ae@sample.com}}
%\end{signoff}
%\end{verbatim}
%
%\begin{definition}[\DescribeMacro{\tableofcontents}]
%\cs{tableofcontents}
%\end{definition}
%This command displays the book's table of contents. Note that it
%has a different effect if used in an imported article.
%
%\begin{definition}[\DescribeMacro{\mainmatter}]
%\cs{mainmatter}
%\end{definition}
%Use this command to switch to the book's main matter. This will 
%switch the chapter numbering back on, reset the page numbering to
%Arabic and set up the main page style.
%
%\begin{definition}[\DescribeMacro{\part}]
%\cs{part}\oarg{short title}\marg{title}
%\end{definition}
%If used in the main part of the book, this command will start a
%new part and issue a clear double page. Note that this command
%has a different effect if used in an imported article (or inside the
%\env{jmlrpapers} environment).
%
%\begin{definition}[\DescribeMacro{\addtocpart}]
%\cs{addtocpart}\marg{title}
%\end{definition}
%This adds \meta{title} to the table of contents, issues a clear
%double page, but doesn't display any text or affect the part
%numbering.
%
%\begin{definition}[\DescribeMacro{\chapter}]
%\cs{chapter}\oarg{short title}\marg{title}
%\end{definition}
%This command may be used in the main body of the book but will 
%cause an error if used within an imported article (or inside the
%\env{jmlrpapers} environment).
%
%\begin{definition}[\DescribeMacro{\section}]
%\cs{section}\oarg{short title}\marg{title}
%\end{definition}
%\begin{definition}[\DescribeMacro{\subsection}]
%\cs{subsection}\oarg{short title}\marg{title}
%\end{definition}
%\begin{definition}[\DescribeMacro{\subsubsection}]
%\cs{subsubsection}\oarg{short title}\marg{title}
%\end{definition}
%\begin{definition}[\DescribeMacro{\paragraph}]
%\cs{paragraph}\oarg{short title}\marg{title}
%\end{definition}
%\begin{definition}[\DescribeMacro{\subparagraph}]
%\cs{subparagraph}\oarg{short title}\marg{title}
%\end{definition}
%These commands may be used in the main body of the book or within
%imported articles. In the main body of the book (outside of the
%\env{jmlrpapers} environment) they need to be
%within a chapter and will be numbered according to the chapter.
%
%\begin{definition}[\DescribeMacro{\appendix}]
%\cs{appendix}
%\end{definition}
%If used in the main body of the book (\emph{outside} of the
%\env{jmlrpapers} environment) this will switch to the book
%appendices. Subsequent \cs{chapter} commands will produce the
%appendices. (Any imported articles in the appendix will be
%identified by \app{makejmlrbookgui} as supplemental material.) If
%used within an imported article (or within the \env{jmlrpapers}
%environment) \cs{appendix} will switch to the
%article appendices and won't affect the main part of the book.
%
%\begin{definition}[\DescribeEnv{jmlrpapers}]
%\cs{begin}\{jmlrpapers\}\\
%\meta{imported papers}\\
%\cs{end}\{jmlrpapers\}
%\end{definition}
%This environment must be used when importing articles and may be
%used as often as required. Take care not to include book sectioning
%commands, such as \ics{chapter}, in this environment. Within the
%\envfmt{jmlrpapers} environment, use the following commands to
%import articles:
%\begin{definition}[\DescribeMacro{\importpubpaper}]
%\cs{importpubpaper}\oarg{label}\marg{directory}\marg{file}\marg{pages}
%\end{definition}
%This imports an article that has already been published elsewhere.
%The \meta{pages} argument should be the page range from the
%\emph{previously published} version of this article. This may not
%necessarily be the same as the page range of the article in the
%book. The directory the imported file is contained in is given by
%\meta{directory}. If the file is in the same directory as the book,
%use a dot. The file name is given by \meta{file}. The article is
%also given a label, specified by the optional argument. This is
%\meta{directory}/\meta{file} by default. The label is used as a
%prefix to labels in the imported articles which ensures that
%cross-references are unique. You can also use this label to
%reference the article elsewhere in the book (see
%\sectionref{sec:bkcrossref}).
%
%\begin{definition}[\DescribeMacro{\importpaper}]
%\cs{importpaper}\oarg{label}\marg{directory}\marg{file}
%\end{definition}
%Imports an article that is being published in the book. The 
%arguments are the same as above except that there is no page
%range (the page range is computed automatically).
%
%\begin{definition}[\DescribeMacro{\importarticle}]
%\cs{importarticle}\oarg{label}\marg{directory}\marg{file}
%\end{definition}
%This imports an article that hasn't been published elsewhere. There
%is no page range, but the other arguments are the same as
%those describe above for \cs{importpubpaper}.
%
%Example: to import a previously published paper 
%\texttt{paper1/paper1.tex} and an unpublished paper
%\texttt{paper2/paper2.tex}:
%\begin{verbatim}
%\begin{jmlrpapers}
%\importpubpaper{paper1}{paper1}{23--45}
%\importarticle{paper2}{paper2}
%\end{jmlrpapers}
%\end{verbatim}
%
%\subsection{Two Column Articles in a One Column Book}
%
%The \clsfmt{jmlrbook} class column style will override the column style
%of the imported articles. You can use the \clsopt{twocolumn} class
%option to \clsfmt{jmlrbook}, but this will make the whole book with
%two columns. If you only want the imported articles to be in two
%columns, then put \ics{twocolumn} in the \env{jmlrpapers}
%environment to switch on two column formatting. The effect will be
%localised to the end of the environment.
%
%\subsection{Cross-Referencing}
%\label{sec:bkcrossref}
%
%You can cross-reference other parts of the book using the
%standard \cs{label}/\cs{ref} mechanism, but if you want to
%reference something within an imported article, you must prefix
%the label with the label given when importing the article (that
%is, the optional argument to \ics{importpubpaper},
%\ics{importpaper} or \cs{importarticle}).  For example, if you
%want to reference a section labelled \texttt{sec:results} in the
%imported paper \texttt{paper1/paper1.tex}, you would need to do:
%\begin{verbatim}
%see Section~\ref{paper1/paper1sec:results}
%\end{verbatim}
%or
%\begin{verbatim}
%see \sectionref{paper1/paper1sec:results}
%\end{verbatim}
%
%In addition to the commands described in \sectionref{sec:crossref},
%the \clsfmt{jmlrbook} class also provides the following
%cross-referencing commands:
%
%\begin{definition}[\DescribeMacro{\chapterref}]
%\cs{chapterref}\marg{label list}
%\end{definition}
%Reference a chapter or chapters. The argument is a comma-separated
%list of labels.
%
%\begin{definition}[\DescribeMacro{\articlepageref}]
%\cs{articlepageref}\marg{label}
%\end{definition}
%This displays the starting page number of the article whose label
%is given by \meta{label}. Note that this must a single label, not
%a list. For example:
%\begin{verbatim}
%An interesting article starts on page~\articlepageref{paper1/paper1}
%\end{verbatim}
%
%\begin{definition}[\DescribeMacro{\articlepagesref}]
%\cs{articlepagesref}\marg{label}
%\end{definition}
%This displays the page range of the article whose label is
%given by \meta{label}. Again, this must be a single label, not a
%list. This page range is unrelated to the \meta{pages} argument of
%\ics{importpubarticle}.
%
%\begin{definition}[\DescribeMacro{\articletitleref}]
%\cs{articletitleref}\marg{label}
%\end{definition}
%This displays the short title for the article whose label is
%given by \meta{label}. Again, this must be a single label, not a 
%list.
%
%\begin{definition}[\DescribeMacro{\articleauthorref}]
%\cs{articleauthorref}\marg{label}
%\end{definition}
%This displays the author list for the article whose label is
%given by \meta{label}. Again, this must be a single label, not a 
%list.
%
%\section{Altering the Layout of the Main Title Page}
%\label{sec:modifytitle}
%
%\begin{definition}[\DescribeMacro{\titlebody}]
%\cs{titlebody}
%\end{definition}
%The main body of the book's title page is given by the command
%\cs{titlebody}. Within the definition of this command, you can
%use:
%\begin{definition}[\DescribeMacro{\SetTitleElement}]
%\cs{SetTitleElement}\marg{element}\marg{pre}\marg{post}
%\end{definition}
%where \meta{element} can be: \texttt{title}, \texttt{volume},
%\texttt{issue}\footnote{The default title page layout doesn't use
%\texttt{issue}, but if required it can be set with \ics{issue}\marg{number}},
%\texttt{subtitle}, \texttt{logo}, \texttt{team}, \texttt{author},
%\texttt{date}, \texttt{productioneditor}. The \meta{pre} and
%\meta{post} arguments specify what to do before and after the
%element.  Note that \cs{SetTitleElement} does nothing if that
%element hasn't been set. For example, if \cs{volume} has been
%omitted or \verb|\volume{}| is used, then
%\begin{verbatim}
%\SetTitleElement{volume}{\mainvolumefont}{\postmainvolume}
%\end{verbatim}
%will do nothing (so you don't end up with \textbf{Volume :}).
%
%\begin{definition}[\DescribeMacro{\IfTitleElement}]
%\cs{IfTitleElement}\marg{element}\marg{true part}\marg{false part}
%\end{definition}
%This does \meta{true part} if \meta{element} has been set
%otherwise it does \meta{false part}. For example, 
%\cs{postmainvolume} is defined as:
%\begin{verbatim}
%\newcommand{\postmainvolume}{%
%  \IfTitleElement{subtitle}{}{:}\par\relax
%}
%\end{verbatim}
%This means that it will only print a colon after the volume
%number if the subtitle has been set.
%
%The default definition of \cs{titlebody} is:
%\begin{verbatim}
%\newcommand{\titlebody}{%
%  \SetTitleElement{title}{\maintitlefont}{\postmaintitle}%
%  \SetTitleElement{volume}{\mainvolumefont}{\postmainvolume}%
%  \SetTitleElement{subtitle}{\mainsubtitlefont}{\postmainsubtitle}%
%  \SetTitleElement{logo}{\mainlogofont}{\postmainlogo}%
%  \SetTitleElement{team}{\mainteamfont}{\postmainteam}%
%  \SetTitleElement{author}{\mainauthorfont}{\postmainauthor}%
%  \SetTitleElement{productioneditor}{\mainproductioneditorfont}%
%    {\postmainproductioneditor}%
%}
%\end{verbatim}
%
%\section{Potential Pitfalls}
%
%The \cls{combine} class and \sty{hyperref} package are
%individually both easily broken by packages that change certain
%internals and they don't ordinarily work together. The
%\clsfmt{jmlrbook} class applies patches to the internal referencing
%mechanism to make them work together, but it's a fairly fragile
%alliance. Some packages are known to break it, for example
%\sty{subfig}, \sty{pdfpages} and \sty{geometry}. This is why the
%\clsfmt{jmlr} class checks for known problem packages and generates an
%error message to dissuade authors from using them. It's likely that
%there are other packages that may cause a problem and, as they are
%found, they will be added to the check list. Also, it's possible for
%an author to disable the package checking mechanism if they are
%determined to use a particular package.
%
%In the event that an article has loaded a problem package, the
%editors will have to decide whether to ask the author to change
%the article so that it doesn't cause a problem or to make the changes
%themselves or to find a way of fudging things to get it to work. It
%depends on the level of \LaTeX\ expertise amongst the editors and
%the time available.
%
%Another problem that can arise is when different articles use
%packages that conflict. For example, one article uses package
%\styfmt{foo} and another uses package \styfmt{bar}. Each article compiles
%okay as a stand-alone article, but when combined \styfmt{foo} and
%\styfmt{bar} conflict. Another problem may occur when articles load the
%same package but with conflicting package options.  To reduce the
%chance of this occurring, the \clsfmt{jmlr} class loads some commonly
%used packages. For example, it loads the \sty{algorithm2e}
%package with the \pkgoptfmt{algo2e} and \pkgoptfmt{ruled} options and
%provides the \env{algorithm} environment in addition to 
%\sty{algorithm2e}'s \env{algorithm2e} environment. Different
%versions of the same package can also be a problem. To help
%counteract the problem caused by different papers using different
%versions of the \sty{algorithm2e} package, \sty{jmlrbook} defines
%most of the old style commands if they don't exist.
%
%Articles that use different input encodings can also cause a
%problem. For example, if one article uses \texttt{utf8} and another
%uses \texttt{latin1}. If the authors have directly entered a
%diacritic or ligature, such as \'e or \ae, instead of using a
%\LaTeX\ command, such as \cs{'e} or \cs{ae}, then this will cause an
%error on compiling the book.\footnote{and may also cause a problem
%for the editor's text editor.} The choice then is to either change
%all non-keyboard characters with the appropriate \LaTeX\ commands or
%to use the \cs{inputencoding} command, supplied by the
%\sty{inputenc} package, to switch the encoding at the start of each
%article. One thing to watch out for are bib files that contain a
%mixture of encodings caused by copying and pasting from different
%sources. Version~0.4.2b of \app{makejmlrbookgui} provides a function
%to search for characters outside the range 0x20 (space) and 0x7E
%(tilde).
%
%Authors who use \cs{nonumber} within an \env{equation} environment
%can mess up the hyperlinks. Remove \cs{nonumber} and change the
%equation environment to \cs{[} \ldots\ \cs{]} (or just make it a
%numbered equation).
%
%If the article changes the graphics path using \cs{graphicspath},
%\clsfmt{jmlrbook} won't find the graphics if the imported articles
%aren't in the same directory as the book.
%
%\StopEventually{\clearpage\phantomsection
%  \PrintChanges
%  \PrintIndex
%}
%
%
%
%\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}[2022/02/09 v1.30 (NLCT)]
%    \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}
% Provide US synonyms
%    \begin{macrocode}
\DeclareOption{math}{\jmlrutilsmathstrue}
\DeclareOption{nomath}{\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}{\ifjmlrcleveref}
%\changes{1.29}{2022-01-29}{new}
%Determine whether or not to load \sty{cleveref}.
%    \begin{macrocode}
\newif\ifjmlrcleveref
\jmlrclevereffalse
%    \end{macrocode}
%\end{macro}
%    \begin{macrocode}
\DeclareOption{cleveref}{\jmlrclevereftrue}
\DeclareOption{nocleveref}{\jmlrclevereffalse}
%    \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}
%Check if \sty{cleveref} is required. If it is and \sty{hyperref} is
%also required (which it is if \styfmt{jmlrutils} is being loaded by
%\cls{jmlr}) then \sty{hyperref} needs to be loaded before
%\sty{cleveref}.
%    \begin{macrocode}
\ifjmlrcleveref
  \ifdef\jmlrprehyperref
  {
    \jmlrprehyperref
    \@ifundefined{@pre@hyperref}{}{\@pre@hyperref\undef\@pre@hyperref}
    \RequirePackage{hyperref}
    \let\jmlrprehyperref\relax
    \@ifundefined{@post@hyperref}{}{\@post@hyperref\undef\@post@hyperref}
  }
  {}
  \RequirePackage{aliascnt}
  \RequirePackage{cleveref}
\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@reflistsep}{, }
\newcommand*{\@jmlr@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@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@reflistsep
    \fi
  }%
  \ifx\@objectname#3% plural tag
    \let\@prevsep\@jmlr@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}
%\changes{1.29}{2022-01-29}{remove use of algorithm2e internal commands}
%Command used by \cs{floatconts} to display the caption contents.
%    \begin{macrocode}
\newcommand{\algocfconts}[3]{%
  \jmlralgorule\par\smallskip
  #2\label{#1}% caption and label
  \jmlralgorule\par\smallskip
  #3% algorithm content
  \jmlralgorule
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\jmlralgorule}
%\changes{1.29}{2022-01-29}{new}
%    \begin{macrocode}
\newcommand{\jmlralgorule}{\kern2pt\hrule height.8pt depth0pt\kern2pt}
%    \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}
%\changes{1.29}{2022-01-29}{replaced \cs{hsize} with \cs{linewidth}}
%    \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]{\dimexpr\linewidth-\AlCapHSkip}{\algocf@captiontext{##1}{##2}}%
  }%
}%
{%
  \end{algocf}%
}
%    \end{macrocode}
%
%\begin{macro}{\@jmlr@ifgraphicxloaded}
%    \begin{macrocode}
\AtBeginDocument{%
 \@ifpackageloaded{graphicx}%
 {\let\@jmlr@ifgraphicxloaded\@firstoftwo}%
 {\let\@jmlr@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@ifgraphicxloaded
  {%
    \def\Gin@req@sizes{%
      \Gin@req@height\Gin@nat@height
      \Gin@req@width\Gin@nat@width}%
    \begingroup
      \let\input@path\Ginput@path
      \IfFileExists{#2}%
      {%
        \toks@{\input{#2}}%
        \ifstrempty{#1}
        {}%
        {%
          \@tempswatrue
          \setkeys{Gin}{#1}%
          \Gin@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@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@subfigure}
%    \begin{macrocode}
  \renewcommand*{\p@subfigure}{\expandafter\@p@subfigure}
  \newcommand*{\@p@subfigure}[1]{%
    \protect\@subfigurelabel{\thefigure}{\thesubfigure}%
  }
%    \end{macrocode}
%\end{macro}
% The LaTeX kernel changed the definition of \cs{refstepcounter} to
% allow \cs{p@\ldots} to have an argument. This means we need to
% check the kernel version and pick up that extra argument if
% present.
%\changes{1.27}{2020-03-26}{added check for \LaTeX\ kernel version}
%    \begin{macrocode}
  \@ifl@t@r\fmtversion{2019/08/22}%
  {
%    \end{macrocode}
% Newer kernel versions.
%\begin{macro}{\@subfigurelabel}
% Define how label appears.
%    \begin{macrocode}
    \newcommand*\@subfigurelabel[3]{#1\subfigurelabel{#2}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@subfigref}
%    \begin{macrocode}
    \newcommand*\@subfigref[1]{%
      {%
        \def\@subfigurelabel##1##2##3{\subfigurelabel{##2}}%
        \ref{#1}%
      }%
    }
%    \end{macrocode}
%\end{macro}
%    \begin{macrocode}
  }%
  {
%    \end{macrocode}
% Older kernel versions.
%\begin{macro}{\@subfigurelabel}
% Define how label appears.
%    \begin{macrocode}
    \newcommand*\@subfigurelabel[2]{#1\subfigurelabel{#2}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@subfigref}
%    \begin{macrocode}
    \newcommand*\@subfigref[1]{%
      {%
        \def\@subfigurelabel##1##2{\subfigurelabel{##2}}%
        \ref{#1}%
      }%
    }
%    \end{macrocode}
%\end{macro}
%    \begin{macrocode}
  }
%    \end{macrocode}
%\begin{macro}{\subfigref}
% Reference the sub-figure without including the figure number.
%    \begin{macrocode}
  \newcommand*{\subfigref}[1]{%
    \let\@objectname\@empty
    \def\@objectref{}%
    \let\@prevsep\@empty
    \@for\@thislabel:=#1\do{%
      \toks@{\@prevsep}%
      \protected@edef\@objectref{\@objectref\the\toks@
        \protect\@subfigref{\@thislabel}}%
        \ifx\@objectname\@empty
	  \let\@objectname\@nil
        \else
	  \let\@objectname\relax
          \let\@prevsep\@jmlr@reflistsep
        \fi
    }%
    \ifx\@objectname\relax
      \let\@prevsep\@jmlr@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}{\jmlrminsubcaptionwidth}
%Minimum sub-caption width.
%\changes{1.29}{2022-01-29}{new}
%    \begin{macrocode}
  \newlength\jmlrminsubcaptionwidth
%    \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}
%\changes{1.29}{2022-01-29}{added \cs{jmlrminsubcaptionwidth} comparison}
%    \begin{macrocode}
  \newcommand*{\@subfigure}[2][b]{%
    \advance\c@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}%
      \ifdim\@tempdima>\jmlrminsubcaptionwidth
        \sbox\@subfloatcapbox{\subfigurelabel{\thesubfigure}\space
          \parbox[t]{\@tempdima}{\@subfigcap}}%
      \else
        \sbox\@subfloatcapbox{\subfigurelabel{\thesubfigure}\space
          \parbox[t]{\jmlrminsubcaptionwidth}{\@subfigcap}}%
      \fi
    \else
      \ifdim\@tempdimb<\jmlrminsubcaptionwidth
        \sbox\@subfloatcapbox{\subfigurelabel{\thesubfigure}\space
          \parbox[t]{\jmlrminsubcaptionwidth}{\@subfigcap}}%
      \fi
    \fi
    \begin{tabular}[#1]{@{}c@{}}%
    \usebox\@subfloatcontsbox\\\usebox\@subfloatcapbox
    \end{tabular}%
    \egroup
  }
%    \end{macrocode}
%\end{macro}
%
% Sub-tables:
%\begin{macro}{\c@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@subtable}
%    \begin{macrocode}
  \renewcommand*{\p@subtable}{\expandafter\@p@subtable}
  \newcommand*{\@p@subtable}[1]{%
    \protect\@subtablelabel{\thetable}{\thesubtable}%
  }
%    \end{macrocode}
%\end{macro}
%As with \cs{@subfigure} we again need to check \LaTeX\ kernel version.
%\changes{1.27}{2020-03-26}{added check for \LaTeX\ kernel version}
%    \begin{macrocode}
  \@ifl@t@r\fmtversion{2019/08/22}%
  {
%    \end{macrocode}
% Newer kernel versions.
%\begin{macro}{\@subtablelabel}
% Define how label appears.
%    \begin{macrocode}
    \newcommand*\@subtablelabel[3]{#1\subtablelabel{#2}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@subtabref}
%    \begin{macrocode}
    \newcommand*\@subtabref[1]{%
      {%
        \def\@subtablelabel##1##2##3{\subtablelabel{##2}}%
        \ref{#1}%
      }%
    }
%    \end{macrocode}
%\end{macro}
%    \begin{macrocode}
  }%
  {
%    \end{macrocode}
% Older kernel versions.
%\begin{macro}{\@subtablelabel}
% Define how label appears.
%    \begin{macrocode}
    \newcommand*\@subtablelabel[2]{#1\subtablelabel{#2}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@subtabref}
%    \begin{macrocode}
    \newcommand*\@subtabref[1]{%
      {%
        \def\@subtablelabel##1##2{\subtablelabel{##2}}%
        \ref{#1}%
      }%
    }
%    \end{macrocode}
%\end{macro}
%    \begin{macrocode}
  }%
%    \end{macrocode}
%\begin{macro}{\subtabref}
% Reference the sub-table without including the table number.
%    \begin{macrocode}
  \newcommand*{\subtabref}[1]{%
    \let\@objectname\@empty
    \def\@objectref{}%
    \let\@prevsep\@empty
    \@for\@thislabel:=#1\do{%
      \toks@{\@prevsep}%
      \protected@edef\@objectref{\@objectref\the\toks@
        \protect\@subtabref{\@thislabel}}%
        \ifx\@objectname\@empty
	  \let\@objectname\@nil
        \else
	  \let\@objectname\relax
          \let\@prevsep\@jmlr@reflistsep
        \fi
    }%
    \ifx\@objectname\relax
      \let\@prevsep\@jmlr@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}
%\changes{1.29}{2022-01-29}{added \cs{jmlrminsubcaptionwidth} comparison}
%    \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}%
      \ifdim\@tempdima>\jmlrminsubcaptionwidth
        \sbox\@subfloatcapbox{\subtablelabel{\thesubtable}\space
          \parbox[t]{\@tempdima}{\@subtabcap}}%
      \else
        \sbox\@subfloatcapbox{\subtablelabel{\thesubtable}\space
          \parbox[t]{\jmlrminsubcaptionwidth}{\@subtabcap}}%
      \fi
    \else
      \ifdim\@tempdimb<\jmlrminsubcaptionwidth
        \sbox\@subfloatcapbox{\subtablelabel{\thesubtable}\space
          \parbox[t]{\jmlrminsubcaptionwidth}{\@subtabcap}}%
      \fi
    \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{macro}{\proofname}
%\changes{1.25}{2020-01-17}{new}
%    \begin{macrocode}
\providecommand{\proofname}{Proof}
%    \end{macrocode}
%\end{macro}
%\begin{environment}{proof}
% Proof environment
%    \begin{macrocode}
  \newenvironment{proof}%
  {%
   \par\noindent{\bfseries\upshape \proofname\ }%
  }%
  {\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@org@newtheorem\newtheorem
  \renewcommand*{\newtheorem}{\@ifstar\jmlr@snewtheorem\jmlr@newtheorem}
%    \end{macrocode}
% Define starred version:
%\begin{definition}
%\cs{newtheorem*}\marg{env-name}\marg{title tag}
%\end{definition}
%    \begin{macrocode}
  \newcommand*{\jmlr@snewtheorem}[2]{%
    \cslet{jmlr@thm@#1@body@font}{\@theorembodyfont}%
    \cslet{jmlr@thm@#1@header@font}{\@theoremheaderfont}%
    \cslet{jmlr@thm@#1@sep}{\@theoremsep}%
    \cslet{jmlr@thm@#1@postheader}{\@theorempostheader}%
    \newenvironment{#1}%
    {%
      \trivlist
        \item
        [%
          \hskip\labelsep{\csuse{jmlr@thm@#1@header@font}#2%
            \csuse{jmlr@thm@#1@postheader}%
          }%
        ]%
        \mbox{}\csuse{jmlr@thm@#1@sep}%
        \csuse{jmlr@thm@#1@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@newtheorem}[1]{%
    \cslet{jmlr@thm@#1@body@font}{\@theorembodyfont}%
    \cslet{jmlr@thm@#1@header@font}{\@theoremheaderfont}%
    \cslet{jmlr@thm@#1@sep}{\@theoremsep}%
    \cslet{jmlr@thm@#1@postheader}{\@theorempostheader}%
    \jmlr@org@newtheorem{#1}%
  }
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@xthm}
%\changes{1.18}{2013-10-17}{new}
%    \begin{macrocode}
  \renewcommand*{\@xthm}[2]{%
    \def\@jmlr@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@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@currentthm}%
    {%
      \letcs{\jmlr@this@theoremheader}{jmlr@thm@\@jmlr@currentthm @header@font}%
      \letcs{\jmlr@this@theorembody}{jmlr@thm@\@jmlr@currentthm @body@font}%
      \letcs{\jmlr@this@theoremsep}{jmlr@thm@\@jmlr@currentthm @sep}%
      \letcs{\jmlr@this@theorempostheader}%
         {jmlr@thm@\@jmlr@currentthm @postheader}%
    }%
    {%
      \let\jmlr@this@theorembody\@theorembodyfont
      \let\jmlr@this@theoremheader\@theoremheaderfont
      \let\jmlr@this@theoremsep\@theoremsep
      \let\jmlr@this@theorempostheader\@theorempostheader
    }%
    \trivlist
      \item
       [%
        \hskip\labelsep{\jmlr@this@theoremheader #1\ #2%
           \jmlr@this@theorempostheader}%
       ]%
      \mbox{}\jmlr@this@theoremsep
      \jmlr@this@theorembody
  }
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@opargbegintheorem}
%\changes{1.18}{2013-10-17}{new}
%    \begin{macrocode}
  \renewcommand*{\@opargbegintheorem}[3]{%
    \ifdef{\@jmlr@currentthm}%
    {%
      \letcs{\jmlr@this@theoremheader}{jmlr@thm@\@jmlr@currentthm @header@font}%
      \letcs{\jmlr@this@theorembody}{jmlr@thm@\@jmlr@currentthm @body@font}%
      \letcs{\jmlr@this@theoremsep}{jmlr@thm@\@jmlr@currentthm @sep}%
      \letcs{\jmlr@this@theorempostheader}%
         {jmlr@thm@\@jmlr@currentthm @postheader}%
    }%
    {%
      \let\jmlr@this@theorembody\@theorembodyfont
      \let\jmlr@this@theoremheader\@theoremheaderfont
      \let\jmlr@this@theoremsep\@theoremsep
      \let\jmlr@this@theorempostheader\@theorempostheader
    }%
    \trivlist
     \item[\hskip\labelsep{\jmlr@this@theoremheader #1\ #2\ (#3)%
       \jmlr@this@theorempostheader}]%
     \mbox{}\jmlr@this@theoremsep
     \jmlr@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}
  \ifjmlrcleveref
    \newaliascnt{lemma}{theorem}
%    \end{macrocode}
%\changes{1.30}{2022-02-09}{fixed counter name}
%    \begin{macrocode}
    \newtheorem{lemma}[lemma]{Lemma} 
    \aliascntresetthe{lemma}
    \crefname{lemma}{lemma}{lemmas}
  \else
    \newtheorem{lemma}[theorem]{Lemma} 
  \fi
%    \end{macrocode}
%\end{environment}
%\begin{environment}{proposition}
%    \begin{macrocode}
  \ifjmlrcleveref
    \newaliascnt{proposition}{theorem}
    \newtheorem{proposition}[proposition]{Proposition} 
    \aliascntresetthe{proposition}
    \crefname{proposition}{proposition}{propositions}
  \else
    \newtheorem{proposition}[theorem]{Proposition} 
  \fi
%    \end{macrocode}
%\end{environment}
%\begin{environment}{remark}
%    \begin{macrocode}
  \ifjmlrcleveref
    \newaliascnt{remark}{theorem}
    \newtheorem{remark}[remark]{Remark}
    \aliascntresetthe{remark}
    \crefname{remark}{remark}{remarks}
  \else
    \newtheorem{remark}[theorem]{Remark}
  \fi
%    \end{macrocode}
%\end{environment}
%\begin{environment}{corollary}
%    \begin{macrocode}
  \ifjmlrcleveref
    \newaliascnt{corollary}{theorem}
    \newtheorem{corollary}[corollary]{Corollary}
    \aliascntresetthe{corollary}
    \crefname{corollary}{corollary}{corollaries}
  \else
   \newtheorem{corollary}[theorem]{Corollary}
  \fi
%    \end{macrocode}
%\end{environment}
%\begin{environment}{definition}
%    \begin{macrocode}
  \ifjmlrcleveref
    \newaliascnt{definition}{theorem}
    \newtheorem{definition}[definition]{Definition}
    \aliascntresetthe{definition}
    \crefname{definition}{definition}{definitions}
  \else
    \newtheorem{definition}[theorem]{Definition}
  \fi
%    \end{macrocode}
%\end{environment}
%\begin{environment}{conjecture}
%    \begin{macrocode}
  \ifjmlrcleveref
    \newaliascnt{conjecture}{theorem}
    \newtheorem{conjecture}[conjecture]{Conjecture}
    \aliascntresetthe{conjecture}
    \crefname{conjecture}{conjecture}{conjectures}
  \else
    \newtheorem{conjecture}[theorem]{Conjecture}
  \fi
%    \end{macrocode}
%\end{environment}
%\begin{environment}{axiom}
%    \begin{macrocode}
  \ifjmlrcleveref
    \newaliascnt{axiom}{theorem}
    \newtheorem{axiom}[axiom]{axiom}
    \aliascntresetthe{axiom}
    \crefname{axiom}{axiom}{axioms}
  \else
    \newtheorem{axiom}[theorem]{Axiom}
  \fi
%    \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
%\section{jmlr.cls Code}
% This class is based on the \sty{jmlr2e} package but was modified to make sure 
% it works with \clsfmt{jmlrbook} which uses both \cls{combine} and
% \sty{hyperref}.
%
% Declare class and required TeX format:
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{jmlr}[2022/02/09 v1.30 (NLCT) Journal of Machine Learning Research]
%    \end{macrocode}
%\changes{1.10}{2011-01-05}{hyperref now loaded by jmlr instead of
%jmlrbook}
% Need \sty{xkeyval} package to have key=value class options
%    \begin{macrocode}
\RequirePackage{xkeyval}
%    \end{macrocode}
%\changes{1.18}{2013-10-17}{now requires calc package}
%    \begin{macrocode}
\RequirePackage{calc}
%    \end{macrocode}
%\changes{1.18}{2013-10-17}{now requires etoolbox package}
%    \begin{macrocode}
\RequirePackage{etoolbox}
%    \end{macrocode}
% Some packages need to be loaded before \sty{hyperref} so provide a
% hook to do this:
%\begin{macro}{\jmlrprehyperref}
%\changes{1.12}{2012/01/05}{removed @ from name so it can be defined
%by user}
%    \begin{macrocode}
\providecommand*{\jmlrprehyperref}{}
%    \end{macrocode}
%\end{macro}
%\changes{1.12}{2012/01/05}{removed class option prehyperref}
% The following conditionals are provided to make this class play nicely
% with combine and aren't required for articles.
%    \begin{macrocode}
\newif\if@openright
\newif\if@mainmatter \@mainmattertrue
%    \end{macrocode}
%\begin{macro}{\ifgrayscale}
% Determine whether to select grayscale alternatives
%    \begin{macrocode}
\@ifundefined{ifgrayscale}{
  \newif\ifgrayscale
  \grayscalefalse
}{}
\DeclareOptionX{color}{\grayscalefalse
  \PassOptionsToPackage{color}{xcolor}}
\DeclareOptionX{gray}{\grayscaletrue
  \PassOptionsToPackage{gray}{xcolor}}
%    \end{macrocode}
%\end{macro}
%\begin{option}{draft}
%\changes{1.18}{2013-10-17}{new}
%    \begin{macrocode}
\DeclareOptionX{draft}{\PassOptionsToClass{\CurrentOption}{article}}
%    \end{macrocode}
%\end{option}
%\begin{option}{final}
%\changes{1.18}{2013-10-17}{new}
%    \begin{macrocode}
\DeclareOptionX{final}{\PassOptionsToClass{\CurrentOption}{article}}
%    \end{macrocode}
%\end{option}
% Can't load \sty{jmlrutils} here but need the \cs{iftablecaptiontop}
% conditional for the class options.
%\begin{macro}{\iftablecaptiontop}
%\changes{1.06}{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@choicekey{jmlr.cls}{tablecaption}[\val\nr]{top,bottom}{%
  \ifcase\nr\relax
    \tablecaptiontoptrue
  \or
    \tablecaptiontopfalse
  \fi
}
%    \end{macrocode}
%\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}{%
 \ClassWarning{jmlr}{html option is now deprecated}%
 \jmlrhtmltrue}
\DeclareOptionX{nohtml}{\jmlrhtmlfalse}
%    \end{macrocode}
%\end{macro}
% Normal font size (default is 11pt).
%\changes{1.10}{2011-01-05}{font size options don't pass option to
%class}
%    \begin{macrocode}
\def\pt@size{11pt}
\DeclareOptionX{10pt}{\renewcommand{\pt@size}{10pt}}
\DeclareOptionX{11pt}{\renewcommand{\pt@size}{11pt}}
\DeclareOptionX{12pt}{\renewcommand{\pt@size}{12pt}}
%    \end{macrocode}
%\begin{macro}{\@jmlrproceedings}
% The name of the proceedings.
%    \begin{macrocode}
\newcommand*{\@jmlrproceedings}{Journal of Machine Learning Research}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@jmlrabbrvproceedings}
% The abbreviated name of the proceedings.
%    \begin{macrocode}
\newcommand*{\@jmlrabbrvproceedings}{JMLR}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlrproceedings}
% Sets the title and abbreviation of the proceedings
%    \begin{macrocode}
\newcommand*{\jmlrproceedings}[2]{%
  \renewcommand*{\@jmlrabbrvproceedings}{#1}%
  \renewcommand*{\@jmlrproceedings}{#2}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\jmlrnowcp}
%    \begin{macrocode}
\newcommand*{\jmlrnowcp}{%
  \jmlrproceedings{JMLR}{Journal of Machine Learning Research}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlrwcp}
%\changes{1.11}{2011-03-24}{Fixed typo}
%    \begin{macrocode}
\newcommand*{\jmlrwcp}{%
  \jmlrproceedings{JMLR W\&CP}{JMLR: Workshop and Conference Proceedings}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlrpmlr}
%\changes{1.23}{2017-03-09}{new}
%The JMLR W\&CP has been renamed PMLR, so provide code to switch to
%this instead,
%    \begin{macrocode}
\newcommand*{\jmlrpmlr}{%
  \jmlrproceedings{PMLR}{Proceedings of Machine Learning Research}%
}
%    \end{macrocode}
%\end{macro}
% This is a journal (non JMLR W\&CP\slash PMLR) article:
%    \begin{macrocode}
\DeclareOptionX{nowcp}{\jmlrnowcp}
%    \end{macrocode}
% This is an article for JMLR W\&CP
%    \begin{macrocode}
\DeclareOptionX{wcp}{\jmlrwcp}
%    \end{macrocode}
% This is an article for PMLR
%    \begin{macrocode}
\DeclareOptionX{pmlr}{\jmlrpmlr}
%    \end{macrocode}
%Pass cleveref option to jmlrutils
%\changes{1.29}{2022-01-29}{added cleveref option}
%    \begin{macrocode}
\DeclareOptionX{cleveref}{\PassOptionsToPackage{cleveref}{jmlrutils}}
%    \end{macrocode}
%\begin{option}{oneside}
%\changes{1.22}{2015/04/11}{new}
%    \begin{macrocode}
\DeclareOptionX{oneside}{\@twosidefalse \@mparswitchfalse}
%    \end{macrocode}
%\end{option}
%\begin{option}{twoside}
%\changes{1.22}{2015/04/11}{new}
%    \begin{macrocode}
\DeclareOptionX{twoside}{\@twosidetrue \@mparswitchtrue}
%    \end{macrocode}
%\end{option}
% Set two-sided format
%    \begin{macrocode}
\@twosidetrue
%    \end{macrocode}
% The default paper size is letter, but provide $7 \times 10$in
% alternative:
%    \begin{macrocode}
\newif\ifviiXx
\viiXxfalse
\DeclareOptionX{7x10}{\viiXxtrue}
\DeclareOptionX{letterpaper}{\PassOptionsToPackage{letterpaper}{typearea}}
%    \end{macrocode}
% Pass all remaining options to \cls{article} class:
%    \begin{macrocode}
\DeclareOptionX*{\PassOptionsToClass{\CurrentOption}{article}}
%    \end{macrocode}
% Execute required options:
%    \begin{macrocode}
\ExecuteOptions{letterpaper}
%    \end{macrocode}
% Process options:
%    \begin{macrocode}
\ProcessOptionsX
%    \end{macrocode}
% If two-sided, pass that to \cls{article} as well:
%\changes{1.28}{2020-09-21}{pass twoside to article.cls}
%    \begin{macrocode}
\if@twoside
 \PassOptionsToClass{twoside}{article}
\fi
%    \end{macrocode}
% Load \cls{article} class.
%\changes{1.10}{2011-01-05}{passed \cs{pt@size} when loading article
%class}
%    \begin{macrocode}
\LoadClass[\pt@size]{article}
%    \end{macrocode}
% Can't use \sty{geometry} package because it doesn't play nicely
% with the \cls{combine} class.
%    \begin{macrocode}
\ifviiXx
  \setlength{\paperwidth}{7in}
  \setlength{\paperheight}{10in}
  \setlength{\textwidth}{5.25in}
  \setlength{\textheight}{8.2in}
  \setlength{\topmargin}{0.4in}
  \setlength{\headheight}{0.2in}
  \setlength{\headsep}{0.2in}
  \setlength{\hoffset}{-1in}
  \setlength{\voffset}{-1in}
  \setlength{\evensidemargin}{0.75in}
  \setlength{\oddsidemargin}{1.0in}
\else
  \setlength{\oddsidemargin}{0.25in}
  \setlength{\evensidemargin}{0.25in}
  \setlength{\marginparwidth}{0.07 true in}
  \setlength{\topmargin}{-0.5in}
  \addtolength{\headsep}{0.25in}
  \setlength{\textheight}{8.5 true in}
  \setlength{\textwidth}{6.0 true in}
\fi
%    \end{macrocode}
% Need to add jmlr end document hook before natbib adds a
% \cs{clearpage} to it.
%    \begin{macrocode}
\AtEndDocument{\@jmlrenddoc}
%    \end{macrocode}
%\changes{1.29}{2022-01-29}{added \sty{placeins}}
% Need \sty{placeins} to add float barrier at the end of the
% article.
%    \begin{macrocode}
\RequirePackage{placeins}
%    \end{macrocode}
% Required packages:
%    \begin{macrocode}
\RequirePackage{amsmath}
\RequirePackage{amssymb}
\RequirePackage{natbib}
\RequirePackage{graphicx}
\RequirePackage{url}
\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
% that editors need to install the newer version.) For some reason, 
% loading \sty{algorithm2e} causes the message
%\begin{verbatim}
%(\end occurred inside a group at level 1)
%\end{verbatim}
% I don't know why, but it's outside the control of this class.
%    \begin{macrocode}
\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}{2017-08-01}{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}
\jmlrprehyperref
%    \end{macrocode}
% Do stuff that has to come immediately before \sty{hyperref} is
% loaded:
%\changes{1.13}{2012/02/25}{added \cs{@pre@hyperref}}
%    \begin{macrocode}
\@ifundefined{@pre@hyperref}{}{\@pre@hyperref}
%    \end{macrocode}
% Load \sty{hyperref}:
%\changes{1.19}{2014-09-29}{replaced \cs{usepackage} with \cs{RequirePackage}}
%    \begin{macrocode}
\RequirePackage{hyperref}
\RequirePackage{nameref}
%    \end{macrocode}
%    \begin{macrocode}
% Do stuff that has to come immediately after \sty{hyperref} and
% \sty{nameref} are loaded:
%\changes{1.16}{2012/05/15}{added \cs{@post@hyperref}}
\@ifundefined{@post@hyperref}{}{\@post@hyperref}
%    \end{macrocode}
% Set up hyperref options:
%    \begin{macrocode}
\hypersetup{colorlinks,
            linkcolor=blue,
            citecolor=blue,
            urlcolor=magenta,
            linktocpage,
            plainpages=false}
%    \end{macrocode}
%
%    \begin{macrocode}
\ifgrayscale
%    \end{macrocode}
% If this is the print version, need to disable the hyperlinks:
%    \begin{macrocode}
  \hypersetup{draft}
\fi
%    \end{macrocode}
%
% Float parameters: the following settings were copied from jmlr2e.sty
%    \begin{macrocode}
\renewcommand{\topfraction}{0.95} % let figure take up nearly whole page
\renewcommand{\textfraction}{0.05} % let figure take up nearly whole page
%    \end{macrocode}
% widows/orphans
%    \begin{macrocode}
\widowpenalty=10000\relax
\clubpenalty=10000\relax
%    \end{macrocode}
% Put marginal notes on the outside of the page
%    \begin{macrocode}
\@mparswitchtrue
%    \end{macrocode}
%\changes{1.18}{2013-10-17}{removed \cs{ds@draft}}
% Use the plainnat bibliography style and set up the required
% punctuation.
%    \begin{macrocode}
\bibliographystyle{plainnat}
\bibpunct{(}{)}{;}{a}{,}{,}
%    \end{macrocode}
%\subsection{Sections}
%\begin{macro}{\section}
%    \begin{macrocode}
\renewcommand{\section}{\@startsection{section}{1}{\z@}%
   {-0.24in \@plus -1ex \@minus -.2ex}%
   {0.10in \@plus.2ex}%
   {\normalfont\rmfamily\bfseries\large\raggedright}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\subsection}
%    \begin{macrocode}
\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
   {-0.20in \@plus -1ex \@minus -.2ex}%
   {0.08in \@plus .2ex}%
   {\normalfont\rmfamily\bfseries\normalsize\raggedright}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\subsubsection}
%    \begin{macrocode}
\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
   {-0.18in \@plus -1ex \@minus -.2ex}%
   {0.08in \@plus .2ex}%
   {\normalfont\normalsize\rmfamily\mdseries\scshape\raggedright}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\paragraph}
%    \begin{macrocode}
\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
   {1.5ex plus 0.5ex minus .2ex}%
   {-1em}%
   {\normalfont\normalsize\rmfamily\bfseries}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\subparagraph}
%    \begin{macrocode}
\renewcommand\subparagraph{\@startsection{subparagraph}{5}{\z@}%
   {1.5ex plus 0.5ex minus .2ex}%
   {-1em}%
   {\normalfont\normalsize\rmfamily\bfseries\itshape}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@seccntformat}
% Redefine the way the section number appears in the section
% heading.
%    \begin{macrocode}
\renewcommand*\@seccntformat[1]{%
  \csname pre#1num\endcsname
  \csname the#1\endcsname.\enskip
}
%    \end{macrocode}
%\end{macro}
%
%\subsection{Footnotes}
%\begin{macro}{\@makefntext}
%\changes{1.08}{2010-07-27}{new}
% Redefine \cs{@makefntext} so that the text between the footnote
% symbol and the footnote text can be redefined. (It looks odd
% having a full stop after a symbol.)
%    \begin{macrocode}
\renewcommand*{\@makefntext}[1]{%
  \@setpar
  {%
    \@@par
    \@tempdima\hsize
    \advance \@tempdima -15pt\relax
    \parshape \@ne 15pt \@tempdima
  }%
  \par
  \parindent 2em\noindent
  \hbox to \z@ {\hss {\@thefnmark }\footnoteseptext\hfil }#1%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\footnoteseptext}
%\changes{1.08}{2010-07-27}{new}
% The separation text between the footnote symbol and the footnote
% text.
%    \begin{macrocode}
\newcommand*{\footnoteseptext}{. }
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\thanks}
%\changes{1.21}{2015-02-24}{added optional argument to \cs{footnotetext}}
%\changes{1.10}{2011-01-05}{Modified definition of \cs{thanks}}
%Added optional argument to \cs{footnotetext} as per 
%\url{http://tex.stackexchange.com/questions/229295}.
%\changes{1.28}{2020-09-21}{switched to using mpfootnote to avoid clashing
%with document footnotes}
%    \begin{macrocode}
\renewcommand*{\thanks}[1]{%
  \refstepcounter{mpfootnote}%
  \footnotemark[\number\value{mpfootnote}]%
  \xappto\@thanks{\noexpand\footnotetext[\number\value{mpfootnote}]{#1}}%
}
%    \end{macrocode}
%\end{macro}
%
%\subsection{Article abstract}
% This code has been taken from jmlr2e.sty but with \cs{bf} updated
% to \cs{bfseries}
%\begin{environment}{abstract}
%    \begin{macrocode}
\ifjmlrhtml
  \renewenvironment{abstract}{\HCode{<h3>}Abstract\HCode{</h3>}}{}%
\else
  \renewenvironment{abstract}
%    \end{macrocode}
%\changes{1.09}{2010/12/01}{changed \cs{centerline} to
%\cs{centering}\ldots\cs{par}}
%    \begin{macrocode}
  {{\centering\large\bfseries Abstract\par}\vspace{0.7ex}%
    \bgroup
       \leftskip 20pt\rightskip 20pt\small\noindent\ignorespaces}%
  {\par\egroup\vskip 0.25ex}
\fi
%    \end{macrocode}
%\end{environment}
%\subsection{Keywords}
% This code has been taken from jmlr2e.sty but with \cs{bf} updated
% to \cs{bfseries}.
%\begin{environment}{keywords}
%    \begin{macrocode}
\newenvironment{keywords}
{\bgroup\leftskip 20pt\rightskip 20pt \small\noindent{\bfseries 
Keywords:} \ignorespaces}%
{\par\egroup\vskip 0.25ex}
%    \end{macrocode}
%\end{environment}
%\subsection{Title Page Information}
% This code has been taken from jmlr2e.sty.
%
% Title stuff, borrowed in part from aaai92.sty
%    \begin{macrocode}
\newlength\aftertitskip     \newlength\beforetitskip
\newlength\interauthorskip  \newlength\aftermaketitskip
%    \end{macrocode}
%% Changeable parameters.
%    \begin{macrocode}
\setlength\aftertitskip{0.1in plus 0.2in minus 0.2in}
\setlength\beforetitskip{0.05in plus 0.08in minus 0.08in}
\setlength\interauthorskip{0.08in plus 0.1in minus 0.1in}
\setlength\aftermaketitskip{0.3in plus 0.1in minus 0.1in}
%    \end{macrocode}
%
%\begin{macro}{\titlebreak}
%\changes{1.12}{2012/01/05}{new}
% Acts like new line in the paper title, but with jmlrbook acts like a space in
% the table of contents and bookmarks.
%    \begin{macrocode}
\newcommand*{\titlebreak}{\newline}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\titletag}
%\changes{1.17}{2012/05/30}{new}
%    \begin{macrocode}
\newcommand*{\titletag}[1]{}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\title}
% Override definition of \cs{title} to allow for an optional
% argument (short title)
%    \begin{macrocode}
\renewcommand*{\title}[2][\@title]{%
  \def\@shorttitle{#1}%
  \def\@title{#2}%
  \protected@write\@auxout{}{\string\jmlr@title{#1}{#2}}%
  \jmlrtitlehook
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@shorttitle}
%\changes{1.12}{2012/01/05}{provided default value}
% The short title of the document is initialised to \cs{jobname} to
% ensure a basic document will compile even if no title is set.
%    \begin{macrocode}
\newcommand*{\@shorttitle}{\jobname}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\jmlrtitlehook}
%    \begin{macrocode}
\newcommand*{\jmlrtitlehook}{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlr@title}
%\changes{1.20}{2014/10/15}{new}
% AUX command provided for MakeJmlrBookGUI
%    \begin{macrocode}
\newcommand*{\jmlr@title}[2]{}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\author}
% Override definition of \cs{author} to allow for an optional
% argument (list of authors for page heading)
%    \begin{macrocode}
\renewcommand*{\author}[2][]{%
  \def\@author{#2}%
  \def\@sauthor{#1}%
  \def\@jmlr@aux@author{#2}\@onelevel@sanitize\@jmlr@aux@author
  \ifx\@sauthor\@empty
    \let\@jmlr@aux@sauthor\@jmlr@aux@author
  \else
    \let\@shortauthor\@sauthor
    \def\@jmlr@aux@sauthor{#1}\@onelevel@sanitize\@jmlr@aux@sauthor
  \fi
  \jmlrauthorhook
  \protected@write\@auxout
    {}{\string\jmlr@author{\@jmlr@aux@sauthor}{\@jmlr@aux@author}}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlrauthorhook}
%    \begin{macrocode}
\newcommand*{\jmlrauthorhook}{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlr@author}
%\changes{1.20}{2014/10/15}{new}
% AUX command provided for MakeJmlrBookGUI
%    \begin{macrocode}
\newcommand*{\jmlr@author}[2]{}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@shortauthor}
%    \begin{macrocode}
\newcommand*{\@shortauthor}{}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@firstauthor}
%    \begin{macrocode}
\newcommand*{\@firstauthor}{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@firstsurname}
%    \begin{macrocode}
\newcommand*{\@firstsurname}{}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\jmlrlength}
%    \begin{macrocode}
\newlength\jmlrlength
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\jmlrmaketitle}
% Make the title
%    \begin{macrocode}
\def\jmlrmaketitle{%
 \jmlrpremaketitlehook
 \def\@jmlr@authors@sep{, }%
 \par
 \begingroup
%    \end{macrocode}
%\changes{1.08}{2010-07-27}{modified footnote marker in the footnote
%text so that it is raised and isn't followed by a full stop}
%    \begin{macrocode}
   \def\footnoteseptext{ }%
   \def\thempfn{\textsuperscript{\thefootnote}}%
   \def\thefootnote{\fnsymbol{footnote}}%
%    \end{macrocode}
%\changes{1.07}{2010-06-30}{added check for two column mode}
%    \begin{macrocode}
   \if@twocolumn
     \twocolumn[\@jmlrmaketitle]%
   \else
     \@jmlrmaketitle
   \fi
   \@thanks
 \endgroup
\label{jmlrstart}%
\ifx\@sauthor\@empty
  \settowidth{\jmlrlength}{\@evenhead}%
  \ifdim\jmlrlength>\textwidth
    \def\@shortauthor{\@firstsurname\space et al.}%
  \fi
\fi
\settowidth{\jmlrlength}{\@titlefoot}%
\ifdim\jmlrlength>\textwidth
  \def\@jmlrauthors{\@firstauthor\space \emph{et al}}%
\fi
\jmlrmaketitlehook
\thispagestyle{jmlrtps}%
\setcounter{footnote}{0}%
\let\maketitle\relax \let\@maketitle\relax
\gdef\@thanks{}\gdef\@author{}\let\thanks\@gobble
\def\@jmlr@authors@sep{ \& }%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\jmlrmaketitlehook}
%    \begin{macrocode}
\newcommand*{\jmlrmaketitlehook}{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlrpremaketitlehook}
%    \begin{macrocode}
\newcommand*{\jmlrpremaketitlehook}{}
%    \end{macrocode}
%\end{macro}
%
% Provide a different title layout for HTML
%\begin{macro}{\jmlrhtmlmaketitle}
%    \begin{macrocode}
\newcommand{\jmlrhtmlmaketitle}{%
  \ifx\@jmlr@authors\@empty
    \sbox\jmlrbox{\let\addr\relax\@author}%
  \fi
  \noindent\HCode{<h2>}\@title\HCode{</h2>}
  \noindent\@jmlr@authors
}
%    \end{macrocode}
%\end{macro}
%%\begin{macro}{\jmlrbox}
% Define a save box
%    \begin{macrocode}
\newsavebox\jmlrbox
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\maketitle}
% If we're creating HTML, set \cs{maketitle} to
% \cs{jmlrhtmlmaketitle}, otherwise set it to \cs{jmlrmaketitle}
%    \begin{macrocode}
\ifjmlrhtml
  \let\maketitle\jmlrhtmlmaketitle
\else
  \let\maketitle\jmlrmaketitle
\fi
%    \end{macrocode}
%\end{macro}
%
% Author and editor information.
%    \begin{macrocode}
\def\@startauthor{\noindent \normalsize\bfseries}
\def\@endauthor{}
\def\@starteditor{\noindent \small {\bfseries \@edname:~}}
\def\@endeditor{\normalsize}
%    \end{macrocode}
% Provide hooks to make it easier to adapted with \cls{combine}
% class.
%\begin{macro}{\jmlrpretitle}
%    \begin{macrocode}
\def\jmlrpretitle{\vskip\beforetitskip\begin{center}\Large\bfseries}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlrposttitle}
%    \begin{macrocode}
\def\jmlrposttitle{\par\end{center}\vskip\aftertitskip}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\nametag}
%\changes{1.09}{2010/12/01}{new}
%    \begin{macrocode}
\newcommand*{\nametag}[1]{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlrpreauthor}
%\changes{1.09}{2010/12/01}{added \cs{nametag}}
%    \begin{macrocode}
\def\jmlrpreauthor{%
\bgroup
  \def\nametag##1{##1}%
  \def\and{\unskip\enspace{\normalfont and}\enspace}%
%    \end{macrocode}
%\changes{1.10}{2011-01-05}{added \cs{mdseries} to \cs{addr}}
%    \begin{macrocode}
  \def\addr{\mdseries\small\itshape}%
  \def\name{\ClassError{jmlr}{Use \string\Name{Author's Name} not \string\name}{}}%
  \def\email{\ClassError{jmlr}{Use \string\Email{address} not \string\email}{}}%
  \def\AND{\@endauthor\normalfont\hss \vskip \interauthorskip
    \@startauthor}%
  \@startauthor 
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\addr}
%\changes{1.20}{2014/10/15}{initialised to nothing}
% Initialise to do nothing if used outside of \cs{author}
%    \begin{macrocode}
\newcommand{\addr}{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@email}
%    \begin{macrocode}
\def\@email{\hfill\small\mdseries\scshape}%
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@name}
%    \begin{macrocode}
\def\@name{\normalsize\upshape\bfseries}%
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@parsename}
% Parse a name. Appends forename to \cs{@forenames} and stores
% surname in \cs{@surname}.
%    \begin{macrocode}
\def\@parsename#1 #2\end@parsename{%
  \def\@tmp{#2}%
  \ifx\@tmp\@nnil
    \def\@surname{#1}%
    \let\@nextparsename\@parsenamenoop
  \else
    \@getinitial#1-\relax\relax\end@getinitial
    \ifx\@forenames\@empty
      \def\@forenames{#1}%
      \protected@edef\@initials{\@initial}%
    \else
      \expandafter\toks@\expandafter{\@forenames}%
      \edef\@forenames{\space\the\toks@}%
      \expandafter\toks@\expandafter{\@initials}%
      \protected@edef\@initials{\the\toks@\@initial}%
    \fi
    \let\@nextparsename\@parsename
  \fi
  \@nextparsename#2\end@parsename
}
\def\@parsenamenoop#1\end@parsename{}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@getinitial}
%    \begin{macrocode}
\def\@getinitial#1#2-#3#4\end@getinitial{%
  \def\@jmlr@tmp{#3}%
  \if\@jmlr@tmp\relax 
    \def\@initial{#1.}%
  \else
    \def\@initial{#1.-#3.}%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\Name}
% Get the author's name and add surname to \cs{@shortauthors}.
% (Surnames with \qt{von} parts or with spaces in should be
% enclosed in braces)
%\changes{1.12}{2012/01/05}{added optional argument}
%    \begin{macrocode}
\newcommand*{\Name}[2][]{%
  \def\@authorlist{#1}%
  \def\@forenames{}%
  \def\@surname{}%
  \def\nametag##1{}%
  \@parsename#2 \@nil\end@parsename
  \ifx\@shortauthor\@empty
    \ifx\@sauthor\@empty
      \global\let\@shortauthor\@surname
      \global\let\@firstsurname\@surname
    \fi
    \ifx\@authorlist\@empty
      \protected@xdef\@jmlrauthors{\@initials\space\@surname}%
    \else
      \protected@xdef\@jmlrauthors{\@authorlist}%
    \fi
    \global\let\@firstauthor\@jmlrauthors
  \else
    \ifx\@sauthor\@empty
      \expandafter\toks@\expandafter{\@shortauthor}%
      \protected@xdef\@shortauthor{\the\toks@\space\@surname}%
    \fi
    \ifx\@authorlist\@empty
      \ifx\@jmlrauthors\@empty
        \protected@xdef\@jmlrauthors{\@initials\space\@surname}%
      \else
        \protected@xdef\@jmlrauthors{\@jmlrauthors
          \noexpand\@jmlr@authors@sep 
          \@initials\space\@surname}%
      \fi
    \else
      \ifx\@jmlrauthors\@empty
        \protected@xdef\@jmlrauthors{\@authorlist}%
      \else
        \protected@xdef\@jmlrauthors{\@jmlrauthors
          \noexpand\@jmlr@authors@sep 
          \@authorlist
        }%
      \fi
    \fi
  \fi
  \def\nametag##1{##1}%
  \@name #2%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\jmlrabbrnamelist}
%\changes{1.11}{2011-03-24}{new}
% Display list of names in abbreviated form. (Mainly designed for use with
% makejmlrbook for the preface authors.) The author should be
% grouped if the name contains a comma.
%    \begin{macrocode}
\newcommand*{\jmlrabbrnamelist}[1]{%
  \def\nametag##1{}%
  \def\@jmlr@authors@sep{, }%
  \def\@jmlr@namelist{}%
  \@for\@thisname:=#1\do{%
    \expandafter\@jmlrabbrname\expandafter{\@thisname}%
    \ifx\@jmlr@namelist\@empty
       \protected@edef\@jmlr@namelist{%
          \@initials\space\@surname
       }%
    \else
       \protected@edef\@jmlr@namelist{%
          \@jmlr@namelist
          \noexpand\@jmlr@authors@sep
          \@initials\space\@surname
       }%
    \fi
  }%
  \def\@jmlr@authors@sep{ \& }%
  \@jmlr@namelist
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@jmlrabbrname}
%    \begin{macrocode}
\newcommand*{\@jmlrabbrname}[1]{%
  \def\@initials{}%
  \def\@surname{}%
  \def\@forenames{}%
  \@parsename#1 \@nil\end@parsename
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\Email}
%    \begin{macrocode}
\newcommand*{\Email}[1]{{\@email #1}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlrpostauthor}
%    \begin{macrocode}
\def\jmlrpostauthor{\@endauthor\egroup
  \par
  \vskip \aftermaketitskip
  \noindent
  \ifx\@editor\@empty
  \else
    \@starteditor \@editor \@endeditor
  \fi
  \vskip \aftermaketitskip
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@jmlrmaketitle}
%\changes{1.26}{2020-01-31}{removed vbox}
%This used to enclose the title in a \cs{vbox} but this caused a
%problem for extremely long author/affiliation lists that spanned
%multiple pages, so the \cs{vbox} has been removed (in v1.26), but
%the grouping has been retained.
%    \begin{macrocode}
\def\@jmlrmaketitle{%
 {% 
  \jmlrpretitle
  {%
    \def\titletag##1{##1}%
    \@title
  }%
  \jmlrposttitle
%    \end{macrocode}
%\changes{1.26}{2020-01-31}{added \cs{ignorespaces}}
% Use \cs{ignorespaces} before \cs{@author} in case a space has been inserted 
% at the start of \cs{author}. May occur with a long author list
% that's been spaced for clarity, but less likely to occur with \cs{title}.
% Trailing spaces are less likely to be noticeable.
%    \begin{macrocode}
  \jmlrpreauthor \ignorespaces\@author \jmlrpostauthor
  }%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\kernelmachines}
% Convenience command
%    \begin{macrocode}
\newcommand*\kernelmachines{(for 
  {\textsc{http://www.kernel-machines.org}})}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\editorname}
% Label for the editor
%    \begin{macrocode}
\newcommand*{\editorname}{Editor}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\editorsname}
% Label for the editor
%    \begin{macrocode}
\newcommand*{\editorsname}{Editors}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@edname}
% This will either be Editor or Editors depending on whether
% \cs{editor} or \cs{editors} is used. Defaults to \cs{editorname}
%    \begin{macrocode}
\let\@edname\editorname
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@editor}
% The editor or editors are stored in \cs{@editor}
%    \begin{macrocode}
\def\@editor{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\editor}
% A single editor
%    \begin{macrocode}
\def\editor#1{%
  \global\let\@edname\editorname
  \gdef\@editor{#1}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\editors}
% Multiple editors
%    \begin{macrocode}
\def\editors#1{%
  \global\let\@edname\editorsname
  \gdef\@editor{#1}%
}
%    \end{macrocode}
%\end{macro}
%
%\subsection{Pagestyles}
% This is taken from jmlr2e.sty
%
%\begin{macro}{\firstpageno}
% Set the page counter.
%    \begin{macrocode}
\def\firstpageno#1{\setcounter{page}{#1}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\startpage}
%\changes{1.10}{2011-01-05}{new}
% If \cs{startpage} has been defined, use its value for the first
% page.
%    \begin{macrocode}
\@ifundefined{startpage}{}{\firstpageno{\startpage}}
%    \end{macrocode}
%\end{macro}
%
% Label end page.
%\begin{macro}{\@jmlrenddoc}
% Label end page
%\changes{1.29}{2022-01-29}{added float barrier}
%    \begin{macrocode}
\newcommand*{\@jmlrenddoc}{%
  \FloatBarrier
  \phantomsection
  \protected@edef\@currentlabelname{end of \@shorttitle}%
  \label{jmlrend}\null
  \global\let\@reprint\@empty
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@titlefoot}
%\changes{1.09}{2010/12/01}{added \cs{@reprint}}
%    \begin{macrocode}
\newcommand*{\@titlefoot}{\scriptsize\copyright\space\@jmlryear
    \space\@jmlr@authors.\hfill
    \@reprint
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\reprint}
%\changes{1.09}{2010/12/01}{new}
%    \begin{macrocode}
\let\@reprint\@empty
\newcommand{\reprint}[1]{%
  \gdef\@reprint{Reprinted with permission for JMLR#1}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\ps@jmlrtps}
% Title page style
%    \begin{macrocode}
\newcommand\ps@jmlrtps{%
  \let\@mkboth\@gobbletwo
  \def\@oddhead{\scriptsize \@jmlrproceedings
    \ifx\@jmlrvolume\@empty
    \else
       \space\@jmlrvolume
       \ifx\@jmlrissue\@empty\else(\@jmlrissue)\fi
       \ifx\@jmlrpages\@empty
          \ifx\@jmlryear\@empty
          \else
             \if\@jmlrissue\@empty,\fi
          \fi
       \else
          :%
       \fi
    \fi
    \ifx\@jmlrpages\@empty
    \else
       \ifx\@jmlrvolume\@empty\space\fi
       \@jmlrpages
       \ifx\@jmlryear\@empty\else,\fi
    \fi
    \ifx\@jmlryear\@empty\else\space\@jmlryear\fi
    \hfill
    \ifx\@jmlrworkshop\@empty
      \ifx\@jmlrsubmitted\@empty
      \else
        Submitted \@jmlrsubmitted
        \ifx\@jmlrpublished\@empty\else;\fi
      \fi
      \ifx\@jmlrpublished\@empty
      \else
        \space Published \@jmlrpublished
      \fi
    \else
      \space\@jmlrworkshop
    \fi
  }%
  \let\@evenhead\@oddhead
  \def\@oddfoot{\@titlefoot}%
  \let\@evenfoot\@oddfoot
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\ps@jmlrps}
% Page style for subsequent pages
%    \begin{macrocode}
\def\ps@jmlrps{%
  \let\@mkboth\@gobbletwo
  \def\@oddhead{\hfill {\small\scshape \@shorttitle} \hfill}%
  \def\@oddfoot{\hfill \small\rmfamily \thepage \hfill}%
  \def\@evenhead{\hfill {\small\scshape \@shortauthor} \hfill}%
  \def\@evenfoot{\hfill \small\rmfamily \thepage \hfill}%
}%
%    \end{macrocode}
% Set the page style:
%    \begin{macrocode}
\pagestyle{jmlrps}
%    \end{macrocode}
%\end{macro}
% Set the heading information:
%\begin{macro}{\@jmlrvolume}
% The volume number:
%\changes{1.17}{2012/05/30}{changed initial definition to use
%\cs{providecommand}}
%    \begin{macrocode}
\providecommand*{\@jmlrvolume}{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlrvolume}
%    \begin{macrocode}
\newcommand*{\jmlrvolume}[1]{\renewcommand*{\@jmlrvolume}{#1}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@jmlrissue}
% The issue number:
%    \begin{macrocode}
\providecommand*{\@jmlrissue}{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlrissue}
%    \begin{macrocode}
\newcommand*{\jmlrissue}[1]{\renewcommand*{\@jmlrissue}{#1}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@jmlryear}
% The year of publication:
%\changes{1.17}{2012/05/30}{changed initial definition to use
%\cs{providecommand}}
%    \begin{macrocode}
\providecommand*{\@jmlryear}{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlryear}
%    \begin{macrocode}
\newcommand*{\jmlryear}[1]{\renewcommand*{\@jmlryear}{#1}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@jmlrpages}
% The page range:
%\changes{1.17}{2012/05/30}{changed initial definition to use
%\cs{providecommand}}
%    \begin{macrocode}
\providecommand*\@jmlrpages{\pageref{jmlrstart}--\pageref{jmlrend}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlrpages}
%    \begin{macrocode}
\newcommand*{\jmlrpages}[1]{\renewcommand*{\@jmlrpages}{#1}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@jmlrsubmitted}
% The date the article was submitted:
%\changes{1.17}{2012/05/30}{changed initial definition to use
%\cs{providecommand}}
%    \begin{macrocode}
\providecommand*\@jmlrsubmitted{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlrsubmitted}
%    \begin{macrocode}
\newcommand*{\jmlrsubmitted}[1]{\renewcommand*{\@jmlrsubmitted}{#1}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@jmlrpublished}
% The date the article was published:
%\changes{1.17}{2012/05/30}{changed initial definition to use
%\cs{providecommand}}
%    \begin{macrocode}
\providecommand*\@jmlrpublished{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlrpublished}
%    \begin{macrocode}
\newcommand*{\jmlrpublished}[1]{\renewcommand*{\@jmlrpublished}{#1}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@jmlrworkshop}
% The name of the workshop:
%\changes{1.17}{2012/05/30}{changed initial definition to use
%\cs{providecommand}}
%    \begin{macrocode}
\providecommand*\@jmlrworkshop{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlrworkshop}
%    \begin{macrocode}
\newcommand*{\jmlrworkshop}[1]{%
 \renewcommand*{\@jmlrworkshop}{#1}%
 \protected@write\@auxout{}{\string\jmlr@workshop{#1}}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlr@workshop}
%\changes{1.20}{2014/10/15}{new}
%    \begin{macrocode}
\newcommand*{\jmlr@workshop}[1]{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\date}
%    \begin{macrocode}
\renewcommand*{\date}[1]{%
 \renewcommand*{\@date}{#1}%
 \protected@write\@auxout{}{\string\jmlr@date{#1}}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlr@date}
%\changes{1.20}{2014/10/15}{new}
%    \begin{macrocode}
\newcommand*{\jmlr@date}[1]{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@jmlrauthors}
%    \begin{macrocode}
\newcommand*{\@jmlrauthors}{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@jmlr@authors}
%\changes{1.12}{2012/01/05}{new}
%    \begin{macrocode}
\newcommand*{\@jmlr@authors}{\@jmlrauthors}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlrauthors}
% This is provided in case \cs{Name} doesn't set \cs{@jmlrauthors}
% correctly.
%\changes{1.12}{2012/01/05}{\cs{jmlrauthors} now redefines
%\cs{@jmlr@authors} instead of \cs{@jmlrauthors}}
%    \begin{macrocode}
\newcommand*{\jmlrauthors}[1]{\global\def\@jmlr@authors{#1}}
%    \end{macrocode}
%\end{macro}
%
%
%\subsection{Miscellany}
% This code was taken from jmlr2e.sty.

% Define macros for figure captions and table titles
%    \begin{macrocode}
\def\figurecaption#1#2{\noindent\hangindent 40pt
                       \hbox to 36pt {\small\slshape #1 \hfil}
                       \ignorespaces {\small #2}}
%    \end{macrocode}
% Figurecenter prints the caption title centered.
%    \begin{macrocode}
\def\figurecenter#1#2{\centerline{{\slshape #1} #2}}
\def\figurecenter#1#2{\centerline{{\small\slshape #1} {\small #2}}}
%    \end{macrocode}
%
%  Allow ``hanging indents'' in long captions
%
%\begin{macro}{\@makecaption}
%    \begin{macrocode}
\long\def\@makecaption#1#2{%
   \vskip 10pt 
   \setbox\@tempboxa\hbox{#1: #2}%
   \ifdim \wd\@tempboxa >\hsize               % IF longer than one line:
       \begin{list}{#1:}{%
       \settowidth{\labelwidth}{#1:}
       \setlength{\leftmargin}{\labelwidth}
       \addtolength{\leftmargin}{\labelsep}
        }\item #2 \end{list}\par   % Output in quote mode
     \else                                    %   ELSE  center.
       \hbox to\hsize{\hfil\box\@tempboxa\hfil}  
   \fi}
%    \end{macrocode}
%\end{macro}
% Define strut macros for skipping spaces above and below text in a
% tabular environment.
%    \begin{macrocode}
\def\abovestrut#1{\rule[0in]{0in}{#1}\ignorespaces}
\def\belowstrut#1{\rule[-#1]{0in}{#1}\ignorespaces}
%    \end{macrocode}
%\begin{macro}{\acks}
% Acknowledgements
%    \begin{macrocode}
\newcommand{\acks}[1]{\section*{Acknowledgments}#1}
%    \end{macrocode}
%\end{macro}
% Research Note
%\begin{macro}{\researchnote}
%    \begin{macrocode}
\newcommand{\researchnote}[1]{\noindent {\LARGE\itshape Research Note} #1}
%    \end{macrocode}
%\end{macro}
%
%Other macros now moved to \sty{jmlrutils}.
%
%\begin{macro}{\ifprint}
% Provide command to check if this is the printed greyscale
% version or the online colour version.
%    \begin{macrocode}
\providecommand{\ifprint}[2]{\ifgrayscale#1\else#2\fi}
%    \end{macrocode}
%\end{macro}
%
% Modify \cs{includegraphics} so that it can pick up the greyscale
% version of images if this is the print version. (Extension
% shouldn't be specified.)
%    \begin{macrocode}
\ifjmlrhtml
\else
  \let\@org@Ginclude@graphics\Ginclude@graphics
%    \end{macrocode}
% Since \sty{graphics} 2019/07/01, the file name parsing has changed
% to allow for UTF-8 characters. So provide patches for the old and
% new versions and work out which one to use.
%\changes{1.25}{2020-01-17}{added check for graphics.sty version}
%\begin{macro}{\@jmlr@old@Ginclude@graphics}
%\changes{1.25}{2020-01-17}{new}
%This is a patched version of the old \cs{Ginclude@graphics}.
%    \begin{macrocode}
  \def\@jmlr@old@Ginclude@graphics#1{%
    \begingroup
    \let\input@path\Ginput@path
    \ifprint{\filename@parse{#1-gray}}{\filename@parse{#1}}%
    \ifx\filename@ext\relax
      \@for\Gin@temp:=\Gin@extensions\do{%
        \ifx\Gin@ext\relax
          \Gin@getbase\Gin@temp
        \fi}%
    \else
      \ifprint{\filename@parse{#1}}{}%
      \Gin@getbase{\Gin@sepdefault\filename@ext}%
      \ifx\Gin@ext\relax
         \@warning{File `#1' not found}%
         \def\Gin@base{\filename@area\filename@base}%
         \edef\Gin@ext{\Gin@sepdefault\filename@ext}%
      \fi
    \fi
      \ifx\Gin@ext\relax
        \ifprint{\@org@Ginclude@graphics{#1}}%
        {%
           \@latex@error{File `#1' not found}%
           {I could not locate the file with any of these extensions:^^J%
            \Gin@extensions^^J\@ehc}%
        }%
      \else
         \@ifundefined{Gin@rule@\Gin@ext}%
           {\ifx\Gin@rule@*\@undefined
              \@latex@error{Unknown graphics extension: \Gin@ext}\@ehc
            \else
              \expandafter\Gin@setfile\Gin@rule@*{\Gin@base\Gin@ext}%
             \fi}%
           {\expandafter\expandafter\expandafter\Gin@setfile
               \csname Gin@rule@\Gin@ext\endcsname{\Gin@base\Gin@ext}}%
      \fi
    \endgroup}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@jmlr@new@Ginclude@graphics}
%\changes{1.25}{2020-01-17}{new}
%This is a patch of the new version.
%    \begin{macrocode}
\def\@jmlr@new@Ginclude@graphics#1{%
  \ifx\detokenize\@undefined\else
    \edef\Gin@extensions{\detokenize\expandafter{\Gin@extensions}}%
  \fi
  \begingroup
  \let\input@path\Ginput@path
  \ifprint{\set@curr@file{#1-gray}}{\set@curr@file{#1}}%
  \expandafter\filename@parse\expandafter{\@curr@file}%
  \ifx\filename@ext\Gin@gzext
    \expandafter\filename@parse\expandafter{\filename@base}%
    \ifx\filename@ext\relax
      \let\filename@ext\Gin@gzext
    \else
      \edef\Gin@ext{\Gin@ext\Gin@sepdefault\Gin@gzext}%
    \fi
  \fi
  \let\@jmlr@filename@ext\filename@ext
  \ifx\filename@ext\relax
    \@for\Gin@temp:=\Gin@extensions\do{%
      \ifx\Gin@ext\relax
        \Gin@getbase\Gin@temp
      \fi}%
    \ifprint
    {\ifx\Gin@ext\relax
       \set@curr@file{#1}%
       \expandafter\filename@parse\expandafter{\@curr@file}%
       \ifx\filename@ext\Gin@gzext
        \expandafter\filename@parse\expandafter{\filename@base}%
        \ifx\filename@ext\relax
          \let\filename@ext\Gin@gzext
        \else
          \edef\Gin@ext{\Gin@ext\Gin@sepdefault\Gin@gzext}%
        \fi
       \fi
       \let\@jmlr@filename@ext\filename@ext
       \ifx\filename@ext\relax
       \@for\Gin@temp:=\Gin@extensions\do{%
         \ifx\Gin@ext\relax
           \Gin@getbase\Gin@temp
         \fi}%
       \fi
     \fi}{}%
  \fi
  \ifx\@jmlr@filename@ext\relax
  \else
    \Gin@getbase{\Gin@sepdefault\filename@ext}%
    \ifx\Gin@ext\relax
      \let\Gin@savedbase\filename@base
      \let\Gin@savedext\filename@ext
      \edef\filename@base{\filename@base\Gin@sepdefault\filename@ext}%
      \let\filename@ext\relax
       \@for\Gin@temp:=\Gin@extensions\do{%
          \ifx\Gin@ext\relax
            \Gin@getbase\Gin@temp
          \fi}%
        \ifx\Gin@ext\relax
        \let\filename@base\Gin@savedbase
        \let\filename@ext\Gin@savedext
      \fi
    \fi
    \ifx\Gin@ext\relax
       \@warning{File `#1' not found}%
       \def\Gin@base{\filename@area\filename@base}%
       \edef\Gin@ext{\Gin@sepdefault\filename@ext}%
    \fi
  \fi
  \ifx\Gin@ext\relax
       \@latex@error{File `#1' not found}%
       {I could not locate the file with any of these extensions:^^J%
        \Gin@extensions^^J\@ehc}%
  \else
     \@ifundefined{Gin@rule@\Gin@ext}%
       {\ifx\Gin@rule@*\@undefined
          \@latex@error{Unknown graphics extension: \Gin@ext}\@ehc
        \else
          \expandafter\Gin@setfile\Gin@rule@*{\Gin@base\Gin@ext}%
         \fi}%
       {\expandafter\expandafter\expandafter\Gin@setfile
           \csname Gin@rule@\Gin@ext\endcsname{\Gin@base\Gin@ext}}%
  \fi
  \endgroup
}
%    \end{macrocode}
%\end{macro}
%Determine which one to use:
%    \begin{macrocode}
  \@ifpackagelater{graphics}{2019/07/01}
  {\let\Ginclude@graphics\@jmlr@new@Ginclude@graphics}%
  {\let\Ginclude@graphics\@jmlr@old@Ginclude@graphics}%
\fi
%    \end{macrocode}
%
%\begin{macro}{\artappendix}
% Switch to appendices in an article
%    \begin{macrocode}
\newcommand{\artappendix}{\par
  \setcounter{section}{0}
  \setcounter{subsection}{0}
  \def\thesection{\Alph{section}}
%    \end{macrocode}
%\changes{1.12}{2012/01/05}{added chapter to \cs{theHsection} to ensure unique
%hyperlink names in book}
%    \begin{macrocode}
  \def\theHsection{\theHchapter.\Alph{section}}
  \def\presectionnum{Appendix~}%
}
%    \end{macrocode}
%\end{macro}
% The default assumes a stand-alone article.
%\begin{macro}{\appendix}
%    \begin{macrocode}
\let\appendix\artappendix
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\booklinebreak}
%\changes{1.18}{2013-10-17}{new}
% Provided for book production editors to fine tune the book
% line breaking. Does nothing in the standalone article.
%    \begin{macrocode}
\newcommand{\booklinebreak}[1][]{}
%    \end{macrocode}
%\end{macro}
%
%\subsection{Compatibility with combine.cls}
%
% Define chapters to make this class play nicely with \cls{combine}.
% These definitions are just copied from book.cls
%    \begin{macrocode}
\newcounter{chapter}
\renewcommand\thechapter{\@arabic\c@chapter}
\newcommand\@chapapp{\chaptername}
%    \end{macrocode}
% Add sections to the chapter reset.
%    \begin{macrocode}
\@addtoreset{section}{chapter}
%    \end{macrocode}
%\begin{macro}{\chaptermark}
%    \begin{macrocode}
\newcommand*\chaptermark[1]{}
%    \end{macrocode}
%\end{macro}
% Chapters should only be defined when we're combining documents
% into a book.
%\begin{macro}{\bookchapter}
%    \begin{macrocode}
\newcommand\bookchapter{%
  \if@openright\cleardoublepage\else\clearpage\fi
                    \thispagestyle{plain}%
                    \global\@topnum\z@
                    \@afterindentfalse
                    \secdef\@chapter\@schapter}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\artchapter}
% Disable chapters for articles.
%    \begin{macrocode}
\newcommand\artchapter{%
  \ClassError{jmlr}{Chapters not permitted in articles}{}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\chapter}
% The default assumes a stand-alone document.
%    \begin{macrocode}
\let\chapter\artchapter
%    \end{macrocode}
%\end{macro}
% Label for the chapter entries in the toc.
%    \begin{macrocode}
\def\@chaptoclabel{chapter}
%    \end{macrocode}
%\begin{macro}{\@chapter}
% Numbered chapters
%    \begin{macrocode}
\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
                       \refstepcounter{chapter}%
                       \if@mainmatter
                         \typeout{\@chapapp\space\thechapter.}%
                         \addcontentsline{toc}{\@chaptoclabel}%
                                   {\protect\numberline{\thechapter}#1}%
                       \else
                         \addcontentsline{toc}{\@chaptoclabel}{#1}%
                       \fi
                    \else
                      \addcontentsline{toc}{\@chaptoclabel}{#1}%
                    \fi
                    \chaptermark{#1}%
                    \addtocontents{lof}{\protect\addvspace{10\p@}}%
                    \addtocontents{lot}{\protect\addvspace{10\p@}}%
                    \if@twocolumn
                      \@topnewpage[\@makechapterhead{#2}]%
                    \else
                      \@makechapterhead{#2}%
                      \@afterheading
                    \fi}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\chaptertitleformat}
% Formats the chapter title
%    \begin{macrocode}
\newcommand{\chaptertitleformat}[1]{%
  \Huge\bfseries#1%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\chapternumberformat}
% Formats the chapter number
%    \begin{macrocode}
\newcommand{\chapternumberformat}[1]{%
  \huge\bfseries \@chapapp\space#1\par\nobreak
  \vskip 20\p@
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\chapterformat}
% Overall format for chapter headings
%    \begin{macrocode}
\newcommand*{\chapterformat}{\raggedright}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\postchapterskip}
% Vertical gap after chapter heading
%    \begin{macrocode}
\newlength\postchapterskip
\setlength\postchapterskip{40pt}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\prechapterskip}
% Vertical gap before chapter heading
%    \begin{macrocode}
\newlength\prechapterskip
\setlength\prechapterskip{50pt}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@makechapterhead}
% Chapter heading for numbered chapters
%    \begin{macrocode}
\def\@makechapterhead#1{%
  \null\vskip\prechapterskip
  {\parindent \z@ \normalfont\chapterformat
    \ifnum \c@secnumdepth >\m@ne
      \if@mainmatter
        \chapternumberformat{\thechapter}%
      \fi
    \fi
    \interlinepenalty\@M
    \chaptertitleformat{#1}\par\nobreak
    \vskip \postchapterskip
  }}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@schapter}
% Unnumbered chapters.
%    \begin{macrocode}
\def\@schapter#1{\if@twocolumn
                   \@topnewpage[\@makeschapterhead{#1}]%
                 \else
                   \@makeschapterhead{#1}%
                   \@afterheading
                 \fi}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@makeschapterhead}
% Layout for unnumbered chapter headings
%    \begin{macrocode}
\def\@makeschapterhead#1{%
  \vspace*{\prechapterskip}%
  {\parindent \z@
    \normalfont\chapterformat
    \interlinepenalty\@M
    \chaptertitleformat{#1}\par\nobreak
    \vskip \postchapterskip
  }}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\l@chapter}
% Format for chapter entry in toc
%    \begin{macrocode}
\newcommand*\l@chapter[2]{%
  \ifnum \c@tocdepth >\m@ne
    \addpenalty{-\@highpenalty}%
    \vskip 1.0em \@plus\p@
    \setlength\@tempdima{1.5em}%
    \begingroup
      \parindent \z@ \rightskip \@pnumwidth
      \parfillskip -\@pnumwidth
      \leavevmode \large\bfseries
      \advance\leftskip\@tempdima
      \hskip -\leftskip
      #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
      \penalty\@highpenalty
    \endgroup
  \fi}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\l@appendix}
% Make appendix entries in the toc the same as that for chapters
% by default
%    \begin{macrocode}
\let\l@appendix\l@chapter
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\chaptername}
%    \begin{macrocode}
\newcommand\chaptername{Chapter}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\frontmatter}
% Start the front matter (in book)
%    \begin{macrocode}
\newcommand\frontmatter{%
  \cleardoublepage
  \@mainmatterfalse
  \renewcommand*{\theHchapter}{front-\thechapter}%
  \pagenumbering{roman}%
  \morefrontmatter
}
\newcommand\morefrontmatter{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\mainmatter}
% Start the main matter (in book)
%    \begin{macrocode}
\newcommand\mainmatter{%
  \cleardoublepage
  \@mainmattertrue
  \setcounter{chapter}{0}%
  \renewcommand*{\theHchapter}{\thechapter}%
  \pagenumbering{arabic}%
  \moremainmatter
}
\newcommand\moremainmatter{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\backmatter}
% Start the back matter (in book)
%    \begin{macrocode}
\newcommand\backmatter{%
  \if@openright
    \cleardoublepage
  \else
    \clearpage
  \fi
  \@mainmatterfalse}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\booktocpreamble}
%\changes{1.09}{2010/12/01}{new}
%    \begin{macrocode}
\newcommand*{\booktocpreamble}{}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\booktocpostamble}
%\changes{1.14}{2012-04-24}{new}
%    \begin{macrocode}
\newcommand*{\booktocpostamble}{}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\booktableofcontents}
% This is for the main table of contents when using 
% the combine class file, and is not for use in individual
% articles.
%\changes{1.14}{2012-04-24}{reset page headers at end of toc}
%    \begin{macrocode}
\newcommand\booktableofcontents{%
  \if@twocolumn
    \@restonecoltrue\onecolumn
  \else
    \@restonecolfalse
  \fi
  \chapter*{\contentsname
    \@mkboth{\MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
  \booktocpreamble
  \@starttoc{toc}%
  \booktocpostamble
  \if@restonecol
    \twocolumn
  \else
    \clearpage
  \fi
  \@mkboth{}{}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\arttableofcontents}
% Table of contents for individual articles.
%    \begin{macrocode}
\let\arttableofcontents\tableofcontents
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\artpart}
% A part in an article
%    \begin{macrocode}
\newcommand{\artpart}{%
%    \end{macrocode}
%\changes{1.10}{2011-01-05}{set \cs{toclevel@part}}
%    \begin{macrocode}
  \def\toclevel@part{0}%
  \if@noskipsec \leavevmode\fi
  \par
  \addvspace{4ex}%
  \@afterindentfalse
  \secdef\@artpart\@sartpart
}
\let\@artpart\@part
\let\@sartpart\@spart
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\bookpart}
% A part in a book forming a collection of articles
%    \begin{macrocode}
\newcommand\bookpart{%
%    \end{macrocode}
%\changes{1.10}{2011-01-05}{set \cs{toclevel@part}}
%    \begin{macrocode}
  \def\toclevel@part{-1}%
  \if@openright
    \cleardoublepage
  \else
    \clearpage
  \fi
  \thispagestyle{plain}%
  \if@twocolumn
    \onecolumn
    \@tempswatrue
  \else
    \@tempswafalse
  \fi
  \preparthook
  \secdef\@bookpart\@sbookpart}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\parttitleformat}
% Format of the title for a part (in a book)
%    \begin{macrocode}
\newcommand{\parttitleformat}[1]{%
  \Huge\bfseries#1%
}
%    \end{macrocode}
%\end{macro}
%
% Part labels
%    \begin{macrocode}
\newcommand*{\@parttoclabel}{part}
%    \end{macrocode}
%
%\begin{macro}{\@partapp}
%\changes{1.09}{2010/12/01}{new}
%    \begin{macrocode}
\def\@partapp{\partname}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\partnumberformat}
% Format of the part number (in a book)
%    \begin{macrocode}
\newcommand{\partnumberformat}[1]{%
  \Huge\bfseries \@partapp\nobreakspace#1\par\nobreak
  \vskip 20\p@
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\preparthook}
% Hook at the start of a part (in a book)
%    \begin{macrocode}
\newcommand{\preparthook}{\null\vfil}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\partformat}
% Overall format of part
%    \begin{macrocode}
\newcommand*{\partformat}{\centering}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@bookpart}
% Numbered book part format
%    \begin{macrocode}
\def\@bookpart[#1]#2{%
    \ifnum \c@secnumdepth >-2\relax
      \refstepcounter{part}%
      \addcontentsline{toc}{\@parttoclabel}{\protect\numberline{\thepart}#1}%
    \else
      \addcontentsline{toc}{\@parttoclabel}{#1}%
    \fi
    \markboth{}{}%
    {\interlinepenalty \@M
     \normalfont\partformat
     \ifnum \c@secnumdepth >-2\relax
       \partnumberformat{\thepart}%
     \fi
     \parttitleformat{#2}\par}%
    \postparthook}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@sbookpart}
% Unnumbered book part format
%    \begin{macrocode}
\def\@sbookpart#1{%
    {\interlinepenalty \@M
     \normalfont\partformat
     \parttitleformat{#1}\par}%
    \postparthook}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\postparthook}
% Hook after part heading
%    \begin{macrocode}
\def\postparthook{\vfil\newpage
              \if@twoside
               \if@openright
                \null
                \thispagestyle{empty}%
                \newpage
               \fi
              \fi
              \if@tempswa
                \twocolumn
              \fi}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\bookappendix}
% Switch to appendices in book
%\changes{1.17}{2012/05/30}{added def \cs{@write@jmlr@import}}
%    \begin{macrocode}
\newcommand\bookappendix{\par
  \setcounter{table}{0}%
  \setcounter{figure}{0}%
  \zeroextracounters
  \par
  \gdef\theHchapter{\Alph {chapter}}%
  \xdef\Hy@chapapp{\Hy@appendixstring}%
  \setcounter{chapter}{0}%
  \setcounter{section}{0}%
  \gdef\@chapapp{\appendixname}%
  \gdef\thechapter{\@Alph\c@chapter}%
  \def\@write@jmlr@import{\@@write@jmlr@apdimport}%
  \csname appendixmore\endcsname
}
%    \end{macrocode}
%\end{macro}
% Define commands to switch between book/article modes
%\begin{macro}{\jmlrbookcommands}
% Switch to book commands
%    \begin{macrocode}
\newcommand*{\jmlrbookcommands}{%
  \let\part\bookpart
  \let\chapter\bookchapter
  \let\appendix\bookappendix
  \let\tableofcontents\booktableofcontents
  \def\thesection{\thechapter.\arabic{section}}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlarticlecommands}
% Switch to article commands
%    \begin{macrocode}
\newcommand*{\jmlrarticlecommands}{%
  \let\part\artpart
  \let\chapter\artchapter
  \let\appendix\artappendix
  \let\tableofcontents\arttableofcontents
  \def\thesection{\arabic{section}}%
}
%    \end{macrocode}
%\end{macro}
% Check for packages that are known to cause problems when 
% combining articles into a book.
% Since \cls{jmlrbook} is now deprecated some errors can be
% converted to warnings, which are suppressed by default.
%\begin{macro}{\@jmlr@check@warn}
%\changes{1.29}{2022-01-29}{new}
%    \begin{macrocode}
\newcommand*{\@jmlr@check@warn}[1]{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@jmlr@check@packages}
%    \begin{macrocode}
\newcommand*{\@jmlr@check@packages}{%
  \@ifpackageloaded{epsfig}{%
    \ClassError{jmlr}{Obsolete package `epsfig' detected.
     \MessageBreak
     Please use \string\includegraphics\space to include images
     instead}{}}{}%
  \@ifpackageloaded{psfig}{%
    \ClassError{jmlr}{Obsolete package `psfig' detected.
     \MessageBreak
     Please use \string\includegraphics\space to include images
     instead}{}}{}%
  \@ifpackageloaded{subfig}{%
    \@jmlr@check@warn{Package `subfig' detected.\MessageBreak
    This will cause a conflict if the article is incorporated
    \MessageBreak
    into a book using jmlbook.cls.
    \MessageBreak
    Please use \string\subfigure\space and
    \string\subtable\space instead}}{}%
  \@ifpackageloaded{theorem}{%
   \ClassError{jmlr}{Package `theorem' detected.\MessageBreak
    This can cause a conflict with other packages used by jmlr}{}}{}%
  \@ifpackageloaded{ntheorem}{%
   \ClassError{jmlr}{Package `ntheorem' detected.\MessageBreak
    This can cause a conflict with other packages used by jmlr}{}}{}%
  \@ifpackageloaded{amsthm}{%
   \ClassError{jmlr}{Package `amsthm' detected.\MessageBreak
    This package conflicts with the jmlr class}{}}{}%
  \@ifpackageloaded{pdfpages}%
   {\@jmlr@check@warn{Package `pdfpages' detected.\MessageBreak
   This can cause a problem for jmlrbook}}{}%
  \@ifpackageloaded{geometry}%
   {\@jmlr@check@warn{Package `geometry' detected.\MessageBreak
   This can cause a problem for jmlrbook}}{}%
  \@ifpackageloaded{tabularx}{%
   \ClassError{jmlr}{Package `tabularx' detected.\MessageBreak
    This will break footnote links}{}}{}%
%    \end{macrocode}
%\changes{1.21}{2015-02-24}{Added check for jmlr2e package}
%    \begin{macrocode}
  \@ifpackageloaded{jmlr2e}{%
   \ClassError{jmlr}{Package `jmlr2e' detected.\MessageBreak
    This can't be used with the jmlr class}{}}{}%
}
\AtBeginDocument{%
\@jmlr@check@packages
\let\@jmlr@check@packages\relax
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlrSuppressPackageChecks}
% Don't check for potentially problematic packages.
%    \begin{macrocode}
\newcommand*{\jmlrSuppressPackageChecks}{%
  \let\@jmlr@check@packages\relax
}
%    \end{macrocode}
%\end{macro}
% Discourage authors from using obsolete commands:
%\begin{macro}{\obsoletefontcs}
%    \begin{macrocode}
\DeclareRobustCommand*{\obsoletefontcs}[1]{%
  \ClassWarning{jmlr}{Obsolete command 
    \expandafter\string\csname#1\endcsname\space detected}%
  \csname #1 \endcsname
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\bf}
%\changes{1.17}{2012/05/30}{added redefinition to produce obsolete warning}
%    \begin{macrocode}
\renewcommand*{\bf}{%
  \obsoletefontcs{bf}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\it}
%\changes{1.17}{2012/05/30}{added redefinition to produce obsolete warning}
%    \begin{macrocode}
\renewcommand*{\it}{%
  \obsoletefontcs{it}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\sc}
%\changes{1.17}{2012/05/30}{added redefinition to produce obsolete warning}
%    \begin{macrocode}
\renewcommand*{\sc}{%
  \obsoletefontcs{sc}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\rm}
%\changes{1.17}{2012/05/30}{added redefinition to produce obsolete warning}
%    \begin{macrocode}
\renewcommand*{\rm}{%
  \obsoletefontcs{rm}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\sf}
%\changes{1.17}{2012/05/30}{added redefinition to produce obsolete warning}
%    \begin{macrocode}
\renewcommand*{\sf}{%
  \obsoletefontcs{sf}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tt}
%\changes{1.17}{2012/05/30}{added redefinition to produce obsolete warning}
%    \begin{macrocode}
\renewcommand*{\tt}{%
  \obsoletefontcs{tt}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\jmlrcheckforpseudocode}
%\changes{1.21}{2015-02-24}{Added check for pseudocode package}
% Check for \sty{pseudocode} package since it conflicts with
% the \sty{algorithm} package and quite often both packages
% are used in the same book or proceedings.
%    \begin{macrocode}
\providecommand*{\jmlrcheckforpseudocode}{%
  \@ifpackageloaded{pseudocode}%
  {%
    \let\pseudoRETURN\RETURN
    \let\pseudoTRUE\TRUE
    \let\pseudoFALSE\FALSE
    \let\pseudoAND\AND
    \let\pseudoOR\OR
    \let\pseudoNOT\NOT
    \let\pseudoTO\TO
    \let\pseudoCOMMENT\COMMENT
    \let\pseudoIF\IF
    \let\pseudoELSE\ELSE
    \let\pseudoFOR\FOR
    \let\pseudoFORALL\FORALL
    \let\pseudoWHILE\WHILE
    \let\pseudoREPEAT\REPEAT
    \let\pseudoUNTIL\UNTIL
    \let\pseudoENDFOR\ENDFOR
    \let\RETURN\undefined
    \let\TRUE\undefined
    \let\FALSE\undefined
    \let\AND\undefined
    \let\OR\undefined
    \let\NOT\undefined
    \let\TO\undefined
    \let\COMMENT\undefined
    \let\IF\undefined
    \let\ELSE\undefined
    \let\FOR\undefined
    \let\FORALL\undefined
    \let\WHILE\undefined
    \let\REPEAT\undefined
    \let\UNTIL\undefined
    \let\ENDFOR\undefined
    \preto\pseudocode{%
    \let\RETURN\pseudoRETURN
    \let\TRUE\pseudoTRUE
    \let\FALSE\pseudoFALSE
    \let\AND\pseudoAND
    \let\OR\pseudoOR
    \let\NOT\pseudoNOT
    \let\TO\pseudoTO
    \let\COMMENT\pseudoCOMMENT
    \let\IF\pseudoIF
    \let\ELSE\pseudoELSE
    \let\FOR\pseudoFOR
    \let\FORALL\pseudoFORALL
    \let\WHILE\pseudoWHILE
    \let\REPEAT\pseudoREPEAT
    \let\UNTIL\pseudoUNTIL
    \let\ENDFOR\pseudoENDFOR
    }%
  }%
  {}%
}
\jmlrcheckforpseudocode
%    \end{macrocode}
%\end{macro}
%\iffalse
%    \begin{macrocode}
%</jmlr.cls>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*jmlrbook.cls>
%    \end{macrocode}
%\fi
%\section{jmlrbook.cls Code}
% Class file for books composed of articles using the \clsfmt{jmlr} class.
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
%    \end{macrocode}
% Declare class:
%    \begin{macrocode}
\ProvidesClass{jmlrbook}[2022/02/09 v1.30 (NLCT) JMLR Book Style]
%    \end{macrocode}
% Need \sty{xkeyval} package to have key=value class options
%    \begin{macrocode}
\RequirePackage{xkeyval}
%    \end{macrocode}
% Requires double spacing for the title page
%    \begin{macrocode}
\RequirePackage{setspace}
%    \end{macrocode}
%
% Path used to determine if the preface is in the main
% document or in a separate file.
%\begin{macro}{\jmlrprefacefile}
%\changes{1.20}{2014/10/15}{new}
%    \begin{macrocode}
\newcommand*\jmlrprefacepath{}
%    \end{macrocode}
%\end{macro}
% The \sty{fink} package is now deprecated, so only use it if
% \sty{currfile} isn't installed.
%    \begin{macrocode}
\IfFileExists{currfile.sty}%
{
  \RequirePackage{currfile}
  \renewcommand*\jmlrprefacepath{\currfilepath}
}%
{%
%    \end{macrocode}
%\changes{1.11}{2011-03-24}{fink package now required}
%    \begin{macrocode}
  \RequirePackage{fink}
  \ifdef\finkpath
  {%
    \renewcommand*\jmlrprefacepath{\finkpath}%
  }
  {%
%    \end{macrocode}
% \sty{fink} version too old.
%    \begin{macrocode}
    \ClassWarning{jmlrbook}{`currfile' package required}
  }
}
%    \end{macrocode}
% Some packages need to be loaded before \sty{hyperref} so provide a
% hook to do this:
%\changes{1.12}{2012/01/05}{changed \cs{newcommand} to \cs{providecommand}}
%    \begin{macrocode}
\providecommand*{\jmlrprehyperref}{}
%    \end{macrocode}
%\begin{macro}{\ifgrayscale}
% Determine whether to select color or grayscale
%    \begin{macrocode}
\newif\ifgrayscale
\grayscalefalse
%    \end{macrocode}
%\end{macro}
%\begin{option}{draft}
%\changes{1.18}{2013-10-17}{new}
%    \begin{macrocode}
\DeclareOptionX{draft}{\setlength\overfullrule{5pt}}
%    \end{macrocode}
%\end{option}
%\begin{option}{final}
%\changes{1.18}{2013-10-17}{new}
%    \begin{macrocode}
\DeclareOptionX{final}{\setlength\overfullrule{0pt}}
%    \end{macrocode}
%\end{option}
%\begin{option}{color}
%    \begin{macrocode}
\DeclareOptionX{color}{\grayscalefalse}
%    \end{macrocode}
%\end{option}
%\begin{option}{gray}
%    \begin{macrocode}
\DeclareOptionX{gray}{\grayscaletrue}
%    \end{macrocode}
%\end{option}
% Pass \clsopt{letterpaper} and \clsopt{7x10} to \clsfmt{jmlr}.
%\begin{option}{letterpaper}
%    \begin{macrocode}
\DeclareOptionX{letterpaper}{\PassOptionsToClass{\CurrentOption}{jmlr}}
%    \end{macrocode}
%\end{option}
%\begin{option}{7x10}
%    \begin{macrocode}
\DeclareOptionX{7x10}{\PassOptionsToClass{\CurrentOption}{jmlr}}
%    \end{macrocode}
%\end{option}
% Pass \clsopt{html} and \clsopt{nohtml} to \clsfmt{jmlr}.
% (Used by \app{makejmlrbookgui})
%\begin{option}{html}
%    \begin{macrocode}
\DeclareOptionX{html}{\PassOptionsToClass{\CurrentOption}{jmlr}}
%    \end{macrocode}
%\end{option}
%\begin{option}{nohtml}
%    \begin{macrocode}
\DeclareOptionX{nohtml}{\PassOptionsToClass{\CurrentOption}{jmlr}}
%    \end{macrocode}
%\end{option}
%\begin{macro}{\jmlrprefaceheader}
%\changes{1.20}{2014/10/15}{new}
%    \begin{macrocode}
\newcommand*{\jmlrprefaceheader}{%
  \phantomsection
  \chapter*{\prefacename}%
  \addcontentsline{toc}{chapter}{\prefacename}%
  \markboth{\prefacename}{\prefacename}%
}
%    \end{macrocode}
%\end{macro}
% Pass \clsopt{wcp}, \clsopt{pmlr} and \clsopt{nowcp} options to \clsfmt{jmlr} and
% set preface header.
%\begin{option}{wcp}
%\changes{1.21}{2015-02-24}{No longer changes preface header}
%    \begin{macrocode}
\DeclareOptionX{wcp}{%
  \PassOptionsToClass{\CurrentOption}{jmlr}%
}
%    \end{macrocode}
%\end{option}
%\begin{option}{pmlr}
%\changes{1.23}{2017-03-09}{new}
%    \begin{macrocode}
\DeclareOptionX{pmlr}{%
  \PassOptionsToClass{\CurrentOption}{jmlr}%
}
%    \end{macrocode}
%\end{option}
%\begin{option}{nowcp}
%\changes{1.21}{2015-02-24}{No longer changes preface header}
%    \begin{macrocode}
\DeclareOptionX{nowcp}{%
  \PassOptionsToClass{\CurrentOption}{jmlr}%
}
%    \end{macrocode}
%\end{option}
% Pass \clsopt{tablecaptiontop} and \clsopt{tablecaptionbottom} options
% to \clsfmt{jmlr}.
%\begin{option}{tablecaptiontop}
%    \begin{macrocode}
\DeclareOptionX{tablecaptiontop}{\PassOptionsToClass{\CurrentOption}{jmlr}}
%    \end{macrocode}
%\end{option}
%\begin{option}{tablecaptionbottom}
%    \begin{macrocode}
\DeclareOptionX{tablecaptionbottom}{\PassOptionsToClass{\CurrentOption}{jmlr}}
%    \end{macrocode}
%\end{option}
%
% Pass font size commands to \clsfmt{jmlr}
%\changes{1.10}{2011-01-05}{Added 10pt, 11pt and 12pt options to
%jmlrbook}
%\begin{option}{10pt}
%    \begin{macrocode}
\DeclareOptionX{10pt}{\PassOptionsToClass{\CurrentOption}{jmlr}}
%    \end{macrocode}
%\end{option}
%\begin{option}{11pt}
%    \begin{macrocode}
\DeclareOptionX{11pt}{\PassOptionsToClass{\CurrentOption}{jmlr}}
%    \end{macrocode}
%\end{option}
%\begin{option}{12pt}
%    \begin{macrocode}
\DeclareOptionX{12pt}{\PassOptionsToClass{\CurrentOption}{jmlr}}
%    \end{macrocode}
%\end{option}
%
% Switch on two-side mode by default
%    \begin{macrocode}
\@twosidetrue
%    \end{macrocode}
%\begin{option}{oneside}
%\changes{1.22}{2015/04/11}{new}
%\changes{1.28}{2020-09-21}{pass option to jmlr.cls}
%    \begin{macrocode}
\DeclareOptionX{oneside}{\PassOptionsToClass{\CurrentOption}{jmlr}}
%    \end{macrocode}
%\end{option}
%\begin{option}{twoside}
%\changes{1.22}{2015/04/11}{new}
%\changes{1.28}{2020-09-21}{pass option to jmlr.cls}
%    \begin{macrocode}
\DeclareOptionX{twoside}{\PassOptionsToClass{\CurrentOption}{jmlr}}
%    \end{macrocode}
%\end{option}
%
%\begin{option}{pdfxa}
%\changes{1.13}{2012/02/25}{new}
%    \begin{macrocode}
\define@boolkey{jmlrbook.cls}[jmlr]{pdfxa}[true]{}
\jmlrpdfxafalse
%    \end{macrocode}
%\end{option}
% Process options
%    \begin{macrocode}
\ProcessOptionsX
%    \end{macrocode}
% If \ics{jmlrgrayscale} has been defined, let it override the
% class options. If it is defined, it should be set to 0 for the
% online version and any other number for the grayscale print 
% version.
%    \begin{macrocode}
\@ifundefined{jmlrgrayscale}{}%
{%
  \ifnum\jmlrgrayscale=0\relax
    \grayscalefalse
  \else
    \grayscaletrue
  \fi
}
%    \end{macrocode}
%
% This next bit is a modification of \sty{pdfx}. It's only used for
% the print version when the \clsopt{pdfxa} option is used.
%\changes{1.13}{2012/02/25}{added support for pdfx-1a}
%    \begin{macrocode}
\ifgrayscale
  \newcommand*{\jmlrwritepdfinfo}{%
     \protected@write\@auxout{}{\string\jmlrbook@info{\xmpAuthor}{\xmpTitle}}%
  }
  \ifjmlrpdfxa
   \def\convertDate{\getYear}
   {\catcode`\D=12
    \gdef\getYear D:#1#2#3#4{\edef\xYear{#1#2#3#4}\getMonth}
   }
   \def\getMonth#1#2{\edef\xMonth{#1#2}\getDay}
   \def\getDay#1#2{\edef\xDay{#1#2}\getHour}
   \def\getHour#1#2{\edef\xHour{#1#2}\getMin}
   \def\getMin#1#2{\edef\xMin{#1#2}\getSec}
   \def\getSec#1#2{\edef\xSec{#1#2}\getTZh}
   {%
     \catcode`\Z=12
     \gdef\tmpz{Z}
   }
  \def\hash{\expandafter\@gobble\string\#}%
  \def\amp{\expandafter\@gobble\string\&}%
  \def\xmpAmp{\amp\hash x0026;}%
  \def\sep{</rdf:li><rdf:li>}
  \def\TextCopyright{\amp\hash x00A9;}
  \def\Title#1{\gdef\xmpTitle{#1}}
  \def\Author#1{\gdef\xmpAuthor{#1}}
  \def\Keywords#1{\gdef\xmpKeywords{#1}}
   \let\xmpKeywords\@empty
   \let\xmpSubject\xmpKeywords
  \def\Creator#1{\gdef\xmpCreator{#1}}
   \def\xmpCreator{\@pdfcreator}
  \def\Producer#1{\gdef\xmpProducer{#1}}
   \def\xmpProducer{pdfTeX}
  \def\Volume#1{\gdef\xmpVolume{#1}}
   \let\xmpVolume\@empty
  \def\Issue#1{\gdef\xmpIssue{#1}}
   \let\xmpIssue\@empty
  \def\CoverDisplayDate#1{\gdef\xmpCoverDisplayDate{#1}}
   \let\xmpCoverDisplayDate\@empty
  \def\CoverDate#1{\gdef\xmpCoverDate{#1}}
   \let\xmpCoverDate\@empty
  \def\Copyright#1{\gdef\xmpCopyright{#1}}
   \let\xmpCopyright\@empty
  \def\Doi#1{\gdef\xmpDoi{#1}}
   \let\xmpDoi\@empty
  \def\Lastpage#1{\gdef\xmpLastpage{#1}}
   \let\xmpLastpage\@empty
  \def\Firstpage#1{\gdef\xmpFirstpage{#1}}
   \let\xmpFirstpage\@empty
  \def\Journaltitle#1{\gdef\xmpJournaltitle{#1}}
   \let\xmpJournaltitle\@empty
  \def\Journalnumber#1{\gdef\xmpJournalnumber{#1}}
   \let\xmpJournalnumber\@empty
  \def\Org#1{\gdef\xmpOrg{#1}}
   \let\xmpOrg\@empty
  \def\CreatorTool#1{\gdef\xmpCreatorTool{#1}}
   \def\xmpCreatorTool{\xmpProducer}
  \def\AuthoritativeDomain#1{\gdef\xmpAuthoritativeDomain{#1}}
   \let\xmpAuthoritativeDomain\@empty
  \def\findUUID#1{\edef\tmpstring{\pdfmdfivesum{#1}}
       \expandafter\eightofnine\tmpstring\end}
  \def\eightofnine#1#2#3#4#5#6#7#8#9\end{%
       \xdef\eightchars{#1#2#3#4#5#6#7#8}
       \fouroffive#9\end}
  \def\fouroffive#1#2#3#4#5\end{\xdef\ffourchars{#1#2#3#4}
       \sfouroffive#5\end}
  \def\sfouroffive#1#2#3#4#5\end{\xdef\sfourchars{#1#2#3#4}
       \tfouroffive#5\end}
  \def\tfouroffive#1#2#3#4#5\end{\xdef\tfourchars{#1#2#3#4}
       \xdef\laststring{#5}}
  \def\uuid{\eightchars-%
            \ffourchars-%
            \sfourchars-%
            \tfourchars-%
            \laststring}
%    \end{macrocode}
%
%\begin{macro}{\getTZh}
%\changes{1.14}{2012-04-24}{fixed for times zones other than Z}
% This is a modification of the command from \sty{pdfx} that also
% works for zero and negative hours.
%    \begin{macrocode}
  \def\getTZh#1{%
    \def\TZprefix{#1}%
    \ifx\TZprefix\tmpz
      \def\xTZsign{+}%
      \def\xTZh{00}%
      \def\xTZm{00}%
      \let\getTZnext\doConvDate
    \else
      \let\xTZsign\TZprefix
      \let\getTZnext\getTZhm
    \fi
    \getTZnext
  }
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\getTZm}
% This is a modified version of the command from \sty{pdfx}.
%    \begin{macrocode}
  \def\getTZhm#1#2'#3#4'{%
      \edef\xTZh{#1#2}%
      \edef\xTZm{#3#4}%
    \doConvDate
  }
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\doConvDate}
% Defines the date using information derived from parsing
% \ics{pdfcreationdate}
%    \begin{macrocode}
  \def\doConvDate{%
      \edef\convDate{\xYear-\xMonth-\xDay
        T\xHour:\xMin:\xSec\xTZsign\xTZh:\xTZm}%
  }
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@pre@hyperref}
% This macro contains a trimmed down version of \sty{pdfx}.
%    \begin{macrocode}
  \newcommand{\@pre@hyperref}{%
   \IfFileExists{FOGRA39L.icc}%
   {%
     \pdfminorversion=3
     \pdfpageattr{/MediaBox[0 0 595 793]
                  /BleedBox[0 0 595 793]
                  /TrimBox[25 20 570 773]}%
      \findUUID{\jobname.pdf}%
      \edef\xmpdocid{\uuid}%
      \findUUID{\pdfcreationdate}%
      \edef\xmpinstid{\uuid}%
      \InputIfFileExists{\jobname.xmpdata}{}{}%
      \RequirePackage{xmpincl}%
      \expandafter\convertDate\pdfcreationdate
      \def\@pctchar{\expandafter\@gobble\string\%}
      \def\@bchar{\expandafter\@gobble\string\\}
      \immediate\pdfobj stream attr{/N 4}  file{FOGRA39L.icc}
      \edef\OBJ@CVR{\the\pdflastobj}
      \pdfcatalog{/OutputIntents [ <<
       /Type/OutputIntent
       /S/GTS_PDFX
       /OutputCondition (FOGRA39)
       /OutputConditionIdentifier (FOGRA39 \@bchar(ISO Coated v2
        300\@pctchar\space \@bchar(ECI\@bchar)\@bchar))
       /DestOutputProfile \OBJ@CVR\space 0 R
       /RegistryName(http://www.color.org)
      >> ]}
      \input glyphtounicode.tex
      \input glyphtounicode-cmr.tex
      \pdfgentounicode=1
      \RequirePackage[draft,pdftex,pdfpagemode=UseNone,bookmarks=false]{hyperref}%
    }%
    {%
       \ClassError{jmlrbook}{Can't find `FOGRA39L.icc'}%
         {Download ISOcoated\string_v2\string_330\string_bas.icc from
         http://www.colormanagement.org/en/isoprofile.html
         Rename it FOGRA39L.icc and put it in the pdfx folder}%
    }%
  }
  \renewcommand*{\jmlrwritepdfinfo}{%
      \begingroup
        \let\&=\xmpAmp
        \IfFileExists{pdfx-1a.xmp}{%
           \pdfcompresslevel=0
         \immediate\pdfobj stream attr {/Type /Metadata /Subtype /XML}
         file{pdfx-1a.xmpi}
         \pdfcatalog{/Metadata \the\pdflastobj\space 0 R}
        }%
        {}%
      \endgroup
      \protected@write\@auxout{}{\string\jmlrbook@info{\xmpAuthor}{\xmpTitle}}%
      \pdfinfo{
          /Author(\xmpAuthor)%
          /Title(\xmpTitle)%
          /Creator(\xmpProducer)%
          /CreationDate(\convDate)%
          /ModDate(\convDate)%
          /Producer(\xmpProducer)%
          /Trapped /False
          /GTS_PDFXVersion (PDF/X-1:2001)%
          /GTS_PDFXConformance (PDF/X-1a:2001)%
      }%
  }
%    \end{macrocode}
%\end{macro}
%    \begin{macrocode}
  \fi
\else
  \newcommand*{\jmlrwritepdfinfo}{}
\fi
%    \end{macrocode}
%
%\begin{macro}{\jmlrbook@info}
%\changes{1.14}{2012-04-24}{new}
% Not needed (information provided for MakeJmlrBookGUI)
%    \begin{macrocode}
\newcommand*{\jmlrbook@info}[2]{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlrbook@location}
%\changes{1.20}{2014/10/15}{new}
% Not needed (information provided for MakeJmlrBookGUI)
%    \begin{macrocode}
\newcommand*{\jmlrbook@location}[1]{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@post@hyperref}
%\changes{1.16}{2012/05/15}{new}
%    \begin{macrocode}
\newcommand*{\@post@hyperref}{%
  \let\@org@c@lenddoca\c@lenddoca
  \let\c@lenddoca\undefined
}
%    \end{macrocode}
%\end{macro}
%
% Load \cls{combine} class. This requires a little bit of trickery.
%    \begin{macrocode}
\let\@org@LoadClass\LoadClass
\def\LoadClass#1{\let\LoadClass\@org@LoadClass\@org@LoadClass{jmlr}}
\@org@LoadClass{combine}
\let\c@lenddoca\@org@c@lenddoca
%    \end{macrocode}
% Requires \sty{combnat} to work with \sty{natbib}:
%    \begin{macrocode}
\RequirePackage{combnat}
%    \end{macrocode}
% Need to apply a patch to \sty{combnat} (this has now been fixed
% in \sty{combnat}, but user might be using an old version):
%    \begin{macrocode}
\renewcommand\c@laNAT@parse[1]{{%
     \let\protect=\@unexpandable@protect\let~\relax
     \let\active@prefix=\@gobble
     \xdef\NAT@temp{\csname b@#1\@extra@b@citeb\endcsname}}%
     \expandafter\NAT@split\NAT@temp?????@@%
     \expandafter\NAT@parse@date\NAT@date??????@@%
     \ifciteindex\NAT@index\fi}

\renewcommand\c@lbNAT@parse[1]{{%
     \let\protect=\@unexpandable@protect\let~\relax
     \let\active@prefix=\@gobble
     \xdef\NAT@temp{\csname B?\jobname?@#1\@extra@b@citeb\endcsname}}%
     \expandafter\NAT@split\NAT@temp?????@@%
     \expandafter\NAT@parse@date\NAT@date??????@@%
     \ifciteindex\NAT@index\fi}
%    \end{macrocode}
% Start new chapters on the right hand page:
%    \begin{macrocode}
\newif\if@openright
\@openrighttrue
\newif\if@mainmatter
%    \end{macrocode}
% Define commands that affect the formatting:
%\begin{macro}{\pagerule}
% Draw line across the text block.
%    \begin{macrocode}
\newcommand*{\pagerule}[1][0pt]{\par\noindent
  \rule[#1]{\linewidth}{2pt}\par}
%    \end{macrocode}
%\end{macro}
%
%\begin{environment}{preface}
% The preface environment starts a new chapter but also writes
% information to the main aux file for \app{makejmlrbook}. The
% optional argument is the file name for the extracted preface.
%\changes{1.11}{2011-03-24}{new}
%\changes{1.13}{2012/02/25}{changed the chapter to an unnumbered one}
%    \begin{macrocode}
\ifjmlrhtml
  \newenvironment{preface}[1][preface]%
  {%
    \noindent\HCode{<h2>\prefacename</h2>}%
  }%
  {%
  }
\else
  \newenvironment{preface}[1][preface]%
  {%
%    \end{macrocode}
%\changes{1.19}{2014/09/29}{changed to unstarred chapter}
%    \begin{macrocode}
    \jmlrprefaceheader
    \protected@write\@mainauxout
      {}{\string\@prefacestart{\thepage}{\arabic{page}}}%
    \protected@write\@mainauxout{}{\string\@prefacefile{\jmlrprefacepath}{#1}}%
  }%
  {%
    \protected@write\@mainauxout{}{\string\@prefaceend{\thepage}}%
  }
\fi
%    \end{macrocode}
%\end{environment}
%\begin{macro}{\prefacename}
%\changes{1.11}{2011-03-24}{new}
%    \begin{macrocode}
\newcommand*{\prefacename}{Preface}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@prefacefile}
%    \begin{macrocode}
\newcommand*{\@prefacefile}[2]{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@prefacestart}
%    \begin{macrocode}
\newcommand*{\@prefacestart}[2]{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@prefaceend}
%    \begin{macrocode}
\newcommand*{\@prefaceend}[1]{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@prefaceeditor}
%    \begin{macrocode}
\newcommand*{\@prefaceeditor}[1]{}
%    \end{macrocode}
%\end{macro}
%
% Cross-reference chapters:
%    \begin{macrocode}
\newcommand*{\chapterrefname}{Chapter}
\newcommand*{\chaptersrefname}{Chapters}
%    \end{macrocode}
%\begin{macro}{\chapterref}
%    \begin{macrocode}
\newcommand*{\chapterref}[1]{%
  \objectref{#1}{\chapterrefname}{\chaptersrefname}{}{}}
%    \end{macrocode}
%\end{macro}
%
% Cross-referencing imported articles:
%\begin{macro}{\articlepageref}
% Page number of start of article
%    \begin{macrocode}
\newcommand*{\articlepageref}[1]{%
  \pageref{#1jmlrstart}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\articlepagesref}
% Page range of article
%    \begin{macrocode}
\newcommand*{\articlepagesref}[1]{%
  \pageref{#1jmlrstart}--\pageref{#1jmlrend}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@articlepagesref}
% Page range of article for use within the article
%    \begin{macrocode}
\newcommand*{\@articlepagesref}{%
  \pageref{jmlrstart}--\pageref{jmlrend}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\articletitleref}
% Reference the short title of an imported article
%    \begin{macrocode}
\newcommand*{\articletitleref}[1]{\nameref{#1jmlrstart}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\articleauthorref}
% Reference the authors of an imported article
%    \begin{macrocode}
\newcommand*{\articleauthorref}[1]{%
  \@ifundefined{@jmlr@author@#1}%
  {%
    \ClassWarning{jmlrbook}{Label `#1' undefined}%
  }%
  {%
    \@nameuse{@jmlr@author@#1}%
  }%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\jmlrtitlehook}
%\changes{1.20}{2014/10/15}{changed \cs{let} to \cs{def}}
% Extra title information
%    \begin{macrocode}
\renewcommand*\jmlrtitlehook{%
  \hypersetup{pdftitle={\@shorttitle}}%
  \def\xmpTitle{\@shorttitle}%
  \let\jmlrtitlehook\relax
}
\providecommand*{\xmpTitle}{\@title}%
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\jmlrauthorhook}
%\changes{1.20}{2014/10/15}{changed \cs{let} to \cs{def}}
%    \begin{macrocode}
\renewcommand*\jmlrauthorhook{%
  \ifx\@sauthor\@empty
    \hypersetup{pdfauthor={\@author}}%
  \else
    \hypersetup{pdfauthor={\@sauthor}}%
  \fi
  \def\xmpAuthor{\@sauthor}%
  \let\jmlrauthorhook\relax
  \let\@shortauthor\@empty
}
\providecommand*\xmpAuthor{\@author}%
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\subtitle}
%    \begin{macrocode}
\newcommand*{\@subtitle}{}
\newcommand*{\subtitle}[1]{\renewcommand*{\@subtitle}{#1}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\volume}
%    \begin{macrocode}
\newcommand*{\@volume}{\@jmlrvolume}
\newcommand*{\volume}[1]{%
  \renewcommand*{\@volume}{#1}%
  \ifjmlrpdfxa
    \let\xmpVolume\@volume
  \fi
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlrissue}
%    \begin{macrocode}
\newcommand*{\@issue}{\@jmlrissue}
\newcommand*{\issue}[1]{%
  \renewcommand*{\@issue}{#1}%
  \ifjmlrpdfxa
    \let\xmpIssue\@issue
  \fi
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\thejmlrworkshop}
% Provided in the event that it's required for the title page.
%    \begin{macrocode}
\newcommand*{\thejmlrworkshop}{\@jmlrworkshop}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\team}
%    \begin{macrocode}
\newcommand*{\@team}{}
\newcommand*{\team}[1]{\renewcommand*{\@team}{#1}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlrlocation}
%\changes{1.20}{2014/10/15}{new}
%    \begin{macrocode}
\newcommand*{\@jmlrlocation}{}
\newcommand*{\jmlrlocation}[1]{%
 \renewcommand*{\@jmlrlocation}{#1}%
 \protected@write\@auxout{}{\string\jmlrbook@location{#1}}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@productioneditorname}
%    \begin{macrocode}
\newcommand*{\@productioneditorname}{Production Editor}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\productioneditor}
%    \begin{macrocode}
\newcommand*{\@productioneditor}{}
\newcommand*{\productioneditor}[1]{%
  \renewcommand*{\@productioneditor}{#1}%
  \renewcommand*{\@productioneditorname}{Production Editor}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\productioneditors}
%    \begin{macrocode}
\newcommand*{\productioneditors}[1]{%
  \renewcommand*{\@productioneditor}{#1}%
  \renewcommand*{\@productioneditorname}{Production Editors}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\logo}
% Title page image
%\changes{1.17}{2012/05/30}{added optional argument}
%    \begin{macrocode}
\newcommand*{\@logo}{}
\newcommand*{\logo}[2][]{%
\ifjmlrhtml
  \def\@logo@tmp{#1}%
  \ifx\@logo@tmp\@empty
    \renewcommand*{\@logo}{#2}%
  \else
    \renewcommand*{\@logo}{\HCode{<a href="#1">}#2\HCode{</a>}}%
  \fi
\else
  \renewcommand*{\@logo}{#2}%
\fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\booklinebreak}
%\changes{1.18}{2013-10-17}{new}
% Provided for book production editors to fine tune the book
% line breaking.
%    \begin{macrocode}
\renewcommand*{\booklinebreak}[1][4]{\linebreak[#1]}
%    \end{macrocode}
%\end{macro}
%
% Set article title
%    \begin{macrocode}
\def\c@lbmaketitle{\jmlrmaketitle}
%    \end{macrocode}
% The book's title:
%\begin{macro}{\maintitle}
%    \begin{macrocode}
\newcommand*{\maintitle}{}
%    \end{macrocode}
%\end{macro}
%
% Make it easier to modify the book's title page:
%\begin{macro}{\SetTitleElement}
%    \begin{macrocode}
\newcommand*{\SetTitleElement}[3]{%
  {%
    \expandafter\ifx\csname @#1\endcsname\@empty
    \else
      #2\csname @#1\endcsname#3%
    \fi
  }%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\IfTitleElement}
% Determine if the given element has been set:
%    \begin{macrocode}
\newcommand{\IfTitleElement}[3]{%
  \expandafter\ifx\csname @#1\endcsname\@empty
    #2%
  \else
    #3%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\titlebody}
%    \begin{macrocode}
\newcommand{\titlebody}{%
  \SetTitleElement{title}{\maintitlefont}{\postmaintitle}%
  \SetTitleElement{volume}{\mainvolumefont}{\postmainvolume}%
  \SetTitleElement{subtitle}{\mainsubtitlefont}{\postmainsubtitle}%
  \SetTitleElement{logo}{\mainlogofont}{\postmainlogo}%
  \SetTitleElement{team}{\mainteamfont}{\postmainteam}%
  \SetTitleElement{author}{\mainauthorfont}{\postmainauthor}%
  \SetTitleElement{productioneditor}{\mainproductioneditorfont}%
    {\postmainproductioneditor}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\c@lamaketitle}
%    \begin{macrocode}
\ifjmlrhtml
  \renewcommand{\c@lamaketitle}{%
    \HCode{<table cellpadding="2" cellspacing="2" border="0" width="100\%">}%
    \HCode{<tbody><tr><td valign="top">}%
    \HCode{<h1>}%
    \@title\newline
    \ifx\@jmlrvolume\@empty
      \ifx\@volume\@empty
      \else
        Volume \@volume
        \ifx\@subtitle\@empty\else: \fi
      \fi
    \else
        Volume \@jmlrvolume
        \ifx\@subtitle\@empty\else: \fi
    \fi
    \@subtitle
    \HCode{</h1>}%
    \newline
    \textbf{Editors: \@author}
    \HCode{</td><td valign="top">}%
    \@logo
    \HCode{</td></tr></tbody></table>}%
    \let\maintitle\@title
  }
\else
  \renewcommand{\c@lamaketitle}{%
    \pagenumbering{alph}%
    \pagestyle{empty}%
    \begin{titlepage}%
      \let\footnotesize\small
      \let\footnoterule\relax
      \let\footnote\thanks
      \titlebody
      \par
      \@thanks
    \end{titlepage}%
    \setcounter{footnote}{0}%
    \let\maintitle\@title
    \c@lmtitlempty
  }
\fi
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\maintitlefont}
%    \begin{macrocode}
\renewcommand{\maintitlefont}{%
  \null\vskip15pt\relax\par
  \flushleft\Huge\bfseries\noindent}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\postmaintitle}
%    \begin{macrocode}
\renewcommand{\postmaintitle}{%
  \par\relax
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\mainvolumefont}
%    \begin{macrocode}
\newcommand{\mainvolumefont}{%
  \flushleft\noindent\LARGE\bfseries Volume 
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\postmainvolume}
%    \begin{macrocode}
\newcommand{\postmainvolume}{%
  \IfTitleElement{subtitle}{}{:}\par\relax
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\mainissuefont}
%    \begin{macrocode}
\newcommand{\mainissuefont}{%
  \flushleft\noindent\LARGE\bfseries Issue
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\postmainissue}
%    \begin{macrocode}
\newcommand{\postmainissue}{%
  \par\relax
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\mainsubtitlefont}
%    \begin{macrocode}
\newcommand{\mainsubtitlefont}{%
  \flushleft\LARGE\bfseries\noindent}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\postmainsubtitle}
%    \begin{macrocode}
\newcommand{\postmainsubtitle}{\par}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\mainlogofont}
%    \begin{macrocode}
\newcommand{\mainlogofont}{%
  \vfill
  \begin{center}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\postmainlogo}
%    \begin{macrocode}
\newcommand{\postmainlogo}{\end{center}\vfill\par}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\mainteamfont}
%    \begin{macrocode}
\newcommand{\mainteamfont}{\flushleft\bfseries\Large\noindent}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\postmainteam}
%    \begin{macrocode}
\newcommand{\postmainteam}{\par}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\mainauthorfont}
%    \begin{macrocode}
\renewcommand{\mainauthorfont}{%
  \flushleft\Large\itshape\doublespacing\noindent}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\postmainauthor}
%    \begin{macrocode}
\renewcommand{\postmainauthor}{%
\par}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\mainproductioneditorfont}
%    \begin{macrocode}
\newcommand{\mainproductioneditorfont}{%
  \flushleft\Large\noindent \@productioneditorname: \itshape}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\postmainproductioneditor}
%    \begin{macrocode}
\newcommand{\postmainproductioneditor}{\par}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\maindatefont}
%    \begin{macrocode}
\renewcommand{\maindatefont}{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\postmaindate}
%    \begin{macrocode}
\renewcommand{\postmaindate}{}
%    \end{macrocode}
%\end{macro}
%
%\begin{environment}{signoff}
% Editorial team listed at the end of a preface etc. The mandatory
% argument is the date, the optional argument is the team title.
% Each editor should be separated with \ics{Editor}.
%\changes{1.19}{2014/09/29}{added \cs{nopagebreak}}
%    \begin{macrocode}
\ifjmlrhtml
  \newenvironment{signoff}[2][The Editorial Team]{%
    \def\Editor##1{##1\par\vskip\baselineskip\noindent\ignorespaces}%
    \def\@editorialteam{#1}%
    \def\@signoffdate{#2}%
    \par\vskip\baselineskip\noindent
    \ifx\@signoffdate\@empty
    \else
      \emph{\@signoffdate}\nopagebreak\par
      \nopagebreak\vskip\baselineskip\noindent
    \fi
    \ifx\@editorialteam\@empty
    \else
      \@editorialteam:\nopagebreak\par\nopagebreak\vskip\baselineskip
    \fi
    \nopagebreak\noindent\ignorespaces
  }%
  {%
  }%
\else
  \newenvironment{signoff}[2][The Editorial Team]{%
    \def\Editor##1{%
      \protected@write\@mainauxout{}{\string\@prefaceeditor{##1}}%
      \begin{tabular}{@{}l@{}}%
      ##1%
      \end{tabular}%
      \par\vskip\baselineskip\noindent\ignorespaces
    }%
    \def\@editorialteam{#1}%
    \def\@signoffdate{#2}%
    \par\vskip\baselineskip\noindent
    \ifx\@signoffdate\@empty
    \else
      \emph{\@signoffdate}\par
      \vskip\baselineskip\noindent
    \fi
    \ifx\@editorialteam\@empty
    \else
%    \end{macrocode}
%\changes{1.21}{2015-02-24}{added \cs{nopagebreak}}
%    \begin{macrocode}
      \@editorialteam:\nopagebreak\par\vskip\baselineskip
    \fi
    \nopagebreak\noindent\ignorespaces
  }%
  {%
  }
\fi
%    \end{macrocode}
%\end{environment}
%\begin{environment}{authorsignoff}
% An author can sign off at the end of a chapter (such as a
% foreword).
% Each author should be separated with \ics{Author}.
%    \begin{macrocode}
\newenvironment{authorsignoff}{%
  \def\Author##1{\begin{tabular}{@{}p{\linewidth}@{}}%
    ##1%
    \end{tabular}%
    \par\vskip\baselineskip\noindent\ignorespaces
  }%
  \par\vskip\baselineskip\noindent\ignorespaces
}{%
}
%    \end{macrocode}
%\end{environment}
%
%\begin{macro}{\zeroextracounters}
% Reset counters at the start of each imported article
%\changes{1.15}{2012/05/12}{added algocf and definition to reset}
%    \begin{macrocode}
\renewcommand{\zeroextracounters}{%
  \@ifundefined{c@theorem}{}{\setcounter{theorem}{0}}%
  \@ifundefined{c@algorithm}{}{\setcounter{algorithm}{0}}%
  \@ifundefined{c@algocf}{}{\setcounter{algocf}{0}}%
  \@ifundefined{c@example}{}{\setcounter{example}{0}}%
  \@ifundefined{c@definition}{}{\setcounter{definition}{0}}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\contentsname}
% Redcfine title of the table of contents
%    \begin{macrocode}
\renewcommand*{\contentsname}{Table of Contents}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\theHalgorithm}
%\changes{1.12}{2012/01/05}{in definition, changed \cs{thechapter}
%to \cs{theHchapter}}
%    \begin{macrocode}
\def\theHalgorithm{\theHchapter.\thealgorithm}
%    \end{macrocode}
%\end{macro}
\def\theHexample{\theHchapter.\theexample}
\def\theHtheorem{\theHchapter.\thetheorem}
%\begin{macro}{\theHsection}
%    \begin{macrocode}
\def\theHsection{\theHchapter.\thesection}
\def\theHsubsection{\theHchapter.\thesubsection}
\def\theHsubsubsection{\theHchapter.\thesubsubsection}
\def\theHparagraph{\theHchapter.\theparagraph}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\theHsubfigure}
%    \begin{macrocode}
\def\theHsubfigure{\theHfigure.\arabic{subfigure}}
\def\theHsubtable{\theHtable.\arabic{subtable}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\theHfootnote}
%\changes{1.12}{2012/01/05}{new}
%    \begin{macrocode}
\def\theHfootnote{\theHchapter.\alpha{footnote}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\theHtable}
%\changes{1.12}{2012/01/05}{new}
%    \begin{macrocode}
\def\theHtable{\theHchapter.\arabic{table}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\theHfigure}
%\changes{1.12}{2012/01/05}{new}
%    \begin{macrocode}
\def\theHfigure{\theHchapter.\arabic{figure}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\theHalgocf}
%\changes{1.15}{2012/05/12}{new}
%    \begin{macrocode}
\def\theHalgocf{\theHchapter.\thealgocf}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\mailto}
%    \begin{macrocode}
\renewcommand*{\mailto}[1]{%
  \href{mailto:#1}{\nolinkurl{#1}}%
}
%    \end{macrocode}
%\end{macro}
%    \begin{macrocode}
\c@lhaschapterfalse
\let\c@lthesec\thesection
%    \end{macrocode}
% Make sure the hyperlinks work
%\begin{macro}{\doimportchapterHref}
%    \begin{macrocode}
\newcommand\doimportchapterHref{%
  \edef\@currentHref{chapter.\thechapter}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\toclevel@appendix}
% Set the toc level for the main appendices
%    \begin{macrocode}
\def\toclevel@appendix{-1}
%    \end{macrocode}
%\end{macro}
%
% \sty{hyperref} and \cls{combine} don't play nicely
% need to fudge the cross-referencing a bit.
%\begin{macro}{\Xprefix}
%    \begin{macrocode}
\def\Xprefix{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\Xref}
%    \begin{macrocode}
\DeclareRobustCommand\Xref{\@ifstar\@Xrefstar\T@Xref}%
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\Xpageref}
%    \begin{macrocode}
\DeclareRobustCommand\Xpageref{%
  \@ifstar\@Xpagerefstar\T@Xpageref
}%
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\HyRef@StarSetXRef}
%    \begin{macrocode}
\def\HyRef@StarSetXRef#1{%
  \begingroup
    \Hy@safe@activestrue
    \edef\x{#1}%
    \@onelevel@sanitize\x
    \edef\x{\endgroup
      \noexpand\HyRef@@StarSetRef
        \expandafter\noexpand\csname r@\Xprefix\x\endcsname{\x}%
    }%
  \x
}
%    \end{macocode}
%\end{macro}
%
%\begin{macro}{\@Xrefstar}
%    \begin{macrocode}
\def\@Xrefstar#1{%
  \HyRef@StarSetXRef{#1}\@firstoffive
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@Xpagerefstar}
%    \begin{macrocode}
\def\@Xpagerefstar#1{%
  \HyRef@StarSetXRef{#1}\@secondoffive
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\T@Xref}
%    \begin{macrocode}
\def\T@Xref#1{%
  \Hy@safe@activestrue
  \expandafter\@setXref\csname r@\Xprefix#1\endcsname\@firstoffive{#1}%
  \Hy@safe@activesfalse
}%
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\T@Xpageref}
%    \begin{macrocode}
\def\T@Xpageref#1{%
  \Hy@safe@activestrue
  \expandafter\@setXref\csname r@\Xprefix#1\endcsname\@secondoffive{#1}%
  \Hy@safe@activesfalse
}%
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\Xlabel}
%    \begin{macrocode}
\def\Xlabel#1{%
  \@bsphack
    \begingroup
      \@onelevel@sanitize\@currentlabelname
      \edef\@currentlabelname{%
        \expandafter\strip@period\@currentlabelname\relax.\relax\@@@
      }%
      \protected@write\@mainauxout{}{%
        \string\newlabel{\Xprefix#1}{{\@currentlabel}{\thepage}%
          {\@currentlabelname}{\@currentHref}{}}%
      }%
    \endgroup
  \@esphack
}
\let\ltx@label\Xlabel
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@setXref}
%    \begin{macrocode}
\def\@setXref#1#2#3{% csname, extract group, refname
  \ifx#1\relax
    \protect\G@refundefinedtrue
    \nfss@text{\reset@font\bfseries ??}%
    \@latex@warning{%
      Reference `#3' on page \thepage \space undefined%
    }%
  \else
    \expandafter\Hy@setref@link#1\@empty\@empty\@nil{#2}%
  \fi
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@secondoffive}
% Something's redefining \cs{@secondoffive} incorrectly at the
% start of the document when hyperref's draft mode is on. Need
% to fix it.
%    \begin{macrocode}
\AtBeginDocument{%
  \renewcommand\@secondoffive[5]{#2}%
  \jmlrwritepdfinfo
  \let\jmlrwritepdfinfo\relax
}
%    \end{macrocode}
%\end{macro}
%
% Need to write imported chapter label to main auxfile.
%\begin{macro}{\@setimportlabel}
%    \begin{macrocode}
\def\@setimportlabel{%
  \let\@mainauxout\@auxout
  \let\HRlabel\label
}
%    \end{macrocode}
%\end{macro}
%    \begin{macrocode}
\AtBeginDocument{\@jmlrbegindoc}
%    \end{macrocode}
%\begin{macro}{\@jmlrbegindoc}
%    \begin{macrocode}
\newcommand*\@jmlrbegindoc{
  \@setimportlabel
  \gdef\@setimportlabel{\let\ref\Xref \let\pageref\Xpageref}%
  \let\ReadBookmarks\relax
%    \end{macrocode}
% Patch to work with \sty{auxhook} if loaded
%\changes{1.18}{2013-10-17}{patched to work with auxhook}
%    \begin{macrocode}
  \@ifundefined{@beginmainauxhook}{}{\@beginmainauxhook}%
}
%    \end{macrocode}
%\end{macro}
% Imported papers modify \ics{InputIfFileExists} so save original
% definition.
%    \begin{macrocode}
\let\@org@InputIfFileExists\InputIfFileExists
%    \end{macrocode}
%
%\begin{environment}{jmlrpapers}
%    \begin{macrocode}
\newenvironment{jmlrpapers}{%
%    \end{macrocode}
%\changes{1.09}{2010/12/01}{reset start and end document hook to avoid
%problems caused by packages defining duplicate commands etc}
%    \begin{macrocode}
\def\@begindocumenthook{%
  \@jmlrbegindoc
  \let\bibcite\c@lbNATbibcite
}
\def\@enddocumenthook{%
  \@jmlrenddoc
  \let\bibcite\c@lbNAT@testdef
}
  \begin{papers}[]
%    \end{macrocode}
%\changes{1.07}{2010-06-30}{Added check for two column style}
%    \begin{macrocode}
  \if@twocolumn
    \def\@jmlr@restore{\twocolumn}%
  \else
    \def\@jmlr@restore{\onecolumn}%
  \fi
  \jmlrarticlecommands
  \let\importpubpaper\@importpubpaper
  \let\importpaper\@importpaper
  \let\importarticle\@importarticle
  \let\label\Xlabel
  \let\ref\Xref
  \pagestyle{article}%
}{%
  \@jmlr@restore
  \end{papers}
}
%    \end{macrocode}
%\end{environment}
%
%\begin{macro}{\addtomaincontents}
%    \begin{macrocode}
\newcommand{\addtomaincontents}[2]{%
  \protected@write\@mainauxout{\let\label\@gobble\let\index\@gobble
    \let\glossary\@gobble}{\string\@writefile{#1}{#2}}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@write@author}
%    \begin{macrocode}
\newcommand*{\@write@author}[2]{%
  \def\@jmlr@authors@sep{ and }%
  \protected@write\@mainauxout{}{%
    \string\@new@articleauthor{#1}{#2}%
  }%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@new@articleauthor}
%    \begin{macrocode}
\newcommand*{\@new@articleauthor}[2]{%
  \expandafter\gdef\csname @jmlr@author@#1\endcsname{%
    \hyperref[#1jmlrstart]{#2}}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@@write@jmlr@import}
% The accompanying \app{makejmlrbook} Perl script scans the aux file
% for information. Any articles imported using \ics{importpubpaper},
% \ics{importpaper} or \ics{importarticle} need to write the
% relevant information to the aux file.
%    \begin{macrocode}
\newcommand*{\@@write@jmlr@import}[3]{%
  \protected@write\@mainauxout{}{\string\@jmlr@import{#1}{#2}{#3}}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@jmlr@import}
% \LaTeX\ should ignore \cs{@jmlr@import} as it's only needed for
% \app{makejmlrbook}:
%    \begin{macrocode}
\newcommand*{\@jmlr@import}[3]{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@@write@jmlr@apdimport}
%\changes{1.17}{2012/05/30}{new}
% As above but for files imported in the appendix.
%    \begin{macrocode}
\newcommand*{\@@write@jmlr@apdimport}[3]{%
  \protected@write\@mainauxout{}{\string\@jmlr@apdimport{#1}{#2}{#3}}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@jmlr@apdimport}
%\changes{1.17}{2012/05/30}{new}
% As above but for files imported in the appendix.
% \LaTeX\ should ignore \cs{@jmlr@apdimport} as it's only needed for
% \app{makejmlrbookgui}:
%    \begin{macrocode}
\newcommand*{\@jmlr@apdimport}[3]{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@write@jmlr@import}
% Initialise to \cs{@@write@jmlr@import} and switch to
% \cs{@@write@jmlr@apdimport} in the appendices.
%    \begin{macrocode}
\def\@write@jmlr@import{\@@write@jmlr@import}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\jmlrpremaketitlehook}
%\changes{1.09}{2010/12/01}{Moved redefinition outside of import
%macros}
% Redefine \cs{jmlrpremaketitlehook}
%    \begin{macrocode}
\def\jmlrpremaketitlehook{%
  \cleardoublepage
  \phantomsection
  \let\@currentlabelname\@shorttitle
%    \end{macrocode}
%\changes{1.09}{2010/12/01}{Moved \cs{refstepcounter} from
%\cs{jmlrmaketitlehook} to \cs{jmlrpremaketitlehook}}
%    \begin{macrocode}
  \refstepcounter{chapter}%
}%
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jmlrimporthook}
% Hook just before document is imported.
%\changes{1.09}{2010/12/01}{new}
%    \begin{macrocode}
\newcommand*{\jmlrimporthook}{}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\importpubpaper}
% Import a document that has already been published.
% Syntax: \cs{importpubpaper}\oarg{label}\marg{dir}\marg{file}\marg{pages}
% where \meta{dir} is the directory in which the paper is located,
% \meta{file} is the name of the file and \meta{pages} indicates
% the page range \emph{for the original version}. The optional
% argument is a label. This is used to prefix the labels and
% citations in the document so they don't clash with other imported
% articles. If omitted, \meta{dir}/\meta{file} is used instead.
%    \begin{macrocode}
\newcommand*{\@importpubpaper}[4][\@importdir\@importfile]{%
  \bgroup
    \def\@importdir{#2/}%
    \def\@importfile{#3}%
    \@write@jmlr@import{#1}{#2}{#3}%
    \def\@extra@b@citeb{#1}%
    \def\@extra@binfo{#1}%
    \jmlrpages{#4}%
    \graphicspath{{\@importdir}}%
    \def\jmlrmaketitlehook{%
%    \end{macrocode}
%\changes{1.09}{2010/12/01}{Added \cs{label} to \cs{jmlrmaketitlehook}}
%    \begin{macrocode}
      \label{}%
      \def\titlebreak{ }%
      \addtomaincontents{toc}%
%    \end{macrocode}
%\changes{1.12}{2012/01/05}{changed \cs{@shorttitle} to \cs{@title}}
%    \begin{macrocode}
        {%
          \protect\contentsline{papertitle}{\@title}{\thepage}%
	   {page.\thepage}}%
      \pdfbookmark{\@shorttitle}{chapter.\theHchapter}%
      \def\@jmlr@authors@sep{ \& }%
%    \end{macrocode}
%\changes{1.12}{2012/01/05}{changed \cs{@jmlrauthors} to \cs{@jmlr@authors}}
%    \begin{macrocode}
      \tocchapterpubauthor{\@jmlr@authors}%
      {%
        \@jmlrabbrvproceedings
        \ifx\@jmlrvolume\@empty
           \ifx\@jmlrpages\@empty\else\space\fi
        \else
           \space\@jmlrvolume
           \ifx\@jmlrissue\@empty
           \else
              (\@jmlrissue)%
           \fi
           \ifx\@jmlrpages\@empty\else:\fi
        \fi
        \ifx\@jmlrpages\@empty
        \else
           \@jmlrpages
           \ifx\@jmlryear\@empty\else,\fi
        \fi
        \space\@jmlryear
      }%
%    \end{macrocode}
%\changes{1.12}{2012/01/05}{changed \cs{@jmlrauthors} to \cs{@jmlr@authors}}
%    \begin{macrocode}
      \@write@author{#1}{\@jmlr@authors}%
    }%
    \def\InputIfFileExists##1##2##3{%
       \IfFileExists{##1}{%
          \@org@InputIfFileExists{##1}{##2}{##3}%
       }%
       {%
          \@org@InputIfFileExists{\@importdir##1}{##2}{##3}%
       }%
     }%
    \def\Xprefix{#1}%
    \jmlrimporthook
    \import{\@importdir\@importfile}%
    \def\Xprefix{}%
  \egroup
  \gdef\@shortauthor{}%
  \gdef\@shorttitle{}%
  \gdef\@firstauthor{}%
  \gdef\@jmlr@authors{\@jmlrauthors}%
  \gdef\@jmlrauthors{}%
  \gdef\@firstsurname{}%
}
\newcommand{\importpubpaper}[4][]{%
  \ClassError{jmlrbook}{\string\importpubpaper\space
not permitted outside `jmlrpapers' environment}{}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\importpaper}
% Like \cs{importpubpaper} but sets the pages to the page-range for
% this book.
%    \begin{macrocode}
\newcommand{\@importpaper}[3][\@importdir\@importfile]{%
  \bgroup
    \def\@importdir{#2/}%
    \def\@importfile{#3}%
    \@write@jmlr@import{#1}{#2}{#3}%
    \def\@extra@b@citeb{#1}%
    \def\@extra@binfo{#1}%
    \jmlrpages{\protect\@articlepagesref}%
    \graphicspath{{\@importdir}}%
    \def\jmlrmaketitlehook{%
%    \end{macrocode}
%\changes{1.09}{2010/12/01}{Added \cs{label} to \cs{jmlrmaketitlehook}}
%    \begin{macrocode}
      \label{}%
      \def\titlebreak{ }%
      \addtomaincontents{toc}%
%    \end{macrocode}
%\changes{1.12}{2012/01/05}{changed \cs{@shorttitle} to \cs{@title}}
%    \begin{macrocode}
        {%
          \protect\contentsline{papertitle}{\@title}{\thepage}%
	   {page.\thepage}}%
      \pdfbookmark{\@shorttitle}{chapter.\theHchapter}%
      \def\@jmlr@authors@sep{ \& }%
%    \end{macrocode}
%\changes{1.12}{2012/01/05}{changed \cs{@jmlrauthors} to \cs{@jmlr@authors}}
%    \begin{macrocode}
      \tocchapterpubauthor{\@jmlr@authors}%
      {%
        \@jmlrabbrvproceedings
        \ifx\@jmlrvolume\@empty
           \space
        \else
           \space\@jmlrvolume
           \ifx\@jmlrissue\@empty
           \else
              (\@jmlrissue)%
           \fi
           :%
        \fi
        \protect\articlepagesref{#1}%
        \ifx\@jmlryear\@empty\else,\fi
        \space\@jmlryear
      }%
%    \end{macrocode}
%\changes{1.12}{2012/01/05}{changed \cs{@jmlrauthors} to \cs{@jmlr@authors}}
%    \begin{macrocode}
      \@write@author{#1}{\@jmlr@authors}%
    }%
    \def\InputIfFileExists##1##2##3{%
       \IfFileExists{##1}{%
          \@org@InputIfFileExists{##1}{##2}{##3}%
       }%
       {%
          \@org@InputIfFileExists{\@importdir##1}{##2}{##3}%
       }%
     }%
    \def\Xprefix{#1}%
%    \end{macrocode}
% Disable \ics{jmlrvolume}, \ics{jmlryear}, \ics{jmlrworkshop} etc
% (since the imported papers belong to the same volume as the
% book---use \ics{importpubpaper} for papers pre-published in
%\changes{1.17}{2012/05/30}{disable \cs{jmlrvolume}, \cs{jmlryear}
%and \cs{jmlrworkshop} in imported papers}
% another volume).
%    \begin{macrocode}
    \let\jmlrvolume\@gobble
    \let\jmlryear\@gobble
    \let\jmlrworkshop\@gobble
    \let\jmlrissue\@gobble
    \let\jmlrpages\@gobble
    \jmlrimporthook
    \import{\@importdir\@importfile}%
    \def\Xprefix{}%
  \egroup
  \gdef\@shortauthor{}%
  \gdef\@shorttitle{}%
  \gdef\@firstauthor{}%
  \gdef\@jmlr@authors{\@jmlrauthors}%
  \gdef\@jmlrauthors{}%
  \gdef\@firstsurname{}%
}

\newcommand{\importpaper}[3][]{%
  \ClassError{jmlrbook}{\string\importpaper\space
not permitted outside `jmlrpapers' environment}{}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\importarticle}
% Import a document that hasn't been published.
% Syntax: \cs{importarticle}\oarg{label}\marg{dir}\marg{file}
% where \meta{dir} is the directory in which the paper is located and
% \meta{file} is the name of the file. The optional
% argument is a label. This is used to prefix the labels and
% citations in the document so they don't clash with other imported
% articles. If omitted, \meta{file} is used instead.
%    \begin{macrocode}
\newcommand{\@importarticle}[3][\@importdir\@importfile]{%
  \bgroup
    \def\@importdir{#2/}%
    \def\@importfile{#3}%
    \@write@jmlr@import{#1}{#2}{#3}%
    \def\@extra@b@citeb{#1}%
    \def\@extra@binfo{#1}%
    \def\jmlrmaketitlehook{%
    \def\titlebreak{ }%
      \addtomaincontents{toc}%
%    \end{macrocode}
%\changes{1.12}{2012/01/05}{changed \cs{@shorttitle} to \cs{@title}}
%    \begin{macrocode}
        {%
          \protect\contentsline{papertitle}{\@title}{\thepage}%
	   {page.\thepage}}%
%    \end{macrocode}
%\changes{1.09}{2010/12/01}{Added \cs{label} to \cs{jmlrmaketitlehook}}
%    \begin{macrocode}
      \label{}%
      \pdfbookmark{\@shorttitle}{chapter.\theHchapter}%
      \def\@jmlr@authors@sep{ \& }%
%    \end{macrocode}
%\changes{1.12}{2012/01/05}{changed \cs{@jmlrauthors} to \cs{@jmlr@authors}}
%    \begin{macrocode}
      \tocchapterauthor{\@jmlr@authors}%
      \@write@author{#1}{\@jmlr@authors}%
      \jmlrpages{}%
      \jmlrvolume{}%
      \jmlryear{}%
      \jmlrsubmitted{}%
      \jmlrpublished{}%
      \jmlrproceedings{}{}%
    }%
    \graphicspath{{\@importdir}}%
    \def\InputIfFileExists##1##2##3{%
       \IfFileExists{##1}{%
          \@org@InputIfFileExists{##1}{##2}{##3}%
       }%
       {%
          \@org@InputIfFileExists{\@importdir##1}{##2}{##3}%
       }%
     }%
    \def\Xprefix{#1}%
    \jmlrimporthook
%    \end{macrocode}
%\changes{1.17}{2012/15/28}{set title page style for imported
%articles to articlet style}
%    \begin{macrocode}
    \let\ps@jmlrtps\ps@articlet
    \import{\@importdir\@importfile}%
    \def\Xprefix{}%
  \egroup
  \gdef\@shortauthor{}%
  \gdef\@shorttitle{}%
  \gdef\@firstauthor{}%
  \gdef\@jmlr@authors{\@jmlrauthors}%
  \gdef\@jmlrauthors{}%
  \gdef\@firstsurname{}%
}
\newcommand{\importarticle}[3][]{%
  \ClassError{jmlrbook}{\string\importarticle\space
not permitted outside `jmlrpapers' environment}{}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\addtocpart}
% Add a part to the TOC without printing anything in the text 
% (but does a \cs{cleardoublepage}).
%    \begin{macrocode}
\newcommand{\addtocpart}[1]{%
  \cleardoublepage
  \refstepcounter{tocpart}%
  \addtocontents{toc}{\protect\tocpart{#1}}%
  \pdfbookmark[-1]{#1}{part.\thetocpart}%
}
\newcounter{tocpart}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tocpart}
% Define the appearance of a part in the TOC.
%    \begin{macrocode}
\newcommand{\tocpart}[1]{%
    \addpenalty{-\@highpenalty}%
    \vskip 1.0ex \@plus\p@
    \setlength\@tempdima{2.25em}%
    \begingroup
      \parindent \z@ \rightskip \@pnumwidth
      \parfillskip -\@pnumwidth
      \leavevmode \large\bfseries
      \advance\leftskip\@tempdima
      \hskip -\leftskip
      #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss \null}\par
      \penalty\@highpenalty
    \endgroup
}
%    \end{macrocode}
%\end{macro}
%
% Set up the layout of the chapter headings
%    \begin{macrocode}
\setlength{\prechapterskip}{3em}
\setlength{\postchapterskip}{20pt}
%    \end{macrocode}
%
%\begin{macro}{\chapternumberformat}
%    \begin{macrocode}
\renewcommand{\chapternumberformat}[1]{%
 \Large\bfseries \@chapapp\space#1\par
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\chaptertitleformat}
%    \begin{macrocode}
\renewcommand{\chaptertitleformat}[1]{%
 \Large\bfseries #1}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\chapterformat}
%    \begin{macrocode}
\renewcommand*{\chapterformat}{%
   \raggedright
}
%    \end{macrocode}
%\end{macro}
% Set up the format of a part in the book (not a part in an
% article).
%\begin{macro}{\preparthook}
%    \begin{macrocode}
\renewcommand{\preparthook}{\cleardoublepage\null\vfil}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\partnumberformat}
%    \begin{macrocode}
\renewcommand{\partnumberformat}[1]{%
  \Huge\bfseries \@partapp\nobreakspace#1\par\nobreak
  \vskip 20\p@
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\postparthook}
%    \begin{macrocode}
\def\postparthook{%
  \thispagestyle{empty}%
  \vfil\newpage
  \null
  \thispagestyle{empty}%
  \newpage
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@curparthead}
% The heading of the current part
%    \begin{macrocode}
\newcommand{\@curparthead}{}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\parttitleformat}
%    \begin{macrocode}
\renewcommand{\parttitleformat}[1]{#1%
  \gdef\@curparthead{\@partapp\space \thepart. #1}%
  \@mkboth{\@curparthead}{\@curparthead}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\firstpageno}
% Change \cs{firstpageno} to do nothing as the page number will
% be determined by the book.
%    \begin{macrocode}
\renewcommand{\firstpageno}[1]{}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tocchapterauthor}
% Add the author of the current chapter to the table of contents.
%    \begin{macrocode}
\newcommand{\tocchapterauthor}[1]{%
  \addtomaincontents{toc}{\protect\contentsline{chapterauthor}{%
  #1}{}{}}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tocchapterpubauthor}
% Add the author of an imported prepublished paper to the
% table of contents. The first argument is the author (or list
% of authors). The second argument is the reference to the
% published article.
%    \begin{macrocode}
\newcommand{\tocchapterpubauthor}[2]{%
  \addtomaincontents{toc}{\protect\contentsline{chapterauthor}{%
  #1; #2.}{}{}}%
}
%    \end{macrocode}
%\end{macro}
%
% Set up the formatting in the TOC
%    \begin{macrocode}
\renewcommand*\@pnumwidth{2em}
%    \end{macrocode}
%
%\begin{macro}{\l@part}
% Format for book parts
%    \begin{macrocode}
\renewcommand*\l@part[2]{%
  \ifnum \c@tocdepth >\m@ne
    \addpenalty{-\@highpenalty}%
    \vskip 1.0em \@plus\p@
    %\setlength\@tempdima{5em}%
    \settowidth\@tempdima{\large\bfseries \@partapp\space MM}%
    \vbox{%
      \pagerule
      \begingroup
        \parindent \z@ \rightskip \@pnumwidth
        \parfillskip -\@pnumwidth
        \leavevmode \large\bfseries
        \advance\leftskip\@tempdima
        \hskip -\leftskip
        \renewcommand*\numberline[1]{\hb@xt@ \@tempdima
          {\@partapp\space ##1\hfil }}%
        #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss 
           \normalfont\normalsize #2}\par
        \penalty\@highpenalty
      \endgroup
      \pagerule
    }%
  \fi}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\l@chapter}
%    \begin{macrocode}
\renewcommand{\l@chapter}[2]{%
  \ifnum\c@tocdepth>\m@ne
    \addpenalty{-\@highpenalty}%
    \vskip 1.0em \@plus \p@
    \setlength\@tempdima{2em}%
    \begingroup
      \parindent \z@
      \rightskip \@pnumwidth
      \parfillskip -\@pnumwidth
      \leavevmode \large \bfseries
      \advance \leftskip \@tempdima
      \hskip -\leftskip
        \renewcommand*\numberline[1]{\hb@xt@ \@tempdima
          {##1\hfil }}%
      #1\nobreak \hfil \nobreak \hb@xt@ \@pnumwidth {\hss
       \normalfont\normalsize #2}\par
      \penalty \@highpenalty
    \endgroup
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\l@papertitle}
%    \begin{macrocode}
\newcommand*{\l@papertitle}[2]{%
  \ifnum \c@tocdepth >\m@ne
    \addpenalty{-\@highpenalty}%
    \vskip 1.0em \@plus\p@
    \setlength\@tempdima{3em}%
    \begingroup
      \leavevmode \raggedright\itshape
      #1\nobreak\hfill \nobreak\hb@xt@\@pnumwidth{\hss 
       \normalfont#2}%
       \par
      \penalty\@highpenalty
    \endgroup
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\l@chapterauthor}
%    \begin{macrocode}
\newcommand*\l@chapterauthor[2]{%
  \ifnum \c@tocdepth >\m@ne
%    \end{macrocode}
%\changes{1.11}{2011-03-24}{removed penalty}
%    \begin{macrocode}
    \begingroup
      \parindent \z@ 
      \rightskip \@pnumwidth
      \parfillskip -\@pnumwidth
      \leavevmode \raggedright
      \parbox{\linewidth-\@pnumwidth}{\raggedright#1\par}%
       \par
    \endgroup
  \fi}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\l@section}
%    \begin{macrocode}
\renewcommand*\l@section[2]{%
  \ifnum \c@tocdepth >\m@ne
    \addpenalty{-\@highpenalty}%
    \vskip 1.0em \@plus\p@
    \setlength\@tempdima{3em}%
    \begingroup
      \parindent \z@ \rightskip \@pnumwidth
      \parfillskip -\@pnumwidth
      \leavevmode \normalsize\mdseries
      \advance\leftskip\@tempdima
      \hskip -\leftskip
      #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
      \penalty\@highpenalty
    \endgroup
  \fi}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\l@subsection}
%    \begin{macrocode}
\renewcommand*\l@subsection[2]{%
  \ifnum \c@tocdepth >\m@ne
    \addpenalty{-\@highpenalty}%
    \vskip 1.0em \@plus\p@
    \setlength\@tempdima{3.5em}%
    \begingroup
      \parindent \z@ \rightskip \@pnumwidth
      \parfillskip -\@pnumwidth
      \leavevmode \normalsize\mdseries
      \advance\leftskip\@tempdima
      \hskip -\leftskip
      #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
      \penalty\@highpenalty
    \endgroup
  \fi}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\chaptermark}
%    \begin{macrocode}
\renewcommand*{\chaptermark}[1]{%
  \@mkboth{\@curparthead}{\protect\thechapter. #1}%
}
%    \end{macrocode}
%\end{macro}
%
% Set up page styles
%\begin{macro}{\firstpagehead}
%    \begin{macrocode}
\newcommand{\firstpagehead}{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\firstpagefoot}
%\changes{1.09}{2010/12/01}{added \cs{@reprint}}
%    \begin{macrocode}
\newcommand{\firstpagefoot}{%
  \@reprint\hfill\thepage
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\headfont}
% Set the header font
%    \begin{macrocode}
\newcommand*{\headfont}{\reset@font\small\scshape}%
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\footfont}
% Set the footer font
%    \begin{macrocode}
\newcommand*{\footfont}{\reset@font\small\itshape}%
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\ps@chplain}
% Page style for first page of a chapter
%    \begin{macrocode}
\newcommand*{\ps@chplain}{%
  \let\@mkboth\@gobbletwo
  \renewcommand*{\@oddhead}{\headfont\firstpagehead}%
  \renewcommand*{\@evenhead}{}%
  \renewcommand*{\@oddfoot}{\footfont\firstpagefoot}%
  \renewcommand*{\@evenfoot}{\footfont\thepage\hfill
  }%
}
\let\ps@plain\ps@chplain
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\ps@article}
% Page style for the imported articles.
%    \begin{macrocode}
\newcommand*{\ps@article}{%
  \let\@mkboth\@gobbletwo
  \renewcommand*{\@oddhead}{\headfont\hfill\@shorttitle}%
  \renewcommand*{\@evenhead}{\headfont\@shortauthor\hfill}%
  \renewcommand*{\@oddfoot}{\footfont\hfill\thepage}
  \renewcommand*{\@evenfoot}{\footfont\thepage\hfill}
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\ps@articlet}
% Title page style for imported articles (imported using
% \cs{importarticle})
%    \begin{macrocode}
\newcommand*{\ps@articlet}{%
  \let\@mkboth\@gobbletwo
  \renewcommand*{\@oddhead}{}%
  \renewcommand*{\@evenhead}{}%
  \renewcommand*{\@oddfoot}{\footfont\hfill\thepage}
  \renewcommand*{\@evenfoot}{\footfont\thepage\hfill}
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\ps@jmlrbook}
% Page style for book
%\changes{1.15}{2012/05/12}{removed dependence on \cs{ps@headings}
%(made consistent with article page style)}
%    \begin{macrocode}
\newcommand*{\ps@jmlrbook}{%
  \renewcommand*{\@oddfoot}{\footfont\hfill\thepage}
  \renewcommand*{\@evenfoot}{\footfont\thepage\hfill}
  \def\@evenhead{\headfont\leftmark\hfill}%
  \def\@oddhead{\hfill\headfont\rightmark}%
  \let\@mkboth\markboth
  \renewcommand*{\sectionmark}[1]{}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\markleft}
%\changes{1.15}{2012/05/12}{new}
% Provide a command to set just the left header mark.
%    \begin{macrocode}
\newcommand*{\markleft}[1]{%
  \begingroup
    \let\label\relax
    \let\index\relax
    \let\glossary\relax
    \expandafter\@markleft\@themark{#1}%
    \@temptokena 
    \expandafter{\@themark}%
    \mark{\the\@temptokena}
  \endgroup
  \if@nobreak 
    \ifvmode 
      \nobreak
    \fi
  \fi 
}
\newcommand*{\@markleft}[3]{%
  \@temptokena{#2}%
  \unrestored@protected@xdef\@themark{{#3}{\the\@temptokena}}
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\morefrontmatter}
%    \begin{macrocode}
\renewcommand*{\morefrontmatter}{\pagestyle{jmlrbook}%
  \def\chaptermark##1{%
    \@mkboth{##1\hfill}{\hfill##1}}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\moremainmatter}
%    \begin{macrocode}
\renewcommand*{\moremainmatter}{\pagestyle{jmlrbook}%
  \def\chaptermark##1{%
    \@mkboth{\@curparthead}{\protect\thechapter. ##1}%
  }%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\bibsection}
% Set the bibliography headings in the articles
%    \begin{macrocode}
\renewcommand*\bibsection{\section*{\refname}}
%    \end{macrocode}
%\end{macro}
%\changes{1.10}{2011-01-05}{Removed redundant redefinition of
%\cs{@bookpart}}
%
% Set up the book commands:
%    \begin{macrocode}
\jmlrbookcommands
%    \end{macrocode}
%
% In the event that authors have used different versions of
% \sty{algorithm2e}, define old command names.
%\changes{1.11}{2011-03-24}{added old algorithm2e commands}
%    \begin{macrocode}
\providecommand*{\SetNoLine}{\SetAlgoNoLine}
\providecommand*{\SetVline}{\SetAlgoVlined}
\providecommand*{\Setvlineskip}{\SetVlineSkip}
\providecommand*{\SetLine}{\SetAlgoLined}
\providecommand*{\dontprintsemicolon}{\DontPrintSemicolon}
\providecommand*{\printsemicolon}{\PrintSemicolon}
\providecommand*{\incmargin}{\IncMargin}
\providecommand*{\decmargin}[1]{\DecMargin{-#1}}
\providecommand*{\setnlskip}{\SetNlSkip}
\providecommand*{\Setnlskip}{\SetNlSkip}
\providecommand*{\setalcapskip}{\SetAlCapSkip}
\providecommand*{\setalcaphskip}{\SetAlCapHSkip}
\providecommand*{\nlSty}{\NlSty}
\providecommand*{\Setnlsty}{\SetNlSty}
\providecommand*{\linesnumbered}{\LinesNumbered}
\providecommand*{\linesnotnumbered}{\LinesNotNumbered}
\providecommand*{\linesnumberedhidden}{\LinesNumberedHidden}
\providecommand*{\showln}{\ShowLn}
\providecommand*{\showlnlabel}{\ShowLnLabel}
\providecommand*{\nocaptionofalgo}{\NoCaptionOfAlgo}
\providecommand*{\restorecaptionofalgo}{\RestoreCaptionOfAlgo}
\providecommand*{\restylealgo}{\RestyleAlgo}
\providecommand*{\Titleofalgo}{\TitleOfAlgo}
%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</jmlrbook.cls>
%    \end{macrocode}
%\fi
%\Finale
\endinput
