diff options
Diffstat (limited to 'Master/texmf-dist')
77 files changed, 2527 insertions, 592 deletions
diff --git a/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md b/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md index 242cacf93aa..4d4f19b44b7 100644 --- a/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md +++ b/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md @@ -6,6 +6,17 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2020-01-29] + +### Added +- Basic opacity support + +### Changed +- Use color stack for fill color, and for stroke color if possible + +### Fixed +- Implementation of `filldraw` for `dvips` + ## [2021-01-09] ### Added @@ -135,7 +146,8 @@ this project uses date-based 'snapshot' version identifiers. - Include `l3backend` in file names - Moved backend code to internal for each 'parent' module -[Unreleased]: https://github.com/latex3/latex3/compare/2021-01-09...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2020-01-29...HEAD +[2020-01-29]: https://github.com/latex3/latex3/compare/2021-01-09...2020-01-29 [2021-01-09]: https://github.com/latex3/latex3/compare/2020-09-24...2021-01-09 [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 diff --git a/Master/texmf-dist/doc/latex/l3backend/README.md b/Master/texmf-dist/doc/latex/l3backend/README.md index 21f57acd743..bc607bd5433 100644 --- a/Master/texmf-dist/doc/latex/l3backend/README.md +++ b/Master/texmf-dist/doc/latex/l3backend/README.md @@ -1,7 +1,7 @@ LaTeX3 Backend Drivers ====================== -Release 2021-01-09 +Release 2020-01-29 This package forms parts of `expl3`, and contains the code used to interface with backends (drivers) across the `expl3` codebase. The functions here are @@ -11,6 +11,6 @@ on an independent schedule. ----- -<p>Copyright (C) 2019-2021 The LaTeX3 Project <br /> +<p>Copyright (C) 2019-2021 The LaTeX Project <br /> <a href="http://latex-project.org/">http://latex-project.org/</a> <br /> All rights reserved.</p> diff --git a/Master/texmf-dist/doc/latex/l3backend/l3backend-code.pdf b/Master/texmf-dist/doc/latex/l3backend/l3backend-code.pdf Binary files differindex f0a28c396f3..2e72444e298 100644 --- a/Master/texmf-dist/doc/latex/l3backend/l3backend-code.pdf +++ b/Master/texmf-dist/doc/latex/l3backend/l3backend-code.pdf diff --git a/Master/texmf-dist/doc/latex/l3backend/l3backend-code.tex b/Master/texmf-dist/doc/latex/l3backend/l3backend-code.tex index 55dce66e1fc..d8a1ca7cf69 100644 --- a/Master/texmf-dist/doc/latex/l3backend/l3backend-code.tex +++ b/Master/texmf-dist/doc/latex/l3backend/l3backend-code.tex @@ -2,7 +2,7 @@ File: l3backend-code.tex -Copyright (C) 2019 The LaTeX3 Project +Copyright (C) 2019,2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this @@ -44,6 +44,7 @@ for those people who are interested. l3backend-draw.dtx , l3backend-graphics.dtx , l3backend-pdf.dtx , + l3backend-opacity.dtx , l3backend-header.dtx } \ExplSyntaxOff diff --git a/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md b/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md index ddb78d83f9e..01cb972bbb8 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md +++ b/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md @@ -7,6 +7,12 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2020-01-29] + +### Added +- New `l3bitset` module +- `\pdf_destination:nn` and `\pdf_destination_box:nn` added to l3pdf + ## [2020-10-27] ### Changed @@ -184,7 +190,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-10-27...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2020-01-29...HEAD +[2020-01-29]: https://github.com/latex3/latex3/compare/2020-10-27...2020-01-29 [2020-10-27]: https://github.com/latex3/latex3/compare/2020-09-24...2020-10-27 [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 diff --git a/Master/texmf-dist/doc/latex/l3experimental/README.md b/Master/texmf-dist/doc/latex/l3experimental/README.md index 16f95a9bf06..31af1893e59 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 2020-10-27 +Release 2020-01-29 Overview -------- @@ -123,11 +123,11 @@ The issue tracker for LaTeX3 is currently located Please report specific issues with LaTeX3 code there; more general discussion should be directed to the [LaTeX-L list](#Discussion). -The LaTeX3 Project +The LaTeX Project ------------------ Development of LaTeX3 is carried out by -[The LaTeX3 Project](https://www.latex-project.org/latex3/). +[The LaTeX Project](https://www.latex-project.org/latex3/). The development team can be contacted by e-mail: <latex-team@latex-project.org>; for general LaTeX3 discussion @@ -135,6 +135,6 @@ the [LaTeX-L list](#Discussion) should be used. ----- -<p>Copyright (C) 1998-2004,2008-2012,2014-2020 The LaTeX3 Project <br /> +<p>Copyright (C) 1998-2004,2008-2012,2014-2021 The LaTeX Project <br /> <a href="http://latex-project.org/">http://latex-project.org/</a> <br /> All rights reserved.</p> diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf Binary files differindex 972ae840fdc..7cd6fe9bd6e 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3bitset/l3bitset.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3bitset/l3bitset.pdf Binary files differnew file mode 100644 index 00000000000..85df863511b --- /dev/null +++ b/Master/texmf-dist/doc/latex/l3experimental/l3bitset/l3bitset.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf Binary files differindex 6aafcd28098..4cf6a862c4c 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf Binary files differindex 9a4abc8d423..452126336b9 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.tex b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.tex index 8325f0fd59b..defcf6ad62b 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.tex +++ b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.tex @@ -2,7 +2,7 @@ File: l3draw-code.tex -Copyright (C) 2018,2019 The LaTeX3 Project +Copyright (C) 2018,2019,2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf Binary files differindex 2e125d5b9e4..4021d6a1565 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf Binary files differindex f36e0411314..c430eec0065 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.pdf Binary files differindex a2c44a18a04..ce06690f504 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.tex b/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.tex index a93342f1f39..db2a7d5bf09 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.tex +++ b/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.tex @@ -2,7 +2,7 @@ File: l3pdf-code.tex -Copyright (C) 2019 The LaTeX3 Project +Copyright (C) 2019,2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf.pdf Binary files differindex 91f5aab0cfc..1bdd3b530bb 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf Binary files differindex aa121323d47..fd848569cae 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf Binary files differindex bc87e9cf634..50f28c4226a 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf b/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf Binary files differindex 4376d735902..ad6c06eb79f 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf b/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf Binary files differindex 9e1a0bd2639..392daf39095 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf b/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf Binary files differindex 56fe6499fd9..64752748530 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf diff --git a/Master/texmf-dist/dvips/l3backend/l3backend-dvips.pro b/Master/texmf-dist/dvips/l3backend/l3backend-dvips.pro index 6bc37a2f3f3..3378ac4d830 100644 --- a/Master/texmf-dist/dvips/l3backend/l3backend-dvips.pro +++ b/Master/texmf-dist/dvips/l3backend/l3backend-dvips.pro @@ -6,7 +6,7 @@ %% %% l3backend-header.dtx (with options: `header,dvips') %% -%% Copyright (C) 1990-2021 The LaTeX3 Project +%% Copyright (C) 1990-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -20,7 +20,6 @@ %% %% File: l3backend-header.dtx /color.sc { } def -/color.fc { } def TeXDict begin /TeXcolorseparation { setcolor } def end diff --git a/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx b/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx index 9fad72c75d0..0033514bdca 100644 --- a/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx +++ b/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx @@ -2,7 +2,7 @@ % %% File: l3backend-basics.dtx % -% Copyright (C) 2019-2021 The LaTeX3 Project +% Copyright (C) 2019-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -35,7 +35,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-01-09} +% \date{Released 2020-01-29} % % \maketitle % @@ -70,27 +70,27 @@ % \begin{macrocode} \ProvidesExplFile %<*dvipdfmx> - {l3backend-dvipdfmx.def}{2021-01-09}{} + {l3backend-dvipdfmx.def}{2020-01-29}{} {L3 backend support: dvipdfmx} %</dvipdfmx> %<*dvips> - {l3backend-dvips.def}{2021-01-09}{} + {l3backend-dvips.def}{2020-01-29}{} {L3 backend support: dvips} %</dvips> %<*dvisvgm> - {l3backend-dvisvgm.def}{2021-01-09}{} + {l3backend-dvisvgm.def}{2020-01-29}{} {L3 backend support: dvisvgm} %</dvisvgm> %<*luatex> - {l3backend-luatex.def}{2021-01-09}{} + {l3backend-luatex.def}{2020-01-29}{} {L3 backend support: PDF output (LuaTeX)} %</luatex> %<*pdftex> - {l3backend-pdftex.def}{2021-01-09}{} + {l3backend-pdftex.def}{2020-01-29}{} {L3 backend support: PDF output (pdfTeX)} %</pdftex> %<*xetex> - {l3backend-xetex.def}{2021-01-09}{} + {l3backend-xetex.def}{2020-01-29}{} {L3 backend support: XeTeX} %</xetex> % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx b/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx index 9fd7b70694e..d47bd2ed7ac 100644 --- a/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx +++ b/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx @@ -2,7 +2,7 @@ % %% File: l3backend-box.dtx % -% Copyright (C) 2019-2021 The LaTeX3 Project +% Copyright (C) 2019-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -35,7 +35,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-01-09} +% \date{Released 2020-01-29} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx b/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx index f3087b0904d..9e19d8ac0a8 100644 --- a/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx +++ b/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx @@ -2,7 +2,7 @@ % %% File: l3backend-color.dtx % -% Copyright (C) 2019-2021 The LaTeX3 Project +% Copyright (C) 2019-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -35,7 +35,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-01-09} +% \date{Released 2020-01-29} % % \maketitle % @@ -173,44 +173,81 @@ % state generally. The exact form depends on the engine, and for % \texttt{dvipdfmx}/\XeTeX{} the backend version. % +% \subsubsection{Common code} +% +% \begin{macrocode} +%<*dvipdfmx|luatex|pdftex|xetex> +% \end{macrocode} +% +% \begin{variable}{\l_@@_backend_stack_int} +% \pdfTeX{}, \LuaTeX{} and recent \texttt{(x)dvipdfmx} have multiple stacks +% available, and to track which one is in use a variable is required. +% \begin{macrocode} +\int_new:N \l_@@_backend_stack_int +% \end{macrocode} +% \end{variable} +% +% \begin{macrocode} +%</dvipdfmx|luatex|pdftex|xetex> +% \end{macrocode} +% % \subsubsection{\texttt{dvipdfmx}/\XeTeX{}} % % \begin{macrocode} %<*dvipdfmx|xetex> % \end{macrocode} % -% \begin{macro}{\__kernel_color_stack_init:Nnn} -% \begin{variable}{\g__color_stack_int} +% \begin{macro}{\__kernel_color_backend_stack_init:Nnn} +% \begin{variable} +% {\g_@@_backend_stack_int, \c_@@_backend_main_stack_int} % In \texttt{(x)dvipdfmx}, the base color stack is not set up, so we have to % force that, as well as providing a mechanism more generally. % \begin{macrocode} -\int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 } +\int_compare:nNnTF \c__kernel_sys_dvipdfmx_version_int < { 20201111 } + { \cs_new_protected:Npn \__kernel_color_backend_stack_init:Nnn #1#2#3 { } } { - \int_new:N \g__color_stack_int - \cs_new_protected:Npn \__kernel_color_stack_init:Nnn #1#2#3 + \int_new:N \g_@@_backend_stack_int + \cs_new_protected:Npx \__kernel_color_backend_stack_init:Nnn #1#2#3 { - \int_gincr:N \g__color_stack_int - \int_const:Nn #1 { \g__color_stack_int } - \__kernel_backend_literal:x + \int_gincr:N \exp_not:N \g_@@_backend_stack_int + \int_const:Nn #1 { \exp_not:N \g_@@_backend_stack_int } + \cs_if_exist:NTF \AtBeginDvi + { \exp_not:N \AtBeginDvi } + { \exp_not:N \use:n } { - pdfcolorstackinit ~ - \int_use:N \g__color_stack_int \c_space_tl - \tl_if_blank:nF {#2} { #2 ~ } - (#3) + \__kernel_backend_literal:x + { + pdfcolorstackinit ~ + \exp_not:N \int_use:N \exp_not:N \g_@@_backend_stack_int + \c_space_tl + \exp_not:N \tl_if_blank:nF {#2} { #2 ~ } + (#3) + } } } + \cs_if_exist:cTF { main@pdfcolorstack } + { + \int_set:Nn \l_@@_backend_stack_int + { \int_use:c { main@pdfcolorstack } } + } + { + \__kernel_color_backend_stack_init:Nnn \c_@@_backend_main_stack_int + { page ~ direct } { 0 ~ g ~ 0 ~ G } + \int_set_eq:NN \l_@@_backend_stack_int + \c_@@_backend_main_stack_int + } } % \end{macrocode} % \end{variable} % \end{macro} % -% \begin{macro}{\__kernel_color_stack_push:nn} -% \begin{macro}{\__kernel_color_stack_pop:n} +% \begin{macro}{\@@_backend_stack_push:nn, \@@_backend_stack_push:nx} +% \begin{macro}{\@@_backend_stack_pop:n} % Simple enough but needs a version check. % \begin{macrocode} \int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 } { - \cs_new_protected:Npn \__kernel_color_stack_push:nn #1#2 + \cs_new_protected:Npn \@@_backend_stack_push:nn #1#2 { \__kernel_backend_literal:x { @@ -219,7 +256,8 @@ push ~ (#2) } } - \cs_new_protected:Npn \__kernel_color_stack_pop:n #1 + \cs_generate_variant:Nn \@@_backend_stack_push:nn { nx } + \cs_new_protected:Npn \@@_backend_stack_pop:n #1 { \__kernel_backend_literal:x { @@ -243,9 +281,9 @@ %<*luatex|pdftex> % \end{macrocode} % -% \begin{macro}{\__kernel_color_stack_init:Nnn} +% \begin{macro}{\__kernel_color_backend_stack_init:Nnn} % \begin{macrocode} -\cs_new_protected:Npn \__kernel_color_stack_init:Nnn #1#2#3 +\cs_new_protected:Npn \__kernel_color_backend_stack_init:Nnn #1#2#3 { \int_const:Nn #1 { @@ -262,10 +300,10 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\__kernel_color_stack_push:nn} -% \begin{macro}{\__kernel_color_stack_pop:n} +% \begin{macro}{\@@_backend_stack_push:nn, \@@_backend_stack_push:nx} +% \begin{macro}{\@@_backend_stack_pop:n} % \begin{macrocode} -\cs_new_protected:Npn \__kernel_color_stack_push:nn #1#2 +\cs_new_protected:Npn \@@_backend_stack_push:nn #1#2 { %<*luatex> \tex_pdfextension:D colorstack ~ @@ -275,7 +313,8 @@ %</pdftex> \int_eval:n {#1} ~ push ~ {#2} } -\cs_new_protected:Npn \__kernel_color_stack_pop:n #1 +\cs_generate_variant:Nn \@@_backend_stack_push:nn { nx } +\cs_new_protected:Npn \@@_backend_stack_pop:n #1 { %<*luatex> \tex_pdfextension:D colorstack ~ @@ -309,7 +348,7 @@ % \@@_backend_select:n % } % \begin{macro}{\@@_backend_reset:} -% \begin{macro}{color.sc, color.fc} +% \begin{macro}{color.sc} % Push the data to the stack. In the case of \texttt{dvips} also saves the % drawing color in raw PostScript. % \begin{macrocode} @@ -323,8 +362,7 @@ { \__kernel_backend_literal:n { color~push~ #1 } %<*dvips> - \__kernel_backend_postscript:n { /color.sc~ { ~ } ~def } - \__kernel_backend_postscript:n { /color.fc~ { ~ } ~def } + \__kernel_backend_postscript:n { /color.sc ~ { } ~ def } %</dvips> \group_insert_after:N \@@_backend_reset: } @@ -345,11 +383,10 @@ %<*dvipdfmx|luatex|pdftex|xetex> % \end{macrocode} % -% \begin{variable}{\l__kernel_color_stack_int} -% \pdfTeX{}, \LuaTeX{} and recent \texttt{(x)dvipdfmx} have multiple stacks -% available, and to track which one is in use a variable is required. +% \begin{variable}{\l_@@_backend_fill_tl, \l_@@_backend_stroke_tl} % \begin{macrocode} -\int_new:N \l__kernel_color_stack_int +\tl_new:N \l_@@_backend_fill_tl +\tl_new:N \l_@@_backend_stroke_tl % \end{macrocode} % \end{variable} % @@ -359,25 +396,29 @@ % \@@_backend_select_gray:n , % \@@_backend_select_rgb:n % } +% \begin{macro}{\@@_backend_select:nn} % \begin{macro}{\@@_backend_reset:} -% Simply dump the data, but allowing for \LuaTeX{}. +% Store the values then pass to the stack. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_select_cmyk:n #1 - { \@@_backend_select:n { #1 ~ k ~ #1 ~ K } } + { \@@_backend_select:nn { #1 ~ k } { #1 ~ K } } \cs_new_protected:Npn \@@_backend_select_gray:n #1 - { \@@_backend_select:n { #1 ~ g ~ #1 ~ G } } + { \@@_backend_select:nn { #1 ~ g } { #1 ~ G } } \cs_new_protected:Npn \@@_backend_select_rgb:n #1 - { \@@_backend_select:n { #1 ~ rg ~ #1 ~ RG } } -\cs_new_protected:Npn \@@_backend_select:n #1 + { \@@_backend_select:nn { #1 ~ rg } { #1 ~ RG } } +\cs_new_protected:Npn \@@_backend_select:nn #1#2 { - \__kernel_color_stack_push:nn \l__kernel_color_stack_int {#1} + \tl_set:Nn \l_@@_backend_fill_tl {#1} + \tl_set:Nn \l_@@_backend_stroke_tl {#2} + \@@_backend_stack_push:nn \l_@@_backend_stack_int { #1 ~ #2 } \group_insert_after:N \@@_backend_reset: } \cs_new_protected:Npn \@@_backend_reset: - { \__kernel_color_stack_pop:n \l__kernel_color_stack_int } + { \@@_backend_stack_pop:n \l_@@_backend_stack_int } % \end{macrocode} % \end{macro} % \end{macro} +% \end{macro} % % \begin{macrocode} %</dvipdfmx|luatex|pdftex|xetex> @@ -733,7 +774,7 @@ % we share the same code as for \pdfTeX{}. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_select_separation:nn #1#2 - { \@@_backend_select:n { /#1 ~ cs ~ /#1 ~ CS ~ #2 ~ scn ~ #2 ~ SCN } } + { \@@_backend_select:nn { /#1 ~ cs ~ #2 ~ scn } { /#1 ~ CS ~ #2 ~ SCN } } \cs_new_eq:NN \@@_backend_select_devicen:nn \@@_backend_select_separation:nn % \end{macrocode} % \end{macro} @@ -876,6 +917,28 @@ %</dvipdfmx|luatex|pdftex|xetex> % \end{macrocode} % +% \begin{macrocode} +%<*dvipdfmx|xetex> +% \end{macrocode} +% +% \begin{macro}{\@@_backend_select_separation:nn, \@@_backend_select_devicen:nn} +% For older \texttt{(x)dvipdfmx}, we \emph{could} support separations using a +% dedicated mechanism, but it was not added that long before the color +% stacks. So instead of having two complex paths, just disable here. +% \begin{macrocode} +\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } + { + \cs_gset_protected:Npn \@@_backend_select_separation:nn #1#2 { } + \cs_gset_eq:NN \@@_backend_select_devicen:nn + \@@_backend_select_separation:nn + } +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</dvipdfmx|xetex> +% \end{macrocode} +% % \subsection{Fill and stroke color} % % Here, \texttt{dvipdfmx}/\XeTeX{} follows \LuaTeX{} and \pdfTeX{}, @@ -892,9 +955,11 @@ % \@@_backend_fill_cmyk:n , % \@@_backend_fill_gray:n , % \@@_backend_fill_rgb:n , +% \@@_backend_fill:n , % \@@_backend_stroke_cmyk:n , % \@@_backend_stroke_gray:n , -% \@@_backend_stroke_rgb:n +% \@@_backend_stroke_rgb:n , +% \@@_backend_stroke:n % } % Drawing (fill/stroke) color is handled in \texttt{dvipdfmx}/\XeTeX{} in the % same way as \LuaTeX{}/\pdfTeX{}. We use the same approach as earlier, except the @@ -903,17 +968,31 @@ % automatically. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_fill_cmyk:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ k } } + { \@@_backend_fill:n { #1 ~ k } } \cs_new_protected:Npn \@@_backend_fill_gray:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ g } } + { \@@_backend_fill:n { #1 ~ g } } \cs_new_protected:Npn \@@_backend_fill_rgb:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ rg } } - \cs_new_protected:Npn \@@_backend_stroke_cmyk:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ K } } + { \@@_backend_fill:n { #1 ~ rg } } +\cs_new_protected:Npn \@@_backend_fill:n #1 + { + \tl_set:Nn \l_@@_backend_fill_tl {#1} + \@@_backend_stack_push:nn \l_@@_backend_stack_int + { #1 ~ \l_@@_backend_stroke_tl } + \group_insert_after:N \@@_backend_reset: + } +\cs_new_protected:Npn \@@_backend_stroke_cmyk:n #1 + { \@@_backend_stroke:n { #1 ~ K } } \cs_new_protected:Npn \@@_backend_stroke_gray:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ G } } + { \@@_backend_stroke:n { #1 ~ G } } \cs_new_protected:Npn \@@_backend_stroke_rgb:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ RG } } + { \@@_backend_stroke:n { #1 ~ RG } } +\cs_new_protected:Npn \@@_backend_stroke:n #1 + { + \tl_set:Nn \l_@@_backend_stroke_tl {#1} + \@@_backend_stack_push:nn \l_@@_backend_stack_int + { \l_@@_backend_fill_tl \c_space_tl #1 } + \group_insert_after:N \@@_backend_reset: + } % \end{macrocode} % \end{macro} % @@ -926,9 +1005,9 @@ % } % \begin{macrocode} \cs_new_protected:Npn \@@_backend_fill_separation:nn #1#2 - { \__kernel_backend_literal_pdf:n { /#1 ~ cs ~ #2 ~ scn } } + { \@@_backend_fill:n { /#1 ~ cs ~ #2 ~ scn } } \cs_new_protected:Npn \@@_backend_stroke_separation:nn #1#2 - { \__kernel_backend_literal_pdf:n { /#1 ~ CS ~ #2 ~ SCN } } + { \@@_backend_stroke:n { /#1 ~ CS ~ #2 ~ SCN } } \cs_new_eq:NN \@@_backend_fill_devicen:nn \@@_backend_fill_separation:nn \cs_new_eq:NN \@@_backend_stroke_devicen:nn \@@_backend_stroke_separation:nn % \end{macrocode} @@ -939,6 +1018,52 @@ % \end{macrocode} % % \begin{macrocode} +%<*dvipdfmx|xetex> +% \end{macrocode} +% +% \begin{macro} +% { +% \@@_backend_fill_cmyk:n , +% \@@_backend_fill_gray:n , +% \@@_backend_fill_rgb:n +% } +% \begin{macro}{\@@_backend_reset:} +% \begin{macro}{\@@_backend_stroke:n} +% \begin{macro}{\@@_backend_fill_separation:nn, \@@_backend_stroke_separation:nn} +% Deal with older \texttt{(x)dvipdfmx}. +% \begin{macrocode} +\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } + { + \cs_gset_protected:Npn \@@_backend_fill_cmyk:n #1 + { + \__kernel_backend_literal:n { pdf: bc ~ [#1] } + \group_insert_after:N \@@_backend_reset: + } + \cs_gset_eq:NN \@@_backend_fill_gray:n \@@_backend_fill_cmyk:n + \cs_gset_eq:NN \@@_backend_fill_rgb:n \@@_backend_fill_cmyk:n + \cs_gset_protected:Npn \@@_backend_reset: + { \__kernel_backend_literal:n { pdf: ec } } + \cs_gset_protected:Npn \@@_backend_stroke:n #1 + { \__kernel_backend_literal:n {#1} } + \cs_gset_protected:Npn \@@_backend_fill_separation:nn #1#2 { } + \cs_gset_eq:NN \@@_backend_fill_devicen:nn + \@@_backend_fill_separation:nn + \cs_gset_eq:NN \@@_backend_stroke_separation:nn + \@@_backend_fill_separation:nn + \cs_gset_eq:NN \@@_backend_stroke_devicen:nn + \@@_backend_stroke_separation:nn + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +%</dvipdfmx|xetex> +% \end{macrocode} +% +% \begin{macrocode} %<*dvips> % \end{macrocode} % @@ -947,19 +1072,26 @@ % \@@_backend_fill_cmyk:n , % \@@_backend_fill_gray:n , % \@@_backend_fill_rgb:n , +% \@@_backend_fill:n , % \@@_backend_stroke_cmyk:n , % \@@_backend_stroke_gray:n , % \@@_backend_stroke_rgb:n % } -% All questions of saving the non-stacked data. +% Fill color here is the same as general color \emph{except} we skip the +% stroke part. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_fill_cmyk:n #1 - { \__kernel_backend_postscript:n { /color.fc { #1 ~ setcmykcolor } def } } + { \@@_backend_fill:n { cmyk ~ #1 } } \cs_new_protected:Npn \@@_backend_fill_gray:n #1 - { \__kernel_backend_postscript:n { /color.fc { #1 ~ setgray } def } } + { \@@_backend_fill:n { gray ~ #1 } } \cs_new_protected:Npn \@@_backend_fill_rgb:n #1 - { \__kernel_backend_postscript:n { /color.fc { #1 ~ setrgbcolor } def } } - \cs_new_protected:Npn \@@_backend_stroke_cmyk:n #1 + { \@@_backend_fill:n { rgb ~ #1 } } +\cs_new_protected:Npn \@@_backend_fill:n #1 + { + \__kernel_backend_literal:n { color~push~ #1 } + \group_insert_after:N \@@_backend_reset: + } +\cs_new_protected:Npn \@@_backend_stroke_cmyk:n #1 { \__kernel_backend_postscript:n { /color.sc { #1 ~ setcmykcolor } def } } \cs_new_protected:Npn \@@_backend_stroke_gray:n #1 { \__kernel_backend_postscript:n { /color.sc { #1 ~ setgray } def } } @@ -977,9 +1109,9 @@ % } % \begin{macrocode} \cs_new_protected:Npn \@@_backend_fill_separation:nn #1#2 - { \__kernel_backend_postscript:n { /color.fc { #1 } def } } + { \@@_backend_fill:n { separation ~ #1 ~ #2 } } \cs_new_protected:Npn \@@_backend_stroke_separation:nn #1#2 - { \__kernel_backend_postscript:n { /color.sc { #1 } def } } + { \__kernel_backend_postscript:n { /color.sc { separation ~ #1 ~ #2 } def } } \cs_new_eq:NN \@@_backend_fill_devicen:nn \@@_backend_fill_separation:nn \cs_new_eq:NN \@@_backend_stroke_devicen:nn \@@_backend_stroke_separation:nn % \end{macrocode} @@ -996,84 +1128,84 @@ % \begin{macro} % { % \@@_backend_fill_cmyk:n , -% \@@_backend_stroke_cmyk:n -% } -% \begin{macro}{\@@_backend_cmyk:nw} -% \begin{macro} -% { % \@@_backend_fill_gray:n , -% \@@_backend_stroke_gray:n -% } -% \begin{macro}{\@@_backend_gray:nn, \@@_backend_gray_aux:n} -% \begin{macro} -% { -% \@@_backend_fill_rgb:n , -% \@@_backend_stroke_rgb:n +% \@@_backend_fill_rgb:n , +% \@@_backend_fill:n % } -% \begin{macro}{\@@_backend_rgb:nw} -% \begin{macro}{\@@_backend:nnnn} -% For drawings in SVG, we use scopes for all colors. That +% Fill color here is the same as general color \emph{except} we skip the +% stroke part. +% \begin{macrocode} +\cs_new_protected:Npn \@@_backend_fill_cmyk:n #1 + { \@@_backend_fill:n { cmyk ~ #1 } } +\cs_new_protected:Npn \@@_backend_fill_gray:n #1 + { \@@_backend_fill:n { gray ~ #1 } } +\cs_new_protected:Npn \@@_backend_fill_rgb:n #1 + { \@@_backend_fill:n { rgb ~ #1 } } +\cs_new_protected:Npn \@@_backend_fill:n #1 + { + \__kernel_backend_literal:n { color~push~ #1 } + \group_insert_after:N \@@_backend_reset: + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_backend_stroke_cmyk:n} +% \begin{macro}{\@@_backend_stroke_cmyk:w} +% \begin{macro}{\@@_backend_stroke_gray:n, \@@_backend_stroke_gray_aux:n} +% \begin{macro}{\@@_backend_stroke_rgb:n} +% \begin{macro}{\@@_backend_stroke_rgb:w} +% \begin{macro}{\@@_backend:nnn} +% For drawings in SVG, we use scopes for all stroke colors. That % requires using \texttt{RGB} values, which luckily are easy to % convert here (|cmyk| to |RGB| is a fixed function). % \begin{macrocode} -\cs_new_protected:Npn \@@_backend_fill_cmyk:n #1 - { \@@_backend_cmyk:nw { fill } #1 \s_@@_stop } \cs_new_protected:Npn \@@_backend_stroke_cmyk:n #1 - { \@@_backend_cmyk:nw { stroke } #1 \s_@@_stop } -\cs_new_protected:Npn \@@_backend_cmyk:nw - #1#2 ~ #3 ~ #4 ~ #5 \s_@@_stop + { \@@_backend_cmyk:w #1 \s_@@_stop } +\cs_new_protected:Npn \@@_backend_stroke_cmyk:w + #1 ~ #2 ~ #3 ~ #4 \s_@@_stop { \use:x { - \@@_backend:nnnn - {#1} - { \fp_eval:n { -100 * ( 1 - min ( 1 , #2 + #5 ) ) } } - { \fp_eval:n { -100 * ( 1 - min ( 1 , #3 + #5 ) ) } } - { \fp_eval:n { -100 * ( 1 - min ( 1 , #4 + #5 ) ) } } + \@@_backend:nnn + { \fp_eval:n { -100 * ( 1 - min ( 1 , #1 + #4 ) ) } } + { \fp_eval:n { -100 * ( 1 - min ( 1 , #2 + #4 ) ) } } + { \fp_eval:n { -100 * ( 1 - min ( 1 , #3 + #4 ) ) } } } } -\cs_new_protected:Npn \@@_backend_fill_gray:n #1 - { \@@_backend_grab:nn { fill } {#1} } \cs_new_protected:Npn \@@_backend_stroke_gray:n #1 - { \@@_backend_grab:nn { stroke } {#1} } -\cs_new_protected:Npn \@@_backend_gray:nn #1#2 { \use:x { - \@@_backend_gray_aux:nn - {#1} - { \fp_eval:n { 100 * (#2) } } + \@@_backend_stroke_gray_aux:n + { \fp_eval:n { 100 * (#1) } } } } -\cs_new_protected:Npn \@@_backend_gray_aux:nn #1#2 - { \@@_backend:nnn {#1} {#2} {#2} {#2} } -\cs_new_protected:Npn \@@_backend_fill_rgb:n #1 - { \@@_backend_rgb:nw { fill } #1 \s_@@_stop } +\cs_new_protected:Npn \@@_backend_stroke_gray_aux:n #1 + { \@@_backend:nnn {#1} {#1} {#1} } \cs_new_protected:Npn \@@_backend_stroke_rgb:n #1 - { \@@_backend_rgb:nw { stroke } #1 \s_@@_stop } -\cs_new_protected:Npn \@@_backend_rgb:nw - #1#2 ~ #3 ~ #4\s_@@_stop + { \@@_backend_rgb:w #1 \s_@@_stop } +\cs_new_protected:Npn \@@_backend_stroke_rgb:w + #1 ~ #2 ~ #3 \s_@@_stop { \use:x { - \@@_backend:nnnn - { fill } + \@@_backend:nnn + { \fp_eval:n { 100 * (#1) } } { \fp_eval:n { 100 * (#2) } } { \fp_eval:n { 100 * (#3) } } - { \fp_eval:n { 100 * (#4) } } } } -\cs_new_protected:Npx \@@_backend:nnnn #1#2#3#4 +\cs_new_protected:Npx \@@_backend:nnn #1#2#3 { \__kernel_backend_scope:n { - #1 = + stroke = " rgb ( + #1 \c_percent_str , #2 \c_percent_str , - #3 \c_percent_str , - #4 \c_percent_str + #3 \c_percent_str ) " } @@ -1085,7 +1217,6 @@ % \end{macro} % \end{macro} % \end{macro} -% \end{macro} % % \begin{macro} % { diff --git a/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx b/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx index 2951e215041..8992c92d688 100644 --- a/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx +++ b/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx @@ -2,7 +2,7 @@ % %% File: l3backend-draw.dtx % -% Copyright (C) 2019-2021 The LaTeX3 Project +% Copyright (C) 2019-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -35,7 +35,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-01-09} +% \date{Released 2020-01-29} % % \maketitle % @@ -221,14 +221,11 @@ } \cs_new_protected:Npn \@@_backend_fill: { - \@@_backend_literal:n { gsave } - \@@_backend_literal:n { color.fc } \@@_backend_literal:x { \bool_if:NT \g_@@_draw_eor_bool { eo } fill } - \@@_backend_literal:n { grestore } \bool_if:NT \g_@@_draw_clip_bool { \@@_backend_literal:x @@ -242,16 +239,15 @@ } \cs_new_protected:Npn \@@_backend_fillstroke: { - \@@_backend_literal:n { gsave } - \@@_backend_literal:n { color.sc } - \@@_backend_literal:n { color.fc } \@@_backend_literal:x { \bool_if:NT \g_@@_draw_eor_bool { eo } fill } - \@@_backend_literal:n { grestore } + \@@_backend_literal:n { gsave } + \@@_backend_literal:n { color.sc } \@@_backend_literal:n { stroke } + \@@_backend_literal:n { grestore } \bool_if:NT \g_@@_draw_clip_bool { \@@_backend_literal:x diff --git a/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx b/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx index 7d288ac17d8..b0881891f27 100644 --- a/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx +++ b/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx @@ -2,7 +2,7 @@ % %% File: l3backend-graphics.dtx % -% Copyright (C) 2019-2021 The LaTeX3 Project +% Copyright (C) 2019-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -35,7 +35,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-01-09} +% \date{Released 2020-01-29} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx b/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx index 80dac57f72b..269214356ac 100644 --- a/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx +++ b/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx @@ -2,7 +2,7 @@ % %% File: l3backend-header.dtx % -% Copyright (C) 2019-2021 The LaTeX3 Project +% Copyright (C) 2019-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -35,7 +35,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-01-09} +% \date{Released 2020-01-29} % % \maketitle % @@ -59,11 +59,10 @@ %<*dvips&header> % \end{macrocode} % -% \begin{macro}{color.sc, color.fc} -% Empty definitions for color at the top level. +% \begin{macro}{color.sc} +% Empty definition for color at the top level. % \begin{macrocode} /color.sc { } def -/color.fc { } def % \end{macrocode} % \end{macro} % diff --git a/Master/texmf-dist/source/latex/l3backend/l3backend-opacity.dtx b/Master/texmf-dist/source/latex/l3backend/l3backend-opacity.dtx new file mode 100644 index 00000000000..62317fa8b46 --- /dev/null +++ b/Master/texmf-dist/source/latex/l3backend/l3backend-opacity.dtx @@ -0,0 +1,286 @@ +% \iffalse meta-comment +% +%% File: l3backend-opacity.dtx +% +% Copyright (C) 2021 The LaTeX Project +% +% It may be distributed and/or modified under the conditions of the +% LaTeX Project Public License (LPPL), either version 1.3c of this +% license or (at your option) any later version. The latest version +% of this license is in the file +% +% https://www.latex-project.org/lppl.txt +% +% This file is part of the "l3backend bundle" (The Work in LPPL) +% and all files in that bundle must be distributed together. +% +% ----------------------------------------------------------------------- +% +% The development version of the bundle can be found at +% +% https://github.com/latex3/latex3 +% +% for those people who are interested. +% +%<*driver> +\documentclass[full,kernel]{l3doc} +\begin{document} + \DocInput{\jobname.dtx} +\end{document} +%</driver> +% \fi +% +% \title{^^A +% The \textsf{l3backend-opacity} package\\ Backend opacity support^^A +% } +% +% \author{^^A +% The \LaTeX{} Project\thanks +% {^^A +% E-mail: +% \href{mailto:latex-team@latex-project.org} +% {latex-team@latex-project.org}^^A +% }^^A +% } +% +% \date{Released 2020-01-29} +% +% \maketitle +% +% \begin{documentation} +% +% \end{documentation} +% +% \begin{implementation} +% +% \section{\pkg{l3backend-opacity} Implementation} +% +% \begin{macrocode} +%<*package> +%<@@=opacity> +% \end{macrocode} +% +% Although opacity is not color, it needs to be managed in a somewhat +% similar way: using a dedicated stack if possible. Depending on the backend, +% that may not be possible. There is also the need to cover fill/stroke setting +% as well as more general running opacity. It is easiest to describe the value +% used in terms of opacity, although commonly this is referred to as +% transparency. +% +% \begin{macrocode} +%<*dvips> +% \end{macrocode} +% +% \begin{macro}{\@@_backend_select:n,\@@_backend_select_aux:n} +% No stack so set values directly. +% \begin{macrocode} +\cs_new_protected:Npn \@@_backend_select:n #1 + { + \exp_args:Nx \@@_backend_select_aux:n + { \fp_eval:n { min(max(0,#1),1) } } + } +\cs_new_protected:Npn \@@_backend_select_aux:n #1 + { + \__kernel_backend_postscript:n + { #1 ~ .setfillconstantalpha ~ #1 ~ .setstrokeconstantalpha } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_backend_fill:n, \@@_backend_stroke:n} +% \begin{macro}{\@@_backend:nn, \@@_backend:xn} +% Similar to the above but with no stack and only adding to one or other of +% the entries. +% \begin{macrocode} +\cs_new_protected:Npn \@@_backend_fill:n #1 + { \@@_backend:xn { \fp_eval:n { min(max(0,#1),1) } } { fill } } +\cs_new_protected:Npn \@@_backend_stroke:n #1 + { \@@_backend:xn { \fp_eval:n { min(max(0,#1),1) } } { stroke } } +\cs_new_protected:Npn \@@_backend:nn #1#2 + { + \__kernel_backend_postscript:n { #1 ~ .set #2 constantalpha } + } +\cs_generate_variant:Nn \@@_backend:nn { x } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +%</dvips> +% \end{macrocode} +% +% \begin{macrocode} +%<*dvipdfmx|luatex|pdftex|xetex> +% \end{macrocode} +% +% \begin{variable}{\c_@@_backend_stack_int} +% Set up a stack. +% \begin{macrocode} +\cs_if_exist:NT \pdfmanagement_add:nnn + { + \__kernel_color_backend_stack_init:Nnn \c_@@_backend_stack_int + { page ~ direct } { /opacity 1 ~ gs } + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity 1 } { << /ca ~ 1 /CA ~ 1 >> } + } +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\l_@@_backend_fill_tl, \l_@@_backend_stroke_tl} +% We use |tl| here for speed: at the backend, this should be reasonable. +% \begin{macrocode} +\tl_new:N \l_@@_backend_fill_tl +\tl_new:N \l_@@_backend_stroke_tl +% \end{macrocode} +% \end{variable} +% +% \begin{macro}{\@@_backend_select:n, \@@_backend_select_aux:n} +% \begin{macro}{\@@_backend_reset:} +% Other than the need to evaluate the opacity as an \texttt{fp}, much the +% same as color. +% \begin{macrocode} +\cs_new_protected:Npn \@@_backend_select:n #1 + { + \exp_args:Nx \@@_backend_select_aux:n + { \fp_eval:n { min(max(0,#1),1) } } + } +\cs_new_protected:Npn \@@_backend_select_aux:n #1 + { + \tl_set:Nn \l_@@_backend_fill_tl {#1} + \tl_set:Nn \l_@@_backend_stroke_tl {#1} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity #1 } + { << /ca ~ #1 /CA ~ #1 >> } + \@@_backend_stack_push:nn \c_@@_backend_stack_int + { /opacity #1 ~ gs } + \group_insert_after:N \@@_backend_reset: + } +\cs_if_exist:NF \pdfmanagement_add:nnn + { + \cs_gset_protected:Npn \@@_backend_select_aux:n #1 { } + } +\cs_new_protected:Npn \@@_backend_reset: + { \@@_backend_stack_pop:n \c_@@_backend_stack_int } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@@_backend_fill:n, \@@_backend_stroke:n} +% \begin{macro}{\@@_backend_fillstroke:nn, \@@_backend_fillstroke:xx} +% For separate fill and stroke, we need to work out if we need to do +% more work or if we can stick to a single setting. +% \begin{macrocode} +\cs_new_protected:Npn \@@_backend_fill:n #1 + { + \@@_backend_fill_stroke:xx + { \fp_eval:n { min(max(0,#1),1) } } + \l_@@_backend_stroke_tl + } +\cs_new_protected:Npn \@@_backend_stroke:n #1 + { + \@@_backend_fill_stroke:xx + \l_@@_backend_fill_tl + { \fp_eval:n { min(max(0,#1),1) } } + } +\cs_new_protected:Npn \@@_backend_fill_stroke:nn #1#2 + { + \str_if_eq:nnTF {#1} {#2} + { \@@_backend_select_aux:n {#1} } + { + \tl_set:Nn \l_@@_backend_fill_tl {#1} + \tl_set:Nn \l_@@_backend_stroke_tl {#2} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.fill #1 } + { << /ca ~ #1 >> } + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.stroke #1 } + { << /CA ~ #2 >> } + \@@_backend_stack_push:nn \c_@@_backend_stack_int + { /opacity.fill #1 ~ gs /opacity.stroke #2 ~ gs } + \group_insert_after:N \@@_backend_reset: + } + } +\cs_generate_variant:Nn \@@_backend_fill_stroke:nn { xx } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +%</dvipdfmx|luatex|pdftex|xetex> +% \end{macrocode} +% +% \begin{macrocode} +%<*dvipdfmx|xdvipdfmx> +% \end{macrocode} +% +% \begin{macro}{\@@_backend_select:n} +% Older backends have no stack support, so everything is done directly. +% \begin{macrocode} +\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } + { + \cs_gset_protected:Npn \@@_backend_select_aux:n #1 + { + \tl_set:Nn \l_@@_backend_fill_tl {#1} + \tl_set:Nn \l_@@_backend_stroke_tl {#1} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity #1 } + { << /ca ~ #1 /CA ~ #1 >> } + \__kernel_backend_literal_pdf:n { /opacity #1 ~ gs } + } + \cs_gset_protected:Npn \@@_backend_fill_stroke:nn #1#2 + { + \str_if_eq:nnTF {#1} {#2} + { \@@_backend_select_aux:n {#1} } + { + \tl_set:Nn \l_@@_backend_fill_tl {#1} + \tl_set:Nn \l_@@_backend_stroke_tl {#2} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.fill #1 } + { << /ca ~ #1 >> } + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.stroke #1 } + { << /CA ~ #2 >> } + \__kernel_backend_literal_pdf:n + { /opacity.fill #1 ~ gs /opacity.stroke #2 ~ gs } + } + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</dvipdfmx|xdvipdfmx> +% \end{macrocode} +% +% \begin{macrocode} +%<*dvisvgm> +% \end{macrocode} +% +% \begin{macro}{\@@_backend_select:n, \@@_backend_fill:n, \@@_backend_stroke:n} +% \begin{macro}{\@@_backend:nn} +% Once again, we use a scope here. There is a general opacity function for +% SVG, but that is of course not set up using the stack. +% \begin{macrocode} +\cs_new_protected:Npn \@@_backend_select:n #1 + { \@@_backend:nn {#1} { } } +\cs_new_protected:Npn \@@_backend_fill:n #1 + { \@@_backend:nn {#1} { fill- } } +\cs_new_protected:Npn \@@_backend_stroke:n #1 + { \@@_backend:nn { {#1} } { stroke- } } +\cs_new_protected:Npn \@@_backend:nn #1#2 + { \__kernel_backend_scope:x { #2 opacity = " \fp_eval:n { min(max(0,#1),1) } " } } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +%</dvisvgm> +% \end{macrocode} +% +% \begin{macrocode} +%</package> +% \end{macrocode} +% +% \end{implementation} +% +% \PrintIndex diff --git a/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx b/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx index e74ac8286b0..226f864933c 100644 --- a/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx +++ b/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx @@ -2,7 +2,7 @@ % %% File: l3backend-pdf.dtx % -% Copyright (C) 2019-2021 The LaTeX3 Project +% Copyright (C) 2019-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -35,7 +35,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-01-09} +% \date{Released 2020-01-29} % % \maketitle % @@ -616,11 +616,12 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_backend_destination:nn, \@@_backend_destination_box:nn} +% \begin{macro}{\@@_backend_destination:nn} +% \begin{macro}{\@@_backend_destination:nnnn, \@@_backend_destination_aux:nnnn} % Here, we need to turn the zoom into a scale. We also need to know where % the current anchor point actually is: worked out in PostScript. For the % rectangle version, we have a bit more PostScript: we need two points. -% fitr without rule spec doesn't work, so it falls back to /Fit here. +% fitr without rule spec doesn't work, so it falls back to \texttt{/Fit} here. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_destination:nn #1#2 { @@ -648,32 +649,42 @@ /DEST } } -\cs_new_protected:Npn \@@_backend_destination_box:nn #1#2 - { - \group_begin: - \hbox_set:Nn \l_@@_internal_box {#2} - \box_move_down:nn - { \box_dp:N \l_@@_internal_box } - { \hbox:n { \__kernel_backend_postscript:n { pdf.save.ll } } } - \box_use:N \l_@@_internal_box - \box_move_up:nn - { \box_ht:N \l_@@_internal_box } - { \hbox:n { \__kernel_backend_postscript:n { pdf.save.ur } } } - \@@_backend_pdfmark:n - { - /View - [ - /FitR ~ - pdf.llx ~ pdf.lly ~ pdf.dest2device ~ - pdf.urx ~ pdf.ury ~ pdf.dest2device - ] - /Dest ( #1 ) cvn - /DEST - } - \group_end: +\cs_new_protected:Npn \@@_backend_destination:nnnn #1#2#3#4 + { + \exp_args:Ne \@@_backend_destination_aux:nnnn + { \dim_eval:n {#2} } {#1} {#3} {#4} + } +\cs_new_protected:Npn \@@_backend_destination_aux:nnnn #1#2#3#4 + { + \vbox_to_zero:n + { + \tex_kern:D \dim_eval:n {#4} \scan_stop: + \hbox:n { \__kernel_backend_postscript:n { pdf.save.ll } } + \tex_vss:D + } + \tex_kern:D #1 \scan_stop: + \vbox_to_zero:n + { + \tex_kern:D \dim_eval:n { -#3 } \scan_stop: + \hbox:n { \__kernel_backend_postscript:n { pdf.save.ur } } + \tex_vss:D + } + \tex_kern:D -#1 \scan_stop: + \@@_backend_pdfmark:n + { + /View + [ + /FitR ~ + pdf.llx ~ pdf.lly ~ pdf.dest2device ~ + pdf.urx ~ pdf.ury ~ pdf.dest2device + ] + /Dest ( #2 ) cvn + /DEST + } } % \end{macrocode} % \end{macro} +% \end{macro} % % \subsubsection{Structure} % @@ -859,7 +870,8 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_backend_destination:nn, \@@_backend_destination_box:nn} +% \begin{macro}{\@@_backend_destination:nn} +% \begin{macro}{\@@_backend_destination:nnnn} % A simple task: pass the data to the primitive. The |\scan_stop:| deals % with the danger of an unterminated keyword. The zoom given here is a % percentage, but we need to pass it as \emph{per mille}. The rectangle @@ -888,26 +900,23 @@ { xyz ~ zoom \fp_eval:n { #2 * 10 } } \scan_stop: } -\cs_new_protected:Npn \@@_backend_destination_box:nn #1#2 +\cs_new_protected:Npn \@@_backend_destination:nnnn #1#2#3#4 { - \group_begin: - \hbox_set:Nn \l_@@_internal_box {#2} %<*luatex> - \tex_pdfextension:D dest ~ + \tex_pdfextension:D dest ~ %</luatex> %<*pdftex> - \tex_pdfdest:D + \tex_pdfdest:D %</pdftex> - name {#1} - fitr ~ - width \box_wd:N \l_@@_internal_box - height \box_ht:N \l_@@_internal_box - depth \box_dp:N \l_@@_internal_box - \box_use:N \l_@@_internal_box - \group_end: + name {#1} + fitr ~ + width \dim_eval:n {#2} ~ + height \dim_eval:n {#3} ~ + depth \dim_eval:n {#4} \scan_stop: } % \end{macrocode} % \end{macro} +% \end{macro} % % \subsubsection{Catalogue entries} % @@ -1475,11 +1484,13 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_backend_destination:nn, \@@_backend_destination_box:nn} +% \begin{macro}{\@@_backend_destination:nn} +% \begin{macro}{\@@_backend_destination:nnnn,\@@_backend_destination_aux:nnnn} % Here, we need to turn the zoom into a scale. The method for \texttt{FitR} % is from Alexander Grahn: the idea is to avoid needing to do any calculations % in \TeX{} by using the backend data for \texttt{@xpos} and \texttt{@ypos}. -% fitr without rule spec doesn't work, so it falls back to /Fit here. +% \texttt{/FitR} without rule spec doesn't work, so it falls back to +% \texttt{/Fit} here. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_destination:nn #1#2 { @@ -1503,39 +1514,47 @@ ] } } -\cs_new_protected:Npn \@@_backend_destination_box:nn #1#2 +\cs_new_protected:Npn \@@_backend_destination:nnnn #1#2#3#4 { - \group_begin: - \hbox_set:Nn \l_@@_internal_box {#2} - \box_move_down:nn { \box_dp:N \l_@@_internal_box } - { - \hbox:n - { - \@@_backend:n { obj ~ @pdf_ #1 _llx ~ @xpos } - \@@_backend:n { obj ~ @pdf_ #1 _lly ~ @ypos } - } - } - \box_use:N \l_@@_internal_box - \box_move_up:nn { \box_ht:N \l_@@_internal_box } - { - \hbox:n - { - \@@_backend:n - { - dest ~ (#1) - [ - @thispage - /FitR ~ - @pdf_ #1 _llx ~ @pdf_ #1 _lly ~ - @xpos ~ @ypos - ] - } - } - } - \group_end: + \exp_args:Ne \@@_backend_destination_aux:nnnn + { \dim_eval:n {#2} } {#1} {#3} {#4} + } +\cs_new_protected:Npn \@@_backend_destination_aux:nnnn #1#2#3#4 + { + \vbox_to_zero:n + { + \tex_kern:D \dim_eval:n {#4} \scan_stop: + \hbox:n + { + \@@_backend:n { obj ~ @pdf_ #2 _llx ~ @xpos } + \@@_backend:n { obj ~ @pdf_ #2 _lly ~ @ypos } + } + \tex_vss:D + } + \tex_kern:D #1 \scan_stop: + \vbox_to_zero:n + { + \tex_kern:D \dim_eval:n { -#3 } \scan_stop: + \hbox:n + { + \@@_backend:n + { + dest ~ (#2) + [ + @thispage + /FitR ~ + @pdf_ #2 _llx ~ @pdf_ #2 _lly ~ + @xpos ~ @ypos + ] + } + } + \tex_vss:D + } + \tex_kern:D -#1 \scan_stop: } % \end{macrocode} % \end{macro} +% \end{macro} % % \subsubsection{Structure} % diff --git a/Master/texmf-dist/source/latex/l3backend/l3backend.ins b/Master/texmf-dist/source/latex/l3backend/l3backend.ins index ebce5ad0267..7fced393bd0 100644 --- a/Master/texmf-dist/source/latex/l3backend/l3backend.ins +++ b/Master/texmf-dist/source/latex/l3backend/l3backend.ins @@ -2,7 +2,7 @@ File l3backend.ins -Copyright (C) 2019-2021 The LaTeX3 Project +Copyright (C) 2019-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this @@ -35,7 +35,7 @@ license information is placed in the derived files. \preamble -Copyright (C) 1990-2021 The LaTeX3 Project +Copyright (C) 1990-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of @@ -64,6 +64,7 @@ and all files in that bundle must be distributed together. \from{l3backend-draw.dtx} {package,dvipdfmx} \from{l3backend-graphics.dtx}{package,dvipdfmx} \from{l3backend-pdf.dtx} {package,dvipdfmx} + \from{l3backend-opacity.dtx} {package,dvipdfmx} } } \generate @@ -76,6 +77,7 @@ and all files in that bundle must be distributed together. \from{l3backend-draw.dtx} {package,dvips} \from{l3backend-graphics.dtx}{package,dvips} \from{l3backend-pdf.dtx} {package,dvips} + \from{l3backend-opacity.dtx} {package,dvips} } \file{l3backend-dvips.pro} { @@ -92,6 +94,7 @@ and all files in that bundle must be distributed together. \from{l3backend-draw.dtx} {package,dvisvgm} \from{l3backend-graphics.dtx}{package,dvisvgm} \from{l3backend-pdf.dtx} {package,dvisvgm} + \from{l3backend-opacity.dtx} {package,dvisvgm} } } \generate @@ -104,6 +107,7 @@ and all files in that bundle must be distributed together. \from{l3backend-draw.dtx} {package,luatex} \from{l3backend-graphics.dtx}{package,luatex} \from{l3backend-pdf.dtx} {package,luatex} + \from{l3backend-opacity.dtx} {package,luatex} } } \generate @@ -116,6 +120,7 @@ and all files in that bundle must be distributed together. \from{l3backend-draw.dtx} {package,pdftex} \from{l3backend-graphics.dtx}{package,pdftex} \from{l3backend-pdf.dtx} {package,pdftex} + \from{l3backend-opacity.dtx} {package,pdftex} } } \generate @@ -128,6 +133,7 @@ and all files in that bundle must be distributed together. \from{l3backend-draw.dtx} {package,xetex} \from{l3backend-graphics.dtx}{package,xetex} \from{l3backend-pdf.dtx} {package,xetex} + \from{l3backend-opacity.dtx} {package,xetex} } } diff --git a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx index 6842fff3c7e..b7d0c8963f2 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx @@ -2,7 +2,7 @@ % %% File: l3benchmark.dtx % -% Copyright (C) 2011,2012,2014-2020 The LaTeX3 Project +% Copyright (C) 2011,2012,2014-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -38,7 +38,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2020-10-27} +% \date{Released 2020-01-29} % % \maketitle % @@ -129,7 +129,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3benchmark}{2020-10-27}{} +\ProvidesExplPackage{l3benchmark}{2020-01-29}{} {L3 Experimental benchmarking} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.ins b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.ins index ca4c280f820..4b72b69db33 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.ins +++ b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.ins @@ -2,7 +2,7 @@ File: l3benchmark.ins -Copyright (C) 2011,2018-2020 The LaTeX3 Project +Copyright (C) 2011,2018-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this @@ -34,7 +34,7 @@ license information is placed in the derived files. \preamble -Copyright (C) 2018-2020 The LaTeX3 Project +Copyright (C) 2018-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.dtx b/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.dtx new file mode 100644 index 00000000000..c7c3e43c06d --- /dev/null +++ b/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.dtx @@ -0,0 +1,591 @@ +% \iffalse meta-comment +% +%% File: l3bitset.dtx +% +% Copyright (C) 2020,2021 The LaTeX 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 "l3bitset bundle" (The Work in LPPL) +% and all files in that bundle must be distributed together. +% +% ----------------------------------------------------------------------- +% +% The development version of the bundle can be found at +% +% https://github.com/latex3/latex3 +% +% for those people who are interested. +% +%<*driver> +\documentclass[full]{l3doc} +\begin{document} + \DocInput{\jobname.dtx} +\end{document} +%</driver> +% \fi +% \title{^^A +% The \pkg{l3bitset} package \\ Experimental bitsets ^^A +% } +% +% \author{^^A +% The \LaTeX{} Project\thanks +% {^^A +% E-mail: +% \href{mailto:latex-team@latex-project.org} +% {latex-team@latex-project.org}^^A +% }^^A +% } +% +% \date{Released 2020-01-29} +% +% \maketitle +% \begin{documentation} +% +% This package defines and implements the data type \texttt{bitset}, a vector of +% bits. The size of the vector may grow dynamically. +% Individual bits can be set and unset by names pointing to an index position. +% The names |1|, |2|, |3|, \ldots\ are predeclared and point to the +% index positions $1$, $2$, $3$,\ldots. More names can be added and existing names can +% be changed. +% The index is like all other indices in \pkg{expl3} modules \emph{1-based}. +% A \texttt{bitset} can be output as binary number or---as needed e.g. in a +% PDF dictionary---as decimal (arabic) number. +% Currently only a small subset of the functions provided by the \pkg{bitset} +% package are implemented here, mainly the functions needed to use bitsets in +% PDF dictionaries. +% +% The bitset is stored as a string (but one shouldn't rely on the internal +% representation) and so the vector size is theoretically +% unlimited, only restricted by \TeX-memory. But the functions to set and clear +% bits uses integer functions for the index so bitsets can't be longer +% than $2^{31} - 1$. +% The export function +% \cs{bitset_to_arabic:N} can use functions from the \texttt{int} module only if +% the largest index used for this bitset is smaller then $32$, for longer +% bitsets \texttt{fp} is used and this is slower. +% +% \section{Creating bitsets} +% \begin{function}[added = 2021-01-26,updated=2020-12-29] +% {\bitset_new:N,\bitset_new:c,\bitset_new:Nn, \bitset_new:cn} +% \begin{syntax} +% \cs{bitset_new:N} \meta{bitset var} \\ +% \cs{bitset_new:Nn} \meta{bitset var} +% \{ +% \meta{name1} |=| \meta{index1} |,| +% \meta{name2} |=| \meta{index2} |,| \ldots{} +% \} +% \end{syntax} +% Creates a new \meta{bitset var} or raises an error if the name is already taken. +% The declaration is global. The \meta{bitset var} is initially $0$. +% +% Bitsets are implemented as string variables consisting of +% \texttt{1}'s and \texttt{0}'s. +% The rightmost number is the index position $1$, so +% the string variable can be viewed directly as the binary number. +% But one shouldn't rely on the internal representation, but use the +% dedicated \cs{bitset_to_bin:N} instead to get the binary number. +% +% The name--index pairs given in the second +% argument of \cs{bitset_new:Nn} declares names for some indices, +% which can be used to set and unset bits. +% The names |1|, |2|, |3|, \ldots\ are predeclared and point to the +% index positions $1$, $2$, $3$, \ldots. +% +% \meta{index\ldots} should be a positive number or an +% \meta{integer expression} which evaluates to a positive number. +% The expression is evaluated when the index is used, not a declaration time. +% The names \meta{name\ldots} +% should be unique. Using a number as name, e.g.~|10=1|, is allowed, it +% then overwrites the predeclared name |10|, +% but the index position $10$ can then only be reached if some other +% name for it exists, e.g. |ten=10|. +% It is not necessary to give every index +% a name, and an index can have more than one name. The named index +% can be extended or changed with the next function. +% +% \end{function} +% \begin{function}[added = 2021-01-26] +% {\bitset_addto_named_index:Nn} +% \begin{syntax} +% \cs{bitset_addto_named_index:Nn} \meta{bitset var} +% \{ +% \meta{name1} |=| \meta{index1} |,| +% \meta{name2} |=| \meta{index2} |,| \ldots{} +% \} +% \end{syntax} +% This extends or changes the name--index pairs for \meta{bitset var} +% globally as described for \cs{bitset_new:Nn}. +% +% For example after these settings +% +% \begin{verbatim} +% \bitset_new:Nn \l_pdfannot_F_bitset +% { +% Invisible = 1, +% Hidden = 2, +% Print = 3, +% NoZoom = 4, +% NoRotate = 5, +% NoView = 6, +% ReadOnly = 7, +% Locked = 8, +% ToggleNoView = 9, +% LockedContents = 10 +% } +% \bitset_addto_named_index:Nn \l_pdfannot_F_bitset +% { +% print = 3 +% } +% \end{verbatim} +% it is possible to set bit $3$ by using any of this alternatives: +% \begin{verbatim} +% \bitset_set_true:Nn \l_pdfannot_F_bitset {Print} +% \bitset_set_true:Nn \l_pdfannot_F_bitset {print} +% \bitset_set_true:Nn \l_pdfannot_F_bitset {3} +% \end{verbatim} +% \end{function} +% +% \begin{function}[EXP, pTF,added = 2021-01-26] +% { \bitset_if_exist:N, \bitset_if_exist:c } +% \begin{syntax} +% \cs{bitset_if_exist_p:N} \meta{bitset var} +% \cs{bitset_if_exist:NTF} \meta{bitset var} \Arg{true code} \Arg{false code}% +% \end{syntax} +% Tests whether the \meta{bitset var} exist. +% \end{function} +% +% \section{Setting and unsetting bits} +% +% \begin{function}[added = 2021-01-26] +% { \bitset_set_true:Nn, \bitset_set_true:cn, \bitset_gset_true:Nn, \bitset_gset_true:cn } +% \begin{syntax} +% \cs{bitset_set_true:Nn} \meta{bitset var} \Arg{name}\\ +% \cs{bitset_gset_true:Nn} \meta{bitset var} \Arg{name} +% \end{syntax} +% This sets the bit of the index position represented by \Arg{name} to $1$. +% \Arg{name} should be either one of the predeclared names +% |1|, |2|, |3|, \ldots, or one of the names added manually. +% Index position are 1-based. +% If needed the length of the bit vector is enlarged. +% \end{function} +% +% \begin{function}[added = 2021-01-26] +% { \bitset_set_false:Nn, \bitset_set_false:cn, \bitset_gset_false:Nn, \bitset_set_false:cn } +% \begin{syntax} +% \cs{bitset_set_false:Nn} \meta{bitset var} \Arg{name}\\ +% \cs{bitset_gset_false:Nn} \meta{bitset var} \Arg{name} +% \end{syntax} +% This unsets the bit of the index position represented by \Arg{name} (sets +% it to $0$). +% \Arg{name} should be either one of the predeclared names +% |1|, |2|, |3|, \ldots, or one of the names added manually. +% The index is $1$-based. If the index position is larger +% than the current length of the bit vector +% nothing happens. If the leading (left most) bit is unset, +% zeros are not trimmed but stay in the bit vector and are still shown +% by \cs{bitset_show:N}. +% \end{function} +% +% \begin{function}[added = 2021-01-26] +% {\bitset_clear:N,\bitset_clear:c,\bitset_gclear:N,\bitset_gclear:c} +% \begin{syntax} +% \cs{bitset_clear:N} \meta{bitset var} \\ +% \cs{bitset_gclear:N} \meta{bitset var} +% \end{syntax} +% This resets the bitset to the initial state. The declared names are not changed. +% \end{function} +% +% \section{Using bitsets} +% +% \begin{function}[EXP,added = 2021-01-26] +% { \bitset_item:Nn, \bitset_item:cn } +% \begin{syntax} +% \cs{bitset_item:Nn} \meta{bitset var} \Arg{name} +% \end{syntax} +% \cs{bitset_item:Nn} outputs \texttt{1} if the bit with +% the index number represented by \Arg{name} is set and \texttt{0} otherwise. +% \Arg{name} is either one of the predeclared names +% |1|, |2|, |3|, \ldots, or one of the names added manually. +% \end{function} +% +% \begin{function}[EXP,added = 2021-01-26] +% {\bitset_to_bin:N, \bitset_to_bin:c} +% \begin{syntax} +% \cs{bitset_to_bin:N} \meta{bitset var} +% \end{syntax} +% This leaves the current value of the bitset expressed as +% a binary (string) number in the input stream. +% If no bit has been set yet, the output is zero. +% \end{function} +% \begin{function}[EXP,added = 2021-01-26] +% {\bitset_to_arabic:N, \bitset_to_arabic:c} +% \begin{syntax} +% \cs{bitset_to_arabic:N} \meta{bitset var} +% \end{syntax} +% This leaves the current value of the bitset expressed as +% a decimal number in the input stream. If no bit has been set yet, +% the output is zero. The function uses \cs{int_from_bin:n} if the largest +% index that have been set or unset is smaller then $32$, and a slower implementation +% based on \cs{fp_eval:n} otherwise. +% \end{function} +% +% \begin{function}[added = 2021-01-26] +% {\bitset_show:N, \bitset_show:c} +% \begin{syntax} +% \cs{bitset_show:N} \meta{bitset var} +% \end{syntax} +% Displays the binary and decimal value of the \meta{bitset var} on the terminal, +% \end{function} +% +% \begin{function}[added = 2021-01-26] +% {\bitset_log:N, \bitset_log:c} +% \begin{syntax} +% \cs{bitset_log:N} \meta{bitset var} +% \end{syntax} +% Writes the value of the \meta{bitset var} in the log file. +% \end{function} +% +% \end{documentation} +% +% \begin{implementation} +% \section{\pkg{l3bitset} implementation} +% \TestFiles{m3bitset001,m3bitset002} +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% \begin{macrocode} +%<@@=bitset> +% \end{macrocode} +% \begin{macrocode} +\ProvidesExplPackage{l3bitset}{2020-01-29}{} + {L3 Experimental bitset support} +% \end{macrocode} +% A bitset is a string variable. +% \begin{macro} +% { +% \bitset_new:N, \bitset_new:c +% } +% \begin{macrocode} +\cs_new_protected:Npn \bitset_new:N #1 + { + \__kernel_chk_if_free_cs:N #1 + \cs_gset_eq:NN #1 \c_zero_str + \prop_new:c { g__bitset_ \cs_to_str:N #1 _name_prop } + } + +\cs_new_protected:Npn \bitset_new:Nn #1 #2 + { + \__kernel_chk_if_free_cs:N #1 + \cs_gset_eq:NN #1 \c_zero_str + \prop_new:c { g__bitset_ \cs_to_str:N #1 _name_prop } + \prop_gset_from_keyval:cn + { g__bitset_ \cs_to_str:N #1 _name_prop } + {#2} + } +\cs_generate_variant:Nn \bitset_new:N { c } +% \end{macrocode} +% \end{macro} +% \begin{variable}{\l_@@_tmpa_prop} +% A scratch prop to be able to extend the names properties. +% \begin{macrocode} +\prop_new:N \l_@@_tmpa_prop +% \end{macrocode} +% \end{variable} +% \begin{macro} +% { +% \bitset_addto_named_index:Nn +% } +% \begin{macrocode} +\cs_new_protected:Npn \bitset_addto_named_index:Nn #1#2 + { + \prop_set_from_keyval:Nn \l_@@_tmpa_prop {#2} + \prop_map_inline:Nn \l_@@_tmpa_prop + { + \prop_gput:cnn + { g_@@_ \cs_to_str:N #1 _name_prop } + {##1} + {##2} + } + } +% \end{macrocode} +% \end{macro} +% \begin{macro}[EXP,pTF] +% { +% \bitset_if_exist:N, \bitset_if_exist:c +% } +% Existence tests. +% \begin{macrocode} +\prg_new_eq_conditional:NNn + \bitset_if_exist:N \str_if_exist:N { p , T , F , TF } +\prg_new_eq_conditional:NNn + \bitset_if_exist:c \str_if_exist:c + { p , T , F , TF } +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@@_set_true:Nn, \@@_gset_true:Nn, \@@_set_false:Nn, \@@_gset_false:Nn} +% \begin{macro}{\@@_set:NNnN} +% The internal command uses only numbers (integer expressions) for the +% position. +% A bit is set by either extending the string or by splitting it and +% then inserting an $1$. It is not checked if the value was already $1$. +% \begin{macrocode} +\cs_new_protected:Npn \@@_set_true:Nn #1#2 + { \@@_set:NNnN \str_set:Nx #1 {#2} 1 } +\cs_new_protected:Npn \@@_gset_true:Nn #1#2 + { \@@_set:NNnN \str_gset:Nx #1 {#2} 1 } +\cs_new_protected:Npn \@@_set_false:Nn #1#2 + { \@@_set:NNnN \str_set:Nx #1 {#2} 0 } +\cs_new_protected:Npn \@@_gset_false:Nn #1#2 + { \@@_set:NNnN \str_gset:Nx #1 {#2} 0 } +\cs_new_protected:Npn \@@_set:NNnN #1#2#3#4 + { + \int_compare:nNnT {#3} > { 0 } + { + \int_compare:nNnTF { \str_count:N #2 } < {#3} + { + #1 #2 + { + #4 + \prg_replicate:nn { #3 - \str_count:N #2 - 1 } { 0 } + #2 + } + } + { + #1 #2 + { + \str_range:Nnn #2 { 1 } { -1 - (#3) } + #4 + \str_range:Nnn #2 { 1 - (#3) } { -1 } + } + } + } + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{variable}{\l_@@_internal_int} +% \begin{macrocode} +\int_new:N \l_@@_internal_int +% \end{macrocode} +% \end{variable} +% +% \begin{macro}[TF]{\@@_test_digits:n} +% \begin{macro}{\@@_test_digits_end:n} +% \begin{macro}{\@@_test_digits:wn} +% \url{https://chat.stackexchange.com/transcript/message/56878159#56878159} +% \begin{macrocode} +\prg_new_protected_conditional:Npnn \@@_test_digits:n #1 { TF } + { + \tex_afterassignment:D \@@_test_digits:w + \l_@@_internal_int = 0 \tl_trim_spaces_apply:nN {#1} \tl_to_str:n + \@@_test_digits_end: + \use_i:nnn \if_false: + \@@_test_digits_end: + \if_int_compare:w \c_zero_int < \l_@@_internal_int + \prg_return_true: + \else: + \prg_return_false: + \fi: + } +\cs_new_eq:NN \@@_test_digits_end: \exp_stop_f: +\cs_new_protected:Npn \@@_test_digits:w #1 \@@_test_digits_end: { } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro} +% { +% \bitset_set_true:Nn, \bitset_set_true:cn, +% \bitset_gset_true:Nn, \bitset_gset_true:cn, +% } +% \begin{macro}{\@@_set_aux:NNn} +% The user commands must first translate the argument to an index number. +% \begin{macrocode} +\cs_new_protected:Npn \bitset_set_true:Nn #1#2 + { \@@_set:NNn \@@_set_true:Nn #1 {#2} } +\cs_new_protected:Npn \bitset_gset_true:Nn #1#2 + { \@@_set:NNn \@@_gset_true:Nn #1 {#2} } +\cs_new_protected:Npn \bitset_set_false:Nn #1#2 + { \@@_set:NNn \@@_set_false:Nn #1 {#2} } +\cs_new_protected:Npn \bitset_gset_false:Nn #1#2 + { \@@_set:NNn \@@_gset_false:Nn #1 {#2} } +\cs_new_protected:Npn \@@_set:NNn #1#2#3 + { + \prop_if_in:cnTF { g_@@_ \cs_to_str:N #2 _name_prop } {#3} + { + #1 #2 + { + \prop_item:cn { g_@@_ \cs_to_str:N #2 _name_prop } {#3} + } + } + { + \@@_test_digits:nTF {#3} + { + #1 #2 {#3} + \prop_gput:cnn { g_@@_ \cs_to_str:N #2 _name_prop } {#3} {#3} + } + { + \__kernel_msg_warning:nnxx { bitset } { bitset-unknown-name } + { \token_to_str:N #2 } + { \tl_to_str:n {#3} } + } + } + } +\cs_generate_variant:Nn \bitset_set_true:Nn { c } +\cs_generate_variant:Nn \bitset_gset_true:Nn { c } +\cs_generate_variant:Nn \bitset_set_false:Nn { c } +\cs_generate_variant:Nn \bitset_gset_false:Nn { c } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro} +% { +% \bitset_clear:N, \bitset_clear:c, +% \bitset_gclear:N, \bitset_gclear:c +% } +% \begin{macrocode} +\cs_new_protected:Npn \bitset_clear:N #1 + { + \str_set_eq:NN #1 \c_zero_str + } +\cs_new_protected:Npn \bitset_gclear:N #1 + { + \str_gset_eq:NN #1 \c_zero_str + } +\cs_generate_variant:Nn \bitset_clear:N { c } +\cs_generate_variant:Nn \bitset_gclear:N { c } +% \end{macrocode} +% \end{macro} +% \begin{macro} +% { +% \bitset_to_arabic:N, \bitset_to_arabic:c, +% \bitset_to_bin:N, \bitset_to_bin:c, +% } +% The naming of the commands follow the names in the \texttt{int} module. +% \cs{bitset_to_arabic:N} uses \cs{int_from_bin:n} if the string is shorter +% then $32$ and the slower \cs{fp_eval} for larger bitsets. +% \begin{macrocode} +\cs_new:Npn \bitset_to_arabic:N #1 + { + \int_compare:nNnTF { \str_count:N #1 } < { 32 } + { \exp_args:No \int_from_bin:n {#1} } + { + \exp_after:wN \@@_to_int:nN \exp_after:wN 0 + #1 \q_recursion_tail \q_recursion_stop + } + } + +\cs_new:Npn \@@_to_int:nN #1#2 + { + \quark_if_recursion_tail_stop_do:Nn #2 {#1} + \exp_args:Nf \@@_to_int:nN { \fp_eval:n { #1 * 2 + #2 } } + } + +\cs_new:Npn \bitset_to_bin:N #1 + { + #1 + } +\cs_generate_variant:Nn \bitset_to_arabic:N { c } +\cs_generate_variant:Nn \bitset_to_bin:N { c } +% \end{macrocode} +% \end{macro} +% \begin{macro} +% { +% \bitset_item:Nn, \bitset_item:cn +% } +% All bits that have been set at anytime have an entry in the prop, +% so we can take everything else as $0$. +% \begin{macrocode} +\cs_new:Npn \bitset_item:Nn #1#2 + { + \prop_if_in:cnTF { g_@@_ \cs_to_str:N #1 _name_prop } {#2} + { + \int_eval:n + { + \str_item:Nn #1 + { 0 - ( \prop_item:cn { g_@@_ \cs_to_str:N #1 _name_prop } {#2} ) } + +0 + } + } + { + 0 + } + } +\cs_generate_variant:Nn \bitset_item:Nn { c } +% \end{macrocode} +% \end{macro} + +% \begin{macro} +% { +% \bitset_show:N, \bitset_show:c, +% \bitset_log:N, \bitset_log:c +% } +% \begin{macrocode} +\cs_new_protected:Npn \bitset_show:N { \@@_show:NN \msg_show:nnxxxx } +\cs_generate_variant:Nn \bitset_show:N { c } +\cs_new_protected:Npn \bitset_log:N { \@@_show:NN \msg_log:nnxxxx } +\cs_generate_variant:Nn \bitset_log:N { c } +\cs_new_protected:Npn \bitset_show_named_index:N { \@@_show_named_index:NN \msg_show:nnxxxx } +\cs_generate_variant:Nn \bitset_show_named_index:N { c } +\cs_new_protected:Npn \@@_show:NN #1#2 + { + \__kernel_chk_defined:NT #2 + { + #1 { LaTeX/bitset } { show-bitset } + { \token_to_str:N #2 } + { \bitset_to_bin:N #2 } + { \bitset_to_arabic:N #2 } + { } + } + } +\cs_new_protected:Npn \@@_show_named_index:NN #1#2 + { + \__kernel_chk_defined:NT #2 + { + #1 { LaTeX/bitset } { show-names } + { \token_to_str:N #2 } + { \prop_map_function:cN { g_@@_ \cs_to_str:N #2 _name_prop } \msg_show_item:nn } + { } + { } + } + } +% \end{macrocode} +% \end{macro} +% +% \subsection{Messages} +% \begin{macrocode} + \__kernel_msg_new:nnn { bitset } { show-bitset } + { + The~bitset~#1~has~the~representation: \\ + >~binary:~#2 \\ + >~arabic:~#3 . + } +\__kernel_msg_new:nnn { bitset } { show-names } + { + The~bitset~#1~ + \tl_if_empty:nTF {#2} + { knows~no~names~yet \\>~ . } + { knows~the~name/index~pairs~(without~outer~braces): #2 . } + } +\__kernel_msg_new:nnn { bitset } { bitset-unknown-name } + { The~name~'#2'~is~unknown~for~bitset~\tl_to_str:n {#1} } + +% \end{macrocode} +% \begin{macrocode} +%</package> +% \end{macrocode} +% \end{macro} +% +% \end{implementation} +% +% \PrintIndex diff --git a/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.ins b/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.ins new file mode 100644 index 00000000000..1f693d29569 --- /dev/null +++ b/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.ins @@ -0,0 +1,62 @@ +\iffalse meta-comment + +File: l3bitset.ins + +Copyright (C) 2020 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 "l3experimental bundle" (The Work in LPPL) +and all files in that bundle must be distributed together. + +----------------------------------------------------------------------- + +The development version of the bundle can be found at + + https://github.com/latex3/latex3 + +for those people who are interested. + +----------------------------------------------------------------------- + +Any modification of this file should ensure that the copyright and +license information is placed in the derived files. + +\fi + +\input l3docstrip.tex +\askforoverwritefalse + +\preamble + +Copyright (C) 2020 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 "l3experimental bundle" (The Work in LPPL) +and all files in that bundle must be distributed together. + +\endpreamble +% stop docstrip adding \endinput +\postamble +\endpostamble + +\keepsilent + +\generate{\file{l3bitset.sty} + { + \from{l3bitset.dtx} {package} + } +} + +\endbatchfile diff --git a/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx b/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx index 9b81f5403c7..703815a96f1 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx @@ -2,7 +2,7 @@ % %% File: l3color.dtx % -% Copyright (C) 2017-2020 The LaTeX3 Project +% Copyright (C) 2017-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -38,7 +38,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2020-10-27} +% \date{Released 2020-01-29} % % \maketitle % @@ -247,15 +247,18 @@ % and similar are not influenced by this setting. % \end{variable} % -% \section{Colors for drawing: fills and strokes} +% \section{Colors for fills and strokes} % % Colors for drawing operations and so forth are split into strokes and fills -% (the latter may also be referred to as non-stroke color). These operations -% \emph{may} apply to text, but this is backend-depended and the general -% \cs{color_select:n(n)} should be used for typeset text. In contrast to -% general color, these operations are \emph{not} stacked and thus must -% \emph{not} split across pages. Also, an appropriate scope must be applied -% to the color change, for example \cs{draw_begin:}/\cs{draw_end:}. +% (the latter may also be referred to as non-stroke color). The fill color is +% used for text under normal circumstances. Depending on the backend, stroke +% color may use a \emph{stack}, in which case it exhibits the same page breaking +% behavior as general color. However, \texttt{dvips}/\texttt{dvisvgm} do not +% support this, and so color will need to be contained within a scope, such +% as \cs{draw_begin:}/\cs{draw_end:}. +% +% Note that the \emph{current color} is the fill color, as this is used for +% running text. % % \begin{function}{\color_fill:n, \color_stroke:n} % \begin{syntax} @@ -273,9 +276,8 @@ % \meta{value(s)} for filling or stroking. % \end{function} % -% \begin{variable}{color.fc, color.sc} -% When using \texttt{dvips}, these PostScript variables hold the fill and -% stroke color, respectively. +% \begin{variable}{color.sc} +% When using \texttt{dvips}, this PostScript variables hold the stroke color. % \end{variable} % % \section{Multiple color models} @@ -421,7 +423,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3color}{2020-10-27}{} +\ProvidesExplPackage{l3color}{2020-01-29}{} {L3 Experimental color support} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.ins b/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.ins index a2601a4fde1..e1704a9715b 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.ins +++ b/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.ins @@ -2,7 +2,7 @@ File: l3color.ins -Copyright (C) 2017-2020 The LaTeX3 Project +Copyright (C) 2017-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this @@ -34,7 +34,7 @@ license information is placed in the derived files. \preamble -Copyright (C) 2017-2020 The LaTeX3 Project +Copyright (C) 2017-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx index fc0e64eae04..3b251b33055 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx @@ -2,7 +2,7 @@ % %% File: l3draw-boxes.dtx % -% Copyright (C) 2018-2020 The LaTeX3 Project +% Copyright (C) 2018-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -36,7 +36,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-10-27} +% \date{Released 2020-01-29} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx index 4b676ece844..c17e0eea672 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx @@ -2,7 +2,7 @@ % %% File: l3draw-layers.dtx % -% Copyright (C) 2019,2020 The LaTeX3 Project +% Copyright (C) 2019-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -36,7 +36,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-10-27} +% \date{Released 2020-01-29} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx index b43f3b93b5f..82f5588a933 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx @@ -2,7 +2,7 @@ % %% File: l3draw-paths.dtx % -% Copyright (C) 2018-2020 The LaTeX3 Project +% Copyright (C) 2018-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -36,7 +36,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-10-27} +% \date{Released 2020-01-29} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx index 3900b98f4d9..791b2f20343 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx @@ -2,7 +2,7 @@ % %% File: l3draw-points.dtx % -% Copyright (C) 2018-2020 The LaTeX3 Project +% Copyright (C) 2018-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -36,7 +36,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-10-27} +% \date{Released 2020-01-29} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx index 6a828302e81..34258562674 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx @@ -2,7 +2,7 @@ % %% File: l3draw-scopes.dtx % -% Copyright (C) 2018-2020 The LaTeX3 Project +% Copyright (C) 2018-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -36,7 +36,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-10-27} +% \date{Released 2020-01-29} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx index 626a45736ad..bd228009021 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx @@ -2,7 +2,7 @@ % %% File: l3draw-softpath.dtx % -% Copyright (C) 2018-2020 The LaTeX3 Project +% Copyright (C) 2018-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -36,7 +36,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-10-27} +% \date{Released 2020-01-29} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx index c74d9ecbb0d..e93266913b4 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx @@ -2,7 +2,7 @@ % %% File: l3draw-state.dtx % -% Copyright (C) 2018-2020 The LaTeX3 Project +% Copyright (C) 2018-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -36,7 +36,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-10-27} +% \date{Released 2020-01-29} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx index 82f31a9e600..7a242150a48 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx @@ -2,7 +2,7 @@ % %% File: l3draw-transforms.dtx % -% Copyright (C) 2018-2020 The LaTeX3 Project +% Copyright (C) 2018-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -36,7 +36,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-10-27} +% \date{Released 2020-01-29} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx index eef0412c736..a42e75b75a2 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx @@ -2,7 +2,7 @@ % %% File: l3draw.dtx % -% Copyright(C) 2018-2020 The LaTeX3 Project +% Copyright(C) 2018-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -102,7 +102,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -110,7 +110,7 @@ % }^^A % } % -% \date{Released 2020-10-27} +% \date{Released 2020-01-29} % % \maketitle % @@ -1136,7 +1136,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3draw}{2020-10-27}{} +\ProvidesExplPackage{l3draw}{2020-01-29}{} {L3 Experimental core drawing support} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.ins b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.ins index 9b72ca17fd6..ba54fc41322 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.ins +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.ins @@ -2,7 +2,7 @@ File: l3draw.ins -Copyright (C) 2018-2020 The LaTeX3 Project +Copyright (C) 2018-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this @@ -34,7 +34,7 @@ license information is placed in the derived files. \preamble -Copyright (C) 2018-2020 The LaTeX3 Project +Copyright (C) 2018-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx b/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx index 0f8a52c0097..280c3683865 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx @@ -2,7 +2,7 @@ % %% File: l3graphics.dtx % -% Copyright (C) 2017-2020 The LaTeX3 Project +% Copyright (C) 2017-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -38,7 +38,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2020-10-27} +% \date{Released 2020-01-29} % % \maketitle % @@ -240,7 +240,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3graphics}{2020-10-27}{} +\ProvidesExplPackage{l3graphics}{2020-01-29}{} {L3 Experimental graphics inclusion support} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.ins b/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.ins index ef345b5969d..92af3d8915a 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.ins +++ b/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.ins @@ -1,6 +1,6 @@ \iffalse meta-comment -File l3graphics.ins Copyright (C) 2017,2019,2020 The LaTeX3 Project +File l3graphics.ins Copyright (C) 2017,2019-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this @@ -32,7 +32,7 @@ license information is placed in the derived files. \preamble -Copyright (C) 2019,2020 The LaTeX3 Project +Copyright (C) 2019-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx b/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx index e51606a1301..218f4bd5d55 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx @@ -2,7 +2,7 @@ % %% File: l3pdf.dtx % -% Copyright(C) 2019,2020 The LaTeX3 Project +% Copyright(C) 2019-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -38,7 +38,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2020-10-27} +% \date{Released 2020-01-29} % % \maketitle % @@ -175,6 +175,74 @@ % initialised. % \end{function} % +% \subsection{Destinations} +% +% Destinations are the places a link jumped too. +% Unlike the name may suggest they don't described +% an exact location in the PDF. Instead a destination contains a reference to +% a page along with an instruction how to display this page. +% The normally used \enquote{XYZ \textit{top left zoom}} for example instructs +% the viewer to show the page with the given \textit{zoom} and +% the top left corner at the \textit{top left} coordinates---which then gives +% the impression that there is an anchor at this position. +% +% If an instruction takes a coordinate, it is calculated by the following +% commands relative to the location the command is issued. +% So to get a specific coordinate one has to move the command to the right place. +% +% \begin{function}[added = 2021-01-03] +% {\pdf_destination:nn} +% \begin{syntax} +% \cs{pdf_destination:nn} \Arg{name} \Arg{type or integer} +% \end{syntax} +% This creates a destination. \Arg{type or integer} can be one of |fit|, |fith|, +% |fitv|, |fitb|, |fitbh|, |fitbv|, |fitr|, |xyz| +% or an integer representing a scale factor in percent. +% |fitr| here gives only a lightweight version of |/FitR|: +% The backend code defines |fitr| so that it will with pdf\LaTeX{} and +% Lua\LaTeX{} use the coordinates of the surrounding box, +% with \texttt{dvips} and \texttt{dvipdfmx} it falls back to |fit|. +% For full control use \cs{pdf_destination:nnnn}. +% +% The keywords match to the PDF names as described in the following tabular. +% +% \medskip +% \noindent\begin{tabular}{ll>{\raggedright\arraybackslash}p{6cm}} +% \toprule +% Keyword & PDF & Remarks \\ \midrule +% |fit| & |/Fit| +% & Fits the page to the window\\ +% |fith| & |/FitH| \textit{top} +% & Fits the width of the page to the window \\ +% |fitv| & |/FitV| \textit{left} +% & Fits the height of the page to the window \\ +% |fitb| & |/FitB| +% & Fits the page bounding box to the window \\ +% |fitbh|& |/FitBH| \textit{top} +% & Fits the width of the page bounding box to the window. \\ +% |fitbv|& |/FitBV| \textit{left} +% & Fits the height of the page bounding box to the window. \\ +% |fitr| & |/FitR| \textit{left bottom right top} +% & Fits the rectangle specified by the four coordinates to the window +% (see above for the restrictions)\\ +% |xyz| & |/XYZ| \textit{left top} null +% & Sets a coordinate but doesn't change the zoom.\\ +% \Arg{integer} & |/XYZ| \textit{left top zoom} +% & Sets a coordinate and a zoom meaning \Arg{integer}\%. +% \\\bottomrule +% \end{tabular} +% +% \end{function} +% +% \begin{function}[added = 2021-01-17] +% {\pdf_destination:nnnn} +% \begin{syntax} +% \cs{pdf_destination:nnnn} \Arg{name} \Arg{width} \Arg{height} \Arg{depth} +% \end{syntax} +% This creates a destination with |/FitR| type with the given dimensions relative +% to the current location. The destination is in a box of size zero, but it doesn't +% switch to horizontal mode. +% \end{function} % \end{documentation} % % \begin{implementation} @@ -190,7 +258,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3pdf}{2020-10-27}{} +\ProvidesExplPackage{l3pdf}{2020-01-29}{} {L3 Experimental core PDF support} % \end{macrocode} % @@ -347,6 +415,24 @@ % \end{macrocode} % \end{macro} % +% \subsection{Destinations} +% +% \begin{macro}{\pdf_destination:nn} +% \begin{macrocode} +\cs_new_protected:Npn \pdf_destination:nn #1 #2 + { \@@_backend_destination:nn {#1}{#2} } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\pdf_destination:nnnn} +% \begin{macrocode} +\cs_new_protected:Npn \pdf_destination:nnnn #1 #2 #3 #4 + { + \hbox_to_zero:n + { \@@_backend_destination:nnnn {#1} {#2} {#3} {#4} } + } +% \end{macrocode} +% \end{macro} % \begin{macrocode} %</package> % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.ins b/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.ins index e325be4520a..e422ceb995e 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.ins +++ b/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.ins @@ -2,7 +2,7 @@ File: l3pdf.ins -Copyright (C) 2019,2020 The LaTeX3 Project +Copyright (C) 2019-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this @@ -34,7 +34,7 @@ license information is placed in the derived files. \preamble -Copyright (C) 2019,2020 The LaTeX3 Project +Copyright (C) 2019-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx index a3171be0b65..0751244b40d 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx @@ -2,7 +2,7 @@ % %% File: l3str-format.dtx % -% Copyright (C) 2012-2020 The LaTeX3 Project +% Copyright (C) 2012-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -40,7 +40,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -48,7 +48,7 @@ % }^^A % } % -% \date{Released 2020-10-27} +% \date{Released 2020-01-29} % % \maketitle % @@ -166,7 +166,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3str-format}{2020-10-27}{} +\ProvidesExplPackage{l3str-format}{2020-01-29}{} {L3 Experimental string formatting} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins index 76fc36a116c..4c2b0df987c 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins @@ -2,7 +2,7 @@ File l3str.ins -Copyright (C) 2011-2017,2019,2020 The LaTeX3 Project +Copyright (C) 2011-2017,2019-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this @@ -34,7 +34,7 @@ license information is placed in the derived files. \preamble -Copyright (C) 2011-2020 The LaTeX3 Project +Copyright (C) 2011-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx b/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx index bf3ba7b058d..1126f56257b 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx @@ -2,7 +2,7 @@ % %% File: l3sys-shell.dtx % -% Copyright (C) 2018-2020 The LaTeX3 Project +% Copyright (C) 2018-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -38,7 +38,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2020-10-27} +% \date{Released 2020-01-29} % % \maketitle % @@ -135,7 +135,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3sys-shell}{2020-10-27}{} +\ProvidesExplPackage{l3sys-shell}{2020-01-29}{} {L3 Experimental system shell functions} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.ins b/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.ins index 9ee35460cbd..025c282b726 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.ins +++ b/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.ins @@ -2,7 +2,7 @@ File: l3sys-shell.ins -Copyright (C) 2018-2020 The LaTeX3 Project +Copyright (C) 2018-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this @@ -34,7 +34,7 @@ license information is placed in the derived files. \preamble -Copyright (C) 2018-2020 The LaTeX3 Project +Copyright (C) 2018-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx index ec5ffab7e4a..8106487df75 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx @@ -2,7 +2,7 @@ % %% File: xcoffins.dtx % -% Copyright (C) 2010-2012,2014,2016-2020 The LaTeX3 Project +% Copyright (C) 2010-2012,2014,2016-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -48,7 +48,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -56,7 +56,7 @@ % }^^A % } % -% \date{Released 2020-10-27} +% \date{Released 2020-01-29} % % \maketitle % @@ -675,7 +675,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xcoffins}{2020-10-27}{} +\ProvidesExplPackage{xcoffins}{2020-01-29}{} {L3 Experimental design level coffins} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.ins b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.ins index 52d5c24a449..218e38dec37 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.ins +++ b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.ins @@ -2,7 +2,7 @@ File: xcoffins.ins -Copyright (C) 2010,2011,2012,2016,2017,2019,2020 The LaTeX3 Project +Copyright (C) 2010,2011,2012,2016,2017,2019-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this @@ -34,7 +34,7 @@ license information is placed in the derived files. \preamble -Copyright (C) 2010-2020 The LaTeX3 Project +Copyright (C) 2010-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx index 5f1fa260303..10a359f0036 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx @@ -3,7 +3,7 @@ %% File: l3galley.dtx % % Copyright (C) 1999-2001,2004-2009 Frank Mittelbach -% (C) 2010-2020 The LaTeX3 Project +% (C) 2010-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -53,7 +53,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -61,7 +61,7 @@ % }^^A % } % -% \date{Released 2020-10-27} +% \date{Released 2020-01-29} % % \maketitle % @@ -686,7 +686,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3galley}{2020-10-27}{} +\ProvidesExplPackage{l3galley}{2020-01-29}{} {L3 Experimental galley code} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx index 936b2a37bb4..a12bc47e200 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx @@ -3,7 +3,7 @@ %% File: xgalley.dtx % % Copyright (C) 1999-2001,2004-2009 Frank Mittelbach -% (C) 2010-2012,2014,2016-2020 The LaTeX3 Project +% (C) 2010-2012,2014,2016-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -39,7 +39,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -47,7 +47,7 @@ % }^^A % } % -% \date{Released 2020-10-27} +% \date{Released 2020-01-29} % % \maketitle % @@ -734,7 +734,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xgalley}{2020-10-27}{} +\ProvidesExplPackage{xgalley}{2020-01-29}{} {L3 Experimental galley} \RequirePackage{xparse,xtemplate,l3galley} % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.ins b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.ins index d0c89bcd2c9..8b5690d0799 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.ins +++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.ins @@ -2,7 +2,7 @@ File: xgalley.ins -Copyright (C) 2010-2012,2016,2017,2019,2020 The LaTeX3 Project +Copyright (C) 2010-2012,2016,2017,2019-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this @@ -34,7 +34,7 @@ license information is placed in the derived files. \preamble -Copyright (C) 2010-2020 The LaTeX3 Project +Copyright (C) 2010-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def b/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def index b64b2f1b028..9947b2830aa 100644 --- a/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def +++ b/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def @@ -10,8 +10,9 @@ %% l3backend-draw.dtx (with options: `package,dvipdfmx') %% l3backend-graphics.dtx (with options: `package,dvipdfmx') %% l3backend-pdf.dtx (with options: `package,dvipdfmx') +%% l3backend-opacity.dtx (with options: `package,dvipdfmx') %% -%% Copyright (C) 1990-2021 The LaTeX3 Project +%% Copyright (C) 1990-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -25,7 +26,7 @@ %% %% File: l3backend-basics.dtx \ProvidesExplFile - {l3backend-dvipdfmx.def}{2021-01-09}{} + {l3backend-dvipdfmx.def}{2020-01-29}{} {L3 backend support: dvipdfmx} \cs_if_exist:NTF \__kernel_dependency_version_check:nn { @@ -90,25 +91,44 @@ \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \s__color_stop #3 { \tl_set:Nn #3 { {#1} {#2} } } } -\int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 } +\int_new:N \l__color_backend_stack_int +\int_compare:nNnTF \c__kernel_sys_dvipdfmx_version_int < { 20201111 } + { \cs_new_protected:Npn \__kernel_color_backend_stack_init:Nnn #1#2#3 { } } { - \int_new:N \g__color_stack_int - \cs_new_protected:Npn \__kernel_color_stack_init:Nnn #1#2#3 + \int_new:N \g__color_backend_stack_int + \cs_new_protected:Npx \__kernel_color_backend_stack_init:Nnn #1#2#3 { - \int_gincr:N \g__color_stack_int - \int_const:Nn #1 { \g__color_stack_int } - \__kernel_backend_literal:x + \int_gincr:N \exp_not:N \g__color_backend_stack_int + \int_const:Nn #1 { \exp_not:N \g__color_backend_stack_int } + \cs_if_exist:NTF \AtBeginDvi + { \exp_not:N \AtBeginDvi } + { \exp_not:N \use:n } { - pdfcolorstackinit ~ - \int_use:N \g__color_stack_int \c_space_tl - \tl_if_blank:nF {#2} { #2 ~ } - (#3) + \__kernel_backend_literal:x + { + pdfcolorstackinit ~ + \exp_not:N \int_use:N \exp_not:N \g__color_backend_stack_int + \c_space_tl + \exp_not:N \tl_if_blank:nF {#2} { #2 ~ } + (#3) + } } } + \cs_if_exist:cTF { main@pdfcolorstack } + { + \int_set:Nn \l__color_backend_stack_int + { \int_use:c { main@pdfcolorstack } } + } + { + \__kernel_color_backend_stack_init:Nnn \c__color_backend_main_stack_int + { page ~ direct } { 0 ~ g ~ 0 ~ G } + \int_set_eq:NN \l__color_backend_stack_int + \c__color_backend_main_stack_int + } } \int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 } { - \cs_new_protected:Npn \__kernel_color_stack_push:nn #1#2 + \cs_new_protected:Npn \__color_backend_stack_push:nn #1#2 { \__kernel_backend_literal:x { @@ -117,7 +137,8 @@ push ~ (#2) } } - \cs_new_protected:Npn \__kernel_color_stack_pop:n #1 + \cs_generate_variant:Nn \__color_backend_stack_push:nn { nx } + \cs_new_protected:Npn \__color_backend_stack_pop:n #1 { \__kernel_backend_literal:x { @@ -127,20 +148,23 @@ } } } -\int_new:N \l__kernel_color_stack_int +\tl_new:N \l__color_backend_fill_tl +\tl_new:N \l__color_backend_stroke_tl \cs_new_protected:Npn \__color_backend_select_cmyk:n #1 - { \__color_backend_select:n { #1 ~ k ~ #1 ~ K } } + { \__color_backend_select:nn { #1 ~ k } { #1 ~ K } } \cs_new_protected:Npn \__color_backend_select_gray:n #1 - { \__color_backend_select:n { #1 ~ g ~ #1 ~ G } } + { \__color_backend_select:nn { #1 ~ g } { #1 ~ G } } \cs_new_protected:Npn \__color_backend_select_rgb:n #1 - { \__color_backend_select:n { #1 ~ rg ~ #1 ~ RG } } -\cs_new_protected:Npn \__color_backend_select:n #1 + { \__color_backend_select:nn { #1 ~ rg } { #1 ~ RG } } +\cs_new_protected:Npn \__color_backend_select:nn #1#2 { - \__kernel_color_stack_push:nn \l__kernel_color_stack_int {#1} + \tl_set:Nn \l__color_backend_fill_tl {#1} + \tl_set:Nn \l__color_backend_stroke_tl {#2} + \__color_backend_stack_push:nn \l__color_backend_stack_int { #1 ~ #2 } \group_insert_after:N \__color_backend_reset: } \cs_new_protected:Npn \__color_backend_reset: - { \__kernel_color_stack_pop:n \l__kernel_color_stack_int } + { \__color_backend_stack_pop:n \l__color_backend_stack_int } \int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } { \cs_gset_protected:Npn \__color_backend_select_cmyk:n #1 @@ -154,7 +178,7 @@ { \__kernel_backend_literal:n { pdf: ec } } } \cs_new_protected:Npn \__color_backend_select_separation:nn #1#2 - { \__color_backend_select:n { /#1 ~ cs ~ /#1 ~ CS ~ #2 ~ scn ~ #2 ~ SCN } } + { \__color_backend_select:nn { /#1 ~ cs ~ #2 ~ scn } { /#1 ~ CS ~ #2 ~ SCN } } \cs_new_eq:NN \__color_backend_select_devicen:nn \__color_backend_select_separation:nn \cs_new_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { @@ -261,24 +285,65 @@ { \__color_backend_devicen_init:w #2 \s__color_stop } } \cs_new_eq:NN \__color_backend_devicen_init:n \__color_backend_separation_init:n +\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } + { + \cs_gset_protected:Npn \__color_backend_select_separation:nn #1#2 { } + \cs_gset_eq:NN \__color_backend_select_devicen:nn + \__color_backend_select_separation:nn + } \cs_new_protected:Npn \__color_backend_fill_cmyk:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ k } } + { \__color_backend_fill:n { #1 ~ k } } \cs_new_protected:Npn \__color_backend_fill_gray:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ g } } + { \__color_backend_fill:n { #1 ~ g } } \cs_new_protected:Npn \__color_backend_fill_rgb:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ rg } } - \cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ K } } + { \__color_backend_fill:n { #1 ~ rg } } +\cs_new_protected:Npn \__color_backend_fill:n #1 + { + \tl_set:Nn \l__color_backend_fill_tl {#1} + \__color_backend_stack_push:nn \l__color_backend_stack_int + { #1 ~ \l__color_backend_stroke_tl } + \group_insert_after:N \__color_backend_reset: + } +\cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1 + { \__color_backend_stroke:n { #1 ~ K } } \cs_new_protected:Npn \__color_backend_stroke_gray:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ G } } + { \__color_backend_stroke:n { #1 ~ G } } \cs_new_protected:Npn \__color_backend_stroke_rgb:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ RG } } + { \__color_backend_stroke:n { #1 ~ RG } } +\cs_new_protected:Npn \__color_backend_stroke:n #1 + { + \tl_set:Nn \l__color_backend_stroke_tl {#1} + \__color_backend_stack_push:nn \l__color_backend_stack_int + { \l__color_backend_fill_tl \c_space_tl #1 } + \group_insert_after:N \__color_backend_reset: + } \cs_new_protected:Npn \__color_backend_fill_separation:nn #1#2 - { \__kernel_backend_literal_pdf:n { /#1 ~ cs ~ #2 ~ scn } } + { \__color_backend_fill:n { /#1 ~ cs ~ #2 ~ scn } } \cs_new_protected:Npn \__color_backend_stroke_separation:nn #1#2 - { \__kernel_backend_literal_pdf:n { /#1 ~ CS ~ #2 ~ SCN } } + { \__color_backend_stroke:n { /#1 ~ CS ~ #2 ~ SCN } } \cs_new_eq:NN \__color_backend_fill_devicen:nn \__color_backend_fill_separation:nn \cs_new_eq:NN \__color_backend_stroke_devicen:nn \__color_backend_stroke_separation:nn +\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } + { + \cs_gset_protected:Npn \__color_backend_fill_cmyk:n #1 + { + \__kernel_backend_literal:n { pdf: bc ~ [#1] } + \group_insert_after:N \__color_backend_reset: + } + \cs_gset_eq:NN \__color_backend_fill_gray:n \__color_backend_fill_cmyk:n + \cs_gset_eq:NN \__color_backend_fill_rgb:n \__color_backend_fill_cmyk:n + \cs_gset_protected:Npn \__color_backend_reset: + { \__kernel_backend_literal:n { pdf: ec } } + \cs_gset_protected:Npn \__color_backend_stroke:n #1 + { \__kernel_backend_literal:n {#1} } + \cs_gset_protected:Npn \__color_backend_fill_separation:nn #1#2 { } + \cs_gset_eq:NN \__color_backend_fill_devicen:nn + \__color_backend_fill_separation:nn + \cs_gset_eq:NN \__color_backend_stroke_separation:nn + \__color_backend_fill_separation:nn + \cs_gset_eq:NN \__color_backend_stroke_devicen:nn + \__color_backend_stroke_separation:nn + } %% File: l3backend-box.dtx \cs_new_protected:Npn \__box_backend_clip:N #1 { @@ -754,36 +819,43 @@ ] } } -\cs_new_protected:Npn \__pdf_backend_destination_box:nn #1#2 +\cs_new_protected:Npn \__pdf_backend_destination:nnnn #1#2#3#4 { - \group_begin: - \hbox_set:Nn \l__pdf_internal_box {#2} - \box_move_down:nn { \box_dp:N \l__pdf_internal_box } - { - \hbox:n - { - \__pdf_backend:n { obj ~ @pdf_ #1 _llx ~ @xpos } - \__pdf_backend:n { obj ~ @pdf_ #1 _lly ~ @ypos } - } - } - \box_use:N \l__pdf_internal_box - \box_move_up:nn { \box_ht:N \l__pdf_internal_box } - { - \hbox:n - { - \__pdf_backend:n - { - dest ~ (#1) - [ - @thispage - /FitR ~ - @pdf_ #1 _llx ~ @pdf_ #1 _lly ~ - @xpos ~ @ypos - ] - } - } - } - \group_end: + \exp_args:Ne \__pdf_backend_destination_aux:nnnn + { \dim_eval:n {#2} } {#1} {#3} {#4} + } +\cs_new_protected:Npn \__pdf_backend_destination_aux:nnnn #1#2#3#4 + { + \vbox_to_zero:n + { + \tex_kern:D \dim_eval:n {#4} \scan_stop: + \hbox:n + { + \__pdf_backend:n { obj ~ @pdf_ #2 _llx ~ @xpos } + \__pdf_backend:n { obj ~ @pdf_ #2 _lly ~ @ypos } + } + \tex_vss:D + } + \tex_kern:D #1 \scan_stop: + \vbox_to_zero:n + { + \tex_kern:D \dim_eval:n { -#3 } \scan_stop: + \hbox:n + { + \__pdf_backend:n + { + dest ~ (#2) + [ + @thispage + /FitR ~ + @pdf_ #2 _llx ~ @pdf_ #2 _lly ~ + @xpos ~ @ypos + ] + } + } + \tex_vss:D + } + \tex_kern:D -#1 \scan_stop: } \cs_new_protected:Npn \__pdf_backend_compresslevel:n #1 { \__kernel_backend_literal:x { dvipdfmx:config~z~ \int_eval:n {#1} } } @@ -808,6 +880,98 @@ { \__kernel_backend_literal_page:n { /#1 ~ #2 ~ BDC } } \cs_new_protected:Npn \__pdf_backend_emc: { \__kernel_backend_literal_page:n { EMC } } +%% File: l3backend-opacity.dtx +\cs_if_exist:NT \pdfmanagement_add:nnn + { + \__kernel_color_backend_stack_init:Nnn \c__opacity_backend_stack_int + { page ~ direct } { /opacity 1 ~ gs } + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity 1 } { << /ca ~ 1 /CA ~ 1 >> } + } +\tl_new:N \l__opacity_backend_fill_tl +\tl_new:N \l__opacity_backend_stroke_tl +\cs_new_protected:Npn \__opacity_backend_select:n #1 + { + \exp_args:Nx \__opacity_backend_select_aux:n + { \fp_eval:n { min(max(0,#1),1) } } + } +\cs_new_protected:Npn \__opacity_backend_select_aux:n #1 + { + \tl_set:Nn \l__opacity_backend_fill_tl {#1} + \tl_set:Nn \l__opacity_backend_stroke_tl {#1} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity #1 } + { << /ca ~ #1 /CA ~ #1 >> } + \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + { /opacity #1 ~ gs } + \group_insert_after:N \__opacity_backend_reset: + } +\cs_if_exist:NF \pdfmanagement_add:nnn + { + \cs_gset_protected:Npn \__opacity_backend_select_aux:n #1 { } + } +\cs_new_protected:Npn \__opacity_backend_reset: + { \__opacity_backend_stack_pop:n \c__opacity_backend_stack_int } +\cs_new_protected:Npn \__opacity_backend_fill:n #1 + { + \__opacity_backend_fill_stroke:xx + { \fp_eval:n { min(max(0,#1),1) } } + \l__opacity_backend_stroke_tl + } +\cs_new_protected:Npn \__opacity_backend_stroke:n #1 + { + \__opacity_backend_fill_stroke:xx + \l__opacity_backend_fill_tl + { \fp_eval:n { min(max(0,#1),1) } } + } +\cs_new_protected:Npn \__opacity_backend_fill_stroke:nn #1#2 + { + \str_if_eq:nnTF {#1} {#2} + { \__opacity_backend_select_aux:n {#1} } + { + \tl_set:Nn \l__opacity_backend_fill_tl {#1} + \tl_set:Nn \l__opacity_backend_stroke_tl {#2} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.fill #1 } + { << /ca ~ #1 >> } + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.stroke #1 } + { << /CA ~ #2 >> } + \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + { /opacity.fill #1 ~ gs /opacity.stroke #2 ~ gs } + \group_insert_after:N \__opacity_backend_reset: + } + } +\cs_generate_variant:Nn \__opacity_backend_fill_stroke:nn { xx } +\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } + { + \cs_gset_protected:Npn \__opacity_backend_select_aux:n #1 + { + \tl_set:Nn \l__opacity_backend_fill_tl {#1} + \tl_set:Nn \l__opacity_backend_stroke_tl {#1} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity #1 } + { << /ca ~ #1 /CA ~ #1 >> } + \__kernel_backend_literal_pdf:n { /opacity #1 ~ gs } + } + \cs_gset_protected:Npn \__opacity_backend_fill_stroke:nn #1#2 + { + \str_if_eq:nnTF {#1} {#2} + { \__opacity_backend_select_aux:n {#1} } + { + \tl_set:Nn \l__opacity_backend_fill_tl {#1} + \tl_set:Nn \l__opacity_backend_stroke_tl {#2} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.fill #1 } + { << /ca ~ #1 >> } + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.stroke #1 } + { << /CA ~ #2 >> } + \__kernel_backend_literal_pdf:n + { /opacity.fill #1 ~ gs /opacity.stroke #2 ~ gs } + } + } + } %% %% %% End of file `l3backend-dvipdfmx.def'. diff --git a/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def b/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def index 61f8f584ea8..ff4307c4acf 100644 --- a/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def +++ b/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def @@ -10,8 +10,9 @@ %% l3backend-draw.dtx (with options: `package,dvips') %% l3backend-graphics.dtx (with options: `package,dvips') %% l3backend-pdf.dtx (with options: `package,dvips') +%% l3backend-opacity.dtx (with options: `package,dvips') %% -%% Copyright (C) 1990-2021 The LaTeX3 Project +%% Copyright (C) 1990-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -25,7 +26,7 @@ %% %% File: l3backend-basics.dtx \ProvidesExplFile - {l3backend-dvips.def}{2021-01-09}{} + {l3backend-dvips.def}{2020-01-29}{} {L3 backend support: dvips} \cs_if_exist:NTF \__kernel_dependency_version_check:nn { @@ -104,8 +105,7 @@ \cs_new_protected:Npn \__color_backend_select:n #1 { \__kernel_backend_literal:n { color~push~ #1 } - \__kernel_backend_postscript:n { /color.sc~ { ~ } ~def } - \__kernel_backend_postscript:n { /color.fc~ { ~ } ~def } + \__kernel_backend_postscript:n { /color.sc ~ { } ~ def } \group_insert_after:N \__color_backend_reset: } \cs_new_protected:Npn \__color_backend_reset: @@ -282,21 +282,26 @@ } } \cs_new_protected:Npn \__color_backend_fill_cmyk:n #1 - { \__kernel_backend_postscript:n { /color.fc { #1 ~ setcmykcolor } def } } + { \__color_backend_fill:n { cmyk ~ #1 } } \cs_new_protected:Npn \__color_backend_fill_gray:n #1 - { \__kernel_backend_postscript:n { /color.fc { #1 ~ setgray } def } } + { \__color_backend_fill:n { gray ~ #1 } } \cs_new_protected:Npn \__color_backend_fill_rgb:n #1 - { \__kernel_backend_postscript:n { /color.fc { #1 ~ setrgbcolor } def } } - \cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1 + { \__color_backend_fill:n { rgb ~ #1 } } +\cs_new_protected:Npn \__color_backend_fill:n #1 + { + \__kernel_backend_literal:n { color~push~ #1 } + \group_insert_after:N \__color_backend_reset: + } +\cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1 { \__kernel_backend_postscript:n { /color.sc { #1 ~ setcmykcolor } def } } \cs_new_protected:Npn \__color_backend_stroke_gray:n #1 { \__kernel_backend_postscript:n { /color.sc { #1 ~ setgray } def } } \cs_new_protected:Npn \__color_backend_stroke_rgb:n #1 { \__kernel_backend_postscript:n { /color.sc { #1 ~ setrgbcolor } def } } \cs_new_protected:Npn \__color_backend_fill_separation:nn #1#2 - { \__kernel_backend_postscript:n { /color.fc { #1 } def } } + { \__color_backend_fill:n { separation ~ #1 ~ #2 } } \cs_new_protected:Npn \__color_backend_stroke_separation:nn #1#2 - { \__kernel_backend_postscript:n { /color.sc { #1 } def } } + { \__kernel_backend_postscript:n { /color.sc { separation ~ #1 ~ #2 } def } } \cs_new_eq:NN \__color_backend_fill_devicen:nn \__color_backend_fill_separation:nn \cs_new_eq:NN \__color_backend_stroke_devicen:nn \__color_backend_stroke_separation:nn %% File: l3backend-box.dtx @@ -436,14 +441,11 @@ } \cs_new_protected:Npn \__draw_backend_fill: { - \__draw_backend_literal:n { gsave } - \__draw_backend_literal:n { color.fc } \__draw_backend_literal:x { \bool_if:NT \g__draw_draw_eor_bool { eo } fill } - \__draw_backend_literal:n { grestore } \bool_if:NT \g__draw_draw_clip_bool { \__draw_backend_literal:x @@ -457,16 +459,15 @@ } \cs_new_protected:Npn \__draw_backend_fillstroke: { - \__draw_backend_literal:n { gsave } - \__draw_backend_literal:n { color.sc } - \__draw_backend_literal:n { color.fc } \__draw_backend_literal:x { \bool_if:NT \g__draw_draw_eor_bool { eo } fill } - \__draw_backend_literal:n { grestore } + \__draw_backend_literal:n { gsave } + \__draw_backend_literal:n { color.sc } \__draw_backend_literal:n { stroke } + \__draw_backend_literal:n { grestore } \bool_if:NT \g__draw_draw_clip_bool { \__draw_backend_literal:x @@ -904,29 +905,38 @@ /DEST } } -\cs_new_protected:Npn \__pdf_backend_destination_box:nn #1#2 - { - \group_begin: - \hbox_set:Nn \l__pdf_internal_box {#2} - \box_move_down:nn - { \box_dp:N \l__pdf_internal_box } - { \hbox:n { \__kernel_backend_postscript:n { pdf.save.ll } } } - \box_use:N \l__pdf_internal_box - \box_move_up:nn - { \box_ht:N \l__pdf_internal_box } - { \hbox:n { \__kernel_backend_postscript:n { pdf.save.ur } } } - \__pdf_backend_pdfmark:n - { - /View - [ - /FitR ~ - pdf.llx ~ pdf.lly ~ pdf.dest2device ~ - pdf.urx ~ pdf.ury ~ pdf.dest2device - ] - /Dest ( #1 ) cvn - /DEST - } - \group_end: +\cs_new_protected:Npn \__pdf_backend_destination:nnnn #1#2#3#4 + { + \exp_args:Ne \__pdf_backend_destination_aux:nnnn + { \dim_eval:n {#2} } {#1} {#3} {#4} + } +\cs_new_protected:Npn \__pdf_backend_destination_aux:nnnn #1#2#3#4 + { + \vbox_to_zero:n + { + \tex_kern:D \dim_eval:n {#4} \scan_stop: + \hbox:n { \__kernel_backend_postscript:n { pdf.save.ll } } + \tex_vss:D + } + \tex_kern:D #1 \scan_stop: + \vbox_to_zero:n + { + \tex_kern:D \dim_eval:n { -#3 } \scan_stop: + \hbox:n { \__kernel_backend_postscript:n { pdf.save.ur } } + \tex_vss:D + } + \tex_kern:D -#1 \scan_stop: + \__pdf_backend_pdfmark:n + { + /View + [ + /FitR ~ + pdf.llx ~ pdf.lly ~ pdf.dest2device ~ + pdf.urx ~ pdf.ury ~ pdf.dest2device + ] + /Dest ( #2 ) cvn + /DEST + } } \cs_new_protected:Npn \__pdf_backend_compresslevel:n #1 { @@ -960,6 +970,26 @@ { \__pdf_backend_pdfmark:n { /#1 ~ #2 /BDC } } \cs_new_protected:Npn \__pdf_backend_emc: { \__pdf_backend_pdfmark:n { /EMC } } +%% File: l3backend-opacity.dtx +\cs_new_protected:Npn \__opacity_backend_select:n #1 + { + \exp_args:Nx \__opacity_backend_select_aux:n + { \fp_eval:n { min(max(0,#1),1) } } + } +\cs_new_protected:Npn \__opacity_backend_select_aux:n #1 + { + \__kernel_backend_postscript:n + { #1 ~ .setfillconstantalpha ~ #1 ~ .setstrokeconstantalpha } + } +\cs_new_protected:Npn \__opacity_backend_fill:n #1 + { \__opacity_backend:xn { \fp_eval:n { min(max(0,#1),1) } } { fill } } +\cs_new_protected:Npn \__opacity_backend_stroke:n #1 + { \__opacity_backend:xn { \fp_eval:n { min(max(0,#1),1) } } { stroke } } +\cs_new_protected:Npn \__opacity_backend:nn #1#2 + { + \__kernel_backend_postscript:n { #1 ~ .set #2 constantalpha } + } +\cs_generate_variant:Nn \__opacity_backend:nn { x } %% %% %% End of file `l3backend-dvips.def'. diff --git a/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def b/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def index 28a6be023e0..1f8ebeb0408 100644 --- a/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def +++ b/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def @@ -10,8 +10,9 @@ %% l3backend-draw.dtx (with options: `package,dvisvgm') %% l3backend-graphics.dtx (with options: `package,dvisvgm') %% l3backend-pdf.dtx (with options: `package,dvisvgm') +%% l3backend-opacity.dtx (with options: `package,dvisvgm') %% -%% Copyright (C) 1990-2021 The LaTeX3 Project +%% Copyright (C) 1990-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -25,7 +26,7 @@ %% %% File: l3backend-basics.dtx \ProvidesExplFile - {l3backend-dvisvgm.def}{2021-01-09}{} + {l3backend-dvisvgm.def}{2020-01-29}{} {L3 backend support: dvisvgm} \cs_if_exist:NTF \__kernel_dependency_version_check:nn { @@ -125,63 +126,63 @@ \cs_new_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { } \cs_new_protected:Npn \__color_backend_separation_init_CIELAB:nnnnnn #1#2#3 { } \cs_new_protected:Npn \__color_backend_fill_cmyk:n #1 - { \__color_backend_cmyk:nw { fill } #1 \s__color_stop } + { \__color_backend_fill:n { cmyk ~ #1 } } +\cs_new_protected:Npn \__color_backend_fill_gray:n #1 + { \__color_backend_fill:n { gray ~ #1 } } +\cs_new_protected:Npn \__color_backend_fill_rgb:n #1 + { \__color_backend_fill:n { rgb ~ #1 } } +\cs_new_protected:Npn \__color_backend_fill:n #1 + { + \__kernel_backend_literal:n { color~push~ #1 } + \group_insert_after:N \__color_backend_reset: + } \cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1 - { \__color_backend_cmyk:nw { stroke } #1 \s__color_stop } -\cs_new_protected:Npn \__color_backend_cmyk:nw - #1#2 ~ #3 ~ #4 ~ #5 \s__color_stop + { \__color_backend_cmyk:w #1 \s__color_stop } +\cs_new_protected:Npn \__color_backend_stroke_cmyk:w + #1 ~ #2 ~ #3 ~ #4 \s__color_stop { \use:x { - \__color_backend:nnnn - {#1} - { \fp_eval:n { -100 * ( 1 - min ( 1 , #2 + #5 ) ) } } - { \fp_eval:n { -100 * ( 1 - min ( 1 , #3 + #5 ) ) } } - { \fp_eval:n { -100 * ( 1 - min ( 1 , #4 + #5 ) ) } } + \__color_backend:nnn + { \fp_eval:n { -100 * ( 1 - min ( 1 , #1 + #4 ) ) } } + { \fp_eval:n { -100 * ( 1 - min ( 1 , #2 + #4 ) ) } } + { \fp_eval:n { -100 * ( 1 - min ( 1 , #3 + #4 ) ) } } } } -\cs_new_protected:Npn \__color_backend_fill_gray:n #1 - { \__color_backend_grab:nn { fill } {#1} } \cs_new_protected:Npn \__color_backend_stroke_gray:n #1 - { \__color_backend_grab:nn { stroke } {#1} } -\cs_new_protected:Npn \__color_backend_gray:nn #1#2 { \use:x { - \__color_backend_gray_aux:nn - {#1} - { \fp_eval:n { 100 * (#2) } } + \__color_backend_stroke_gray_aux:n + { \fp_eval:n { 100 * (#1) } } } } -\cs_new_protected:Npn \__color_backend_gray_aux:nn #1#2 - { \__color_backend:nnn {#1} {#2} {#2} {#2} } -\cs_new_protected:Npn \__color_backend_fill_rgb:n #1 - { \__color_backend_rgb:nw { fill } #1 \s__color_stop } +\cs_new_protected:Npn \__color_backend_stroke_gray_aux:n #1 + { \__color_backend:nnn {#1} {#1} {#1} } \cs_new_protected:Npn \__color_backend_stroke_rgb:n #1 - { \__color_backend_rgb:nw { stroke } #1 \s__color_stop } -\cs_new_protected:Npn \__color_backend_rgb:nw - #1#2 ~ #3 ~ #4\s__color_stop + { \__color_backend_rgb:w #1 \s__color_stop } +\cs_new_protected:Npn \__color_backend_stroke_rgb:w + #1 ~ #2 ~ #3 \s__color_stop { \use:x { - \__color_backend:nnnn - { fill } + \__color_backend:nnn + { \fp_eval:n { 100 * (#1) } } { \fp_eval:n { 100 * (#2) } } { \fp_eval:n { 100 * (#3) } } - { \fp_eval:n { 100 * (#4) } } } } -\cs_new_protected:Npx \__color_backend:nnnn #1#2#3#4 +\cs_new_protected:Npx \__color_backend:nnn #1#2#3 { \__kernel_backend_scope:n { - #1 = + stroke = " rgb ( + #1 \c_percent_str , #2 \c_percent_str , - #3 \c_percent_str , - #4 \c_percent_str + #3 \c_percent_str ) " } @@ -524,6 +525,15 @@ \cs_new:Npn \__pdf_backend_version_minor: { -1 } \cs_new_protected:Npn \__pdf_backend_bdc:nn #1#2 { } \cs_new_protected:Npn \__pdf_backend_emc: { } +%% File: l3backend-opacity.dtx +\cs_new_protected:Npn \__opacity_backend_select:n #1 + { \__opacity_backend:nn {#1} { } } +\cs_new_protected:Npn \__opacity_backend_fill:n #1 + { \__opacity_backend:nn {#1} { fill- } } +\cs_new_protected:Npn \__opacity_backend_stroke:n #1 + { \__opacity_backend:nn { {#1} } { stroke- } } +\cs_new_protected:Npn \__opacity_backend:nn #1#2 + { \__kernel_backend_scope:x { #2 opacity = " \fp_eval:n { min(max(0,#1),1) } " } } %% %% %% End of file `l3backend-dvisvgm.def'. diff --git a/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def b/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def index 69caa65acef..1a5b246fa6b 100644 --- a/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def +++ b/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def @@ -10,8 +10,9 @@ %% l3backend-draw.dtx (with options: `package,luatex') %% l3backend-graphics.dtx (with options: `package,luatex') %% l3backend-pdf.dtx (with options: `package,luatex') +%% l3backend-opacity.dtx (with options: `package,luatex') %% -%% Copyright (C) 1990-2021 The LaTeX3 Project +%% Copyright (C) 1990-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -25,7 +26,7 @@ %% %% File: l3backend-basics.dtx \ProvidesExplFile - {l3backend-luatex.def}{2021-01-09}{} + {l3backend-luatex.def}{2020-01-29}{} {L3 backend support: PDF output (LuaTeX)} \cs_if_exist:NTF \__kernel_dependency_version_check:nn { @@ -103,7 +104,8 @@ } } } -\cs_new_protected:Npn \__kernel_color_stack_init:Nnn #1#2#3 +\int_new:N \l__color_backend_stack_int +\cs_new_protected:Npn \__kernel_color_backend_stack_init:Nnn #1#2#3 { \int_const:Nn #1 { @@ -112,32 +114,36 @@ {#3} } } -\cs_new_protected:Npn \__kernel_color_stack_push:nn #1#2 +\cs_new_protected:Npn \__color_backend_stack_push:nn #1#2 { \tex_pdfextension:D colorstack ~ \int_eval:n {#1} ~ push ~ {#2} } -\cs_new_protected:Npn \__kernel_color_stack_pop:n #1 +\cs_generate_variant:Nn \__color_backend_stack_push:nn { nx } +\cs_new_protected:Npn \__color_backend_stack_pop:n #1 { \tex_pdfextension:D colorstack ~ \int_eval:n {#1} ~ pop \scan_stop: } -\int_new:N \l__kernel_color_stack_int +\tl_new:N \l__color_backend_fill_tl +\tl_new:N \l__color_backend_stroke_tl \cs_new_protected:Npn \__color_backend_select_cmyk:n #1 - { \__color_backend_select:n { #1 ~ k ~ #1 ~ K } } + { \__color_backend_select:nn { #1 ~ k } { #1 ~ K } } \cs_new_protected:Npn \__color_backend_select_gray:n #1 - { \__color_backend_select:n { #1 ~ g ~ #1 ~ G } } + { \__color_backend_select:nn { #1 ~ g } { #1 ~ G } } \cs_new_protected:Npn \__color_backend_select_rgb:n #1 - { \__color_backend_select:n { #1 ~ rg ~ #1 ~ RG } } -\cs_new_protected:Npn \__color_backend_select:n #1 + { \__color_backend_select:nn { #1 ~ rg } { #1 ~ RG } } +\cs_new_protected:Npn \__color_backend_select:nn #1#2 { - \__kernel_color_stack_push:nn \l__kernel_color_stack_int {#1} + \tl_set:Nn \l__color_backend_fill_tl {#1} + \tl_set:Nn \l__color_backend_stroke_tl {#2} + \__color_backend_stack_push:nn \l__color_backend_stack_int { #1 ~ #2 } \group_insert_after:N \__color_backend_reset: } \cs_new_protected:Npn \__color_backend_reset: - { \__kernel_color_stack_pop:n \l__kernel_color_stack_int } + { \__color_backend_stack_pop:n \l__color_backend_stack_int } \cs_new_protected:Npn \__color_backend_select_separation:nn #1#2 - { \__color_backend_select:n { /#1 ~ cs ~ /#1 ~ CS ~ #2 ~ scn ~ #2 ~ SCN } } + { \__color_backend_select:nn { /#1 ~ cs ~ #2 ~ scn } { /#1 ~ CS ~ #2 ~ SCN } } \cs_new_eq:NN \__color_backend_select_devicen:nn \__color_backend_select_separation:nn \cs_new_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { @@ -245,21 +251,35 @@ } \cs_new_eq:NN \__color_backend_devicen_init:n \__color_backend_separation_init:n \cs_new_protected:Npn \__color_backend_fill_cmyk:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ k } } + { \__color_backend_fill:n { #1 ~ k } } \cs_new_protected:Npn \__color_backend_fill_gray:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ g } } + { \__color_backend_fill:n { #1 ~ g } } \cs_new_protected:Npn \__color_backend_fill_rgb:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ rg } } - \cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ K } } + { \__color_backend_fill:n { #1 ~ rg } } +\cs_new_protected:Npn \__color_backend_fill:n #1 + { + \tl_set:Nn \l__color_backend_fill_tl {#1} + \__color_backend_stack_push:nn \l__color_backend_stack_int + { #1 ~ \l__color_backend_stroke_tl } + \group_insert_after:N \__color_backend_reset: + } +\cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1 + { \__color_backend_stroke:n { #1 ~ K } } \cs_new_protected:Npn \__color_backend_stroke_gray:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ G } } + { \__color_backend_stroke:n { #1 ~ G } } \cs_new_protected:Npn \__color_backend_stroke_rgb:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ RG } } + { \__color_backend_stroke:n { #1 ~ RG } } +\cs_new_protected:Npn \__color_backend_stroke:n #1 + { + \tl_set:Nn \l__color_backend_stroke_tl {#1} + \__color_backend_stack_push:nn \l__color_backend_stack_int + { \l__color_backend_fill_tl \c_space_tl #1 } + \group_insert_after:N \__color_backend_reset: + } \cs_new_protected:Npn \__color_backend_fill_separation:nn #1#2 - { \__kernel_backend_literal_pdf:n { /#1 ~ cs ~ #2 ~ scn } } + { \__color_backend_fill:n { /#1 ~ cs ~ #2 ~ scn } } \cs_new_protected:Npn \__color_backend_stroke_separation:nn #1#2 - { \__kernel_backend_literal_pdf:n { /#1 ~ CS ~ #2 ~ SCN } } + { \__color_backend_stroke:n { /#1 ~ CS ~ #2 ~ SCN } } \cs_new_eq:NN \__color_backend_fill_devicen:nn \__color_backend_fill_separation:nn \cs_new_eq:NN \__color_backend_stroke_devicen:nn \__color_backend_stroke_separation:nn %% File: l3backend-box.dtx @@ -594,18 +614,14 @@ { xyz ~ zoom \fp_eval:n { #2 * 10 } } \scan_stop: } -\cs_new_protected:Npn \__pdf_backend_destination_box:nn #1#2 +\cs_new_protected:Npn \__pdf_backend_destination:nnnn #1#2#3#4 { - \group_begin: - \hbox_set:Nn \l__pdf_internal_box {#2} - \tex_pdfextension:D dest ~ - name {#1} - fitr ~ - width \box_wd:N \l__pdf_internal_box - height \box_ht:N \l__pdf_internal_box - depth \box_dp:N \l__pdf_internal_box - \box_use:N \l__pdf_internal_box - \group_end: + \tex_pdfextension:D dest ~ + name {#1} + fitr ~ + width \dim_eval:n {#2} ~ + height \dim_eval:n {#3} ~ + depth \dim_eval:n {#4} \scan_stop: } \cs_new_protected:Npn \__pdf_backend_catalog_gput:nn #1#2 { @@ -735,6 +751,69 @@ { \__kernel_backend_literal_page:n { /#1 ~ #2 ~ BDC } } \cs_new_protected:Npn \__pdf_backend_emc: { \__kernel_backend_literal_page:n { EMC } } +%% File: l3backend-opacity.dtx +\cs_if_exist:NT \pdfmanagement_add:nnn + { + \__kernel_color_backend_stack_init:Nnn \c__opacity_backend_stack_int + { page ~ direct } { /opacity 1 ~ gs } + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity 1 } { << /ca ~ 1 /CA ~ 1 >> } + } +\tl_new:N \l__opacity_backend_fill_tl +\tl_new:N \l__opacity_backend_stroke_tl +\cs_new_protected:Npn \__opacity_backend_select:n #1 + { + \exp_args:Nx \__opacity_backend_select_aux:n + { \fp_eval:n { min(max(0,#1),1) } } + } +\cs_new_protected:Npn \__opacity_backend_select_aux:n #1 + { + \tl_set:Nn \l__opacity_backend_fill_tl {#1} + \tl_set:Nn \l__opacity_backend_stroke_tl {#1} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity #1 } + { << /ca ~ #1 /CA ~ #1 >> } + \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + { /opacity #1 ~ gs } + \group_insert_after:N \__opacity_backend_reset: + } +\cs_if_exist:NF \pdfmanagement_add:nnn + { + \cs_gset_protected:Npn \__opacity_backend_select_aux:n #1 { } + } +\cs_new_protected:Npn \__opacity_backend_reset: + { \__opacity_backend_stack_pop:n \c__opacity_backend_stack_int } +\cs_new_protected:Npn \__opacity_backend_fill:n #1 + { + \__opacity_backend_fill_stroke:xx + { \fp_eval:n { min(max(0,#1),1) } } + \l__opacity_backend_stroke_tl + } +\cs_new_protected:Npn \__opacity_backend_stroke:n #1 + { + \__opacity_backend_fill_stroke:xx + \l__opacity_backend_fill_tl + { \fp_eval:n { min(max(0,#1),1) } } + } +\cs_new_protected:Npn \__opacity_backend_fill_stroke:nn #1#2 + { + \str_if_eq:nnTF {#1} {#2} + { \__opacity_backend_select_aux:n {#1} } + { + \tl_set:Nn \l__opacity_backend_fill_tl {#1} + \tl_set:Nn \l__opacity_backend_stroke_tl {#2} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.fill #1 } + { << /ca ~ #1 >> } + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.stroke #1 } + { << /CA ~ #2 >> } + \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + { /opacity.fill #1 ~ gs /opacity.stroke #2 ~ gs } + \group_insert_after:N \__opacity_backend_reset: + } + } +\cs_generate_variant:Nn \__opacity_backend_fill_stroke:nn { xx } %% %% %% End of file `l3backend-luatex.def'. diff --git a/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def b/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def index ec7b463b0a5..1c1e221a1f0 100644 --- a/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +++ b/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def @@ -10,8 +10,9 @@ %% l3backend-draw.dtx (with options: `package,pdftex') %% l3backend-graphics.dtx (with options: `package,pdftex') %% l3backend-pdf.dtx (with options: `package,pdftex') +%% l3backend-opacity.dtx (with options: `package,pdftex') %% -%% Copyright (C) 1990-2021 The LaTeX3 Project +%% Copyright (C) 1990-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -25,7 +26,7 @@ %% %% File: l3backend-basics.dtx \ProvidesExplFile - {l3backend-pdftex.def}{2021-01-09}{} + {l3backend-pdftex.def}{2020-01-29}{} {L3 backend support: PDF output (pdfTeX)} \cs_if_exist:NTF \__kernel_dependency_version_check:nn { @@ -103,7 +104,8 @@ } } } -\cs_new_protected:Npn \__kernel_color_stack_init:Nnn #1#2#3 +\int_new:N \l__color_backend_stack_int +\cs_new_protected:Npn \__kernel_color_backend_stack_init:Nnn #1#2#3 { \int_const:Nn #1 { @@ -112,32 +114,36 @@ {#3} } } -\cs_new_protected:Npn \__kernel_color_stack_push:nn #1#2 +\cs_new_protected:Npn \__color_backend_stack_push:nn #1#2 { \tex_pdfcolorstack:D \int_eval:n {#1} ~ push ~ {#2} } -\cs_new_protected:Npn \__kernel_color_stack_pop:n #1 +\cs_generate_variant:Nn \__color_backend_stack_push:nn { nx } +\cs_new_protected:Npn \__color_backend_stack_pop:n #1 { \tex_pdfcolorstack:D \int_eval:n {#1} ~ pop \scan_stop: } -\int_new:N \l__kernel_color_stack_int +\tl_new:N \l__color_backend_fill_tl +\tl_new:N \l__color_backend_stroke_tl \cs_new_protected:Npn \__color_backend_select_cmyk:n #1 - { \__color_backend_select:n { #1 ~ k ~ #1 ~ K } } + { \__color_backend_select:nn { #1 ~ k } { #1 ~ K } } \cs_new_protected:Npn \__color_backend_select_gray:n #1 - { \__color_backend_select:n { #1 ~ g ~ #1 ~ G } } + { \__color_backend_select:nn { #1 ~ g } { #1 ~ G } } \cs_new_protected:Npn \__color_backend_select_rgb:n #1 - { \__color_backend_select:n { #1 ~ rg ~ #1 ~ RG } } -\cs_new_protected:Npn \__color_backend_select:n #1 + { \__color_backend_select:nn { #1 ~ rg } { #1 ~ RG } } +\cs_new_protected:Npn \__color_backend_select:nn #1#2 { - \__kernel_color_stack_push:nn \l__kernel_color_stack_int {#1} + \tl_set:Nn \l__color_backend_fill_tl {#1} + \tl_set:Nn \l__color_backend_stroke_tl {#2} + \__color_backend_stack_push:nn \l__color_backend_stack_int { #1 ~ #2 } \group_insert_after:N \__color_backend_reset: } \cs_new_protected:Npn \__color_backend_reset: - { \__kernel_color_stack_pop:n \l__kernel_color_stack_int } + { \__color_backend_stack_pop:n \l__color_backend_stack_int } \cs_new_protected:Npn \__color_backend_select_separation:nn #1#2 - { \__color_backend_select:n { /#1 ~ cs ~ /#1 ~ CS ~ #2 ~ scn ~ #2 ~ SCN } } + { \__color_backend_select:nn { /#1 ~ cs ~ #2 ~ scn } { /#1 ~ CS ~ #2 ~ SCN } } \cs_new_eq:NN \__color_backend_select_devicen:nn \__color_backend_select_separation:nn \cs_new_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { @@ -245,21 +251,35 @@ } \cs_new_eq:NN \__color_backend_devicen_init:n \__color_backend_separation_init:n \cs_new_protected:Npn \__color_backend_fill_cmyk:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ k } } + { \__color_backend_fill:n { #1 ~ k } } \cs_new_protected:Npn \__color_backend_fill_gray:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ g } } + { \__color_backend_fill:n { #1 ~ g } } \cs_new_protected:Npn \__color_backend_fill_rgb:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ rg } } - \cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ K } } + { \__color_backend_fill:n { #1 ~ rg } } +\cs_new_protected:Npn \__color_backend_fill:n #1 + { + \tl_set:Nn \l__color_backend_fill_tl {#1} + \__color_backend_stack_push:nn \l__color_backend_stack_int + { #1 ~ \l__color_backend_stroke_tl } + \group_insert_after:N \__color_backend_reset: + } +\cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1 + { \__color_backend_stroke:n { #1 ~ K } } \cs_new_protected:Npn \__color_backend_stroke_gray:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ G } } + { \__color_backend_stroke:n { #1 ~ G } } \cs_new_protected:Npn \__color_backend_stroke_rgb:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ RG } } + { \__color_backend_stroke:n { #1 ~ RG } } +\cs_new_protected:Npn \__color_backend_stroke:n #1 + { + \tl_set:Nn \l__color_backend_stroke_tl {#1} + \__color_backend_stack_push:nn \l__color_backend_stack_int + { \l__color_backend_fill_tl \c_space_tl #1 } + \group_insert_after:N \__color_backend_reset: + } \cs_new_protected:Npn \__color_backend_fill_separation:nn #1#2 - { \__kernel_backend_literal_pdf:n { /#1 ~ cs ~ #2 ~ scn } } + { \__color_backend_fill:n { /#1 ~ cs ~ #2 ~ scn } } \cs_new_protected:Npn \__color_backend_stroke_separation:nn #1#2 - { \__kernel_backend_literal_pdf:n { /#1 ~ CS ~ #2 ~ SCN } } + { \__color_backend_stroke:n { /#1 ~ CS ~ #2 ~ SCN } } \cs_new_eq:NN \__color_backend_fill_devicen:nn \__color_backend_fill_separation:nn \cs_new_eq:NN \__color_backend_stroke_devicen:nn \__color_backend_stroke_separation:nn %% File: l3backend-box.dtx @@ -594,18 +614,14 @@ { xyz ~ zoom \fp_eval:n { #2 * 10 } } \scan_stop: } -\cs_new_protected:Npn \__pdf_backend_destination_box:nn #1#2 +\cs_new_protected:Npn \__pdf_backend_destination:nnnn #1#2#3#4 { - \group_begin: - \hbox_set:Nn \l__pdf_internal_box {#2} - \tex_pdfdest:D - name {#1} - fitr ~ - width \box_wd:N \l__pdf_internal_box - height \box_ht:N \l__pdf_internal_box - depth \box_dp:N \l__pdf_internal_box - \box_use:N \l__pdf_internal_box - \group_end: + \tex_pdfdest:D + name {#1} + fitr ~ + width \dim_eval:n {#2} ~ + height \dim_eval:n {#3} ~ + depth \dim_eval:n {#4} \scan_stop: } \cs_new_protected:Npn \__pdf_backend_catalog_gput:nn #1#2 { @@ -735,6 +751,69 @@ { \__kernel_backend_literal_page:n { /#1 ~ #2 ~ BDC } } \cs_new_protected:Npn \__pdf_backend_emc: { \__kernel_backend_literal_page:n { EMC } } +%% File: l3backend-opacity.dtx +\cs_if_exist:NT \pdfmanagement_add:nnn + { + \__kernel_color_backend_stack_init:Nnn \c__opacity_backend_stack_int + { page ~ direct } { /opacity 1 ~ gs } + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity 1 } { << /ca ~ 1 /CA ~ 1 >> } + } +\tl_new:N \l__opacity_backend_fill_tl +\tl_new:N \l__opacity_backend_stroke_tl +\cs_new_protected:Npn \__opacity_backend_select:n #1 + { + \exp_args:Nx \__opacity_backend_select_aux:n + { \fp_eval:n { min(max(0,#1),1) } } + } +\cs_new_protected:Npn \__opacity_backend_select_aux:n #1 + { + \tl_set:Nn \l__opacity_backend_fill_tl {#1} + \tl_set:Nn \l__opacity_backend_stroke_tl {#1} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity #1 } + { << /ca ~ #1 /CA ~ #1 >> } + \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + { /opacity #1 ~ gs } + \group_insert_after:N \__opacity_backend_reset: + } +\cs_if_exist:NF \pdfmanagement_add:nnn + { + \cs_gset_protected:Npn \__opacity_backend_select_aux:n #1 { } + } +\cs_new_protected:Npn \__opacity_backend_reset: + { \__opacity_backend_stack_pop:n \c__opacity_backend_stack_int } +\cs_new_protected:Npn \__opacity_backend_fill:n #1 + { + \__opacity_backend_fill_stroke:xx + { \fp_eval:n { min(max(0,#1),1) } } + \l__opacity_backend_stroke_tl + } +\cs_new_protected:Npn \__opacity_backend_stroke:n #1 + { + \__opacity_backend_fill_stroke:xx + \l__opacity_backend_fill_tl + { \fp_eval:n { min(max(0,#1),1) } } + } +\cs_new_protected:Npn \__opacity_backend_fill_stroke:nn #1#2 + { + \str_if_eq:nnTF {#1} {#2} + { \__opacity_backend_select_aux:n {#1} } + { + \tl_set:Nn \l__opacity_backend_fill_tl {#1} + \tl_set:Nn \l__opacity_backend_stroke_tl {#2} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.fill #1 } + { << /ca ~ #1 >> } + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.stroke #1 } + { << /CA ~ #2 >> } + \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + { /opacity.fill #1 ~ gs /opacity.stroke #2 ~ gs } + \group_insert_after:N \__opacity_backend_reset: + } + } +\cs_generate_variant:Nn \__opacity_backend_fill_stroke:nn { xx } %% %% %% End of file `l3backend-pdftex.def'. diff --git a/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def b/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def index 9c90ca0c6fc..d9bf8704302 100644 --- a/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def +++ b/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def @@ -10,8 +10,9 @@ %% l3backend-draw.dtx (with options: `package,xetex') %% l3backend-graphics.dtx (with options: `package,xetex') %% l3backend-pdf.dtx (with options: `package,xetex') +%% l3backend-opacity.dtx (with options: `package,xetex') %% -%% Copyright (C) 1990-2021 The LaTeX3 Project +%% Copyright (C) 1990-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -25,7 +26,7 @@ %% %% File: l3backend-basics.dtx \ProvidesExplFile - {l3backend-xetex.def}{2021-01-09}{} + {l3backend-xetex.def}{2020-01-29}{} {L3 backend support: XeTeX} \cs_if_exist:NTF \__kernel_dependency_version_check:nn { @@ -90,25 +91,44 @@ \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \s__color_stop #3 { \tl_set:Nn #3 { {#1} {#2} } } } -\int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 } +\int_new:N \l__color_backend_stack_int +\int_compare:nNnTF \c__kernel_sys_dvipdfmx_version_int < { 20201111 } + { \cs_new_protected:Npn \__kernel_color_backend_stack_init:Nnn #1#2#3 { } } { - \int_new:N \g__color_stack_int - \cs_new_protected:Npn \__kernel_color_stack_init:Nnn #1#2#3 + \int_new:N \g__color_backend_stack_int + \cs_new_protected:Npx \__kernel_color_backend_stack_init:Nnn #1#2#3 { - \int_gincr:N \g__color_stack_int - \int_const:Nn #1 { \g__color_stack_int } - \__kernel_backend_literal:x + \int_gincr:N \exp_not:N \g__color_backend_stack_int + \int_const:Nn #1 { \exp_not:N \g__color_backend_stack_int } + \cs_if_exist:NTF \AtBeginDvi + { \exp_not:N \AtBeginDvi } + { \exp_not:N \use:n } { - pdfcolorstackinit ~ - \int_use:N \g__color_stack_int \c_space_tl - \tl_if_blank:nF {#2} { #2 ~ } - (#3) + \__kernel_backend_literal:x + { + pdfcolorstackinit ~ + \exp_not:N \int_use:N \exp_not:N \g__color_backend_stack_int + \c_space_tl + \exp_not:N \tl_if_blank:nF {#2} { #2 ~ } + (#3) + } } } + \cs_if_exist:cTF { main@pdfcolorstack } + { + \int_set:Nn \l__color_backend_stack_int + { \int_use:c { main@pdfcolorstack } } + } + { + \__kernel_color_backend_stack_init:Nnn \c__color_backend_main_stack_int + { page ~ direct } { 0 ~ g ~ 0 ~ G } + \int_set_eq:NN \l__color_backend_stack_int + \c__color_backend_main_stack_int + } } \int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 } { - \cs_new_protected:Npn \__kernel_color_stack_push:nn #1#2 + \cs_new_protected:Npn \__color_backend_stack_push:nn #1#2 { \__kernel_backend_literal:x { @@ -117,7 +137,8 @@ push ~ (#2) } } - \cs_new_protected:Npn \__kernel_color_stack_pop:n #1 + \cs_generate_variant:Nn \__color_backend_stack_push:nn { nx } + \cs_new_protected:Npn \__color_backend_stack_pop:n #1 { \__kernel_backend_literal:x { @@ -127,20 +148,23 @@ } } } -\int_new:N \l__kernel_color_stack_int +\tl_new:N \l__color_backend_fill_tl +\tl_new:N \l__color_backend_stroke_tl \cs_new_protected:Npn \__color_backend_select_cmyk:n #1 - { \__color_backend_select:n { #1 ~ k ~ #1 ~ K } } + { \__color_backend_select:nn { #1 ~ k } { #1 ~ K } } \cs_new_protected:Npn \__color_backend_select_gray:n #1 - { \__color_backend_select:n { #1 ~ g ~ #1 ~ G } } + { \__color_backend_select:nn { #1 ~ g } { #1 ~ G } } \cs_new_protected:Npn \__color_backend_select_rgb:n #1 - { \__color_backend_select:n { #1 ~ rg ~ #1 ~ RG } } -\cs_new_protected:Npn \__color_backend_select:n #1 + { \__color_backend_select:nn { #1 ~ rg } { #1 ~ RG } } +\cs_new_protected:Npn \__color_backend_select:nn #1#2 { - \__kernel_color_stack_push:nn \l__kernel_color_stack_int {#1} + \tl_set:Nn \l__color_backend_fill_tl {#1} + \tl_set:Nn \l__color_backend_stroke_tl {#2} + \__color_backend_stack_push:nn \l__color_backend_stack_int { #1 ~ #2 } \group_insert_after:N \__color_backend_reset: } \cs_new_protected:Npn \__color_backend_reset: - { \__kernel_color_stack_pop:n \l__kernel_color_stack_int } + { \__color_backend_stack_pop:n \l__color_backend_stack_int } \int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } { \cs_gset_protected:Npn \__color_backend_select_cmyk:n #1 @@ -154,7 +178,7 @@ { \__kernel_backend_literal:n { pdf: ec } } } \cs_new_protected:Npn \__color_backend_select_separation:nn #1#2 - { \__color_backend_select:n { /#1 ~ cs ~ /#1 ~ CS ~ #2 ~ scn ~ #2 ~ SCN } } + { \__color_backend_select:nn { /#1 ~ cs ~ #2 ~ scn } { /#1 ~ CS ~ #2 ~ SCN } } \cs_new_eq:NN \__color_backend_select_devicen:nn \__color_backend_select_separation:nn \cs_new_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { @@ -261,24 +285,65 @@ { \__color_backend_devicen_init:w #2 \s__color_stop } } \cs_new_eq:NN \__color_backend_devicen_init:n \__color_backend_separation_init:n +\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } + { + \cs_gset_protected:Npn \__color_backend_select_separation:nn #1#2 { } + \cs_gset_eq:NN \__color_backend_select_devicen:nn + \__color_backend_select_separation:nn + } \cs_new_protected:Npn \__color_backend_fill_cmyk:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ k } } + { \__color_backend_fill:n { #1 ~ k } } \cs_new_protected:Npn \__color_backend_fill_gray:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ g } } + { \__color_backend_fill:n { #1 ~ g } } \cs_new_protected:Npn \__color_backend_fill_rgb:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ rg } } - \cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ K } } + { \__color_backend_fill:n { #1 ~ rg } } +\cs_new_protected:Npn \__color_backend_fill:n #1 + { + \tl_set:Nn \l__color_backend_fill_tl {#1} + \__color_backend_stack_push:nn \l__color_backend_stack_int + { #1 ~ \l__color_backend_stroke_tl } + \group_insert_after:N \__color_backend_reset: + } +\cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1 + { \__color_backend_stroke:n { #1 ~ K } } \cs_new_protected:Npn \__color_backend_stroke_gray:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ G } } + { \__color_backend_stroke:n { #1 ~ G } } \cs_new_protected:Npn \__color_backend_stroke_rgb:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ RG } } + { \__color_backend_stroke:n { #1 ~ RG } } +\cs_new_protected:Npn \__color_backend_stroke:n #1 + { + \tl_set:Nn \l__color_backend_stroke_tl {#1} + \__color_backend_stack_push:nn \l__color_backend_stack_int + { \l__color_backend_fill_tl \c_space_tl #1 } + \group_insert_after:N \__color_backend_reset: + } \cs_new_protected:Npn \__color_backend_fill_separation:nn #1#2 - { \__kernel_backend_literal_pdf:n { /#1 ~ cs ~ #2 ~ scn } } + { \__color_backend_fill:n { /#1 ~ cs ~ #2 ~ scn } } \cs_new_protected:Npn \__color_backend_stroke_separation:nn #1#2 - { \__kernel_backend_literal_pdf:n { /#1 ~ CS ~ #2 ~ SCN } } + { \__color_backend_stroke:n { /#1 ~ CS ~ #2 ~ SCN } } \cs_new_eq:NN \__color_backend_fill_devicen:nn \__color_backend_fill_separation:nn \cs_new_eq:NN \__color_backend_stroke_devicen:nn \__color_backend_stroke_separation:nn +\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } + { + \cs_gset_protected:Npn \__color_backend_fill_cmyk:n #1 + { + \__kernel_backend_literal:n { pdf: bc ~ [#1] } + \group_insert_after:N \__color_backend_reset: + } + \cs_gset_eq:NN \__color_backend_fill_gray:n \__color_backend_fill_cmyk:n + \cs_gset_eq:NN \__color_backend_fill_rgb:n \__color_backend_fill_cmyk:n + \cs_gset_protected:Npn \__color_backend_reset: + { \__kernel_backend_literal:n { pdf: ec } } + \cs_gset_protected:Npn \__color_backend_stroke:n #1 + { \__kernel_backend_literal:n {#1} } + \cs_gset_protected:Npn \__color_backend_fill_separation:nn #1#2 { } + \cs_gset_eq:NN \__color_backend_fill_devicen:nn + \__color_backend_fill_separation:nn + \cs_gset_eq:NN \__color_backend_stroke_separation:nn + \__color_backend_fill_separation:nn + \cs_gset_eq:NN \__color_backend_stroke_devicen:nn + \__color_backend_stroke_separation:nn + } %% File: l3backend-box.dtx \cs_new_protected:Npn \__box_backend_clip:N #1 { @@ -800,36 +865,43 @@ ] } } -\cs_new_protected:Npn \__pdf_backend_destination_box:nn #1#2 +\cs_new_protected:Npn \__pdf_backend_destination:nnnn #1#2#3#4 { - \group_begin: - \hbox_set:Nn \l__pdf_internal_box {#2} - \box_move_down:nn { \box_dp:N \l__pdf_internal_box } - { - \hbox:n - { - \__pdf_backend:n { obj ~ @pdf_ #1 _llx ~ @xpos } - \__pdf_backend:n { obj ~ @pdf_ #1 _lly ~ @ypos } - } - } - \box_use:N \l__pdf_internal_box - \box_move_up:nn { \box_ht:N \l__pdf_internal_box } - { - \hbox:n - { - \__pdf_backend:n - { - dest ~ (#1) - [ - @thispage - /FitR ~ - @pdf_ #1 _llx ~ @pdf_ #1 _lly ~ - @xpos ~ @ypos - ] - } - } - } - \group_end: + \exp_args:Ne \__pdf_backend_destination_aux:nnnn + { \dim_eval:n {#2} } {#1} {#3} {#4} + } +\cs_new_protected:Npn \__pdf_backend_destination_aux:nnnn #1#2#3#4 + { + \vbox_to_zero:n + { + \tex_kern:D \dim_eval:n {#4} \scan_stop: + \hbox:n + { + \__pdf_backend:n { obj ~ @pdf_ #2 _llx ~ @xpos } + \__pdf_backend:n { obj ~ @pdf_ #2 _lly ~ @ypos } + } + \tex_vss:D + } + \tex_kern:D #1 \scan_stop: + \vbox_to_zero:n + { + \tex_kern:D \dim_eval:n { -#3 } \scan_stop: + \hbox:n + { + \__pdf_backend:n + { + dest ~ (#2) + [ + @thispage + /FitR ~ + @pdf_ #2 _llx ~ @pdf_ #2 _lly ~ + @xpos ~ @ypos + ] + } + } + \tex_vss:D + } + \tex_kern:D -#1 \scan_stop: } \cs_new_protected:Npn \__pdf_backend_compresslevel:n #1 { \__kernel_backend_literal:x { dvipdfmx:config~z~ \int_eval:n {#1} } } @@ -854,6 +926,69 @@ { \__kernel_backend_literal_page:n { /#1 ~ #2 ~ BDC } } \cs_new_protected:Npn \__pdf_backend_emc: { \__kernel_backend_literal_page:n { EMC } } +%% File: l3backend-opacity.dtx +\cs_if_exist:NT \pdfmanagement_add:nnn + { + \__kernel_color_backend_stack_init:Nnn \c__opacity_backend_stack_int + { page ~ direct } { /opacity 1 ~ gs } + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity 1 } { << /ca ~ 1 /CA ~ 1 >> } + } +\tl_new:N \l__opacity_backend_fill_tl +\tl_new:N \l__opacity_backend_stroke_tl +\cs_new_protected:Npn \__opacity_backend_select:n #1 + { + \exp_args:Nx \__opacity_backend_select_aux:n + { \fp_eval:n { min(max(0,#1),1) } } + } +\cs_new_protected:Npn \__opacity_backend_select_aux:n #1 + { + \tl_set:Nn \l__opacity_backend_fill_tl {#1} + \tl_set:Nn \l__opacity_backend_stroke_tl {#1} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity #1 } + { << /ca ~ #1 /CA ~ #1 >> } + \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + { /opacity #1 ~ gs } + \group_insert_after:N \__opacity_backend_reset: + } +\cs_if_exist:NF \pdfmanagement_add:nnn + { + \cs_gset_protected:Npn \__opacity_backend_select_aux:n #1 { } + } +\cs_new_protected:Npn \__opacity_backend_reset: + { \__opacity_backend_stack_pop:n \c__opacity_backend_stack_int } +\cs_new_protected:Npn \__opacity_backend_fill:n #1 + { + \__opacity_backend_fill_stroke:xx + { \fp_eval:n { min(max(0,#1),1) } } + \l__opacity_backend_stroke_tl + } +\cs_new_protected:Npn \__opacity_backend_stroke:n #1 + { + \__opacity_backend_fill_stroke:xx + \l__opacity_backend_fill_tl + { \fp_eval:n { min(max(0,#1),1) } } + } +\cs_new_protected:Npn \__opacity_backend_fill_stroke:nn #1#2 + { + \str_if_eq:nnTF {#1} {#2} + { \__opacity_backend_select_aux:n {#1} } + { + \tl_set:Nn \l__opacity_backend_fill_tl {#1} + \tl_set:Nn \l__opacity_backend_stroke_tl {#2} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.fill #1 } + { << /ca ~ #1 >> } + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.stroke #1 } + { << /CA ~ #2 >> } + \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + { /opacity.fill #1 ~ gs /opacity.stroke #2 ~ gs } + \group_insert_after:N \__opacity_backend_reset: + } + } +\cs_generate_variant:Nn \__opacity_backend_fill_stroke:nn { xx } %% %% %% End of file `l3backend-xetex.def'. diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty b/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty index f25673ab551..85981d16f38 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty @@ -6,7 +6,7 @@ %% %% l3benchmark.dtx (with options: `package') %% -%% Copyright (C) 2018-2020 The LaTeX3 Project +%% Copyright (C) 2018-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -20,7 +20,7 @@ %% %% File: l3benchmark.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3benchmark}{2020-10-27}{} +\ProvidesExplPackage{l3benchmark}{2020-01-29}{} {L3 Experimental benchmarking} \sys_if_engine_luatex:TF { diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3bitset/l3bitset.sty b/Master/texmf-dist/tex/latex/l3experimental/l3bitset/l3bitset.sty new file mode 100644 index 00000000000..df0bdb61709 --- /dev/null +++ b/Master/texmf-dist/tex/latex/l3experimental/l3bitset/l3bitset.sty @@ -0,0 +1,234 @@ +%% +%% This is file `l3bitset.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% l3bitset.dtx (with options: `package') +%% +%% Copyright (C) 2020 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 "l3experimental bundle" (The Work in LPPL) +%% and all files in that bundle must be distributed together. +%% +%% File: l3bitset.dtx +\ProvidesExplPackage{l3bitset}{2020-01-29}{} + {L3 Experimental bitset support} +\cs_new_protected:Npn \bitset_new:N #1 + { + \__kernel_chk_if_free_cs:N #1 + \cs_gset_eq:NN #1 \c_zero_str + \prop_new:c { g__bitset_ \cs_to_str:N #1 _name_prop } + } + +\cs_new_protected:Npn \bitset_new:Nn #1 #2 + { + \__kernel_chk_if_free_cs:N #1 + \cs_gset_eq:NN #1 \c_zero_str + \prop_new:c { g__bitset_ \cs_to_str:N #1 _name_prop } + \prop_gset_from_keyval:cn + { g__bitset_ \cs_to_str:N #1 _name_prop } + {#2} + } +\cs_generate_variant:Nn \bitset_new:N { c } +\prop_new:N \l__bitset_tmpa_prop +\cs_new_protected:Npn \bitset_addto_named_index:Nn #1#2 + { + \prop_set_from_keyval:Nn \l__bitset_tmpa_prop {#2} + \prop_map_inline:Nn \l__bitset_tmpa_prop + { + \prop_gput:cnn + { g__bitset_ \cs_to_str:N #1 _name_prop } + {##1} + {##2} + } + } +\prg_new_eq_conditional:NNn + \bitset_if_exist:N \str_if_exist:N { p , T , F , TF } +\prg_new_eq_conditional:NNn + \bitset_if_exist:c \str_if_exist:c + { p , T , F , TF } +\cs_new_protected:Npn \__bitset_set_true:Nn #1#2 + { \__bitset_set:NNnN \str_set:Nx #1 {#2} 1 } +\cs_new_protected:Npn \__bitset_gset_true:Nn #1#2 + { \__bitset_set:NNnN \str_gset:Nx #1 {#2} 1 } +\cs_new_protected:Npn \__bitset_set_false:Nn #1#2 + { \__bitset_set:NNnN \str_set:Nx #1 {#2} 0 } +\cs_new_protected:Npn \__bitset_gset_false:Nn #1#2 + { \__bitset_set:NNnN \str_gset:Nx #1 {#2} 0 } +\cs_new_protected:Npn \__bitset_set:NNnN #1#2#3#4 + { + \int_compare:nNnT {#3} > { 0 } + { + \int_compare:nNnTF { \str_count:N #2 } < {#3} + { + #1 #2 + { + #4 + \prg_replicate:nn { #3 - \str_count:N #2 - 1 } { 0 } + #2 + } + } + { + #1 #2 + { + \str_range:Nnn #2 { 1 } { -1 - (#3) } + #4 + \str_range:Nnn #2 { 1 - (#3) } { -1 } + } + } + } + } +\int_new:N \l__bitset_internal_int +\prg_new_protected_conditional:Npnn \__bitset_test_digits:n #1 { TF } + { + \tex_afterassignment:D \__bitset_test_digits:w + \l__bitset_internal_int = 0 \tl_trim_spaces_apply:nN {#1} \tl_to_str:n + \__bitset_test_digits_end: + \use_i:nnn \if_false: + \__bitset_test_digits_end: + \if_int_compare:w \c_zero_int < \l__bitset_internal_int + \prg_return_true: + \else: + \prg_return_false: + \fi: + } +\cs_new_eq:NN \__bitset_test_digits_end: \exp_stop_f: +\cs_new_protected:Npn \__bitset_test_digits:w #1 \__bitset_test_digits_end: { } +\cs_new_protected:Npn \bitset_set_true:Nn #1#2 + { \__bitset_set:NNn \__bitset_set_true:Nn #1 {#2} } +\cs_new_protected:Npn \bitset_gset_true:Nn #1#2 + { \__bitset_set:NNn \__bitset_gset_true:Nn #1 {#2} } +\cs_new_protected:Npn \bitset_set_false:Nn #1#2 + { \__bitset_set:NNn \__bitset_set_false:Nn #1 {#2} } +\cs_new_protected:Npn \bitset_gset_false:Nn #1#2 + { \__bitset_set:NNn \__bitset_gset_false:Nn #1 {#2} } +\cs_new_protected:Npn \__bitset_set:NNn #1#2#3 + { + \prop_if_in:cnTF { g__bitset_ \cs_to_str:N #2 _name_prop } {#3} + { + #1 #2 + { + \prop_item:cn { g__bitset_ \cs_to_str:N #2 _name_prop } {#3} + } + } + { + \__bitset_test_digits:nTF {#3} + { + #1 #2 {#3} + \prop_gput:cnn { g__bitset_ \cs_to_str:N #2 _name_prop } {#3} {#3} + } + { + \__kernel_msg_warning:nnxx { bitset } { bitset-unknown-name } + { \token_to_str:N #2 } + { \tl_to_str:n {#3} } + } + } + } +\cs_generate_variant:Nn \bitset_set_true:Nn { c } +\cs_generate_variant:Nn \bitset_gset_true:Nn { c } +\cs_generate_variant:Nn \bitset_set_false:Nn { c } +\cs_generate_variant:Nn \bitset_gset_false:Nn { c } +\cs_new_protected:Npn \bitset_clear:N #1 + { + \str_set_eq:NN #1 \c_zero_str + } +\cs_new_protected:Npn \bitset_gclear:N #1 + { + \str_gset_eq:NN #1 \c_zero_str + } +\cs_generate_variant:Nn \bitset_clear:N { c } +\cs_generate_variant:Nn \bitset_gclear:N { c } +\cs_new:Npn \bitset_to_arabic:N #1 + { + \int_compare:nNnTF { \str_count:N #1 } < { 32 } + { \exp_args:No \int_from_bin:n {#1} } + { + \exp_after:wN \__bitset_to_int:nN \exp_after:wN 0 + #1 \q_recursion_tail \q_recursion_stop + } + } + +\cs_new:Npn \__bitset_to_int:nN #1#2 + { + \quark_if_recursion_tail_stop_do:Nn #2 {#1} + \exp_args:Nf \__bitset_to_int:nN { \fp_eval:n { #1 * 2 + #2 } } + } + +\cs_new:Npn \bitset_to_bin:N #1 + { + #1 + } +\cs_generate_variant:Nn \bitset_to_arabic:N { c } +\cs_generate_variant:Nn \bitset_to_bin:N { c } +\cs_new:Npn \bitset_item:Nn #1#2 + { + \prop_if_in:cnTF { g__bitset_ \cs_to_str:N #1 _name_prop } {#2} + { + \int_eval:n + { + \str_item:Nn #1 + { 0 - ( \prop_item:cn { g__bitset_ \cs_to_str:N #1 _name_prop } {#2} ) } + +0 + } + } + { + 0 + } + } +\cs_generate_variant:Nn \bitset_item:Nn { c } + +\cs_new_protected:Npn \bitset_show:N { \__bitset_show:NN \msg_show:nnxxxx } +\cs_generate_variant:Nn \bitset_show:N { c } +\cs_new_protected:Npn \bitset_log:N { \__bitset_show:NN \msg_log:nnxxxx } +\cs_generate_variant:Nn \bitset_log:N { c } +\cs_new_protected:Npn \bitset_show_named_index:N { \__bitset_show_named_index:NN \msg_show:nnxxxx } +\cs_generate_variant:Nn \bitset_show_named_index:N { c } +\cs_new_protected:Npn \__bitset_show:NN #1#2 + { + \__kernel_chk_defined:NT #2 + { + #1 { LaTeX/bitset } { show-bitset } + { \token_to_str:N #2 } + { \bitset_to_bin:N #2 } + { \bitset_to_arabic:N #2 } + { } + } + } +\cs_new_protected:Npn \__bitset_show_named_index:NN #1#2 + { + \__kernel_chk_defined:NT #2 + { + #1 { LaTeX/bitset } { show-names } + { \token_to_str:N #2 } + { \prop_map_function:cN { g__bitset_ \cs_to_str:N #2 _name_prop } \msg_show_item:nn } + { } + { } + } + } + \__kernel_msg_new:nnn { bitset } { show-bitset } + { + The~bitset~#1~has~the~representation: \\ + >~binary:~#2 \\ + >~arabic:~#3 . + } +\__kernel_msg_new:nnn { bitset } { show-names } + { + The~bitset~#1~ + \tl_if_empty:nTF {#2} + { knows~no~names~yet \\>~ . } + { knows~the~name/index~pairs~(without~outer~braces): #2 . } + } +\__kernel_msg_new:nnn { bitset } { bitset-unknown-name } + { The~name~'#2'~is~unknown~for~bitset~\tl_to_str:n {#1} } + +%% +%% +%% End of file `l3bitset.sty'. diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty b/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty index 6eb28eca242..e4e2fde1c93 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty @@ -6,7 +6,7 @@ %% %% l3color.dtx (with options: `package') %% -%% Copyright (C) 2017-2020 The LaTeX3 Project +%% Copyright (C) 2017-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -20,7 +20,7 @@ %% %% File: l3color.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3color}{2020-10-27}{} +\ProvidesExplPackage{l3color}{2020-01-29}{} {L3 Experimental color support} \int_new:N \l__color_internal_int \tl_new:N \l__color_internal_tl diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty b/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty index ecc7791c0da..fe13d4d5347 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty @@ -14,7 +14,7 @@ %% l3draw-state.dtx (with options: `package') %% l3draw-transforms.dtx (with options: `package') %% -%% Copyright (C) 2018-2020 The LaTeX3 Project +%% Copyright (C) 2018-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -28,7 +28,7 @@ %% %% File: l3draw.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3draw}{2020-10-27}{} +\ProvidesExplPackage{l3draw}{2020-01-29}{} {L3 Experimental core drawing support} \RequirePackage { l3color } \scan_new:N \s__draw_mark diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty b/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty index 533b62e1b12..b8baaccfa7c 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty @@ -6,7 +6,7 @@ %% %% l3graphics.dtx (with options: `package') %% -%% Copyright (C) 2019,2020 The LaTeX3 Project +%% Copyright (C) 2019-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -20,7 +20,7 @@ %% %% File: l3graphics.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3graphics}{2020-10-27}{} +\ProvidesExplPackage{l3graphics}{2020-01-29}{} {L3 Experimental graphics inclusion support} \ior_new:N \l__graphics_tmp_ior \tl_new:N \l__graphics_tmp_tl diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty b/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty index c7d232ad352..08b7db7f24f 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty @@ -6,7 +6,7 @@ %% %% l3pdf.dtx (with options: `package') %% -%% Copyright (C) 2019,2020 The LaTeX3 Project +%% Copyright (C) 2019-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -20,7 +20,7 @@ %% %% File: l3pdf.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3pdf}{2020-10-27}{} +\ProvidesExplPackage{l3pdf}{2020-01-29}{} {L3 Experimental core PDF support} \scan_new:N \s__pdf_stop \bool_new:N \g__pdf_init_bool @@ -106,6 +106,13 @@ { \__pdf_backend_version_major: . \__pdf_backend_version_minor: } \cs_new:Npn \pdf_version_major: { \__pdf_backend_version_major: } \cs_new:Npn \pdf_version_minor: { \__pdf_backend_version_minor: } +\cs_new_protected:Npn \pdf_destination:nn #1 #2 + { \__pdf_backend_destination:nn {#1}{#2} } +\cs_new_protected:Npn \pdf_destination:nnnn #1 #2 #3 #4 + { + \hbox_to_zero:n + { \__pdf_backend_destination:nnnn {#1} {#2} {#3} {#4} } + } %% %% %% End of file `l3pdf.sty'. diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty index 3d392de62fc..bfad5070e53 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty @@ -6,7 +6,7 @@ %% %% l3str-format.dtx (with options: `package') %% -%% Copyright (C) 2011-2020 The LaTeX3 Project +%% Copyright (C) 2011-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -20,7 +20,7 @@ %% %% File: l3str-format.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3str-format}{2020-10-27}{} +\ProvidesExplPackage{l3str-format}{2020-01-29}{} {L3 Experimental string formatting} \cs_generate_variant:Nn \use:nn { nf } \cs_generate_variant:Nn \use:nnn { fnf } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty b/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty index 6aaa332685f..77dacbd1104 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty @@ -6,7 +6,7 @@ %% %% l3sys-shell.dtx (with options: `package') %% -%% Copyright (C) 2018-2020 The LaTeX3 Project +%% Copyright (C) 2018-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -20,7 +20,7 @@ %% %% File: l3sys-shell.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3sys-shell}{2020-10-27}{} +\ProvidesExplPackage{l3sys-shell}{2020-01-29}{} {L3 Experimental system shell functions} \scan_new:N \s__sys_stop \quark_new:N \q__sys_nil diff --git a/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty b/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty index 84a58c3a145..43e8b940b96 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty @@ -6,7 +6,7 @@ %% %% xcoffins.dtx (with options: `package') %% -%% Copyright (C) 2010-2020 The LaTeX3 Project +%% Copyright (C) 2010-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -20,7 +20,7 @@ %% %% File: xcoffins.dtx \RequirePackage{xparse} -\ProvidesExplPackage{xcoffins}{2020-10-27}{} +\ProvidesExplPackage{xcoffins}{2020-01-29}{} {L3 Experimental design level coffins} \keys_define:nn { coffin } { diff --git a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty index 8c1b8b6834a..5b613332f83 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty @@ -6,7 +6,7 @@ %% %% l3galley.dtx (with options: `package') %% -%% Copyright (C) 2010-2020 The LaTeX3 Project +%% Copyright (C) 2010-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -32,7 +32,7 @@ }% \endinput } -\ProvidesExplPackage{l3galley}{2020-10-27}{} +\ProvidesExplPackage{l3galley}{2020-01-29}{} {L3 Experimental galley code} \int_new:N \l__galley_tmp_int \seq_new:N \g__galley_tmpa_seq diff --git a/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty b/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty index d040fcdbc45..77a5e039e4f 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty @@ -6,7 +6,7 @@ %% %% xgalley.dtx (with options: `package') %% -%% Copyright (C) 2010-2020 The LaTeX3 Project +%% Copyright (C) 2010-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -20,7 +20,7 @@ %% %% File: xgalley.dtx \RequirePackage{xparse} -\ProvidesExplPackage{xgalley}{2020-10-27}{} +\ProvidesExplPackage{xgalley}{2020-01-29}{} {L3 Experimental galley} \RequirePackage{xparse,xtemplate,l3galley} \clist_new:N \l__galley_tmpa_clist |