[latex3-commits] [git/LaTeX3-latex3-latex3] l3doc: Separate sources for l3doc (class and package) (aeac364c7)

PhelypeOleinik phe.h.o1 at gmail.com
Wed Sep 18 04:02:55 CEST 2019


Repository : https://github.com/latex3/latex3
On branch  : l3doc
Link       : https://github.com/latex3/latex3/commit/aeac364c7ce864444e63eb6c434a9a537cc8f852

>---------------------------------------------------------------

commit aeac364c7ce864444e63eb6c434a9a537cc8f852
Author: PhelypeOleinik <phe.h.o1 at gmail.com>
Date:   Tue Sep 17 23:02:55 2019 -0300

    Separate sources for l3doc (class and package)


>---------------------------------------------------------------

aeac364c7ce864444e63eb6c434a9a537cc8f852
 l3kernel/l3.ins                       |   4 +-
 l3kernel/l3doc-cls.dtx                | 830 ++++++++++++++++++++++++++++++++++
 l3kernel/{l3doc.dtx => l3doc-pkg.dtx} | 336 +-------------
 3 files changed, 856 insertions(+), 314 deletions(-)

diff --git a/l3kernel/l3.ins b/l3kernel/l3.ins
index ef9fcde47..99c97b751 100644
--- a/l3kernel/l3.ins
+++ b/l3kernel/l3.ins
@@ -113,8 +113,8 @@ and all files in that bundle must be distributed together.
 \generate{\file{expl3.sty}        {\from{expl3.dtx}       {package,loader}}}
 \generate{\file{expl3-generic.tex}{\from{expl3.dtx}       {generic,loader}}}
 
-\generate{\file{l3doc.cls}        {\from{l3doc.dtx}       {class}}}
-\generate{\file{l3doc.sty}        {\from{l3doc.dtx}       {package}}}
+\generate{\file{l3doc.cls}        {\from{l3doc-cls.dtx}       {class}}}
+\generate{\file{l3doc.sty}        {\from{l3doc-pkg.dtx}       {package}}}
 % not distributed:
 %\generate{\file{l3doc.ist}        {\from{l3doc.dtx}       {docist}}}
 
diff --git a/l3kernel/l3doc-cls.dtx b/l3kernel/l3doc-cls.dtx
new file mode 100644
index 000000000..6e45554ee
--- /dev/null
+++ b/l3kernel/l3doc-cls.dtx
@@ -0,0 +1,830 @@
+% \iffalse meta-comment
+%
+%% File: l3doc.dtx
+%
+% Copyright (C) 1990-2019 The LaTeX3 Project
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version.  The latest version
+% of this license is in the file
+%
+%    https://www.latex-project.org/lppl.txt
+%
+% This file is part of the "l3kernel bundle" (The Work in LPPL)
+% and all files in that bundle must be distributed together.
+%
+% -----------------------------------------------------------------------
+%
+% The development version of the bundle can be found at
+%
+%    https://github.com/latex3/latex3
+%
+% for those people who are interested.
+%
+%<*driver>
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+  \expandafter\begingroup
+\fi
+\input l3docstrip.tex
+\askforoverwritefalse
+\preamble
+
+Copyright (C) 1990-2017,2019 The LaTeX3 Project
+
+It may be distributed and/or modified under the conditions of
+the LaTeX Project Public License (LPPL), either version 1.3c of
+this license or (at your option) any later version.  The latest
+version of this license is in the file:
+
+   https://www.latex-project.org/lppl.txt
+
+This file is part of the "l3kernel bundle" (The Work in LPPL)
+and all files in that bundle must be distributed together.
+
+\endpreamble
+% stop docstrip adding \endinput
+\postamble
+\endpostamble
+\generate{\file{l3doc.cls}{\from{l3doc.dtx}{class,cfg}}}
+%\generate{\file{l3doc.ist}{\from{l3doc.dtx}{docist}}}
+\ifx\fmtname\nameofplainTeX
+  \expandafter\endbatchfile
+\else
+  \expandafter\endgroup
+\fi
+%</driver>
+%
+%<*driver|class>
+\RequirePackage{expl3,xparse,calc}
+%</driver|class>
+%
+%<*driver>
+\ProvidesFile{l3doc.dtx}[2017/03/18 L3 Experimental documentation class]
+\documentclass{l3doc}
+\usepackage{framed,lipsum}
+\begin{document}
+  \DocInput{l3doc.dtx}
+\end{document}
+%</driver>
+%
+% This isn't included in the typeset documentation because it's a bit
+% ugly:
+%<*class>
+\ProvidesExplClass{l3doc}{2019-08-27}{}
+  {L3 Experimental documentation class}
+%</class>
+% \fi
+%
+% \title{The \cls{l3doc} class}
+% \author{\Team}
+% \date{Released 2019-08-25}
+% \maketitle
+% \tableofcontents
+%
+% \begin{documentation}
+%
+% \section{Introduction}
+%
+% This is an ad-hoc class for documenting the \pkg{expl3} bundle, a
+% collection of modules or packages that make up \LaTeX3's programming
+% environment.  Eventually it will replace the \cls{ltxdoc} class for
+% \LaTeX3, but not before the good ideas in \pkg{hypdoc}, \cls{xdoc2},
+% \pkg{docmfp}, and \cls{gmdoc} are incorporated.
+%
+% \textbf{It is much less stable than the main \pkg{expl3} packages.
+%   Use at own risk!}
+%
+% It is written as a \enquote{self-contained} docstrip file: executing
+% |latex l3doc.dtx| generates the \file{l3doc.cls} file and typesets
+% this documentation; execute |tex l3doc.dtx| to only generate
+% \file{l3doc.cls}.
+%
+% \section{Features of other packages}
+%
+% This class builds on the \pkg{ltxdoc} class and the \pkg{doc} package,
+% but in the time since they were originally written some improvements
+% and replacements have appeared that we would like to use as
+% inspiration.
+%
+% These packages or classes are \pkg{hypdoc}, \pkg{docmfp}, \pkg{gmdoc},
+% and \pkg{xdoc}.  I have summarised them below in order to work out
+% what sort of features we should aim at a minimum for \pkg{l3doc}.
+%
+% \subsection{The \pkg{hypdoc} package}
+%
+% This package provides hyperlink support for the \pkg{doc} package.  I
+% have included it in this list to remind me that cross-referencing
+% between documentation and implementation of methods is not very
+% good. (\emph{E.g.}, it would be nice to be able to automatically
+% hyperlink the documentation for a function from its implementation and
+% vice-versa.)
+%
+% \subsection{The \pkg{docmfp} package}
+%
+% \begin{itemize}
+%   \item Provides \cs{DescribeRoutine} and the \env{routine}
+%     environment (\emph{etc.}) for MetaFont and MetaPost code.
+%   \item Provides \cs{DescribeVariable} and the \env{variable}
+%     environment (\emph{etc.})  for more general code.
+%   \item Provides \cs{Describe} and the \env{Code} environment
+%     (\emph{etc.})  as a generalisation of the above two
+%     instantiations.
+%   \item Small tweaks to the DocStrip system to aid non-\LaTeX{} use.
+% \end{itemize}
+%
+% \subsection{The \pkg{xdoc2} package}
+%
+% \begin{itemize}
+%   \item Two-sided printing.
+%   \item \cs{NewMacroEnvironment}, \cs{NewDescribeEnvironment}; similar
+%     idea to \pkg{docmfp} but more comprehensive.
+%   \item Tons of small improvements.
+% \end{itemize}
+%
+% \subsection{The \pkg{gmdoc} package}
+%
+% Radical re-implementation of \pkg{doc} as a package or class.
+% \begin{itemize}
+%   \item Requires no |\begin{macrocode}| blocks!
+%   \item Automatically inserts |\begin{macro}| blocks!
+%   \item And a whole bunch of other little things.
+% \end{itemize}
+%
+% \section{Problems \& Todo}
+%
+% Problems at the moment:
+% (1)~not flexible in the types of things that can be documented;
+% (2)~no obvious link between the |\begin{function}| environment for
+%     documenting things to the |\begin{macro}| function that's used
+%     analogously in the implementation.
+%
+% The \env{macro} should probably be renamed to \env{function} when it
+% is used within an implementation section.  But they should have the
+% same syntax before that happens!
+%
+% Furthermore, we need another \enquote{layer} of documentation commands
+% to account for \enquote{user-macro} as opposed to
+% \enquote{code-functions}; the \pkg{expl3} functions should be
+% documented differently, probably, to the \pkg{xparse} user macros (at
+% least in terms of indexing).
+%
+% In no particular order, a list of things to do:
+% \begin{itemize}
+%   \item Rename \env{function}/\env{macro} environments to better
+%     describe their use.
+%   \item Generalise \env{function}/\env{macro} for documenting
+%     \enquote{other things}, such as environment names, package
+%     options, even keyval options.
+%   \item New function like \tn{part} but for files (remove awkward
+%     \enquote{File} as \tn{partname}).
+%   \item Something better to replace \cs{StopEventually}; I'm thinking
+%     two environments \env{documentation} and \env{implementation} that
+%     can conditionally typeset/ignore their material.  (This has been
+%     implemented but needs further consideration.)
+%   \item Hyperlink documentation and implementation of macros (see the
+%     \textsc{dtx} file of \pkg{svn-multi} v2 as an example).  This is
+%     partially done, now, but should be improved.
+% \end{itemize}
+%
+% \section{Documentation}
+%
+% \subsection{Configuration}
+%
+% Before class options are processed, \pkg{l3doc} loads a configuration
+% file \file{l3doc.cfg} if it exists, allowing you to customise the
+% behaviour of the class without having to change the documentation
+% source files.
+%
+% For example, to produce documentation on letter-sized paper instead of
+% the default A4 size, create \file{l3doc.cfg} and include the line
+% \begin{verbatim}
+% \PassOptionsToClass{letterpaper}{l3doc}
+% \end{verbatim}
+%
+% By default, \pkg{l3doc} selects the |T1| font encoding and loads the
+% Latin Modern fonts.  To prevent this, use the class option
+% |cm-default|.
+%
+% \subsection{Partitioning documentation and implementation}
+%
+% \pkg{doc} uses the \cs{OnlyDocumentation}/\cs{AlsoImplementation}
+% macros to guide the use of \cs{StopEventually}|{}|, which is intended
+% to be placed to partition the documentation and implementation within
+% a single \file{.dtx} file.
+%
+% This isn't very flexible, since it assumes that we \emph{always} want
+% to print the documentation.  For the \pkg{expl3} sources, I wanted to
+% be be able to input \file{.dtx} files in two modes: only displaying
+% the documentation, and only displaying the implementation.  For
+% example:
+% \begin{verbatim}
+% \DisableImplementation
+% \DocInput{l3basics,l3prg,...}
+% \EnableImplementation
+% \DisableDocumentation
+% \DocInputAgain
+% \end{verbatim}
+%
+% The idea being that the entire \pkg{expl3} bundle can be documented,
+% with the implementation included at the back.  Now, this isn't
+% perfect, but it's a start.
+%
+% Use |\begin{documentation}...\end{documentation}| around the
+% documentation, and |\begin{implementation}...\end{implementation}|
+% around the implementation.  The
+% \cs{EnableDocumentation}/\cs{EnableImplementation} causes them to
+% be typeset when the \file{.dtx} file is \cs{DocInput}; use
+% \cs{DisableDocumentation}/\cs{DisableImplementation} to omit the
+% contents of those environments.
+%
+% Note that \cs{DocInput} now takes comma-separated arguments, and
+% \cs{DocInputAgain} can be used to re-input all \file{.dtx} files
+% previously input in this way.
+%
+% \subsection{General text markup}
+%
+% Many of the commands in this section come from \pkg{ltxdoc} with some
+% improvements.
+%
+% \begin{function}{\cmd, \cs}
+%   \begin{syntax}
+%     \cmd{\cmd} \oarg{options} \meta{control sequence}\\
+%     \cs{cs} \oarg{options} \marg{csname}
+%   \end{syntax}
+%   These commands are provided to typeset control sequences.
+%   |\cmd\foo| produces \enquote{\cmd\foo} and |\cs{foo}| produces the
+%   same.  In general, \cs{cs} is more robust since
+%   it doesn't rely on catcodes being \enquote{correct} and is therefore
+%   recommended.
+%
+%   These commands are aware of the |@@| \pkg{l3docstrip} syntax and
+%   replace such instances correctly in the typeset documentation.
+%   This only happens after a |%<@@=|\meta{module}|>| declaration.
+%
+%   Additionally, commands can be used in the argument of \cs{cs}.  For
+%   instance, |\cs{\meta{name}:\meta{signature}}| produces
+%   \cs[no-index]{\meta{name}:\meta{signature}}.
+%
+%   The \meta{options} are a key--value list which can contain the
+%   following keys:
+%   \begin{itemize}
+%     \item |index=|\meta{name}: the \meta{csname} is indexed as if
+%       one had written \cs{cs}\Arg{name}.
+%     \item |no-index|: the \meta{csname} is not indexed.
+%     \item |module=|\meta{module}: the \meta{csname} is indexed in
+%       the list of commands from the \meta{module}; the \meta{module}
+%       can in particular be |TeX| for \enquote{\TeX{} and \LaTeXe{}}
+%       commands, or empty for commands which should be placed in the
+%       main index.  By default, the \meta{module} is deduced
+%       automatically from the command name.
+%     \item |replace| is a boolean key (\texttt{true} by default) which
+%       indicates whether to replace |@@| as \pkg{l3docstrip} does.
+%   \end{itemize}
+%   These commands allow hyphenation of control sequences after (most) underscores.
+%   By default, a hyphen is used to mark the hyphenation, but this can be changed with
+%   the \texttt{cs-break-nohyphen} class option.
+%   To disable hyphenation of control sequencies entirely, use \texttt{cs-break-off}.
+% \end{function}
+%
+%
+% \begin{function}{\tn}
+%   \begin{syntax}
+%     \cs{tn} \oarg{options} \marg{csname}
+%   \end{syntax}
+%   Analoguous to \cs{cs} but intended for \enquote{traditional} \TeX{}
+%   or \LaTeXe{} commands; they are indexed accordingly.  This is in
+%   fact equivalent to \cs{cs} |[module=TeX, replace=false,|
+%   \meta{options}|]| \Arg{csname}.
+% \end{function}
+%
+% \begin{function}{\meta}
+%   \begin{syntax}
+%     \cs{meta} \Arg{name}
+%   \end{syntax}
+%   \cs{meta} typesets the \meta{name} italicised in \meta{angle
+%     brackets}.  Within a \env{function} environment or similar, angle
+%   brackets |<...>| are set up to be a shorthand for |\meta{...}|.
+%
+%   This function has additional functionality over its \pkg{ltxdoc}
+%   versions; underscores can be used to subscript material as in math
+%   mode.  For example, |\meta{arg_{xy}}| produces
+%   \enquote{\meta{arg_{xy}}}.
+% \end{function}
+%
+% \begin{function}{\Arg, \marg, \oarg, \parg}
+%   \begin{syntax}
+%     |\Arg| \Arg{name}
+%   \end{syntax}
+%   Typesets the \meta{name} as for \cs{meta} and wraps it in braces.
+%
+%   The \cs{marg}/\cs{oarg}/\cs{parg} versions follow from \pkg{ltxdoc}
+%   in being used for \enquote{mandatory} or \enquote{optional} or
+%   \enquote{picture} brackets as per \LaTeXe{} syntax.
+% \end{function}
+%
+% \begin{function}{\file, \env, \pkg, \cls}
+%   \begin{syntax}
+%     \cs{pkg} \Arg{name}
+%   \end{syntax}
+%   These all take one argument and are intended to be used as semantic
+%   commands for representing files, environments, package names, and
+%   class names, respectively.
+% \end{function}
+%
+% \begin{function}{\NB, \NOTE}
+%   \begin{syntax}
+%     \cs{NB} \marg{tag} \marg{comments}
+%     \verb|\begin{NOTE}| \marg{tag}
+%     \qquad\meta{comments}
+%     \verb|\end{NOTE}|
+%   \end{syntax}
+%   Make notes in the source that are not typeset by default. When the \verb|show-notes|
+%   class option is active, the comments are typeset in a detokenized and verbatim mode, respectively.
+% \end{function}
+%
+% \subsection{Describing functions in the documentation}
+%
+% \DescribeEnv{function}
+% \DescribeEnv{syntax}
+% Two heavily-used environments are defined to describe the syntax of
+% \pkg{expl3} functions and variables.
+% \begin{framed}
+%   \vspace{-\baselineskip}
+% \begin{verbatim}
+% \begin{function}{\function_one:, \function_two:}
+%   \begin{syntax}
+%     |\foo_bar:| \Arg{meta} \meta{test_1}
+%   \end{syntax}
+% \meta{description}
+% \end{function}
+% \end{verbatim}
+%   \hrulefill
+%   \par
+%   \hspace*{0.25\textwidth}
+%   \begin{minipage}{0.5\textwidth}
+%     \begin{function}{\function_one:, \function_two:}
+%       \begin{syntax}
+%         |\foo_bar:| \Arg{meta} \meta{test_1}
+%       \end{syntax}
+%       \meta{description}
+%     \end{function}
+%   \end{minipage}
+% \end{framed}
+%
+% Function environments take an optional argument to indicate whether
+% the function(s) it describes are expandable or restricted-expandable
+% or defined in conditional forms. Use |EXP|, |rEXP|, |TF|, |pTF|, or |noTF| for
+% this; note that |pTF| implies |EXP| since predicates must always be
+% expandable, and that |noTF| means that the function without |TF|
+% should be documented in addition to |TF|.  As an example:
+% \begin{framed}
+%   \vspace{-\baselineskip}
+% \begin{verbatim}
+% \begin{function}[pTF]{\cs_if_exist:N}
+%   \begin{syntax}
+%     \cs{cs_if_exist_p:N} \meta{cs}
+%   \end{syntax}
+% \meta{description}
+% \end{function}
+% \end{verbatim}
+%   \hrulefill
+%   \par
+%   \hspace*{0.25\textwidth}
+%   \begin{minipage}{0.5\textwidth}
+%     \begin{function}[pTF]{\cs_if_exist:N}
+%       \begin{syntax}
+%         \cs{cs_if_exist_p:N} \meta{cs}
+%       \end{syntax}
+%       \meta{description}
+%     \end{function}
+%   \end{minipage}
+% \end{framed}
+%
+% \DescribeEnv{variable}
+% If you are documenting a variable instead of a function, use the
+% \env{variable} environment instead; it behaves identically to the
+% \env{function} environment above.
+%
+% \DescribeEnv{texnote}
+% This environment is used to call out sections within \env{function}
+% and similar that are only of interest to seasoned \TeX{} developers.
+%
+% \subsection{Describing functions in the implementation}
+%
+% \DescribeEnv{macro}
+% The well-used environment from \LaTeXe{} for marking up the
+% implementation of macros/functions remains the \env{macro}
+% environment.  Some changes in \pkg{l3doc}: it now accepts
+% comma-separated lists of functions, to avoid a very large number of
+% consecutive |\end{macro}| statements.
+% Spaces and new lines are ignored (the option |[verb]| prevents this).
+% \begin{verbatim}
+% % \begin{macro}{\foo:N, \foo:c}
+% %   \begin{macrocode}
+% ... code for \foo:N and \foo:c ...
+% %   \end{macrocode}
+% % \end{macro}
+% \end{verbatim}
+% If you are documenting an auxiliary macro, it's generally not
+% necessary to highlight it as much and you also don't need to check it
+% for, say, having a test function and having a documentation chunk
+% earlier in a \env{function} environment.  \pkg{l3doc} will pick up these
+% cases from the presence of |__| in the name, or you may force marking
+% as internal by using |\begin{macro}[int]| to mark it as such. The margin
+% call-out is then printed in grey for such cases.
+%
+% For documenting \pkg{expl3}-type conditionals, you may also pass this
+% environment a |TF| option (and omit it from the function name) to
+% denote that the function is provided with |T|, |F|, and |TF| suffixes.
+% A similar |pTF| option prints both |TF| and |_p| predicate forms.
+% An option |noTF| prints both the |TF| forms and a form with neither
+% |T| nor |F|, to document functions such as \cs[no-index]{prop_get:NN}
+% which also have conditional forms (\cs[no-index]{prop_get:NNTF}).
+%
+%
+% \DescribeMacro{\TestFiles}
+% \cs{TestFiles}\marg{list of files} is used to indicate which test
+% files are used for the current code; they are printed in the
+% documentation.
+%
+% \DescribeMacro{\UnitTested}
+% Within a \env{macro} environment, it is a good idea to mark whether a
+% unit test has been created for the commands it defines.  This is
+% indicated by writing \cs{UnitTested} anywhere within |\begin{macro}|
+%   \dots |\end{macro}|.
+%
+% If the class option |checktest| is enabled, then it is an \emph{error}
+% to have a \env{macro} environment without a call to
+% \file{Testfiles}.  This is intended for large packages such as
+% \pkg{expl3} that should have absolutely comprehensive tests suites and
+% whose authors may not always be as sharp at adding new tests with new
+% code as they should be.
+%
+% \DescribeMacro{\TestMissing}
+% If a function is missing a test, this may be flagged by writing (as
+% many times as needed) \cs{TestMissing} \marg{explanation of test
+%   required}.  These missing tests are summarised in the listing
+% printed at the end of the compilation run.
+%
+% \DescribeEnv{variable}
+% When documenting variable definitions, use the \env{variable}
+% environment instead.  Here it behaves identically to the
+% \env{macro} environment, except that if the class option |checktest|
+% is enabled, variables are not required to have a test file.
+%
+% \DescribeEnv{arguments}
+% Within a \env{macro} environment, you may use the \env{arguments}
+% environment to describe the arguments taken by the function(s).  It
+% behaves like a modified enumerate environment.
+% \begin{verbatim}
+% % \begin{macro}{\foo:nn, \foo:VV}
+% % \begin{arguments}
+% %   \item Name of froozle to be frazzled
+% %   \item Name of muble to be jubled
+% % \end{arguments}
+% %   \begin{macrocode}
+% ... code for \foo:nn and \foo:VV ...
+% %   \end{macrocode}
+% % \end{macro}
+% \end{verbatim}
+%
+%
+% \subsection{Keeping things consistent}
+%
+% Whenever a function is either documented or defined with
+% \env{function} and \env{macro} respectively, its name is stored in a
+% sequence for later processing.
+%
+% At the end of the document (\emph{i.e.}, after the \file{.dtx} file
+% has finished processing), the list of names is analysed to check
+% whether all defined functions have been documented and vice versa. The
+% results are printed in the console output.
+%
+% If you need to do more serious work with these lists of names, take a
+% look at the implementation for the data structures and methods used to
+% store and access them directly.
+%
+% \subsection{Documenting templates}
+%
+% The following macros are provided for documenting templates; might end
+% up being something completely different but who knows.
+% \begin{quote}\parskip=0pt\obeylines
+%   |\begin{TemplateInterfaceDescription}| \Arg{template type name}
+%   |  \TemplateArgument{none}{---}|
+%   \textsc{or one or more of these:}
+%   |  \TemplateArgument| \Arg{arg no} \Arg{meaning}
+%   \textsc{and}
+%   |\TemplateSemantics|
+%   |  | \meta{text describing the template type semantics}
+%   |\end{TemplateInterfaceDescription}|
+% \end{quote}
+%
+% \begin{quote}\parskip=0pt\obeylines
+%   |\begin{TemplateDescription}| \Arg{template type name} \Arg{name}
+%   \textsc{one or more of these:}
+%   |  \TemplateKey| \marg{key name} \marg{type of key}
+%   |    |\marg{textual description of meaning}
+%   |    |\marg{default value if any}
+%   \textsc{and}
+%   |\TemplateSemantics|
+%   |  | \meta{text describing special additional semantics of the template}
+%   |\end{TemplateDescription}|
+% \end{quote}
+%
+% \begin{quote}\parskip=0pt\obeylines
+%   |\begin{InstanceDescription}| \oarg{text to specify key column width (optional)}
+%   \hfill\marg{template type name}\marg{instance name}\marg{template name}
+%   \textsc{one or more of these:}
+%   |  \InstanceKey| \marg{key name} \marg{value}
+%   \textsc{and}
+%   |\InstanceSemantics|
+%   |  | \meta{text describing the result of this instance}
+%   |\end{InstanceDescription}|
+% \end{quote}
+%
+% \end{documentation}
+%
+% \begin{implementation}
+%
+% \section{\pkg{l3doc} implementation}
+%
+%    \begin{macrocode}
+%<@@=codedoc>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<*class>
+%    \end{macrocode}
+%
+% \subsection{Variables}
+%
+% \begin{variable}{\g_@@_lmodern_bool}
+%   Boolean option whether to use \pkg{lmodern} instead of the default
+%   Computer Modern font.
+%    \begin{macrocode}
+\bool_new:N \g_@@_lmodern_bool
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l_@@_tmpa_dim}
+%   A temporary variables dimension variable.
+%    \begin{macrocode}
+\dim_new:N \l_@@_tmpa_dim
+%    \end{macrocode}
+% \end{variable}
+%
+% \subsection{Class options and configuration}
+%
+% Make the \opt{a5paper} option raise an error.
+%    \begin{macrocode}
+\DeclareOption { a5paper } { \@latexerr { Option~not~supported } { } }
+%    \end{macrocode}
+%
+% Option to use the \pkg{lmodern} font instead of the default Computer
+% Modern.
+%    \begin{macrocode}
+\DeclareOption { cm-default }
+  { \bool_gset_false:N \g_@@_lmodern_bool }
+\DeclareOption { lm-default }
+  { \bool_gset_true:N \g_@@_lmodern_bool }
+%    \end{macrocode}
+%
+% Maintain support for old class options which now belong to the
+% \pkg{l3doc} package.
+%    \begin{macrocode}
+\DeclareOption { full }
+  { \PassOptionsToPackage { full } { l3doc } }
+\DeclareOption { onlydoc }
+  { \PassOptionsToPackage { onlydoc } { l3doc } }
+\DeclareOption { check }
+  { \PassOptionsToPackage { check } { l3doc } }
+\DeclareOption { nocheck }
+  { \PassOptionsToPackage { nocheck } { l3doc } }
+\DeclareOption { checktest }
+  { \PassOptionsToPackage { checktest } { l3doc } }
+\DeclareOption { nochecktest }
+  { \PassOptionsToPackage { nochecktest } { l3doc } }
+%    \end{macrocode}
+%
+% All remaining options are passed to the base \cls{article} class.
+%    \begin{macrocode}
+\DeclareOption* { \PassOptionsToClass { \CurrentOption } { article } }
+\ExecuteOptions { lm-default }
+\PassOptionsToClass { a4paper } { article }
+%    \end{macrocode}
+%
+% Input a local configuration file, if it exists, with a message to the
+% console that this has happened. Since we distribute a \file{.cfg} file
+% with the class, this should usually always be true. Therefore, check
+% for \cs{ExplMakeTitle} (defined in \enquote{our} \file{.cfg} file) and
+% only output the informational message if it's not found.
+%    \begin{macrocode}
+\msg_new:nnn { l3doc } { input-cfg }
+  { Local~config~file~l3doc.cfg~loaded. }
+\file_if_exist:nT { l3doc.cfg }
+  {
+    \file_input:nT { l3doc.cfg }
+      {
+        \cs_if_exist:NF \ExplMakeTitle
+          { \msg_info:nn { l3doc } { input-cfg } }
+      }
+  }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\ProcessOptions
+%    \end{macrocode}
+%
+% Depending on the option, load the package \pkg{lmodern} to set the
+% font.  Then replace the italic typewriter font with the oblique shape
+% instead; the former makes my skin crawl. (Will, Aug 2011)
+% ^^A      Thanks Will, you ruined that font for me (you're right :-).
+%    \begin{macrocode}
+\bool_if:NT \g_@@_lmodern_bool
+  {
+    \RequirePackage[T1]{fontenc}
+    \RequirePackage{lmodern}
+    \group_begin:
+      \ttfamily
+      \DeclareFontShape{T1}{lmtt}{m}{it}{<->ec-lmtto10}{}
+    \group_end:
+  }
+%    \end{macrocode}
+%
+% \subsection{Class and package loading}
+%
+%    \begin{macrocode}
+\LoadClass{article}
+\RequirePackage{doc}
+\RequirePackage
+  {
+    array,% Okay
+    alphalph,% Used in \DocInclude to redefine \thepart
+    amsmath,% Okay
+    amssymb,% Okay
+    booktabs,% Used \...rule, used in syntax, function, and variable environments
+    color, % Okay
+    colortbl, % \arrayrulecolor, used in syntax environment
+    hologo, % Used for logos :-)
+    enumitem, % Used for the arguments environment
+    pifont, % hollow star for rEXP
+    textcomp, % Okay
+    trace, % Okay?
+    csquotes, % Okay
+    fancyvrb, % Used for typesetting verbatim
+    underscore, % Breakable underscores (expl3 has some :-)
+    verbatim, % Okay
+  }
+\raggedbottom
+%    \end{macrocode}
+%
+% Must be last, as usual.
+%    \begin{macrocode}
+\RequirePackage{hypdoc}
+%    \end{macrocode}
+%
+% \subsection{Configuration and tweaks}
+%
+% Increase the text width slightly so that with the width the standard
+% fonts, 72~columns of code may appear in a \env{macrocode} environment.
+% Increase the marginpar width slightly, for long command names.  And
+% increase the left margin by a similar amount.
+%    \begin{macrocode}
+\dim_set:Nn \textwidth      { 385 pt }
+\dim_add:Nn \marginparwidth {  30 pt }
+\dim_add:Nn \oddsidemargin  {  20 pt }
+\dim_add:Nn \evensidemargin {  20 pt }
+%    \end{macrocode}
+% (These were introduced when \cls{article} was the documentclass, but
+% I've left them here for now to remind me to do something about them
+% later.)
+%
+% \begin{macro}{\list}
+% \begin{macro}{\@@_oldlist:nn}
+%   Customise lists.
+%    \begin{macrocode}
+\cs_new_eq:NN \@@_oldlist:nn \list
+\cs_gset:Npn \list #1 #2
+  { \@@_oldlist:nn {#1} { #2 \dim_zero:N \listparindent } }
+\dim_set:Nn \parindent  { 2 em }
+\dim_set:Nn \itemindent { 0 pt }
+\dim_set:Nn \parskip    { 0 pt plus 3 pt minus 0 pt }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\partname}
+%   Use \enquote{File} as a name in Part titles.
+%    \begin{macrocode}
+\tl_gset:Nn \partname {File}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l at section, \l at subsection}
+%   Customise the table of contents (as we have so many sections).
+%   Different design and/or structure is called for).
+%    \begin{macrocode}
+\@addtoreset { section } { part }
+\cs_gset:Npn \l at section #1#2
+  {
+    \int_compare:nNnT { \c at tocdepth } > { \c_zero_int }
+      {
+        \addpenalty \@secpenalty
+        \addvspace { 1.0 em \@plus \p@ }
+        \dim_set:Nn \l_@@_tmpa_dim { 2.5 em }  % was 1.5em
+        \group_begin:
+          \dim_set_eq:NN \parindent \c_zero_dim
+          \dim_set_eq:NN \rightskip \@pnumwidth
+          \dim_set:Nn \parfillskip { -\@pnumwidth }
+          \mode_leave_vertical:
+          \bfseries
+          \dim_add:Nn \leftskip { \l_@@_tmpa_dim }
+          \skip_horizontal:n { -\leftskip }
+          #1 \nobreak \tex_hfil:D \nobreak
+          \hbox_to_wd:nn { \@pnumwidth } { \tex_hss:D #2 }
+          \par
+        \group_end:
+      }
+  }
+\cs_gset:Npn \l at subsection
+  { \@dottedtocline { 2 } { 2.5 em } { 2.3 em } }  % #2 = 1.5em
+%    \end{macrocode}
+% \end{macro}
+%
+% Now load the \pkg{l3doc} package to do the heavy-lifting.
+%    \begin{macrocode}
+\RequirePackage [ full , kernel , nocheck , nochecktest ] { l3doc }
+%    \end{macrocode}
+%
+%
+% \subsection{Internal macros for \LaTeX3 sources}
+%
+% These definitions are only used by the \LaTeX3 documentation; they are
+% not necessary for third-party users of \cls{l3doc}.  In time this will
+% be broken into a separate package that is specifically loaded in the
+% various \pkg{expl3} modules, \emph{etc.}
+%
+%    \begin{macrocode}
+%<*cfg>
+%    \end{macrocode}
+%
+% The Guilty Parties.
+%    \begin{macrocode}
+\tl_const:Nn \Team
+  {
+    The~\LaTeX3~Project\thanks
+      { \url{https://www.latex-project.org/latex3/} }
+  }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\NewDocumentCommand { \ExplMakeTitle } { m m }
+  {
+    \title
+      { The~\pkg{#1}~package \\ #2 }
+    \author
+      {
+        The~\LaTeX3~Project
+        \thanks
+          {
+            E-mail:~
+            \href{mailto:latex-team at latex-project.org}
+                        {latex-team at latex-project.org}
+          }
+      }
+    \date { Released~\ExplFileDate }
+    \maketitle
+  }
+%    \end{macrocode}
+%
+% \subsection{Math extras}
+%
+% For \pkg{l3fp}.
+%    \begin{macrocode}
+\AtBeginDocument
+  {
+    \clist_map_inline:nn
+      {
+        asin, acos, atan, acot,
+        asinh, acosh, atanh, acoth,
+        round, floor, ceil
+      }
+      { \exp_args:Nc \DeclareMathOperator {#1} {#1} }
+  }
+%    \end{macrocode}
+%
+% \begin{macro}{\nan}
+%    \begin{macrocode}
+\NewDocumentCommand { \nan } { } { \text { \texttt { nan } } }
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+%</cfg>
+%    \end{macrocode}
+%
+% \end{implementation}
+%
+% \PrintIndex
diff --git a/l3kernel/l3doc.dtx b/l3kernel/l3doc-pkg.dtx
similarity index 94%
rename from l3kernel/l3doc.dtx
rename to l3kernel/l3doc-pkg.dtx
index 042804004..d867655ae 100644
--- a/l3kernel/l3doc.dtx
+++ b/l3kernel/l3doc-pkg.dtx
@@ -22,71 +22,42 @@
 %
 % for those people who are interested.
 %
-%<*driver>
-\def\nameofplainTeX{plain}
-\ifx\fmtname\nameofplainTeX\else
-  \expandafter\begingroup
-\fi
-\input l3docstrip.tex
-\askforoverwritefalse
-\preamble
-
-Copyright (C) 1990-2017,2019 The LaTeX3 Project
-
-It may be distributed and/or modified under the conditions of
-the LaTeX Project Public License (LPPL), either version 1.3c of
-this license or (at your option) any later version.  The latest
-version of this license is in the file:
-
-   https://www.latex-project.org/lppl.txt
-
-This file is part of the "l3kernel bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
-\endpreamble
-% stop docstrip adding \endinput
-\postamble
-\endpostamble
-\generate{\file{l3doc.cls}{\from{l3doc.dtx}{class,cfg}}}
-%\generate{\file{l3doc.ist}{\from{l3doc.dtx}{docist}}}
-\ifx\fmtname\nameofplainTeX
-  \expandafter\endbatchfile
-\else
-  \expandafter\endgroup
-\fi
-%</driver>
-%
-%<*driver|class|package>
+%<*driver|package>
 \RequirePackage{expl3,xparse,calc}
-%</driver|class|package>
-%
+%</driver|package>
 %<*driver>
-\ProvidesFile{l3doc.dtx}[2017/03/18 L3 Experimental documentation class]
-\documentclass{l3doc}
-\usepackage{framed,lipsum}
+\documentclass[full]{l3doc}
 \begin{document}
-  \DocInput{l3doc.dtx}
+  \DocInput{\jobname.dtx}
 \end{document}
 %</driver>
 %
+% \title{^^A
+%   The \pkg{l3doc} package\\ Experimental documentation features^^A
+% }
+%
+% \author{^^A
+%  The \LaTeX3 Project\thanks
+%    {^^A
+%      E-mail:
+%        \href{mailto:latex-team at latex-project.org}
+%          {latex-team at latex-project.org}^^A
+%    }^^A
+% }
+%
+% \date{Released 2019-08-25}
+%
+% \maketitle
+%
 % This isn't included in the typeset documentation because it's a bit
 % ugly:
-%<*class>
-\ProvidesExplClass{l3doc}{2019-08-27}{}
-  {L3 Experimental documentation class}
-%</class>
+% ^^A Why? --Phelype
 %<*package>
 \ProvidesExplPackage{l3doc}{2019-08-27}{}
   {L3 Experimental documentation package}
 %</package>
 % \fi
 %
-% \title{The \cls{l3doc} class}
-% \author{\Team}
-% \date{Released 2019-08-25}
-% \maketitle
-% \tableofcontents
-%
 % \begin{documentation}
 %
 % \section{Introduction}
@@ -704,7 +675,6 @@ and all files in that bundle must be distributed together.
 %
 % \begin{variable}
 %   {
-%     \g_@@_lmodern_bool,
 %     \g_@@_checkfunc_bool,
 %     \g_@@_checktest_bool,
 %     \g_@@_cs_break_bool,
@@ -713,9 +683,6 @@ and all files in that bundle must be distributed together.
 %   }
 %   Information about package options.
 %    \begin{macrocode}
-%</package>
-%<class>\bool_new:N \g_@@_lmodern_bool
-%<*package>
 \bool_new:N \g_@@_checkfunc_bool
 \bool_new:N \g_@@_checktest_bool
 \bool_new:N \g_@@_kernel_bool
@@ -732,9 +699,6 @@ and all files in that bundle must be distributed together.
 \tl_new:N \l_@@_tmpb_tl
 \int_new:N \l_@@_tmpa_int
 \int_new:N \l_@@_tmpa_seq
-%</package>
-%<class>\dim_new:N \l_@@_tmpa_dim
-%<*package>
 %    \end{macrocode}
 % \end{variable}
 %
@@ -1391,21 +1355,6 @@ and all files in that bundle must be distributed together.
 % \subsection{Class options and configuration}
 %
 %    \begin{macrocode}
-%</package>
-%<*class>
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-\DeclareOption { a5paper } { \@latexerr { Option~not~supported } { } }
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-\DeclareOption { full }
-  { \PassOptionsToPackage { full } { l3doc } }
-\DeclareOption { onlydoc }
-  { \PassOptionsToPackage { onlydoc } { l3doc } }
-%</class>
-%<*package>
 \DeclareOption { full }
   {
     \bool_gset_true:N \g_@@_typeset_documentation_bool
@@ -1423,21 +1372,6 @@ and all files in that bundle must be distributed together.
   { \bool_gset_true:N \g_@@_checkfunc_bool }
 \DeclareOption { nocheck }
   { \bool_gset_false:N \g_@@_checkfunc_bool }
-%</package>
-%<*class>
-\DeclareOption { check }
-  { \PassOptionsToPackage { check } { l3doc } }
-\DeclareOption { nocheck }
-  { \PassOptionsToPackage { nocheck } { l3doc } }
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-\DeclareOption { checktest }
-  { \PassOptionsToPackage { checktest } { l3doc } }
-\DeclareOption { nochecktest }
-  { \PassOptionsToPackage { nochecktest } { l3doc } }
-%</class>
-%<*package>
 \DeclareOption { checktest }
   { \bool_gset_true:N \g_@@_checktest_bool }
 \DeclareOption { nochecktest }
@@ -1449,20 +1383,6 @@ and all files in that bundle must be distributed together.
   { \bool_gset_true:N \g_@@_kernel_bool }
 \DeclareOption { stdmodule }
   { \bool_gset_false:N \g_@@_kernel_bool }
-%</package>
-%<*class>
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-\DeclareOption { cm-default }
-  { \bool_gset_false:N \g_@@_lmodern_bool }
-\DeclareOption { lm-default }
-  { \bool_gset_true:N \g_@@_lmodern_bool }
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-%</class>
-%<*package>
 \DeclareOption { cs-break-off }
   { \bool_gset_false:N \g_@@_cs_break_bool }
 \DeclareOption { cs-break-nohyphen }
@@ -1474,70 +1394,16 @@ and all files in that bundle must be distributed together.
   { \bool_gset_true:N  \g_@@_show_notes_bool }
 \DeclareOption { hide-notes }
   { \bool_gset_false:N \g_@@_show_notes_bool }
-%</package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%<*class>
-\DeclareOption* { \PassOptionsToClass { \CurrentOption } { article } }
-\ExecuteOptions { full, lm-default }
-\PassOptionsToClass { a4paper } { article }
-%</class>
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-%<*package>
 \ExecuteOptions { kernel , nocheck , nochecktest }
-%</package>
-%    \end{macrocode}
-%
-% Input a local configuration file, if it exists, with a message to the
-% console that this has happened. Since we distribute a \file{.cfg} file
-% with the class, this should usually always be true. Therefore, check
-% for \cs{ExplMakeTitle} (defined in \enquote{our} \file{.cfg} file) and
-% only output the informational message if it's not found.
-%
-%    \begin{macrocode}
-%<*class>
-\msg_new:nnn { l3doc } { input-cfg }
-  { Local~config~file~l3doc.cfg~loaded. }
-\file_if_exist:nT { l3doc.cfg }
-  {
-    \file_input:nT { l3doc.cfg }
-      {
-        \cs_if_exist:cF { ExplMakeTitle }
-          { \msg_info:nn { l3doc } { input-cfg } }
-      }
-  }
-%</class>
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-%<class|package>\ProcessOptions
-%    \end{macrocode}
-%
-% Depending on the option, load the package \pkg{lmodern} to set the
-% font.  Then replace the italic typewriter font with the oblique shape
-% instead; the former makes my skin crawl. (Will, Aug 2011)
-%    \begin{macrocode}
-%<*class>
-\bool_if:NT \g_@@_lmodern_bool
-  {
-    \RequirePackage[T1]{fontenc}
-    \RequirePackage{lmodern}
-    \group_begin:
-      \ttfamily
-      \DeclareFontShape{T1}{lmtt}{m}{it}{<->ec-lmtto10}{}
-    \group_end:
-  }
-%</class>
+\ProcessOptions
 %    \end{macrocode}
 %
 % \subsection{Class and package loading}
 %
 %    \begin{macrocode}
-%<class>\LoadClass{article}
-%<*class|package>
 \RequirePackage{doc}
 \RequirePackage
   {
@@ -1558,13 +1424,11 @@ and all files in that bundle must be distributed together.
     underscore, % Breakable underscores (expl3 has some :-)
     verbatim, % Okay
   }
-%</class|package>
-%<class>\raggedbottom
 %    \end{macrocode}
 %
 % Must be last, as usual.
 %    \begin{macrocode}
-%<class|package>\RequirePackage{hypdoc}
+\RequirePackage{hypdoc}
 %    \end{macrocode}
 %
 % \subsection{Configuration and tweaks}
@@ -1573,7 +1437,6 @@ and all files in that bundle must be distributed together.
 %   A few more letters are \enquote{private} in a \LaTeX3 programming
 %   environment.
 %    \begin{macrocode}
-%<*package>
 \cs_gset:Npn \MakePrivateLetters
   {
     \char_set_catcode_letter:N \@
@@ -1639,84 +1502,6 @@ and all files in that bundle must be distributed together.
 % \end{macro}
 % \end{macro}
 %
-% \subsection{Design}
-%
-%    \begin{macrocode}
-%</package>
-%<*class>
-%    \end{macrocode}
-%
-% Increase the text width slightly so that width the standard fonts
-% 72~columns of code may appear in a \env{macrocode} environment.
-% Increase the marginpar width slightly, for long command names.  And
-% increase the left margin by a similar amount.
-%    \begin{macrocode}
-\dim_set:Nn \textwidth      { 385pt }
-\dim_add:Nn \marginparwidth {  30pt }
-\dim_add:Nn \oddsidemargin  {  20pt }
-\dim_add:Nn \evensidemargin {  20pt }
-%    \end{macrocode}
-% (These were introduced when \cls{article} was the documentclass, but
-% I've left them here for now to remind me to do something about them
-% later.)
-%
-% \begin{macro}{\list}
-% \begin{macro}{\@@_oldlist:nn}
-%   Customise lists.
-%    \begin{macrocode}
-\cs_new_eq:NN \@@_oldlist:nn \list
-\cs_gset:Npn \list #1 #2
-  { \@@_oldlist:nn {#1} { #2 \dim_zero:N \listparindent } }
-\dim_set:Nn \parindent  { 2em }
-\dim_set:Nn \itemindent { 0pt }
-\dim_set:Nn \parskip    { 0pt plus 3pt minus 0pt }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\partname}
-%   Use \enquote{File} as a name in Part titles.
-%    \begin{macrocode}
-\tl_gset:Nn \partname {File}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\l at section, \l at subsection}
-%   Customise the table of contents (as we have so many sections).
-%   Different design and/or structure is called for).
-%    \begin{macrocode}
-\@addtoreset{section}{part}
-\cs_gset:Npn \l at section #1#2
-  {
-    \int_compare:nNnT { \c at tocdepth } > { \c_zero_int }
-      {
-        \addpenalty \@secpenalty
-        \addvspace {1.0em \@plus\p@}
-        \dim_set:Nn \l_@@_tmpa_dim { 2.5em }  % was 1.5em
-        \group_begin:
-          \dim_set_eq:NN \parindent \c_zero_dim
-          \dim_set_eq:NN \rightskip \@pnumwidth
-          \dim_set:Nn \parfillskip { -\@pnumwidth }
-          \mode_leave_vertical:
-          \bfseries
-          \dim_add:Nn \leftskip { \l_@@_tmpa_dim }
-          \skip_horizontal:n { -\leftskip }
-          #1 \nobreak \tex_hfil:D \nobreak
-          \hbox_to_wd:nn { \@pnumwidth } { \tex_hss:D #2 }
-          \par
-        \group_end:
-      }
-  }
-\cs_gset:Npn \l at subsection
-  { \@dottedtocline{2}{2.5em}{2.3em} }  % #2 = 1.5em
-%    \end{macrocode}
-% \end{macro}
-%
-%    \begin{macrocode}
-%</class>
-%<*package>
-%    \end{macrocode}
-%
 % \subsection{Text markup}
 %
 % Make "|" and |"| be \enquote{short verb} characters, but not in the
@@ -1817,19 +1602,16 @@ and all files in that bundle must be distributed together.
 \providecommand\marg[1]{ \Arg{#1} }
 \providecommand\oarg[1]{ \texttt[ \meta{#1} \texttt] }
 \providecommand\parg[1]{ \texttt( \meta{#1} \texttt) }
-%</package>
 %    \end{macrocode}
 % \end{macro}
 %
 % \begin{macro}{\file, \env, \pkg, \cls}
 %   This list may change\dots this is just my preference for markup.
 %    \begin{macrocode}
-%<*class|package>
 \DeclareRobustCommand \file {\nolinkurl}
 \DeclareRobustCommand \env {\texttt}
 \DeclareRobustCommand \pkg {\textsf}
 \DeclareRobustCommand \cls {\textsf}
-%</class|package>
 %    \end{macrocode}
 % \end{macro}
 %
@@ -1838,7 +1620,6 @@ and all files in that bundle must be distributed together.
 %   Control whether to typeset the documentation/implementation or not.
 %   These simply set two switches.
 %    \begin{macrocode}
-%<*package>
 \NewDocumentCommand \EnableDocumentation { }
   { \bool_gset_true:N \g_@@_typeset_documentation_bool }
 \NewDocumentCommand \EnableImplementation { }
@@ -4535,75 +4316,6 @@ and all files in that bundle must be distributed together.
 %</package>
 %    \end{macrocode}
 %
-%    \begin{macrocode}
-%<class>\RequirePackage [ kernel , nocheck , nochecktest ] { l3doc }
-%    \end{macrocode}
-%
-% \subsection{Internal macros for \LaTeX3 sources}
-%
-% These definitions are only used by the \LaTeX3 documentation; they are
-% not necessary for third-party users of \cls{l3doc}.  In time this will
-% be broken into a separate package that is specifically loaded in the
-% various \pkg{expl3} modules, \emph{etc.}
-%
-%    \begin{macrocode}
-%<*cfg>
-%    \end{macrocode}
-%
-% The Guilty Parties.
-%    \begin{macrocode}
-\tl_const:Nn \Team
-  {
-    The~\LaTeX3~Project\thanks
-      {\url{https://www.latex-project.org/latex3/}}
-  }
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-\NewDocumentCommand{\ExplMakeTitle}{mm}
-  {
-    \title
-      {
-       The~\pkg{#1}~package \\ #2
-      }
-    \author
-      {
-       The~\LaTeX3~Project\thanks{E-mail:~
-       \href{mailto:latex-l at listserv.uni-heidelberg.de}
-            {latex-l at listserv.uni-heidelberg.de}}
-      }
-    \date{Released~\ExplFileDate}
-    \maketitle
-  }
-%    \end{macrocode}
-%
-% \subsection{Math extras}
-%
-% For \pkg{l3fp}.
-%
-%    \begin{macrocode}
-\AtBeginDocument
-  {
-    \clist_map_inline:nn
-      {
-       asin, acos, atan, acot,
-       asinh, acosh, atanh, acoth, round, floor, ceil
-      }
-      { \exp_args:Nc \DeclareMathOperator{#1}{#1} }
-  }
-%    \end{macrocode}
-%
-% \begin{macro}{\nan}
-%    \begin{macrocode}
-\NewDocumentCommand { \nan } { } { \text { \texttt { nan } } }
-%    \end{macrocode}
-% \end{macro}
-%
-%    \begin{macrocode}
-%</cfg>
-%    \end{macrocode}
-%
-%
 % \subsection{Makeindex configuration}
 %
 %    \begin{macrocode}





More information about the latex3-commits mailing list