From f476e2547d6f421f3f59e812adb855596f668eb5 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 22 Nov 2016 22:50:16 +0000 Subject: l3 (22nov16) git-svn-id: svn://tug.org/texlive/trunk@42556 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/l3build/README.md | 2 +- Master/texmf-dist/doc/latex/l3build/l3build.pdf | Bin 609526 -> 608802 bytes .../texmf-dist/doc/latex/l3experimental/README.md | 2 +- .../doc/latex/l3experimental/l3sort/l3sort.pdf | Bin 400554 -> 399811 bytes .../doc/latex/l3experimental/l3str/l3flag.pdf | Bin 320517 -> 319763 bytes .../doc/latex/l3experimental/l3str/l3regex.pdf | Bin 455884 -> 455133 bytes .../latex/l3experimental/l3str/l3str-convert.pdf | Bin 447096 -> 447075 bytes .../latex/l3experimental/l3str/l3str-format.pdf | Bin 380226 -> 380207 bytes .../latex/l3experimental/l3str/l3tl-analysis.pdf | Bin 354906 -> 354887 bytes .../doc/latex/l3experimental/l3str/l3tl-build.pdf | Bin 387340 -> 386599 bytes .../doc/latex/l3experimental/xcoffins/xcoffins.pdf | Bin 395896 -> 395878 bytes .../doc/latex/l3experimental/xgalley/l3galley.pdf | Bin 395657 -> 394904 bytes .../doc/latex/l3experimental/xgalley/xgalley.pdf | Bin 291658 -> 291637 bytes Master/texmf-dist/doc/latex/l3kernel/README.md | 2 +- Master/texmf-dist/doc/latex/l3kernel/expl3.pdf | Bin 587139 -> 586688 bytes .../texmf-dist/doc/latex/l3kernel/interface3.pdf | Bin 1486421 -> 1490784 bytes .../texmf-dist/doc/latex/l3kernel/l3docstrip.pdf | Bin 268241 -> 268221 bytes .../texmf-dist/doc/latex/l3kernel/l3styleguide.pdf | Bin 280000 -> 279980 bytes .../doc/latex/l3kernel/l3syntax-changes.pdf | Bin 220242 -> 220223 bytes Master/texmf-dist/doc/latex/l3kernel/source3.pdf | Bin 4480476 -> 4510906 bytes .../texmf-dist/doc/latex/l3kernel/source3body.tex | 1 + Master/texmf-dist/doc/latex/l3packages/README.md | 2 +- .../doc/latex/l3packages/l3keys2e/l3keys2e.pdf | Bin 333322 -> 332589 bytes .../doc/latex/l3packages/xfrac/xfrac.pdf | Bin 482075 -> 481321 bytes .../doc/latex/l3packages/xparse/xparse.pdf | Bin 461153 -> 461981 bytes .../doc/latex/l3packages/xtemplate/xtemplate.pdf | Bin 426456 -> 425705 bytes Master/texmf-dist/source/latex/l3build/l3build.dtx | 21 +- .../source/latex/l3experimental/l3sort/l3sort.dtx | 6 +- .../source/latex/l3experimental/l3str/l3flag.dtx | 6 +- .../source/latex/l3experimental/l3str/l3regex.dtx | 6 +- .../latex/l3experimental/l3str/l3tl-build.dtx | 6 +- .../latex/l3experimental/xgalley/l3galley.dtx | 6 +- Master/texmf-dist/source/latex/l3kernel/expl3.dtx | 4 +- Master/texmf-dist/source/latex/l3kernel/l3.ins | 1 + .../texmf-dist/source/latex/l3kernel/l3format.ins | 1 + .../texmf-dist/source/latex/l3kernel/l3fp-aux.dtx | 39 ++- .../source/latex/l3kernel/l3fp-logic.dtx | 70 ++++- .../source/latex/l3kernel/l3fp-parse.dtx | 64 ++++- .../source/latex/l3kernel/l3fp-random.dtx | 266 +++++++++++++++++ .../source/latex/l3kernel/l3fp-round.dtx | 23 +- Master/texmf-dist/source/latex/l3kernel/l3fp.dtx | 76 ++++- .../source/latex/l3packages/l3keys2e/l3keys2e.dtx | 8 +- .../source/latex/l3packages/xfrac/xfrac.dtx | 8 +- .../source/latex/l3packages/xparse/xparse.dtx | 314 +++++++++++---------- .../latex/l3packages/xtemplate/xtemplate.dtx | 8 +- Master/texmf-dist/tex/latex/l3build/l3build.lua | 17 +- .../tex/latex/l3build/regression-test.tex | 13 +- .../tex/latex/l3experimental/l3sort/l3sort.sty | 6 +- .../tex/latex/l3experimental/l3str/l3flag.sty | 6 +- .../latex/l3experimental/l3str/l3regex-trace.sty | 6 +- .../tex/latex/l3experimental/l3str/l3regex.sty | 6 +- .../tex/latex/l3experimental/l3str/l3tl-build.sty | 6 +- .../tex/latex/l3experimental/xgalley/l3galley.sty | 6 +- .../texmf-dist/tex/latex/l3kernel/expl3-code.tex | 284 ++++++++++++++++++- .../tex/latex/l3kernel/expl3-generic.tex | 4 +- Master/texmf-dist/tex/latex/l3kernel/expl3.sty | 4 +- .../tex/latex/l3packages/l3keys2e/l3keys2e.sty | 8 +- .../tex/latex/l3packages/xfrac/xfrac.sty | 8 +- .../tex/latex/l3packages/xparse/xparse.sty | 209 +++++++------- .../tex/latex/l3packages/xtemplate/xtemplate.sty | 8 +- 60 files changed, 1179 insertions(+), 354 deletions(-) create mode 100644 Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx (limited to 'Master/texmf-dist') diff --git a/Master/texmf-dist/doc/latex/l3build/README.md b/Master/texmf-dist/doc/latex/l3build/README.md index 25e61914e1a..305a46083e1 100644 --- a/Master/texmf-dist/doc/latex/l3build/README.md +++ b/Master/texmf-dist/doc/latex/l3build/README.md @@ -1,7 +1,7 @@ l3build: a testing and building system for LaTeX3 ================================================= -Release 2016/10/19 (r6730) +Release 2016/11/21 (r6760) Overview -------- diff --git a/Master/texmf-dist/doc/latex/l3build/l3build.pdf b/Master/texmf-dist/doc/latex/l3build/l3build.pdf index a776bec1b1c..e330ede3bdc 100644 Binary files a/Master/texmf-dist/doc/latex/l3build/l3build.pdf and b/Master/texmf-dist/doc/latex/l3build/l3build.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/README.md b/Master/texmf-dist/doc/latex/l3experimental/README.md index 577c35d8174..f14aae56a5c 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/README.md +++ b/Master/texmf-dist/doc/latex/l3experimental/README.md @@ -1,7 +1,7 @@ Experimental LaTeX3 Concepts ============================ -Release 2016/10/19 (r6730) +Release 2016/11/21 (r6760) Overview -------- diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdf index 0b5b3a6ceb5..8ac45e6991f 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdf index 8b40328f04f..20a152f8bd4 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdf index 884a9c948ff..6f8730eca26 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf index d71b03cec0b..e75b02d3fd3 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf index 77d64199cfd..8c378d93b70 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdf index a9b6c710495..ba43942bb36 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdf index 3e1d77f8653..83da622bfde 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf b/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf index e55ad481de5..abff9703f97 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf and b/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf b/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf index 6368d39a242..6642a02ff7d 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf and b/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf b/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf index 1d4d1115069..d528c13a516 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf and b/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/README.md b/Master/texmf-dist/doc/latex/l3kernel/README.md index c4d6de44cbc..9462be6899f 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/README.md +++ b/Master/texmf-dist/doc/latex/l3kernel/README.md @@ -1,7 +1,7 @@ LaTeX3 Programming Conventions ============================== -Release 2016/10/19 (r6730) +Release 2016/11/21 (r6760) Overview -------- diff --git a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf index 897b97c1479..d523b9ccd3d 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf and b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf index d3d49079f29..49025ff83f0 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf and b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf index 9348e56c1c2..3c87b964eff 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf index 1d6b913d694..118c5fa258e 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf index 4fa9b98d8e8..10f178d5220 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf index 03d736f4a66..9b7b9894369 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf and b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3body.tex b/Master/texmf-dist/doc/latex/l3kernel/source3body.tex index 2b498b75757..f80c669d096 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/source3body.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/source3body.tex @@ -448,6 +448,7 @@ used on top of \LaTeXe{} if \cs{outer} tokens are used in the arguments. l3fp-expo.dtx , l3fp-trig.dtx , l3fp-convert.dtx , + l3fp-random.dtx , l3fp-assign.dtx , } \ExplSyntaxOff diff --git a/Master/texmf-dist/doc/latex/l3packages/README.md b/Master/texmf-dist/doc/latex/l3packages/README.md index 5de343d129d..d6d25e27056 100644 --- a/Master/texmf-dist/doc/latex/l3packages/README.md +++ b/Master/texmf-dist/doc/latex/l3packages/README.md @@ -1,7 +1,7 @@ LaTeX3 High-Level Concepts ========================== -Release 2016/10/19 (r6730) +Release 2016/11/21 (r6760) Overview -------- diff --git a/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf b/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf index 68d782b92ab..299041b0ff3 100644 Binary files a/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf and b/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf b/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf index e7e619f682a..27b79c8f99a 100644 Binary files a/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf and b/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf b/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf index c31718eb370..e8c6311e5c4 100644 Binary files a/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf and b/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf b/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf index af89621cbbe..d8e981ca07e 100644 Binary files a/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf and b/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf differ diff --git a/Master/texmf-dist/source/latex/l3build/l3build.dtx b/Master/texmf-dist/source/latex/l3build/l3build.dtx index 5f1f5fb3c54..8f1d7b1c0de 100644 --- a/Master/texmf-dist/source/latex/l3build/l3build.dtx +++ b/Master/texmf-dist/source/latex/l3build/l3build.dtx @@ -39,8 +39,8 @@ \RequirePackage{expl3} \def\ExplFileName{l3build} \def\ExplFileDescription{L3 Regression test suite} -\def\ExplFileDate{2016/10/19} -\def\ExplFileVersion{6730} +\def\ExplFileDate{2016/11/21} +\def\ExplFileVersion{6760} \documentclass[full]{l3doc} \renewcommand\partname{Part} \usepackage{multicol,needspace} @@ -1324,7 +1324,6 @@ % in before the test starts. The necessary code should be placed in a % file |regression-test.cfg|. % \begin{macrocode} -\OMIT \ifx\InputIfFileExists\@undefined \newread\@inputcheck \long\def\InputIfFileExists#1#2#3{% @@ -1339,7 +1338,21 @@ \fi \InputIfFileExists{regression-test.cfg} {\LONGTYPEOUT{^^J***^^Jregression-test.cfg in operation^^J***^^J}}{} -\TIMO +% \end{macrocode} +% +% Load the map file early so it does not appear in the log. +% \begin{macrocode} +\ifdefined\pdfoutput + \ifnum\pdfoutput>0 % + \pdfmapfile{pdftex.map}% + \fi +\else + \ifdefined\outputmode + \ifnum\outputmode>0 % + \pdfextension mapfile{pdftex.map}% + \fi + \fi +\fi % \end{macrocode} % % \subsection{Formatting the \texttt{.log} file} diff --git a/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx b/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx index ed4eb58736d..e94691c1f4e 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx @@ -37,8 +37,8 @@ %<*driver|package> % The version of expl3 required is tested as early as possible, as % some really old versions do not define \ProvidesExplPackage. -\RequirePackage{expl3}[2016/10/19] -%\@ifpackagelater{expl3}{2016/10/19} +\RequirePackage{expl3}[2016/11/21] +%\@ifpackagelater{expl3}{2016/11/21} % {} % {% % \PackageError{l3sort}{Support package l3kernel too old} @@ -50,7 +50,7 @@ % }% % \endinput % } -\GetIdInfo$Id: l3sort.dtx 6730 2016-10-19 11:19:38Z joseph $ +\GetIdInfo$Id: l3sort.dtx 6760 2016-11-21 20:35:31Z joseph $ {L3 Experimental sorting functions} % %<*driver> diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx index 446504ae65b..e3890c04222 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx @@ -36,8 +36,8 @@ %<*driver|package> % The version of expl3 required is tested as early as possible, as % some really old versions do not define \ProvidesExplPackage. -\RequirePackage{expl3}[2016/10/19] -%\@ifpackagelater{expl3}{2016/10/19} +\RequirePackage{expl3}[2016/11/21] +%\@ifpackagelater{expl3}{2016/11/21} % {} % {% % \PackageError{l3flag}{Support package l3kernel too old} @@ -49,7 +49,7 @@ % }% % \endinput % } -\GetIdInfo$Id: l3flag.dtx 6730 2016-10-19 11:19:38Z joseph $ +\GetIdInfo$Id: l3flag.dtx 6760 2016-11-21 20:35:31Z joseph $ {L3 Experimental flags} % %<*driver> diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx index 41969971c69..c70b9f7c558 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx @@ -36,8 +36,8 @@ %<*driver|package> % The version of expl3 required is tested as early as possible, as % some really old versions do not define \ProvidesExplPackage. -\RequirePackage{expl3}[2016/10/19] -%\@ifpackagelater{expl3}{2016/10/19} +\RequirePackage{expl3}[2016/11/21] +%\@ifpackagelater{expl3}{2016/11/21} % {} % {% % \PackageError{l3regex}{Support package l3kernel too old} @@ -49,7 +49,7 @@ % }% % \endinput % } -\GetIdInfo$Id: l3regex.dtx 6730 2016-10-19 11:19:38Z joseph $ +\GetIdInfo$Id: l3regex.dtx 6760 2016-11-21 20:35:31Z joseph $ {L3 Experimental regular expressions} % %<*driver> diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx index 50a67c3858f..5dbea913085 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx @@ -36,8 +36,8 @@ %<*driver|package> % The version of expl3 required is tested as early as possible, as % some really old versions do not define \ProvidesExplPackage. -\RequirePackage{expl3}[2016/10/19] -%\@ifpackagelater{expl3}{2016/10/19} +\RequirePackage{expl3}[2016/11/21] +%\@ifpackagelater{expl3}{2016/11/21} % {} % {% % \PackageError{l3tl-build}{Support package l3kernel too old} @@ -49,7 +49,7 @@ % }% % \endinput % } -\GetIdInfo$Id: l3tl-build.dtx 6730 2016-10-19 11:19:38Z joseph $ +\GetIdInfo$Id: l3tl-build.dtx 6760 2016-11-21 20:35:31Z joseph $ {L3 Experimental token list construction} % %<*driver> diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx index 70147a113d9..e96b5b65cdd 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx @@ -38,8 +38,8 @@ %<*driver|package> % The version of expl3 required is tested as early as possible, as % some really old versions do not define \ProvidesExplPackage. -\RequirePackage{expl3}[2016/10/19] -%\@ifpackagelater{expl3}{2016/10/19} +\RequirePackage{expl3}[2016/11/21] +%\@ifpackagelater{expl3}{2016/11/21} % {} % {% % \PackageError{l3galley}{Support package l3kernel too old} @@ -51,7 +51,7 @@ % }% % \endinput % } -\GetIdInfo$Id: l3galley.dtx 6730 2016-10-19 11:19:38Z joseph $ +\GetIdInfo$Id: l3galley.dtx 6760 2016-11-21 20:35:31Z joseph $ {L3 Experimental galley code} % %<*driver> diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx index 4a37d2c3c4e..0c1b6727074 100644 --- a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx @@ -36,8 +36,8 @@ %<*driver|generic|package> \def\ExplFileName{expl3}% \def\ExplFileDescription{L3 programming layer}% -\def\ExplFileDate{2016/10/19}% -\def\ExplFileVersion{6730}% +\def\ExplFileDate{2016/11/21}% +\def\ExplFileVersion{6760}% % %<*driver> \documentclass[full]{l3doc} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3.ins b/Master/texmf-dist/source/latex/l3kernel/l3.ins index c1d041943b0..a60eb19398c 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3.ins +++ b/Master/texmf-dist/source/latex/l3kernel/l3.ins @@ -71,6 +71,7 @@ Do not distribute a modified version of this file. \from{l3fp-expo.dtx} {package} \from{l3fp-trig.dtx} {package} \from{l3fp-convert.dtx} {package} + \from{l3fp-random.dtx} {package} \from{l3fp-assign.dtx} {package} \from{l3box.dtx} {package} \from{l3coffins.dtx} {package} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3format.ins b/Master/texmf-dist/source/latex/l3kernel/l3format.ins index 30bfd609096..1e38ca555f3 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3format.ins +++ b/Master/texmf-dist/source/latex/l3kernel/l3format.ins @@ -71,6 +71,7 @@ Do not distribute a modified version of this file. \from{l3fp-expo.dtx} {initex} \from{l3fp-trig.dtx} {initex} \from{l3fp-convert.dtx} {initex} + \from{l3fp-random.dtx} {initex} \from{l3fp-assign.dtx} {initex} \from{l3box.dtx} {initex} \from{l3coffins.dtx} {initex} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx index ce51a27a8d5..519a63fd6d9 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx @@ -36,7 +36,7 @@ % %<*driver> \documentclass[full]{l3doc} -\GetIdInfo$Id: l3fp-aux.dtx 6685 2016-08-19 16:26:52Z bruno $ +\GetIdInfo$Id: l3fp-aux.dtx 6750 2016-11-21 01:24:26Z bruno $ {L3 Floating-point support functions} \documentclass[full]{l3doc} \begin{document} @@ -939,6 +939,43 @@ % \end{macrocode} % \end{macro} % +% \subsection{Integer floating points} +% +% \begin{macro}[int, EXP, pTF]{\@@_int:w} +% \begin{macro}[aux, EXP]{\@@_int_normal:nnnnn, \@@_int_test:Nw} +% Tests if the floating point argument is an integer. This holds if +% the rounding digit resulting from \cs{@@_decimate:nNnnnn} is~$0$. +% \begin{macrocode} +\prg_new_conditional:Npnn \@@_int:w \s_@@ \@@_chk:w #1 #2 #3; { TF , T , F , p } + { + \if_case:w #1 \exp_stop_f: + \prg_return_true: + \or: \@@_int_normal:nnnnn #3 + \else: \prg_return_false: + \fi: + } +\cs_new:Npn \@@_int_normal:nnnnn #1 #2#3#4#5 + { + \if_int_compare:w #1 > \c_zero + \@@_decimate:nNnnnn { \c_sixteen - #1 } + \@@_int_test:Nw + {#2} {#3} {#4} {#5} + \else: + \prg_return_false: + \fi: + } +\cs_new:Npn \@@_int_test:Nw #1#2; + { + \if_meaning:w 0 #1 + \prg_return_true: + \else: + \prg_return_false: + \fi: + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% % \subsection{Small integer floating points} % % \begin{macro}[int, EXP]{\@@_small_int:wTF} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx index 40691eeeff3..68282396cce 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx @@ -36,7 +36,7 @@ % %<*driver> \documentclass[full]{l3doc} -\GetIdInfo$Id: l3fp-logic.dtx 6659 2016-08-15 15:37:48Z bruno $ +\GetIdInfo$Id: l3fp-logic.dtx 6759 2016-11-21 17:04:08Z joseph $ {L3 Floating-point conditionals} \begin{document} \DocInput{\jobname.dtx} @@ -316,6 +316,74 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}[EXP]{\fp_step_function:nnnN, \fp_step_function:nnnc} +% \begin{macro}[EXP, aux]{\@@_step:wwwN} +% \begin{macro}[EXP, aux]{\@@_step:NnnnN, \@@_step:NfnnN} +% The approach here is much the same as \cs{int_step_function:nnnN} except we +% do not have a convenient low-level way to evaluation each argument to give +% a pure number. Instead, the internal parser is used to leave values in the +% internal format (and avoid a more expensive \texttt{f}-type expansion of +% multiple uses of \texttt{fp_eval:n}). +% \begin{macrocode} +\cs_new:Npn \fp_step_function:nnnN #1#2#3 + { + \exp_after:wN \@@_step:wwwN + \exp:w \exp_end_continue_f:w \@@_parse_o:n {#1} : + \exp:w \exp_end_continue_f:w \@@_parse_o:n {#2} : + \exp:w \exp_end_continue_f:w \@@_parse:n {#3} : + } +\cs_generate_variant:Nn \fp_step_function:nnnN { nnnc } +% \end{macrocode} +% Here, |#1| will be passed to the output on the first pass of the loop. +% To avoid this being in internal form, an \texttt{f}-type expansion is used +% here on that value only. The second and third arguments will be converted +% during the loop itself. +% \begin{macrocode} +\cs_new:Npn \@@_step:wwwN #1 : #2 : #3 : #4 + { + \fp_compare:nNnTF {#2} > 0 + { \@@_step:NfnnN > } + { + \fp_compare:nNnTF {#2} = 0 + { + \__msg_kernel_expandable_error:nnn { kernel } { zero-step } {#4} + \use_none:nnnn + } + { \@@_step:NfnnN < } + } + { \fp_eval:n {#1} } {#2} {#3} #4 + } + +\cs_new:Npn \@@_step:NnnnN #1#2#3#4#5 + { + \fp_compare:nNnF {#2} #1 {#4} + { + #5 {#2} + \@@_step:NfnnN + #1 { \fp_eval:n { #2 + #3 } } {#3} {#4} #5 + } + } +\cs_generate_variant:Nn \@@_step:NnnnN { Nf } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\fp_step_inline:nnnn} +% As for \cs{int_step_inline:nnnn}, create a global function and apply it, +% following up with a break point. +% \begin{macrocode} +\cs_new_protected:Npn \fp_step_inline:nnnn #1#2#3#4 + { + \int_gincr:N \g__prg_map_int + \cs_gset_protected:cpn { __prg_map_ \int_use:N \g__prg_map_int :w } + ##1 {#4} + \fp_step_function:nnnc {#1} {#2} {#3} + { __prg_map_ \int_use:N \g__prg_map_int :w } + \__prg_break_point:Nn \scan_stop: { \int_gdecr:N \g__prg_map_int } + } +% \end{macrocode} +% \end{macro} +% % \subsection{Extrema} % % \begin{macro}[int, EXP]{\@@_minmax_o:Nw} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx index d3dbf085569..339595c6d2e 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx @@ -36,7 +36,7 @@ % %<*driver> \documentclass[full]{l3doc} -\GetIdInfo$Id: l3fp-parse.dtx 6685 2016-08-19 16:26:52Z bruno $ +\GetIdInfo$Id: l3fp-parse.dtx 6750 2016-11-21 01:24:26Z bruno $ {L3 Floating-point expression parsing} \begin{document} \DocInput{\jobname.dtx} @@ -91,6 +91,8 @@ % in the input stream as an internal floating point number. This % function forms the basis of almost all public \pkg{l3fp} functions. % During evaluation, each token is fully \texttt{f}-expanded. +% +% \cs{@@_parse_o:n} does the same but expands once after its result. % \begin{texnote} % Registers (integers, toks, etc.) are automatically unpacked, % without requiring a function such as \cs{int_use:N}. Invalid @@ -821,7 +823,7 @@ % integer registers from dimensions/skips from muskips, according to % the presence of a period and/or of |pt|. For integers, simply % convert \meta{value}|e|\meta{exponent} to a floating point number -% with \cs{fp_parse:n} (this is somewhat wasteful). For other +% with \cs{@@_parse:n} (this is somewhat wasteful). For other % registers, the decimal rounding provided by \TeX{} does not % accurately represent the binary value that it manipulates, so we % extract this binary value as a number of scaled points with @@ -1783,8 +1785,8 @@ % {\@@_parse_prefix_(:Nw, \@@_parse_lparen_after:NwN} % The left parenthesis is treated as a unary prefix operator because % it appears in exactly the same settings. Commas will be allowed if -% the previous precedence is $16$ (function with multiple arguments) -% or $13$ (unary boolean \enquote{not}). In this case, find an +% the previous precedence is $16$ (function with multiple arguments). +% In this case, find an % operand using the precedence~$1$; otherwise the precedence~$0$. % Once the operand is found, the \texttt{lparen_after} auxiliary makes % sure that there was a closing parenthesis (otherwise it complains), @@ -1825,6 +1827,42 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}[aux, EXP, verb]{\@@_parse_prefix_,:Nw} +% \begin{macro}[aux, EXP]{\@@_parse_prefix_):Nw} +% The right parenthesis and the comma can appear as unary prefixes +% when an argument of a multi-argument function is missing (for +% instance the first and last ones in |max(,1,2,)| or in |rand()|). +% In single-argument functions (precedence~$0$ rather than~$1$) forbid +% this. +% \begin{macrocode} +\cs_new:cpn { @@_parse_prefix_,:Nw } #1 + { + \if_int_compare:w #1 = \c_one + \exp_after:wN \@@_parse_one:Nw + \exp_after:wN #1 + \else: + \__msg_kernel_expandable_error:nnn + { kernel } { fp-missing-number } { , } + \exp_after:wN \c_nan_fp \exp:w \exp_end_continue_f:w + \exp_after:wN \@@_parse_infix:NN + \exp_after:wN #1 + \exp_after:wN , + \fi: + } +\cs_new:cpn { @@_parse_prefix_):Nw } #1 + { + \if_int_compare:w #1 = \c_one + \else: + \__msg_kernel_expandable_error:nnn + { kernel } { fp-missing-number } { ) } + \exp_after:wN \c_nan_fp \exp:w \exp_end_continue_f:w + \fi: + \@@_parse_infix:NN #1 ) + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% % \subsubsection{Constants} % % \begin{macro}[aux, EXP] @@ -1939,9 +1977,11 @@ % \@@_parse_word_acot:N , \@@_parse_word_acotd:N, % \@@_parse_word_atan:N , \@@_parse_word_atand:N, % \@@_parse_word_max:N , \@@_parse_word_min:N , +% \@@_parse_word_rand:N , \@@_parse_word_randint:N, % } % Those functions are also unary (not binary), but may receive a % variable number of arguments. +% For |randint| we don't use the first argument~|?|. % \begin{macrocode} \cs_new:Npn \@@_parse_word_acot:N { \@@_parse_function:NNN \@@_acot_o:Nw \use_i:nn } @@ -1955,6 +1995,10 @@ { \@@_parse_function:NNN \@@_minmax_o:Nw 2 } \cs_new:Npn \@@_parse_word_min:N { \@@_parse_function:NNN \@@_minmax_o:Nw 0 } +\cs_new:Npn \@@_parse_word_rand:N + { \@@_parse_function:NNN \@@_rand_o:Nw ? } +\cs_new:Npn \@@_parse_word_randint:N + { \@@_parse_function:NNN \@@_randint_o:Nw ? } % \end{macrocode} % \end{macro} % @@ -2088,6 +2132,18 @@ % \end{macro} % \end{macro} % +% \begin{macro}[int, EXP]{\@@_parse_o:n} +% ^^A todo: optimize, comment, make it work for arrays. +% \begin{macrocode} +\cs_new:Npn \@@_parse_o:n #1 + { + \exp_after:wN \exp_after:wN + \exp_after:wN \@@_exp_after_o:w + \@@_parse:n {#1} + } +% \end{macrocode} +% \end{macro} +% % \begin{macro}[aux, EXP]{\@@_parse_operand:Nw} % \begin{macro}[aux, EXP]{\@@_parse_continue:NwN} % The \cs{@@_parse_operand} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx new file mode 100644 index 00000000000..e2708e193fc --- /dev/null +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx @@ -0,0 +1,266 @@ +% \iffalse meta-comment +% +%% File: l3fp-random.dtx Copyright (C) 2016 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 +%% +%% http://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 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> +\documentclass[full]{l3doc} +\GetIdInfo$Id: l3fp-random.dtx 6750 2016-11-21 01:24:26Z bruno $ + {L3 Floating-point random numbers} +\begin{document} + \DocInput{\jobname.dtx} +\end{document} +% +% \fi +% +% \title{The \textsf{l3fp-random} package\thanks{This file +% has version number \ExplFileVersion, last +% revised \ExplFileDate.}\\ +% Floating point random numbers} +% \author{^^A +% The \LaTeX3 Project\thanks +% {^^A +% E-mail: +% \href{mailto:latex-team@latex-project.org} +% {latex-team@latex-project.org}^^A +% }^^A +% } +% \date{Released \ExplFileDate} +% +% \maketitle +% +% \begin{documentation} +% +% \end{documentation} +% +% \begin{implementation} +% +% \section{\pkg{l3fp-random} Implementation} +% +% \begin{macrocode} +%<*initex|package> +% \end{macrocode} +% +% \begin{macrocode} +%<@@=fp> +% \end{macrocode} +% +% \subsection{Random floating point} +% +% \begin{macro}[EXP, int]{\@@_rand_o:Nw} +% \begin{macro}[EXP, aux]{\@@_rand_o:} +% Check that |random| was called without argument. Random numbers are +% only available if the engine defines a primitive equivalent to +% \pdfTeX{}'s \tn{pdfuniformdeviate}. A random floating point number +% in $[0,1)$, uniformly distributed with equal-spaced steps of +% $10^{-16}$ is obtained by combining two integers in $[0,10^8-1]$. +% \begin{macrocode} +\cs_new:Npn \@@_rand_o:Nw ? #1 @ + { + \tl_if_empty:nTF {#1} + { \@@_rand_o: } + { + \__msg_kernel_expandable_error:nnnnn + { kernel } { fp-num-args } { rand() } { 0 } { 0 } + \exp_after:wN \c_nan_fp + } + } +\cs_if_exist:NTF \pdftex_uniformdeviate:D + { + \cs_new:Npn \@@_rand_o: + { + \@@_parse_o:n + { + . + \exp_after:wN \use_none:n + \__int_value:w \__int_eval:w 1 0000 0000 + + \pdftex_uniformdeviate:D 1 0000 0000 \__int_eval_end: + \exp_after:wN \use_none:n + \__int_value:w \__int_eval:w 1 0000 0000 + + \pdftex_uniformdeviate:D 1 0000 0000 \__int_eval_end: + } + } + } + { + \cs_new:Npn \@@_rand_o: + { + \__msg_kernel_expandable_error:nn { kernel } { fp-no-random } + \exp_after:wN \c_nan_fp + } + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{Random integer} +% +% \begin{macro}[EXP, int]{\@@_randint_o:Nw} +% \begin{macro}[EXP, aux] +% { +% \@@_randint_badarg:w, +% \@@_randint_e:w, +% \@@_randint_narrow_e:nn, +% \@@_randint_wide_e:nn, +% \@@_randint_wide_e:nnn, +% \@@_randint_wide_e:nnnn, +% } +% Enforce that there is one argument (then add first argument~$1$) +% or two arguments. Enforce that they are integers in +% $(-10^{16},10^{16})$ and ordered. +% +% When the range is narrow (less than $2\times 10^9$) we can +% directly use the primitive. Otherwise we use the primitive twice. +% To ensure a uniform distribution we combine two uniformly +% distributed integers into a total range greater or equal to our +% target range and try again if the random number ended up being too +% big. +% +% The strange |+\c_six| ensures that the first argument of +% \cs{@@_randint_wide_e:nnn} is larger than $10^{-8}$ times the +% difference between the end-points even if these are near +% $-10^{16}$ and $+10^{16}$ (their difference is rounded to sixteen +% digits). Note that we cannot just concatenate the two random +% numbers provided by the engine as that may give an integer up to +% (almost) $2\times 10^{16}$ which incurs rounding. +% \begin{macrocode} +\cs_new:Npn \@@_randint_o:Nw ? #1 @ + { + \if_case:w + \__int_eval:w \@@_array_count:n {#1} - \c_one \__int_eval_end: + \exp_after:wN \@@_randint_e:w \c_one_fp #1 + \or: \@@_randint_e:w #1 + \else: + \__msg_kernel_expandable_error:nnnnn + { kernel } { fp-num-args } { randint() } { 1 } { 2 } + \exp_after:wN \c_nan_fp \exp:w + \fi: + \exp_after:wN \exp_end: + } +\cs_new:Npn \@@_randint_badarg:w \s_@@ \@@_chk:w #1#2#3; + { + \@@_int:wTF \s_@@ \@@_chk:w #1#2#3; + { + \if_meaning:w 1 #1 + \if_int_compare:w + \use_i_delimit_by_q_stop:nw #3 \q_stop > \c_sixteen + \exp_after:wN \c_one + \fi: + \fi: + } + { \c_one } + } +\cs_new:Npn \@@_randint_e:w #1; #2; + { + \if_case:w + \@@_randint_badarg:w #1; + \@@_randint_badarg:w #2; + \fp_compare:nNnTF { #1; } > { #2; } { \c_one } { \c_zero } + \fp_compare:nNnTF { #1; + 2e9 } < { #2; } + { \@@_randint_wide_e:nn } + { \@@_randint_narrow_e:nn } + { #1; } { #2; } + \or: + \@@_invalid_operation_tl_o:ff + { randint } { \@@_array_to_clist:n { #1; #2; } } + \exp:w + \fi: + } +\cs_if_exist:NTF \pdftex_uniformdeviate:D + { + \cs_new:Npn \@@_randint_narrow_e:nn #1#2 + { + \@@_parse_o:n + { + #1 + + \pdftex_uniformdeviate:D + \int_eval:n { \fp_to_int:n { #2 - #1 } + \c_one } + } + \exp:w + } + \cs_new:Npn \@@_randint_wide_e:nn #1 #2 + { + \exp_args:Nf \@@_randint_wide_e:nnn + { \fp_to_int:n { ceil ( ( #2 - #1 + \c_six ) * 1e-8 ) } } + {#1} {#2} + } + \cs_new:Npn \@@_randint_wide_e:nnn #1#2#3 + { + \exp_args:Nf \@@_randint_wide_e:nnnn + { + \@@_parse:n + { + #2 + + \pdftex_uniformdeviate:D #1 e 8 + + \pdftex_uniformdeviate:D 1 0000 0000 + } + } + {#1} {#2} {#3} + } + \cs_new:Npn \@@_randint_wide_e:nnnn #1#2#3#4 + { + \fp_compare:nNnTF {#1} > {#4} + { \@@_randint_wide_e:nnn {#2} {#3} {#4} } + { \@@_exp_after_o:w #1 \exp:w } + } + } + { + \cs_new:Npn \@@_randint_narrow_e:nn #1#2 + { + \__msg_kernel_expandable_error:nn { kernel } { fp-no-random } + \exp_after:wN \c_nan_fp \exp:w + } + \cs_new:Npn \@@_randint_wide_e:nn #1#2 + { + \__msg_kernel_expandable_error:nn { kernel } { fp-no-random } + \exp_after:wN \c_nan_fp \exp:w + } + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +\__msg_kernel_new:nnn { kernel } { fp-no-random } + { Random~numbers~unavailable } +% \end{macrocode} +% +% \begin{macrocode} +% +% \end{macrocode} +% +% \end{implementation} +% +% \PrintChanges +% +% \PrintIndex diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx index cc6299b8dfd..899c1a3bd6b 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx @@ -36,7 +36,7 @@ % %<*driver> \documentclass[full]{l3doc} -\GetIdInfo$Id: l3fp-round.dtx 6441 2016-03-24 10:11:59Z joseph $ +\GetIdInfo$Id: l3fp-round.dtx 6750 2016-11-21 01:24:26Z bruno $ {L3 Floating-point rounding} \begin{document} \DocInput{\jobname.dtx} @@ -350,6 +350,7 @@ % % ^^A todo: This macro is intermingled with l3fp-parse. % ^^A todo: Add explanations. +% ^^A todo: This macro f-expands rather than o-expands after itself, is that an issue? % \begin{macro}[aux,EXP]{\@@_round_o:Nw} % The |trunc|, |ceil| and |floor| functions expect one or two % arguments (the second is $0$ by default), and the |round| function @@ -360,8 +361,9 @@ \cs_new:Npn \@@_round_o:Nw #1#2 @ { \if_case:w - \__int_eval:w \@@_array_count:n {#2} - \c_one \__int_eval_end: - \@@_round:Nwn #1 #2 {0} \exp:w + \__int_eval:w \@@_array_count:n {#2} \__int_eval_end: + \@@_round_no_arg_o:Nw #1 \exp:w + \or: \@@_round:Nwn #1 #2 {0} \exp:w \or: \@@_round:Nww #1 #2 \exp:w \else: \@@_round:Nwww #1 #2 @ \exp:w \fi: @@ -370,6 +372,21 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}[aux, EXP]{\@@_round_no_arg_o:Nw} +% \begin{macrocode} +\cs_new:Npn \@@_round_no_arg_o:Nw #1 + { + \cs_if_eq:NNTF #1 \@@_round_to_nearest:NNN + { \@@_error:nnnn { num-args } { round () } { 1 } { 3 } } + { + \@@_error:nffn { num-args } + { \@@_round_name_from_cs:N #1 () } { 1 } { 2 } + } + \exp_after:wN \c_nan_fp + } +% \end{macrocode} +% \end{macro} +% % \begin{macro}[aux, EXP]{\@@_round:Nwww} % Having three arguments is only allowed for |round|, not |trunc|, % |ceil|, |floor|, so check for that case. If all is well, construct diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx index 3b1843e9b43..2cbbe3e2cb6 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx @@ -38,7 +38,7 @@ \documentclass[full]{l3doc} % %<*driver|package> -\GetIdInfo$Id: l3fp.dtx 6685 2016-08-19 16:26:52Z bruno $ +\GetIdInfo$Id: l3fp.dtx 6761 2016-11-21 21:48:43Z joseph $ {L3 Floating points} % %<*driver> @@ -91,6 +91,7 @@ % \item Boolean logic: negation $\mathop{!}x$, conjunction % $x\mathop{\&\&}y$, disjunction $x\mathop{\vert\vert}y$, ternary % operator $x\mathop{?}y\mathop{:}z$. +% \item Random numbers: $\mathop{rand}()$, $\mathop{randint}(m,n)$. % \item Exponentials: $\exp x$, $\ln x$, $x^y$. % \item Trigonometry: $\sin x$, $\cos x$, $\tan x$, $\cot x$, $\sec % x$, $\csc x$ expecting their arguments in radians, and @@ -540,6 +541,50 @@ % \texttt{false}. % \end{function} % +% \begin{function}[added = 2016-11-21, rEXP] +% {\fp_step_function:nnnN} +% \begin{syntax} +% \cs{fp_step_function:nnnN} \Arg{initial value} \Arg{step} \Arg{final value} \meta{function} +% \end{syntax} +% This function first evaluates the \meta{initial value}, \meta{step} +% and \meta{final value}, all of which should be floating point expressions. +% The \meta{function} is then placed in front of each \meta{value} +% from the \meta{initial value} to the \meta{final value} in turn +% (using \meta{step} between each \meta{value}). The \meta{step} must +% be non-zero. If the \meta{step} is positive, the loop stops when +% the \meta{value} becomes larger than the \meta{final value}. If the +% \meta{step} is negative, the loop stops when the \meta{value} +% becomes smaller than the \meta{final value}. The \meta{function} +% should absorb one numerical argument. For example +% \begin{verbatim} +% \cs_set:Npn \my_func:n #1 { [I~saw~#1] \quad } +% \fp_step_function:nnnN { 1.0 } { 0.1 } { 1.5 } \my_func:n +% \end{verbatim} +% would print +% \begin{quote} +% [I saw 1.0] \quad +% [I saw 1.1] \quad +% [I saw 1.2] \quad +% [I saw 1.3] \quad +% [I saw 1.4] \quad +% [I saw 1.5] \quad +% \end{quote} +% \end{function} +% +% \begin{function}[added = 2016-11-21] +% {\fp_step_inline:nnnn} +% \begin{syntax} +% \cs{fp_step_inline:nnnn} \Arg{initial value} \Arg{step} \Arg{final value} \Arg{code} +% \end{syntax} +% This function first evaluates the \meta{initial value}, \meta{step} +% and \meta{final value}, all of which should be floating point expressions. +% Then for each \meta{value} from the \meta{initial value} to the +% \meta{final value} in turn (using \meta{step} between each +% \meta{value}), the \meta{code} is inserted into the input stream +% with |#1| replaced by the current \meta{value}. Thus the +% \meta{code} should define a function of one argument~(|#1|). +% \end{function} +% % \section{Some useful constants, and scratch variables} % % \begin{variable}[added = 2012-05-08]{\c_zero_fp, \c_minus_zero_fp} @@ -1135,6 +1180,35 @@ % $\sqrt{\text{\nan{}}}=\text{\nan{}}$. % \end{function} % +% \begin{function}[added = 2016-11-20]{rand} +% \begin{syntax} +% \cs{fp_eval:n} \{ |rand()| \} +% \end{syntax} +% Produces a pseudo-random floating-point number (multiple of +% $10^{-16}$) between $0$~included and $1$~excluded. +% \begin{texnote} +% This is a wrapper around \tn{pdfuniformdeviate}. The random seed +% can be queried using \tn{pdfrandomseed} and set using +% \tn{pdfsetrandomseed}. +% \end{texnote} +% \end{function} +% +% \begin{function}[added = 2016-11-20]{randint} +% \begin{syntax} +% \cs{fp_eval:n} \{ |randint(| \meta{fpexpr} |)| \} +% \cs{fp_eval:n} \{ |randint(| \meta{fpexpr_1} , \meta{fpexpr_2} |)| \} +% \end{syntax} +% Produces a pseudo-random integer between $1$~and \meta{fpexpr} or +% between \meta{fpexpr_1} and \meta{fpexpr_2} inclusive. The bounds +% must be integers in the range $(-10^{16},10^{16})$ and the first +% must be smaller or equal to the second. +% \begin{texnote} +% This is a wrapper around \tn{pdfuniformdeviate}. The random seed +% can be queried using \tn{pdfrandomseed} and set using +% \tn{pdfsetrandomseed}. +% \end{texnote} +% \end{function} +% % \begin{variable}[tested = m3fp-parse001]{inf, nan} % The special values $+\infty$, $-\infty$, and \nan{} are represented % as \texttt{inf}, \texttt{-inf} and \texttt{nan} (see \cs{c_inf_fp}, diff --git a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx index 017e64c4408..ae2238cef24 100644 --- a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx +++ b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx @@ -37,8 +37,8 @@ %<*driver|package> % The version of expl3 required is tested as early as possible, as % some really old versions do not define \ProvidesExplPackage. -\RequirePackage{expl3}[2016/10/19] -%\@ifpackagelater{expl3}{2016/10/19} +\RequirePackage{expl3}[2016/11/21] +%\@ifpackagelater{expl3}{2016/11/21} % {} % {% % \PackageError{l3keys2e}{Support package l3kernel too old} @@ -52,8 +52,8 @@ % } \def\ExplFileName{l3keys2e} \def\ExplFileDescription{LaTeX2e option processing using LaTeX3 keys} -\def\ExplFileDate{2016/10/19} -\def\ExplFileVersion{6730} +\def\ExplFileDate{2016/11/21} +\def\ExplFileVersion{6760} % %<*driver> \documentclass[full]{l3doc} diff --git a/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx b/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx index ff94447c900..2591d9d4c7b 100644 --- a/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx @@ -38,8 +38,8 @@ %<*driver|package> % The version of expl3 required is tested as early as possible, as % some really old versions do not define \ProvidesExplPackage. -\RequirePackage{expl3}[2016/10/19] -%\@ifpackagelater{expl3}{2016/10/19} +\RequirePackage{expl3}[2016/11/21] +%\@ifpackagelater{expl3}{2016/11/21} % {} % {% % \PackageError{xfrac}{Support package l3kernel too old} @@ -54,8 +54,8 @@ \RequirePackage{amstext,graphicx,l3keys2e,textcomp,xparse,xtemplate} \def\ExplFileName{xfrac} \def\ExplFileDescription{L3 Experimental split-level fractions} -\def\ExplFileDate{2016/10/19} -\def\ExplFileVersion{6730} +\def\ExplFileDate{2016/11/21} +\def\ExplFileVersion{6760} % %<*driver> \documentclass[full]{l3doc} diff --git a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx index 3a142e32fa9..00f10f1c432 100644 --- a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx @@ -41,8 +41,8 @@ %<*driver|package> % The version of expl3 required is tested as early as possible, as % some really old versions do not define \ProvidesExplPackage. -\RequirePackage{expl3}[2016/10/19] -%\@ifpackagelater{expl3}{2016/10/19} +\RequirePackage{expl3}[2016/11/21] +%\@ifpackagelater{expl3}{2016/11/21} % {} % {% % \PackageError{xparse}{Support package l3kernel too old} @@ -56,8 +56,8 @@ % } \def\ExplFileName{xparse} \def\ExplFileDescription{L3 Experimental document command parser} -\def\ExplFileDate{2016/10/19} -\def\ExplFileVersion{6730} +\def\ExplFileDate{2016/11/21} +\def\ExplFileVersion{6760} % %<*driver> \documentclass[full]{l3doc} @@ -195,12 +195,14 @@ % |-NoValue-| if not present. % \item[G] As for \texttt{g} but returns \meta{default} if no value % is given: \texttt{G}\marg{default}. -% \item[k] An optional \emph{key} argument which requires a \emph{value}: -% the key should be a single \meta{token}. If the key is not present, -% returns |-NoValue-|. \emph{This is an experimental type}. -% \item[K] As for \texttt{K} but returns \meta{default} if no value -% is given: \texttt{K}\meta{token}\marg{default}. +% \item[e] An optional set of \emph{embellishments}, each of which requires a +% \emph{value}. If a key is not present, |-NoValue-| is returned. +% The returned data is a token list comprising one braced entry per key, +% ordered as for the key list in the signature. % \emph{This is an experimental type}. +% \item[E] As for \texttt{E} but returns one or more \meta{defaults} +% if values are not given: \texttt{E}\marg{defaults}. See +% Section~\ref{sec:embellishment} for more details. % \end{itemize} % % Using these specifiers, it is possible to create complex input syntax @@ -484,6 +486,25 @@ % take based on this information. % \end{function} % +% \subsection{Default values for \enquote{embellishments}} +% \label{sec:embellishment} +% +% The \texttt{E}-type argument allows one default value per test token. +% This is achieved by giving a list of defaults for each entry in the +% list, for example: +% \begin{verbatim} +% E{^_}{{UP}{DOWN}} +% \end{verbatim} +% If the list of default values is \emph{shorter} than the list of test tokens, +% the special \cs{NoValue} marker will be returned (as for the \texttt{e}-type +% argument). Thus for example +% \begin{verbatim} +% E{^_}{{UP}} +% \end{verbatim} +% has default \texttt{UP} for the |^| test token, but will return the +% \cs{NoValue} marker as a default for |_|. This allows mixing of explicit +% defaults with testing for missing values. +% % \subsection{Argument processors} % \label{sec:processors} % @@ -899,10 +920,12 @@ % \end{macrocode} % \end{variable} % -% \begin{variable}{\l_@@_tmp_tl} +% \begin{variable}{\l_@@_tmp_prop, \l_@@_tmpa_tl, \l_@@_tmpb_tl} % Scratch space. % \begin{macrocode} -\tl_new:N \l_@@_tmp_tl +\prop_new:N \l_@@_tmp_prop +\tl_new:N \l_@@_tmpa_tl +\tl_new:N \l_@@_tmpb_tl % \end{macrocode} % \end{variable} % @@ -1129,8 +1152,8 @@ \cs_new_protected:Npn \@@_count_mandatory:N #1 { \quark_if_recursion_tail_stop:N #1 - \prop_get:NnNTF \c_@@_shorthands_prop {#1} \l_@@_tmp_tl - { \exp_after:wN \@@_count_mandatory:N \l_@@_tmp_tl } + \prop_get:NnNTF \c_@@_shorthands_prop {#1} \l_@@_tmpa_tl + { \exp_after:wN \@@_count_mandatory:N \l_@@_tmpa_tl } { \@@_count_mandatory_aux:N #1 } } \cs_new_protected:Npn \@@_count_mandatory_aux:N #1 @@ -1149,10 +1172,10 @@ % \@@_count_type_+:w, % \@@_count_type_d:w, % \@@_count_type_D:w, +% \@@_count_type_e:w, +% \@@_count_type_E:w, % \@@_count_type_g:w, % \@@_count_type_G:w, -% \@@_count_type_k:w, -% \@@_count_type_K:w, % \@@_count_type_m:w, % \@@_count_type_r:w, % \@@_count_type_R:w, @@ -1202,23 +1225,21 @@ \quark_if_recursion_tail_stop_do:nn {#3} { \@@_bad_arg_spec:wn } \@@_count_mandatory:N } -\cs_new_protected:Npn \@@_count_type_g:w - { \@@_count_mandatory:N } -\cs_new_protected:Npn \@@_count_type_G:w #1 +\cs_new_protected:Npn \@@_count_type_e:w #1 { \quark_if_recursion_tail_stop_do:nn {#1} { \@@_bad_arg_spec:wn } \@@_count_mandatory:N } -\cs_new_protected:Npn \@@_count_type_k:w #1 +\cs_new_protected:Npn \@@_count_type_E:w #1#2 { - \@@_single_token_check:n {#1} - \quark_if_recursion_tail_stop_do:Nn #1 { \@@_bad_arg_spec:wn } + \quark_if_recursion_tail_stop_do:nn {#2} { \@@_bad_arg_spec:wn } \@@_count_mandatory:N } -\cs_new_protected:Npn \@@_count_type_K:w #1#2 +\cs_new_protected:Npn \@@_count_type_g:w + { \@@_count_mandatory:N } +\cs_new_protected:Npn \@@_count_type_G:w #1 { - \@@_single_token_check:n {#1} - \quark_if_recursion_tail_stop_do:nn {#2} { \@@_bad_arg_spec:wn } + \quark_if_recursion_tail_stop_do:nn {#1} { \@@_bad_arg_spec:wn } \@@_count_mandatory:N } \cs_new_protected:Npn \@@_count_type_m:w @@ -1320,8 +1341,8 @@ \cs_new_protected:Npn \@@_prepare_signature_bypass:N #1 { \quark_if_recursion_tail_stop:N #1 - \prop_get:NnNTF \c_@@_shorthands_prop {#1} \l_@@_tmp_tl - { \exp_after:wN \@@_prepare_signature:N \l_@@_tmp_tl } + \prop_get:NnNTF \c_@@_shorthands_prop {#1} \l_@@_tmpa_tl + { \exp_after:wN \@@_prepare_signature:N \l_@@_tmpa_tl } { \int_incr:N \l_@@_current_arg_int \@@_prepare_signature_add:N #1 @@ -1415,6 +1436,23 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\@@_add_type_e:w, \@@_add_type_E:w} +% Setting up for the \texttt{e}-type argument is somewhat specialised as +% the |-NoValue-| tokens are inserted by the grabber rather than here. As +% such, all that is needed is to pass data straight through. +% \begin{macrocode} +\cs_new_protected:Npn \@@_add_type_e:w #1 + { \@@_add_type_E:w {#1} { } } +\cs_new_protected:Npn \@@_add_type_E:w #1#2 + { + \@@_flush_m_args: + \@@_add_grabber_optional:N E + \tl_put_right:Nn \l_@@_signature_tl { {#1} {#2} } + \@@_prepare_signature:N + } +% \end{macrocode} +% \end{macro} +% % \begin{macro}{\@@_add_type_g:w} % The \texttt{g} type is simply an alias for \texttt{G} with the correct % default built-in. @@ -1438,22 +1476,6 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_add_type_k:w, \@@_add_type_K:w} -% Similar to |d|/|D| type but just one token to store. -% \begin{macrocode} -\cs_new_protected:Npn \@@_add_type_k:w #1 - { \exp_args:NNo \@@_add_type_K:w #1 \c_@@_no_value_tl } -\cs_new_protected:Npn \@@_add_type_K:w #1#2 - { - \@@_flush_m_args: - \@@_add_grabber_optional:N K - \tl_put_right:Nn \l_@@_signature_tl { #1 {#2} } - \@@_prepare_signature:N - } -% \end{macrocode} -% \end{macro} -% \end{macro} -% % \begin{macro}{\@@_add_type_l:w} % Finding \texttt{l} arguments is very simple: there is nothing to do % other than add the grabber. @@ -1728,34 +1750,6 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\@@_add_expandable_type_k:w} -% \begin{macro}{\@@_add_expandable_type_K:w} -% \begin{macrocode} -\cs_new_protected:Npn \@@_add_expandable_type_k:w #1 - { - \exp_args:NNo - \@@_add_expandable_type_K:w #1 \c_@@_no_value_tl - } -\cs_new_protected:Npn \@@_add_expandable_type_K:w #1#2 - { - \@@_add_expandable_grabber_optional:n { K } - \bool_if:NTF \l_@@_all_long_bool - { \cs_set:cpx } - { \cs_set_nopar:cpx } - { \l_@@_expandable_aux_name_tl } ##1 #1 ##2 - { ##1 {##2} } - \tl_put_right:Nx \l_@@_signature_tl - { - \exp_not:c { \l_@@_expandable_aux_name_tl } - \exp_not:n { #1 {#2} } - } - \bool_set_false:N \l_@@_long_bool - \@@_prepare_signature:N - } -% \end{macrocode} -% \end{macro} -% \end{macro} -% % \begin{macro}{\@@_add_expandable_type_l:w} % Invalid in expandable contexts (as the next left brace may have been % inserted by \pkg{xparse} due to a failed search for an optional argument). @@ -2067,10 +2061,10 @@ { \@@_grab_D_nested:w \q_nil ##2 \q_stop } \tl_if_in:NnTF \l_@@_nesting_b_tl {#1} { - \tl_set_eq:NN \l_@@_tmp_tl \l_@@_nesting_b_tl + \tl_set_eq:NN \l_@@_tmpa_tl \l_@@_nesting_b_tl \tl_clear:N \l_@@_nesting_b_tl \exp_after:wN \l_@@_fn_tl \exp_after:wN - \q_nil \l_@@_tmp_tl \q_nil \q_@@ \ERROR + \q_nil \l_@@_tmpa_tl \q_nil \q_@@ \ERROR } { \tl_put_right:No \l_@@_nesting_a_tl @@ -2091,6 +2085,109 @@ % \end{macro} % \end{macro} % +% \begin{macro} +% { +% \@@_grab_E:w, \@@_grab_E_long:w, +% \@@_grab_E_trailing:w, \@@_grab_E_long_trailing:w +% } +% \begin{macro}[aux]{\@@_grab_E:nnnNn} +% \begin{macro}[aux]{\@@_grab_E_setup:Nw} +% \begin{macro}[aux]{\@@_grab_E_loop:nnN} +% \begin{macro}[aux]{\@@_grab_E_finalise:} +% Everything here needs to point to a loop. +% \begin{macrocode} +\cs_new_protected:Npn \@@_grab_E:w #1#2#3 \l_@@_args_tl + { + \@@_grab_E:nnnNn + {#1} {#2} {#3} + \cs_set_protected_nopar:Npn + { _ignore_spaces } + } +\cs_new_protected:Npn \@@_grab_E_long:w #1#2#3 \l_@@_args_tl + { + \@@_grab_E:nnnNn + {#1} {#2} {#3} + \cs_set_protected:Npn + { _ignore_spaces } + } +\cs_new_protected:Npn \@@_grab_E_trailing:w #1#2#3 \l_@@_args_tl + { + \@@_grab_E:nnnNn + {#1} {#2} {#3} + \cs_set_protected_nopar:Npn + { } + } +\cs_new_protected:Npn \@@_grab_E_long_trailing:w #1#2#3 \l_@@_args_tl + { + \@@_grab_E:nnnNn + {#1} {#2} {#3} + \cs_set_protected:Npn + { } + } +% \end{macrocode} +% A loop is needed here to allow a random ordering of keys. These are +% searched for one at a time, with any not found needing to be tracked: +% they can appear later. The grabbed values are held in a property list +% which is then turned into an ordered list to be passed back to the user. +% \begin{macrocode} +\cs_new_protected:Npn \@@_grab_E:nnnNn #1#2#3#4#5 + { + \exp_after:wN #4 \l_@@_fn_tl ##1##2##3 + { + \prop_put:Nnn \l_@@_tmp_prop {##1} {##3} + \@@_grab_E_loop:nnN {#5} { } ##2 \q_recursion_stop + } + \prop_clear:N \l_@@_tmp_prop + \@@_grab_E_setup:Nw + #1 \q_recursion_tail \q_mark #2 \q_recursion_tail \q_recursion_stop + \cs_set_protected:Npn \@@_grab_E_finalise: + { + \tl_clear:N \l_@@_tmpa_tl + \tl_map_inline:nn {#1} + { + \prop_get:NnNF \l_@@_tmp_prop {####1} \l_@@_tmpb_tl + { \tl_set_eq:NN \l_@@_tmpb_tl \c_@@_no_value_tl } + \tl_set:Nx \l_@@_tmpa_tl + { + \exp_not:V \l_@@_tmpa_tl + { \exp_not:V \l_@@_tmpb_tl } + } + } + \@@_add_arg:V \l_@@_tmpa_tl + #3 \l_@@_args_tl + } + \@@_grab_E_loop:nnN {#5} { } #1 \q_recursion_tail \q_recursion_stop + } +% \end{macrocode} +% To allow for flexible default values, the list of those given may be +% shorter than the number of test tokens. This can readily be achieved +% by storing only the given defaults in the property list. +% \begin{macrocode} +\cs_new_protected:Npn \@@_grab_E_setup:Nw #1#2 \q_mark #3 + { + \quark_if_recursion_tail_stop:N #1 + \quark_if_recursion_tail_stop:n {#3} + \prop_put:Nnn \l_@@_tmp_prop {#1} {#3} + \@@_grab_E_setup:Nw #2 \q_mark + } +\cs_new_protected:Npn \@@_grab_E_loop:nnN #1#2#3#4 \q_recursion_stop + { + \cs_if_eq:NNTF #3 \q_recursion_tail + { \@@_grab_E_finalise: } + { + \use:c { peek_meaning_remove #1 :NTF } #3 + { \l_@@_fn_tl #3 {#2#4} } + { \@@_grab_E_loop:nnN {#1} {#2#3} #4 \q_recursion_stop } + } + } +\cs_new_protected:Npn \@@_grab_E_finalise: { } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% % \begin{macro}{\@@_grab_G:w} % \begin{macro}{\@@_grab_G_long:w} % \begin{macro}{\@@_grab_G_trailing:w} @@ -2133,56 +2230,6 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\@@_grab_K:w, \@@_grab_K_long:w} -% \begin{macro}[aux]{\@@_grab_K_aux:nnnNn} -% Look ahead at one token and if it matches grab an argument. -% \begin{macrocode} -\cs_new_protected:Npn \@@_grab_K:w #1#2#3 \l_@@_args_tl - { - \@@_grab_K_aux:nnnNn - {#1} {#2} {#3} - \cs_set_protected_nopar:Npn - { _ignore_spaces } - } -\cs_new_protected:Npn \@@_grab_K_long:w #1#2#3 \l_@@_args_tl - { - \@@_grab_K_aux:nnnNn - {#1} {#2} {#3} - \cs_set_protected:Npn - { _ignore_spaces } - } -\cs_new_protected:Npn \@@_grab_K_trailing:w #1#2#3 \l_@@_args_tl - { - \@@_grab_K_aux:nnnNn - {#1} {#2} {#3} - \cs_set_protected_nopar:Npn - { } - } -\cs_new_protected:Npn \@@_grab_K_long_trailing:w #1#2#3 \l_@@_args_tl - { - \@@_grab_K_aux:nnnNn - {#1} {#2} {#3} - \cs_set_protected:Npn - { } - } -\cs_new_protected:Npn \@@_grab_K_aux:nnnNn #1#2#3#4#5 - { - \exp_after:wN #4 \l_@@_fn_tl ##1 - { - \@@_add_arg:n {##1} - #3 \l_@@_args_tl - } - \use:c { peek_meaning_remove #5 :NTF } #1 - { \l_@@_fn_tl } - { - \@@_add_arg:n {#2} - #3 \l_@@_args_tl - } - } -% \end{macrocode} -% \end{macro} -% \end{macro} -% % \begin{macro}{\@@_grab_l:w} % \begin{macro}{\@@_grab_l_long:w} % \begin{macro}[aux]{\@@_grab_l_aux:nN} @@ -2901,29 +2948,6 @@ % \end{macro} % \end{macro} % -% \begin{macro}[EXP]{\@@_expandable_grab_K:w} -% \begin{macro}[EXP, aux]{\@@_expandable_grab_K_aux:NNwn} -% As for the |D|-type grabber, use the auxiliary to do the look ahead -% test then reuse it for the grabbing. -% \begin{macrocode} -\cs_new:Npn \@@_expandable_grab_K:w #1 \q_@@ #2 - { #2 { \@@_expandable_grab_K_aux:NNwn #1 \q_@@ #2 } } -\cs_new:Npn \@@_expandable_grab_K_aux:NNwn #1#2#3#4 \q_@@ #5#6 - { - \str_if_eq:onTF { #1 { } #6 { } #2 { } } { { } #2 { } } - { - #1 - { \@@_expandable_grab_K_aux:Nwn #5 #4 \q_@@ } - #6 - } - { #4 {#3} \q_@@ #5 {#6} } - } -\cs_new:Npn \@@_expandable_grab_K_aux:Nwn #1#2 \q_@@ #3 - { #2 {#3} \q_@@ #1 } -% \end{macrocode} -% \end{macro} -% \end{macro} -% % \begin{macro}[EXP]{\@@_expandable_grab_m:w} % \begin{macro}[EXP, aux]{\@@_expandable_grab_m_aux:wNn} % The mandatory case is easy: find the auxiliary after the \cs{q_@@}, and diff --git a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx index 394bb8b72ee..d462fd1f58c 100644 --- a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx @@ -41,8 +41,8 @@ %<*driver|package> % The version of expl3 required is tested as early as possible, as % some really old versions do not define \ProvidesExplPackage. -\RequirePackage{expl3}[2016/10/19] -%\@ifpackagelater{expl3}{2016/10/19} +\RequirePackage{expl3}[2016/11/21] +%\@ifpackagelater{expl3}{2016/11/21} % {} % {% % \PackageError{xtemplate}{Support package l3kernel too old} @@ -56,8 +56,8 @@ % } \def\ExplFileName{xtemplate} \def\ExplFileDescription{L3 Experimental prototype document functions} -\def\ExplFileDate{2016/10/19} -\def\ExplFileVersion{6730} +\def\ExplFileDate{2016/11/21} +\def\ExplFileVersion{6760} % %<*driver> \documentclass[full]{l3doc} diff --git a/Master/texmf-dist/tex/latex/l3build/l3build.lua b/Master/texmf-dist/tex/latex/l3build/l3build.lua index f75a96959be..06f6942ace5 100644 --- a/Master/texmf-dist/tex/latex/l3build/l3build.lua +++ b/Master/texmf-dist/tex/latex/l3build/l3build.lua @@ -17,8 +17,8 @@ --]] -- Version information: should be identical to that in l3build.dtx -release_date = "2016/10/19" -release_ver = "6730" +release_date = "2016/11/21" +release_ver = "6760" -- "module" is a deprecated function in Lua 5.2: as we want the name -- for other purposes, and it should eventually be 'free', simply @@ -792,19 +792,6 @@ function formatlog(logfile, newfile, engine) if checksearch then line = string.gsub(line, "%(.*/([%w-]+%.[%w-]+)%)?%s*$", "(../%1") end - -- Deal with the map line: some wrapping then a zap - if string.match(lastline, "*pdftex%.map") then - print("MAP ELONG") - line = lastline .. line - lastline = "" - end - if string.match(line, "%{[^%}]*pdftex%.map%}") then - if string.match(line, "pdftex%.map%}%s*%(") and - not string.match(line, "%)%s*$") then - return "", line - end - end - line = string.gsub(line, "%{[^%}]*/pdftex%.map%}", "") -- Deal with the fact that "(.aux)" may have still a leading space line = string.gsub(line, "^ %(%.aux%)", "(.aux)") -- Merge all of .fd data into one line so will be removed later diff --git a/Master/texmf-dist/tex/latex/l3build/regression-test.tex b/Master/texmf-dist/tex/latex/l3build/regression-test.tex index 3d10ca5e1f8..ade132e225a 100644 --- a/Master/texmf-dist/tex/latex/l3build/regression-test.tex +++ b/Master/texmf-dist/tex/latex/l3build/regression-test.tex @@ -166,7 +166,6 @@ \ifx#1\@undefined\LONGTYPEOUT{Undefined \string#1}\else \ifx#1\relax\LONGTYPEOUT{Relaxed \space\space\string#1}\else \LONGTYPEOUT{Defined \space\space\string#1}\fi\fi} -\OMIT \ifx\InputIfFileExists\@undefined \newread\@inputcheck \long\def\InputIfFileExists#1#2#3{% @@ -181,7 +180,17 @@ \fi \InputIfFileExists{regression-test.cfg} {\LONGTYPEOUT{^^J***^^Jregression-test.cfg in operation^^J***^^J}}{} -\TIMO +\ifdefined\pdfoutput + \ifnum\pdfoutput>0 % + \pdfmapfile{pdftex.map}% + \fi +\else + \ifdefined\outputmode + \ifnum\outputmode>0 % + \pdfextension mapfile{pdftex.map}% + \fi + \fi +\fi \newcount \gTESTint \def\SEPARATOR{% \TYPE{% diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3sort/l3sort.sty b/Master/texmf-dist/tex/latex/l3experimental/l3sort/l3sort.sty index 591a3c52294..bc2c7375122 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3sort/l3sort.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3sort/l3sort.sty @@ -46,8 +46,8 @@ %% %% ----------------------------------------------------------------------- %% -\RequirePackage{expl3}[2016/10/19] -\@ifpackagelater{expl3}{2016/10/19} +\RequirePackage{expl3}[2016/11/21] +\@ifpackagelater{expl3}{2016/11/21} {} {% \PackageError{l3sort}{Support package l3kernel too old} @@ -59,7 +59,7 @@ }% \endinput } -\GetIdInfo$Id: l3sort.dtx 6730 2016-10-19 11:19:38Z joseph $ +\GetIdInfo$Id: l3sort.dtx 6760 2016-11-21 20:35:31Z joseph $ {L3 Experimental sorting functions} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty index a0ce8b9d326..b13f2f9add9 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty @@ -45,8 +45,8 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\RequirePackage{expl3}[2016/10/19] -\@ifpackagelater{expl3}{2016/10/19} +\RequirePackage{expl3}[2016/11/21] +\@ifpackagelater{expl3}{2016/11/21} {} {% \PackageError{l3flag}{Support package l3kernel too old} @@ -58,7 +58,7 @@ }% \endinput } -\GetIdInfo$Id: l3flag.dtx 6730 2016-10-19 11:19:38Z joseph $ +\GetIdInfo$Id: l3flag.dtx 6760 2016-11-21 20:35:31Z joseph $ {L3 Experimental flags} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex-trace.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex-trace.sty index a5605769613..b77e039e031 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex-trace.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex-trace.sty @@ -45,8 +45,8 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\RequirePackage{expl3}[2016/10/19] -\@ifpackagelater{expl3}{2016/10/19} +\RequirePackage{expl3}[2016/11/21] +\@ifpackagelater{expl3}{2016/11/21} {} {% \PackageError{l3regex}{Support package l3kernel too old} @@ -58,7 +58,7 @@ }% \endinput } -\GetIdInfo$Id: l3regex.dtx 6730 2016-10-19 11:19:38Z joseph $ +\GetIdInfo$Id: l3regex.dtx 6760 2016-11-21 20:35:31Z joseph $ {L3 Experimental regular expressions} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty index 4f92950cb33..522d4bcd40b 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty @@ -45,8 +45,8 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\RequirePackage{expl3}[2016/10/19] -\@ifpackagelater{expl3}{2016/10/19} +\RequirePackage{expl3}[2016/11/21] +\@ifpackagelater{expl3}{2016/11/21} {} {% \PackageError{l3regex}{Support package l3kernel too old} @@ -58,7 +58,7 @@ }% \endinput } -\GetIdInfo$Id: l3regex.dtx 6730 2016-10-19 11:19:38Z joseph $ +\GetIdInfo$Id: l3regex.dtx 6760 2016-11-21 20:35:31Z joseph $ {L3 Experimental regular expressions} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3tl-build.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3tl-build.sty index a570d9a325b..1fe47bca0b3 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3tl-build.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3tl-build.sty @@ -45,8 +45,8 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\RequirePackage{expl3}[2016/10/19] -\@ifpackagelater{expl3}{2016/10/19} +\RequirePackage{expl3}[2016/11/21] +\@ifpackagelater{expl3}{2016/11/21} {} {% \PackageError{l3tl-build}{Support package l3kernel too old} @@ -58,7 +58,7 @@ }% \endinput } -\GetIdInfo$Id: l3tl-build.dtx 6730 2016-10-19 11:19:38Z joseph $ +\GetIdInfo$Id: l3tl-build.dtx 6760 2016-11-21 20:35:31Z joseph $ {L3 Experimental token list construction} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} diff --git a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty index c2ec8683ada..6c7ce4fcab5 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty @@ -47,8 +47,8 @@ %% %% ----------------------------------------------------------------------- %% -\RequirePackage{expl3}[2016/10/19] -\@ifpackagelater{expl3}{2016/10/19} +\RequirePackage{expl3}[2016/11/21] +\@ifpackagelater{expl3}{2016/11/21} {} {% \PackageError{l3galley}{Support package l3kernel too old} @@ -60,7 +60,7 @@ }% \endinput } -\GetIdInfo$Id: l3galley.dtx 6730 2016-10-19 11:19:38Z joseph $ +\GetIdInfo$Id: l3galley.dtx 6760 2016-11-21 20:35:31Z joseph $ {L3 Experimental galley code} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex index c15781e05f6..6fa4e32f964 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex @@ -33,6 +33,7 @@ %% l3fp-expo.dtx (with options: `package') %% l3fp-trig.dtx (with options: `package') %% l3fp-convert.dtx (with options: `package') +%% l3fp-random.dtx (with options: `package') %% l3fp-assign.dtx (with options: `package') %% l3box.dtx (with options: `package') %% l3coffins.dtx (with options: `package') @@ -82,8 +83,8 @@ %% ----------------------------------------------------------------------- \def\ExplFileName{expl3}% \def\ExplFileDescription{L3 programming layer}% -\def\ExplFileDate{2016/10/19}% -\def\ExplFileVersion{6730}% +\def\ExplFileDate{2016/11/21}% +\def\ExplFileVersion{6760}% \begingroup \def\next{\endgroup}% \expandafter\ifx\csname PackageError\endcsname\relax @@ -10622,7 +10623,7 @@ %% %% ----------------------------------------------------------------------- %% -\GetIdInfo$Id: l3fp.dtx 6685 2016-08-19 16:26:52Z bruno $ +\GetIdInfo$Id: l3fp.dtx 6761 2016-11-21 21:48:43Z joseph $ {L3 Floating points} %% File: l3fp-aux.dtx Copyright(C) 2011-2014,2016 The LaTeX3 Project %% @@ -10864,6 +10865,32 @@ { \fi: \__fp_exp_after_o:w \s__fp #3 ; } \cs_new:Npn \__fp_case_return_ii_o:ww #1 \fi: #2 \s__fp #3 ; { \fi: \__fp_exp_after_o:w } +\prg_new_conditional:Npnn \__fp_int:w \s__fp \__fp_chk:w #1 #2 #3; { TF , T , F , p } + { + \if_case:w #1 \exp_stop_f: + \prg_return_true: + \or: \__fp_int_normal:nnnnn #3 + \else: \prg_return_false: + \fi: + } +\cs_new:Npn \__fp_int_normal:nnnnn #1 #2#3#4#5 + { + \if_int_compare:w #1 > \c_zero + \__fp_decimate:nNnnnn { \c_sixteen - #1 } + \__fp_int_test:Nw + {#2} {#3} {#4} {#5} + \else: + \prg_return_false: + \fi: + } +\cs_new:Npn \__fp_int_test:Nw #1#2; + { + \if_meaning:w 0 #1 + \prg_return_true: + \else: + \prg_return_false: + \fi: + } \cs_new:Npn \__fp_small_int:wTF \s__fp \__fp_chk:w #1#2 { \if_case:w #1 \exp_stop_f: @@ -11299,13 +11326,24 @@ \cs_new:Npn \__fp_round_o:Nw #1#2 @ { \if_case:w - \__int_eval:w \__fp_array_count:n {#2} - \c_one \__int_eval_end: - \__fp_round:Nwn #1 #2 {0} \exp:w + \__int_eval:w \__fp_array_count:n {#2} \__int_eval_end: + \__fp_round_no_arg_o:Nw #1 \exp:w + \or: \__fp_round:Nwn #1 #2 {0} \exp:w \or: \__fp_round:Nww #1 #2 \exp:w \else: \__fp_round:Nwww #1 #2 @ \exp:w \fi: \exp_end_continue_f:w } +\cs_new:Npn \__fp_round_no_arg_o:Nw #1 + { + \cs_if_eq:NNTF #1 \__fp_round_to_nearest:NNN + { \__fp_error:nnnn { num-args } { round () } { 1 } { 3 } } + { + \__fp_error:nffn { num-args } + { \__fp_round_name_from_cs:N #1 () } { 1 } { 2 } + } + \exp_after:wN \c_nan_fp + } \cs_new:Npn \__fp_round:Nwww #1#2 ; #3 ; \s__fp \__fp_chk:w #4#5#6 ; #7 @ { \cs_if_eq:NNTF #1 \__fp_round_to_nearest:NNN @@ -12100,6 +12138,30 @@ } } \group_end: +\cs_new:cpn { __fp_parse_prefix_,:Nw } #1 + { + \if_int_compare:w #1 = \c_one + \exp_after:wN \__fp_parse_one:Nw + \exp_after:wN #1 + \else: + \__msg_kernel_expandable_error:nnn + { kernel } { fp-missing-number } { , } + \exp_after:wN \c_nan_fp \exp:w \exp_end_continue_f:w + \exp_after:wN \__fp_parse_infix:NN + \exp_after:wN #1 + \exp_after:wN , + \fi: + } +\cs_new:cpn { __fp_parse_prefix_):Nw } #1 + { + \if_int_compare:w #1 = \c_one + \else: + \__msg_kernel_expandable_error:nnn + { kernel } { fp-missing-number } { ) } + \exp_after:wN \c_nan_fp \exp:w \exp_end_continue_f:w + \fi: + \__fp_parse_infix:NN #1 ) + } \cs_set_protected:Npn \__fp_tmp:w #1 #2 { \cs_new:cpn { __fp_parse_word_#1:N } @@ -12170,6 +12232,10 @@ { \__fp_parse_function:NNN \__fp_minmax_o:Nw 2 } \cs_new:Npn \__fp_parse_word_min:N { \__fp_parse_function:NNN \__fp_minmax_o:Nw 0 } +\cs_new:Npn \__fp_parse_word_rand:N + { \__fp_parse_function:NNN \__fp_rand_o:Nw ? } +\cs_new:Npn \__fp_parse_word_randint:N + { \__fp_parse_function:NNN \__fp_randint_o:Nw ? } \cs_new:Npn \__fp_parse_word_abs:N { \__fp_parse_unary_function:nNN { set_sign } 0 } \cs_new:Npn \__fp_parse_word_exp:N @@ -12227,6 +12293,12 @@ \cs_new:Npn \__fp_parse_after:ww #1@ \__fp_parse_infix_end:N \s__fp_stop { \exp_end: #1 } +\cs_new:Npn \__fp_parse_o:n #1 + { + \exp_after:wN \exp_after:wN + \exp_after:wN \__fp_exp_after_o:w + \__fp_parse:n {#1} + } \cs_new:Npn \__fp_parse_operand:Nw #1 { \exp_end_continue_f:w @@ -12847,6 +12919,48 @@ \fp_while_do:nNnn {#1} #2 {#3} {#4} } } +\cs_new:Npn \fp_step_function:nnnN #1#2#3 + { + \exp_after:wN \__fp_step:wwwN + \exp:w \exp_end_continue_f:w \__fp_parse_o:n {#1} : + \exp:w \exp_end_continue_f:w \__fp_parse_o:n {#2} : + \exp:w \exp_end_continue_f:w \__fp_parse:n {#3} : + } +\cs_generate_variant:Nn \fp_step_function:nnnN { nnnc } +\cs_new:Npn \__fp_step:wwwN #1 : #2 : #3 : #4 + { + \fp_compare:nNnTF {#2} > 0 + { \__fp_step:NfnnN > } + { + \fp_compare:nNnTF {#2} = 0 + { + \__msg_kernel_expandable_error:nnn { kernel } { zero-step } {#4} + \use_none:nnnn + } + { \__fp_step:NfnnN < } + } + { \fp_eval:n {#1} } {#2} {#3} #4 + } + +\cs_new:Npn \__fp_step:NnnnN #1#2#3#4#5 + { + \fp_compare:nNnF {#2} #1 {#4} + { + #5 {#2} + \__fp_step:NfnnN + #1 { \fp_eval:n { #2 + #3 } } {#3} {#4} #5 + } + } +\cs_generate_variant:Nn \__fp_step:NnnnN { Nf } +\cs_new_protected:Npn \fp_step_inline:nnnn #1#2#3#4 + { + \int_gincr:N \g__prg_map_int + \cs_gset_protected:cpn { __prg_map_ \int_use:N \g__prg_map_int :w } + ##1 {#4} + \fp_step_function:nnnc {#1} {#2} {#3} + { __prg_map_ \int_use:N \g__prg_map_int :w } + \__prg_break_point:Nn \scan_stop: { \int_gdecr:N \g__prg_map_int } + } \cs_new:Npn \__fp_minmax_o:Nw #1#2 @ { \if_meaning:w 0 #1 @@ -16033,6 +16147,166 @@ } \exp_not:N \__fp_array_to_clist_loop:Nw } +%% File: l3fp-random.dtx Copyright (C) 2016 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 +%% +%% http://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 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. +%% +%% ----------------------------------------------------------------------- +%% +\cs_new:Npn \__fp_rand_o:Nw ? #1 @ + { + \tl_if_empty:nTF {#1} + { \__fp_rand_o: } + { + \__msg_kernel_expandable_error:nnnnn + { kernel } { fp-num-args } { rand() } { 0 } { 0 } + \exp_after:wN \c_nan_fp + } + } +\cs_if_exist:NTF \pdftex_uniformdeviate:D + { + \cs_new:Npn \__fp_rand_o: + { + \__fp_parse_o:n + { + . + \exp_after:wN \use_none:n + \__int_value:w \__int_eval:w 1 0000 0000 + + \pdftex_uniformdeviate:D 1 0000 0000 \__int_eval_end: + \exp_after:wN \use_none:n + \__int_value:w \__int_eval:w 1 0000 0000 + + \pdftex_uniformdeviate:D 1 0000 0000 \__int_eval_end: + } + } + } + { + \cs_new:Npn \__fp_rand_o: + { + \__msg_kernel_expandable_error:nn { kernel } { fp-no-random } + \exp_after:wN \c_nan_fp + } + } +\cs_new:Npn \__fp_randint_o:Nw ? #1 @ + { + \if_case:w + \__int_eval:w \__fp_array_count:n {#1} - \c_one \__int_eval_end: + \exp_after:wN \__fp_randint_e:w \c_one_fp #1 + \or: \__fp_randint_e:w #1 + \else: + \__msg_kernel_expandable_error:nnnnn + { kernel } { fp-num-args } { randint() } { 1 } { 2 } + \exp_after:wN \c_nan_fp \exp:w + \fi: + \exp_after:wN \exp_end: + } +\cs_new:Npn \__fp_randint_badarg:w \s__fp \__fp_chk:w #1#2#3; + { + \__fp_int:wTF \s__fp \__fp_chk:w #1#2#3; + { + \if_meaning:w 1 #1 + \if_int_compare:w + \use_i_delimit_by_q_stop:nw #3 \q_stop > \c_sixteen + \exp_after:wN \c_one + \fi: + \fi: + } + { \c_one } + } +\cs_new:Npn \__fp_randint_e:w #1; #2; + { + \if_case:w + \__fp_randint_badarg:w #1; + \__fp_randint_badarg:w #2; + \fp_compare:nNnTF { #1; } > { #2; } { \c_one } { \c_zero } + \fp_compare:nNnTF { #1; + 2e9 } < { #2; } + { \__fp_randint_wide_e:nn } + { \__fp_randint_narrow_e:nn } + { #1; } { #2; } + \or: + \__fp_invalid_operation_tl_o:ff + { randint } { \__fp_array_to_clist:n { #1; #2; } } + \exp:w + \fi: + } +\cs_if_exist:NTF \pdftex_uniformdeviate:D + { + \cs_new:Npn \__fp_randint_narrow_e:nn #1#2 + { + \__fp_parse_o:n + { + #1 + + \pdftex_uniformdeviate:D + \int_eval:n { \fp_to_int:n { #2 - #1 } + \c_one } + } + \exp:w + } + \cs_new:Npn \__fp_randint_wide_e:nn #1 #2 + { + \exp_args:Nf \__fp_randint_wide_e:nnn + { \fp_to_int:n { ceil ( ( #2 - #1 + \c_six ) * 1e-8 ) } } + {#1} {#2} + } + \cs_new:Npn \__fp_randint_wide_e:nnn #1#2#3 + { + \exp_args:Nf \__fp_randint_wide_e:nnnn + { + \__fp_parse:n + { + #2 + + \pdftex_uniformdeviate:D #1 e 8 + + \pdftex_uniformdeviate:D 1 0000 0000 + } + } + {#1} {#2} {#3} + } + \cs_new:Npn \__fp_randint_wide_e:nnnn #1#2#3#4 + { + \fp_compare:nNnTF {#1} > {#4} + { \__fp_randint_wide_e:nnn {#2} {#3} {#4} } + { \__fp_exp_after_o:w #1 \exp:w } + } + } + { + \cs_new:Npn \__fp_randint_narrow_e:nn #1#2 + { + \__msg_kernel_expandable_error:nn { kernel } { fp-no-random } + \exp_after:wN \c_nan_fp \exp:w + } + \cs_new:Npn \__fp_randint_wide_e:nn #1#2 + { + \__msg_kernel_expandable_error:nn { kernel } { fp-no-random } + \exp_after:wN \c_nan_fp \exp:w + } + } +\__msg_kernel_new:nnn { kernel } { fp-no-random } + { Random~numbers~unavailable } %% %% File: l3fp-assign.dtx Copyright (C) 2011-2016 The LaTeX3 project %% diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex index b57887da668..4c9fa9cd86f 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex @@ -47,8 +47,8 @@ %% ----------------------------------------------------------------------- \def\ExplFileName{expl3}% \def\ExplFileDescription{L3 programming layer}% -\def\ExplFileDate{2016/10/19}% -\def\ExplFileVersion{6730}% +\def\ExplFileDate{2016/11/21}% +\def\ExplFileVersion{6760}% \let\ExplLoaderFileVersion\ExplFileVersion \begingroup \def\tempa{LaTeX2e}% diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty index 7dfc9b66c66..f41857ca261 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty @@ -47,8 +47,8 @@ %% ----------------------------------------------------------------------- \def\ExplFileName{expl3}% \def\ExplFileDescription{L3 programming layer}% -\def\ExplFileDate{2016/10/19}% -\def\ExplFileVersion{6730}% +\def\ExplFileDate{2016/11/21}% +\def\ExplFileVersion{6760}% \let\ExplLoaderFileVersion\ExplFileVersion \ProvidesPackage{\ExplFileName} [% diff --git a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty index f16aa19f843..5ae4be21638 100644 --- a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty +++ b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty @@ -46,8 +46,8 @@ %% %% ----------------------------------------------------------------------- %% -\RequirePackage{expl3}[2016/10/19] -\@ifpackagelater{expl3}{2016/10/19} +\RequirePackage{expl3}[2016/11/21] +\@ifpackagelater{expl3}{2016/11/21} {} {% \PackageError{l3keys2e}{Support package l3kernel too old} @@ -61,8 +61,8 @@ } \def\ExplFileName{l3keys2e} \def\ExplFileDescription{LaTeX2e option processing using LaTeX3 keys} -\def\ExplFileDate{2016/10/19} -\def\ExplFileVersion{6730} +\def\ExplFileDate{2016/11/21} +\def\ExplFileVersion{6760} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} \cs_generate_variant:Nn \clist_put_right:Nn { Nv } diff --git a/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty b/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty index a16df31eead..fe5d8257511 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty @@ -47,8 +47,8 @@ %% %% ----------------------------------------------------------------------- %% -\RequirePackage{expl3}[2016/10/19] -\@ifpackagelater{expl3}{2016/10/19} +\RequirePackage{expl3}[2016/11/21] +\@ifpackagelater{expl3}{2016/11/21} {} {% \PackageError{xfrac}{Support package l3kernel too old} @@ -63,8 +63,8 @@ \RequirePackage{amstext,graphicx,l3keys2e,textcomp,xparse,xtemplate} \def\ExplFileName{xfrac} \def\ExplFileDescription{L3 Experimental split-level fractions} -\def\ExplFileDate{2016/10/19} -\def\ExplFileVersion{6730} +\def\ExplFileDate{2016/11/21} +\def\ExplFileVersion{6760} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} \keys_define:nn { xfrac } diff --git a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty index 4777b58c255..c1ff2f604fa 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty @@ -50,8 +50,8 @@ %% %% ----------------------------------------------------------------------- %% -\RequirePackage{expl3}[2016/10/19] -\@ifpackagelater{expl3}{2016/10/19} +\RequirePackage{expl3}[2016/11/21] +\@ifpackagelater{expl3}{2016/11/21} {} {% \PackageError{xparse}{Support package l3kernel too old} @@ -65,8 +65,8 @@ } \def\ExplFileName{xparse} \def\ExplFileDescription{L3 Experimental document command parser} -\def\ExplFileDate{2016/10/19} -\def\ExplFileVersion{6730} +\def\ExplFileDate{2016/11/21} +\def\ExplFileVersion{6760} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} \tl_const:Nx \c__xparse_no_value_tl @@ -96,7 +96,9 @@ \bool_new:N \l__xparse_processor_bool \int_new:N \l__xparse_processor_int \tl_new:N \l__xparse_signature_tl -\tl_new:N \l__xparse_tmp_tl +\prop_new:N \l__xparse_tmp_prop +\tl_new:N \l__xparse_tmpa_tl +\tl_new:N \l__xparse_tmpb_tl \cs_new_protected:Npn \__xparse_declare_cmd:Nnn { \bool_set_false:N \l__xparse_expandable_bool @@ -234,8 +236,8 @@ \cs_new_protected:Npn \__xparse_count_mandatory:N #1 { \quark_if_recursion_tail_stop:N #1 - \prop_get:NnNTF \c__xparse_shorthands_prop {#1} \l__xparse_tmp_tl - { \exp_after:wN \__xparse_count_mandatory:N \l__xparse_tmp_tl } + \prop_get:NnNTF \c__xparse_shorthands_prop {#1} \l__xparse_tmpa_tl + { \exp_after:wN \__xparse_count_mandatory:N \l__xparse_tmpa_tl } { \__xparse_count_mandatory_aux:N #1 } } \cs_new_protected:Npn \__xparse_count_mandatory_aux:N #1 @@ -267,23 +269,21 @@ \quark_if_recursion_tail_stop_do:nn {#3} { \__xparse_bad_arg_spec:wn } \__xparse_count_mandatory:N } -\cs_new_protected:Npn \__xparse_count_type_g:w - { \__xparse_count_mandatory:N } -\cs_new_protected:Npn \__xparse_count_type_G:w #1 +\cs_new_protected:Npn \__xparse_count_type_e:w #1 { \quark_if_recursion_tail_stop_do:nn {#1} { \__xparse_bad_arg_spec:wn } \__xparse_count_mandatory:N } -\cs_new_protected:Npn \__xparse_count_type_k:w #1 +\cs_new_protected:Npn \__xparse_count_type_E:w #1#2 { - \__xparse_single_token_check:n {#1} - \quark_if_recursion_tail_stop_do:Nn #1 { \__xparse_bad_arg_spec:wn } + \quark_if_recursion_tail_stop_do:nn {#2} { \__xparse_bad_arg_spec:wn } \__xparse_count_mandatory:N } -\cs_new_protected:Npn \__xparse_count_type_K:w #1#2 +\cs_new_protected:Npn \__xparse_count_type_g:w + { \__xparse_count_mandatory:N } +\cs_new_protected:Npn \__xparse_count_type_G:w #1 { - \__xparse_single_token_check:n {#1} - \quark_if_recursion_tail_stop_do:nn {#2} { \__xparse_bad_arg_spec:wn } + \quark_if_recursion_tail_stop_do:nn {#1} { \__xparse_bad_arg_spec:wn } \__xparse_count_mandatory:N } \cs_new_protected:Npn \__xparse_count_type_m:w @@ -350,8 +350,8 @@ \cs_new_protected:Npn \__xparse_prepare_signature_bypass:N #1 { \quark_if_recursion_tail_stop:N #1 - \prop_get:NnNTF \c__xparse_shorthands_prop {#1} \l__xparse_tmp_tl - { \exp_after:wN \__xparse_prepare_signature:N \l__xparse_tmp_tl } + \prop_get:NnNTF \c__xparse_shorthands_prop {#1} \l__xparse_tmpa_tl + { \exp_after:wN \__xparse_prepare_signature:N \l__xparse_tmpa_tl } { \int_incr:N \l__xparse_current_arg_int \__xparse_prepare_signature_add:N #1 @@ -397,6 +397,15 @@ \tl_put_right:Nn \l__xparse_signature_tl { #1 #2 {#3} } \__xparse_prepare_signature:N } +\cs_new_protected:Npn \__xparse_add_type_e:w #1 + { \__xparse_add_type_E:w {#1} { } } +\cs_new_protected:Npn \__xparse_add_type_E:w #1#2 + { + \__xparse_flush_m_args: + \__xparse_add_grabber_optional:N E + \tl_put_right:Nn \l__xparse_signature_tl { {#1} {#2} } + \__xparse_prepare_signature:N + } \cs_new_protected:Npn \__xparse_add_type_g:w { \exp_args:No \__xparse_add_type_G:w \c__xparse_no_value_tl } \cs_new_protected:Npn \__xparse_add_type_G:w #1 @@ -406,15 +415,6 @@ \tl_put_right:Nn \l__xparse_signature_tl { {#1} } \__xparse_prepare_signature:N } -\cs_new_protected:Npn \__xparse_add_type_k:w #1 - { \exp_args:NNo \__xparse_add_type_K:w #1 \c__xparse_no_value_tl } -\cs_new_protected:Npn \__xparse_add_type_K:w #1#2 - { - \__xparse_flush_m_args: - \__xparse_add_grabber_optional:N K - \tl_put_right:Nn \l__xparse_signature_tl { #1 {#2} } - \__xparse_prepare_signature:N - } \cs_new_protected:Npn \__xparse_add_type_l:w { \__xparse_flush_m_args: @@ -573,27 +573,6 @@ { G } \__xparse_add_expandable_type_m:w } -\cs_new_protected:Npn \__xparse_add_expandable_type_k:w #1 - { - \exp_args:NNo - \__xparse_add_expandable_type_K:w #1 \c__xparse_no_value_tl - } -\cs_new_protected:Npn \__xparse_add_expandable_type_K:w #1#2 - { - \__xparse_add_expandable_grabber_optional:n { K } - \bool_if:NTF \l__xparse_all_long_bool - { \cs_set:cpx } - { \cs_set_nopar:cpx } - { \l__xparse_expandable_aux_name_tl } ##1 #1 ##2 - { ##1 {##2} } - \tl_put_right:Nx \l__xparse_signature_tl - { - \exp_not:c { \l__xparse_expandable_aux_name_tl } - \exp_not:n { #1 {#2} } - } - \bool_set_false:N \l__xparse_long_bool - \__xparse_prepare_signature:N - } \cs_new_protected:Npn \__xparse_add_expandable_type_l:w { \__msg_kernel_error:nnx { xparse } { invalid-expandable-argument-type } @@ -753,10 +732,10 @@ { \__xparse_grab_D_nested:w \q_nil ##2 \q_stop } \tl_if_in:NnTF \l__xparse_nesting_b_tl {#1} { - \tl_set_eq:NN \l__xparse_tmp_tl \l__xparse_nesting_b_tl + \tl_set_eq:NN \l__xparse_tmpa_tl \l__xparse_nesting_b_tl \tl_clear:N \l__xparse_nesting_b_tl \exp_after:wN \l__xparse_fn_tl \exp_after:wN - \q_nil \l__xparse_tmp_tl \q_nil \q__xparse \ERROR + \q_nil \l__xparse_tmpa_tl \q_nil \q__xparse \ERROR } { \tl_put_right:No \l__xparse_nesting_a_tl @@ -770,6 +749,80 @@ } \cs_new:Npn \__xparse_grab_D_nested:w #1 \q_nil \q_stop { \exp_not:o { \use_none:n #1 } } +\cs_new_protected:Npn \__xparse_grab_E:w #1#2#3 \l__xparse_args_tl + { + \__xparse_grab_E:nnnNn + {#1} {#2} {#3} + \cs_set_protected_nopar:Npn + { _ignore_spaces } + } +\cs_new_protected:Npn \__xparse_grab_E_long:w #1#2#3 \l__xparse_args_tl + { + \__xparse_grab_E:nnnNn + {#1} {#2} {#3} + \cs_set_protected:Npn + { _ignore_spaces } + } +\cs_new_protected:Npn \__xparse_grab_E_trailing:w #1#2#3 \l__xparse_args_tl + { + \__xparse_grab_E:nnnNn + {#1} {#2} {#3} + \cs_set_protected_nopar:Npn + { } + } +\cs_new_protected:Npn \__xparse_grab_E_long_trailing:w #1#2#3 \l__xparse_args_tl + { + \__xparse_grab_E:nnnNn + {#1} {#2} {#3} + \cs_set_protected:Npn + { } + } +\cs_new_protected:Npn \__xparse_grab_E:nnnNn #1#2#3#4#5 + { + \exp_after:wN #4 \l__xparse_fn_tl ##1##2##3 + { + \prop_put:Nnn \l__xparse_tmp_prop {##1} {##3} + \__xparse_grab_E_loop:nnN {#5} { } ##2 \q_recursion_stop + } + \prop_clear:N \l__xparse_tmp_prop + \__xparse_grab_E_setup:Nw + #1 \q_recursion_tail \q_mark #2 \q_recursion_tail \q_recursion_stop + \cs_set_protected:Npn \__xparse_grab_E_finalise: + { + \tl_clear:N \l__xparse_tmpa_tl + \tl_map_inline:nn {#1} + { + \prop_get:NnNF \l__xparse_tmp_prop {####1} \l__xparse_tmpb_tl + { \tl_set_eq:NN \l__xparse_tmpb_tl \c__xparse_no_value_tl } + \tl_set:Nx \l__xparse_tmpa_tl + { + \exp_not:V \l__xparse_tmpa_tl + { \exp_not:V \l__xparse_tmpb_tl } + } + } + \__xparse_add_arg:V \l__xparse_tmpa_tl + #3 \l__xparse_args_tl + } + \__xparse_grab_E_loop:nnN {#5} { } #1 \q_recursion_tail \q_recursion_stop + } +\cs_new_protected:Npn \__xparse_grab_E_setup:Nw #1#2 \q_mark #3 + { + \quark_if_recursion_tail_stop:N #1 + \quark_if_recursion_tail_stop:n {#3} + \prop_put:Nnn \l__xparse_tmp_prop {#1} {#3} + \__xparse_grab_E_setup:Nw #2 \q_mark + } +\cs_new_protected:Npn \__xparse_grab_E_loop:nnN #1#2#3#4 \q_recursion_stop + { + \cs_if_eq:NNTF #3 \q_recursion_tail + { \__xparse_grab_E_finalise: } + { + \use:c { peek_meaning_remove #1 :NTF } #3 + { \l__xparse_fn_tl #3 {#2#4} } + { \__xparse_grab_E_loop:nnN {#1} {#2#3} #4 \q_recursion_stop } + } + } +\cs_new_protected:Npn \__xparse_grab_E_finalise: { } \cs_new_protected:Npn \__xparse_grab_G:w #1#2 \l__xparse_args_tl { \__xparse_grab_G_aux:nnNn {#1} {#2} \cs_set_protected_nopar:Npn @@ -797,48 +850,6 @@ #2 \l__xparse_args_tl } } -\cs_new_protected:Npn \__xparse_grab_K:w #1#2#3 \l__xparse_args_tl - { - \__xparse_grab_K_aux:nnnNn - {#1} {#2} {#3} - \cs_set_protected_nopar:Npn - { _ignore_spaces } - } -\cs_new_protected:Npn \__xparse_grab_K_long:w #1#2#3 \l__xparse_args_tl - { - \__xparse_grab_K_aux:nnnNn - {#1} {#2} {#3} - \cs_set_protected:Npn - { _ignore_spaces } - } -\cs_new_protected:Npn \__xparse_grab_K_trailing:w #1#2#3 \l__xparse_args_tl - { - \__xparse_grab_K_aux:nnnNn - {#1} {#2} {#3} - \cs_set_protected_nopar:Npn - { } - } -\cs_new_protected:Npn \__xparse_grab_K_long_trailing:w #1#2#3 \l__xparse_args_tl - { - \__xparse_grab_K_aux:nnnNn - {#1} {#2} {#3} - \cs_set_protected:Npn - { } - } -\cs_new_protected:Npn \__xparse_grab_K_aux:nnnNn #1#2#3#4#5 - { - \exp_after:wN #4 \l__xparse_fn_tl ##1 - { - \__xparse_add_arg:n {##1} - #3 \l__xparse_args_tl - } - \use:c { peek_meaning_remove #5 :NTF } #1 - { \l__xparse_fn_tl } - { - \__xparse_add_arg:n {#2} - #3 \l__xparse_args_tl - } - } \cs_new_protected:Npn \__xparse_grab_l:w #1 \l__xparse_args_tl { \__xparse_grab_l_aux:nN {#1} \cs_set_protected_nopar:Npn } \cs_new_protected:Npn \__xparse_grab_l_long:w #1 \l__xparse_args_tl @@ -1255,20 +1266,6 @@ } #2 \q__xparse #1 } -\cs_new:Npn \__xparse_expandable_grab_K:w #1 \q__xparse #2 - { #2 { \__xparse_expandable_grab_K_aux:NNwn #1 \q__xparse #2 } } -\cs_new:Npn \__xparse_expandable_grab_K_aux:NNwn #1#2#3#4 \q__xparse #5#6 - { - \str_if_eq:onTF { #1 { } #6 { } #2 { } } { { } #2 { } } - { - #1 - { \__xparse_expandable_grab_K_aux:Nwn #5 #4 \q__xparse } - #6 - } - { #4 {#3} \q__xparse #5 {#6} } - } -\cs_new:Npn \__xparse_expandable_grab_K_aux:Nwn #1#2 \q__xparse #3 - { #2 {#3} \q__xparse #1 } \cs_new:Npn \__xparse_expandable_grab_m:w #1 \q__xparse #2 { #2 { \__xparse_expandable_grab_m_aux:wNn #1 \q__xparse #2 } } \cs_new:Npn \__xparse_expandable_grab_m_aux:wNn #1 \q__xparse #2#3 diff --git a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty index 8f389e34ab5..1303b35589d 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty @@ -50,8 +50,8 @@ %% %% ----------------------------------------------------------------------- %% -\RequirePackage{expl3}[2016/10/19] -\@ifpackagelater{expl3}{2016/10/19} +\RequirePackage{expl3}[2016/11/21] +\@ifpackagelater{expl3}{2016/11/21} {} {% \PackageError{xtemplate}{Support package l3kernel too old} @@ -65,8 +65,8 @@ } \def\ExplFileName{xtemplate} \def\ExplFileDescription{L3 Experimental prototype document functions} -\def\ExplFileDate{2016/10/19} -\def\ExplFileVersion{6730} +\def\ExplFileDate{2016/11/21} +\def\ExplFileVersion{6760} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} \tl_const:Nn \c__xtemplate_code_root_tl { template~code~>~ } -- cgit v1.2.3