summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/xpackages
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2010-05-19 23:24:35 +0000
committerKarl Berry <karl@freefriends.org>2010-05-19 23:24:35 +0000
commitfb8881a67bb8f860de4fed71bbdb2b2b7c39ac89 (patch)
treef59784032722714800a2d0f2d2a519e8a40c4a3b /Master/texmf-dist/source/latex/xpackages
parent97a0746aa6e947818c4d32c3b70e899907124c22 (diff)
xpackages 1902 (18may10)
git-svn-id: svn://tug.org/texlive/trunk@18358 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/xpackages')
-rw-r--r--Master/texmf-dist/source/latex/xpackages/xbase/template-test.tex77
-rw-r--r--Master/texmf-dist/source/latex/xpackages/xbase/template-test2.tex110
-rw-r--r--Master/texmf-dist/source/latex/xpackages/xbase/tprestrict-test.tex (renamed from Master/texmf-dist/source/latex/xpackages/xhead/xhead.ins)63
-rw-r--r--Master/texmf-dist/source/latex/xpackages/xbase/xparse-test.tex296
-rw-r--r--Master/texmf-dist/source/latex/xpackages/xbase/xparse.dtx68
-rw-r--r--Master/texmf-dist/source/latex/xpackages/xhead/xhead.dtx986
-rw-r--r--Master/texmf-dist/source/latex/xpackages/xtras/l3keys2e-demo.tex46
-rw-r--r--Master/texmf-dist/source/latex/xpackages/xtras/l3keys2e.dtx32
8 files changed, 659 insertions, 1019 deletions
diff --git a/Master/texmf-dist/source/latex/xpackages/xbase/template-test.tex b/Master/texmf-dist/source/latex/xpackages/xbase/template-test.tex
new file mode 100644
index 00000000000..5684ce7a90f
--- /dev/null
+++ b/Master/texmf-dist/source/latex/xpackages/xbase/template-test.tex
@@ -0,0 +1,77 @@
+% \iffalse
+%% (C) Copyright 2000-2004 LaTeX3 Project
+%%
+%% It may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3a of this
+%% license or (at your option) any later version. The latest version
+%% of this license is in the file
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This file is part of the ``xbase bundle'' (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%%
+%% The released version of this bundle is available from CTAN.
+%%
+%% -----------------------------------------------------------------------
+%%
+%% The development version of the bundle can be found at
+%%
+%% http://www.latex-project.org/svnroot/experimental/trunk/
+%%
+%% for those people who are interested.
+%%
+%%%%%%%%%%%
+%% NOTE: %%
+%%%%%%%%%%%
+%%
+%% Snapshots taken from the repository represent work in progress and may
+%% not work or may contain conflicting material! We therefore ask
+%% people _not_ to put them into distributions, archives, etc. without
+%% prior consultation with the LaTeX Project Team.
+%%
+%% -----------------------------------------------------------------------
+%%
+%% $Id: template-test.tex 1628 2009-10-25 09:54:34Z mittelba $
+%%
+% \fi
+%
+\RequirePackage{template}
+
+\DeclareTemplateType{xxx}{0}
+
+\DeclareTemplate{xxx}{test}{0}
+ {
+ xkey=n \xkey,
+ key =i {yyy} \value
+ }
+ {
+ \DoParameterAssignments
+ \show\xkey
+ \show\value
+ \value
+ }
+
+\DeclareTemplateType{yyy}{0}
+
+\DeclareTemplate{yyy}{foo}{0}
+ {
+ keya =L \foo
+ }
+ {
+ \DoParameterAssignments
+ \show\foo
+ }
+
+
+\DeclareInstance{xxx}{bar}{test}
+ {
+ xkey = \UseTemplate{yyy}{foo}{ keya = 20pt },
+ key = \UseTemplate{yyy}{foo}{ keya = 10pt }
+ }
+
+\ShowInstance{xxx}{bar}
+
+\UseInstance{xxx}{bar}
+
+\stop
diff --git a/Master/texmf-dist/source/latex/xpackages/xbase/template-test2.tex b/Master/texmf-dist/source/latex/xpackages/xbase/template-test2.tex
new file mode 100644
index 00000000000..489e9f2304a
--- /dev/null
+++ b/Master/texmf-dist/source/latex/xpackages/xbase/template-test2.tex
@@ -0,0 +1,110 @@
+% \iffalse
+%% (C) Copyright 2000-2004 LaTeX3 Project
+%%
+%% It may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3a of this
+%% license or (at your option) any later version. The latest version
+%% of this license is in the file
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This file is part of the ``xbase bundle'' (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%%
+%% The released version of this bundle is available from CTAN.
+%%
+%% -----------------------------------------------------------------------
+%%
+%% The development version of the bundle can be found at
+%%
+%% http://www.latex-project.org/cgi-bin/cvsweb.cgi/
+%%
+%% for those people who are interested.
+%%
+%%%%%%%%%%%
+%% NOTE: %%
+%%%%%%%%%%%
+%%
+%% Snapshots taken from the repository represent work in progress and may
+%% not work or may contain conflicting material! We therefore ask
+%% people _not_ to put them into distributions, archives, etc. without
+%% prior consultation with the LaTeX Project Team.
+%%
+%% -----------------------------------------------------------------------
+%%
+%% $Id: template-test2.tex 585 2006-12-12 17:31:48Z morten $
+%%
+% \fi
+%
+
+
+\RequirePackage{template}
+\RequirePackage{trace}
+
+\DeclareTemplateType{xxx}{0}
+
+\def\MultiSelection{\MultiSelectionError}
+%\def\foo{bar}
+
+%\traceon
+
+\DeclareTemplate{xxx}{test}{0}
+ {
+ xkey=n [\foo] \xkey,
+ ykey=n [\DelayEvaluation\foo] \ykey,
+ zkey=n \zkey,
+ last=n [last] \lastkey,
+ set =i {xxx} \xxx
+ }
+ {
+ \DoParameterAssignments
+ \typeout{abc}
+ }
+\ShowTemplate{xxx}{test}
+
+
+\DeclareInstance{xxx}{bar}{test}
+ {
+ zkey = foo,
+ xkey = baz,
+ }
+
+\DeclareInstance{xxx}{baz}{test}
+ {
+ last = first,
+ set = \UseTemplate{xxx}{test}{zkey=rrr},
+ zkey = foo
+ }
+
+
+\ShowInstance{xxx}{bar}
+\ShowInstance{xxx}{baz}
+
+\DeclareTemplateType{yyy}{0}
+
+\DeclareTemplate{yyy}{foo}{0}
+ {
+ keya =L \foo
+ }
+ {
+ \DoParameterAssignments
+ \show\foo
+ }
+
+
+\DeclareInstance{xxx}{bar}{test}
+ {
+ xkey = \UseTemplate{yyy}{foo}{ keya = 20pt },
+ key = \UseTemplate{yyy}{foo}{ keya = 10pt }
+ }
+
+\ShowInstance{xxx}{bar}
+
+\UseInstance{xxx}{bar}
+
+\stop
+
+%%% Local Variables:
+%%% mode: plain-tex
+%%% TeX-master: t
+%%% End:
diff --git a/Master/texmf-dist/source/latex/xpackages/xhead/xhead.ins b/Master/texmf-dist/source/latex/xpackages/xbase/tprestrict-test.tex
index 7d4286021a7..d981888d450 100644
--- a/Master/texmf-dist/source/latex/xpackages/xhead/xhead.ins
+++ b/Master/texmf-dist/source/latex/xpackages/xbase/tprestrict-test.tex
@@ -1,21 +1,16 @@
% \iffalse
-%%
-%% This file will generate fast loadable files and documentation
-%% driver files from the dtx files in this package when run through
-%% LaTeX or TeX.
-%%
-%% (C) Copyright 2009-2010 LaTeX3 Project
+%% (C) Copyright 2000-2004 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
+%% LaTeX Project Public License (LPPL), either version 1.3a of this
%% license or (at your option) any later version. The latest version
%% of this license is in the file
%%
%% http://www.latex-project.org/lppl.txt
%%
-%% This file is part of the ``xhead bundle'' (The Work in LPPL)
+%% This file is part of the ``xbase bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
-%%
+%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
@@ -37,37 +32,49 @@
%%
%% -----------------------------------------------------------------------
%%
-%% $Id: xhead.ins 1628 2009-10-25 09:54:34Z mittelba $
+%% $Id: tprestrict-test.tex 1628 2009-10-25 09:54:34Z mittelba $
%%
% \fi
%
-\input docstrip
-\keepsilent
-\askforoverwritefalse
+\makeatletter
+\RequirePackage{template}
+\IgnoreWhiteSpace
+
+\newcount\ca
+\newdimen\da
+
+
+\DeclareTemplateType{type}{0}
+
+\DeclareTemplate{type}{Ta}{0}{
+ one =l [2in] \da,
+ two =c [5] \ca}
+ {\DoParameterAssignments\typeout{\da=\the\da,\@spaces \ca=\the\ca}}
+
+\ShowTemplate{type}{Ta}
+
+\typeout{1^^J==}
+\UseTemplate{type}{Ta}{}
-\preamble
+\typeout{2^^J==}
+\UseTemplate{type}{Ta}{one=44pt, two=7}
-(C) Copyright The LaTeX3 Project and any individual authors
-listed elsewhere in this file.
-This is a generated file.
+\DeclareRestrictedTemplate{type}{Tb}{Ta}{one=33pt}
-This file was generated from file(s) of the xhead bundle.
------------------------------------------------------------
+\ShowTemplate{type}{Tb}
-This file may only be distributed together with a copy of this bundle.
-You may however distribute the bundle without such generated files.
+\typeout{RESTRICT^^J3^^J==}
-======================================================================
+\DeclareInstance{type}{foo}{Tb}{two=9}
-\endpreamble
+\ShowInstance{type}{foo}
+\UseInstance{type}{foo}
-\generate{%
- \file{xhead.sty}{\from{xhead.dtx}{package,trace}}
-% \file{xhead-sample.tex}{\from{xhead.dtx}{sample}}
-}
+\typeout{4^^J==}
+\UseTemplate{type}{Tb}{two=7}
-\endbatchfile
+\stop
diff --git a/Master/texmf-dist/source/latex/xpackages/xbase/xparse-test.tex b/Master/texmf-dist/source/latex/xpackages/xbase/xparse-test.tex
new file mode 100644
index 00000000000..8614c4ed06a
--- /dev/null
+++ b/Master/texmf-dist/source/latex/xpackages/xbase/xparse-test.tex
@@ -0,0 +1,296 @@
+% \iffalse
+%% (C) Copyright 2000-2009 LaTeX3 Project
+%%
+%% It may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3a of this
+%% license or (at your option) any later version. The latest version
+%% of this license is in the file
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This file is part of the ``xbase bundle'' (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%%
+%% The released version of this bundle is available from CTAN.
+%%
+%% -----------------------------------------------------------------------
+%%
+%% The development version of the bundle can be found at
+%%
+%% http://www.latex-project.org/svnroot/experimental/trunk/
+%%
+%% for those people who are interested.
+%%
+%%%%%%%%%%%
+%% NOTE: %%
+%%%%%%%%%%%
+%%
+%% Snapshots taken from the repository represent work in progress and may
+%% not work or may contain conflicting material! We therefore ask
+%% people _not_ to put them into distributions, archives, etc. without
+%% prior consultation with the LaTeX Project Team.
+%%
+%% -----------------------------------------------------------------------
+%%
+%% $Id: xparse-test.tex 1628 2009-10-25 09:54:34Z mittelba $
+%%
+% \fi
+%
+
+\documentclass{minimal}
+
+\usepackage{xparse,l3box}
+
+
+\typeout{Testing the complicated makebox setup}
+\typeout{*****************************}
+\typeout{* look at dvi output for this part}
+\typeout{*****************************}
+
+\ExplSyntaxOn
+\makeatletter
+% Let's just take the error messages for a ride:
+\cs_set_nopar:Npn \makebox{}
+% Here should be an error because it is defined
+\NewDocumentCommand \makebox {m}{Gobbledygook}
+\cs_gundefine:N \makebox
+% And now one for being undefined
+\RenewDocumentCommand \makebox {m}{More~gobbledygook}
+\cs_set_eq:NN \makebox \scan_stop:
+% Another one for being undefined
+\RenewDocumentCommand \makebox {m}{Even~more~gobbledygook}
+% Now it should work
+\DeclareDocumentCommand \makebox
+ { >{\xparse_process_comma_split:n}d() o O{c} m}
+ {\IfNoValueTF{#1}
+ { \ltx@maketextbox{#2}{#3}{#4}\mbox }
+ { \ltx@makepicbox #1 {#2}{#4}\@firstofone }
+ }
+
+\DeclareDocumentCommand \framebox
+ { >{\xparse_process_comma_split:n} d() o O{c} m}
+ {
+ \IfNoValueTF{#1}
+ { \ltx@maketextbox{#2}{#3}{#4}\fbox }
+ { \ltx@makepicbox #1 {#2}{#4}\frame }
+ }
+
+\def\ltx@maketextbox#1#2#3#4{
+ \IfNoValueTF{#1}
+ {#4{#3}}
+ {
+ \leavevmode
+ \@begin@tempboxa\hbox{#3}
+ \setlength\@tempdima{#1}
+ \if_meaning:w #4\fbox
+ \setbox\@tempboxa\hb@xt@\@tempdima{
+ \kern\fboxsep
+ \use:c{bm@#2}
+ \kern\fboxsep
+ }
+ \@frameb@x{\kern-\fboxrule}
+ \else:
+ \hb@xt@\@tempdima{\use:c{bm@#2}}
+ \fi:
+ \@end@tempboxa
+ }
+}
+
+\def\ltx@makepicbox#1#2#3#4#5{
+ #5
+ {
+ \vbox to#2\unitlength {
+ \cs_set_eq:NN \mb@b\vss \cs_set_eq:NN \mb@l\hss
+ \cs_set_eq:NN \mb@r\hss \cs_set_eq:NN \mb@t\vss
+ \IfNoValueF{#3}{
+ \tl_map_variable:nNn {#3}\l_tmpa_tl {
+ \if:w s\l_tmpa_tl
+ \cs_set_eq:NN \mb@l \scan_stop:
+ \cs_set_eq:NN \mb@r \scan_stop:
+ \else:
+ \cs_set_eq:cN {mb@\l_tmpa_tl}\scan_stop:
+ \fi:
+ }
+ }
+ \mb@t
+ \hb@xt@ #1\unitlength{\mb@l #4\mb@r}
+ \mb@b
+ \kern\z@
+ }
+ }
+}
+
+\makeatother
+\ExplSyntaxOff
+
+\begin{document}
+
+
+\thicklines
+
+\makebox{A}
+\makebox(1,2){B}
+\makebox(0,0)[lt]{C}
+\makebox[20pt]{D}
+\makebox[30pt][r]{E}
+
+\vspace{1cm}
+
+
+\framebox{A}
+\framebox(1,2){B}
+\framebox(0,0)[lt]{C}
+\framebox[20pt]{D}
+\framebox[30pt][r]{E}
+
+
+\typeout{Testing optional coordinates}
+
+\DeclareDocumentCommand \foo { mmo }
+{ \typeout{1:#1}
+ \typeout{2:#2}
+}
+
+\show\foo
+
+\ExplSyntaxOn
+\DeclareDocumentCommand \foo
+ { m >{\xparse_process_comma_split:n} D(){0,0} m }
+{ \typeout{1:#1}
+ \typeout{2:#2}
+ \typeout{3:#3}
+}
+\ExplSyntaxOff
+
+\show\foo
+
+\foo A(1,2)B
+
+\foo A B
+
+\typeout{Testing mandatory coordinates (gives error on second examples)}
+
+\ExplSyntaxOn
+\DeclareDocumentCommand \foo { m >{\xparse_process_comma_split:n} d() m }
+{ \IfNoValueTF {#2} {
+ \ERROR
+ }{
+ \typeout{1:#1}
+ \typeout{2:#2}
+ \typeout{3:#3}
+ }
+}
+\ExplSyntaxOff
+
+\show\foo
+
+\foo A(1,2)B
+
+\foo A B
+
+\typeout{Testing normal optional arguments}
+
+
+\DeclareDocumentCommand \foo { mmmm o mm o }
+{ \typeout{1:#1}
+ \typeout{2:#2}
+ \typeout{3:#3}
+ \typeout{4:#4}
+ \typeout{5:#5}
+ \typeout{6:#6}
+ \typeout{7:#7}
+ \typeout{8:#8}
+}
+
+\foo 1234 [5]67[8]
+\foo 1234 [5]67 [8] % 8 should not be picked up here
+\foo 123467
+
+\show\foo
+\expandafter\show\csname\string\foo\endcsname
+
+
+\typeout{Testing optional arguments with default}
+
+\DeclareDocumentCommand \baz { O{?}mmm o mm m }
+{ \typeout{1:#1}
+ \typeout{2:#2}
+ \typeout{3:#3}
+ \typeout{4:#4}
+ \typeout{5:#5}
+ \typeout{6:#6}
+ \typeout{7:#7}
+ \typeout{8:#8}
+}
+
+\show\baz
+\expandafter\show\csname\string\baz\endcsname
+
+\baz [1]234[5]678
+\baz 234678
+
+%\tracingall\tracingassigns=1
+\DeclareDocumentCommand \bar { mmmm mmmm m}
+{ \typeout{1:#1}
+ \typeout{2:#2}
+ \typeout{3:#3}
+ \typeout{4:#4}
+ \typeout{5:#5}
+ \typeout{6:#6}
+ \typeout{7:#7}
+ \typeout{8:#8}
+ \typeout{9:#9}
+}
+
+\show\bar
+\expandafter\show\csname\string\bar\endcsname
+
+\bar 123456789
+
+\DeclareDocumentCommand\chapter{soom}
+{\typeout{a{#1}^^Jb{#2}^^Jc{#3}^^Jd{#4}^^Je}}
+
+\show\chapter
+\expandafter\show\csname\string\chapter\endcsname
+
+\typeout{1:}
+\chapter*[xxx][yyy]{zzz}
+
+\typeout{2:}
+\chapter[xxx][yyy]{zzz}
+
+\typeout{3:}
+\chapter*[xxx]{zzz}
+
+\typeout{4:}
+\typeout{\chapter*[xxx][yyy]{zzz}}
+
+
+
+
+\DeclareDocumentCommand\chapter{soom}
+{\typeout{a{#1}^^Jb{#2}^^Jc{#3}^^Jd{#4}^^Je}}
+
+\DeclareDocumentEnvironment{hello}{ooo}
+ {\typeout{B1(#1)^^JB2(#2)^^JB3(#3)^^J}}
+ {\typeout{E1(#1)^^JE2(#2)^^JE3(#3)^^J}}
+
+
+\show\hello
+\expandafter\show\csname\string\hello\endcsname
+
+\show\endhello
+\expandafter\show\csname end\string\\hello\endcsname
+
+\begin{hello}[abc][aabbcc]
+\typeout{body}
+\typeout{5:}
+\chapter[xxx][yyy]{zzz}
+\end{hello}
+
+\begin{hello}[1]
+\typeout{outer body}
+\hello[2]\typeout{inner body}\endhello
+\end{hello}
+
+\stop
diff --git a/Master/texmf-dist/source/latex/xpackages/xbase/xparse.dtx b/Master/texmf-dist/source/latex/xpackages/xbase/xparse.dtx
index 32514be2fe1..45b7ab9bb96 100644
--- a/Master/texmf-dist/source/latex/xpackages/xbase/xparse.dtx
+++ b/Master/texmf-dist/source/latex/xpackages/xbase/xparse.dtx
@@ -41,7 +41,7 @@
\RequirePackage{l3names}
%</driver|package>
%\fi
-\GetIdInfo$Id: xparse.dtx 1897 2010-04-26 05:56:56Z joseph $
+\GetIdInfo$Id: xparse.dtx 1905 2010-05-19 07:45:31Z joseph $
{Generic document command parser}
%\iffalse
%<*driver>
@@ -428,6 +428,23 @@
% before the split takes place.
%\end{function}
%
+%\begin{function}{ \SplitList }
+% \begin{syntax}
+% \cs{SplitList} \Arg{token}
+% \end{syntax}
+% This processor splits the argument given at each occurrence of the
+% \meta{token} where the number of items is not fixed. Each item is
+% then wrapped in braces within "#1". The result is that the
+% processed argument can be further processed using a mapping function.
+% \begin{verbatim}
+% \DeclareDocumentCommand \foo
+% { > { \SplitList { ; } } m }
+% { \MappingFunction #1 }
+% \end{verbatim}
+% Any category code \( 13 \) (active) \meta{tokens} will be replaced
+% before the split takes place.
+%\end{function}
+%
%\subsection{Separating interface and implementation}
%
% One \emph{experimental} idea implemented in \pkg{xparse} is to
@@ -2106,7 +2123,7 @@
{ \exp_not:n {#2} } {#1} { \exp_not:n {#3} }
}
}
- \tl_set:Nx \_l_xparse_tmp_tl
+ \tl_set:Nx \l_xparse_tmp_tl
{
\prg_replicate:nn { #1 + 1 }
{ \_xparse_split_argument_aux_i:w }
@@ -2116,7 +2133,7 @@
\prg_replicate:nn {#1} { \exp_not:n {#2} \NoValue }
\exp_not:n { #2 \q_stop }
}
- \_l_xparse_tmp_tl
+ \l_xparse_tmp_tl
}
\group_end:
\cs_set_protected:Npn \_xparse_split_argument_aux_i:w { }
@@ -2134,6 +2151,48 @@
%\end{macro}
%\end{macro}
%
+%\begin{macro}{\_l_xparse_split_list_tl}
+%\begin{macro}{\_xparse_split_list:nn}
+%\begin{macro}{\_xparse_split_list_aux:w}
+% Splitting a list is done again by first dealing with active
+% characters, then looping over the list using the same method as the
+% \cs{clist_map_\ldots} functions.
+% \begin{macrocode}
+\tl_new:N \_l_xparse_split_list_tl
+\group_begin:
+ \char_make_active:N \@
+ \cs_gset_protected:Npn \_xparse_split_list:nn #1#2
+ {
+ \tl_set:Nn \_l_xparse_split_list_tl {#2}
+ \group_begin:
+ \char_set_lccode:nn { `\@ } { `#1 }
+ \tl_to_lowercase:n
+ {
+ \group_end:
+ \tl_replace_all_in:Nnn \_l_xparse_split_list_tl { @ } {#1}
+ }
+ \cs_set:Npn \_xparse_split_list_aux:w ##1 #1
+ {
+ \quark_if_recursion_tail_stop:n {##1}
+ \tl_put_right:Nn \ProcessedArgument { {##1} }
+ \_xparse_split_list_aux:w
+ }
+ \tl_if_empty:NTF \_l_xparse_split_list_tl
+ { \tl_set:Nn \ProcessedArgument { { } } }
+ {
+ \tl_clear:N \ProcessedArgument
+ \exp_last_unbraced:NV \_xparse_split_list_aux:w
+ \_l_xparse_split_list_tl #1
+ \q_recursion_tail #1 \q_recursion_stop
+ }
+ }
+\group_end:
+\cs_set:Npn \_xparse_split_list_aux:w { }
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
%\subsection{Creating expandable functions}
%
% The trick here is to pass each grabbed argument along a chain of
@@ -2756,11 +2815,14 @@
%\end{macro}
%
%\begin{macro}{\SplitArgument}
+%\begin{macro}{\SplitList}
% Another simple copy.
% \begin{macrocode}
\cs_new_eq:NN \SplitArgument \_xparse_split_argument:nnn
+\cs_new_eq:NN \SplitList \_xparse_split_list:nn
% \end{macrocode}
%\end{macro}
+%\end{macro}
%
% \begin{macrocode}
%</initex|package>
diff --git a/Master/texmf-dist/source/latex/xpackages/xhead/xhead.dtx b/Master/texmf-dist/source/latex/xpackages/xhead/xhead.dtx
deleted file mode 100644
index b5a980b8ee1..00000000000
--- a/Master/texmf-dist/source/latex/xpackages/xhead/xhead.dtx
+++ /dev/null
@@ -1,986 +0,0 @@
-% \iffalse
-%% File xhead.dtx (C) Copyright 2010 Frank Mittelbach, 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
-%%
-%% http://www.latex-project.org/lppl.txt
-%%
-%% This file is part of the ``xhead bundle'' (The Work in LPPL)
-%% and all files in that bundle must be distributed together.
-%%
-%% The released version of this bundle is available from CTAN.
-%%
-%% -----------------------------------------------------------------------
-%%
-%% The development version of the bundle can be found at
-%%
-%% http://www.latex-project.org/svnroot/experimental/trunk/
-%%
-%% for those people who are interested.
-%%
-%%%%%%%%%%%
-%% NOTE: %%
-%%%%%%%%%%%
-%%
-%% Snapshots taken from the repository represent work in progress and may
-%% not work or may contain conflicting material! We therefore ask
-%% people _not_ to put them into distributions, archives, etc. without
-%% prior consultation with the LaTeX Project Team.
-%%
-%% -----------------------------------------------------------------------
-%%
-%<*driver|package>
-\RequirePackage{expl3}
-\GetIdInfo$Id: xhead.dtx 1686 2009-11-03 08:19:19Z joseph $
- {Templates heading commands}
-%</driver|package>
-%<*driver>
-%\fi
-\ProvidesFile{\filename.\filenameext}
- [\filedate\space v\fileversion\space\filedescription]
-%\iffalse
-\documentclass{l3doc}
-
-
-% next three definitions are big hacks to run the file
-% without the above packages
-%
-\makeatother
-
-\newcommand\key[1]{\textbf{#1}}
-
- \begin{document}
- \DocInput{xhead.dtx}
- \end{document}
-%</driver>
-% \fi
-%
-% ^^A\CheckSum{343}
-%
-%
-% \title{The \textsf{xhead} package\thanks{This file
-% has version number \fileversion, last
-% revised \filedate.}}
-% \author{FMi}
-% \date{\filedate}
-% \maketitle
-%
-% \tableofcontents
-%
-% \bigskip
-%
-% \begin{abstract}
-% This module contains basic templates generating typical headings for
-% various levels. This is very much work in progress and none of its content
-% should be considered stable. Concepts and implementation are still under
-% development.
-% \end{abstract}
-%
-%
-% \newcommand\NOVALUE{\texttt{\string\NoValue}}
-% \newcommand\EMPTY{\textit{<empty>}}
-% \newcommand\STRING{\textit{<string>}}
-% \newcommand\TRUE{\texttt{true}}
-% \newcommand\FALSE{\texttt{false}}
-% \newcommand\KEYVALS{\textit{<key/value list>}}
-% \newcommand\HASH[1]{\texttt{\##1}}
-%
-% \makeatletter
-% \renewenvironment{TemplateInterfaceDescription}[1]
-% {\subsection{The~object~type~`#1'}%
-% \begingroup
-% \@beginparpenalty\@M
-% \description
-% \def\TemplateArgument##1##2{\item[Arg:~##1 (##2)]}^^A
-% \def\TemplateSemantics{\enddescription\endgroup
-% \subsubsection*{Semantics:}}^^A
-% }
-% {\par\bigskip}
-% \makeatother
-%
-% \section{Introduction}
-%
-%
-% \section{Interfaces}
-%
-% \begin{TemplateInterfaceDescription}{heading}
-%
-%
-% \TemplateArgument{1}{boolean}
-% If \TRUE{} generate an unnumbered heading, otherwise a number is
-% generated up to a certain heading level. If \TRUE{} TOC entries and
-% running headers are suppressed unless explicitly forced by other
-% arguments below.
-%
-% \TemplateArgument{2}
-% {\STRING/\NOVALUE/\EMPTY}
-% Specifies an alternate heading text for the TOC if one is produced. If
-% \NOVALUE{} or \EMPTY{} the TOC receives the the main title text.
-%
-% \TemplateArgument{3}
-% {boolean}
-% If \TRUE{} a TOC entry is forced (i.e., generated even if normally supressed).
-%
-% \TemplateArgument{4}
-% {\STRING/\NOVALUE/\EMPTY}
-% Specifies an alternate heading text for the running header if one is
-% produced. If \NOVALUE{} or \EMPTY{} the running header receives the the
-% main title text.
-%
-% \TemplateArgument{5}
-% {boolean}
-% If \TRUE{} a running header is forced (i.e., generated even if normally
-% supressed).
-%
-% \TemplateArgument{6}
-% {\STRING}
-% The title of the heading in the document. Also used for the TOC entry and
-% running header (if produced) unless overwritten by other arguments.
-%
-% \TemplateArgument{7}
-% {\KEYVALS}
-% Extension argument to receive less use key value pairs to manipulate the
-% heading. Exact syntax and semantics still need to be defined.
-%
-% \TemplateSemantics
-% This template type defines the basic interface for headings both display
-% headings as well as run-in headings.
-%
-% A TOC entry is generated if \HASH{1} is \FALSE{} or \HASH{3} being
-% \TRUE{}. The heading title for the TOC entry is \HASH{6} unless
-% overwritten by a non-empty HASH{2}. Whether or not this TOC entry
-% actually appears in the TOC depends on settings for the TOC
-% generation. (However, if not generated if will obviously not appear.)
-%
-% A running header is generated if \HASH{1} is \FALSE{} or \HASH{5} or
-% \TRUE{}. The heading title for the determined as follows: if \HASH{4} is
-% non-empty it will be used, otherwise if \HASH{2} is non-empty it will be
-% used, otherwise HASH{6} will be used.
-%
-% \HASH{7} will hold additional key/value pairs that define more specific
-% semantics. This isn't implemented yet.
-%
-% The above describes my current thinking about how those arguments should
-% interact. In simpler templates (based on 2e semantics) the arguments
-% \HASH{3} to \HASH{5} and \HASH{7} will get ignored.
-%
-%
-% \end{TemplateInterfaceDescription}
-%
-%
-% \begin{TemplateDescription}{heading}{2e-vertical}
-%
-%
-% \TemplateKey{name}{tokenlist}
-% {Name of the heading. Used to refer to parts of its data structure,
-% e.g., the counter associated with the heading will have this name. Must
-% be set to a suitable string like ``section''}
-% {none}
-%
-% \TemplateKey{level}{integer}
-% {The level of the heading in the hierarchy. Required.}
-% {none}
-%
-% \TemplateKey{break-penalty}{penalty}
-% {Penlty to break in front of the heading unless it is immediately
-% preceeded a higher-level heading in which case breaking is prohibited.}
-% {-300}
-%
-% \TemplateKey{indent}{length}
-% {Indentation of the heading from the left margin.}
-% {0pt}
-%
-% \TemplateKey{above-skip}{skip}
-% {Vertical space above the heading.}
-% {0pt}
-%
-% \TemplateKey{below-skip}{skip}
-% {Vertical space below the heading.}
-% {0pt}
-%
-% \TemplateKey{title-decl}{function 0}
-% {Declarations to format the heading, e.g., font changes.}
-% {\EMPTY}
-%
-% \TemplateKey{number-format}{function 1}
-% {Formatting instruction for the heading number (if present), receiving
-% the heading counter representation as an argument.}
-% {\cs{xhead_default_number_format:n}}
-%
-% \TemplateKey{indent-after}{boolean}
-% {Should the first paragraph after the heading be indented?}
-% {\FALSE}
-%
-% \TemplateSemantics
-%
-% This is, or should be, a reimplementation of the 2e |\@startsection|
-% command for generating vertical headings. |\@startsection| is also able
-% to produce run-in headings, but this is not covered by the current
-% template.
-%
-% \end{TemplateDescription}
-%
-%
-%
-%
-%
-% \StopEventually{}
-%
-% \section{Implementation}
-%
-% \begin{macrocode}
-%<*package>
-\RequirePackage{expl3,xtemplate}
-% \end{macrocode}
-%
-% \begin{macrocode}
-\GetIdInfo$Id: xhead.dtx 1771 2010-02-05 20:51:22Z frank $
- {heading module}
-\ProvidesExplPackage
- {\filename}{\filedate}{\fileversion}{\filedescription}
-% \end{macrocode}
-%
-%
-% \subsection{The heading object type}
-%
-% Arguments:
-%\begin{verbatim}
-% #1 (boolean) : produce no number
-% #2 (string/\NoValue/empty) : toc-title if different from title
-% #3 (boolean) : force toc entry
-% #4 (string/\NoValue/empty) : mark-title if different from toc-title
-% #5 (Boolean) : force mark entry
-% #6 (string) : title
-% #7 (extra key vals)
-%\end{verbatim}
-%
-% \begin{macrocode}
-\DeclareObjectType {heading} {7}
-% \end{macrocode}
-%
-%
-% \subsection{Interfaces to other components}
-%
-% This section holds code that is (or should be) common between different
-% heading templates, for example, code for passing a title to the TOC system
-% will always use the same TOC interface so it is encapsulated
-% here. Effectively this means that this section should be the only part that
-% needs modification if we update these other components and intorduce new
-% interfaces for them.
-%
-% At the moment everything is set up to use the old 2e interfaces, but this
-% will change over time.
-%
-%
-%
-% \subsubsection{Generating TOC and mark entries}
-%
-%
-% \begin{macro}{\xhead_generate_toc:NNNNN}
-% \begin{macro}{\xhead_generate_toc:NNNNo}
-% This command provides the interface to the TOC system (currently the 2e
-% one). It uses its first two arguments to decide if a TOC entry should be produced
-% and if so generates the entry from the remaining arguments.
-%
-% Arguments:
-%\begin{verbatim}
-% #1 (boolean) : produce no number
-% #2 (boolean) : force toc entry
-% #3 (string) : heading name (\l_xhead_name_tl)
-% #4 (string) : heading number if any (\l_xhead_number_tl)
-% #5 (string) : toc-title (\l_xhead_toc_title_tl)
-%\end{verbatim}
-%
-% \begin{macrocode}
-\cs_new:Npn \xhead_generate_toc:NNNNN #1#2#3#4#5 {
-%<*trace>
- \typeout{xhead_generate_toc:NNNNN=#1:#2:#3:#4:#5}
-%</trace>
-% \end{macrocode}
-% A TOC entry is produced if the heading number was not suppressed (|!#1|)
-% or it is forced (|#2|).
-% \begin{macrocode}
- \bool_if:nT
- { #2 || ! #1 }
- {
- \group_begin:
-% \end{macrocode}
-% Guard against use of mark commands in the heading title (from old sources).
-% \begin{macrocode}
- \cs_set_eq:NN \@mkboth \use_none:nn
- \cs_set_eq:NN \markboth \use_none:nn
- \cs_set_eq:NN \markright \use_none:n
-% \end{macrocode}
-% Use the old 2e |\addcontentsline| interface:
-% \begin{macrocode}
- \addcontentsline{toc}{#3}
- {
- \tl_if_empty:NF #4
- { \protect\numberline{ #4 } }
- #5
- }
- \group_end:
- }
-}
-% \end{macrocode}
-% In the templates we really want to make sure that the title in the last
-% argument is passed and not a tokenlist in which it is saved. After all,
-% this text will get passed around over long distances. We therefore
-% provide the following variant for use in templates:
-% \begin{macrocode}
-\cs_generate_variant:Nn \xhead_generate_toc:NNNNN {NNNNo}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-%
-%
-%
-% \begin{macro}{\xhead_generate_mark:NNNNN}
-% \begin{macro}{\xhead_generate_mark:NNNNo}
-% This command provides the interface to the mark system for running
-% headers(currently the 2e one). It uses its first two arguments to decide
-% if a mark entry should be produced and if so generates the entry from the
-% remaining arguments.
-%
-% Arguments:
-%\begin{verbatim}
-% #1 (boolean) : produce no number
-% #2 (boolean) : force running header entry
-% #3 (string) : heading name (\l_xhead_name_tl)
-% #4 (string) : heading number if any (\l_xhead_number_tl)
-% #5 (string) : mark-title (\l_xhead_mark_title_tl)
-%\end{verbatim}
-%
-% \begin{macrocode}
-\cs_new:Npn \xhead_generate_mark:NNNNN #1#2#3#4#5 {
-%<*trace>
- \typeout{xhead_generate_mark:NNNNN=#1:#2:#3:#4:#5}
-%</trace>
-% \end{macrocode}
-% A running header entry is produced if the heading number was not
-% suppressed (|!#1|) or it is forced (|#2|).
-% \begin{macrocode}
- \bool_if:nT
- { #2 || ! #1 }
- {
- \group_begin:
-% \end{macrocode}
-% Guard against use of mark command in heading titles (from old
-% sources)\footnote{This is wrong here, needs thought.}
-% \begin{macrocode}
- \cs_set_eq:NN \@mkboth \use_none:nn
-% \end{macrocode}
-% Again we use the original 2e interface. |\markright|, etc.\ currently adds
-% the section number so we do not add it here---for now.
-% \begin{macrocode}
- \use:c {#3 mark} {#5}
- \group_end:
- }
-}
-% \end{macrocode}
-% In the templates we really want to make sure that the title in the last
-% argument is passed and not a tokenlist in which it is saved. After all,
-% this text will get passed around over long distances. We therefore
-% provide the following variant for use in templates:
-% \begin{macrocode}
-\cs_generate_variant:Nn \xhead_generate_mark:NNNNN {NNNNo}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-%
-%
-%
-% \begin{macro}{\xhead_generate_toc_and_mark:NNNNNNN}
-%
-% This is just putting it all together, may not be worth having.
-%
-% Arguments:
-%\begin{verbatim}
-% #1 (boolean) : produce no number
-% #2 (boolean) : force toc entry
-% #3 (boolean) : force running header entry
-% #4 (string) : heading name (\l_xhead_name_tl)
-% #5 (string) : heading number or empty (\l_xhead_number_tl)
-% #6 (string) : toc-title (\l_xhead_toc_title_tl)
-% #7 (string) : mark-title (\l_xhead_mark_title_tl)
-%\end{verbatim}
-%
-% \begin{macrocode}
-\cs_new:Npn \xhead_generate_toc_and_mark:NNNNNNN #1#2#3#4#5#6#7 {
- \xhead_generate_toc:NNNNo
- #1 #2 #4 #5 #6
- \xhead_generate_mark:NNNNo
- #1 #3 #4 #5 #7
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-% \subsubsection{Prepare heading number}
-%
-%
-%
-% \begin{macro}{\xhead_update_prepare_number:N}
-%
-% This command checks if a number should be produced and if so increments
-% the corresponding counter and stores the number in
-% |\l_xhead_number_tl|. Otherwise |\l_xhead_number_tl| will be set to empty
-% to indicate that no number should be displayed.
-%
-% Arguments:
-%\begin{verbatim}
-% #1 (boolean) : produce no number
-%\end{verbatim}
-
-% Assumptions:
-%\begin{verbatim}
-% \l_xhead_name_tl : holds heading name
-% \l_xhead_level_int : holds heading level
-%\end{verbatim}
-%
-% Outputs:
-%\begin{verbatim}
-% \l_xhead_number_tl : holds heading number or returns empty
-%\end{verbatim}
-%
-% \begin{macrocode}
-\cs_new:Npn \xhead_update_prepare_number:N #1 {
- \bool_if:nTF
- { #1 || \intexpr_compare_p:n { \l_xhead_level_int > \c@secnumdepth } }
- { \tl_clear:N \l_xhead_number_tl }
- {
- \refstepcounter \l_xhead_name_tl
- \tl_set:Nx \l_xhead_number_tl { \use:c {the \l_xhead_name_tl} }
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-% \subsubsection{Prepare indentation after heading}
-%
-% To set the paragraph indentation after a heading we need to interact with
-% the galley mechanism, which at one point will be \texttt{xgalley}. Right
-% now we use the 2e interface.
-%
-% \begin{macro}{\xhead_set_after_indention:N}
-% Here we set the 2e flag depending
-% \begin{macrocode}
-\cs_new:Npn \xhead_set_after_indention:N #1 {
- \bool_if:NTF #1 \@afterindenttrue \@afterindentfalse
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-%
-% \subsubsection{Evaluating the title arguments}
-%
-% According to the heading object type spec the title text for the toc and
-% running header may differ from the main title in dependence of the
-% arguments passed to the template.
-% The code below implements the documented logic.
-%
-% \begin{macro}{\xhead_set_titles:nnn}
-%
-% Arguments:
-%\begin{verbatim}
-% #1 (string/\NoValue/empty) : toc-title if different from title
-% #2 (string/\NoValue/empty) : mark-title if different from toc-title
-% #3 (string) : title
-%\end{verbatim}
-%
-% \begin{macrocode}
-\cs_new:Npn \xhead_set_titles:nnn #1#2#3 {
-% \end{macrocode}
-% Determine title for toc:
-% If \HASH{1} is \NOVALUE{} or \EMPTY{} use \HASH{3} for the toc-title.
-% Otherwise use \HASH{1}.
-% \begin{macrocode}
- \IfNoValueTF{#1}
- { \tl_set:Nn \l_xhead_toc_title_tl {#3} }
- { \tl_if_empty:nTF {#1}
- { \tl_set:Nn \l_xhead_toc_title_tl {#3} }
- { \tl_set:Nn \l_xhead_toc_title_tl {#1} }
- }
-% \end{macrocode}
-% Determine title for mark: If \HASH{2} is \NOVALUE{} then use whatever was
-% determined for the toc-title as value (i.e., if a special toc-title was
-% used this will be also used for the running header, if not the main title
-% is used). Otherwise, if \HASH{2} is \EMPTY{} use \HASH{3}. Otherwise use
-% \HASH{2} (i.e., a special title was passed for the running header).
-% \begin{macrocode}
- \IfNoValueTF{#2}
- { \tl_set_eq:NN \l_xhead_mark_title_tl \l_xhead_toc_title_tl }
- { \tl_if_empty:nTF {#2}
- { \tl_set:Nn \l_xhead_mark_title_tl {#3} }
- { \tl_set:Nn \l_xhead_mark_title_tl {#2} }
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-% \subsection{Support variables for template code}
-%
-%
-% \begin{macrocode}
-\dim_new:N \l_xhead_indent_dim
-% \end{macrocode}
-%
-%
-%
-% \begin{macrocode}
-\skip_new:N \l_xhead_above_skip
-\skip_new:N \l_xhead_below_skip
-% \end{macrocode}
-%
-%
-%
-% \begin{macrocode}
-\int_new:N \l_xhead_level_int
-\int_new:N \l_xhead_break_penalty_int
-% \end{macrocode}
-%
-% \begin{macrocode}
-\tl_new:N \l_xhead_name_tl
-\tl_new:N \l_xhead_number_tl
-\tl_new:N \l_xhead_toc_title_tl
-\tl_new:N \l_xhead_mark_title_tl
-% \end{macrocode}
-%
-% \begin{macrocode}
-\bool_new:N \l_xhead_indent_after_bool
-
-\cs_new:Npn \xhead_title_decl: {}
-
-\cs_new:Npn \xhead_number_format:n #1 {}
-
-\cs_new:Npn \xhead_default_number_format:n #1 { #1 \quad}
-% \end{macrocode}
-%
-%
-%
-%
-% \subsection{The template \texttt{2e-vertical}}
-%
-% \begin{macrocode}
-\DeclareTemplateInterface {heading} {2e-vertical} {7}
- {
- name : tokenlist = ??? ,
- level : integer = 0 ,
- break-penalty: integer = -300 ,
- indent : length = 0pt ,
- above-skip : skip = 0pt ,
- below-skip : skip = 0pt ,
- title-decl : function {0} = ,
- number-format: function {1} = \xhead_default_number_format:n {#1} ,
- indent-after : boolean = false ,
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\DeclareTemplateCode {heading} {2e-vertical} {7}
- {
- name = \l_xhead_name_tl ,
- level = \l_xhead_level_int ,
- break-penalty = \l_xhead_break_penalty_int ,
- indent = \l_xhead_indent_dim ,
- above-skip = \l_xhead_above_skip ,
- below-skip = \l_xhead_below_skip ,
- title-decl = \xhead_title_decl: ,
- number-format = \xhead_number_format:n ,
- indent-after = \l_xhead_indent_after_bool ,
- }
- {
- \AssignTemplateKeys
-% \end{macrocode}
-% Determine title for toc and mark using the 2e logic: Do not generate
-% them if the star-form of the heading is used and always use the same text
-% for TOC and mark:
-% \begin{macrocode}
- \bool_if:NF #1
- {
- \IfNoValueTF{#2}
- { \tl_set:Nn \l_xhead_toc_title_tl {#6} }
- { \tl_set:Nn \l_xhead_toc_title_tl {#2} }
- \tl_set_eq:NN \l_xhead_mark_title_tl \l_xhead_toc_title_tl
- }
-% \end{macrocode}
-% If heading number increment counter and set |\l_xhead_number_tl|
-% \begin{macrocode}
- \xhead_update_prepare_number:N #1
-% \end{macrocode}
-% Indent after heading if requested (use old mechanism):
-% \begin{macrocode}
- \xhead_set_after_indention:N \l_xhead_indent_after_bool
-% \end{macrocode}
-% Produce the space above the heading (using old 2e methods):
-% \begin{macrocode}
- \if@noskipsec \leavevmode \fi
- \par
- \if@nobreak
- \everypar{}
- \else:
- \addpenalty \l_xhead_break_penalty_int
- \addvspace \l_xhead_above_skip
- \fi:
-% \end{macrocode}
-% Produce the title of the heading (using old 2e methods)
-% \begin{macrocode}
- \group_begin:
- \xhead_title_decl:
- {
- \@hangfrom{\hskip \l_xhead_indent_dim \scan_stop:
- \tl_if_empty:NF \l_xhead_number_tl
- { \xhead_number_format:n \l_xhead_number_tl }
- }
- \interlinepenalty \@M #6\@@par
- }
- \group_end:
-% \end{macrocode}
-% Generate toc entry and mark if required:
-% \begin{macrocode}
- \xhead_generate_toc_and_mark:NNNNNNN
- #1 \BooleanFalse \BooleanFalse % no forcing in 2e
- \l_xhead_name_tl
- \l_xhead_number_tl
- \l_xhead_toc_title_tl
- \l_xhead_mark_title_tl
-% \end{macrocode}
-% Produce the space below the heading and the handling of following
-% paragraph (using old 2e methods):
-% \begin{macrocode}
- \par \nobreak
- \vspace \l_xhead_below_skip
- \@afterheading
- \ignorespaces
- }
-% \end{macrocode}
-%
-%
-%
-%
-% \subsection{The template \texttt{3a-vertical}}
-%
-% Right now this template is more or less equal to \texttt{2e-vertical}
-% except that it supports the extended heading arguments with the exception
-% of \HASH{7}.
-%
-% \begin{macrocode}
-\DeclareTemplateInterface {heading} {3a-vertical} {7}
- {
- name : tokenlist = ??? ,
- level : integer = 0 ,
- break-penalty : integer = -300 ,
- indent : length = 0pt ,
- above-skip : skip = 0pt ,
- below-skip : skip = 0pt ,
- format : tokenlist = indent-by-number ,
- parshape : instance {parshape} = plain ,
- justification : instance {justification} = flush-left ,
- font : tokenlist = ,
- number-format : function {1} = \xhead_default_number_format:n {#1} ,
- indent-after : boolean = false ,
- }
-% \end{macrocode}
-%
-
-% \begin{macro}{\l_xhead_title_format_tl}
-%
-% \begin{macrocode}
-\tl_new:N \l_xhead_title_format_tl
-\tl_new:N \l_xhead_title_font_tl
-
-\cs_new:Npn \xhead_title_parshape: {}
-\cs_new:Npn \xhead_title_justification: {}
-
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macrocode}
-\DeclareTemplateCode {heading} {3a-vertical} {7}
- {
- name = \l_xhead_name_tl ,
- level = \l_xhead_level_int ,
- break-penalty = \l_xhead_break_penalty_int ,
- indent = \l_xhead_indent_dim ,
- above-skip = \l_xhead_above_skip ,
- below-skip = \l_xhead_below_skip ,
- format = \l_xhead_title_format_tl ,
- parshape = \xhead_title_parshape: ,
- justification = \xhead_title_justification: ,
- font = \l_xhead_title_font_tl ,
- number-format = \xhead_number_format:n ,
- indent-after = \l_xhead_indent_after_bool ,
- }
- {
- \AssignTemplateKeys
-% \end{macrocode}
-% Set title text for TOC and mark entry:
-% \begin{macrocode}
- \xhead_set_titles:nnn {#2} {#4} {#6}
-% \end{macrocode}
-% If heading gets a number, increment counter and set
-% |\l_xhead_number_tl|.
-% \begin{macrocode}
- \xhead_update_prepare_number:N #1
-% \end{macrocode}
-% Indent after heading if requested (use old mechanism)
-% \begin{macrocode}
- \xhead_set_after_indention:N \l_xhead_indent_after_bool
-% \end{macrocode}
-%
-% Produce the space above the heading (using old 2e methods)
-%
-% \begin{macrocode}
- \if@noskipsec \leavevmode \fi
- \par
- \if@nobreak
- \everypar{}
- \else:
- \addpenalty \l_xhead_break_penalty_int
- \addvspace \l_xhead_above_skip
- \fi:
-% \end{macrocode}
-%
-% Produce the title of the heading
-%
-% \begin{macrocode}
- \xhead_use_title_format:nn \l_xhead_title_format_tl {#6}
-
-% \end{macrocode}
-% Generate toc entry and mark:
-% \begin{macrocode}
- \xhead_generate_toc_and_mark:NNNNNNN
- #1 #3 #5
- \l_xhead_name_tl
- \l_xhead_number_tl
- \l_xhead_toc_title_tl
- \l_xhead_mark_title_tl
-% \end{macrocode}
-% Produce the space below the heading and the handling of following
-% paragraph (using old 2e methods)
-% \begin{macrocode}
- \par \nobreak
- \vspace \l_xhead_below_skip
- \@afterheading
- \ignorespaces
- }
-% \end{macrocode}
-%
-%
-%
-% \begin{macro}{\xhead_use_title_format:nn}
-% Select a formatting command (based on first arg string) and use it to
-% format the title (second arg).
-%
-% The formatting command makes a bunch of
-% assumptions with respect to the variable names used by the templates (it
-% might ignore some of them):
-%\begin{verbatim}
-% \l_xhead_title_font_tl : font declarations for title text
-% \l_xhead_indent_dim : indentation from the left of title
-% \xhead_title_parshape: : parshape instance to use for title
-% \xhead_title_justification: : justification instance to use for title
-% \l_xhead_number_tl : raw title number or empty
-% \xhead_number_format:n : formatting command for title number
-%\end{verbatim}
-% In addition it takes a single mandatory argument holding the title text.
-%
-% \begin{macrocode}
-\cs_new:Npn \xhead_use_title_format:nn #1 {
- \cs_if_exist:cTF {xhead_format_ #1:n}
- { \use:c{xhead_format_ #1:n} }
- { \ERROR xhead format not defined }
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\xhead_format_indent-by-number:n}
-% Implementing vertical version of |\@startsection| \ldots
-% \begin{macrocode}
-\cs_new:cpn {xhead_format_indent-by-number:n} #1 {
- \group_begin:
- \l_xhead_title_font_tl
- \hbox_set:Nn \l_tmpa_box
- {
- \tl_if_empty:NF \l_xhead_number_tl
- { \xhead_number_format:n \l_xhead_number_tl }
- }
-
- \UseInstance{measure}{fullwidth}
- {\l_xhead_indent_dim + \box_wd:N \l_tmpa_box }
-
- \xhead_title_parshape:
- \xhead_title_justification:
- \interlinepenalty \@M
-
- \noindent \hbox_overlap_left:n { \box_use:N \l_tmpa_box }
- #1\@@par
- \group_end:
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-% \begin{macro}{\xhead_format_number-above-text:n}
-%
-% \begin{macrocode}
-\cs_new:cpn {xhead_format_number-above-text:n} #1 {
- \group_begin:
- \l_xhead_title_font_tl
- \xhead_title_parshape:
- \xhead_title_justification:
- \interlinepenalty \@M
-
- \tl_if_empty:NF \l_xhead_number_tl
- {
- \xhead_number_format:n \l_xhead_number_tl
- }
-
- #1\@@par
- \group_end:
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macrocode}
-
-\input{xtextblock.sty}
-
-
-\DeclareTemplateInterface {heading} {3b-vertical} {7}
- {
- name : tokenlist = ??? ,
- level : integer = 0 ,
- break-penalty : integer = -300 ,
- indent : length = 0pt ,
- above-skip : skip = 0pt ,
- below-skip : skip = 0pt ,
- title-format : instance {textblock-2} = heading ,
- number-format : function {1} = \xhead_default_number_format:n {#1} ,
- indent-after : boolean = false ,
- }
-
-\cs_new:Npn \xhead_title_format:nn #1#2 {}
-
-\DeclareTemplateCode {heading} {3b-vertical} {7}
- {
- name = \l_xhead_name_tl ,
- level = \l_xhead_level_int ,
- break-penalty = \l_xhead_break_penalty_int ,
- indent = \l_xhead_indent_dim ,
- above-skip = \l_xhead_above_skip ,
- below-skip = \l_xhead_below_skip ,
- title-format = \xhead_title_format:nn ,
- number-format = \xhead_number_format:n ,
- indent-after = \l_xhead_indent_after_bool ,
- }
- {
- \AssignTemplateKeys
-
- \xhead_set_titles:nnn {#2} {#4} {#6}
-
- \xhead_update_prepare_number:N #1
-
- \xhead_set_after_indention:N \l_xhead_indent_after_bool
-
- \if@noskipsec \leavevmode \fi
- \par
- \if@nobreak
- \everypar{}
- \else:
- \addpenalty \l_xhead_break_penalty_int
- \addvspace \l_xhead_above_skip
- \fi:
-
- \xhead_title_format:nn \l_xhead_number_tl {#6}
-
- \xhead_generate_toc_and_mark:NNNNNNN
- #1 #3 #5
- \l_xhead_name_tl
- \l_xhead_number_tl
- \l_xhead_toc_title_tl
- \l_xhead_mark_title_tl
-
- \par \nobreak
- \vspace \l_xhead_below_skip
- \@afterheading
- \ignorespaces
- }
-
-
-% \end{macrocode}
-%
-% \Finale
-%
-%
-% \begin{macrocode}
-\endinput
-%</package>
-% \end{macrocode}
-%
-% \endinput
-%
-%
-%
-%
-% \begin{TemplateInterfaceDescription}{}
-%
-% \TemplateArgument{1}
-% {}
-%
-% \TemplateSemantics
-%
-% \end{TemplateInterfaceDescription}
-%
-%
-
-
- - motto/quote text to display alongside the heading title
- - flag to number heading
- -label name for cross-reference
-
-%
-% \begin{InstanceDescription}[\textbf{no-page-break-boolean}xx]
-% {pshape}{staggered}{cutout}
-%
-% \InstanceKey{no-page-break-boolean}{true}
-%
-% \InstanceKey{left-side-boolean}{true}
-%
-% \InstanceKey{normal-lines-int}{1}
-%
-% \InstanceKey{parshape-list}{20pt,40pt,60pt}
-%
-% \InstanceSemantics
-% This instance will indent each line by an additional 20pt (up to
-% the fourth line). A possible application would be a heading text
-% (with a maximum number of four lines).
-% This should then perhaps be combined with a special justification
-% instance which does ragged right except for the last line which is
-% set to full measure.
-%
-% \end{InstanceDescription}
-%
-%
-
diff --git a/Master/texmf-dist/source/latex/xpackages/xtras/l3keys2e-demo.tex b/Master/texmf-dist/source/latex/xpackages/xtras/l3keys2e-demo.tex
new file mode 100644
index 00000000000..a00531e0741
--- /dev/null
+++ b/Master/texmf-dist/source/latex/xpackages/xtras/l3keys2e-demo.tex
@@ -0,0 +1,46 @@
+% !TEX encoding = ISO-8859-1
+% !TEX program = pdflatex
+%
+% This file demonstrates the use of the l3keys2e module to allow
+% LaTeX3 keyvals (created using l3keys) to be used as LaTeX2e
+% package or class options.
+%
+
+% First, create a class
+\begin{filecontents}{l3keys2e-class.cls}
+ \LoadClass{article}
+ \RequirePackage{l3keys2e}
+ \ProvidesExplClass{l3keys2e-class}{0000/00/00}{0.0}{test}
+ \keys_define:nn { test1 } {
+ option1 .code:n = {\wlog{You~gave~`#1'~for~option1}}
+ }
+ \ProcessKeysOptions { test1 }
+\end{filecontents}
+
+% Load the class with some options.
+% The class itself recognises `option1', leaving `option2' and
+% `option3' as global optons which are not yet used.
+\documentclass[option1=check,option2=more stuff,option3=unused]
+ {l3keys2e-class}
+
+%Now create a package
+\begin{filecontents}{l3keys2e-package.sty}
+ \RequirePackage{l3keys2e}
+ \ProvidesExplPackage{l3keys2e-package}{0000/00/00}{0.0}{test}
+ \keys_define:nn { test2 } {
+ option1 .code:n = {\wlog{You~gave~`#1'~for~option1~(again)}},
+ option2 .code:n = {\wlog{You~gave~`#1'~for~option2}},
+ option4 .code:n = {\wlog{You~gave~`#1'~for~option4}},
+ }
+ \ProcessKeysOptions { test2 }
+\end{filecontents}
+
+% Load the package.
+\usepackage[option4={extra stuff},option5=undefined!]
+ {l3keys2e-package}
+
+\begin{document}
+% The log should show that option3 is an unused global option, and that
+% option5 is not known by the l3keys2e-demo package. Everything else
+% should simply be listed in the log.
+\end{document}
diff --git a/Master/texmf-dist/source/latex/xpackages/xtras/l3keys2e.dtx b/Master/texmf-dist/source/latex/xpackages/xtras/l3keys2e.dtx
index 91e4dac4c48..0120127f93e 100644
--- a/Master/texmf-dist/source/latex/xpackages/xtras/l3keys2e.dtx
+++ b/Master/texmf-dist/source/latex/xpackages/xtras/l3keys2e.dtx
@@ -105,6 +105,17 @@
% \end{verbatim}
%\end{function}
%
+%\begin{function}{\ProcessKeysPackageOptions}
+% \begin{syntax}
+% "\ProcessKeysPackageOptions" \Arg{module}
+% \end{syntax}
+% This function works in a similar manner to \cs{ProcessKeysOptions}.
+% When used in a LaTeX2e package, \cs{ProcessKeysPackageOptions}
+% will not examine any class options available. In contrast,
+% \cs{ProcessKeysOptions} does parse class options (in common with the
+% LaTeX2e kernel function \cs{ProcessOptions}).
+%\end{function}
+%
%\subsection{Internal functions and variables}
%
%\begin{variable}{\keys_latexe_options_clist}
@@ -187,6 +198,14 @@
\clist_new:N \keys_latexe_options_clist
% \end{macrocode}
%\end{macro}
+%
+%\begin{macro}{\_l_keys_process_class_bool}
+% A flag to indicate that class options should be processed for
+% packages.
+% \begin{macrocode}
+\bool_new:N \_l_keys_process_class_bool
+% \end{macrocode}
+%\end{macro}
%
%\begin{macro}{\keys_latexe_options:n}
% The main function calls functions to collect up the global and local
@@ -229,7 +248,8 @@
\cs_if_eq:NNTF \@currext \@clsextension {
\keys_latexe_options_class:n {#1}
}{
- \keys_latexe_options_package:n {#1}
+ \bool_if:NT \_l_keys_process_class_bool
+ { \keys_latexe_options_package:n {#1} }
}
}
}
@@ -302,16 +322,24 @@
%\end{macro}
%
%\begin{macro}{\ProcessKeysOptions}
-% The user macro is simply a wrapper around the internal process. In
+%\begin{macro}{\ProcessKeysOptions}
+% The user macro are simply wrappers around the internal process. In
% contrast to other similar packages, the module name is always required
% here.
% \begin{macrocode}
\NewDocumentCommand \ProcessKeysOptions { m } {
+ \bool_set_true:N \_l_keys_process_class_bool
+ \keys_latexe_options:n {#1}
+}
+\NewDocumentCommand \ProcessKeysPackageOptions { m } {
+ \bool_set_false:N \_l_keys_process_class_bool
\keys_latexe_options:n {#1}
}
\@onlypreamble \ProcessKeysOptions
+\@onlypreamble \ProcessKeysPackageOptions
% \end{macrocode}
%\end{macro}
+%\end{macro}
%
% \begin{macrocode}
%</package>