texlive[57554] Master/texmf-dist: l3 (29jan21)

commits+karl at tug.org commits+karl at tug.org
Fri Jan 29 23:37:38 CET 2021


Revision: 57554
          http://tug.org/svn/texlive?view=revision&revision=57554
Author:   karl
Date:     2021-01-29 23:37:37 +0100 (Fri, 29 Jan 2021)
Log Message:
-----------
l3 (29jan21)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md
    trunk/Master/texmf-dist/doc/latex/l3backend/README.md
    trunk/Master/texmf-dist/doc/latex/l3backend/l3backend-code.pdf
    trunk/Master/texmf-dist/doc/latex/l3backend/l3backend-code.tex
    trunk/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md
    trunk/Master/texmf-dist/doc/latex/l3experimental/README.md
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.tex
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.tex
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf
    trunk/Master/texmf-dist/dvips/l3backend/l3backend-dvips.pro
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend.ins
    trunk/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.ins
    trunk/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.ins
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.ins
    trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.ins
    trunk/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.ins
    trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins
    trunk/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.ins
    trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.ins
    trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.ins
    trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def
    trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def
    trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def
    trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def
    trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
    trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3bitset/
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3bitset/l3bitset.pdf
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend-opacity.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3bitset/
    trunk/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.ins
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3bitset/
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3bitset/l3bitset.sty

Modified: trunk/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md	2021-01-29 22:37:37 UTC (rev 57554)
@@ -6,6 +6,17 @@
 
 ## [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 @@
 - 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

Modified: trunk/Master/texmf-dist/doc/latex/l3backend/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3backend/README.md	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/doc/latex/l3backend/README.md	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 @@
 
 -----
 
-<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>

Modified: trunk/Master/texmf-dist/doc/latex/l3backend/l3backend-code.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3backend/l3backend-code.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3backend/l3backend-code.tex	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/doc/latex/l3backend/l3backend-code.tex	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 @@
     l3backend-draw.dtx     ,
     l3backend-graphics.dtx ,
     l3backend-pdf.dtx      ,
+    l3backend-opacity.dtx  ,
     l3backend-header.dtx
   }
 \ExplSyntaxOff

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md	2021-01-29 22:37:37 UTC (rev 57554)
@@ -7,6 +7,12 @@
 
 ## [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 @@
 - 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

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3experimental/README.md	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/doc/latex/l3experimental/README.md	2021-01-29 22:37:37 UTC (rev 57554)
@@ -1,7 +1,7 @@
 Experimental LaTeX3 Concepts
 ============================
 
-Release 2020-10-27
+Release 2020-01-29
 
 Overview
 --------
@@ -123,11 +123,11 @@
 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 at latex-project.org>; for general LaTeX3 discussion
@@ -135,6 +135,6 @@
 
 -----
 
-<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>

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf
===================================================================
(Binary files differ)

Added: trunk/Master/texmf-dist/doc/latex/l3experimental/l3bitset/l3bitset.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/l3experimental/l3bitset/l3bitset.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3experimental/l3bitset/l3bitset.pdf	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/doc/latex/l3experimental/l3bitset/l3bitset.pdf	2021-01-29 22:37:37 UTC (rev 57554)

Property changes on: trunk/Master/texmf-dist/doc/latex/l3experimental/l3bitset/l3bitset.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.tex	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.tex	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.tex	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.tex	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/dvips/l3backend/l3backend-dvips.pro
===================================================================
--- trunk/Master/texmf-dist/dvips/l3backend/l3backend-dvips.pro	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/dvips/l3backend/l3backend-dvips.pro	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at 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}

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2020-01-29}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2020-01-29}
 %
 % \maketitle
 %
@@ -173,6 +173,24 @@
 % 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}
@@ -179,38 +197,57 @@
 %<*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 at pdfcolorstack }
+      {
+        \int_set:Nn \l_@@_backend_stack_int
+          { \int_use:c { main at 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
+%     \@@_backend_fill_rgb:n    ,
+%     \@@_backend_fill:n
 %   }
-% \begin{macro}{\@@_backend_gray:nn, \@@_backend_gray_aux:n}
-% \begin{macro}
-%   {
-%     \@@_backend_fill_rgb:n   ,
-%     \@@_backend_stroke_rgb: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}
 %   {

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at 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 { gsave }
+    \@@_backend_literal:n { color.sc }
+    \@@_backend_literal:n { stroke }
     \@@_backend_literal:n { grestore }
-    \@@_backend_literal:n { stroke }
     \bool_if:NT \g_@@_draw_clip_bool
       {
         \@@_backend_literal:x

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2020-01-29}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at 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}
 %

Added: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-opacity.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-opacity.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-opacity.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at latex-project.org}
+%          {latex-team at 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


Property changes on: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-opacity.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at 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
+\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 { \__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:
+    \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}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend.ins	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend.ins	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 @@
 
 \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 @@
         \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 @@
         \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 @@
         \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 @@
         \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 @@
         \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 @@
         \from{l3backend-draw.dtx}    {package,xetex}
         \from{l3backend-graphics.dtx}{package,xetex}
         \from{l3backend-pdf.dtx}     {package,xetex}
+        \from{l3backend-opacity.dtx} {package,xetex}
       }
   }
 

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at 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}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.ins	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.ins	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 @@
 
 \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

Added: trunk/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at latex-project.org}
+%          {latex-team at 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


Property changes on: trunk/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.ins	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.ins	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at latex-project.org}
@@ -46,7 +46,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-10-27}
+% \date{Released 2020-01-29}
 %
 % \maketitle
 %
@@ -247,16 +247,19 @@
 %   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}
 %     \cs{color_fill:n} \Arg{color expression}
@@ -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}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.ins	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.ins	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 @@
 
 \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

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at latex-project.org}
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-10-27}
+% \date{Released 2020-01-29}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at latex-project.org}
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-10-27}
+% \date{Released 2020-01-29}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at latex-project.org}
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-10-27}
+% \date{Released 2020-01-29}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at latex-project.org}
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-10-27}
+% \date{Released 2020-01-29}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at latex-project.org}
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-10-27}
+% \date{Released 2020-01-29}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at latex-project.org}
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-10-27}
+% \date{Released 2020-01-29}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at latex-project.org}
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-10-27}
+% \date{Released 2020-01-29}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at latex-project.org}
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-10-27}
+% \date{Released 2020-01-29}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at 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}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.ins	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.ins	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 @@
 
 \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

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at 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}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.ins	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.ins	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 @@
 
 \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

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at 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,7 +415,25 @@
 %    \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}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.ins	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.ins	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 @@
 
 \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

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at 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}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 @@
 
 \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

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at 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}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.ins	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.ins	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 @@
 
 \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

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at 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}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.ins	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.ins	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 @@
 
 \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

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at 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}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at 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}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.ins	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.ins	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 @@
 
 \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

Modified: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at pdfcolorstack }
+      {
+        \int_set:Nn \l__color_backend_stack_int
+          { \int_use:c { main at 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,37 +819,44 @@
         ]
       }
   }
-\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} } }
 \cs_new_protected:Npn \__pdf_backend_compress_objects: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'.

Modified: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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,12 +282,17 @@
       }
   }
 \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 } }
@@ -294,9 +299,9 @@
 \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 { gsave }
+    \__draw_backend_literal:n { color.sc }
+    \__draw_backend_literal:n { stroke }
     \__draw_backend_literal:n { grestore }
-    \__draw_backend_literal:n { stroke }
     \bool_if:NT \g__draw_draw_clip_bool
       {
         \__draw_backend_literal:x
@@ -904,30 +905,39 @@
         /DEST
       }
   }
-\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 { \__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:
+    \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
   {
     \int_compare:nNnT {#1} = 0
@@ -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'.

Modified: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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'.

Modified: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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'.

Modified: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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'.

Modified: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 at pdfcolorstack }
+      {
+        \int_set:Nn \l__color_backend_stack_int
+          { \int_use:c { main at 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,37 +865,44 @@
         ]
       }
   }
-\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} } }
 \cs_new_protected:Npn \__pdf_backend_compress_objects: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'.

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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
   {

Added: trunk/Master/texmf-dist/tex/latex/l3experimental/l3bitset/l3bitset.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3bitset/l3bitset.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3bitset/l3bitset.sty	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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'.


Property changes on: trunk/Master/texmf-dist/tex/latex/l3experimental/l3bitset/l3bitset.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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'.

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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 }
   {

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty	2021-01-29 22:32:33 UTC (rev 57553)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty	2021-01-29 22:37:37 UTC (rev 57554)
@@ -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



More information about the tex-live-commits mailing list.