From 56c9134f4aa02292ed17e726efd8e493b90e6011 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Fri, 25 Sep 2020 03:01:58 +0000 Subject: CTAN sync 202009250301 --- macros/latex/contrib/l3experimental/CHANGELOG.md | 19 +- macros/latex/contrib/l3experimental/README.md | 2 +- .../latex/contrib/l3experimental/l3benchmark.dtx | 33 +- .../latex/contrib/l3experimental/l3benchmark.pdf | Bin 314255 -> 314283 bytes macros/latex/contrib/l3experimental/l3color.dtx | 635 ++++++++++++++++++++- macros/latex/contrib/l3experimental/l3color.pdf | Bin 368703 -> 369239 bytes .../latex/contrib/l3experimental/l3draw-boxes.dtx | 2 +- .../latex/contrib/l3experimental/l3draw-code.pdf | Bin 606606 -> 606612 bytes .../latex/contrib/l3experimental/l3draw-layers.dtx | 2 +- .../latex/contrib/l3experimental/l3draw-paths.dtx | 2 +- .../latex/contrib/l3experimental/l3draw-points.dtx | 2 +- .../latex/contrib/l3experimental/l3draw-scopes.dtx | 2 +- .../contrib/l3experimental/l3draw-softpath.dtx | 2 +- .../latex/contrib/l3experimental/l3draw-state.dtx | 2 +- .../contrib/l3experimental/l3draw-transforms.dtx | 2 +- macros/latex/contrib/l3experimental/l3draw.dtx | 4 +- macros/latex/contrib/l3experimental/l3draw.pdf | Bin 489817 -> 489845 bytes macros/latex/contrib/l3experimental/l3galley.dtx | 4 +- macros/latex/contrib/l3experimental/l3galley.pdf | Bin 385762 -> 385778 bytes macros/latex/contrib/l3experimental/l3graphics.dtx | 4 +- macros/latex/contrib/l3experimental/l3graphics.pdf | Bin 363123 -> 363142 bytes macros/latex/contrib/l3experimental/l3pdf-code.pdf | Bin 276730 -> 276912 bytes macros/latex/contrib/l3experimental/l3pdf.dtx | 4 +- macros/latex/contrib/l3experimental/l3pdf.pdf | Bin 350792 -> 350809 bytes .../latex/contrib/l3experimental/l3str-format.dtx | 4 +- .../latex/contrib/l3experimental/l3str-format.pdf | Bin 344898 -> 344919 bytes .../latex/contrib/l3experimental/l3sys-shell.dtx | 4 +- .../latex/contrib/l3experimental/l3sys-shell.pdf | Bin 311734 -> 311752 bytes macros/latex/contrib/l3experimental/xcoffins.dtx | 4 +- macros/latex/contrib/l3experimental/xcoffins.pdf | Bin 372890 -> 372906 bytes macros/latex/contrib/l3experimental/xgalley.dtx | 4 +- macros/latex/contrib/l3experimental/xgalley.pdf | Bin 285679 -> 285694 bytes 32 files changed, 687 insertions(+), 50 deletions(-) (limited to 'macros/latex/contrib/l3experimental') diff --git a/macros/latex/contrib/l3experimental/CHANGELOG.md b/macros/latex/contrib/l3experimental/CHANGELOG.md index 362059210b..a5931d997c 100644 --- a/macros/latex/contrib/l3experimental/CHANGELOG.md +++ b/macros/latex/contrib/l3experimental/CHANGELOG.md @@ -7,6 +7,14 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +### Changed +- Use Lua pseudo-primitives instead of `\directlua` + +## [2020-09-24] + +### Added +- Support for DeviceN color spaces + ## [2020-09-11] ### Fixed @@ -154,14 +162,14 @@ this project uses date-based 'snapshot' version identifiers. ## [2018-05-12] -### Changed -- Track changes in primitive naming in `l3kernel` +### Changed +- Track changes in primitive naming in `l3kernel` ## [2018-04-30] ### Changed -- Switch to ISO date format -- Improve cross-module use of internal functions +- Switch to ISO date format +- Improve cross-module use of internal functions ## [2018-03-05] @@ -174,7 +182,8 @@ this project uses date-based 'snapshot' version identifiers. - New `l3color` module using `xcolor`-like expression syntax - New `l3draw` module, based on `pgf` layer of the TikZ system -[Unreleased]: https://github.com/latex3/latex3/compare/2020-09-11...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2020-09-24...HEAD +[2020-09-24]: https://github.com/latex3/latex3/compare/2020-09-11...2020-09-24 [2020-09-11]: https://github.com/latex3/latex3/compare/2020-09-01...2020-09-11 [2020-09-01]: https://github.com/latex3/latex3/compare/2020-08-07...2020-09-01 [2020-08-07]: https://github.com/latex3/latex3/compare/2020-07-17...2020-08-07 diff --git a/macros/latex/contrib/l3experimental/README.md b/macros/latex/contrib/l3experimental/README.md index 7f96887610..ec0cabe502 100644 --- a/macros/latex/contrib/l3experimental/README.md +++ b/macros/latex/contrib/l3experimental/README.md @@ -1,7 +1,7 @@ Experimental LaTeX3 Concepts ============================ -Release 2020-09-11 +Release 2020-09-24 Overview -------- diff --git a/macros/latex/contrib/l3experimental/l3benchmark.dtx b/macros/latex/contrib/l3experimental/l3benchmark.dtx index 370723ec90..eb67ec9876 100644 --- a/macros/latex/contrib/l3experimental/l3benchmark.dtx +++ b/macros/latex/contrib/l3experimental/l3benchmark.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2020-09-11} +% \date{Released 2020-09-24} % % \maketitle % @@ -129,7 +129,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3benchmark}{2020-09-11}{} +\ProvidesExplPackage{l3benchmark}{2020-09-24}{} {L3 Experimental benchmarking} % \end{macrocode} % @@ -139,7 +139,7 @@ %<@@=sys> % \end{macrocode} % -% \begin{macro}[EXP]{\sys_timer:} +% \begin{macro}[EXP]{\sys_timer:, \@@_elapsedtime:, \@@_resettimer:} % \begin{macro}[EXP,pTF]{\sys_if_timer_exist:} % In \LuaTeX{}, use emulation (see \pkg{l3luatex}), % otherwise try to locate the primitive. The @@ -147,8 +147,27 @@ % \begin{macrocode} \sys_if_engine_luatex:TF { + \cs_new:Npn \@@_elapsedtime: { } + \cs_new:Npn \@@_resettimer: { } + \lua_now:n + { + local~gettimeofday = os.gettimeofday~ + local~epoch = gettimeofday() - os.clock()~ + local~write = tex.write~ + local~tointeger = math.tointeger~ + local~id = luatexbase.new_luafunction'@@_elapsedtime:' + lua.get_functions_table()[id] = function() + write(tointeger((gettimeofday() - epoch)*65536 // 1)) + end~ + token.set_lua('@@_elapsedtime:', id, 'global') + id = luatexbase.new_luafunction'@@_resettimer:' + lua.get_functions_table()[id] = function() + epoch = gettimeofday() + end~ + token.set_lua('@@_resettimer:', id, 'global', 'protected') + } \cs_new:Npn \sys_timer: - { \lua_now:n { l3kernel.elapsedtime() } } + { \@@_elapsedtime: } } { \cs_if_exist:NT \tex_elapsedtime:D @@ -163,8 +182,7 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\sys_gzero_timer:, \@@_timer_fp:} -% \begin{variable}{\g_@@_timer_base_fp} +% \begin{macro}{\sys_gzero_timer:} % Three case, and in each case we define \cs{sys_gzero_timer:}. % \begin{macrocode} \cs_if_exist:NTF \sys_timer: @@ -172,7 +190,7 @@ \sys_if_engine_luatex:TF { \cs_new_protected:Npn \sys_gzero_timer: - { \lua_now:n { l3kernel.resettimer() } } + { \@@_resettimer: } } { \cs_new_protected:Npn \sys_gzero_timer: { \tex_resettimer:D } } } @@ -198,7 +216,6 @@ } } % \end{macrocode} -% \end{variable} % \end{macro} % % \subsection{Benchmarking code} diff --git a/macros/latex/contrib/l3experimental/l3benchmark.pdf b/macros/latex/contrib/l3experimental/l3benchmark.pdf index 197eb04aa1..277dab2a22 100644 Binary files a/macros/latex/contrib/l3experimental/l3benchmark.pdf and b/macros/latex/contrib/l3experimental/l3benchmark.pdf differ diff --git a/macros/latex/contrib/l3experimental/l3color.dtx b/macros/latex/contrib/l3experimental/l3color.dtx index f644bf5fde..88129ca31e 100644 --- a/macros/latex/contrib/l3experimental/l3color.dtx +++ b/macros/latex/contrib/l3experimental/l3color.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2020-09-11} +% \date{Released 2020-09-24} % % \maketitle % @@ -362,6 +362,7 @@ % Creates a new \meta{model} which is derived from the color model \meta{family}. % The latter should be one of % \begin{itemize} +% \item \texttt{DeviceN} % \item \texttt{Separation} % \end{itemize} % (The \meta{family} may be given in mixed case as-in the PDF reference: @@ -398,6 +399,13 @@ % not the case, \pkg{l3color} will fallback to using black as the colorant in % any mixing. % +% For a \texttt{DeviceN} space, there is one \emph{compulsory} key. +% \begin{itemize} +% \item \texttt{names} The names of the components of the \texttt{DeviceN} +% space. Each should be either the \meta{name} of a \texttt{Separation} model, +% a process color name (\texttt{cyan}, etc.) or the special name \texttt{none}. +% \end{itemize} +% % \end{documentation} % % \begin{implementation} @@ -413,7 +421,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3color}{2020-09-11}{} +\ProvidesExplPackage{l3color}{2020-09-24}{} {L3 Experimental color support} % \end{macrocode} % @@ -439,8 +447,9 @@ % % \subsection{Setup} % -% \begin{variable}{\l_@@_internal_tl} +% \begin{variable}{\l_@@_internal_int, \l_@@_internal_tl} % \begin{macrocode} +\int_new:N \l_@@_internal_int \tl_new:N \l_@@_internal_tl % \end{macrocode} % \end{variable} @@ -1517,10 +1526,36 @@ % \end{macrocode} % \end{variable} % -% \begin{variable}{\g_@@_separation_int} -% A tracker for the total number of separations. +% \begin{variable}{\g_@@_model_int} +% A tracker for the total number of new models. +% \begin{macrocode} +\int_new:N \g_@@_model_int +% \end{macrocode} +% \end{variable} +% +% \begin{variable} +% {\c_@@_fallback_cmyk_tl, \c_@@_fallback_gray_tl, \c_@@_fallback_rgb_tl} +% Conversion from Separation or DeviceN spaces may not be possible; have +% a fallback to black. +% \begin{macrocode} +\tl_const:Nn \c_@@_fallback_cmyk_tl { 0 ~ 0 ~ 0 ~ 1 } +\tl_const:Nn \c_@@_fallback_gray_tl { 1 } +\tl_const:Nn \c_@@_fallback_rgb_tl { 1 ~ 1 ~ 1 } +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\g_@@_colorants_prop} +% Mapping from names to colorants. % \begin{macrocode} -\int_new:N \g_@@_separation_int +\prop_new:N \g_@@_colorants_prop +\prop_gput:Nnn \g_@@_colorants_prop { black } { Black } +\prop_gput:Nnn \g_@@_colorants_prop { blue } { Blue } +\prop_gput:Nnn \g_@@_colorants_prop { cyan } { Cyan } +\prop_gput:Nnn \g_@@_colorants_prop { green } { Green } +\prop_gput:Nnn \g_@@_colorants_prop { magenta } { Magenta } +\prop_gput:Nnn \g_@@_colorants_prop { none } { None } +\prop_gput:Nnn \g_@@_colorants_prop { red } { Red } +\prop_gput:Nnn \g_@@_colorants_prop { yellow } { Yellow } % \end{macrocode} % \end{variable} % @@ -1553,6 +1588,31 @@ % \end{macrocode} % \end{variable} % +% \begin{variable}{\g_@@_alternative_model_prop} +% For tracking the alternative model set up for separations, etc. +% \begin{macrocode} +\prop_new:N \g_@@_alternative_model_prop +\clist_map_inline:nn { cyan , magenta , yellow , black } + { \prop_gput:Nnn \g_@@_alternative_model_prop {#1} { cmyk } } +\clist_map_inline:nn { red , green , blue } + { \prop_gput:Nnn \g_@@_alternative_model_prop {#1} { rgb } } +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\g_@@_alternative_values_prop} +% Same for the values: a bit more involved. +% \begin{macrocode} +\prop_new:N \g_@@_alternative_values_prop +\prop_gput:Nnn \g_@@_alternative_values_prop { cyan } { 1 , 0 , 0 , 0 } +\prop_gput:Nnn \g_@@_alternative_values_prop { magenta } { 0 , 1 , 0 , 0 } +\prop_gput:Nnn \g_@@_alternative_values_prop { yellow } { 0 , 0 , 1 , 0 } +\prop_gput:Nnn \g_@@_alternative_values_prop { black } { 0 , 0 , 0 , 1 } +\prop_gput:Nnn \g_@@_alternative_values_prop { red } { 1 , 0 , 0 } +\prop_gput:Nnn \g_@@_alternative_values_prop { green } { 0 , 1 , 0 } +\prop_gput:Nnn \g_@@_alternative_values_prop { blue } { 0 , 0 , 1 } +% \end{macrocode} +% \end{variable} +% % \begin{macro}{\color_model_new:nnn, \@@_model_new:nnn} % Set up a new model: in general this has to be handled by a family-dependent % function. To avoid some \enquote{interesting} questions with casing, we @@ -1665,7 +1725,7 @@ \cs_new_protected:Npn \@@_model_separation:w #1 , #2 , #3 , #4 , #5 \s_@@_stop #6#7#8 { - \int_gincr:N \g_@@_separation_int + \int_gincr:N \g_@@_model_int \tl_const:cn { c_@@_fallback_ #6 _tl } { 1 } \cs_new_eq:cN { @@_parse_mix_ #6 :nw } \@@_parse_mix_gray:nw \cs_new:cpn { @@_parse_model_ #6 :w } ##1 , ##2 \s_@@_stop @@ -1675,11 +1735,14 @@ \cs_new_protected:cpx { @@_backend_ ##1 _ #6 :n } ####1 { \exp_not:c { @@_backend_ ##1 _ separation:nn } - { color \int_use:N \g_@@_separation_int } {####1} + { color \int_use:N \g_@@_model_int } {####1} } } \use:c { @@_model_separation_ #8 :nnnnnn } {#6} {#7} {#1} {#2} {#3} {#4} + \prop_gput:Nnn \g_@@_alternative_model_prop {#6} {#8} + \prop_gput:Nnx \g_@@_colorants_prop {#6} + { \str_convert_pdfname:n {#7} } \cs_new_protected:cpx { @@_model_ #6 _white: } { \prop_put:Nnn \exp_not:N \l_@@_named_white_prop {#6} { 0 } @@ -1699,6 +1762,7 @@ } \@@_model_convert:nnn {#1} { cmyk } { rgb } \@@_model_convert:nnn {#1} { cmyk } { gray } + \prop_gput:Nnn \g_@@_alternative_values_prop {#1} { #3 , #4 , #5 , #6 } \@@_backend_separation_init:nnnnn {#2} { /DeviceCMYK } { } { 0 ~ 0 ~ 0 ~ 0 } { #3 ~ #4 ~ #5 ~ #6 } } @@ -1712,6 +1776,7 @@ } \@@_model_convert:nnn {#1} { rgb } { cmyk } \@@_model_convert:nnn {#1} { rgb } { gray } + \prop_gput:Nnn \g_@@_alternative_values_prop {#1} { #3 , #4 , #5 } \@@_backend_separation_init:nnnnn {#2} { /DeviceRGB } { } { 0 ~ 0 ~ 0 } { #3 ~ #4 ~ #5 } } @@ -1732,6 +1797,7 @@ \fp_eval:n {##1 * #3} ~ \fp_eval:n {##1 * #3} } + \prop_gput:Nnn \g_@@_alternative_values_prop {#1} {#3} \@@_backend_separation_init:nnnnn {#2} { /DeviceGray } { } { 0 } {#3} } % \end{macrocode} @@ -1797,6 +1863,529 @@ % \end{macro} % \end{macro} % +% \begin{macro}{\@@_model_devicen:n} +% \begin{macro}{\@@_model_devicen:nn} +% \begin{macro}{\@@_model_devicen:nnn} +% \begin{macro}{\@@_model_devicen:nnnn} +% \begin{macro} +% { +% \@@_model_devicen_parse_1:nn , +% \@@_model_devicen_parse_2:nn , +% \@@_model_devicen_parse_3:nn , +% \@@_model_devicen_parse_4:nn , +% \@@_model_devicen_parse_generic:nn +% } +% \begin{macro}[EXP]{\@@_model_devicen_parse:nw} +% \begin{macro}[EXP]{\@@_model_devicen_mix:nw} +% \begin{macro}{\@@_model_devicen_init:nnn} +% \begin{macro}{\@@_model_devicen_init:nnnn} +% \begin{macro}{\@@_model_devicen_tranform:w} +% \begin{macro} +% { +% \@@_model_devicen_tranform_1:nnnnn , +% \@@_model_devicen_tranform_3:nnnnn , +% \@@_model_devicen_tranform_4:nnnnn , +% } +% \begin{macro}{\@@_model_devicen_tranform:nnn} +% \begin{macro}[EXP]{\@@_model_devicen_colorant:n} +% \begin{macro}{\@@_model_devicen_convert:nnn} +% \begin{macro} +% { +% \@@_model_devicen_convert_cmyk:n , +% \@@_model_devicen_convert_gray:n , +% \@@_model_devicen_convert_rgb:n +% } +% \begin{macro}{\@@_model_devicen_convert:nnnn} +% \begin{macro}[EXP]{\@@_model_devicen_convert:n, \@@_model_devicen_convert_aux:n} +% \begin{macro}[EXP]{\@@_model_devicen_convert:w} +% \begin{macro}[EXP]{\@@_convert_devicen_cmyk:nnnnw} +% \begin{macro}[EXP]{\@@_convert_devicen_cmyk:nnnnnnnnn} +% \begin{macro}[EXP]{\@@_convert_devicen_cmyk_aux:nnnnw} +% \begin{macro}[EXP]{\@@_convert_devicen_gray:nw} +% \begin{macro}[EXP]{\@@_convert_devicen_gray:nnn} +% \begin{macro}[EXP]{\@@_convert_devicen_gray_aux:nw} +% \begin{macro}[EXP]{\@@_convert_devicen_rgb:nnnw} +% \begin{macro}[EXP]{\@@_convert_devicen_rgb:nnnnnnn} +% \begin{macro}[EXP]{\@@_convert_devicen_rgb_aux:nnnw} +% We require a list of component names here: one might call them colorants, +% but it's convenient to use \TeX{} names instead so we slightly adjust the +% terminology. +% \begin{macrocode} +\cs_new_protected:Npn \@@_model_devicen:n #1 + { + \prop_get:NnNTF \l_@@_internal_prop { names } + \l_@@_internal_tl + { + \exp_args:NV \@@_model_devicen:nn + \l_@@_internal_tl {#1} + } + { + \__kernel_msg_error:nnn { color } + { DeviceN-requires-names } {#1} + } + } +% \end{macrocode} +% All valid models will have an alternative listed, either hard-coded for +% the core device ones, or dynamically added for Separations, etc. +% \begin{macrocode} +\cs_new_protected:Npn \@@_model_devicen:nn #1#2 + { + \tl_clear:N \l_@@_model_tl + \clist_map_inline:nn {#1} + { + \prop_get:NnNTF \g_@@_alternative_model_prop {##1} + \l_@@_internal_tl + { + \tl_if_empty:NTF \l_@@_model_tl + { \tl_set_eq:NN \l_@@_model_tl \l_@@_internal_tl } + { + \str_if_eq:VVF \l_@@_model_tl \l_@@_internal_tl + { + \__kernel_msg_error:nnn { color } + { DeviceN-inconsistent-alternative } + {#2} + \clist_map_break:n { \use_none:nnnn } + } + } + } + { + \str_if_eq:nnF {##1} { none } + { + \__kernel_msg_error:nnn { color } + { DeviceN-no-alternative } + {#2} + } + } + } + \tl_if_empty:NTF \l_@@_model_tl + { + \__kernel_msg_error:nnn { color } + { DeviceN-no-alternative } {#2} + } + { \exp_args:NV \@@_model_devicen:nnn \l_@@_model_tl {#1} {#2} } + } +% \end{macrocode} +% We now complete the data we require by first finding out how many +% colorants there are, then moving on to begin constructing the function +% required to map to the alternative color space. +% \begin{macrocode} +\cs_new_protected:Npn \@@_model_devicen:nnn #1#2#3 + { + \exp_args:Nx \@@_model_devicen:nnnn + { \clist_count:n {#2} } {#1} {#2} {#3} + } +% \end{macrocode} +% At this stage, we have checked everything is in place, so we can set up +% the \TeX{} and backend data structures. As for separations, it's not really +% possible in general to have a fallback, so we simply provide +% \enquote{black} for each element. +% \begin{macrocode} +\cs_new_protected:Npn \@@_model_devicen:nnnn #1#2#3#4 + { + \int_gincr:N \g_@@_model_int + \tl_const:cx { c_@@_fallback_ #4 _tl } + { \prg_replicate:nn {#1} { 1 ~ } } + \cs_if_exist_use:cF { @@_model_devicen_parse_ #1 :nn } + { \@@_model_devicen_parse_generic:nn } + {#4} {#1} + \clist_map_inline:nn { fill , stroke , select } + { + \cs_new_protected:cpx { @@_backend_ ##1 _ #4 :n } ####1 + { + \exp_not:c { @@_backend_ ##1 _ devicen:nn } + { color \int_use:N \g_@@_model_int } {####1} + } + } + \cs_new_protected:cpx { @@_model_ #4 _white: } + { + \prop_put:Nnn \exp_not:N \l_@@_named_white_prop {#4} + { \prg_replicate:nn {#1} { 0 ~ } } + \exp_not:N \int_compare:nNnF { \tex_currentgrouplevel:D } = 0 + { \group_insert_after:N \exp_not:c { @@_model_ #4 _ white: } } + } + \use:c { @@_model_ #4 _white: } + \@@_model_devicen_init:nnn {#1} {#2} {#3} + \@@_model_devicen_convert:nnn {#4} {#2} {#3} + } +% \end{macrocode} +% For short lists of DeviceN colors, wee can use hand-tuned parsing. This +% lines up with other models, where we allow for up to four components. For +% larger spaces,. rather than limit artificially, we use a somewhat slow +% approach based on open-ended commas-lists. +% \begin{macrocode} +\cs_new_protected:cpn { @@_model_devicen_parse_1:nn } #1#2 + { + \cs_new:cpn { @@_parse_model_ #1 :w } ##1 , ##2 \s_@@_stop + { {#1} { \@@_parse_number:n {##1} } } + \cs_new_eq:cN { @@_parse_mix_ #1 :nw } \@@_parse_mix_gray:nw + } +\cs_new_protected:cpn { @@_model_devicen_parse_2:nn } #1#2 + { + \cs_new:cpn { @@_parse_model_ #1 :w } ##1 , ##2 , ##3 \s_@@_stop + { {#1} { \@@_parse_number:n {##1} ~ \@@_parse_number:n {##2} } } + \cs_new:cpn { @@_parse_mix_ #1 :nw } + ##1##2 ~ ##3 \s_@@_mark ##4 ~ ##5 \s_@@_stop + { + \fp_eval:n { ##2 * ##1 + ##4 * ( 1 - ##1 ) } \c_space_tl + \fp_eval:n { ##3 * ##1 + ##5 * ( 1 - ##1 ) } + } + } +\cs_new_protected:cpn { @@_model_devicen_parse_3:nn } #1#2 + { + \cs_new:cpn { @@_parse_model_ #1 :w } ##1 , ##2 , ##3 , ##4 \s_@@_stop + { + {#1} + { + \@@_parse_number:n {##1} ~ + \@@_parse_number:n {##2} ~ + \@@_parse_number:n {##3} + } + } + \cs_new_eq:cN { @@_parse_mix_ #1 :nw } \@@_parse_mix_rgb:nw + } +\cs_new_protected:cpn { @@_model_devicen_parse_4:nn } #1#2 + { + \cs_new:cpn { @@_parse_model_ #1 :w } + ##1 , ##2 , ##3 , ##4 , ##5 \s_@@_stop + { + {#1} + { + \@@_parse_number:n {##1} ~ + \@@_parse_number:n {##2} ~ + \@@_parse_number:n {##3} ~ + \@@_parse_number:n {##4} + } + } + \cs_new_eq:cN { @@_parse_mix_ #1 :nw } \@@_parse_mix_cmyk:nw + } +\cs_new_protected:Npn \@@_model_devicen_parse_generic:nn #1#2 + { + \cs_new:cpn { @@_parse_model_ #1 :w } ##1 , ##2 \s_@@_stop + { + {#1} + { \@@_model_devicen_parse:nw {#2} ##1 , ##2 , \q_nil , \s_@@_stop } + } + \cs_new:cpx { @@_parse_mix_ #1 :nw } + ##1 ##2 \s_@@_mark ##3 \s_@@_stop + { + \exp_not:N \@@_model_devicen_mix:nw {##1} + ##2 \c_space_tl \exp_not:N \q_nil \c_space_tl \exp_not:N \s_@@_mark + ##3 \c_space_tl \exp_not:N \q_nil \c_space_tl \exp_not:N \s_@@_stop + } + } +\cs_new:Npn \@@_model_devicen_parse:nw #1#2 , #3 \s_@@_stop + { + \int_compare:nNnT {#1} > 0 + { + \quark_if_nil:nTF {#2} + { \prg_replicate:nn {#1} { 0 ~ } } + { + \@@_parse_number:n {#2} + \int_compare:nNnT {#1} > 1 { ~ } + \exp_args:Nf \@@_model_devicen_parse:nw + { \int_eval:n { #1 - 1 } } #3 \s_@@_stop + } + } + } +\cs_new:Npn \@@_model_devicen_mix:nw #1#2 ~ #3 \s_@@_mark #4 ~ #5 \s_@@_stop + { + \fp_eval:n { #2 * #1 + #4 * ( 1 - #1 ) } + \quark_if_nil:oF { \tl_head:w #3 \q_stop } + { + \c_space_tl + \@@_model_devicen_mix:nw {#1} #3 \s_@@_mark #5 \s_@@_stop + } + } +% \end{macrocode} +% To construct the tint transformation, we have to use PostScript. The +% aim is to have the final tint for each device colorant as +% \[ +% 1 - \prod_{n} (1 - X_{n} D_{X_{n}}) +% \] +% where $X$ is a DeviceN colorant and $D$ is the amount of device colorant +% that the DeviceN colorant maps to. At the start of the process, the +% PostScript stack will contain the $X_{n}$ values, whilst we have the +% $D$ values on a per-DeviceN colorant basis. The more convenient approach +% for us is therefore to take each DeviceN colorant in turn and find the +% value $1 - X_{n} D_{X_{n}}$, multiplying as we go, and finalise with the +% subtraction. That contrasts to \pkg{colorspace}: it splits the process +% up by process color, which works better when you have a fixed list +% of colorants. (\pkg{colorspace} only supports up to $4$ DeviceN colors, +% and only \texttt{cmyk} as the alternative space.) To set this up, +% we first need to know the number of values in the target color space: +% this is easily handled as there are a very small range of possibles. +% Once we have that information, it's relatively easy to build the required +% PostScript using some generic code. +% \begin{macrocode} +\cs_new_protected:Npn \@@_model_devicen_init:nnn #1#2#3 + { + \exp_args:Ne \@@_model_devicen_init:nnnn + { + \str_case:nn {#2} + { + { cmyk } { 4 } + { gray } { 1 } + { rgb } { 3 } + } + } + {#1} {#2} {#3} + } +% \end{macrocode} +% As we always need to split the alternative values into parts, we use a +% shared auxiliary and only use a minimal difference between code paths. +% Construction of the tint transformation is as far as possible done using +% loops, which means there are some inefficiencies for device colors in +% the \texttt{DeviceN} space: we roll the stack one-at-a-time even if there +% is a potential shortcut. However, that way there is nothing to special-case. +% Once this is sorted, we can write the tint transform object, which will +% remain as the last object until we sort out the final step: the colorant +% list. +% \begin{macrocode} +\cs_new_protected:Npn \@@_model_devicen_init:nnnn #1#2#3#4 + { + \tl_set:Nx \l_@@_internal_tl + { \prg_replicate:nn {#1} { 1.0 ~ } } + \int_zero:N \l_@@_internal_int + \clist_map_inline:nn {#4} + { + \int_incr:N \l_@@_internal_int + \prop_get:NnN \g_@@_alternative_values_prop {##1} + \l_@@_value_tl + \exp_after:wN \@@_model_devicen_transform:w + \l_@@_value_tl , 0 , 0 , 0 \s_@@_stop {#1} {#2} + } + \tl_put_right:Nx \l_@@_internal_tl + { + \prg_replicate:nn {#1} + { neg ~ 1.0 ~ add ~ #1 ~ -1 ~ roll ~ } + \int_eval:n { #2 + 4 } ~ 4 ~ roll + \prg_replicate:nn {#2} { ~ pop } + } + \use:x + { + \@@_backend_devicen_init:nnn + { + \clist_map_function:nN {#4} + \@@_model_devicen_colorant:n + } + { + \str_case:nn {#3} + { + { cmyk } { /DeviceCMYK } + { gray } { /DeviceGray } + { rgb } { /DeviceRGB } + } + } + { \exp_not:V \l_@@_internal_tl } + } + } +\cs_new_protected:Npn \@@_model_devicen_transform:w + #1 , #2 , #3 , #4 , #5 \s_@@_stop #6#7 + { + \use:c { @@_model_devicen_transform_ #6 :nnnnn } + {#1} {#2} {#3} {#4} {#7} + } +\cs_new_protected:cpn { @@_model_devicen_transform_1:nnnnn } #1#2#3#4#5 + { \@@_model_devicen_transform:nnn {#5} { 1 } {#1} } +\cs_new_protected:cpn { @@_model_devicen_transform_3:nnnnn } #1#2#3#4#5 + { + \clist_map_inline { #1 , #2 , #3 } + { \@@_model_devicen_transform:nnn {#5} { 3 } {##1} } + } +\cs_new_protected:cpn { @@_model_devicen_transform_4:nnnnn } #1#2#3#4#5 + { + \clist_map_inline:nn { #1 , #2 , #3 , #4 } + { \@@_model_devicen_transform:nnn {#5} { 4 } {##1} } + } +\cs_new_protected:Npn \@@_model_devicen_transform:nnn #1#2#3 + { + \tl_put_right:Nx \l_@@_internal_tl + { + \fp_compare:nNnF {#3} = \c_zero_fp + { + \int_eval:n { #1 - \l_@@_internal_int + #2 } ~ index ~ + #3 ~ neg ~ mul ~ 1.0 ~ add ~ mul ~ + } + #2 ~ -1 ~ roll ~ + } + } +\cs_new:Npn \@@_model_devicen_colorant:n #1 + { + / \prop_item:Nn \g_@@_colorants_prop {#1} ~ + } +% \end{macrocode} +% Here we need to set up conversion from the DeviceN space to the alternative +% at the \TeX{} level. This also means supplying methods for inter-converting +% to other parameter-based spaces. Essentially the approach is exactly the same +% as the PostScript, just expressed in \TeX{} terms. +% \begin{macrocode} +\cs_new_protected:Npn \@@_model_devicen_convert:nnn #1#2#3 + { + \use:c { @@_model_devicen_convert_ #2 :nn } {#1} {#3} + } +\cs_new_protected:Npn \@@_model_devicen_convert_cmyk:nn #1#2 + { + \@@_model_convert:nnn {#1} { cmyk } { gray } + \@@_model_convert:nnn {#1} { cmyk } { rgb } + \@@_model_devicen_convert:nnnn {#1} { cmyk } { 4 } {#2} + } +\cs_new_protected:Npn \@@_model_devicen_convert_gray:nn #1#2 + { + \@@_model_convert:nnn {#1} { gray } { cmyk } + \@@_model_convert:nnn {#1} { gray } { rgb } + \@@_model_devicen_convert:nnnn {#1} { gray } { 1 } {#2} + } +\cs_new_protected:Npn \@@_model_devicen_convert_rgb:nn #1#2 + { + \@@_model_convert:nnn {#1} { rgb } { cmyk } + \@@_model_convert:nnn {#1} { rgb } { gray } + \@@_model_devicen_convert:nnnn {#1} { rgb } { 3 } {#2} + } +\cs_new_protected:Npn \@@_model_devicen_convert:nnnn #1#2#3#4 + { + \cs_new:cpx { @@_convert_ #1 _ #2 :w } ##1 \s_@@_stop + { + \exp_not:c { @@_convert_devicen_ #2 : \prg_replicate:nn {#3} { n } w } + \prg_replicate:nn {#3} { { 1 } } + ##1 \exp_not:N \s_@@_mark + \clist_map_function:nN {#4} \@@_model_devicen_convert:n + \exp_not:N \s_@@_stop + } + } +\cs_new:Npn \@@_model_devicen_convert:n #1 + { + { + \exp_args:Ne \@@_model_devicen_convert_aux:n + { \prop_item:Nn \g_@@_alternative_values_prop {#1} } + } + } +\cs_new:Npn \@@_model_devicen_convert_aux:n #1 + { \@@_model_devicen_convert_aux:w #1 , , , , \s_@@_stop } +\cs_new:Npn \@@_model_devicen_convert_aux:w #1 , #2 , #3 , #4 , #5 \s_@@_stop + { + {#1} + \tl_if_blank:nF {#2} + { + {#2} + \tl_if_blank:nF {#3} + { + {#3} + \tl_if_blank:nF {#4} { {#4} } + } + } + } +\cs_new:Npn \@@_convert_devicen_cmyk:nnnnw + #1#2#3#4#5 ~ #6 \s_@@_mark #7#8 \s_@@_stop + { + \@@_convert_devicen_cmyk:nnnnnnnnn {#5} {#1} {#2} {#3} {#4} #7 + #6 \s_@@_mark #8 \s_@@_stop + } +\cs_new:Npn \@@_convert_devicen_cmyk:nnnnnnnnn #1#2#3#4#5#6#7#8#9 + { + \use:e + { + \exp_not:N \@@_convert_devicen_cmyk_aux:nnnnw + { \fp_eval:n { #2 * (1 - (#1 * #6)) } } + { \fp_eval:n { #3 * (1 - (#1 * #7)) } } + { \fp_eval:n { #4 * (1 - (#1 * #8)) } } + { \fp_eval:n { #5 * (1 - (#1 * #9)) } } + } + } +\cs_new:Npn \@@_convert_devicen_cmyk_aux:nnnnw + #1#2#3#4 #5 \s_@@_mark #6 \s_@@_stop + { + \tl_if_blank:nTF {#5} + { + \fp_eval:n { 1 - #1 } ~ + \fp_eval:n { 1 - #2 } ~ + \fp_eval:n { 1 - #3 } ~ + \fp_eval:n { 1 - #4 } + } + { + \@@_convert_devicen_cmyk:nnnnw {#1} {#2} {#3} {#4} + #5 \s_@@_mark #6 \s_@@_stop + } + } +\cs_new:Npn \@@_convert_devicen_gray:nw + #1#2 ~ #3 \s_@@_mark #4#5 \s_@@_stop + { + \@@_convert_devicen_gray:nnn {#2} {#1} #4 + #3 \s_@@_mark #5 \s_@@_stop + } +\cs_new:Npn \@@_convert_devicen_gray:nnn #1#2#3 + { + \exp_arsgs:Ne \@@_convert_devicen_gray_aux:nw + { \fp_eval:n { #2 * (1 - (#1 * #3)) } } + } +\cs_new:Npn \@@_convert_devicen_gray_aux:nw + #1 #2 \s_@@_mark #3 \s_@@_stop + { + \tl_if_blank:nTF {#2} + { \fp_eval:n { 1 - #1 } } + { + \@@_convert_devicen_gray:nw {#1} + #2 \s_@@_mark #3 \s_@@_stop + } + } +\cs_new:Npn \@@_convert_devicen_rgb:nnnw + #1#2#3#4 ~ #5 \s_@@_mark #6#7 \s_@@_stop + { + \@@_convert_devicen_cmyk:nnnnnn {#4} {#1} {#2} {#3} #6 + #5 \s_@@_mark #7 \s_@@_stop + } +\cs_new:Npn \@@_convert_devicen_rgb:nnnnnnn #1#2#3#4#5#6#7 + { + \use:e + { + \exp_not:N \@@_convert_devicen_rgb_aux:nnnw + { \fp_eval:n { #2 * (1 - (#1 * #5)) } } + { \fp_eval:n { #3 * (1 - (#1 * #6)) } } + { \fp_eval:n { #4 * (1 - (#1 * #7)) } } + } + } +\cs_new:Npn \@@_convert_devicen_rgb_aux:nnnw + #1#2#3 #4 \s_@@_mark #5 \s_@@_stop + { + \tl_if_blank:nTF {#4} + { + \fp_eval:n { 1 - #1 } ~ + \fp_eval:n { 1 - #2 } ~ + \fp_eval:n { 1 - #3 } + } + { + \@@_convert_devicen_rgb:nnnw {#1} {#2} {#3} + #4 \s_@@_mark #5 \s_@@_stop + } + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% % \subsection{Diagnostics} % % \begin{macro}{\color_show:n} @@ -1830,7 +2419,7 @@ % % \subsection{Messages} % -% \begin{macrocode} +% \begin{macrocode} \__kernel_msg_new:nnnn { color } { CIELAB-requires-illuminant } { CIELAB~color~space~'#1'~require~an~illuminant. } { @@ -1847,6 +2436,28 @@ LaTeX~has~been~asked~to~convert~a~color~from~model~'#1'~ to~model'#2',~but~there~is~no~method~available~to~do~that. } +\__kernel_msg_new:nnnn { color } { DeviceN-inconsistent-alternative } + { DeviceN~color~spaces~require~a~single~alternative~space. } + { + LaTeX~has~been~asked~to~create~a~DeviceN~color~space~'#1',~ + but~the~constituent~colors~do~not~have~a~common~alternative~ + color. + } +\__kernel_msg_new:nnnn { color } { DeviceN-no-alternative } + { DeviceN~color~spaces~require~an~alternative~space. } + { + LaTeX~has~been~asked~to~create~a~DeviceN~color~space~'#1',~ + but~the~constituent~colors~do~not~all~have~a~device-based~alternative. + } +\__kernel_msg_new:nnnn { color } { DeviceN-requires-names } + { DeviceN~color~space~'#1'~require~a~list~of~names. } + { + LaTeX~has~been~asked~to~create~a~DeviceN~color~space,~ + but~no~\\ \\ + \iow_indent:n { names~=~ } + \\ \\ + key~was~given~with~the~correct~information. + } \__kernel_msg_new:nnnn { color } { model-already-defined } { Color~model~'#1'~already~defined. } { @@ -1919,9 +2530,9 @@ LaTeX~has~been~asked~to~create~a~new~color~model~called~'#1',~ but~this~type~of~model~was~never~set~up. } -% \end{macrocode} +% \end{macrocode} % -% \begin{macrocode} +% \begin{macrocode} \__kernel_msg_new:nnn { color } { show } { The~color~#1~ @@ -1929,7 +2540,7 @@ { is~undefined. } { has~the~properties: #2 } } -% \end{macrocode} +% \end{macrocode} % % \begin{macrocode} % diff --git a/macros/latex/contrib/l3experimental/l3color.pdf b/macros/latex/contrib/l3experimental/l3color.pdf index f2a6933a84..e670402832 100644 Binary files a/macros/latex/contrib/l3experimental/l3color.pdf and b/macros/latex/contrib/l3experimental/l3color.pdf differ diff --git a/macros/latex/contrib/l3experimental/l3draw-boxes.dtx b/macros/latex/contrib/l3experimental/l3draw-boxes.dtx index afc4616dfb..029f791813 100644 --- a/macros/latex/contrib/l3experimental/l3draw-boxes.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-boxes.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-09-11} +% \date{Released 2020-09-24} % % \maketitle % diff --git a/macros/latex/contrib/l3experimental/l3draw-code.pdf b/macros/latex/contrib/l3experimental/l3draw-code.pdf index 2226678a0e..95ef0c0c73 100644 Binary files a/macros/latex/contrib/l3experimental/l3draw-code.pdf and b/macros/latex/contrib/l3experimental/l3draw-code.pdf differ diff --git a/macros/latex/contrib/l3experimental/l3draw-layers.dtx b/macros/latex/contrib/l3experimental/l3draw-layers.dtx index ffe0cd9588..19898aee89 100644 --- a/macros/latex/contrib/l3experimental/l3draw-layers.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-layers.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-09-11} +% \date{Released 2020-09-24} % % \maketitle % diff --git a/macros/latex/contrib/l3experimental/l3draw-paths.dtx b/macros/latex/contrib/l3experimental/l3draw-paths.dtx index 9f87bf357c..5ca8e42688 100644 --- a/macros/latex/contrib/l3experimental/l3draw-paths.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-paths.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-09-11} +% \date{Released 2020-09-24} % % \maketitle % diff --git a/macros/latex/contrib/l3experimental/l3draw-points.dtx b/macros/latex/contrib/l3experimental/l3draw-points.dtx index aafe12bcc2..7537ffb85a 100644 --- a/macros/latex/contrib/l3experimental/l3draw-points.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-points.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-09-11} +% \date{Released 2020-09-24} % % \maketitle % diff --git a/macros/latex/contrib/l3experimental/l3draw-scopes.dtx b/macros/latex/contrib/l3experimental/l3draw-scopes.dtx index 99edbf1992..c35149facb 100644 --- a/macros/latex/contrib/l3experimental/l3draw-scopes.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-scopes.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-09-11} +% \date{Released 2020-09-24} % % \maketitle % diff --git a/macros/latex/contrib/l3experimental/l3draw-softpath.dtx b/macros/latex/contrib/l3experimental/l3draw-softpath.dtx index e6b35bf790..b0e003b844 100644 --- a/macros/latex/contrib/l3experimental/l3draw-softpath.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-softpath.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-09-11} +% \date{Released 2020-09-24} % % \maketitle % diff --git a/macros/latex/contrib/l3experimental/l3draw-state.dtx b/macros/latex/contrib/l3experimental/l3draw-state.dtx index 53cc03b98e..1af7a525b9 100644 --- a/macros/latex/contrib/l3experimental/l3draw-state.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-state.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-09-11} +% \date{Released 2020-09-24} % % \maketitle % diff --git a/macros/latex/contrib/l3experimental/l3draw-transforms.dtx b/macros/latex/contrib/l3experimental/l3draw-transforms.dtx index e30bcf6d19..6bb90111e1 100644 --- a/macros/latex/contrib/l3experimental/l3draw-transforms.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-transforms.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-09-11} +% \date{Released 2020-09-24} % % \maketitle % diff --git a/macros/latex/contrib/l3experimental/l3draw.dtx b/macros/latex/contrib/l3experimental/l3draw.dtx index 6d1e5e96aa..69f322a0fa 100644 --- a/macros/latex/contrib/l3experimental/l3draw.dtx +++ b/macros/latex/contrib/l3experimental/l3draw.dtx @@ -110,7 +110,7 @@ % }^^A % } % -% \date{Released 2020-09-11} +% \date{Released 2020-09-24} % % \maketitle % @@ -1136,7 +1136,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3draw}{2020-09-11}{} +\ProvidesExplPackage{l3draw}{2020-09-24}{} {L3 Experimental core drawing support} % \end{macrocode} % diff --git a/macros/latex/contrib/l3experimental/l3draw.pdf b/macros/latex/contrib/l3experimental/l3draw.pdf index ea0c2c3cd2..6e4e62367e 100644 Binary files a/macros/latex/contrib/l3experimental/l3draw.pdf and b/macros/latex/contrib/l3experimental/l3draw.pdf differ diff --git a/macros/latex/contrib/l3experimental/l3galley.dtx b/macros/latex/contrib/l3experimental/l3galley.dtx index 5de6c7c4aa..212d9e6320 100644 --- a/macros/latex/contrib/l3experimental/l3galley.dtx +++ b/macros/latex/contrib/l3experimental/l3galley.dtx @@ -61,7 +61,7 @@ % }^^A % } % -% \date{Released 2020-09-11} +% \date{Released 2020-09-24} % % \maketitle % @@ -686,7 +686,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3galley}{2020-09-11}{} +\ProvidesExplPackage{l3galley}{2020-09-24}{} {L3 Experimental galley code} % \end{macrocode} % diff --git a/macros/latex/contrib/l3experimental/l3galley.pdf b/macros/latex/contrib/l3experimental/l3galley.pdf index aeb2cb074f..d23ea467fc 100644 Binary files a/macros/latex/contrib/l3experimental/l3galley.pdf and b/macros/latex/contrib/l3experimental/l3galley.pdf differ diff --git a/macros/latex/contrib/l3experimental/l3graphics.dtx b/macros/latex/contrib/l3experimental/l3graphics.dtx index 6d74ceebb9..9a44973417 100644 --- a/macros/latex/contrib/l3experimental/l3graphics.dtx +++ b/macros/latex/contrib/l3experimental/l3graphics.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2020-09-11} +% \date{Released 2020-09-24} % % \maketitle % @@ -240,7 +240,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3graphics}{2020-09-11}{} +\ProvidesExplPackage{l3graphics}{2020-09-24}{} {L3 Experimental graphics inclusion support} % \end{macrocode} % diff --git a/macros/latex/contrib/l3experimental/l3graphics.pdf b/macros/latex/contrib/l3experimental/l3graphics.pdf index 824722260e..74a9c73077 100644 Binary files a/macros/latex/contrib/l3experimental/l3graphics.pdf and b/macros/latex/contrib/l3experimental/l3graphics.pdf differ diff --git a/macros/latex/contrib/l3experimental/l3pdf-code.pdf b/macros/latex/contrib/l3experimental/l3pdf-code.pdf index b9936cc61e..e73f7fb464 100644 Binary files a/macros/latex/contrib/l3experimental/l3pdf-code.pdf and b/macros/latex/contrib/l3experimental/l3pdf-code.pdf differ diff --git a/macros/latex/contrib/l3experimental/l3pdf.dtx b/macros/latex/contrib/l3experimental/l3pdf.dtx index e5af45a9b8..4eec458dce 100644 --- a/macros/latex/contrib/l3experimental/l3pdf.dtx +++ b/macros/latex/contrib/l3experimental/l3pdf.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2020-09-11} +% \date{Released 2020-09-24} % % \maketitle % @@ -190,7 +190,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3pdf}{2020-09-11}{} +\ProvidesExplPackage{l3pdf}{2020-09-24}{} {L3 Experimental core PDF support} % \end{macrocode} % diff --git a/macros/latex/contrib/l3experimental/l3pdf.pdf b/macros/latex/contrib/l3experimental/l3pdf.pdf index 50f9afafa4..cede734c74 100644 Binary files a/macros/latex/contrib/l3experimental/l3pdf.pdf and b/macros/latex/contrib/l3experimental/l3pdf.pdf differ diff --git a/macros/latex/contrib/l3experimental/l3str-format.dtx b/macros/latex/contrib/l3experimental/l3str-format.dtx index 775e5d809f..da524edf58 100644 --- a/macros/latex/contrib/l3experimental/l3str-format.dtx +++ b/macros/latex/contrib/l3experimental/l3str-format.dtx @@ -48,7 +48,7 @@ % }^^A % } % -% \date{Released 2020-09-11} +% \date{Released 2020-09-24} % % \maketitle % @@ -166,7 +166,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3str-format}{2020-09-11}{} +\ProvidesExplPackage{l3str-format}{2020-09-24}{} {L3 Experimental string formatting} % \end{macrocode} % diff --git a/macros/latex/contrib/l3experimental/l3str-format.pdf b/macros/latex/contrib/l3experimental/l3str-format.pdf index 9cde8e0e97..75bdb6272d 100644 Binary files a/macros/latex/contrib/l3experimental/l3str-format.pdf and b/macros/latex/contrib/l3experimental/l3str-format.pdf differ diff --git a/macros/latex/contrib/l3experimental/l3sys-shell.dtx b/macros/latex/contrib/l3experimental/l3sys-shell.dtx index 807e7383d3..40b5201767 100644 --- a/macros/latex/contrib/l3experimental/l3sys-shell.dtx +++ b/macros/latex/contrib/l3experimental/l3sys-shell.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2020-09-11} +% \date{Released 2020-09-24} % % \maketitle % @@ -135,7 +135,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3sys-shell}{2020-09-11}{} +\ProvidesExplPackage{l3sys-shell}{2020-09-24}{} {L3 Experimental system shell functions} % \end{macrocode} % diff --git a/macros/latex/contrib/l3experimental/l3sys-shell.pdf b/macros/latex/contrib/l3experimental/l3sys-shell.pdf index 6939e5e38e..a01691cf7e 100644 Binary files a/macros/latex/contrib/l3experimental/l3sys-shell.pdf and b/macros/latex/contrib/l3experimental/l3sys-shell.pdf differ diff --git a/macros/latex/contrib/l3experimental/xcoffins.dtx b/macros/latex/contrib/l3experimental/xcoffins.dtx index 4286442045..9985fbb393 100644 --- a/macros/latex/contrib/l3experimental/xcoffins.dtx +++ b/macros/latex/contrib/l3experimental/xcoffins.dtx @@ -56,7 +56,7 @@ % }^^A % } % -% \date{Released 2020-09-11} +% \date{Released 2020-09-24} % % \maketitle % @@ -675,7 +675,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xcoffins}{2020-09-11}{} +\ProvidesExplPackage{xcoffins}{2020-09-24}{} {L3 Experimental design level coffins} % \end{macrocode} % diff --git a/macros/latex/contrib/l3experimental/xcoffins.pdf b/macros/latex/contrib/l3experimental/xcoffins.pdf index 3872ed532b..6843289a1b 100644 Binary files a/macros/latex/contrib/l3experimental/xcoffins.pdf and b/macros/latex/contrib/l3experimental/xcoffins.pdf differ diff --git a/macros/latex/contrib/l3experimental/xgalley.dtx b/macros/latex/contrib/l3experimental/xgalley.dtx index 52667441b6..06c7f3c371 100644 --- a/macros/latex/contrib/l3experimental/xgalley.dtx +++ b/macros/latex/contrib/l3experimental/xgalley.dtx @@ -47,7 +47,7 @@ % }^^A % } % -% \date{Released 2020-09-11} +% \date{Released 2020-09-24} % % \maketitle % @@ -734,7 +734,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xgalley}{2020-09-11}{} +\ProvidesExplPackage{xgalley}{2020-09-24}{} {L3 Experimental galley} \RequirePackage{xparse,xtemplate,l3galley} % \end{macrocode} diff --git a/macros/latex/contrib/l3experimental/xgalley.pdf b/macros/latex/contrib/l3experimental/xgalley.pdf index 9a3af8e4dc..1bd85f608d 100644 Binary files a/macros/latex/contrib/l3experimental/xgalley.pdf and b/macros/latex/contrib/l3experimental/xgalley.pdf differ -- cgit v1.2.3