texlive[56244] Master/texmf-dist: l3backend (2sep20)

commits+karl at tug.org commits+karl at tug.org
Wed Sep 2 23:36:32 CEST 2020


Revision: 56244
          http://tug.org/svn/texlive?view=revision&revision=56244
Author:   karl
Date:     2020-09-02 23:36:32 +0200 (Wed, 02 Sep 2020)
Log Message:
-----------
l3backend (2sep20)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md
    trunk/Master/texmf-dist/doc/latex/l3backend/README.md
    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/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

Added Paths:
-----------
    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

Removed Paths:
-------------
    trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def
    trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-xdvipdfmx.def

Modified: trunk/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md	2020-09-02 21:34:30 UTC (rev 56243)
+++ trunk/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md	2020-09-02 21:36:32 UTC (rev 56244)
@@ -6,6 +6,14 @@
 
 ## [Unreleased]
 
+## [2020-09-01]
+
+### Changed
+- Improved support for Separation colors
+- Updated approach to `dvipdfmx`/XeTeX color support
+- Split `pdfmode` driver into pdfTeX- and LuaTeX-specific  files
+- Renamed `xdvipdfmx` backend files to `xetex`
+
 ## [2020-08-07]
 
 ### Changed
@@ -102,7 +110,8 @@
 - Include `l3backend` in file names
 - Moved backend code to internal for each 'parent' module
 
-[Unreleased]: https://github.com/latex3/latex3/compare/2020-08-07...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2020-09-01...HEAD
+[2020-09-01]: https://github.com/latex3/latex3/compare/2020-08-07...2020-09-01
 [2020-08-07]: https://github.com/latex3/latex3/compare/2020-06-29...2020-08-07
 [2020-06-29]: https://github.com/latex3/latex3/compare/2020-06-23...2020-06-29
 [2020-06-23]: https://github.com/latex3/latex3/compare/2020-06-18...2020-06-23

Modified: trunk/Master/texmf-dist/doc/latex/l3backend/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3backend/README.md	2020-09-02 21:34:30 UTC (rev 56243)
+++ trunk/Master/texmf-dist/doc/latex/l3backend/README.md	2020-09-02 21:36:32 UTC (rev 56244)
@@ -1,7 +1,7 @@
 LaTeX3 Backend Drivers
 ======================
 
-Release 2020-08-07
+Release 2020-09-01
 
 This package forms parts of `expl3`, and contains the code used to interface
 with backends (drivers) across the `expl3` codebase. The functions here are

Modified: trunk/Master/texmf-dist/dvips/l3backend/l3backend-dvips.pro
===================================================================
--- trunk/Master/texmf-dist/dvips/l3backend/l3backend-dvips.pro	2020-09-02 21:34:30 UTC (rev 56243)
+++ trunk/Master/texmf-dist/dvips/l3backend/l3backend-dvips.pro	2020-09-02 21:36:32 UTC (rev 56244)
@@ -21,6 +21,9 @@
 %% File: l3backend-header.dtx
 /color.sc { } def
 /color.fc { } def
+TeXDict begin
+/TeXcolorsetspotcolor { setcustomcolor } def
+end
 true setglobal
 /pdf.globaldict 4 dict def
 false setglobal

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx	2020-09-02 21:34:30 UTC (rev 56243)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx	2020-09-02 21:36:32 UTC (rev 56244)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-08-07}
+% \date{Released 2020-09-01}
 %
 % \maketitle
 %
@@ -68,40 +68,70 @@
 % All the file identifiers are up-front so that they come out in the right
 % place in the files.
 %    \begin{macrocode}
-%<*package>
 \ProvidesExplFile
 %<*dvipdfmx>
-  {l3backend-dvipdfmx.def}{2020-08-07}{}
+  {l3backend-dvipdfmx.def}{2020-09-01}{}
   {L3 backend support: dvipdfmx}
 %</dvipdfmx>
 %<*dvips>
-  {l3backend-dvips.def}{2020-08-07}{}
+  {l3backend-dvips.def}{2020-09-01}{}
   {L3 backend support: dvips}
 %</dvips>
 %<*dvisvgm>
-  {l3backend-dvisvgm.def}{2020-08-07}{}
+  {l3backend-dvisvgm.def}{2020-09-01}{}
   {L3 backend support: dvisvgm}
 %</dvisvgm>
-%<*pdfmode>
-  {l3backend-pdfmode.def}{2020-08-07}{}
-  {L3 backend support: PDF mode}
-%</pdfmode>
-%<*xdvipdfmx>
-  {l3backend-xdvipdfmx.def}{2020-08-07}{}
-  {L3 backend support: xdvipdfmx}
-%</xdvipdfmx>
-%</package>
+%<*luatex>
+  {l3backend-luatex.def}{2020-09-01}{}
+  {L3 backend support: PDF output (LuaTeX)}
+%</luatex>
+%<*pdftex>
+  {l3backend-pdftex.def}{2020-09-01}{}
+  {L3 backend support: PDF output (pdfTeX)}
+%</pdftex>
+%<*xetex>
+  {l3backend-xetex.def}{2020-09-01}{}
+  {L3 backend support: XeTeX}
+%</xetex>
 %    \end{macrocode}
 %
+%   Check if the loaded kernel is at least enough to load this file.
+%   The kernel date has to be at least equal to \cs{ExplBackendFileDate}
+%   or later.  If \cs{__kernel_dependency_version_check:Nn} doesn't
+%   exist we're loading in an older kernel, so it's an error anyway.
+%   With time, this test should vanish and only the dependency check
+%   should remain.
+%    \begin{macrocode}
+\cs_if_exist:NTF \__kernel_dependency_version_check:nn
+  {
+    \__kernel_dependency_version_check:nn {2020-09-01}
+%<dvipdfmx>      {l3backend-dvipdfmx.def}
+%<dvips>      {l3backend-dvips.def}
+%<dvisvgm>      {l3backend-dvisvgm.def}
+%<luatex>      {l3backend-luatex.def}
+%<pdftex>      {l3backend-pdftex.def}
+%<xetex>      {l3backend-xetex.def}
+  }
+  {
+    \cs_if_exist_use:cF { @latex at error } { \errmessage }
+      {
+        Mismatched~LaTeX~support~files~detected. \MessageBreak
+        Loading~aborted!
+      }
+      { \use:c { @ehd } }
+    \tex_endinput:D
+  }
+%    \end{macrocode}
+%
 % The order of the backend code here is such that we get somewhat logical
 % outcomes in terms of code sharing whilst keeping things readable. (Trying to
 % mix all of the code by concept is almost unmanageable.) The key parts which
 % are shared are
 % \begin{itemize}
-%   \item Color support is either \texttt{dvips}-like or \texttt{pdfmode}-like.
-%   \item \texttt{pdfmode} and \texttt{(x)dvipdfmx} share drawing routines.
-%   \item \texttt{xdvipdfmx} is largely the same as \texttt{dvipdfmx} so
-%     takes most of the same code.
+%   \item Color support is either \texttt{dvips}-like or \LuaTeX{}/pdfTeX{}-like.
+%   \item \LuaTeX{}/pdfTeX{} and \texttt{dvipdfmx}/\XeTeX{} share drawing routines.
+%   \item \XeTeX{} is the same as \texttt{dvipdfmx} other than image size
+%     extraction so takes most of the same code.
 % \end{itemize}
 %
 % \begin{macro}
@@ -155,15 +185,13 @@
 % This is held until the start of shipout such that a document with no
 % actual output does not write anything.
 %    \begin{macrocode}
-\cs_if_exist:NTF \AtBeginDvi
-  { \AtBeginDvi }
-  { \use:n }
-    {
-      \bool_lazy_and:nnT
-        { \cs_if_exist_p:N \g__kernel_backend_header_bool }
-        { \g__kernel_backend_header_bool }
+\bool_if:NT \g__kernel_backend_header_bool
+  {
+    \cs_if_exist:NTF \AtBeginDvi
+      { \AtBeginDvi }
+      { \use:n }
         { \__kernel_backend_literal:n { header = l3backend-dvips.pro } }
-    }
+  }
 %    \end{macrocode}
 %
 % \begin{macro}
@@ -211,17 +239,16 @@
 %</dvips>
 %    \end{macrocode}
 %
-% \subsection{\texttt{pdfmode} backend}
+% \subsection{\LuaTeX{} and \pdfTeX{} backends}
 %
 %    \begin{macrocode}
-%<*pdfmode>
+%<*luatex|pdftex>
 %    \end{macrocode}
 %
-% The direct PDF backend covers both \pdfTeX{} and \LuaTeX{}. The latter
-% renames and restructures the backend primitives but this can be handled
-% at one level of abstraction. As such, we avoid using two separate backends
-% for this material at the cost of some \texttt{x}-type definitions to get
-% everything expanded up-front.
+% Both \LuaTeX{} and \pdfTeX{} write PDFs directly rather than via an
+% intermediate file. Although there are similarities, the move of \LuaTeX{}
+% to have more code in Lua means we create two independent files using
+% shared DocStrip code.
 %
 % \begin{macro}{\__kernel_backend_literal_pdf:n, \__kernel_backend_literal_pdf:x}
 %   This is equivalent to \verb|\special{pdf:}| but the engine can
@@ -230,12 +257,15 @@
 %   Note that this is still inside the text (\texttt{BT} \dots \texttt{ET}
 %   block).
 %    \begin{macrocode}
-\cs_new_protected:Npx \__kernel_backend_literal_pdf:n #1
+\cs_new_protected:Npn \__kernel_backend_literal_pdf:n #1
   {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D literal }
-      { \tex_pdfliteral:D }
-        { \exp_not:N \exp_not:n {#1} }
+%<*luatex>
+    \tex_pdfextension:D literal
+%</luatex>
+%<*pdftex>
+    \tex_pdfliteral:D
+%</pdftex>
+      { \exp_not:n {#1} }
   }
 \cs_generate_variant:Nn \__kernel_backend_literal_pdf:n { x }
 %    \end{macrocode}
@@ -245,13 +275,15 @@
 %  Page literals are pretty simple. To avoid an expansion, we write out
 %  by hand.
 %    \begin{macrocode}
-\cs_new_protected:Npx \__kernel_backend_literal_page:n #1
+\cs_new_protected:Npn \__kernel_backend_literal_page:n #1
   {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D literal ~ }
-      { \tex_pdfliteral:D }
-        page
-        { \exp_not:N \exp_not:n {#1} }
+%<*luatex>
+    \tex_pdfextension:D literal ~
+%</luatex>
+%<*pdftex>
+    \tex_pdfliteral:D
+%</pdftex>
+        page { \exp_not:n {#1} }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -259,17 +291,23 @@
 % \begin{macro}{\__kernel_backend_scope_begin:, \__kernel_backend_scope_end:}
 %  Higher-level interfaces for saving and restoring the graphic state.
 %    \begin{macrocode}
-\cs_new_protected:Npx \__kernel_backend_scope_begin:
+\cs_new_protected:Npn \__kernel_backend_scope_begin:
   {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D save \scan_stop: }
-      { \tex_pdfsave:D }
+%<*luatex>
+    \tex_pdfextension:D save \scan_stop:
+%</luatex>
+%<*pdftex>
+    \tex_pdfsave:D
+%</pdftex>
   }
-\cs_new_protected:Npx \__kernel_backend_scope_end:
+\cs_new_protected:Npn \__kernel_backend_scope_end:
   {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D restore \scan_stop: }
-      { \tex_pdfrestore:D }
+%<*luatex>
+    \tex_pdfextension:D restore \scan_stop:
+%</luatex>
+%<*pdftex>
+    \tex_pdfrestore:D
+%</pdftex>
   }
 %    \end{macrocode}
 % \end{macro}
@@ -279,12 +317,15 @@
 %   into the PDF. With \pdfTeX{} and \LuaTeX{} in direct PDF output mode there
 %   is a primitive for this, which only needs the rotation/scaling/skew part.
 %    \begin{macrocode}
-\cs_new_protected:Npx \__kernel_backend_matrix:n #1
+\cs_new_protected:Npn \__kernel_backend_matrix:n #1
   {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D setmatrix }
-      { \tex_pdfsetmatrix:D }
-        { \exp_not:N \exp_not:n {#1} }
+%<*luatex>
+    \tex_pdfextension:D setmatrix
+%</luatex>
+%<*pdftex>
+    \tex_pdfsetmatrix:D
+%</pdftex>
+        { \exp_not:n {#1} }
   }
 \cs_generate_variant:Nn \__kernel_backend_matrix:n { x }
 %    \end{macrocode}
@@ -291,19 +332,19 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</pdfmode>
+%</luatex|pdftex>
 %    \end{macrocode}
 %
 % \subsection{\texttt{dvipdfmx} backend}
 %
 %    \begin{macrocode}
-%<*dvipdfmx|xdvipdfmx>
+%<*dvipdfmx|xetex>
 %    \end{macrocode}
 %
 % The \texttt{dvipdfmx} shares code with the PDF mode one (using the common
-% section to this file) but also with \texttt{xdvipdfmx}. The latter is close
+% section to this file) but also with \XeTeX{}. The latter is close
 % to identical to \texttt{dvipdfmx} and so all of the code here is extracted
-% for both backends, with some \texttt{clean up} for \texttt{xdvipdfmx} as
+% for both backends, with some \texttt{clean up} for \XeTeX{} as
 % required.
 %
 % \begin{macro}{\__kernel_backend_literal_pdf:n, \__kernel_backend_literal_pdf:x}
@@ -336,7 +377,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</dvipdfmx|xdvipdfmx>
+%</dvipdfmx|xetex>
 %    \end{macrocode}
 %
 % \subsection{\texttt{dvisvgm} backend}

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx	2020-09-02 21:34:30 UTC (rev 56243)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx	2020-09-02 21:36:32 UTC (rev 56244)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-08-07}
+% \date{Released 2020-09-01}
 %
 % \maketitle
 %
@@ -151,10 +151,10 @@
 %</dvips>
 %    \end{macrocode}
 %
-% \subsection{\texttt{pdfmode} backend}
+% \subsection{\LuaTeX{} and \pdfTeX{} backends}
 %
 %    \begin{macrocode}
-%<*pdfmode>
+%<*luatex|pdftex>
 %    \end{macrocode}
 %
 % \begin{macro}{\@@_backend_clip:N}
@@ -247,17 +247,17 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</pdfmode>
+%</luatex|pdftex>
 %    \end{macrocode}
 %
 % \subsection{\texttt{dvipdfmx} backend}
 %
 %    \begin{macrocode}
-%<*dvipdfmx|xdvipdfmx>
+%<*dvipdfmx|xetex>
 %    \end{macrocode}
 %
 % \begin{macro}{\@@_backend_clip:N}
-%   The code here is identical to that for \texttt{pdfmode}: unlike rotation and
+%   The code here is identical to that for \LuaTeX{}/\pdfTeX{}: unlike rotation and
 %   scaling, there is no higher-level support in the backend for clipping.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_backend_clip:N #1
@@ -327,7 +327,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</dvipdfmx|xdvipdfmx>
+%</dvipdfmx|xetex>
 %    \end{macrocode}
 %
 % \subsection{\texttt{dvisvgm} backend}

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx	2020-09-02 21:34:30 UTC (rev 56243)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx	2020-09-02 21:36:32 UTC (rev 56244)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-08-07}
+% \date{Released 2020-09-01}
 %
 % \maketitle
 %
@@ -60,18 +60,62 @@
 %<@@=color>
 %    \end{macrocode}
 %
-% Color support is split into two parts: a \enquote{general} concept and
-% one directly linked to drawings (or rather the split between filling
-% and stroking). General color is relatively easy to handle: we have a color
-% stack available with all modern drivers, and can use that.
-% Whilst \texttt{(x)dvipdfmx} does have its own approach to color specials,
-% it is easier to use \texttt{dvips}-like ones for all cases except direct
-% PDF output.
+% Color support is split into parts: general color, separations, and color for
+% drawings. We have different approaches in each backend, and have some choices
+% to make about \texttt{dvipdfmx}/\XeTeX{} in particular. Whilst it is in some ways
+% convenient to use the same approach in multiple backends, the fact that
+% \texttt{dvipdfmx}/\XeTeX{} is PDF-based means it (largely) sticks closer to
+% direct PDF output.
 %
+% \subsection{\texttt{dvipmdfx}/\XeTeX{}}
+%
+%    \begin{macrocode}
+%<*dvipdfmx|xetex>
+%    \end{macrocode}
+%
+% These backends have the most possible approaches: it recognises both
+% \texttt{dvips}-based color specials and it's own format, plus one can
+% include PDF statements directly. The latter are not subject to the stack,
+% so are not suitable for general use. Of the two stack methods, the dedicated
+% one has been extended to cover color spaces, so it is used in preference to
+% the \texttt{dvips} one.
+%
+% The \LaTeXe{} backend code uses \texttt{dvips}-based code with
+% \texttt{dvipmdfx}/\XeTeX{}, and so we leave getting color from \LaTeXe{} to
+% a shared code path below.
+%
+% \begin{macro}
+%   {
+%     \@@_backend_select_cmyk:n  ,
+%     \@@_backend_select_gray:n  ,
+%     \@@_backend_select_rgb:n
+%   }
+% \begin{macro}{\@@_backend_reset:}
+% \begin{macro}{color.sc, color.fc}
+%    Push the data to the stack.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_select_cmyk:n #1
+  {
+    \__kernel_backend_literal:n { pdf: bc ~ [#1] }
+    \group_insert_after:N \@@_backend_reset:
+  }
+\cs_new_eq:NN \@@_backend_select_gray:n \@@_backend_select_cmyk:n
+\cs_new_eq:NN \@@_backend_select_rgb:n \@@_backend_select_cmyk:n
+\cs_new_protected:Npn \@@_backend_reset:
+  { \__kernel_backend_literal:n { pdf: ec } }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%    \begin{macrocode}
+%</dvipdfmx|xetex>
+%    \end{macrocode}
+%
 % \subsection{\texttt{dvips}-style}
 %
 %    \begin{macrocode}
-%<*dvisvgm|dvipdfmx|dvips|xdvipdfmx>
+%<*dvisvgm|dvipdfmx|dvips|xetex>
 %    \end{macrocode}
 %
 % \begin{macro}{\@@_backend_pickup:N}
@@ -106,6 +150,14 @@
 % \end{macro}
 % \end{macro}
 %
+%    \begin{macrocode}
+%</dvisvgm|dvipdfmx|dvips|xetex>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<*dvisvgm|dvips>
+%    \end{macrocode}
+%
 % \begin{macro}
 %   {
 %     \@@_backend_select_cmyk:n  ,
@@ -140,21 +192,14 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}{\@@_backend_select_separation:nn}
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_select_separation:nn #1#2
-  { \@@_backend_select:n {#1} }
+%</dvisvgm|dvips>
 %    \end{macrocode}
-% \end{macro}
 %
-%    \begin{macrocode}
-%</dvisvgm|dvipdfmx|dvips|xdvipdfmx>
-%    \end{macrocode}
+% \subsection{\LuaTeX{} and \pdfTeX{}}
 %
-% \subsection{\texttt{pdfmode}}
-%
 %    \begin{macrocode}
-%<*pdfmode>
+%<*luatex|pdftex>
 %    \end{macrocode}
 %
 % \begin{macro}{\@@_backend_pickup:N}
@@ -225,44 +270,252 @@
   { \@@_backend_select:n { #1 ~ g ~ #1 ~ G } }
 \cs_new_protected:Npn \@@_backend_select_rgb:n #1
   { \@@_backend_select:n { #1 ~ rg ~ #1 ~ RG } }
-\cs_new_protected:Npx \@@_backend_select:n #1
+\cs_new_protected:Npn \@@_backend_select:n #1
   {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D colorstack }
-      { \tex_pdfcolorstack:D }
-        \exp_not:N \l__kernel_color_stack_int push {#1}
-      \group_insert_after:N \exp_not:N \@@_backend_reset:
+%<*luatex>
+    \tex_pdfextension:D colorstack
+%</luatex>
+%<*pdftex>
+    \tex_pdfcolorstack:D
+%</pdftex>
+      \l__kernel_color_stack_int push {#1}
+    \group_insert_after:N \@@_backend_reset:
   }
-\cs_new_protected:Npx \@@_backend_reset:
+\cs_new_protected:Npn \@@_backend_reset:
   {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D colorstack }
-      { \tex_pdfcolorstack:D }
-        \exp_not:N \l__kernel_color_stack_int pop \scan_stop:
+%<*luatex>
+    \tex_pdfextension:D colorstack
+%</luatex>
+%<*pdftex>
+    \tex_pdfcolorstack:D
+%</pdftex>
+      \l__kernel_color_stack_int pop \scan_stop:
   }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
 %
+%    \begin{macrocode}
+%</luatex|pdftex>
+%    \end{macrocode}
+%
+% \subsection{Separations}
+%
+% Here, life gets interesting and we need essentially one approach per
+% backend.
+%
+%    \begin{macrocode}
+%<*dvips>
+%    \end{macrocode}
+%
 % \begin{macro}{\@@_backend_select_separation:nn}
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_backend_select_separation:nn #1#2
+  { \@@_backend_select:n { setspotcolor ~ #1 ~ #2 } }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_backend_separation_init:nnnnn}
+% \begin{macro}{\@@_backend_separation_init:nnn}
+% \begin{macro}[EXP]{\@@_backend_separation_init:n}
+% \begin{macro}[EXP]{\@@_backend_separation_init:w}
+% \begin{macro}{\@@_backend_separation_init_cielab:nnnnn}
+% \begin{macro}{\@@_backend_separation_init_cielab:n}
+%   Initialising here means creating a small header set up plus massaging
+%   some data. This comes about as we have to deal with PDF-focussed data,
+%   which makes most sense \enquote{higher-up}. The approach is based on
+%   ideas from \url{https://tex.stackexchange.com/q/560093}.
+%    \begin{macrocode}
+\cs_new_protected:Npx \@@_backend_separation_init:nnnnn #1#2#3#4#5
+  {
+    \bool_if:NT \g__kernel_backend_header_bool
+      {
+        \cs_if_exist:NTF \AtBeginDvi
+          { \AtBeginDvi }
+          { \use:n }
+            {
+                \exp_not:N \@@_backend_separation_init:nnn
+                  {#1} {#2} {#5}
+            }
+      }
+  }
+\cs_new_protected:Npn \@@_backend_separation_init:nnn #1#2#3
+  {
+    \__kernel_backend_literal:e
+      {
+        !
+        TeXDict ~ begin ~
+        /color \int_use:N \g_@@_separation_int \c_space_tl
+        [#3] ~ aload ~ pop ~ ( \str_convert_pdfname:n {#1} ) ~ 
+        find \@@_backend_separation_init:n {#2} customcolor ~ def ~
+        end
+      }
+  }
+\cs_new:Npn \@@_backend_separation_init:n #1
+  {
+    \@@_backend_separation_init:w #1 /Device #1 /Device \s_@@_stop
+  }
+\cs_new:Npn \@@_backend_separation_init:w #1 /Device #2 /Device #3 \s_@@_stop
+  { \str_lowercase:n {#2} }
+%    \end{macrocode}
+%  Currently no CIELAB support.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_separation_init_cielab:nnnnn #1#2#3#4#5 { }
+\cs_new_protected:Npn \@@_backend_separation_init_cielab:n #1 { }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%    \begin{macrocode}
+%</dvips>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<*dvisvgm>
+%    \end{macrocode}
+%
+% \begin{macro}{\@@_backend_select_separation:nn}
+%   No support at present.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_select_separation:nn #1#2 { }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}
+%   {\@@_backend_separation_init:nnnnn, \@@_backend_separation_init_cielab:nnnnn}
+% \begin{macro}{\@@_backend_separation_init_cielab:n}
+%   No support at present.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_separation_init:nnnnn #1#2#3#4#5 { }
+\cs_new_protected:Npn \@@_backend_separation_init_cielab:nnnnn #1#2#3#4#5 { }
+\cs_new_protected:Npn \@@_backend_separation_init_cielab:n #1 { }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%    \begin{macrocode}
+%</dvisvgm>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<*dvipdfmx|luatex|pdftex|xetex>
+%    \end{macrocode}
+%
+% \begin{macro}{\@@_backend_select_separation:nn}
+%   Different syntaxes here as the stacks are accessed very differently.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_select_separation:nn #1#2
+%<*dvipdfmx|xetex>
+  { \@@_backend_select:n { @#1 ~ [#2] } }
+%</dvipdfmx|xetex>
+%<*luatex|pdftex>
   { \@@_backend_select:n { /#1 ~ cs ~ /#1 ~ CS ~ #2 ~ scn ~ #2 ~ SCN } }
+%</luatex|pdftex>
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\@@_backend_separation_init:nnnnn}
+% \begin{macro}{\@@_backend_separation_init:n}
+% \begin{macro}{\@@_backend_separation_init_cielab:nnnnn}
+% \begin{macro}{\@@_backend_separation_init_cielab:n}
+%   Initialising the PDF structures needs two parts: creating an object
+%   containing the \enquote{real} name of the Separation, then adding a reference
+%   to that to each page. The latter uses the internal name of the \texttt{cs}.
+%   For \texttt{dvipdfmx}/\XeTeX{}, the backend does most of the work so we need a
+%   simplified version.
 %    \begin{macrocode}
-%</pdfmode>
+\cs_new_protected:Npn \@@_backend_separation_init:nnnnn #1#2#3#4#5
+  {
+    \@@_backend_separation_init:n
+      {
+        /Separation
+        / \str_convert_pdfname:n {#1} ~ #2 ~
+        <<
+          /FunctionType ~ 2
+          /Domain ~ [0 ~ 1]
+          \tl_if_blank:nF {#3} { /Range ~ [#3] }
+          /C0 ~ [#4] ~
+          /C1 ~ [#5] /N ~ 1
+        >>
+      }
+%<*luatex|pdftex>
+    \use:x
+      {
+        \pdfcoredict_gput:nnn
+          { Page / Resources / ColorSpace }
+          { color \int_use:N \g_@@_separation_int }
+          { \pdf_object_last: }
+      }
+%</luatex|pdftex>
+  }
+\cs_if_exist:NF \pdf_object_now:nn
+  { \cs_gset_protected:Npn \@@_backend_separation_init:nnnnn #1#2#3#4#5 { } }
+\cs_new_protected:Npn \@@_backend_separation_init:n #1
+  {
+%<*dvipdfmx|xetex>
+    \__kernel_backend_literal:x
+      {
+        pdf:obj ~ @ color \int_use:N \g_@@_separation_int \c_space_tl
+          [#1]
+      }
+%</dvipdfmx|xetex>
+%<*luatex|pdftex>
+    \pdf_object_now:nx { array } {#1}
+%</luatex|pdftex>  
+  }
 %    \end{macrocode}
+%   For CIELAB colors, we need one object per document for the illuminant,
+%   plus initialisation of the color space referencing that object.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_separation_init_cielab:nnnnn #1#2#3#4#5
+  {
+    \@@_backend_separation_init:nnnnn
+      {#2}
+      { \pdf_object_ref:n { @@_illuminant_cielab_ #1 } }
+      { \c_@@_model_range_lab_tl }
+      { 100 ~ 0 ~ 0 }
+      { #3 ~ #4 ~ #5 }
+  }
+\cs_if_exist:NF \pdf_object_now:nn
+  { \cs_gset_protected:Npn \@@_backend_separation_init_cielab:nnnnn #1#2#3#4#5 { } }
+\cs_new_protected:Npn \@@_backend_separation_init_cielab:n #1
+  {
+    \pdf_object_new:nn { @@_illuminant_cielab_ #1 } { array }
+    \pdf_object_write:nx { @@_illuminant_cielab_ #1 }
+      {
+        /Lab ~
+        <<
+         /WhitePoint ~
+           [ \tl_use:c { c_@@_model_whitepoint_cielab_ #1 _tl } ]
+         /Range ~ [ \c_@@_model_range_lab_tl ]
+        >>
+     }
+  }
+\cs_if_exist:NF \pdf_object_new:nn
+  { \cs_gset_protected:Npn \@@_backend_separation_init_cielab:n #1 { } }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
 %
+%    \begin{macrocode}
+%</dvipdfmx|luatex|pdftex|xetex>
+%    \end{macrocode}
+%
 % \subsection{Fill and stroke color}
 %
-% Here, \texttt{(x)dvipdfmx} follows \texttt{pdfmode}, while for \texttt{dvips}
+% Here, \texttt{dvipdfmx}/\XeTeX{} follows \LuaTeX{} and \pdfTeX{},
+% while for \texttt{dvips}
 % we have to manage fill and stroke color ourselves. We also handle
 % \texttt{dvisvgm} independently, as there we can create SVG directly.
 %
 %    \begin{macrocode}
-%<*dvipdfmx|pdfmode|xdvipdfmx>
+%<*dvipdfmx|luatex|pdftex|xetex>
 %    \end{macrocode}
 %
 % \begin{macro}
@@ -274,8 +527,8 @@
 %     \@@_backend_stroke_gray:n ,
 %     \@@_backend_stroke_rgb:n
 %   }
-%   Drawing (fill/stroke) color is handled in \texttt{(x)dvipdfmx} in the
-%   same way as \texttt{pdfmode}. We use the same approach as earlier, except the
+%   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
 %   color stack is not involved so the generic direct PDF operation is used.
 %   There is no worry about the nature of strokes: everything is handled
 %   automatically.
@@ -309,7 +562,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</dvipdfmx|pdfmode|xdvipdfmx>
+%</dvipdfmx|luatex|pdftex|xetex>
 %    \end{macrocode}
 %
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx	2020-09-02 21:34:30 UTC (rev 56243)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx	2020-09-02 21:36:32 UTC (rev 56244)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-08-07}
+% \date{Released 2020-09-01}
 %
 % \maketitle
 %
@@ -339,7 +339,7 @@
 %   In \texttt{dvips}, keeping the transformations in line with the engine
 %   is unfortunately not possible for scaling and rotations: even if we
 %   decompose the matrix into those operations, there is still no backend
-%   tracking (\emph{cf.}~\texttt{(x)dvipdfmx}). Thus we take the shortest
+%   tracking (\emph{cf.}~\texttt{dvipdfmx}/\XeTeX{}). Thus we take the shortest
 %   path available and simply dump the matrix as given.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_backend_cm:nnnn #1#2#3#4
@@ -393,13 +393,13 @@
 %</dvips>
 %    \end{macrocode}
 %
-% \subsection{\texttt{pdfmode} and \texttt{(x)dvipdfmx}}
+% \subsection{\LuaTeX{}, \pdfTeX{}, \texttt{dvipdfmx} and \XeTeX{}}
 %
-% Both \texttt{pdfmode} and \texttt{(x)dvipdfmx} directly produce PDF output
+% \LuaTeX{}, \pdfTeX{}, \texttt{dvipdfmx} and \XeTeX{} directly produce PDF output
 % and understand a shared set of specials for drawing commands.
 %
 %    \begin{macrocode}
-%<*dvipdfmx|pdfmode|xdvipdfmx>
+%<*dvipdfmx|luatex|pdftex|xetex>
 %    \end{macrocode}
 %
 % \subsubsection{Drawing}
@@ -575,25 +575,25 @@
 %
 % \begin{macro}{\@@_backend_cm:nnnn}
 % \begin{macro}{\@@_backend_cm_aux:nnnn}
-%   Another split here between \texttt{pdfmode} and \texttt{(x)dvipdfmx}.
+%   Another split here between \LuaTeX{}/pdfTeX{} and \texttt{dvipdfmx}/\XeTeX{}.
 %   In the former, we have a direct method to maintain alignment: the backend
-%   can use a matrix itself. For \texttt{(x)dvipdfmx}, we can to decompose the
+%   can use a matrix itself. For \texttt{dvipdfmx}/\XeTeX{}, we can to decompose the
 %   matrix into rotations and a scaling, then use those operations as they
 %   are handled by the backend. (There is backend support for matrix operations in
-%   \texttt{(x)dvipdfmx}, but as a matched pair so not suitable for the
+%   \texttt{dvipdfmx}/\XeTeX{}, but as a matched pair so not suitable for the
 %   \enquote{stand alone} transformation set up here.)
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_backend_cm:nnnn #1#2#3#4
   {
-%<*pdfmode>
+%<*luatex|pdftex>
     \__kernel_backend_matrix:n { #1 ~ #2 ~ #3 ~ #4 }
-%</pdfmode>
-%<*dvipdfmx|xdvipdfmx>
+%</luatex|pdftex>
+%<*dvipdfmx|xetex>
     \@@_backend_cm_decompose:nnnnN {#1} {#2} {#3} {#4}
       \@@_backend_cm_aux:nnnn
-%</dvipdfmx|xdvipdfmx>
+%</dvipdfmx|xetex>
   }
-%<*dvipdfmx|xdvipdfmx>
+%<*dvipdfmx|xetex>
 \cs_new_protected:Npn \@@_backend_cm_aux:nnnn #1#2#3#4
   {
     \__kernel_backend_literal:x
@@ -617,7 +617,7 @@
           { \fp_eval:n { round ( -#4 , 5 ) } }
       }
   }
-%</dvipdfmx|xdvipdfmx>
+%</dvipdfmx|xetex>
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -677,7 +677,7 @@
 %   way of specifying a transformation matrix exchanges where one would
 %   normally expect $B$ and $C$ to be.
 %    \begin{macrocode}
-%<*dvipdfmx|xdvipdfmx>
+%<*dvipdfmx|xetex>
 \cs_new_protected:Npn \@@_backend_cm_decompose:nnnnN #1#2#3#4#5
   {
     \use:x
@@ -720,7 +720,7 @@
       { #5 {#1} {#2} {#3} {#4} }
       { #5 {#1} {#3} {#2} {#4} }
   }
-%</dvipdfmx|xdvipdfmx>
+%</dvipdfmx|xetex>
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -736,17 +736,17 @@
 \cs_new_protected:Npn \@@_backend_box_use:Nnnnn #1#2#3#4#5
   {
     \__kernel_backend_scope_begin:
-%<*pdfmode>
+%<*luatex|pdftex>
     \@@_backend_cm:nnnn {#2} {#3} {#4} {#5}
-%</pdfmode>
-%<*dvipdfmx|xdvipdfmx>
+%</luatex|pdftex>
+%<*dvipdfmx|xetex>
     \__kernel_backend_literal:n
       { pdf:btrans~matrix~ #2 ~ #3 ~ #4 ~ #5 ~ 0 ~ 0 }
-%</dvipdfmx|xdvipdfmx>
+%</dvipdfmx|xetex>
     \hbox_overlap_right:n { \box_use:N #1 }
-%<*dvipdfmx|xdvipdfmx>
+%<*dvipdfmx|xetex>
     \__kernel_backend_literal:n { pdf:etrans }
-%</dvipdfmx|xdvipdfmx>
+%</dvipdfmx|xetex>
     \__kernel_backend_scope_end:
   }
 %    \end{macrocode}
@@ -753,7 +753,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</dvipdfmx|pdfmode|xdvipdfmx>
+%</dvipdfmx|luatex|pdftex|xetex>
 %    \end{macrocode}
 %
 % \subsection{\texttt{dvisvgm} backend}

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx	2020-09-02 21:34:30 UTC (rev 56243)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx	2020-09-02 21:36:32 UTC (rev 56244)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-08-07}
+% \date{Released 2020-09-01}
 %
 % \maketitle
 %
@@ -95,10 +95,10 @@
 %</dvips>
 %    \end{macrocode}
 %
-% \subsection{\texttt{pdfmode} backend}
+% \subsection{\LuaTeX{} and \pdfTeX{} backends}
 %
 %    \begin{macrocode}
-%<*pdfmode>
+%<*luatex|pdftex>
 %    \end{macrocode}
 %
 % \begin{variable}{\l_@@_graphics_attr_tl}
@@ -223,7 +223,7 @@
 % \begin{macro}{\@@_backend_include_eps:n}
 % \begin{variable}
 %   {\l_@@_backend_dir_str, \l_@@_backend_name_str, \l_@@_backend_ext_str}
-%   EPS graphics may be included in \texttt{pdfmode} by conversion to
+%   EPS graphics may be included in \LuaTeX{}/pdfTeX{} by conversion to
 %   PDF: this requires restricted shell escape. Modelled on the \pkg{epstopdf}
 %   \LaTeXe{} package, but simplified, conversion takes place here if we have
 %   shell access.
@@ -274,13 +274,13 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</pdfmode>
+%</luatex|pdftex>
 %    \end{macrocode}
 %
 % \subsection{\texttt{dvipdfmx} backend}
 %
 %    \begin{macrocode}
-%<*dvipdfmx|xdvipdfmx>
+%<*dvipdfmx|xetex>
 %    \end{macrocode}
 %
 % \begin{macro}
@@ -326,7 +326,7 @@
 %  \begin{macro}{\@@_backend_include_auxii:nnn, \@@_backend_include_auxii:xnn}
 %  \begin{macro}{\@@_backend_include_auxiii:nnn}
 %   The special syntax depends on the file type. There is a difference in
-%   how PDF graphics are best handled between |dvipdfmx| and |xdvipdfmx|: for
+%   how PDF graphics are best handled between |dvipdfmx| and \XeTeX{}: for
 %   the latter it is better to use the primitive route. The relevant code for
 %   that is included later in this file.
 %    \begin{macrocode}
@@ -425,13 +425,13 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</dvipdfmx|xdvipdfmx>
+%</dvipdfmx|xetex>
 %    \end{macrocode}
 %
-% \subsection{\texttt{xdvipdfmx} backend}
+% \subsection{\XeTeX{} backend}
 %
 %    \begin{macrocode}
-%<*xdvipdfmx>
+%<*xetex>
 %    \end{macrocode}
 %
 % \subsubsection{Images}
@@ -448,7 +448,7 @@
 % \begin{macro}{\@@_backend_getbb_auxiv:nnNnn, \@@_backend_getbb_auxiv:VnNnn}
 % \begin{macro}{\@@_backend_getbb_auxv:nNnn, \@@_backend_getbb_auxv:nNnn}
 % \begin{macro}[EXP]{\@@_backend_getbb_pagebox:w}
-%   For \texttt{xdvipdfmx}, there are two primitives that allow us to obtain
+%   For \XeTeX{}, there are two primitives that allow us to obtain
 %   the bounding box without needing \texttt{extractbb}. The only complexity
 %   is passing the various minor variations to a common core process. The
 %   \XeTeX{} primitive omits the text |box| from the page box specification,
@@ -536,7 +536,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</xdvipdfmx>
+%</xetex>
 %    \end{macrocode}
 %
 % \subsection{\texttt{dvisvgm} backend}

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx	2020-09-02 21:34:30 UTC (rev 56243)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx	2020-09-02 21:36:32 UTC (rev 56244)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-08-07}
+% \date{Released 2020-09-01}
 %
 % \maketitle
 %
@@ -67,6 +67,16 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{TeXcolorsetspotcolor, setspotcolor}
+%   Support for separation/spot colors: this strange naming is so
+%   things work with the color stack.
+%    \begin{macrocode}	
+TeXDict begin
+/TeXcolorsetspotcolor { setcustomcolor } def 
+end
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{pdf.globaldict}
 %   A small global dictionary for backend use.
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx	2020-09-02 21:34:30 UTC (rev 56243)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx	2020-09-02 21:36:32 UTC (rev 56244)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-08-07}
+% \date{Released 2020-09-01}
 %
 % \maketitle
 %
@@ -744,10 +744,10 @@
 %</dvips>
 %    \end{macrocode}
 %
-% \subsection{\texttt{pdfmode} backend}
+% \subsection{\LuaTeX{} and \pdfTeX{} backend}
 %
 %    \begin{macrocode}
-%<*pdfmode>
+%<*luatex|pdftex>
 %    \end{macrocode}
 %
 % \subsubsection{Annotations}
@@ -755,14 +755,17 @@
 % \begin{macro}{\@@_backend_annotation:nnnn}
 %   Simply pass the raw data through, just dealing with evaluation of dimensions.
 %    \begin{macrocode}
-\cs_new_protected:Npx \@@_backend_annotation:nnnn #1#2#3#4
+\cs_new_protected:Npn \@@_backend_annotation:nnnn #1#2#3#4
   {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D annot ~ }
-      { \tex_pdfannot:D }
-      width  ~ \exp_not:N \dim_eval:n {#1} ~
-      height ~ \exp_not:N \dim_eval:n {#2} ~
-      depth  ~ \exp_not:N \dim_eval:n {#3} ~
+%<*luatex>
+    \tex_pdfextension:D annot ~
+%</luatex>
+%<*pdftex>
+    \tex_pdfannot:D
+%</pdftex>
+      width  ~ \dim_eval:n {#1} ~
+      height ~ \dim_eval:n {#2} ~
+      depth  ~ \dim_eval:n {#3} ~
       {#4}
   }
 %    \end{macrocode}
@@ -769,14 +772,18 @@
 % \end{macro}
 %
 % \begin{macro}[EXP]{\@@_backend_annotation_last:}
-%   A tiny amount of extra data gets added here.
+%   A tiny amount of extra data gets added here; we use \texttt{x}-type
+%   expansion to get the space in the right place and form.
 %    \begin{macrocode}
 \cs_new:Npx \@@_backend_annotation_last:
   {
     \exp_not:N \int_value:w
-    \cs_if_exist:NTF \tex_pdffeedback:D
-      { \exp_not:N \tex_pdffeedback:D lastannot ~ }
-      { \exp_not:N \tex_pdflastannot:D }
+%<*luatex>
+      \exp_not:N \tex_pdffeedback:D lastannot
+%</luatex>
+%<*pdftex>
+      \exp_not:N \tex_pdfannot:D
+%</pdftex>
       \c_space_tl 0 ~ R
   }
 %    \end{macrocode}
@@ -792,19 +799,25 @@
   { \@@_backend_link_begin:nnnw {#1} { goto~name } {#2} }
 \cs_new_protected:Npn \@@_backend_link_begin_user:nnw #1#2
   { \@@_backend_link_begin:nnnw {#1} { user } {#2} }
-\cs_new_protected:Npx \@@_backend_link_begin:nnnw #1#2#3
+\cs_new_protected:Npn \@@_backend_link_begin:nnnw #1#2#3
   {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D startlink ~ }
-      { \tex_pdfstartlink:D }
-        attr {#1}
-        #2 {#3}
+%<*luatex>
+    \tex_pdfextension:D startlink ~
+%</luatex>
+%<*pdftex>
+    \tex_pdfstartlink:D
+%</pdftex>
+      attr {#1}
+      #2 {#3}
   }
-\cs_new_protected:Npx \@@_backend_link_end:
+\cs_new_protected:Npn \@@_backend_link_end:
   {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D endlink \scan_stop: }
-      { \tex_pdfendlink:D }
+%<*luatex>
+    \tex_pdfextension:D endlink \scan_stop:
+%</luatex>
+%<*pdftex>
+    \tex_pdfendlink:D
+%</pdftex>
   }
 %    \end{macrocode}
 % \end{macro}
@@ -817,9 +830,12 @@
 \cs_new:Npx \@@_backend_link_last:
   {
     \exp_not:N \int_value:w
-    \cs_if_exist:NTF \tex_pdffeedback:D
-      { \exp_not:N \tex_pdffeedback:D lastlink ~ }
-      { \exp_not:N \tex_pdflastlink:D }
+%<*luatex>
+      \exp_not:N \tex_pdffeedback:D lastlink
+%</luatex>
+%<*pdftex>
+      \exp_not:N \tex_pdflastlink:D
+%</pdftex>
       \c_space_tl 0 ~ R
   }
 %    \end{macrocode}
@@ -828,12 +844,15 @@
 % \begin{macro}{\@@_backend_link_margin:n}
 %   A simple task: pass the data to the primitive.
 %    \begin{macrocode}
-\cs_new_protected:Npx \@@_backend_link_margin:n #1
+\cs_new_protected:Npn \@@_backend_link_margin:n #1
   {
-    \cs_if_exist:NTF \tex_pdfvariable:D
-      { \exp_not:N \tex_pdfvariable:D linkmargin }
-      { \exp_not:N \tex_pdflinkmargin:D }
-        \exp_not:N \dim_eval:n {#1} \scan_stop:
+%<*luatex>
+    \tex_pdfvariable:D linkmargin
+%</luatex>
+%<*pdftex>
+    \tex_pdflinkmargin:D
+%</pdftex>
+      \dim_eval:n {#1} \scan_stop:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -844,13 +863,16 @@
 %   percentage, but we need to pass it as \emph{per mille}. The rectangle
 %   version is also easy as everything is build in.
 %    \begin{macrocode}
-\cs_new_protected:Npx \@@_backend_destination:nn #1#2
+\cs_new_protected:Npn \@@_backend_destination:nn #1#2
   {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \exp_not:N \tex_pdfextension:D dest ~ }
-      { \exp_not:N \tex_pdfdest:D }
+%<*luatex>
+    \tex_pdfextension:D dest ~
+%</luatex>
+%<*pdftex>
+    \tex_pdfdest:D
+%</pdftex>
         name {#1}
-        \exp_not:N \str_case:nnF {#2}
+        \str_case:nnF {#2}
           {
             { xyz }   { xyz }
             { fit }   { fit }
@@ -860,21 +882,24 @@
             { fith }  { fith }
             { fitv }  { fitv }
           }
-          { xyz ~ zoom \exp_not:N \fp_eval:n { #2 * 10 } }
+          { xyz ~ zoom \fp_eval:n { #2 * 10 } }
         \scan_stop:
   }
-\cs_new_protected:Npx \@@_backend_destination_box:nn #1#2
+\cs_new_protected:Npn \@@_backend_destination_box:nn #1#2
   {
     \group_begin:
       \hbox_set:Nn \l_@@_internal_box {#2}
-     \cs_if_exist:NTF \tex_pdfextension:D
-      { \exp_not:N \tex_pdfextension:D dest ~ }
-      { \exp_not:N \tex_pdfdest:D }
+%<*luatex>
+      \tex_pdfextension:D dest ~
+%</luatex>
+%<*pdftex>
+      \tex_pdfdest:D
+%</pdftex>
       name {#1}
       fitr ~
-        width  \exp_not:N \box_wd:N \l_@@_internal_box
-        height \exp_not:N \box_ht:N \l_@@_internal_box
-        depth  \exp_not:N \box_dp:N \l_@@_internal_box
+        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:
   }
@@ -885,19 +910,25 @@
 %
 % \begin{macro}{\@@_backend_catalog_gput:nn, \@@_backend_info_gput:nn}
 %    \begin{macrocode}
-\cs_new_protected:Npx \@@_backend_catalog_gput:nn #1#2
+\cs_new_protected:Npn \@@_backend_catalog_gput:nn #1#2
   {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D catalog }
-      { \tex_pdfcatalog:D }
-        { / #1 ~ #2 }
+%<*luatex>
+    \tex_pdfextension:D catalog
+%</luatex>
+%<*pdftex>
+    \tex_pdfcatalog:D
+%</pdftex>
+      { / #1 ~ #2 }
   }
-\cs_new_protected:Npx \@@_backend_info_gput:nn #1#2
+\cs_new_protected:Npn \@@_backend_info_gput:nn #1#2
   {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D info }
-      { \tex_pdfinfo:D }
-        { / #1 ~ #2 }
+%<*luatex>
+    \tex_pdfextension:D info
+%</luatex>
+%<*pdftex>
+    \tex_pdfinfo:D
+%</pdftex>
+      { / #1 ~ #2 }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -916,26 +947,25 @@
 %   Declaring objects means reserving at the PDF level plus starting
 %   tracking.
 %    \begin{macrocode}
-\group_begin:
-  \cs_set_protected:Npn \@@_tmp:w #1#2
-    {
-      \cs_new_protected:Npx \@@_backend_object_new:nn ##1##2
-        {
-          #1 reserveobjnum ~
-          \int_const:cn
-            { c_@@_backend_object_ \exp_not:N \tl_to_str:n {##1} _int }
-            {#2}
-          \prop_gput:Nnn \exp_not:N \g_@@_backend_object_prop {##1} {##2}
-        }
-    }
-  \cs_if_exist:NTF \tex_pdfextension:D
-    {
-      \@@_tmp:w
-        { \tex_pdfextension:D obj ~ }
-        { \exp_not:N \tex_pdffeedback:D lastobj }
-    }
-    { \@@_tmp:w { \tex_pdfobj:D } { \tex_pdflastobj:D } }
-\group_end:
+\cs_new_protected:Npn \@@_backend_object_new:nn #1#2
+  {
+%<*luatex>
+    \tex_pdfextension:D obj ~
+%</luatex>
+%<*pdftex>
+    \tex_pdfobj:D
+%</pdftex>
+      reserveobjnum ~
+      \int_const:cn
+        { c_@@_backend_object_ \tl_to_str:n {#1} _int }
+%<*luatex>
+        { \tex_pdffeedback:D lastobj }
+%</luatex>
+%<*pdftex>
+        { \tex_pdflastobj:D }
+%</pdftex>
+    \prop_gput:Nnn \exp_not:N \g_@@_backend_object_prop {#1} {#2}
+  }
 \cs_new:Npn \@@_backend_object_ref:n #1
   { \int_use:c { c_@@_backend_object_ \tl_to_str:n {#1} _int } ~ 0 ~ R }
 %    \end{macrocode}
@@ -947,36 +977,34 @@
 %   Writing the data needs a little information about the structure of the
 %   object.
 %    \begin{macrocode}
-\group_begin:
-  \cs_set_protected:Npn \@@_tmp:w #1
-    {
-      \cs_new_protected:Npn \@@_backend_object_write:nn ##1##2
+\cs_new_protected:Npn \@@_backend_object_write:nn #1#2
+  {
+%<*luatex>
+    \tex_immediate:D \tex_pdfextension:D obj ~
+%</luatex>
+%<*pdftex>
+    \tex_immediate:D \tex_pdfobj:D
+%</pdftex>
+      useobjnum ~
+      \int_use:c
+        { c_@@_backend_object_ \tl_to_str:n {#1} _int }
+      \str_case_e:nn
+        { \prop_item:Nn \g_@@_backend_object_prop {#1} }
         {
-          \tex_immediate:D #1 useobjnum ~
-          \int_use:c
-            { c_@@_backend_object_ \tl_to_str:n {##1} _int }
-            \str_case_e:nn
-              { \prop_item:Nn \g_@@_backend_object_prop {##1} }
-              {
-                { array } { { [ ~ \exp_not:n {##2} ~ ] } }
-                { dict }  { { << ~ \exp_not:n {##2} ~ >> } }
-                { fstream }
-                  {
-                    stream ~ attr ~ { \@@_exp_not_i:nn ##2 } ~
-                      file ~ { \@@_exp_not_ii:nn ##2 }
-                  }
-                { stream }
-                  {
-                    stream ~ attr ~ { \@@_exp_not_i:nn ##2 } ~
-                      { \@@_exp_not_ii:nn ##2 }
-                  }
-              }
+          { array } { { [ ~ \exp_not:n {#2} ~ ] } }
+          { dict }  { { << ~ \exp_not:n {#2} ~ >> } }
+          { fstream }
+            {
+              stream ~ attr ~ { \@@_exp_not_i:nn #2 } ~
+                file ~ { \@@_exp_not_ii:nn #2 }
+            }
+          { stream }
+            {
+              stream ~ attr ~ { \@@_exp_not_i:nn #2 } ~
+                { \@@_exp_not_ii:nn #2 }
+            }
         }
-    }
-  \cs_if_exist:NTF \tex_pdfextension:D
-    { \@@_tmp:w { \tex_pdfextension:D obj ~ } }
-    { \@@_tmp:w { \tex_pdfobj:D } }
-\group_end:
+  }
 \cs_generate_variant:Nn \@@_backend_object_write:nn { nx }
 \cs_new:Npn \@@_exp_not_i:nn #1#2 { \exp_not:n {#1} }
 \cs_new:Npn \@@_exp_not_ii:nn #1#2 { \exp_not:n {#2} }
@@ -987,34 +1015,31 @@
 % \begin{macro}{\@@_backend_object_now:nn, \@@_backend_object_now:nx}
 %   Much like writing, but direct creation.
 %    \begin{macrocode}
-\group_begin:
-  \cs_set_protected:Npn \@@_tmp:w #1
-    {
-      \cs_new_protected:Npn \@@_backend_object_now:nn ##1##2
+\cs_new_protected:Npn \@@_backend_object_now:nn #1#2
+  {
+%<*luatex>
+    \tex_immediate:D \tex_pdfextension:D obj ~
+%</luatex>
+%<*pdftex>
+    \tex_immediate:D \tex_pdfobj:D
+%</pdftex>
+      \str_case:nn
+        {#1}
         {
-          \tex_immediate:D #1
-            \str_case:nn
-              {##1}
-              {
-                { array } { { [ ~ \exp_not:n {##2} ~ ] } }
-                { dict }  { { << ~ \exp_not:n {##2} ~ >> } }
-                { fstream }
-                  {
-                    stream ~ attr ~ { \@@_exp_not_i:nn ##2 } ~
-                      file ~ { \@@_exp_not_ii:nn ##2 }
-                  }
-                { stream }
-                  {
-                    stream ~ attr ~ { \@@_exp_not_i:nn ##2 } ~
-                      { \@@_exp_not_ii:nn ##2 }
-                  }
-              }
+          { array } { { [ ~ \exp_not:n {#2} ~ ] } }
+          { dict }  { { << ~ \exp_not:n {#2} ~ >> } }
+          { fstream }
+            {
+              stream ~ attr ~ { \@@_exp_not_i:nn #2 } ~
+                file ~ { \@@_exp_not_ii:nn #2 }
+            }
+          { stream }
+            {
+              stream ~ attr ~ { \@@_exp_not_i:nn #2 } ~
+                { \@@_exp_not_ii:nn #2 }
+            }
         }
-    }
-  \cs_if_exist:NTF \tex_pdfextension:D
-    { \@@_tmp:w { \tex_pdfextension:D obj ~ } }
-    { \@@_tmp:w { \tex_pdfobj:D } }
-\group_end:
+  }
 \cs_generate_variant:Nn \@@_backend_object_now:nn { nx }
 %    \end{macrocode}
 % \end{macro}
@@ -1025,9 +1050,12 @@
 \cs_new:Npx \@@_backend_object_last:
   {
     \exp_not:N \int_value:w
-    \cs_if_exist:NTF \tex_pdffeedback:D
-      { \exp_not:N \tex_pdffeedback:D lastobj ~ }
-      { \exp_not:N \tex_pdflastobj:D }
+%<*luatex>
+      \exp_not:N \tex_pdffeedback:D lastobj ~
+%</luatex>
+%<*pdftex>
+      \exp_not:N \tex_pdflastobj:D
+%</pdftex>
       \c_space_tl 0 ~ R
   }
 %    \end{macrocode}
@@ -1034,14 +1062,17 @@
 % \end{macro}
 %
 % \begin{macro}[EXP]{\@@_backend_pageobject_ref:n}
-%   The usual wrapper situation.
+%   The usual wrapper situation; the three spaces here are essential.
 %    \begin{macrocode}
 \cs_new:Npx \@@_backend_pageobject_ref:n #1
   {
     \exp_not:N \int_value:w
-      \cs_if_exist:NTF \tex_pdffeedback:D
-        { \exp_not:N \tex_pdffeedback:D pageref }
-        { \exp_not:N \tex_pdfpageref:D }
+%<*luatex>
+      \exp_not:N \tex_pdffeedback:D pageref
+%</luatex>
+%<*pdftex>
+      \exp_not:N \tex_pdfpageref:D
+%</pdftex>
           \c_space_tl #1 \c_space_tl \c_space_tl \c_space_tl 0 ~ R
   }
 %    \end{macrocode}
@@ -1054,13 +1085,16 @@
 % \begin{macro}{\@@_backend_objcompresslevel:n}
 %   Simply pass data to the engine.
 %    \begin{macrocode}
-\cs_new_protected:Npx \@@_backend_compresslevel:n #1
+\cs_new_protected:Npn \@@_backend_compresslevel:n #1
   {
-    \exp_not:N \tex_global:D
-    \cs_if_exist:NTF \tex_pdfcompresslevel:D
-      { \tex_pdfcompresslevel:D }
-      { \tex_pdfvariable:D compresslevel }
-      \exp_not:N \int_value:w \exp_not:N \int_eval:n {#1} \scan_stop:
+    \tex_global:D
+%<*luatex>
+      \tex_pdfvariable:D compresslevel
+%</luatex>
+%<*pdftex>
+      \tex_pdfcompresslevel:D
+%</pdftex>
+        \int_value:w \int_eval:n {#1} \scan_stop:
   }
 \cs_new_protected:Npn \@@_backend_compress_objects:n #1
   {
@@ -1068,13 +1102,16 @@
       { \@@_backend_objcompresslevel:n { 2 } }
       { \@@_backend_objcompresslevel:n { 0 } }
   }
-\cs_new_protected:Npx \@@_backend_objcompresslevel:n #1
+\cs_new_protected:Npn \@@_backend_objcompresslevel:n #1
   {
-    \exp_not:N \tex_global:D
-    \cs_if_exist:NTF \tex_pdfobjcompresslevel:D
-      { \tex_pdfobjcompresslevel:D }
-      { \tex_pdfvariable:D objcompresslevel }
-      #1 \scan_stop:
+    \tex_global:D
+%<*luatex>
+      \tex_pdfvariable:D objcompresslevel
+%</luatex>
+%<*pdftex>
+      \tex_pdfobjcompresslevel:D
+%</pdftex>
+        #1 \scan_stop:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1083,61 +1120,65 @@
 %
 % \begin{macro}
 %   {\@@_backend_version_major_gset:n, \@@_backend_version_minor_gset:n}
-%   At present, we don't have a primitive for the major version in \pdfTeX{},
-%   but we anticipate one \ldots
+%   The availability of the primitive is not universal, so we have to test
+%   at load time.
 %    \begin{macrocode}
 \cs_new_protected:Npx \@@_backend_version_major_gset:n #1
   {
-    \cs_if_exist:NTF \tex_pdfvariable:D
+%<*luatex>
+    \int_compare:nNnT \tex_luatexversion:D > { 106 }
       {
-        \int_compare:nNnT \tex_luatexversion:D > { 106 }
-          {
-            \exp_not:N \tex_global:D \tex_pdfvariable:D majorversion
-              \exp_not:N \int_eval:n {#1} \scan_stop:
-          }
+        \exp_not:N \tex_global:D \tex_pdfvariable:D majorversion
+          \exp_not:N \int_eval:n {#1} \scan_stop:
       }
+%</luatex>
+%<*pdftex>
+    \cs_if_exist:NT \tex_pdfmajorversion:D
       {
-        \cs_if_exist:NT \tex_pdfmajorversion:D
-          {
-            \exp_not:N \tex_global:D \tex_pdfmajorversion:D
-              \exp_not:N \int_eval:n {#1} \scan_stop:
-          }
+        \exp_not:N \tex_global:D \tex_pdfmajorversion:D
+          \exp_not:N \int_eval:n {#1} \scan_stop:
       }
+%</pdftex>
   }
-\cs_new_protected:Npx \@@_backend_version_minor_gset:n #1
+\cs_new_protected:Npn \@@_backend_version_minor_gset:n #1
   {
-    \exp_not:N \tex_global:D
-    \cs_if_exist:NTF \tex_pdfminorversion:D
-      { \exp_not:N \tex_pdfminorversion:D }
-      { \tex_pdfvariable:D minorversion }
-        \exp_not:N \int_eval:n {#1} \scan_stop:
+    \tex_global:D
+%<*luatex>
+      \tex_pdfvariable:D minorversion
+%</luatex>
+%<*pdftex>
+      \tex_pdfminorversion:D
+%</pdftex>
+        \int_eval:n {#1} \scan_stop:
   }
 %    \end{macrocode}
 % \end{macro}
 %
 % \begin{macro}[EXP]{\@@_backend_version_major:, \@@_backend_version_minor:}
-%   At present, we don't have a primitive for the major version!
+%   As above.
 %    \begin{macrocode}
 \cs_new:Npx \@@_backend_version_major:
   {
-    \cs_if_exist:NTF \tex_pdfvariable:D
-      {
-        \int_compare:nNnTF \tex_luatexversion:D > { 106 }
-          { \exp_not:N \tex_the:D \tex_pdfvariable:D majorversion }
-          { 1 }
-      }
-      {
-        \cs_if_exist:NTF \tex_pdfmajorversion:D
-          { \exp_not:N \tex_the:D \tex_pdfmajorversion:D }
-          { 1 }
-      }
+%<*luatex>
+    \int_compare:nNnTF \tex_luatexversion:D > { 106 }
+      { \exp_not:N \tex_the:D \tex_pdfvariable:D majorversion }
+      { 1 }
+%</luatex>
+%<*pdftex>
+    \cs_if_exist:NTF \tex_pdfmajorversion:D
+      { \exp_not:N \tex_the:D \tex_pdfmajorversion:D }
+      { 1 }
+%</pdftex>
   }
-\cs_new:Npx \@@_backend_version_minor:
+\cs_new:Npn \@@_backend_version_minor:
   {
-    \exp_not:N \tex_the:D
-    \cs_if_exist:NTF \tex_pdfminorversion:D
-      { \exp_not:N \tex_pdfminorversion:D }
-      { \tex_pdfvariable:D minorversion }
+    \tex_the:D
+%<*luatex>
+      \tex_pdfvariable:D minorversion
+%</luatex>
+%<*pdftex>
+      \tex_pdfminorversion:D
+%</pdftex>
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1158,13 +1199,13 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</pdfmode>
+%</luatex|pdftex>
 %    \end{macrocode}
 %
 % \subsection{\texttt{dvipdfmx} backend}
 %
 %    \begin{macrocode}
-%<*dvipdfmx|xdvipdfmx>
+%<*dvipdfmx|xetex>
 %    \end{macrocode}
 %
 % \begin{macro}{\@@_backend:n, \@@_backend:x}
@@ -1290,7 +1331,7 @@
 % \end{macro}
 %
 % \begin{macro}[EXP]{\@@_backend_pageobject_ref:n}
-%   Page references are easy in \texttt{(x)dvipdfmx}.
+%   Page references are easy in \texttt{dvipdfmx}/\XeTeX{}.
 %    \begin{macrocode}
 \cs_new:Npn \@@_backend_pageobject_ref:n #1
   { @page #1 }
@@ -1300,7 +1341,7 @@
 % \subsubsection{Annotations}
 %
 % \begin{variable}{\g_@@_landscape_bool}
-%   There is a bug in \texttt{(x)dvipdfmx} which means annotations do
+%   There is a bug in \texttt{dvipdfmx}/\XeTeX{} which means annotations do
 %   not rotate. As such, we need to know if landscape is active.
 %    \begin{macrocode}
 \bool_new:N \g_@@_landscape_bool
@@ -1524,7 +1565,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</dvipdfmx|xdvipdfmx>
+%</dvipdfmx|xetex>
 %    \end{macrocode}
 %
 % \subsection{\texttt{dvisvgm} backend}

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend.ins	2020-09-02 21:34:30 UTC (rev 56243)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend.ins	2020-09-02 21:36:32 UTC (rev 56244)
@@ -96,27 +96,39 @@
   }
 \generate
   {
-    \file{l3backend-pdfmode.def}
+    \file{l3backend-luatex.def}
       {
-        \from{l3backend-basics.dtx}  {package,pdfmode}
-        \from{l3backend-color.dtx}   {package,pdfmode}
-        \from{l3backend-box.dtx}     {package,pdfmode}
-        \from{l3backend-draw.dtx}    {package,pdfmode}
-        \from{l3backend-graphics.dtx}{package,pdfmode}
-        \from{l3backend-pdf.dtx}     {package,pdfmode}
+        \from{l3backend-basics.dtx}  {package,luatex}
+        \from{l3backend-color.dtx}   {package,luatex}
+        \from{l3backend-box.dtx}     {package,luatex}
+        \from{l3backend-draw.dtx}    {package,luatex}
+        \from{l3backend-graphics.dtx}{package,luatex}
+        \from{l3backend-pdf.dtx}     {package,luatex}
       }
   }
 \generate
   {
-    \file{l3backend-xdvipdfmx.def}
+    \file{l3backend-pdftex.def}
       {
-        \from{l3backend-basics.dtx}  {package,xdvipdfmx}
-        \from{l3backend-color.dtx}   {package,xdvipdfmx}
-        \from{l3backend-box.dtx}     {package,xdvipdfmx}
-        \from{l3backend-draw.dtx}    {package,xdvipdfmx}
-        \from{l3backend-graphics.dtx}{package,xdvipdfmx}
-        \from{l3backend-pdf.dtx}     {package,xdvipdfmx}
+        \from{l3backend-basics.dtx}  {package,pdftex}
+        \from{l3backend-color.dtx}   {package,pdftex}
+        \from{l3backend-box.dtx}     {package,pdftex}
+        \from{l3backend-draw.dtx}    {package,pdftex}
+        \from{l3backend-graphics.dtx}{package,pdftex}
+        \from{l3backend-pdf.dtx}     {package,pdftex}
       }
   }
+\generate
+  {
+    \file{l3backend-xetex.def}
+      {
+        \from{l3backend-basics.dtx}  {package,xetex}
+        \from{l3backend-color.dtx}   {package,xetex}
+        \from{l3backend-box.dtx}     {package,xetex}
+        \from{l3backend-draw.dtx}    {package,xetex}
+        \from{l3backend-graphics.dtx}{package,xetex}
+        \from{l3backend-pdf.dtx}     {package,xetex}
+      }
+  }
 
 \endbatchfile

Modified: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def	2020-09-02 21:34:30 UTC (rev 56243)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def	2020-09-02 21:36:32 UTC (rev 56244)
@@ -25,8 +25,22 @@
 %% 
 %% File: l3backend-basics.dtx
 \ProvidesExplFile
-  {l3backend-dvipdfmx.def}{2020-08-07}{}
+  {l3backend-dvipdfmx.def}{2020-09-01}{}
   {L3 backend support: dvipdfmx}
+\cs_if_exist:NTF \__kernel_dependency_version_check:nn
+  {
+    \__kernel_dependency_version_check:nn {2020-09-01}
+      {l3backend-dvipdfmx.def}
+  }
+  {
+    \cs_if_exist_use:cF { @latex at error } { \errmessage }
+      {
+        Mismatched~LaTeX~support~files~detected. \MessageBreak
+        Loading~aborted!
+      }
+      { \use:c { @ehd } }
+    \tex_endinput:D
+  }
 \cs_new_eq:NN \__kernel_backend_literal:e \tex_special:D
 \cs_new_protected:Npn \__kernel_backend_literal:n #1
   { \__kernel_backend_literal:e { \exp_not:n {#1} } }
@@ -41,6 +55,15 @@
 \cs_new_protected:Npn \__kernel_backend_scope_end:
   { \__kernel_backend_literal:n { x:grestore } }
 %% File: l3backend-color.dtx
+\cs_new_protected:Npn \__color_backend_select_cmyk:n #1
+  {
+    \__kernel_backend_literal:n { pdf: bc ~ [#1] }
+    \group_insert_after:N \__color_backend_reset:
+  }
+\cs_new_eq:NN \__color_backend_select_gray:n \__color_backend_select_cmyk:n
+\cs_new_eq:NN \__color_backend_select_rgb:n \__color_backend_select_cmyk:n
+\cs_new_protected:Npn \__color_backend_reset:
+  { \__kernel_backend_literal:n { pdf: ec } }
 \cs_new_protected:Npn \__color_backend_pickup:N #1 { }
 \cs_if_exist:cT { ver at color.sty }
   {
@@ -62,21 +85,59 @@
     \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \s__color_stop #3
       { \tl_set:Nn #3 { {#1} {#2} } }
   }
-\cs_new_protected:Npn \__color_backend_select_cmyk:n #1
-  { \__color_backend_select:n { cmyk ~ #1 } }
-\cs_new_protected:Npn \__color_backend_select_gray:n #1
-  { \__color_backend_select:n { gray ~ #1 } }
-\cs_new_protected:Npn \__color_backend_select_rgb:n #1
-  { \__color_backend_select:n { rgb ~ #1 } }
-\cs_new_protected:Npn \__color_backend_select:n #1
+\cs_new_protected:Npn \__color_backend_select_separation:nn #1#2
+  { \__color_backend_select:n { @#1 ~ [#2] } }
+\cs_new_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5
   {
-    \__kernel_backend_literal:n { color~push~ #1 }
-    \group_insert_after:N \__color_backend_reset:
+    \__color_backend_separation_init:n
+      {
+        /Separation
+        / \str_convert_pdfname:n {#1} ~ #2 ~
+        <<
+          /FunctionType ~ 2
+          /Domain ~ [0 ~ 1]
+          \tl_if_blank:nF {#3} { /Range ~ [#3] }
+          /C0 ~ [#4] ~
+          /C1 ~ [#5] /N ~ 1
+        >>
+      }
   }
-\cs_new_protected:Npn \__color_backend_reset:
-  { \__kernel_backend_literal:n { color~pop } }
-\cs_new_protected:Npn \__color_backend_select_separation:nn #1#2
-  { \__color_backend_select:n {#1} }
+\cs_if_exist:NF \pdf_object_now:nn
+  { \cs_gset_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { } }
+\cs_new_protected:Npn \__color_backend_separation_init:n #1
+  {
+    \__kernel_backend_literal:x
+      {
+        pdf:obj ~ @ color \int_use:N \g__color_separation_int \c_space_tl
+          [#1]
+      }
+  }
+\cs_new_protected:Npn \__color_backend_separation_init_cielab:nnnnn #1#2#3#4#5
+  {
+    \__color_backend_separation_init:nnnnn
+      {#2}
+      { \pdf_object_ref:n { __color_illuminant_cielab_ #1 } }
+      { \c__color_model_range_lab_tl }
+      { 100 ~ 0 ~ 0 }
+      { #3 ~ #4 ~ #5 }
+  }
+\cs_if_exist:NF \pdf_object_now:nn
+  { \cs_gset_protected:Npn \__color_backend_separation_init_cielab:nnnnn #1#2#3#4#5 { } }
+\cs_new_protected:Npn \__color_backend_separation_init_cielab:n #1
+  {
+    \pdf_object_new:nn { __color_illuminant_cielab_ #1 } { array }
+    \pdf_object_write:nx { __color_illuminant_cielab_ #1 }
+      {
+        /Lab ~
+        <<
+         /WhitePoint ~
+           [ \tl_use:c { c__color_model_whitepoint_cielab_ #1 _tl } ]
+         /Range ~ [ \c__color_model_range_lab_tl ]
+        >>
+     }
+  }
+\cs_if_exist:NF \pdf_object_new:nn
+  { \cs_gset_protected:Npn \__color_backend_separation_init_cielab:n #1 { } }
 \cs_new_protected:Npn \__color_backend_fill_cmyk:n #1
   { \__kernel_backend_literal_pdf:n { #1 ~ k } }
 \cs_new_protected:Npn \__color_backend_fill_gray:n #1

Modified: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def	2020-09-02 21:34:30 UTC (rev 56243)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def	2020-09-02 21:36:32 UTC (rev 56244)
@@ -25,8 +25,22 @@
 %% 
 %% File: l3backend-basics.dtx
 \ProvidesExplFile
-  {l3backend-dvips.def}{2020-08-07}{}
+  {l3backend-dvips.def}{2020-09-01}{}
   {L3 backend support: dvips}
+\cs_if_exist:NTF \__kernel_dependency_version_check:nn
+  {
+    \__kernel_dependency_version_check:nn {2020-09-01}
+      {l3backend-dvips.def}
+  }
+  {
+    \cs_if_exist_use:cF { @latex at error } { \errmessage }
+      {
+        Mismatched~LaTeX~support~files~detected. \MessageBreak
+        Loading~aborted!
+      }
+      { \use:c { @ehd } }
+    \tex_endinput:D
+  }
 \cs_new_eq:NN \__kernel_backend_literal:e \tex_special:D
 \cs_new_protected:Npn \__kernel_backend_literal:n #1
   { \__kernel_backend_literal:e { \exp_not:n {#1} } }
@@ -37,15 +51,13 @@
 \cs_new_protected:Npn \__kernel_backend_postscript:n #1
   { \__kernel_backend_literal:n { ps: SDict ~ begin ~ #1 ~ end } }
 \cs_generate_variant:Nn \__kernel_backend_postscript:n { x }
-\cs_if_exist:NTF \AtBeginDvi
-  { \AtBeginDvi }
-  { \use:n }
-    {
-      \bool_lazy_and:nnT
-        { \cs_if_exist_p:N \g__kernel_backend_header_bool }
-        { \g__kernel_backend_header_bool }
+\bool_if:NT \g__kernel_backend_header_bool
+  {
+    \cs_if_exist:NTF \AtBeginDvi
+      { \AtBeginDvi }
+      { \use:n }
         { \__kernel_backend_literal:n { header = l3backend-dvips.pro } }
-    }
+  }
 \cs_new_protected:Npn \__kernel_backend_align_begin:
   {
     \__kernel_backend_literal:n { ps::[begin] }
@@ -99,7 +111,40 @@
 \cs_new_protected:Npn \__color_backend_reset:
   { \__kernel_backend_literal:n { color~pop } }
 \cs_new_protected:Npn \__color_backend_select_separation:nn #1#2
-  { \__color_backend_select:n {#1} }
+  { \__color_backend_select:n { setspotcolor ~ #1 ~ #2 } }
+\cs_new_protected:Npx \__color_backend_separation_init:nnnnn #1#2#3#4#5
+  {
+    \bool_if:NT \g__kernel_backend_header_bool
+      {
+        \cs_if_exist:NTF \AtBeginDvi
+          { \AtBeginDvi }
+          { \use:n }
+            {
+                \exp_not:N \__color_backend_separation_init:nnn
+                  {#1} {#2} {#5}
+            }
+      }
+  }
+\cs_new_protected:Npn \__color_backend_separation_init:nnn #1#2#3
+  {
+    \__kernel_backend_literal:e
+      {
+        !
+        TeXDict ~ begin ~
+        /color \int_use:N \g__color_separation_int \c_space_tl
+        [#3] ~ aload ~ pop ~ ( \str_convert_pdfname:n {#1} ) ~
+        find \__color_backend_separation_init:n {#2} customcolor ~ def ~
+        end
+      }
+  }
+\cs_new:Npn \__color_backend_separation_init:n #1
+  {
+    \__color_backend_separation_init:w #1 /Device #1 /Device \s__color_stop
+  }
+\cs_new:Npn \__color_backend_separation_init:w #1 /Device #2 /Device #3 \s__color_stop
+  { \str_lowercase:n {#2} }
+\cs_new_protected:Npn \__color_backend_separation_init_cielab:nnnnn #1#2#3#4#5 { }
+\cs_new_protected:Npn \__color_backend_separation_init_cielab:n #1 { }
 \cs_new_protected:Npn \__color_backend_fill_cmyk:n #1
   { \__kernel_backend_postscript:n { /color.fc { #1 ~ setcmykcolor } def } }
 \cs_new_protected:Npn \__color_backend_fill_gray:n #1

Modified: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def	2020-09-02 21:34:30 UTC (rev 56243)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def	2020-09-02 21:36:32 UTC (rev 56244)
@@ -25,8 +25,22 @@
 %% 
 %% File: l3backend-basics.dtx
 \ProvidesExplFile
-  {l3backend-dvisvgm.def}{2020-08-07}{}
+  {l3backend-dvisvgm.def}{2020-09-01}{}
   {L3 backend support: dvisvgm}
+\cs_if_exist:NTF \__kernel_dependency_version_check:nn
+  {
+    \__kernel_dependency_version_check:nn {2020-09-01}
+      {l3backend-dvisvgm.def}
+  }
+  {
+    \cs_if_exist_use:cF { @latex at error } { \errmessage }
+      {
+        Mismatched~LaTeX~support~files~detected. \MessageBreak
+        Loading~aborted!
+      }
+      { \use:c { @ehd } }
+    \tex_endinput:D
+  }
 \cs_new_eq:NN \__kernel_backend_literal:e \tex_special:D
 \cs_new_protected:Npn \__kernel_backend_literal:n #1
   { \__kernel_backend_literal:e { \exp_not:n {#1} } }
@@ -106,8 +120,10 @@
   }
 \cs_new_protected:Npn \__color_backend_reset:
   { \__kernel_backend_literal:n { color~pop } }
-\cs_new_protected:Npn \__color_backend_select_separation:nn #1#2
-  { \__color_backend_select:n {#1} }
+\cs_new_protected:Npn \__color_backend_select_separation:nn #1#2 { }
+\cs_new_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { }
+\cs_new_protected:Npn \__color_backend_separation_init_cielab:nnnnn #1#2#3#4#5 { }
+\cs_new_protected:Npn \__color_backend_separation_init_cielab:n #1 { }
 \cs_new_protected:Npn \__color_backend_fill_cmyk:n #1
   { \__color_backend_cmyk:nw { fill } #1 \s__color_stop }
 \cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1

Added: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def	2020-09-02 21:36:32 UTC (rev 56244)
@@ -0,0 +1,670 @@
+%%
+%% This is file `l3backend-luatex.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% l3backend-basics.dtx  (with options: `package,luatex')
+%% l3backend-color.dtx  (with options: `package,luatex')
+%% l3backend-box.dtx  (with options: `package,luatex')
+%% l3backend-draw.dtx  (with options: `package,luatex')
+%% l3backend-graphics.dtx  (with options: `package,luatex')
+%% l3backend-pdf.dtx  (with options: `package,luatex')
+%% 
+%% Copyright (C) 1990-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:
+%% 
+%%    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.
+%% 
+%% File: l3backend-basics.dtx
+\ProvidesExplFile
+  {l3backend-luatex.def}{2020-09-01}{}
+  {L3 backend support: PDF output (LuaTeX)}
+\cs_if_exist:NTF \__kernel_dependency_version_check:nn
+  {
+    \__kernel_dependency_version_check:nn {2020-09-01}
+      {l3backend-luatex.def}
+  }
+  {
+    \cs_if_exist_use:cF { @latex at error } { \errmessage }
+      {
+        Mismatched~LaTeX~support~files~detected. \MessageBreak
+        Loading~aborted!
+      }
+      { \use:c { @ehd } }
+    \tex_endinput:D
+  }
+\cs_new_eq:NN \__kernel_backend_literal:e \tex_special:D
+\cs_new_protected:Npn \__kernel_backend_literal:n #1
+  { \__kernel_backend_literal:e { \exp_not:n {#1} } }
+\cs_generate_variant:Nn \__kernel_backend_literal:n { x }
+\cs_new_protected:Npn \__kernel_backend_literal_pdf:n #1
+  {
+    \tex_pdfextension:D literal
+      { \exp_not:n {#1} }
+  }
+\cs_generate_variant:Nn \__kernel_backend_literal_pdf:n { x }
+\cs_new_protected:Npn \__kernel_backend_literal_page:n #1
+  {
+    \tex_pdfextension:D literal ~
+        page { \exp_not:n {#1} }
+  }
+\cs_new_protected:Npn \__kernel_backend_scope_begin:
+  {
+    \tex_pdfextension:D save \scan_stop:
+  }
+\cs_new_protected:Npn \__kernel_backend_scope_end:
+  {
+    \tex_pdfextension:D restore \scan_stop:
+  }
+\cs_new_protected:Npn \__kernel_backend_matrix:n #1
+  {
+    \tex_pdfextension:D setmatrix
+        { \exp_not:n {#1} }
+  }
+\cs_generate_variant:Nn \__kernel_backend_matrix:n { x }
+%% File: l3backend-color.dtx
+\cs_new_protected:Npn \__color_backend_pickup:N #1 { }
+\cs_if_exist:cT { ver at color.sty }
+  {
+    \cs_set_protected:Npn \__color_backend_pickup:N #1
+      {
+        \exp_last_unbraced:Nx \__color_backend_pickup:w
+          { \current at color } ~ 0 ~ 0 ~ 0 \s__color_stop #1
+      }
+    \cs_new_protected:Npn \__color_backend_pickup:w
+      #1 ~ #2 ~ #3 ~ #4 ~ #5 ~ #6 \s__color_stop #7
+      {
+        \str_if_eq:nnTF {#2} { g }
+          { \tl_set:Nn #7 { { gray } {#1} } }
+          {
+            \str_if_eq:nnTF {#4} { rg }
+              { \tl_set:Nn #7 { { rgb } { #1 ~ #2 ~ #3 } } }
+              {
+                 \str_if_eq:nnTF {#5} { k }
+                   { \tl_set:Nn #7 { { cmyk } { #1 ~ #2 ~ #3 ~ #4 } } }
+                   {
+                     \str_if_eq:nnTF {#2} { cs }
+                       {
+                         \tl_set:Nx #7 { { \use:n #1 } { #5 } }
+                       }
+                       {
+                         \tl_set:Nn #7 { { gray } { 0 } }
+                       }
+                   }
+              }
+          }
+      }
+  }
+\int_new:N \l__kernel_color_stack_int
+\cs_new_protected:Npn \__color_backend_select_cmyk:n #1
+  { \__color_backend_select:n { #1 ~ k ~ #1 ~ K } }
+\cs_new_protected:Npn \__color_backend_select_gray:n #1
+  { \__color_backend_select:n { #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
+  {
+    \tex_pdfextension:D colorstack
+      \l__kernel_color_stack_int push {#1}
+    \group_insert_after:N \__color_backend_reset:
+  }
+\cs_new_protected:Npn \__color_backend_reset:
+  {
+    \tex_pdfextension:D colorstack
+      \l__kernel_color_stack_int pop \scan_stop:
+  }
+\cs_new_protected:Npn \__color_backend_select_separation:nn #1#2
+  { \__color_backend_select:n { /#1 ~ cs ~ /#1 ~ CS ~ #2 ~ scn ~ #2 ~ SCN } }
+\cs_new_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5
+  {
+    \__color_backend_separation_init:n
+      {
+        /Separation
+        / \str_convert_pdfname:n {#1} ~ #2 ~
+        <<
+          /FunctionType ~ 2
+          /Domain ~ [0 ~ 1]
+          \tl_if_blank:nF {#3} { /Range ~ [#3] }
+          /C0 ~ [#4] ~
+          /C1 ~ [#5] /N ~ 1
+        >>
+      }
+    \use:x
+      {
+        \pdfcoredict_gput:nnn
+          { Page / Resources / ColorSpace }
+          { color \int_use:N \g__color_separation_int }
+          { \pdf_object_last: }
+      }
+  }
+\cs_if_exist:NF \pdf_object_now:nn
+  { \cs_gset_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { } }
+\cs_new_protected:Npn \__color_backend_separation_init:n #1
+  {
+    \pdf_object_now:nx { array } {#1}
+  }
+\cs_new_protected:Npn \__color_backend_separation_init_cielab:nnnnn #1#2#3#4#5
+  {
+    \__color_backend_separation_init:nnnnn
+      {#2}
+      { \pdf_object_ref:n { __color_illuminant_cielab_ #1 } }
+      { \c__color_model_range_lab_tl }
+      { 100 ~ 0 ~ 0 }
+      { #3 ~ #4 ~ #5 }
+  }
+\cs_if_exist:NF \pdf_object_now:nn
+  { \cs_gset_protected:Npn \__color_backend_separation_init_cielab:nnnnn #1#2#3#4#5 { } }
+\cs_new_protected:Npn \__color_backend_separation_init_cielab:n #1
+  {
+    \pdf_object_new:nn { __color_illuminant_cielab_ #1 } { array }
+    \pdf_object_write:nx { __color_illuminant_cielab_ #1 }
+      {
+        /Lab ~
+        <<
+         /WhitePoint ~
+           [ \tl_use:c { c__color_model_whitepoint_cielab_ #1 _tl } ]
+         /Range ~ [ \c__color_model_range_lab_tl ]
+        >>
+     }
+  }
+\cs_if_exist:NF \pdf_object_new:nn
+  { \cs_gset_protected:Npn \__color_backend_separation_init_cielab:n #1 { } }
+\cs_new_protected:Npn \__color_backend_fill_cmyk:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ k } }
+\cs_new_protected:Npn \__color_backend_fill_gray:n #1
+  { \__kernel_backend_literal_pdf: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 } }
+\cs_new_protected:Npn \__color_backend_stroke_gray:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ G } }
+\cs_new_protected:Npn \__color_backend_stroke_rgb:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ RG } }
+\cs_new_protected:Npn \__color_backend_fill_separation:nn #1#2
+  { \__kernel_backend_literal_pdf: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 } }
+%% File: l3backend-box.dtx
+\cs_new_protected:Npn \__box_backend_clip:N #1
+  {
+    \__kernel_backend_scope_begin:
+    \__kernel_backend_literal_pdf:x
+      {
+        0~
+        \dim_to_decimal_in_bp:n { -\box_dp:N #1 } ~
+        \dim_to_decimal_in_bp:n { \box_wd:N #1 } ~
+        \dim_to_decimal_in_bp:n { \box_ht:N #1 + \box_dp:N #1 } ~
+        re~W~n
+      }
+    \hbox_overlap_right:n { \box_use:N #1 }
+    \__kernel_backend_scope_end:
+    \skip_horizontal:n { \box_wd:N #1 }
+  }
+\cs_new_protected:Npn \__box_backend_rotate:Nn #1#2
+  { \exp_args:NNf \__box_backend_rotate_aux:Nn #1 { \fp_eval:n {#2} } }
+\cs_new_protected:Npn \__box_backend_rotate_aux:Nn #1#2
+  {
+    \__kernel_backend_scope_begin:
+    \box_set_wd:Nn #1 { 0pt }
+    \fp_set:Nn \l__box_backend_cos_fp { round ( cosd ( #2 ) , 5 ) }
+    \fp_compare:nNnT \l__box_backend_cos_fp = \c_zero_fp
+      { \fp_zero:N \l__box_backend_cos_fp }
+    \fp_set:Nn \l__box_backend_sin_fp { round ( sind ( #2 ) , 5 ) }
+    \__kernel_backend_matrix:x
+      {
+        \fp_use:N \l__box_backend_cos_fp \c_space_tl
+        \fp_compare:nNnTF \l__box_backend_sin_fp = \c_zero_fp
+          { 0~0 }
+          {
+            \fp_use:N \l__box_backend_sin_fp
+            \c_space_tl
+            \fp_eval:n { -\l__box_backend_sin_fp }
+          }
+        \c_space_tl
+        \fp_use:N \l__box_backend_cos_fp
+      }
+   \box_use:N #1
+   \__kernel_backend_scope_end:
+  }
+\fp_new:N \l__box_backend_cos_fp
+\fp_new:N \l__box_backend_sin_fp
+\cs_new_protected:Npn \__box_backend_scale:Nnn #1#2#3
+  {
+    \__kernel_backend_scope_begin:
+    \__kernel_backend_matrix:x
+      {
+        \fp_eval:n { round ( #2 , 5 ) } ~
+        0~0~
+        \fp_eval:n { round ( #3 , 5 ) }
+      }
+    \hbox_overlap_right:n { \box_use:N #1 }
+    \__kernel_backend_scope_end:
+  }
+%% File: l3backend-draw.dtx
+\cs_new_eq:NN \__draw_backend_literal:n \__kernel_backend_literal_pdf:n
+\cs_generate_variant:Nn \__draw_backend_literal:n { x }
+\cs_new_protected:Npn \__draw_backend_begin:
+  { \__draw_backend_scope_begin: }
+\cs_new_protected:Npn \__draw_backend_end:
+  { \__draw_backend_scope_end: }
+\cs_new_eq:NN \__draw_backend_scope_begin: \__kernel_backend_scope_begin:
+\cs_new_eq:NN \__draw_backend_scope_end: \__kernel_backend_scope_end:
+\cs_new_protected:Npn \__draw_backend_moveto:nn #1#2
+  {
+    \__draw_backend_literal:x
+      { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ m }
+  }
+\cs_new_protected:Npn \__draw_backend_lineto:nn #1#2
+  {
+    \__draw_backend_literal:x
+      { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ l }
+  }
+\cs_new_protected:Npn \__draw_backend_curveto:nnnnnn #1#2#3#4#5#6
+  {
+    \__draw_backend_literal:x
+      {
+        \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
+        \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
+        \dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~
+        c
+      }
+ }
+\cs_new_protected:Npn \__draw_backend_rectangle:nnnn #1#2#3#4
+  {
+     \__draw_backend_literal:x
+      {
+        \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
+        \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
+        re
+      }
+  }
+\cs_new_protected:Npn \__draw_backend_evenodd_rule:
+  { \bool_gset_true:N \g__draw_draw_eor_bool }
+\cs_new_protected:Npn \__draw_backend_nonzero_rule:
+  { \bool_gset_false:N \g__draw_draw_eor_bool }
+\bool_new:N \g__draw_draw_eor_bool
+\cs_new_protected:Npn \__draw_backend_closepath:
+  { \__draw_backend_literal:n { h } }
+\cs_new_protected:Npn \__draw_backend_stroke:
+  { \__draw_backend_literal:n { S } }
+\cs_new_protected:Npn \__draw_backend_closestroke:
+  { \__draw_backend_literal:n { s } }
+\cs_new_protected:Npn \__draw_backend_fill:
+  {
+    \__draw_backend_literal:x
+      { f \bool_if:NT \g__draw_draw_eor_bool * }
+  }
+\cs_new_protected:Npn \__draw_backend_fillstroke:
+  {
+    \__draw_backend_literal:x
+      { B \bool_if:NT \g__draw_draw_eor_bool * }
+  }
+\cs_new_protected:Npn \__draw_backend_clip:
+  {
+    \__draw_backend_literal:x
+      { W \bool_if:NT \g__draw_draw_eor_bool * }
+  }
+\cs_new_protected:Npn \__draw_backend_discardpath:
+  { \__draw_backend_literal:n { n } }
+\cs_new_protected:Npn \__draw_backend_dash_pattern:nn #1#2
+  {
+    \__draw_backend_literal:x
+      {
+        [
+          \exp_args:Nf \use:n
+            { \clist_map_function:nN {#1} \__draw_backend_dash:n }
+        ] ~
+        \dim_to_decimal_in_bp:n {#2} ~ d
+      }
+  }
+\cs_new:Npn \__draw_backend_dash:n #1
+  { ~ \dim_to_decimal_in_bp:n {#1} }
+\cs_new_protected:Npn \__draw_backend_linewidth:n #1
+  {
+    \__draw_backend_literal:x
+      { \dim_to_decimal_in_bp:n {#1} ~ w }
+  }
+\cs_new_protected:Npn \__draw_backend_miterlimit:n #1
+  { \__draw_backend_literal:x { #1 ~ M } }
+\cs_new_protected:Npn \__draw_backend_cap_butt:
+  { \__draw_backend_literal:n { 0 ~ J } }
+\cs_new_protected:Npn \__draw_backend_cap_round:
+  { \__draw_backend_literal:n { 1 ~ J } }
+\cs_new_protected:Npn \__draw_backend_cap_rectangle:
+  { \__draw_backend_literal:n { 2 ~ J } }
+\cs_new_protected:Npn \__draw_backend_join_miter:
+  { \__draw_backend_literal:n { 0 ~ j } }
+\cs_new_protected:Npn \__draw_backend_join_round:
+  { \__draw_backend_literal:n { 1 ~ j } }
+\cs_new_protected:Npn \__draw_backend_join_bevel:
+  { \__draw_backend_literal:n { 2 ~ j } }
+\cs_new_protected:Npn \__draw_backend_cm:nnnn #1#2#3#4
+  {
+    \__kernel_backend_matrix:n { #1 ~ #2 ~ #3 ~ #4 }
+  }
+\cs_new_protected:Npn \__draw_backend_box_use:Nnnnn #1#2#3#4#5
+  {
+    \__kernel_backend_scope_begin:
+    \__draw_backend_cm:nnnn {#2} {#3} {#4} {#5}
+    \hbox_overlap_right:n { \box_use:N #1 }
+    \__kernel_backend_scope_end:
+  }
+%% File: l3backend-graphics.dtx
+\tl_new:N \l__graphics_graphics_attr_tl
+\cs_new_protected:Npn \__graphics_backend_getbb_jpg:n #1
+  {
+    \int_zero:N \l_graphics_page_int
+    \tl_clear:N \l_graphics_pagebox_tl
+    \tl_set:Nx \l__graphics_graphics_attr_tl
+      {
+        \tl_if_empty:NF \l_graphics_decodearray_tl
+          { :D \l_graphics_decodearray_tl }
+        \bool_if:NT \l_graphics_interpolate_bool
+          { :I }
+      }
+    \tl_clear:N \l__graphics_graphics_attr_tl
+    \__graphics_backend_getbb_auxi:n {#1}
+  }
+\cs_new_eq:NN \__graphics_backend_getbb_png:n \__graphics_backend_getbb_jpg:n
+\cs_new_protected:Npn \__graphics_backend_getbb_pdf:n #1
+  {
+    \tl_clear:N \l_graphics_decodearray_tl
+    \bool_set_false:N \l_graphics_interpolate_bool
+    \tl_set:Nx \l__graphics_graphics_attr_tl
+      {
+        : \l_graphics_pagebox_tl
+        \int_compare:nNnT \l_graphics_page_int > 1
+          { :P \int_use:N \l_graphics_page_int }
+      }
+    \__graphics_backend_getbb_auxi:n {#1}
+  }
+\cs_new_protected:Npn \__graphics_backend_getbb_auxi:n #1
+  {
+    \graphics_bb_restore:xF { #1 \l__graphics_graphics_attr_tl }
+      { \__graphics_backend_getbb_auxii:n {#1} }
+  }
+\cs_new_protected:Npn \__graphics_backend_getbb_auxii:n #1
+  {
+    \tex_immediate:D \tex_pdfximage:D
+      \bool_lazy_or:nnT
+        { \l_graphics_interpolate_bool }
+        { ! \tl_if_empty_p:N \l_graphics_decodearray_tl }
+        {
+          attr ~
+            {
+              \tl_if_empty:NF \l_graphics_decodearray_tl
+                { /Decode~[ \l_graphics_decodearray_tl ] }
+              \bool_if:NT \l_graphics_interpolate_bool
+                { /Interpolate~true }
+            }
+        }
+      \int_compare:nNnT \l_graphics_page_int > 0
+        { page ~ \int_use:N \l_graphics_page_int }
+      \tl_if_empty:NF \l_graphics_pagebox_tl
+        { \l_graphics_pagebox_tl }
+      {#1}
+    \hbox_set:Nn \l__graphics_internal_box
+      { \tex_pdfrefximage:D \tex_pdflastximage:D }
+    \dim_set:Nn \l_graphics_urx_dim { \box_wd:N \l__graphics_internal_box }
+    \dim_set:Nn \l_graphics_ury_dim { \box_ht:N \l__graphics_internal_box }
+    \int_const:cn { c__graphics_graphics_ #1 \l__graphics_graphics_attr_tl _int }
+      { \tex_the:D \tex_pdflastximage:D }
+    \graphics_bb_save:x { #1 \l__graphics_graphics_attr_tl }
+  }
+\cs_new_protected:Npn \__graphics_backend_include_jpg:n #1
+  {
+    \tex_pdfrefximage:D
+      \int_use:c { c__graphics_graphics_ #1 \l__graphics_graphics_attr_tl _int }
+  }
+\cs_new_eq:NN \__graphics_backend_include_pdf:n \__graphics_backend_include_jpg:n
+\cs_new_eq:NN \__graphics_backend_include_png:n \__graphics_backend_include_jpg:n
+\sys_if_shell:T
+  {
+    \str_new:N \l__graphics_backend_dir_str
+    \str_new:N \l__graphics_backend_name_str
+    \str_new:N \l__graphics_backend_ext_str
+    \cs_new_protected:Npn \__graphics_backend_getbb_eps:n #1
+      {
+        \file_parse_full_name:nNNN {#1}
+          \l__graphics_backend_dir_str
+          \l__graphics_backend_name_str
+          \l__graphics_backend_ext_str
+        \exp_args:Nx \__graphics_backend_getbb_eps:nn
+          {
+            \l__graphics_backend_name_str - \str_tail:N \l__graphics_backend_ext_str
+            -converted-to.pdf
+          }
+          {#1}
+     }
+    \cs_new_protected:Npn \__graphics_backend_getbb_eps:nn #1#2
+      {
+        \file_compare_timestamp:nNnT {#2} > {#1}
+          {
+            \sys_shell_now:n
+              { repstopdf ~ #2 ~ #1 }
+          }
+        \tl_set:Nn \l_graphics_name_tl {#1}
+        \__graphics_backend_getbb_pdf:n {#1}
+      }
+    \cs_new_protected:Npn \__graphics_backend_include_eps:n #1
+      {
+        \file_parse_full_name:nNNN {#1}
+          \l__graphics_backend_dir_str \l__graphics_backend_name_str \l__graphics_backend_ext_str
+        \exp_args:Nx \__graphics_backend_include_pdf:n
+          {
+            \l__graphics_backend_name_str - \str_tail:N \l__graphics_backend_ext_str
+            -converted-to.pdf
+          }
+      }
+  }
+%% File: l3backend-pdf.dtx
+\box_new:N \l__pdf_internal_box
+\cs_new_protected:Npn \__pdf_backend_annotation:nnnn #1#2#3#4
+  {
+    \tex_pdfextension:D annot ~
+      width  ~ \dim_eval:n {#1} ~
+      height ~ \dim_eval:n {#2} ~
+      depth  ~ \dim_eval:n {#3} ~
+      {#4}
+  }
+\cs_new:Npx \__pdf_backend_annotation_last:
+  {
+    \exp_not:N \int_value:w
+      \exp_not:N \tex_pdffeedback:D lastannot
+      \c_space_tl 0 ~ R
+  }
+\cs_new_protected:Npn \__pdf_backend_link_begin_goto:nnw #1#2
+  { \__pdf_backend_link_begin:nnnw {#1} { goto~name } {#2} }
+\cs_new_protected:Npn \__pdf_backend_link_begin_user:nnw #1#2
+  { \__pdf_backend_link_begin:nnnw {#1} { user } {#2} }
+\cs_new_protected:Npn \__pdf_backend_link_begin:nnnw #1#2#3
+  {
+    \tex_pdfextension:D startlink ~
+      attr {#1}
+      #2 {#3}
+  }
+\cs_new_protected:Npn \__pdf_backend_link_end:
+  {
+    \tex_pdfextension:D endlink \scan_stop:
+  }
+\cs_new:Npx \__pdf_backend_link_last:
+  {
+    \exp_not:N \int_value:w
+      \exp_not:N \tex_pdffeedback:D lastlink
+      \c_space_tl 0 ~ R
+  }
+\cs_new_protected:Npn \__pdf_backend_link_margin:n #1
+  {
+    \tex_pdfvariable:D linkmargin
+      \dim_eval:n {#1} \scan_stop:
+  }
+\cs_new_protected:Npn \__pdf_backend_destination:nn #1#2
+  {
+    \tex_pdfextension:D dest ~
+        name {#1}
+        \str_case:nnF {#2}
+          {
+            { xyz }   { xyz }
+            { fit }   { fit }
+            { fitb }  { fitb }
+            { fitbh } { fitbh }
+            { fitbv } { fitbv }
+            { fith }  { fith }
+            { fitv }  { fitv }
+          }
+          { xyz ~ zoom \fp_eval:n { #2 * 10 } }
+        \scan_stop:
+  }
+\cs_new_protected:Npn \__pdf_backend_destination_box:nn #1#2
+  {
+    \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:
+  }
+\cs_new_protected:Npn \__pdf_backend_catalog_gput:nn #1#2
+  {
+    \tex_pdfextension:D catalog
+      { / #1 ~ #2 }
+  }
+\cs_new_protected:Npn \__pdf_backend_info_gput:nn #1#2
+  {
+    \tex_pdfextension:D info
+      { / #1 ~ #2 }
+  }
+\prop_new:N \g__pdf_backend_object_prop
+\cs_new_protected:Npn \__pdf_backend_object_new:nn #1#2
+  {
+    \tex_pdfextension:D obj ~
+      reserveobjnum ~
+      \int_const:cn
+        { c__pdf_backend_object_ \tl_to_str:n {#1} _int }
+        { \tex_pdffeedback:D lastobj }
+    \prop_gput:Nnn \exp_not:N \g__pdf_backend_object_prop {#1} {#2}
+  }
+\cs_new:Npn \__pdf_backend_object_ref:n #1
+  { \int_use:c { c__pdf_backend_object_ \tl_to_str:n {#1} _int } ~ 0 ~ R }
+\cs_new_protected:Npn \__pdf_backend_object_write:nn #1#2
+  {
+    \tex_immediate:D \tex_pdfextension:D obj ~
+      useobjnum ~
+      \int_use:c
+        { c__pdf_backend_object_ \tl_to_str:n {#1} _int }
+      \str_case_e:nn
+        { \prop_item:Nn \g__pdf_backend_object_prop {#1} }
+        {
+          { array } { { [ ~ \exp_not:n {#2} ~ ] } }
+          { dict }  { { << ~ \exp_not:n {#2} ~ >> } }
+          { fstream }
+            {
+              stream ~ attr ~ { \__pdf_exp_not_i:nn #2 } ~
+                file ~ { \__pdf_exp_not_ii:nn #2 }
+            }
+          { stream }
+            {
+              stream ~ attr ~ { \__pdf_exp_not_i:nn #2 } ~
+                { \__pdf_exp_not_ii:nn #2 }
+            }
+        }
+  }
+\cs_generate_variant:Nn \__pdf_backend_object_write:nn { nx }
+\cs_new:Npn \__pdf_exp_not_i:nn #1#2 { \exp_not:n {#1} }
+\cs_new:Npn \__pdf_exp_not_ii:nn #1#2 { \exp_not:n {#2} }
+\cs_new_protected:Npn \__pdf_backend_object_now:nn #1#2
+  {
+    \tex_immediate:D \tex_pdfextension:D obj ~
+      \str_case:nn
+        {#1}
+        {
+          { array } { { [ ~ \exp_not:n {#2} ~ ] } }
+          { dict }  { { << ~ \exp_not:n {#2} ~ >> } }
+          { fstream }
+            {
+              stream ~ attr ~ { \__pdf_exp_not_i:nn #2 } ~
+                file ~ { \__pdf_exp_not_ii:nn #2 }
+            }
+          { stream }
+            {
+              stream ~ attr ~ { \__pdf_exp_not_i:nn #2 } ~
+                { \__pdf_exp_not_ii:nn #2 }
+            }
+        }
+  }
+\cs_generate_variant:Nn \__pdf_backend_object_now:nn { nx }
+\cs_new:Npx \__pdf_backend_object_last:
+  {
+    \exp_not:N \int_value:w
+      \exp_not:N \tex_pdffeedback:D lastobj ~
+      \c_space_tl 0 ~ R
+  }
+\cs_new:Npx \__pdf_backend_pageobject_ref:n #1
+  {
+    \exp_not:N \int_value:w
+      \exp_not:N \tex_pdffeedback:D pageref
+          \c_space_tl #1 \c_space_tl \c_space_tl \c_space_tl 0 ~ R
+  }
+\cs_new_protected:Npn \__pdf_backend_compresslevel:n #1
+  {
+    \tex_global:D
+      \tex_pdfvariable:D compresslevel
+        \int_value:w \int_eval:n {#1} \scan_stop:
+  }
+\cs_new_protected:Npn \__pdf_backend_compress_objects:n #1
+  {
+    \bool_if:nTF {#1}
+      { \__pdf_backend_objcompresslevel:n { 2 } }
+      { \__pdf_backend_objcompresslevel:n { 0 } }
+  }
+\cs_new_protected:Npn \__pdf_backend_objcompresslevel:n #1
+  {
+    \tex_global:D
+      \tex_pdfvariable:D objcompresslevel
+        #1 \scan_stop:
+  }
+\cs_new_protected:Npx \__pdf_backend_version_major_gset:n #1
+  {
+    \int_compare:nNnT \tex_luatexversion:D > { 106 }
+      {
+        \exp_not:N \tex_global:D \tex_pdfvariable:D majorversion
+          \exp_not:N \int_eval:n {#1} \scan_stop:
+      }
+  }
+\cs_new_protected:Npn \__pdf_backend_version_minor_gset:n #1
+  {
+    \tex_global:D
+      \tex_pdfvariable:D minorversion
+        \int_eval:n {#1} \scan_stop:
+  }
+\cs_new:Npx \__pdf_backend_version_major:
+  {
+    \int_compare:nNnTF \tex_luatexversion:D > { 106 }
+      { \exp_not:N \tex_the:D \tex_pdfvariable:D majorversion }
+      { 1 }
+  }
+\cs_new:Npn \__pdf_backend_version_minor:
+  {
+    \tex_the:D
+      \tex_pdfvariable:D minorversion
+  }
+\cs_new_protected:Npn \__pdf_backend_bdc:nn #1#2
+  { \__kernel_backend_literal_page:n { /#1 ~ #2 ~ BDC } }
+\cs_new_protected:Npn \__pdf_backend_emc:
+  { \__kernel_backend_literal_page:n { EMC } }
+%% 
+%%
+%% End of file `l3backend-luatex.def'.


Property changes on: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Deleted: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def	2020-09-02 21:34:30 UTC (rev 56243)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def	2020-09-02 21:36:32 UTC (rev 56244)
@@ -1,693 +0,0 @@
-%%
-%% This is file `l3backend-pdfmode.def',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% l3backend-basics.dtx  (with options: `package,pdfmode')
-%% l3backend-color.dtx  (with options: `package,pdfmode')
-%% l3backend-box.dtx  (with options: `package,pdfmode')
-%% l3backend-draw.dtx  (with options: `package,pdfmode')
-%% l3backend-graphics.dtx  (with options: `package,pdfmode')
-%% l3backend-pdf.dtx  (with options: `package,pdfmode')
-%% 
-%% Copyright (C) 1990-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:
-%% 
-%%    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.
-%% 
-%% File: l3backend-basics.dtx
-\ProvidesExplFile
-  {l3backend-pdfmode.def}{2020-08-07}{}
-  {L3 backend support: PDF mode}
-\cs_new_eq:NN \__kernel_backend_literal:e \tex_special:D
-\cs_new_protected:Npn \__kernel_backend_literal:n #1
-  { \__kernel_backend_literal:e { \exp_not:n {#1} } }
-\cs_generate_variant:Nn \__kernel_backend_literal:n { x }
-\cs_new_protected:Npx \__kernel_backend_literal_pdf:n #1
-  {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D literal }
-      { \tex_pdfliteral:D }
-        { \exp_not:N \exp_not:n {#1} }
-  }
-\cs_generate_variant:Nn \__kernel_backend_literal_pdf:n { x }
-\cs_new_protected:Npx \__kernel_backend_literal_page:n #1
-  {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D literal ~ }
-      { \tex_pdfliteral:D }
-        page
-        { \exp_not:N \exp_not:n {#1} }
-  }
-\cs_new_protected:Npx \__kernel_backend_scope_begin:
-  {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D save \scan_stop: }
-      { \tex_pdfsave:D }
-  }
-\cs_new_protected:Npx \__kernel_backend_scope_end:
-  {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D restore \scan_stop: }
-      { \tex_pdfrestore:D }
-  }
-\cs_new_protected:Npx \__kernel_backend_matrix:n #1
-  {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D setmatrix }
-      { \tex_pdfsetmatrix:D }
-        { \exp_not:N \exp_not:n {#1} }
-  }
-\cs_generate_variant:Nn \__kernel_backend_matrix:n { x }
-%% File: l3backend-color.dtx
-\cs_new_protected:Npn \__color_backend_pickup:N #1 { }
-\cs_if_exist:cT { ver at color.sty }
-  {
-    \cs_set_protected:Npn \__color_backend_pickup:N #1
-      {
-        \exp_last_unbraced:Nx \__color_backend_pickup:w
-          { \current at color } ~ 0 ~ 0 ~ 0 \s__color_stop #1
-      }
-    \cs_new_protected:Npn \__color_backend_pickup:w
-      #1 ~ #2 ~ #3 ~ #4 ~ #5 ~ #6 \s__color_stop #7
-      {
-        \str_if_eq:nnTF {#2} { g }
-          { \tl_set:Nn #7 { { gray } {#1} } }
-          {
-            \str_if_eq:nnTF {#4} { rg }
-              { \tl_set:Nn #7 { { rgb } { #1 ~ #2 ~ #3 } } }
-              {
-                 \str_if_eq:nnTF {#5} { k }
-                   { \tl_set:Nn #7 { { cmyk } { #1 ~ #2 ~ #3 ~ #4 } } }
-                   {
-                     \str_if_eq:nnTF {#2} { cs }
-                       {
-                         \tl_set:Nx #7 { { \use:n #1 } { #5 } }
-                       }
-                       {
-                         \tl_set:Nn #7 { { gray } { 0 } }
-                       }
-                   }
-              }
-          }
-      }
-  }
-\int_new:N \l__kernel_color_stack_int
-\cs_new_protected:Npn \__color_backend_select_cmyk:n #1
-  { \__color_backend_select:n { #1 ~ k ~ #1 ~ K } }
-\cs_new_protected:Npn \__color_backend_select_gray:n #1
-  { \__color_backend_select:n { #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:Npx \__color_backend_select:n #1
-  {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D colorstack }
-      { \tex_pdfcolorstack:D }
-        \exp_not:N \l__kernel_color_stack_int push {#1}
-      \group_insert_after:N \exp_not:N \__color_backend_reset:
-  }
-\cs_new_protected:Npx \__color_backend_reset:
-  {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D colorstack }
-      { \tex_pdfcolorstack:D }
-        \exp_not:N \l__kernel_color_stack_int pop \scan_stop:
-  }
-\cs_new_protected:Npn \__color_backend_select_separation:nn #1#2
-  { \__color_backend_select:n { /#1 ~ cs ~ /#1 ~ CS ~ #2 ~ scn ~ #2 ~ SCN } }
-\cs_new_protected:Npn \__color_backend_fill_cmyk:n #1
-  { \__kernel_backend_literal_pdf:n { #1 ~ k } }
-\cs_new_protected:Npn \__color_backend_fill_gray:n #1
-  { \__kernel_backend_literal_pdf: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 } }
-\cs_new_protected:Npn \__color_backend_stroke_gray:n #1
-  { \__kernel_backend_literal_pdf:n { #1 ~ G } }
-\cs_new_protected:Npn \__color_backend_stroke_rgb:n #1
-  { \__kernel_backend_literal_pdf:n { #1 ~ RG } }
-\cs_new_protected:Npn \__color_backend_fill_separation:nn #1#2
-  { \__kernel_backend_literal_pdf: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 } }
-%% File: l3backend-box.dtx
-\cs_new_protected:Npn \__box_backend_clip:N #1
-  {
-    \__kernel_backend_scope_begin:
-    \__kernel_backend_literal_pdf:x
-      {
-        0~
-        \dim_to_decimal_in_bp:n { -\box_dp:N #1 } ~
-        \dim_to_decimal_in_bp:n { \box_wd:N #1 } ~
-        \dim_to_decimal_in_bp:n { \box_ht:N #1 + \box_dp:N #1 } ~
-        re~W~n
-      }
-    \hbox_overlap_right:n { \box_use:N #1 }
-    \__kernel_backend_scope_end:
-    \skip_horizontal:n { \box_wd:N #1 }
-  }
-\cs_new_protected:Npn \__box_backend_rotate:Nn #1#2
-  { \exp_args:NNf \__box_backend_rotate_aux:Nn #1 { \fp_eval:n {#2} } }
-\cs_new_protected:Npn \__box_backend_rotate_aux:Nn #1#2
-  {
-    \__kernel_backend_scope_begin:
-    \box_set_wd:Nn #1 { 0pt }
-    \fp_set:Nn \l__box_backend_cos_fp { round ( cosd ( #2 ) , 5 ) }
-    \fp_compare:nNnT \l__box_backend_cos_fp = \c_zero_fp
-      { \fp_zero:N \l__box_backend_cos_fp }
-    \fp_set:Nn \l__box_backend_sin_fp { round ( sind ( #2 ) , 5 ) }
-    \__kernel_backend_matrix:x
-      {
-        \fp_use:N \l__box_backend_cos_fp \c_space_tl
-        \fp_compare:nNnTF \l__box_backend_sin_fp = \c_zero_fp
-          { 0~0 }
-          {
-            \fp_use:N \l__box_backend_sin_fp
-            \c_space_tl
-            \fp_eval:n { -\l__box_backend_sin_fp }
-          }
-        \c_space_tl
-        \fp_use:N \l__box_backend_cos_fp
-      }
-   \box_use:N #1
-   \__kernel_backend_scope_end:
-  }
-\fp_new:N \l__box_backend_cos_fp
-\fp_new:N \l__box_backend_sin_fp
-\cs_new_protected:Npn \__box_backend_scale:Nnn #1#2#3
-  {
-    \__kernel_backend_scope_begin:
-    \__kernel_backend_matrix:x
-      {
-        \fp_eval:n { round ( #2 , 5 ) } ~
-        0~0~
-        \fp_eval:n { round ( #3 , 5 ) }
-      }
-    \hbox_overlap_right:n { \box_use:N #1 }
-    \__kernel_backend_scope_end:
-  }
-%% File: l3backend-draw.dtx
-\cs_new_eq:NN \__draw_backend_literal:n \__kernel_backend_literal_pdf:n
-\cs_generate_variant:Nn \__draw_backend_literal:n { x }
-\cs_new_protected:Npn \__draw_backend_begin:
-  { \__draw_backend_scope_begin: }
-\cs_new_protected:Npn \__draw_backend_end:
-  { \__draw_backend_scope_end: }
-\cs_new_eq:NN \__draw_backend_scope_begin: \__kernel_backend_scope_begin:
-\cs_new_eq:NN \__draw_backend_scope_end: \__kernel_backend_scope_end:
-\cs_new_protected:Npn \__draw_backend_moveto:nn #1#2
-  {
-    \__draw_backend_literal:x
-      { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ m }
-  }
-\cs_new_protected:Npn \__draw_backend_lineto:nn #1#2
-  {
-    \__draw_backend_literal:x
-      { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ l }
-  }
-\cs_new_protected:Npn \__draw_backend_curveto:nnnnnn #1#2#3#4#5#6
-  {
-    \__draw_backend_literal:x
-      {
-        \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
-        \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
-        \dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~
-        c
-      }
- }
-\cs_new_protected:Npn \__draw_backend_rectangle:nnnn #1#2#3#4
-  {
-     \__draw_backend_literal:x
-      {
-        \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
-        \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
-        re
-      }
-  }
-\cs_new_protected:Npn \__draw_backend_evenodd_rule:
-  { \bool_gset_true:N \g__draw_draw_eor_bool }
-\cs_new_protected:Npn \__draw_backend_nonzero_rule:
-  { \bool_gset_false:N \g__draw_draw_eor_bool }
-\bool_new:N \g__draw_draw_eor_bool
-\cs_new_protected:Npn \__draw_backend_closepath:
-  { \__draw_backend_literal:n { h } }
-\cs_new_protected:Npn \__draw_backend_stroke:
-  { \__draw_backend_literal:n { S } }
-\cs_new_protected:Npn \__draw_backend_closestroke:
-  { \__draw_backend_literal:n { s } }
-\cs_new_protected:Npn \__draw_backend_fill:
-  {
-    \__draw_backend_literal:x
-      { f \bool_if:NT \g__draw_draw_eor_bool * }
-  }
-\cs_new_protected:Npn \__draw_backend_fillstroke:
-  {
-    \__draw_backend_literal:x
-      { B \bool_if:NT \g__draw_draw_eor_bool * }
-  }
-\cs_new_protected:Npn \__draw_backend_clip:
-  {
-    \__draw_backend_literal:x
-      { W \bool_if:NT \g__draw_draw_eor_bool * }
-  }
-\cs_new_protected:Npn \__draw_backend_discardpath:
-  { \__draw_backend_literal:n { n } }
-\cs_new_protected:Npn \__draw_backend_dash_pattern:nn #1#2
-  {
-    \__draw_backend_literal:x
-      {
-        [
-          \exp_args:Nf \use:n
-            { \clist_map_function:nN {#1} \__draw_backend_dash:n }
-        ] ~
-        \dim_to_decimal_in_bp:n {#2} ~ d
-      }
-  }
-\cs_new:Npn \__draw_backend_dash:n #1
-  { ~ \dim_to_decimal_in_bp:n {#1} }
-\cs_new_protected:Npn \__draw_backend_linewidth:n #1
-  {
-    \__draw_backend_literal:x
-      { \dim_to_decimal_in_bp:n {#1} ~ w }
-  }
-\cs_new_protected:Npn \__draw_backend_miterlimit:n #1
-  { \__draw_backend_literal:x { #1 ~ M } }
-\cs_new_protected:Npn \__draw_backend_cap_butt:
-  { \__draw_backend_literal:n { 0 ~ J } }
-\cs_new_protected:Npn \__draw_backend_cap_round:
-  { \__draw_backend_literal:n { 1 ~ J } }
-\cs_new_protected:Npn \__draw_backend_cap_rectangle:
-  { \__draw_backend_literal:n { 2 ~ J } }
-\cs_new_protected:Npn \__draw_backend_join_miter:
-  { \__draw_backend_literal:n { 0 ~ j } }
-\cs_new_protected:Npn \__draw_backend_join_round:
-  { \__draw_backend_literal:n { 1 ~ j } }
-\cs_new_protected:Npn \__draw_backend_join_bevel:
-  { \__draw_backend_literal:n { 2 ~ j } }
-\cs_new_protected:Npn \__draw_backend_cm:nnnn #1#2#3#4
-  {
-    \__kernel_backend_matrix:n { #1 ~ #2 ~ #3 ~ #4 }
-  }
-\cs_new_protected:Npn \__draw_backend_box_use:Nnnnn #1#2#3#4#5
-  {
-    \__kernel_backend_scope_begin:
-    \__draw_backend_cm:nnnn {#2} {#3} {#4} {#5}
-    \hbox_overlap_right:n { \box_use:N #1 }
-    \__kernel_backend_scope_end:
-  }
-%% File: l3backend-graphics.dtx
-\tl_new:N \l__graphics_graphics_attr_tl
-\cs_new_protected:Npn \__graphics_backend_getbb_jpg:n #1
-  {
-    \int_zero:N \l_graphics_page_int
-    \tl_clear:N \l_graphics_pagebox_tl
-    \tl_set:Nx \l__graphics_graphics_attr_tl
-      {
-        \tl_if_empty:NF \l_graphics_decodearray_tl
-          { :D \l_graphics_decodearray_tl }
-        \bool_if:NT \l_graphics_interpolate_bool
-          { :I }
-      }
-    \tl_clear:N \l__graphics_graphics_attr_tl
-    \__graphics_backend_getbb_auxi:n {#1}
-  }
-\cs_new_eq:NN \__graphics_backend_getbb_png:n \__graphics_backend_getbb_jpg:n
-\cs_new_protected:Npn \__graphics_backend_getbb_pdf:n #1
-  {
-    \tl_clear:N \l_graphics_decodearray_tl
-    \bool_set_false:N \l_graphics_interpolate_bool
-    \tl_set:Nx \l__graphics_graphics_attr_tl
-      {
-        : \l_graphics_pagebox_tl
-        \int_compare:nNnT \l_graphics_page_int > 1
-          { :P \int_use:N \l_graphics_page_int }
-      }
-    \__graphics_backend_getbb_auxi:n {#1}
-  }
-\cs_new_protected:Npn \__graphics_backend_getbb_auxi:n #1
-  {
-    \graphics_bb_restore:xF { #1 \l__graphics_graphics_attr_tl }
-      { \__graphics_backend_getbb_auxii:n {#1} }
-  }
-\cs_new_protected:Npn \__graphics_backend_getbb_auxii:n #1
-  {
-    \tex_immediate:D \tex_pdfximage:D
-      \bool_lazy_or:nnT
-        { \l_graphics_interpolate_bool }
-        { ! \tl_if_empty_p:N \l_graphics_decodearray_tl }
-        {
-          attr ~
-            {
-              \tl_if_empty:NF \l_graphics_decodearray_tl
-                { /Decode~[ \l_graphics_decodearray_tl ] }
-              \bool_if:NT \l_graphics_interpolate_bool
-                { /Interpolate~true }
-            }
-        }
-      \int_compare:nNnT \l_graphics_page_int > 0
-        { page ~ \int_use:N \l_graphics_page_int }
-      \tl_if_empty:NF \l_graphics_pagebox_tl
-        { \l_graphics_pagebox_tl }
-      {#1}
-    \hbox_set:Nn \l__graphics_internal_box
-      { \tex_pdfrefximage:D \tex_pdflastximage:D }
-    \dim_set:Nn \l_graphics_urx_dim { \box_wd:N \l__graphics_internal_box }
-    \dim_set:Nn \l_graphics_ury_dim { \box_ht:N \l__graphics_internal_box }
-    \int_const:cn { c__graphics_graphics_ #1 \l__graphics_graphics_attr_tl _int }
-      { \tex_the:D \tex_pdflastximage:D }
-    \graphics_bb_save:x { #1 \l__graphics_graphics_attr_tl }
-  }
-\cs_new_protected:Npn \__graphics_backend_include_jpg:n #1
-  {
-    \tex_pdfrefximage:D
-      \int_use:c { c__graphics_graphics_ #1 \l__graphics_graphics_attr_tl _int }
-  }
-\cs_new_eq:NN \__graphics_backend_include_pdf:n \__graphics_backend_include_jpg:n
-\cs_new_eq:NN \__graphics_backend_include_png:n \__graphics_backend_include_jpg:n
-\sys_if_shell:T
-  {
-    \str_new:N \l__graphics_backend_dir_str
-    \str_new:N \l__graphics_backend_name_str
-    \str_new:N \l__graphics_backend_ext_str
-    \cs_new_protected:Npn \__graphics_backend_getbb_eps:n #1
-      {
-        \file_parse_full_name:nNNN {#1}
-          \l__graphics_backend_dir_str
-          \l__graphics_backend_name_str
-          \l__graphics_backend_ext_str
-        \exp_args:Nx \__graphics_backend_getbb_eps:nn
-          {
-            \l__graphics_backend_name_str - \str_tail:N \l__graphics_backend_ext_str
-            -converted-to.pdf
-          }
-          {#1}
-     }
-    \cs_new_protected:Npn \__graphics_backend_getbb_eps:nn #1#2
-      {
-        \file_compare_timestamp:nNnT {#2} > {#1}
-          {
-            \sys_shell_now:n
-              { repstopdf ~ #2 ~ #1 }
-          }
-        \tl_set:Nn \l_graphics_name_tl {#1}
-        \__graphics_backend_getbb_pdf:n {#1}
-      }
-    \cs_new_protected:Npn \__graphics_backend_include_eps:n #1
-      {
-        \file_parse_full_name:nNNN {#1}
-          \l__graphics_backend_dir_str \l__graphics_backend_name_str \l__graphics_backend_ext_str
-        \exp_args:Nx \__graphics_backend_include_pdf:n
-          {
-            \l__graphics_backend_name_str - \str_tail:N \l__graphics_backend_ext_str
-            -converted-to.pdf
-          }
-      }
-  }
-%% File: l3backend-pdf.dtx
-\box_new:N \l__pdf_internal_box
-\cs_new_protected:Npx \__pdf_backend_annotation:nnnn #1#2#3#4
-  {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D annot ~ }
-      { \tex_pdfannot:D }
-      width  ~ \exp_not:N \dim_eval:n {#1} ~
-      height ~ \exp_not:N \dim_eval:n {#2} ~
-      depth  ~ \exp_not:N \dim_eval:n {#3} ~
-      {#4}
-  }
-\cs_new:Npx \__pdf_backend_annotation_last:
-  {
-    \exp_not:N \int_value:w
-    \cs_if_exist:NTF \tex_pdffeedback:D
-      { \exp_not:N \tex_pdffeedback:D lastannot ~ }
-      { \exp_not:N \tex_pdflastannot:D }
-      \c_space_tl 0 ~ R
-  }
-\cs_new_protected:Npn \__pdf_backend_link_begin_goto:nnw #1#2
-  { \__pdf_backend_link_begin:nnnw {#1} { goto~name } {#2} }
-\cs_new_protected:Npn \__pdf_backend_link_begin_user:nnw #1#2
-  { \__pdf_backend_link_begin:nnnw {#1} { user } {#2} }
-\cs_new_protected:Npx \__pdf_backend_link_begin:nnnw #1#2#3
-  {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D startlink ~ }
-      { \tex_pdfstartlink:D }
-        attr {#1}
-        #2 {#3}
-  }
-\cs_new_protected:Npx \__pdf_backend_link_end:
-  {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D endlink \scan_stop: }
-      { \tex_pdfendlink:D }
-  }
-\cs_new:Npx \__pdf_backend_link_last:
-  {
-    \exp_not:N \int_value:w
-    \cs_if_exist:NTF \tex_pdffeedback:D
-      { \exp_not:N \tex_pdffeedback:D lastlink ~ }
-      { \exp_not:N \tex_pdflastlink:D }
-      \c_space_tl 0 ~ R
-  }
-\cs_new_protected:Npx \__pdf_backend_link_margin:n #1
-  {
-    \cs_if_exist:NTF \tex_pdfvariable:D
-      { \exp_not:N \tex_pdfvariable:D linkmargin }
-      { \exp_not:N \tex_pdflinkmargin:D }
-        \exp_not:N \dim_eval:n {#1} \scan_stop:
-  }
-\cs_new_protected:Npx \__pdf_backend_destination:nn #1#2
-  {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \exp_not:N \tex_pdfextension:D dest ~ }
-      { \exp_not:N \tex_pdfdest:D }
-        name {#1}
-        \exp_not:N \str_case:nnF {#2}
-          {
-            { xyz }   { xyz }
-            { fit }   { fit }
-            { fitb }  { fitb }
-            { fitbh } { fitbh }
-            { fitbv } { fitbv }
-            { fith }  { fith }
-            { fitv }  { fitv }
-          }
-          { xyz ~ zoom \exp_not:N \fp_eval:n { #2 * 10 } }
-        \scan_stop:
-  }
-\cs_new_protected:Npx \__pdf_backend_destination_box:nn #1#2
-  {
-    \group_begin:
-      \hbox_set:Nn \l__pdf_internal_box {#2}
-     \cs_if_exist:NTF \tex_pdfextension:D
-      { \exp_not:N \tex_pdfextension:D dest ~ }
-      { \exp_not:N \tex_pdfdest:D }
-      name {#1}
-      fitr ~
-        width  \exp_not:N \box_wd:N \l__pdf_internal_box
-        height \exp_not:N \box_ht:N \l__pdf_internal_box
-        depth  \exp_not:N \box_dp:N \l__pdf_internal_box
-      \box_use:N \l__pdf_internal_box
-    \group_end:
-  }
-\cs_new_protected:Npx \__pdf_backend_catalog_gput:nn #1#2
-  {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D catalog }
-      { \tex_pdfcatalog:D }
-        { / #1 ~ #2 }
-  }
-\cs_new_protected:Npx \__pdf_backend_info_gput:nn #1#2
-  {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D info }
-      { \tex_pdfinfo:D }
-        { / #1 ~ #2 }
-  }
-\prop_new:N \g__pdf_backend_object_prop
-\group_begin:
-  \cs_set_protected:Npn \__pdf_tmp:w #1#2
-    {
-      \cs_new_protected:Npx \__pdf_backend_object_new:nn ##1##2
-        {
-          #1 reserveobjnum ~
-          \int_const:cn
-            { c__pdf_backend_object_ \exp_not:N \tl_to_str:n {##1} _int }
-            {#2}
-          \prop_gput:Nnn \exp_not:N \g__pdf_backend_object_prop {##1} {##2}
-        }
-    }
-  \cs_if_exist:NTF \tex_pdfextension:D
-    {
-      \__pdf_tmp:w
-        { \tex_pdfextension:D obj ~ }
-        { \exp_not:N \tex_pdffeedback:D lastobj }
-    }
-    { \__pdf_tmp:w { \tex_pdfobj:D } { \tex_pdflastobj:D } }
-\group_end:
-\cs_new:Npn \__pdf_backend_object_ref:n #1
-  { \int_use:c { c__pdf_backend_object_ \tl_to_str:n {#1} _int } ~ 0 ~ R }
-\group_begin:
-  \cs_set_protected:Npn \__pdf_tmp:w #1
-    {
-      \cs_new_protected:Npn \__pdf_backend_object_write:nn ##1##2
-        {
-          \tex_immediate:D #1 useobjnum ~
-          \int_use:c
-            { c__pdf_backend_object_ \tl_to_str:n {##1} _int }
-            \str_case_e:nn
-              { \prop_item:Nn \g__pdf_backend_object_prop {##1} }
-              {
-                { array } { { [ ~ \exp_not:n {##2} ~ ] } }
-                { dict }  { { << ~ \exp_not:n {##2} ~ >> } }
-                { fstream }
-                  {
-                    stream ~ attr ~ { \__pdf_exp_not_i:nn ##2 } ~
-                      file ~ { \__pdf_exp_not_ii:nn ##2 }
-                  }
-                { stream }
-                  {
-                    stream ~ attr ~ { \__pdf_exp_not_i:nn ##2 } ~
-                      { \__pdf_exp_not_ii:nn ##2 }
-                  }
-              }
-        }
-    }
-  \cs_if_exist:NTF \tex_pdfextension:D
-    { \__pdf_tmp:w { \tex_pdfextension:D obj ~ } }
-    { \__pdf_tmp:w { \tex_pdfobj:D } }
-\group_end:
-\cs_generate_variant:Nn \__pdf_backend_object_write:nn { nx }
-\cs_new:Npn \__pdf_exp_not_i:nn #1#2 { \exp_not:n {#1} }
-\cs_new:Npn \__pdf_exp_not_ii:nn #1#2 { \exp_not:n {#2} }
-\group_begin:
-  \cs_set_protected:Npn \__pdf_tmp:w #1
-    {
-      \cs_new_protected:Npn \__pdf_backend_object_now:nn ##1##2
-        {
-          \tex_immediate:D #1
-            \str_case:nn
-              {##1}
-              {
-                { array } { { [ ~ \exp_not:n {##2} ~ ] } }
-                { dict }  { { << ~ \exp_not:n {##2} ~ >> } }
-                { fstream }
-                  {
-                    stream ~ attr ~ { \__pdf_exp_not_i:nn ##2 } ~
-                      file ~ { \__pdf_exp_not_ii:nn ##2 }
-                  }
-                { stream }
-                  {
-                    stream ~ attr ~ { \__pdf_exp_not_i:nn ##2 } ~
-                      { \__pdf_exp_not_ii:nn ##2 }
-                  }
-              }
-        }
-    }
-  \cs_if_exist:NTF \tex_pdfextension:D
-    { \__pdf_tmp:w { \tex_pdfextension:D obj ~ } }
-    { \__pdf_tmp:w { \tex_pdfobj:D } }
-\group_end:
-\cs_generate_variant:Nn \__pdf_backend_object_now:nn { nx }
-\cs_new:Npx \__pdf_backend_object_last:
-  {
-    \exp_not:N \int_value:w
-    \cs_if_exist:NTF \tex_pdffeedback:D
-      { \exp_not:N \tex_pdffeedback:D lastobj ~ }
-      { \exp_not:N \tex_pdflastobj:D }
-      \c_space_tl 0 ~ R
-  }
-\cs_new:Npx \__pdf_backend_pageobject_ref:n #1
-  {
-    \exp_not:N \int_value:w
-      \cs_if_exist:NTF \tex_pdffeedback:D
-        { \exp_not:N \tex_pdffeedback:D pageref }
-        { \exp_not:N \tex_pdfpageref:D }
-          \c_space_tl #1 \c_space_tl \c_space_tl \c_space_tl 0 ~ R
-  }
-\cs_new_protected:Npx \__pdf_backend_compresslevel:n #1
-  {
-    \exp_not:N \tex_global:D
-    \cs_if_exist:NTF \tex_pdfcompresslevel:D
-      { \tex_pdfcompresslevel:D }
-      { \tex_pdfvariable:D compresslevel }
-      \exp_not:N \int_value:w \exp_not:N \int_eval:n {#1} \scan_stop:
-  }
-\cs_new_protected:Npn \__pdf_backend_compress_objects:n #1
-  {
-    \bool_if:nTF {#1}
-      { \__pdf_backend_objcompresslevel:n { 2 } }
-      { \__pdf_backend_objcompresslevel:n { 0 } }
-  }
-\cs_new_protected:Npx \__pdf_backend_objcompresslevel:n #1
-  {
-    \exp_not:N \tex_global:D
-    \cs_if_exist:NTF \tex_pdfobjcompresslevel:D
-      { \tex_pdfobjcompresslevel:D }
-      { \tex_pdfvariable:D objcompresslevel }
-      #1 \scan_stop:
-  }
-\cs_new_protected:Npx \__pdf_backend_version_major_gset:n #1
-  {
-    \cs_if_exist:NTF \tex_pdfvariable:D
-      {
-        \int_compare:nNnT \tex_luatexversion:D > { 106 }
-          {
-            \exp_not:N \tex_global:D \tex_pdfvariable:D majorversion
-              \exp_not:N \int_eval:n {#1} \scan_stop:
-          }
-      }
-      {
-        \cs_if_exist:NT \tex_pdfmajorversion:D
-          {
-            \exp_not:N \tex_global:D \tex_pdfmajorversion:D
-              \exp_not:N \int_eval:n {#1} \scan_stop:
-          }
-      }
-  }
-\cs_new_protected:Npx \__pdf_backend_version_minor_gset:n #1
-  {
-    \exp_not:N \tex_global:D
-    \cs_if_exist:NTF \tex_pdfminorversion:D
-      { \exp_not:N \tex_pdfminorversion:D }
-      { \tex_pdfvariable:D minorversion }
-        \exp_not:N \int_eval:n {#1} \scan_stop:
-  }
-\cs_new:Npx \__pdf_backend_version_major:
-  {
-    \cs_if_exist:NTF \tex_pdfvariable:D
-      {
-        \int_compare:nNnTF \tex_luatexversion:D > { 106 }
-          { \exp_not:N \tex_the:D \tex_pdfvariable:D majorversion }
-          { 1 }
-      }
-      {
-        \cs_if_exist:NTF \tex_pdfmajorversion:D
-          { \exp_not:N \tex_the:D \tex_pdfmajorversion:D }
-          { 1 }
-      }
-  }
-\cs_new:Npx \__pdf_backend_version_minor:
-  {
-    \exp_not:N \tex_the:D
-    \cs_if_exist:NTF \tex_pdfminorversion:D
-      { \exp_not:N \tex_pdfminorversion:D }
-      { \tex_pdfvariable:D minorversion }
-  }
-\cs_new_protected:Npn \__pdf_backend_bdc:nn #1#2
-  { \__kernel_backend_literal_page:n { /#1 ~ #2 ~ BDC } }
-\cs_new_protected:Npn \__pdf_backend_emc:
-  { \__kernel_backend_literal_page:n { EMC } }
-%% 
-%%
-%% End of file `l3backend-pdfmode.def'.

Added: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def	2020-09-02 21:36:32 UTC (rev 56244)
@@ -0,0 +1,670 @@
+%%
+%% This is file `l3backend-pdftex.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% l3backend-basics.dtx  (with options: `package,pdftex')
+%% l3backend-color.dtx  (with options: `package,pdftex')
+%% l3backend-box.dtx  (with options: `package,pdftex')
+%% l3backend-draw.dtx  (with options: `package,pdftex')
+%% l3backend-graphics.dtx  (with options: `package,pdftex')
+%% l3backend-pdf.dtx  (with options: `package,pdftex')
+%% 
+%% Copyright (C) 1990-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:
+%% 
+%%    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.
+%% 
+%% File: l3backend-basics.dtx
+\ProvidesExplFile
+  {l3backend-pdftex.def}{2020-09-01}{}
+  {L3 backend support: PDF output (pdfTeX)}
+\cs_if_exist:NTF \__kernel_dependency_version_check:nn
+  {
+    \__kernel_dependency_version_check:nn {2020-09-01}
+      {l3backend-pdftex.def}
+  }
+  {
+    \cs_if_exist_use:cF { @latex at error } { \errmessage }
+      {
+        Mismatched~LaTeX~support~files~detected. \MessageBreak
+        Loading~aborted!
+      }
+      { \use:c { @ehd } }
+    \tex_endinput:D
+  }
+\cs_new_eq:NN \__kernel_backend_literal:e \tex_special:D
+\cs_new_protected:Npn \__kernel_backend_literal:n #1
+  { \__kernel_backend_literal:e { \exp_not:n {#1} } }
+\cs_generate_variant:Nn \__kernel_backend_literal:n { x }
+\cs_new_protected:Npn \__kernel_backend_literal_pdf:n #1
+  {
+    \tex_pdfliteral:D
+      { \exp_not:n {#1} }
+  }
+\cs_generate_variant:Nn \__kernel_backend_literal_pdf:n { x }
+\cs_new_protected:Npn \__kernel_backend_literal_page:n #1
+  {
+    \tex_pdfliteral:D
+        page { \exp_not:n {#1} }
+  }
+\cs_new_protected:Npn \__kernel_backend_scope_begin:
+  {
+    \tex_pdfsave:D
+  }
+\cs_new_protected:Npn \__kernel_backend_scope_end:
+  {
+    \tex_pdfrestore:D
+  }
+\cs_new_protected:Npn \__kernel_backend_matrix:n #1
+  {
+    \tex_pdfsetmatrix:D
+        { \exp_not:n {#1} }
+  }
+\cs_generate_variant:Nn \__kernel_backend_matrix:n { x }
+%% File: l3backend-color.dtx
+\cs_new_protected:Npn \__color_backend_pickup:N #1 { }
+\cs_if_exist:cT { ver at color.sty }
+  {
+    \cs_set_protected:Npn \__color_backend_pickup:N #1
+      {
+        \exp_last_unbraced:Nx \__color_backend_pickup:w
+          { \current at color } ~ 0 ~ 0 ~ 0 \s__color_stop #1
+      }
+    \cs_new_protected:Npn \__color_backend_pickup:w
+      #1 ~ #2 ~ #3 ~ #4 ~ #5 ~ #6 \s__color_stop #7
+      {
+        \str_if_eq:nnTF {#2} { g }
+          { \tl_set:Nn #7 { { gray } {#1} } }
+          {
+            \str_if_eq:nnTF {#4} { rg }
+              { \tl_set:Nn #7 { { rgb } { #1 ~ #2 ~ #3 } } }
+              {
+                 \str_if_eq:nnTF {#5} { k }
+                   { \tl_set:Nn #7 { { cmyk } { #1 ~ #2 ~ #3 ~ #4 } } }
+                   {
+                     \str_if_eq:nnTF {#2} { cs }
+                       {
+                         \tl_set:Nx #7 { { \use:n #1 } { #5 } }
+                       }
+                       {
+                         \tl_set:Nn #7 { { gray } { 0 } }
+                       }
+                   }
+              }
+          }
+      }
+  }
+\int_new:N \l__kernel_color_stack_int
+\cs_new_protected:Npn \__color_backend_select_cmyk:n #1
+  { \__color_backend_select:n { #1 ~ k ~ #1 ~ K } }
+\cs_new_protected:Npn \__color_backend_select_gray:n #1
+  { \__color_backend_select:n { #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
+  {
+    \tex_pdfcolorstack:D
+      \l__kernel_color_stack_int push {#1}
+    \group_insert_after:N \__color_backend_reset:
+  }
+\cs_new_protected:Npn \__color_backend_reset:
+  {
+    \tex_pdfcolorstack:D
+      \l__kernel_color_stack_int pop \scan_stop:
+  }
+\cs_new_protected:Npn \__color_backend_select_separation:nn #1#2
+  { \__color_backend_select:n { /#1 ~ cs ~ /#1 ~ CS ~ #2 ~ scn ~ #2 ~ SCN } }
+\cs_new_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5
+  {
+    \__color_backend_separation_init:n
+      {
+        /Separation
+        / \str_convert_pdfname:n {#1} ~ #2 ~
+        <<
+          /FunctionType ~ 2
+          /Domain ~ [0 ~ 1]
+          \tl_if_blank:nF {#3} { /Range ~ [#3] }
+          /C0 ~ [#4] ~
+          /C1 ~ [#5] /N ~ 1
+        >>
+      }
+    \use:x
+      {
+        \pdfcoredict_gput:nnn
+          { Page / Resources / ColorSpace }
+          { color \int_use:N \g__color_separation_int }
+          { \pdf_object_last: }
+      }
+  }
+\cs_if_exist:NF \pdf_object_now:nn
+  { \cs_gset_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { } }
+\cs_new_protected:Npn \__color_backend_separation_init:n #1
+  {
+    \pdf_object_now:nx { array } {#1}
+  }
+\cs_new_protected:Npn \__color_backend_separation_init_cielab:nnnnn #1#2#3#4#5
+  {
+    \__color_backend_separation_init:nnnnn
+      {#2}
+      { \pdf_object_ref:n { __color_illuminant_cielab_ #1 } }
+      { \c__color_model_range_lab_tl }
+      { 100 ~ 0 ~ 0 }
+      { #3 ~ #4 ~ #5 }
+  }
+\cs_if_exist:NF \pdf_object_now:nn
+  { \cs_gset_protected:Npn \__color_backend_separation_init_cielab:nnnnn #1#2#3#4#5 { } }
+\cs_new_protected:Npn \__color_backend_separation_init_cielab:n #1
+  {
+    \pdf_object_new:nn { __color_illuminant_cielab_ #1 } { array }
+    \pdf_object_write:nx { __color_illuminant_cielab_ #1 }
+      {
+        /Lab ~
+        <<
+         /WhitePoint ~
+           [ \tl_use:c { c__color_model_whitepoint_cielab_ #1 _tl } ]
+         /Range ~ [ \c__color_model_range_lab_tl ]
+        >>
+     }
+  }
+\cs_if_exist:NF \pdf_object_new:nn
+  { \cs_gset_protected:Npn \__color_backend_separation_init_cielab:n #1 { } }
+\cs_new_protected:Npn \__color_backend_fill_cmyk:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ k } }
+\cs_new_protected:Npn \__color_backend_fill_gray:n #1
+  { \__kernel_backend_literal_pdf: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 } }
+\cs_new_protected:Npn \__color_backend_stroke_gray:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ G } }
+\cs_new_protected:Npn \__color_backend_stroke_rgb:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ RG } }
+\cs_new_protected:Npn \__color_backend_fill_separation:nn #1#2
+  { \__kernel_backend_literal_pdf: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 } }
+%% File: l3backend-box.dtx
+\cs_new_protected:Npn \__box_backend_clip:N #1
+  {
+    \__kernel_backend_scope_begin:
+    \__kernel_backend_literal_pdf:x
+      {
+        0~
+        \dim_to_decimal_in_bp:n { -\box_dp:N #1 } ~
+        \dim_to_decimal_in_bp:n { \box_wd:N #1 } ~
+        \dim_to_decimal_in_bp:n { \box_ht:N #1 + \box_dp:N #1 } ~
+        re~W~n
+      }
+    \hbox_overlap_right:n { \box_use:N #1 }
+    \__kernel_backend_scope_end:
+    \skip_horizontal:n { \box_wd:N #1 }
+  }
+\cs_new_protected:Npn \__box_backend_rotate:Nn #1#2
+  { \exp_args:NNf \__box_backend_rotate_aux:Nn #1 { \fp_eval:n {#2} } }
+\cs_new_protected:Npn \__box_backend_rotate_aux:Nn #1#2
+  {
+    \__kernel_backend_scope_begin:
+    \box_set_wd:Nn #1 { 0pt }
+    \fp_set:Nn \l__box_backend_cos_fp { round ( cosd ( #2 ) , 5 ) }
+    \fp_compare:nNnT \l__box_backend_cos_fp = \c_zero_fp
+      { \fp_zero:N \l__box_backend_cos_fp }
+    \fp_set:Nn \l__box_backend_sin_fp { round ( sind ( #2 ) , 5 ) }
+    \__kernel_backend_matrix:x
+      {
+        \fp_use:N \l__box_backend_cos_fp \c_space_tl
+        \fp_compare:nNnTF \l__box_backend_sin_fp = \c_zero_fp
+          { 0~0 }
+          {
+            \fp_use:N \l__box_backend_sin_fp
+            \c_space_tl
+            \fp_eval:n { -\l__box_backend_sin_fp }
+          }
+        \c_space_tl
+        \fp_use:N \l__box_backend_cos_fp
+      }
+   \box_use:N #1
+   \__kernel_backend_scope_end:
+  }
+\fp_new:N \l__box_backend_cos_fp
+\fp_new:N \l__box_backend_sin_fp
+\cs_new_protected:Npn \__box_backend_scale:Nnn #1#2#3
+  {
+    \__kernel_backend_scope_begin:
+    \__kernel_backend_matrix:x
+      {
+        \fp_eval:n { round ( #2 , 5 ) } ~
+        0~0~
+        \fp_eval:n { round ( #3 , 5 ) }
+      }
+    \hbox_overlap_right:n { \box_use:N #1 }
+    \__kernel_backend_scope_end:
+  }
+%% File: l3backend-draw.dtx
+\cs_new_eq:NN \__draw_backend_literal:n \__kernel_backend_literal_pdf:n
+\cs_generate_variant:Nn \__draw_backend_literal:n { x }
+\cs_new_protected:Npn \__draw_backend_begin:
+  { \__draw_backend_scope_begin: }
+\cs_new_protected:Npn \__draw_backend_end:
+  { \__draw_backend_scope_end: }
+\cs_new_eq:NN \__draw_backend_scope_begin: \__kernel_backend_scope_begin:
+\cs_new_eq:NN \__draw_backend_scope_end: \__kernel_backend_scope_end:
+\cs_new_protected:Npn \__draw_backend_moveto:nn #1#2
+  {
+    \__draw_backend_literal:x
+      { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ m }
+  }
+\cs_new_protected:Npn \__draw_backend_lineto:nn #1#2
+  {
+    \__draw_backend_literal:x
+      { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ l }
+  }
+\cs_new_protected:Npn \__draw_backend_curveto:nnnnnn #1#2#3#4#5#6
+  {
+    \__draw_backend_literal:x
+      {
+        \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
+        \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
+        \dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~
+        c
+      }
+ }
+\cs_new_protected:Npn \__draw_backend_rectangle:nnnn #1#2#3#4
+  {
+     \__draw_backend_literal:x
+      {
+        \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
+        \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
+        re
+      }
+  }
+\cs_new_protected:Npn \__draw_backend_evenodd_rule:
+  { \bool_gset_true:N \g__draw_draw_eor_bool }
+\cs_new_protected:Npn \__draw_backend_nonzero_rule:
+  { \bool_gset_false:N \g__draw_draw_eor_bool }
+\bool_new:N \g__draw_draw_eor_bool
+\cs_new_protected:Npn \__draw_backend_closepath:
+  { \__draw_backend_literal:n { h } }
+\cs_new_protected:Npn \__draw_backend_stroke:
+  { \__draw_backend_literal:n { S } }
+\cs_new_protected:Npn \__draw_backend_closestroke:
+  { \__draw_backend_literal:n { s } }
+\cs_new_protected:Npn \__draw_backend_fill:
+  {
+    \__draw_backend_literal:x
+      { f \bool_if:NT \g__draw_draw_eor_bool * }
+  }
+\cs_new_protected:Npn \__draw_backend_fillstroke:
+  {
+    \__draw_backend_literal:x
+      { B \bool_if:NT \g__draw_draw_eor_bool * }
+  }
+\cs_new_protected:Npn \__draw_backend_clip:
+  {
+    \__draw_backend_literal:x
+      { W \bool_if:NT \g__draw_draw_eor_bool * }
+  }
+\cs_new_protected:Npn \__draw_backend_discardpath:
+  { \__draw_backend_literal:n { n } }
+\cs_new_protected:Npn \__draw_backend_dash_pattern:nn #1#2
+  {
+    \__draw_backend_literal:x
+      {
+        [
+          \exp_args:Nf \use:n
+            { \clist_map_function:nN {#1} \__draw_backend_dash:n }
+        ] ~
+        \dim_to_decimal_in_bp:n {#2} ~ d
+      }
+  }
+\cs_new:Npn \__draw_backend_dash:n #1
+  { ~ \dim_to_decimal_in_bp:n {#1} }
+\cs_new_protected:Npn \__draw_backend_linewidth:n #1
+  {
+    \__draw_backend_literal:x
+      { \dim_to_decimal_in_bp:n {#1} ~ w }
+  }
+\cs_new_protected:Npn \__draw_backend_miterlimit:n #1
+  { \__draw_backend_literal:x { #1 ~ M } }
+\cs_new_protected:Npn \__draw_backend_cap_butt:
+  { \__draw_backend_literal:n { 0 ~ J } }
+\cs_new_protected:Npn \__draw_backend_cap_round:
+  { \__draw_backend_literal:n { 1 ~ J } }
+\cs_new_protected:Npn \__draw_backend_cap_rectangle:
+  { \__draw_backend_literal:n { 2 ~ J } }
+\cs_new_protected:Npn \__draw_backend_join_miter:
+  { \__draw_backend_literal:n { 0 ~ j } }
+\cs_new_protected:Npn \__draw_backend_join_round:
+  { \__draw_backend_literal:n { 1 ~ j } }
+\cs_new_protected:Npn \__draw_backend_join_bevel:
+  { \__draw_backend_literal:n { 2 ~ j } }
+\cs_new_protected:Npn \__draw_backend_cm:nnnn #1#2#3#4
+  {
+    \__kernel_backend_matrix:n { #1 ~ #2 ~ #3 ~ #4 }
+  }
+\cs_new_protected:Npn \__draw_backend_box_use:Nnnnn #1#2#3#4#5
+  {
+    \__kernel_backend_scope_begin:
+    \__draw_backend_cm:nnnn {#2} {#3} {#4} {#5}
+    \hbox_overlap_right:n { \box_use:N #1 }
+    \__kernel_backend_scope_end:
+  }
+%% File: l3backend-graphics.dtx
+\tl_new:N \l__graphics_graphics_attr_tl
+\cs_new_protected:Npn \__graphics_backend_getbb_jpg:n #1
+  {
+    \int_zero:N \l_graphics_page_int
+    \tl_clear:N \l_graphics_pagebox_tl
+    \tl_set:Nx \l__graphics_graphics_attr_tl
+      {
+        \tl_if_empty:NF \l_graphics_decodearray_tl
+          { :D \l_graphics_decodearray_tl }
+        \bool_if:NT \l_graphics_interpolate_bool
+          { :I }
+      }
+    \tl_clear:N \l__graphics_graphics_attr_tl
+    \__graphics_backend_getbb_auxi:n {#1}
+  }
+\cs_new_eq:NN \__graphics_backend_getbb_png:n \__graphics_backend_getbb_jpg:n
+\cs_new_protected:Npn \__graphics_backend_getbb_pdf:n #1
+  {
+    \tl_clear:N \l_graphics_decodearray_tl
+    \bool_set_false:N \l_graphics_interpolate_bool
+    \tl_set:Nx \l__graphics_graphics_attr_tl
+      {
+        : \l_graphics_pagebox_tl
+        \int_compare:nNnT \l_graphics_page_int > 1
+          { :P \int_use:N \l_graphics_page_int }
+      }
+    \__graphics_backend_getbb_auxi:n {#1}
+  }
+\cs_new_protected:Npn \__graphics_backend_getbb_auxi:n #1
+  {
+    \graphics_bb_restore:xF { #1 \l__graphics_graphics_attr_tl }
+      { \__graphics_backend_getbb_auxii:n {#1} }
+  }
+\cs_new_protected:Npn \__graphics_backend_getbb_auxii:n #1
+  {
+    \tex_immediate:D \tex_pdfximage:D
+      \bool_lazy_or:nnT
+        { \l_graphics_interpolate_bool }
+        { ! \tl_if_empty_p:N \l_graphics_decodearray_tl }
+        {
+          attr ~
+            {
+              \tl_if_empty:NF \l_graphics_decodearray_tl
+                { /Decode~[ \l_graphics_decodearray_tl ] }
+              \bool_if:NT \l_graphics_interpolate_bool
+                { /Interpolate~true }
+            }
+        }
+      \int_compare:nNnT \l_graphics_page_int > 0
+        { page ~ \int_use:N \l_graphics_page_int }
+      \tl_if_empty:NF \l_graphics_pagebox_tl
+        { \l_graphics_pagebox_tl }
+      {#1}
+    \hbox_set:Nn \l__graphics_internal_box
+      { \tex_pdfrefximage:D \tex_pdflastximage:D }
+    \dim_set:Nn \l_graphics_urx_dim { \box_wd:N \l__graphics_internal_box }
+    \dim_set:Nn \l_graphics_ury_dim { \box_ht:N \l__graphics_internal_box }
+    \int_const:cn { c__graphics_graphics_ #1 \l__graphics_graphics_attr_tl _int }
+      { \tex_the:D \tex_pdflastximage:D }
+    \graphics_bb_save:x { #1 \l__graphics_graphics_attr_tl }
+  }
+\cs_new_protected:Npn \__graphics_backend_include_jpg:n #1
+  {
+    \tex_pdfrefximage:D
+      \int_use:c { c__graphics_graphics_ #1 \l__graphics_graphics_attr_tl _int }
+  }
+\cs_new_eq:NN \__graphics_backend_include_pdf:n \__graphics_backend_include_jpg:n
+\cs_new_eq:NN \__graphics_backend_include_png:n \__graphics_backend_include_jpg:n
+\sys_if_shell:T
+  {
+    \str_new:N \l__graphics_backend_dir_str
+    \str_new:N \l__graphics_backend_name_str
+    \str_new:N \l__graphics_backend_ext_str
+    \cs_new_protected:Npn \__graphics_backend_getbb_eps:n #1
+      {
+        \file_parse_full_name:nNNN {#1}
+          \l__graphics_backend_dir_str
+          \l__graphics_backend_name_str
+          \l__graphics_backend_ext_str
+        \exp_args:Nx \__graphics_backend_getbb_eps:nn
+          {
+            \l__graphics_backend_name_str - \str_tail:N \l__graphics_backend_ext_str
+            -converted-to.pdf
+          }
+          {#1}
+     }
+    \cs_new_protected:Npn \__graphics_backend_getbb_eps:nn #1#2
+      {
+        \file_compare_timestamp:nNnT {#2} > {#1}
+          {
+            \sys_shell_now:n
+              { repstopdf ~ #2 ~ #1 }
+          }
+        \tl_set:Nn \l_graphics_name_tl {#1}
+        \__graphics_backend_getbb_pdf:n {#1}
+      }
+    \cs_new_protected:Npn \__graphics_backend_include_eps:n #1
+      {
+        \file_parse_full_name:nNNN {#1}
+          \l__graphics_backend_dir_str \l__graphics_backend_name_str \l__graphics_backend_ext_str
+        \exp_args:Nx \__graphics_backend_include_pdf:n
+          {
+            \l__graphics_backend_name_str - \str_tail:N \l__graphics_backend_ext_str
+            -converted-to.pdf
+          }
+      }
+  }
+%% File: l3backend-pdf.dtx
+\box_new:N \l__pdf_internal_box
+\cs_new_protected:Npn \__pdf_backend_annotation:nnnn #1#2#3#4
+  {
+    \tex_pdfannot:D
+      width  ~ \dim_eval:n {#1} ~
+      height ~ \dim_eval:n {#2} ~
+      depth  ~ \dim_eval:n {#3} ~
+      {#4}
+  }
+\cs_new:Npx \__pdf_backend_annotation_last:
+  {
+    \exp_not:N \int_value:w
+      \exp_not:N \tex_pdfannot:D
+      \c_space_tl 0 ~ R
+  }
+\cs_new_protected:Npn \__pdf_backend_link_begin_goto:nnw #1#2
+  { \__pdf_backend_link_begin:nnnw {#1} { goto~name } {#2} }
+\cs_new_protected:Npn \__pdf_backend_link_begin_user:nnw #1#2
+  { \__pdf_backend_link_begin:nnnw {#1} { user } {#2} }
+\cs_new_protected:Npn \__pdf_backend_link_begin:nnnw #1#2#3
+  {
+    \tex_pdfstartlink:D
+      attr {#1}
+      #2 {#3}
+  }
+\cs_new_protected:Npn \__pdf_backend_link_end:
+  {
+    \tex_pdfendlink:D
+  }
+\cs_new:Npx \__pdf_backend_link_last:
+  {
+    \exp_not:N \int_value:w
+      \exp_not:N \tex_pdflastlink:D
+      \c_space_tl 0 ~ R
+  }
+\cs_new_protected:Npn \__pdf_backend_link_margin:n #1
+  {
+    \tex_pdflinkmargin:D
+      \dim_eval:n {#1} \scan_stop:
+  }
+\cs_new_protected:Npn \__pdf_backend_destination:nn #1#2
+  {
+    \tex_pdfdest:D
+        name {#1}
+        \str_case:nnF {#2}
+          {
+            { xyz }   { xyz }
+            { fit }   { fit }
+            { fitb }  { fitb }
+            { fitbh } { fitbh }
+            { fitbv } { fitbv }
+            { fith }  { fith }
+            { fitv }  { fitv }
+          }
+          { xyz ~ zoom \fp_eval:n { #2 * 10 } }
+        \scan_stop:
+  }
+\cs_new_protected:Npn \__pdf_backend_destination_box:nn #1#2
+  {
+    \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:
+  }
+\cs_new_protected:Npn \__pdf_backend_catalog_gput:nn #1#2
+  {
+    \tex_pdfcatalog:D
+      { / #1 ~ #2 }
+  }
+\cs_new_protected:Npn \__pdf_backend_info_gput:nn #1#2
+  {
+    \tex_pdfinfo:D
+      { / #1 ~ #2 }
+  }
+\prop_new:N \g__pdf_backend_object_prop
+\cs_new_protected:Npn \__pdf_backend_object_new:nn #1#2
+  {
+    \tex_pdfobj:D
+      reserveobjnum ~
+      \int_const:cn
+        { c__pdf_backend_object_ \tl_to_str:n {#1} _int }
+        { \tex_pdflastobj:D }
+    \prop_gput:Nnn \exp_not:N \g__pdf_backend_object_prop {#1} {#2}
+  }
+\cs_new:Npn \__pdf_backend_object_ref:n #1
+  { \int_use:c { c__pdf_backend_object_ \tl_to_str:n {#1} _int } ~ 0 ~ R }
+\cs_new_protected:Npn \__pdf_backend_object_write:nn #1#2
+  {
+    \tex_immediate:D \tex_pdfobj:D
+      useobjnum ~
+      \int_use:c
+        { c__pdf_backend_object_ \tl_to_str:n {#1} _int }
+      \str_case_e:nn
+        { \prop_item:Nn \g__pdf_backend_object_prop {#1} }
+        {
+          { array } { { [ ~ \exp_not:n {#2} ~ ] } }
+          { dict }  { { << ~ \exp_not:n {#2} ~ >> } }
+          { fstream }
+            {
+              stream ~ attr ~ { \__pdf_exp_not_i:nn #2 } ~
+                file ~ { \__pdf_exp_not_ii:nn #2 }
+            }
+          { stream }
+            {
+              stream ~ attr ~ { \__pdf_exp_not_i:nn #2 } ~
+                { \__pdf_exp_not_ii:nn #2 }
+            }
+        }
+  }
+\cs_generate_variant:Nn \__pdf_backend_object_write:nn { nx }
+\cs_new:Npn \__pdf_exp_not_i:nn #1#2 { \exp_not:n {#1} }
+\cs_new:Npn \__pdf_exp_not_ii:nn #1#2 { \exp_not:n {#2} }
+\cs_new_protected:Npn \__pdf_backend_object_now:nn #1#2
+  {
+    \tex_immediate:D \tex_pdfobj:D
+      \str_case:nn
+        {#1}
+        {
+          { array } { { [ ~ \exp_not:n {#2} ~ ] } }
+          { dict }  { { << ~ \exp_not:n {#2} ~ >> } }
+          { fstream }
+            {
+              stream ~ attr ~ { \__pdf_exp_not_i:nn #2 } ~
+                file ~ { \__pdf_exp_not_ii:nn #2 }
+            }
+          { stream }
+            {
+              stream ~ attr ~ { \__pdf_exp_not_i:nn #2 } ~
+                { \__pdf_exp_not_ii:nn #2 }
+            }
+        }
+  }
+\cs_generate_variant:Nn \__pdf_backend_object_now:nn { nx }
+\cs_new:Npx \__pdf_backend_object_last:
+  {
+    \exp_not:N \int_value:w
+      \exp_not:N \tex_pdflastobj:D
+      \c_space_tl 0 ~ R
+  }
+\cs_new:Npx \__pdf_backend_pageobject_ref:n #1
+  {
+    \exp_not:N \int_value:w
+      \exp_not:N \tex_pdfpageref:D
+          \c_space_tl #1 \c_space_tl \c_space_tl \c_space_tl 0 ~ R
+  }
+\cs_new_protected:Npn \__pdf_backend_compresslevel:n #1
+  {
+    \tex_global:D
+      \tex_pdfcompresslevel:D
+        \int_value:w \int_eval:n {#1} \scan_stop:
+  }
+\cs_new_protected:Npn \__pdf_backend_compress_objects:n #1
+  {
+    \bool_if:nTF {#1}
+      { \__pdf_backend_objcompresslevel:n { 2 } }
+      { \__pdf_backend_objcompresslevel:n { 0 } }
+  }
+\cs_new_protected:Npn \__pdf_backend_objcompresslevel:n #1
+  {
+    \tex_global:D
+      \tex_pdfobjcompresslevel:D
+        #1 \scan_stop:
+  }
+\cs_new_protected:Npx \__pdf_backend_version_major_gset:n #1
+  {
+    \cs_if_exist:NT \tex_pdfmajorversion:D
+      {
+        \exp_not:N \tex_global:D \tex_pdfmajorversion:D
+          \exp_not:N \int_eval:n {#1} \scan_stop:
+      }
+  }
+\cs_new_protected:Npn \__pdf_backend_version_minor_gset:n #1
+  {
+    \tex_global:D
+      \tex_pdfminorversion:D
+        \int_eval:n {#1} \scan_stop:
+  }
+\cs_new:Npx \__pdf_backend_version_major:
+  {
+    \cs_if_exist:NTF \tex_pdfmajorversion:D
+      { \exp_not:N \tex_the:D \tex_pdfmajorversion:D }
+      { 1 }
+  }
+\cs_new:Npn \__pdf_backend_version_minor:
+  {
+    \tex_the:D
+      \tex_pdfminorversion:D
+  }
+\cs_new_protected:Npn \__pdf_backend_bdc:nn #1#2
+  { \__kernel_backend_literal_page:n { /#1 ~ #2 ~ BDC } }
+\cs_new_protected:Npn \__pdf_backend_emc:
+  { \__kernel_backend_literal_page:n { EMC } }
+%% 
+%%
+%% End of file `l3backend-pdftex.def'.


Property changes on: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Deleted: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-xdvipdfmx.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-xdvipdfmx.def	2020-09-02 21:34:30 UTC (rev 56243)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-xdvipdfmx.def	2020-09-02 21:36:32 UTC (rev 56244)
@@ -1,654 +0,0 @@
-%%
-%% This is file `l3backend-xdvipdfmx.def',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% l3backend-basics.dtx  (with options: `package,xdvipdfmx')
-%% l3backend-color.dtx  (with options: `package,xdvipdfmx')
-%% l3backend-box.dtx  (with options: `package,xdvipdfmx')
-%% l3backend-draw.dtx  (with options: `package,xdvipdfmx')
-%% l3backend-graphics.dtx  (with options: `package,xdvipdfmx')
-%% l3backend-pdf.dtx  (with options: `package,xdvipdfmx')
-%% 
-%% Copyright (C) 1990-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:
-%% 
-%%    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.
-%% 
-%% File: l3backend-basics.dtx
-\ProvidesExplFile
-  {l3backend-xdvipdfmx.def}{2020-08-07}{}
-  {L3 backend support: xdvipdfmx}
-\cs_new_eq:NN \__kernel_backend_literal:e \tex_special:D
-\cs_new_protected:Npn \__kernel_backend_literal:n #1
-  { \__kernel_backend_literal:e { \exp_not:n {#1} } }
-\cs_generate_variant:Nn \__kernel_backend_literal:n { x }
-\cs_new_protected:Npn \__kernel_backend_literal_pdf:n #1
-  { \__kernel_backend_literal:n { pdf:literal~ #1 } }
-\cs_generate_variant:Nn \__kernel_backend_literal_pdf:n { x }
-\cs_new_protected:Npn \__kernel_backend_literal_page:n #1
-  { \__kernel_backend_literal:n { pdf:literal~direct~ #1 } }
-\cs_new_protected:Npn \__kernel_backend_scope_begin:
-  { \__kernel_backend_literal:n { x:gsave } }
-\cs_new_protected:Npn \__kernel_backend_scope_end:
-  { \__kernel_backend_literal:n { x:grestore } }
-%% File: l3backend-color.dtx
-\cs_new_protected:Npn \__color_backend_pickup:N #1 { }
-\cs_if_exist:cT { ver at color.sty }
-  {
-     \cs_set_protected:Npn \__color_backend_pickup:N #1
-      {
-        \exp_args:NV \tl_if_head_is_space:nTF \current at color
-          {
-            \tl_set:Nx #1
-               {
-                 { \exp_after:wN \use:n \current at color }
-                 { 1 }
-               }
-          }
-          {
-            \exp_last_unbraced:Nx \__color_backend_pickup:w
-              { \current at color } \s__color_stop #1
-          }
-      }
-    \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \s__color_stop #3
-      { \tl_set:Nn #3 { {#1} {#2} } }
-  }
-\cs_new_protected:Npn \__color_backend_select_cmyk:n #1
-  { \__color_backend_select:n { cmyk ~ #1 } }
-\cs_new_protected:Npn \__color_backend_select_gray:n #1
-  { \__color_backend_select:n { gray ~ #1 } }
-\cs_new_protected:Npn \__color_backend_select_rgb:n #1
-  { \__color_backend_select:n { rgb ~ #1 } }
-\cs_new_protected:Npn \__color_backend_select:n #1
-  {
-    \__kernel_backend_literal:n { color~push~ #1 }
-    \group_insert_after:N \__color_backend_reset:
-  }
-\cs_new_protected:Npn \__color_backend_reset:
-  { \__kernel_backend_literal:n { color~pop } }
-\cs_new_protected:Npn \__color_backend_select_separation:nn #1#2
-  { \__color_backend_select:n {#1} }
-\cs_new_protected:Npn \__color_backend_fill_cmyk:n #1
-  { \__kernel_backend_literal_pdf:n { #1 ~ k } }
-\cs_new_protected:Npn \__color_backend_fill_gray:n #1
-  { \__kernel_backend_literal_pdf: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 } }
-\cs_new_protected:Npn \__color_backend_stroke_gray:n #1
-  { \__kernel_backend_literal_pdf:n { #1 ~ G } }
-\cs_new_protected:Npn \__color_backend_stroke_rgb:n #1
-  { \__kernel_backend_literal_pdf:n { #1 ~ RG } }
-\cs_new_protected:Npn \__color_backend_fill_separation:nn #1#2
-  { \__kernel_backend_literal_pdf: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 } }
-%% File: l3backend-box.dtx
-\cs_new_protected:Npn \__box_backend_clip:N #1
-  {
-    \__kernel_backend_scope_begin:
-    \__kernel_backend_literal_pdf:x
-      {
-        0~
-        \dim_to_decimal_in_bp:n { -\box_dp:N #1 } ~
-        \dim_to_decimal_in_bp:n { \box_wd:N #1 } ~
-        \dim_to_decimal_in_bp:n { \box_ht:N #1 + \box_dp:N #1 } ~
-        re~W~n
-      }
-    \hbox_overlap_right:n { \box_use:N #1 }
-    \__kernel_backend_scope_end:
-    \skip_horizontal:n { \box_wd:N #1 }
-  }
-\cs_new_protected:Npn \__box_backend_rotate:Nn #1#2
-  { \exp_args:NNf \__box_backend_rotate_aux:Nn #1 { \fp_eval:n {#2} } }
-\cs_new_protected:Npn \__box_backend_rotate_aux:Nn #1#2
-  {
-    \__kernel_backend_scope_begin:
-    \__kernel_backend_literal:x
-      {
-        x:rotate~
-        \fp_compare:nNnTF {#2} = \c_zero_fp
-          { 0 }
-          { \fp_eval:n { round ( #2 , 5 ) } }
-      }
-    \box_use:N #1
-    \__kernel_backend_scope_end:
-  }
-\cs_new_protected:Npn \__box_backend_scale:Nnn #1#2#3
-  {
-    \__kernel_backend_scope_begin:
-    \__kernel_backend_literal:x
-      {
-        x:scale~
-        \fp_eval:n { round ( #2 , 5 ) } ~
-        \fp_eval:n { round ( #3 , 5 ) }
-      }
-    \hbox_overlap_right:n { \box_use:N #1 }
-    \__kernel_backend_scope_end:
-  }
-%% File: l3backend-draw.dtx
-\cs_new_eq:NN \__draw_backend_literal:n \__kernel_backend_literal_pdf:n
-\cs_generate_variant:Nn \__draw_backend_literal:n { x }
-\cs_new_protected:Npn \__draw_backend_begin:
-  { \__draw_backend_scope_begin: }
-\cs_new_protected:Npn \__draw_backend_end:
-  { \__draw_backend_scope_end: }
-\cs_new_eq:NN \__draw_backend_scope_begin: \__kernel_backend_scope_begin:
-\cs_new_eq:NN \__draw_backend_scope_end: \__kernel_backend_scope_end:
-\cs_new_protected:Npn \__draw_backend_moveto:nn #1#2
-  {
-    \__draw_backend_literal:x
-      { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ m }
-  }
-\cs_new_protected:Npn \__draw_backend_lineto:nn #1#2
-  {
-    \__draw_backend_literal:x
-      { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ l }
-  }
-\cs_new_protected:Npn \__draw_backend_curveto:nnnnnn #1#2#3#4#5#6
-  {
-    \__draw_backend_literal:x
-      {
-        \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
-        \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
-        \dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~
-        c
-      }
- }
-\cs_new_protected:Npn \__draw_backend_rectangle:nnnn #1#2#3#4
-  {
-     \__draw_backend_literal:x
-      {
-        \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
-        \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
-        re
-      }
-  }
-\cs_new_protected:Npn \__draw_backend_evenodd_rule:
-  { \bool_gset_true:N \g__draw_draw_eor_bool }
-\cs_new_protected:Npn \__draw_backend_nonzero_rule:
-  { \bool_gset_false:N \g__draw_draw_eor_bool }
-\bool_new:N \g__draw_draw_eor_bool
-\cs_new_protected:Npn \__draw_backend_closepath:
-  { \__draw_backend_literal:n { h } }
-\cs_new_protected:Npn \__draw_backend_stroke:
-  { \__draw_backend_literal:n { S } }
-\cs_new_protected:Npn \__draw_backend_closestroke:
-  { \__draw_backend_literal:n { s } }
-\cs_new_protected:Npn \__draw_backend_fill:
-  {
-    \__draw_backend_literal:x
-      { f \bool_if:NT \g__draw_draw_eor_bool * }
-  }
-\cs_new_protected:Npn \__draw_backend_fillstroke:
-  {
-    \__draw_backend_literal:x
-      { B \bool_if:NT \g__draw_draw_eor_bool * }
-  }
-\cs_new_protected:Npn \__draw_backend_clip:
-  {
-    \__draw_backend_literal:x
-      { W \bool_if:NT \g__draw_draw_eor_bool * }
-  }
-\cs_new_protected:Npn \__draw_backend_discardpath:
-  { \__draw_backend_literal:n { n } }
-\cs_new_protected:Npn \__draw_backend_dash_pattern:nn #1#2
-  {
-    \__draw_backend_literal:x
-      {
-        [
-          \exp_args:Nf \use:n
-            { \clist_map_function:nN {#1} \__draw_backend_dash:n }
-        ] ~
-        \dim_to_decimal_in_bp:n {#2} ~ d
-      }
-  }
-\cs_new:Npn \__draw_backend_dash:n #1
-  { ~ \dim_to_decimal_in_bp:n {#1} }
-\cs_new_protected:Npn \__draw_backend_linewidth:n #1
-  {
-    \__draw_backend_literal:x
-      { \dim_to_decimal_in_bp:n {#1} ~ w }
-  }
-\cs_new_protected:Npn \__draw_backend_miterlimit:n #1
-  { \__draw_backend_literal:x { #1 ~ M } }
-\cs_new_protected:Npn \__draw_backend_cap_butt:
-  { \__draw_backend_literal:n { 0 ~ J } }
-\cs_new_protected:Npn \__draw_backend_cap_round:
-  { \__draw_backend_literal:n { 1 ~ J } }
-\cs_new_protected:Npn \__draw_backend_cap_rectangle:
-  { \__draw_backend_literal:n { 2 ~ J } }
-\cs_new_protected:Npn \__draw_backend_join_miter:
-  { \__draw_backend_literal:n { 0 ~ j } }
-\cs_new_protected:Npn \__draw_backend_join_round:
-  { \__draw_backend_literal:n { 1 ~ j } }
-\cs_new_protected:Npn \__draw_backend_join_bevel:
-  { \__draw_backend_literal:n { 2 ~ j } }
-\cs_new_protected:Npn \__draw_backend_cm:nnnn #1#2#3#4
-  {
-    \__draw_backend_cm_decompose:nnnnN {#1} {#2} {#3} {#4}
-      \__draw_backend_cm_aux:nnnn
-  }
-\cs_new_protected:Npn \__draw_backend_cm_aux:nnnn #1#2#3#4
-  {
-    \__kernel_backend_literal:x
-      {
-        x:rotate~
-        \fp_compare:nNnTF {#1} = \c_zero_fp
-          { 0 }
-          { \fp_eval:n { round ( -#1 , 5 ) } }
-      }
-    \__kernel_backend_literal:x
-      {
-        x:scale~
-        \fp_eval:n { round ( #2 , 5 ) } ~
-        \fp_eval:n { round ( #3 , 5 ) }
-      }
-    \__kernel_backend_literal:x
-      {
-        x:rotate~
-        \fp_compare:nNnTF {#4} = \c_zero_fp
-          { 0 }
-          { \fp_eval:n { round ( -#4 , 5 ) } }
-      }
-  }
-\cs_new_protected:Npn \__draw_backend_cm_decompose:nnnnN #1#2#3#4#5
-  {
-    \use:x
-      {
-        \__draw_backend_cm_decompose_auxi:nnnnN
-          { \fp_eval:n { (#1 + #4) / 2 } }
-          { \fp_eval:n { (#1 - #4) / 2 } }
-          { \fp_eval:n { (#3 + #2) / 2 } }
-          { \fp_eval:n { (#3 - #2) / 2 } }
-      }
-        #5
-  }
-\cs_new_protected:Npn \__draw_backend_cm_decompose_auxi:nnnnN #1#2#3#4#5
-  {
-    \use:x
-      {
-        \__draw_backend_cm_decompose_auxii:nnnnN
-          { \fp_eval:n { 2 * sqrt ( #1 * #1 + #4 * #4 ) } }
-          { \fp_eval:n { 2 * sqrt ( #2 * #2 + #3 * #3 ) } }
-          { \fp_eval:n { atand ( #3 , #2 ) } }
-          { \fp_eval:n { atand ( #4 , #1 ) } }
-      }
-         #5
-  }
-\cs_new_protected:Npn \__draw_backend_cm_decompose_auxii:nnnnN #1#2#3#4#5
-  {
-    \use:x
-      {
-        \__draw_backend_cm_decompose_auxiii:nnnnN
-          { \fp_eval:n { ( #4 - #3 ) / 2 } }
-          { \fp_eval:n { ( #1 + #2 ) / 2 } }
-          { \fp_eval:n { ( #1 - #2 ) / 2 } }
-          { \fp_eval:n { ( #4 + #3 ) / 2 } }
-      }
-        #5
-  }
-\cs_new_protected:Npn \__draw_backend_cm_decompose_auxiii:nnnnN #1#2#3#4#5
-  {
-    \fp_compare:nNnTF { abs( #2 ) } > { abs ( #3 ) }
-      { #5 {#1} {#2} {#3} {#4} }
-      { #5 {#1} {#3} {#2} {#4} }
-  }
-\cs_new_protected:Npn \__draw_backend_box_use:Nnnnn #1#2#3#4#5
-  {
-    \__kernel_backend_scope_begin:
-    \__kernel_backend_literal:n
-      { pdf:btrans~matrix~ #2 ~ #3 ~ #4 ~ #5 ~ 0 ~ 0 }
-    \hbox_overlap_right:n { \box_use:N #1 }
-    \__kernel_backend_literal:n { pdf:etrans }
-    \__kernel_backend_scope_end:
-  }
-%% File: l3backend-graphics.dtx
-\cs_new_eq:NN \__graphics_backend_getbb_eps:n \graphics_read_bb:n
-\int_new:N \g__graphics_track_int
-\cs_new_protected:Npn \__graphics_backend_include_eps:n #1
-  {
-    \__kernel_backend_literal:x
-      {
-        PSfile = #1 \c_space_tl
-        llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl
-        lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl
-        urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl
-        ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim
-      }
-  }
-\cs_new_protected:Npn \__graphics_backend_include_jpg:n #1
-  { \__graphics_backend_include_auxi:nn {#1} { image } }
-\cs_new_eq:NN \__graphics_backend_include_png:n \__graphics_backend_include_jpg:n
-\cs_new_protected:Npn \__graphics_backend_include_auxi:nn #1#2
-  {
-    \__graphics_backend_include_auxii:xnn
-      {
-        \tl_if_empty:NF \l_graphics_pagebox_tl
-          { : \l_graphics_pagebox_tl }
-        \int_compare:nNnT \l_graphics_page_int > 1
-          { :P \int_use:N \l_graphics_page_int }
-        \tl_if_empty:NF \l_graphics_decodearray_tl
-          { :D \l_graphics_decodearray_tl }
-        \bool_if:NT \l_graphics_interpolate_bool
-           { :I }
-      }
-      {#1} {#2}
-  }
-\cs_new_protected:Npn \__graphics_backend_include_auxii:nnn #1#2#3
-  {
-    \int_if_exist:cTF { c__graphics_graphics_ #2#1 _int }
-      {
-        \__kernel_backend_literal:x
-          { pdf:usexobj~@graphic \int_use:c { c__graphics_graphics_ #2#1 _int } }
-      }
-      { \__graphics_backend_include_auxiii:nnn {#2} {#1} {#3} }
-  }
-\cs_generate_variant:Nn \__graphics_backend_include_auxii:nnn { x }
-\cs_new_protected:Npn \__graphics_backend_include_auxiii:nnn #1#2#3
-  {
-    \int_gincr:N \g__graphics_track_int
-    \int_const:cn { c__graphics_graphics_ #1#2 _int } { \g__graphics_track_int }
-    \__kernel_backend_literal:x
-      {
-        pdf:#3~
-        @graphic \int_use:c { c__graphics_graphics_ #1#2 _int } ~
-        \int_compare:nNnT \l_graphics_page_int > 1
-          { page ~ \int_use:N \l_graphics_page_int \c_space_tl }
-        \tl_if_empty:NF \l_graphics_pagebox_tl
-          {
-            pagebox ~ \l_graphics_pagebox_tl \c_space_tl
-            bbox ~
-              \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl
-              \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl
-              \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl
-              \dim_to_decimal_in_bp:n \l_graphics_ury_dim \c_space_tl
-          }
-        (#1)
-        \bool_lazy_or:nnT
-          { \l_graphics_interpolate_bool }
-          { ! \tl_if_empty_p:N \l_graphics_decodearray_tl }
-          {
-            <<
-              \tl_if_empty:NF \l_graphics_decodearray_tl
-                { /Decode~[ \l_graphics_decodearray_tl ] }
-              \bool_if:NT \l_graphics_interpolate_bool
-                { /Interpolate~true> }
-            >>
-          }
-      }
-  }
-\cs_new_protected:Npn \__graphics_backend_getbb_jpg:n #1
-  {
-    \int_zero:N \l_graphics_page_int
-    \tl_clear:N \l_graphics_pagebox_tl
-    \__graphics_backend_getbb_auxi:nN {#1} \tex_XeTeXpicfile:D
-  }
-\cs_new_eq:NN \__graphics_backend_getbb_png:n \__graphics_backend_getbb_jpg:n
-\cs_new_protected:Npn \__graphics_backend_getbb_pdf:n #1
-  {
-    \tl_clear:N \l_graphics_decodearray_tl
-    \bool_set_false:N \l_graphics_interpolate_bool
-    \__graphics_backend_getbb_auxi:nN {#1} \tex_XeTeXpdffile:D
-  }
-\cs_new_protected:Npn \__graphics_backend_getbb_auxi:nN #1#2
-  {
-    \int_compare:nNnTF \l_graphics_page_int > 1
-      { \__graphics_backend_getbb_auxii:VnN \l_graphics_page_int {#1} #2  }
-      { \__graphics_backend_getbb_auxiii:nNnn {#1} #2 { :P 1 } { page 1 } }
-  }
-\cs_new_protected:Npn \__graphics_backend_getbb_auxii:nnN #1#2#3
-  { \__graphics_backend_getbb_auxiii:nNnn {#2} #3 { :P #1 } { page #1 } }
-\cs_generate_variant:Nn \__graphics_backend_getbb_auxii:nnN { V }
-\cs_new_protected:Npn \__graphics_backend_getbb_auxiii:nNnn #1#2#3#4
-  {
-    \tl_if_empty:NTF \l_graphics_pagebox_tl
-      { \__graphics_backend_getbb_auxiv:VnNnn \l_graphics_pagebox_tl }
-      { \__graphics_backend_getbb_auxv:nNnn }
-      {#1} #2 {#3} {#4}
-  }
-\cs_new_protected:Npn \__graphics_backend_getbb_auxiv:nnNnn #1#2#3#4#5
-  {
-    \use:x
-      {
-        \__graphics_backend_getbb_auxv:nNnn {#2} #3 { : #1 #4 }
-          { #5 ~ \__graphics_backend_getbb_pagebox:w #1 }
-      }
-  }
-\cs_generate_variant:Nn \__graphics_backend_getbb_auxiv:nnNnn { V }
-\cs_new_protected:Npn \__graphics_backend_getbb_auxv:nNnn #1#2#3#4
-  {
-    \graphics_bb_restore:nF {#1#3}
-      { \__graphics_backend_getbb_auxvi:nNnn {#1} #2 {#3} {#4} }
-  }
-\cs_new_protected:Npn \__graphics_backend_getbb_auxvi:nNnn #1#2#3#4
-  {
-    \hbox_set:Nn \l__graphics_internal_box { #2 #1 ~ #4 }
-    \dim_set:Nn \l_graphics_urx_dim { \box_wd:N \l__graphics_internal_box }
-    \dim_set:Nn \l_graphics_ury_dim { \box_ht:N \l__graphics_internal_box }
-    \graphics_bb_save:n {#1#3}
-  }
-\cs_new:Npn \__graphics_backend_getbb_pagebox:w #1 box {#1}
-\cs_new_protected:Npn \__graphics_backend_include_pdf:n #1
-  {
-    \tex_XeTeXpdffile:D
-      \__graphics_backend_include_pdf_quote:w #1 "#1" \s__graphics_stop \c_space_tl
-      \int_compare:nNnT \l_graphics_page_int > 0
-        { page ~ \int_use:N \l_graphics_page_int \c_space_tl }
-        \exp_after:wN \__graphics_backend_getbb_pagebox:w \l_graphics_pagebox_tl
-  }
-\cs_new:Npn \__graphics_backend_include_pdf_quote:w #1 " #2 " #3 \s__graphics_stop
-  { " #2 " }
-%% File: l3backend-pdf.dtx
-\box_new:N \l__pdf_internal_box
-\cs_new_protected:Npx \__pdf_backend:n #1
-  { \__kernel_backend_literal:n { pdf: #1 } }
-\cs_generate_variant:Nn \__pdf_backend:n { x }
-\cs_new_protected:Npn \__pdf_backend_catalog_gput:nn #1#2
-  { \__pdf_backend:n { put ~ @catalog << /#1 ~ #2 >> } }
-\cs_new_protected:Npn \__pdf_backend_info_gput:nn #1#2
-  { \__pdf_backend:n { docinfo << /#1 ~ #2 >> } }
-\int_new:N \g__pdf_backend_object_int
-\prop_new:N \g__pdf_backend_object_prop
-\cs_new_protected:Npn \__pdf_backend_object_new:nn #1#2
-  {
-    \int_gincr:N \g__pdf_backend_object_int
-    \int_const:cn
-      { c__pdf_backend_object_ \tl_to_str:n {#1} _int }
-      { \g__pdf_backend_object_int }
-    \prop_gput:Nnn \g__pdf_backend_object_prop {#1} {#2}
-  }
-\cs_new:Npn \__pdf_backend_object_ref:n #1
-  { @pdf.obj \int_use:c { c__pdf_backend_object_ \tl_to_str:n {#1} _int } }
-\cs_new_protected:Npn \__pdf_backend_object_write:nn #1#2
-  {
-    \exp_args:Nx \__pdf_backend_object_write:nnn
-      { \prop_item:Nn \g__pdf_backend_object_prop {#1} } {#1} {#2}
-  }
-\cs_generate_variant:Nn \__pdf_backend_object_write:nn { nx }
-\cs_new_protected:Npn \__pdf_backend_object_write:nnn #1#2#3
-  {
-    \use:c { __pdf_backend_object_write_ #1 :nn }
-      { \__pdf_backend_object_ref:n {#2} } {#3}
-  }
-\cs_new_protected:Npn \__pdf_backend_object_write_array:nn #1#2
-  {
-    \__pdf_backend:x
-      { obj ~ #1 ~ [ ~ \exp_not:n {#2} ~ ] }
-  }
-\cs_new_protected:Npn \__pdf_backend_object_write_dict:nn #1#2
-  {
-    \__pdf_backend:x
-      { obj ~ #1 ~ << ~ \exp_not:n {#2} ~ >> }
-  }
-\cs_new_protected:Npn \__pdf_backend_object_write_fstream:nn #1#2
-  { \__pdf_backend_object_write_stream:nnnn { f } {#1} #2 }
-\cs_new_protected:Npn \__pdf_backend_object_write_stream:nn #1#2
-  { \__pdf_backend_object_write_stream:nnnn { } {#1} #2 }
-\cs_new_protected:Npn \__pdf_backend_object_write_stream:nnnn #1#2#3#4
-  {
-    \__pdf_backend:x
-      {
-        #1 stream ~ #2 ~
-          ( \exp_not:n {#4} ) ~ << \exp_not:n {#3} >>
-      }
-  }
-\cs_new_protected:Npn \__pdf_backend_object_now:nn #1#2
-  {
-    \int_gincr:N \g__pdf_backend_object_int
-    \exp_args:Nnx \use:c { __pdf_backend_object_write_ #1 :nn }
-      { @pdf.obj \int_use:N \g__pdf_backend_object_int }
-      {#2}
-  }
-\cs_generate_variant:Nn \__pdf_backend_object_now:nn { nx }
-\cs_new:Npn \__pdf_backend_object_last:
- { @pdf.obj \int_use:N \g__pdf_backend_object_int }
-\cs_new:Npn \__pdf_backend_pageobject_ref:n #1
-  { @page #1 }
-\bool_new:N \g__pdf_landscape_bool
-\cs_if_exist:NT \landscape
-  {
-    \tl_put_right:Nn \landscape
-      { \bool_gset_true:N \g__pdf_landscape_bool }
-    \tl_put_left:Nn \endlandscape
-      { \bool_gset_false:N \g__pdf_landscape_bool }
-  }
-\int_new:N \g__pdf_backend_annotation_int
-\cs_new_protected:Npn \__pdf_backend_annotation:nnnn #1#2#3#4
-  {
-    \bool_if:NTF \g__pdf_landscape_bool
-      {
-         \box_move_up:nn {#2}
-           {
-             \vbox:n
-               {
-                 \__pdf_backend_annotation_aux:nnnn
-                   { #2 + #3 } {#1} { 0pt } {#4}
-               }
-           }
-      }
-      { \__pdf_backend_annotation_aux:nnnn {#1} {#2} {#3} {#4} }
-  }
-\cs_new_protected:Npn \__pdf_backend_annotation_aux:nnnn #1#2#3#4
-  {
-    \int_gincr:N \g__pdf_backend_object_int
-    \int_gset_eq:NN \g__pdf_backend_annotation_int \g__pdf_backend_object_int
-    \__pdf_backend:x
-      {
-        ann ~ @pdf.obj \int_use:N \g__pdf_backend_object_int \c_space_tl
-        width  ~ \dim_eval:n {#1} ~
-        height ~ \dim_eval:n {#2} ~
-        depth  ~ \dim_eval:n {#3} ~
-        <</Type/Annot #4 >>
-      }
-  }
-\cs_new:Npn \__pdf_backend_annotation_last:
- { @pdf.obj \int_use:N \g__pdf_backend_annotation_int }
-\cs_new_protected:Npn \__pdf_backend_link_begin_goto:nnw #1#2
-  { \__pdf_backend_link_begin:n { #1 /Subtype /Link /A << /S /GoTo /D ( #2 ) >> } }
-\cs_new_protected:Npn \__pdf_backend_link_begin_user:nnw #1#2
-  { \__pdf_backend_link_begin:n {#1#2} }
-\cs_new_protected:Npn \__pdf_backend_link_begin:n #1
-  {
-    \__pdf_backend:n
-      {
-         bann
-         <<
-           /Type /Annot
-           #1
-         >>
-      }
-  }
-\cs_new_protected:Npn \__pdf_backend_link_end:
-  { \__pdf_backend:n { eann } }
-\cs_new:Npn \__pdf_backend_link_last: { }
-\cs_new_protected:Npn \__pdf_backend_link_margin:n #1
-  { \__kernel_backend_literal:x { dvipdfmx:config~g~ \dim_eval:n {#1} } }
-\cs_new_protected:Npn \__pdf_backend_destination:nn #1#2
-  {
-    \__pdf_backend:x
-      {
-        dest ~ ( \exp_not:n {#1} )
-        [
-          @thispage
-          \str_case:nnF {#2}
-            {
-              { xyz }   { /XYZ ~ @xpos ~ @ypos ~ null }
-              { fit }   { /Fit }
-              { fitb }  { /FitB }
-              { fitbh } { /FitBH }
-              { fitbv } { /FitBV ~ @xpos }
-              { fith }  { /FitH ~ @ypos }
-              { fitv }  { /FitV ~ @xpos }
-            }
-            { /XYZ ~ @xpos ~ @ypos ~ \fp_eval:n { (#2) / 100 } }
-        ]
-      }
-  }
-\cs_new_protected:Npn \__pdf_backend_destination_box:nn #1#2
-  {
-    \group_begin:
-      \hbox_set:Nn \l__pdf_internal_box {#2}
-      \box_move_down:nn { \box_dp:N \l__pdf_internal_box }
-        {
-          \hbox:n
-            {
-              \__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:
-  }
-\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
-  {
-    \bool_if:nF {#1}
-      { \__kernel_backend_literal:n { dvipdfmx:config~C~0x40 } }
-  }
-\cs_new_protected:Npn \__pdf_backend_version_major_gset:n #1
-  {
-    \cs_gset:Npx \__pdf_backend_version_major: { \int_eval:n {#1} }
-    \__kernel_backend_literal:x { pdf:majorversion~ \__pdf_backend_version_major: }
-  }
-\cs_new_protected:Npn \__pdf_backend_version_minor_gset:n #1
-  {
-    \cs_gset:Npx \__pdf_backend_version_minor: { \int_eval:n {#1} }
-    \__kernel_backend_literal:x { pdf:minorversion~ \__pdf_backend_version_minor: }
-  }
-\cs_new:Npn \__pdf_backend_version_major: { 1 }
-\cs_new:Npn \__pdf_backend_version_minor: { 5 }
-\cs_new_protected:Npn \__pdf_backend_bdc:nn #1#2
-  { \__kernel_backend_literal_page:n { /#1 ~ #2 ~ BDC } }
-\cs_new_protected:Npn \__pdf_backend_emc:
-  { \__kernel_backend_literal_page:n { EMC } }
-%% 
-%%
-%% End of file `l3backend-xdvipdfmx.def'.

Added: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def	2020-09-02 21:36:32 UTC (rev 56244)
@@ -0,0 +1,715 @@
+%%
+%% This is file `l3backend-xetex.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% l3backend-basics.dtx  (with options: `package,xetex')
+%% l3backend-color.dtx  (with options: `package,xetex')
+%% l3backend-box.dtx  (with options: `package,xetex')
+%% l3backend-draw.dtx  (with options: `package,xetex')
+%% l3backend-graphics.dtx  (with options: `package,xetex')
+%% l3backend-pdf.dtx  (with options: `package,xetex')
+%% 
+%% Copyright (C) 1990-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:
+%% 
+%%    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.
+%% 
+%% File: l3backend-basics.dtx
+\ProvidesExplFile
+  {l3backend-xetex.def}{2020-09-01}{}
+  {L3 backend support: XeTeX}
+\cs_if_exist:NTF \__kernel_dependency_version_check:nn
+  {
+    \__kernel_dependency_version_check:nn {2020-09-01}
+      {l3backend-xetex.def}
+  }
+  {
+    \cs_if_exist_use:cF { @latex at error } { \errmessage }
+      {
+        Mismatched~LaTeX~support~files~detected. \MessageBreak
+        Loading~aborted!
+      }
+      { \use:c { @ehd } }
+    \tex_endinput:D
+  }
+\cs_new_eq:NN \__kernel_backend_literal:e \tex_special:D
+\cs_new_protected:Npn \__kernel_backend_literal:n #1
+  { \__kernel_backend_literal:e { \exp_not:n {#1} } }
+\cs_generate_variant:Nn \__kernel_backend_literal:n { x }
+\cs_new_protected:Npn \__kernel_backend_literal_pdf:n #1
+  { \__kernel_backend_literal:n { pdf:literal~ #1 } }
+\cs_generate_variant:Nn \__kernel_backend_literal_pdf:n { x }
+\cs_new_protected:Npn \__kernel_backend_literal_page:n #1
+  { \__kernel_backend_literal:n { pdf:literal~direct~ #1 } }
+\cs_new_protected:Npn \__kernel_backend_scope_begin:
+  { \__kernel_backend_literal:n { x:gsave } }
+\cs_new_protected:Npn \__kernel_backend_scope_end:
+  { \__kernel_backend_literal:n { x:grestore } }
+%% File: l3backend-color.dtx
+\cs_new_protected:Npn \__color_backend_select_cmyk:n #1
+  {
+    \__kernel_backend_literal:n { pdf: bc ~ [#1] }
+    \group_insert_after:N \__color_backend_reset:
+  }
+\cs_new_eq:NN \__color_backend_select_gray:n \__color_backend_select_cmyk:n
+\cs_new_eq:NN \__color_backend_select_rgb:n \__color_backend_select_cmyk:n
+\cs_new_protected:Npn \__color_backend_reset:
+  { \__kernel_backend_literal:n { pdf: ec } }
+\cs_new_protected:Npn \__color_backend_pickup:N #1 { }
+\cs_if_exist:cT { ver at color.sty }
+  {
+     \cs_set_protected:Npn \__color_backend_pickup:N #1
+      {
+        \exp_args:NV \tl_if_head_is_space:nTF \current at color
+          {
+            \tl_set:Nx #1
+               {
+                 { \exp_after:wN \use:n \current at color }
+                 { 1 }
+               }
+          }
+          {
+            \exp_last_unbraced:Nx \__color_backend_pickup:w
+              { \current at color } \s__color_stop #1
+          }
+      }
+    \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \s__color_stop #3
+      { \tl_set:Nn #3 { {#1} {#2} } }
+  }
+\cs_new_protected:Npn \__color_backend_select_separation:nn #1#2
+  { \__color_backend_select:n { @#1 ~ [#2] } }
+\cs_new_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5
+  {
+    \__color_backend_separation_init:n
+      {
+        /Separation
+        / \str_convert_pdfname:n {#1} ~ #2 ~
+        <<
+          /FunctionType ~ 2
+          /Domain ~ [0 ~ 1]
+          \tl_if_blank:nF {#3} { /Range ~ [#3] }
+          /C0 ~ [#4] ~
+          /C1 ~ [#5] /N ~ 1
+        >>
+      }
+  }
+\cs_if_exist:NF \pdf_object_now:nn
+  { \cs_gset_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { } }
+\cs_new_protected:Npn \__color_backend_separation_init:n #1
+  {
+    \__kernel_backend_literal:x
+      {
+        pdf:obj ~ @ color \int_use:N \g__color_separation_int \c_space_tl
+          [#1]
+      }
+  }
+\cs_new_protected:Npn \__color_backend_separation_init_cielab:nnnnn #1#2#3#4#5
+  {
+    \__color_backend_separation_init:nnnnn
+      {#2}
+      { \pdf_object_ref:n { __color_illuminant_cielab_ #1 } }
+      { \c__color_model_range_lab_tl }
+      { 100 ~ 0 ~ 0 }
+      { #3 ~ #4 ~ #5 }
+  }
+\cs_if_exist:NF \pdf_object_now:nn
+  { \cs_gset_protected:Npn \__color_backend_separation_init_cielab:nnnnn #1#2#3#4#5 { } }
+\cs_new_protected:Npn \__color_backend_separation_init_cielab:n #1
+  {
+    \pdf_object_new:nn { __color_illuminant_cielab_ #1 } { array }
+    \pdf_object_write:nx { __color_illuminant_cielab_ #1 }
+      {
+        /Lab ~
+        <<
+         /WhitePoint ~
+           [ \tl_use:c { c__color_model_whitepoint_cielab_ #1 _tl } ]
+         /Range ~ [ \c__color_model_range_lab_tl ]
+        >>
+     }
+  }
+\cs_if_exist:NF \pdf_object_new:nn
+  { \cs_gset_protected:Npn \__color_backend_separation_init_cielab:n #1 { } }
+\cs_new_protected:Npn \__color_backend_fill_cmyk:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ k } }
+\cs_new_protected:Npn \__color_backend_fill_gray:n #1
+  { \__kernel_backend_literal_pdf: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 } }
+\cs_new_protected:Npn \__color_backend_stroke_gray:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ G } }
+\cs_new_protected:Npn \__color_backend_stroke_rgb:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ RG } }
+\cs_new_protected:Npn \__color_backend_fill_separation:nn #1#2
+  { \__kernel_backend_literal_pdf: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 } }
+%% File: l3backend-box.dtx
+\cs_new_protected:Npn \__box_backend_clip:N #1
+  {
+    \__kernel_backend_scope_begin:
+    \__kernel_backend_literal_pdf:x
+      {
+        0~
+        \dim_to_decimal_in_bp:n { -\box_dp:N #1 } ~
+        \dim_to_decimal_in_bp:n { \box_wd:N #1 } ~
+        \dim_to_decimal_in_bp:n { \box_ht:N #1 + \box_dp:N #1 } ~
+        re~W~n
+      }
+    \hbox_overlap_right:n { \box_use:N #1 }
+    \__kernel_backend_scope_end:
+    \skip_horizontal:n { \box_wd:N #1 }
+  }
+\cs_new_protected:Npn \__box_backend_rotate:Nn #1#2
+  { \exp_args:NNf \__box_backend_rotate_aux:Nn #1 { \fp_eval:n {#2} } }
+\cs_new_protected:Npn \__box_backend_rotate_aux:Nn #1#2
+  {
+    \__kernel_backend_scope_begin:
+    \__kernel_backend_literal:x
+      {
+        x:rotate~
+        \fp_compare:nNnTF {#2} = \c_zero_fp
+          { 0 }
+          { \fp_eval:n { round ( #2 , 5 ) } }
+      }
+    \box_use:N #1
+    \__kernel_backend_scope_end:
+  }
+\cs_new_protected:Npn \__box_backend_scale:Nnn #1#2#3
+  {
+    \__kernel_backend_scope_begin:
+    \__kernel_backend_literal:x
+      {
+        x:scale~
+        \fp_eval:n { round ( #2 , 5 ) } ~
+        \fp_eval:n { round ( #3 , 5 ) }
+      }
+    \hbox_overlap_right:n { \box_use:N #1 }
+    \__kernel_backend_scope_end:
+  }
+%% File: l3backend-draw.dtx
+\cs_new_eq:NN \__draw_backend_literal:n \__kernel_backend_literal_pdf:n
+\cs_generate_variant:Nn \__draw_backend_literal:n { x }
+\cs_new_protected:Npn \__draw_backend_begin:
+  { \__draw_backend_scope_begin: }
+\cs_new_protected:Npn \__draw_backend_end:
+  { \__draw_backend_scope_end: }
+\cs_new_eq:NN \__draw_backend_scope_begin: \__kernel_backend_scope_begin:
+\cs_new_eq:NN \__draw_backend_scope_end: \__kernel_backend_scope_end:
+\cs_new_protected:Npn \__draw_backend_moveto:nn #1#2
+  {
+    \__draw_backend_literal:x
+      { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ m }
+  }
+\cs_new_protected:Npn \__draw_backend_lineto:nn #1#2
+  {
+    \__draw_backend_literal:x
+      { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ l }
+  }
+\cs_new_protected:Npn \__draw_backend_curveto:nnnnnn #1#2#3#4#5#6
+  {
+    \__draw_backend_literal:x
+      {
+        \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
+        \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
+        \dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~
+        c
+      }
+ }
+\cs_new_protected:Npn \__draw_backend_rectangle:nnnn #1#2#3#4
+  {
+     \__draw_backend_literal:x
+      {
+        \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
+        \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
+        re
+      }
+  }
+\cs_new_protected:Npn \__draw_backend_evenodd_rule:
+  { \bool_gset_true:N \g__draw_draw_eor_bool }
+\cs_new_protected:Npn \__draw_backend_nonzero_rule:
+  { \bool_gset_false:N \g__draw_draw_eor_bool }
+\bool_new:N \g__draw_draw_eor_bool
+\cs_new_protected:Npn \__draw_backend_closepath:
+  { \__draw_backend_literal:n { h } }
+\cs_new_protected:Npn \__draw_backend_stroke:
+  { \__draw_backend_literal:n { S } }
+\cs_new_protected:Npn \__draw_backend_closestroke:
+  { \__draw_backend_literal:n { s } }
+\cs_new_protected:Npn \__draw_backend_fill:
+  {
+    \__draw_backend_literal:x
+      { f \bool_if:NT \g__draw_draw_eor_bool * }
+  }
+\cs_new_protected:Npn \__draw_backend_fillstroke:
+  {
+    \__draw_backend_literal:x
+      { B \bool_if:NT \g__draw_draw_eor_bool * }
+  }
+\cs_new_protected:Npn \__draw_backend_clip:
+  {
+    \__draw_backend_literal:x
+      { W \bool_if:NT \g__draw_draw_eor_bool * }
+  }
+\cs_new_protected:Npn \__draw_backend_discardpath:
+  { \__draw_backend_literal:n { n } }
+\cs_new_protected:Npn \__draw_backend_dash_pattern:nn #1#2
+  {
+    \__draw_backend_literal:x
+      {
+        [
+          \exp_args:Nf \use:n
+            { \clist_map_function:nN {#1} \__draw_backend_dash:n }
+        ] ~
+        \dim_to_decimal_in_bp:n {#2} ~ d
+      }
+  }
+\cs_new:Npn \__draw_backend_dash:n #1
+  { ~ \dim_to_decimal_in_bp:n {#1} }
+\cs_new_protected:Npn \__draw_backend_linewidth:n #1
+  {
+    \__draw_backend_literal:x
+      { \dim_to_decimal_in_bp:n {#1} ~ w }
+  }
+\cs_new_protected:Npn \__draw_backend_miterlimit:n #1
+  { \__draw_backend_literal:x { #1 ~ M } }
+\cs_new_protected:Npn \__draw_backend_cap_butt:
+  { \__draw_backend_literal:n { 0 ~ J } }
+\cs_new_protected:Npn \__draw_backend_cap_round:
+  { \__draw_backend_literal:n { 1 ~ J } }
+\cs_new_protected:Npn \__draw_backend_cap_rectangle:
+  { \__draw_backend_literal:n { 2 ~ J } }
+\cs_new_protected:Npn \__draw_backend_join_miter:
+  { \__draw_backend_literal:n { 0 ~ j } }
+\cs_new_protected:Npn \__draw_backend_join_round:
+  { \__draw_backend_literal:n { 1 ~ j } }
+\cs_new_protected:Npn \__draw_backend_join_bevel:
+  { \__draw_backend_literal:n { 2 ~ j } }
+\cs_new_protected:Npn \__draw_backend_cm:nnnn #1#2#3#4
+  {
+    \__draw_backend_cm_decompose:nnnnN {#1} {#2} {#3} {#4}
+      \__draw_backend_cm_aux:nnnn
+  }
+\cs_new_protected:Npn \__draw_backend_cm_aux:nnnn #1#2#3#4
+  {
+    \__kernel_backend_literal:x
+      {
+        x:rotate~
+        \fp_compare:nNnTF {#1} = \c_zero_fp
+          { 0 }
+          { \fp_eval:n { round ( -#1 , 5 ) } }
+      }
+    \__kernel_backend_literal:x
+      {
+        x:scale~
+        \fp_eval:n { round ( #2 , 5 ) } ~
+        \fp_eval:n { round ( #3 , 5 ) }
+      }
+    \__kernel_backend_literal:x
+      {
+        x:rotate~
+        \fp_compare:nNnTF {#4} = \c_zero_fp
+          { 0 }
+          { \fp_eval:n { round ( -#4 , 5 ) } }
+      }
+  }
+\cs_new_protected:Npn \__draw_backend_cm_decompose:nnnnN #1#2#3#4#5
+  {
+    \use:x
+      {
+        \__draw_backend_cm_decompose_auxi:nnnnN
+          { \fp_eval:n { (#1 + #4) / 2 } }
+          { \fp_eval:n { (#1 - #4) / 2 } }
+          { \fp_eval:n { (#3 + #2) / 2 } }
+          { \fp_eval:n { (#3 - #2) / 2 } }
+      }
+        #5
+  }
+\cs_new_protected:Npn \__draw_backend_cm_decompose_auxi:nnnnN #1#2#3#4#5
+  {
+    \use:x
+      {
+        \__draw_backend_cm_decompose_auxii:nnnnN
+          { \fp_eval:n { 2 * sqrt ( #1 * #1 + #4 * #4 ) } }
+          { \fp_eval:n { 2 * sqrt ( #2 * #2 + #3 * #3 ) } }
+          { \fp_eval:n { atand ( #3 , #2 ) } }
+          { \fp_eval:n { atand ( #4 , #1 ) } }
+      }
+         #5
+  }
+\cs_new_protected:Npn \__draw_backend_cm_decompose_auxii:nnnnN #1#2#3#4#5
+  {
+    \use:x
+      {
+        \__draw_backend_cm_decompose_auxiii:nnnnN
+          { \fp_eval:n { ( #4 - #3 ) / 2 } }
+          { \fp_eval:n { ( #1 + #2 ) / 2 } }
+          { \fp_eval:n { ( #1 - #2 ) / 2 } }
+          { \fp_eval:n { ( #4 + #3 ) / 2 } }
+      }
+        #5
+  }
+\cs_new_protected:Npn \__draw_backend_cm_decompose_auxiii:nnnnN #1#2#3#4#5
+  {
+    \fp_compare:nNnTF { abs( #2 ) } > { abs ( #3 ) }
+      { #5 {#1} {#2} {#3} {#4} }
+      { #5 {#1} {#3} {#2} {#4} }
+  }
+\cs_new_protected:Npn \__draw_backend_box_use:Nnnnn #1#2#3#4#5
+  {
+    \__kernel_backend_scope_begin:
+    \__kernel_backend_literal:n
+      { pdf:btrans~matrix~ #2 ~ #3 ~ #4 ~ #5 ~ 0 ~ 0 }
+    \hbox_overlap_right:n { \box_use:N #1 }
+    \__kernel_backend_literal:n { pdf:etrans }
+    \__kernel_backend_scope_end:
+  }
+%% File: l3backend-graphics.dtx
+\cs_new_eq:NN \__graphics_backend_getbb_eps:n \graphics_read_bb:n
+\int_new:N \g__graphics_track_int
+\cs_new_protected:Npn \__graphics_backend_include_eps:n #1
+  {
+    \__kernel_backend_literal:x
+      {
+        PSfile = #1 \c_space_tl
+        llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl
+        lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl
+        urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl
+        ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim
+      }
+  }
+\cs_new_protected:Npn \__graphics_backend_include_jpg:n #1
+  { \__graphics_backend_include_auxi:nn {#1} { image } }
+\cs_new_eq:NN \__graphics_backend_include_png:n \__graphics_backend_include_jpg:n
+\cs_new_protected:Npn \__graphics_backend_include_auxi:nn #1#2
+  {
+    \__graphics_backend_include_auxii:xnn
+      {
+        \tl_if_empty:NF \l_graphics_pagebox_tl
+          { : \l_graphics_pagebox_tl }
+        \int_compare:nNnT \l_graphics_page_int > 1
+          { :P \int_use:N \l_graphics_page_int }
+        \tl_if_empty:NF \l_graphics_decodearray_tl
+          { :D \l_graphics_decodearray_tl }
+        \bool_if:NT \l_graphics_interpolate_bool
+           { :I }
+      }
+      {#1} {#2}
+  }
+\cs_new_protected:Npn \__graphics_backend_include_auxii:nnn #1#2#3
+  {
+    \int_if_exist:cTF { c__graphics_graphics_ #2#1 _int }
+      {
+        \__kernel_backend_literal:x
+          { pdf:usexobj~@graphic \int_use:c { c__graphics_graphics_ #2#1 _int } }
+      }
+      { \__graphics_backend_include_auxiii:nnn {#2} {#1} {#3} }
+  }
+\cs_generate_variant:Nn \__graphics_backend_include_auxii:nnn { x }
+\cs_new_protected:Npn \__graphics_backend_include_auxiii:nnn #1#2#3
+  {
+    \int_gincr:N \g__graphics_track_int
+    \int_const:cn { c__graphics_graphics_ #1#2 _int } { \g__graphics_track_int }
+    \__kernel_backend_literal:x
+      {
+        pdf:#3~
+        @graphic \int_use:c { c__graphics_graphics_ #1#2 _int } ~
+        \int_compare:nNnT \l_graphics_page_int > 1
+          { page ~ \int_use:N \l_graphics_page_int \c_space_tl }
+        \tl_if_empty:NF \l_graphics_pagebox_tl
+          {
+            pagebox ~ \l_graphics_pagebox_tl \c_space_tl
+            bbox ~
+              \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl
+              \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl
+              \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl
+              \dim_to_decimal_in_bp:n \l_graphics_ury_dim \c_space_tl
+          }
+        (#1)
+        \bool_lazy_or:nnT
+          { \l_graphics_interpolate_bool }
+          { ! \tl_if_empty_p:N \l_graphics_decodearray_tl }
+          {
+            <<
+              \tl_if_empty:NF \l_graphics_decodearray_tl
+                { /Decode~[ \l_graphics_decodearray_tl ] }
+              \bool_if:NT \l_graphics_interpolate_bool
+                { /Interpolate~true> }
+            >>
+          }
+      }
+  }
+\cs_new_protected:Npn \__graphics_backend_getbb_jpg:n #1
+  {
+    \int_zero:N \l_graphics_page_int
+    \tl_clear:N \l_graphics_pagebox_tl
+    \__graphics_backend_getbb_auxi:nN {#1} \tex_XeTeXpicfile:D
+  }
+\cs_new_eq:NN \__graphics_backend_getbb_png:n \__graphics_backend_getbb_jpg:n
+\cs_new_protected:Npn \__graphics_backend_getbb_pdf:n #1
+  {
+    \tl_clear:N \l_graphics_decodearray_tl
+    \bool_set_false:N \l_graphics_interpolate_bool
+    \__graphics_backend_getbb_auxi:nN {#1} \tex_XeTeXpdffile:D
+  }
+\cs_new_protected:Npn \__graphics_backend_getbb_auxi:nN #1#2
+  {
+    \int_compare:nNnTF \l_graphics_page_int > 1
+      { \__graphics_backend_getbb_auxii:VnN \l_graphics_page_int {#1} #2  }
+      { \__graphics_backend_getbb_auxiii:nNnn {#1} #2 { :P 1 } { page 1 } }
+  }
+\cs_new_protected:Npn \__graphics_backend_getbb_auxii:nnN #1#2#3
+  { \__graphics_backend_getbb_auxiii:nNnn {#2} #3 { :P #1 } { page #1 } }
+\cs_generate_variant:Nn \__graphics_backend_getbb_auxii:nnN { V }
+\cs_new_protected:Npn \__graphics_backend_getbb_auxiii:nNnn #1#2#3#4
+  {
+    \tl_if_empty:NTF \l_graphics_pagebox_tl
+      { \__graphics_backend_getbb_auxiv:VnNnn \l_graphics_pagebox_tl }
+      { \__graphics_backend_getbb_auxv:nNnn }
+      {#1} #2 {#3} {#4}
+  }
+\cs_new_protected:Npn \__graphics_backend_getbb_auxiv:nnNnn #1#2#3#4#5
+  {
+    \use:x
+      {
+        \__graphics_backend_getbb_auxv:nNnn {#2} #3 { : #1 #4 }
+          { #5 ~ \__graphics_backend_getbb_pagebox:w #1 }
+      }
+  }
+\cs_generate_variant:Nn \__graphics_backend_getbb_auxiv:nnNnn { V }
+\cs_new_protected:Npn \__graphics_backend_getbb_auxv:nNnn #1#2#3#4
+  {
+    \graphics_bb_restore:nF {#1#3}
+      { \__graphics_backend_getbb_auxvi:nNnn {#1} #2 {#3} {#4} }
+  }
+\cs_new_protected:Npn \__graphics_backend_getbb_auxvi:nNnn #1#2#3#4
+  {
+    \hbox_set:Nn \l__graphics_internal_box { #2 #1 ~ #4 }
+    \dim_set:Nn \l_graphics_urx_dim { \box_wd:N \l__graphics_internal_box }
+    \dim_set:Nn \l_graphics_ury_dim { \box_ht:N \l__graphics_internal_box }
+    \graphics_bb_save:n {#1#3}
+  }
+\cs_new:Npn \__graphics_backend_getbb_pagebox:w #1 box {#1}
+\cs_new_protected:Npn \__graphics_backend_include_pdf:n #1
+  {
+    \tex_XeTeXpdffile:D
+      \__graphics_backend_include_pdf_quote:w #1 "#1" \s__graphics_stop \c_space_tl
+      \int_compare:nNnT \l_graphics_page_int > 0
+        { page ~ \int_use:N \l_graphics_page_int \c_space_tl }
+        \exp_after:wN \__graphics_backend_getbb_pagebox:w \l_graphics_pagebox_tl
+  }
+\cs_new:Npn \__graphics_backend_include_pdf_quote:w #1 " #2 " #3 \s__graphics_stop
+  { " #2 " }
+%% File: l3backend-pdf.dtx
+\box_new:N \l__pdf_internal_box
+\cs_new_protected:Npx \__pdf_backend:n #1
+  { \__kernel_backend_literal:n { pdf: #1 } }
+\cs_generate_variant:Nn \__pdf_backend:n { x }
+\cs_new_protected:Npn \__pdf_backend_catalog_gput:nn #1#2
+  { \__pdf_backend:n { put ~ @catalog << /#1 ~ #2 >> } }
+\cs_new_protected:Npn \__pdf_backend_info_gput:nn #1#2
+  { \__pdf_backend:n { docinfo << /#1 ~ #2 >> } }
+\int_new:N \g__pdf_backend_object_int
+\prop_new:N \g__pdf_backend_object_prop
+\cs_new_protected:Npn \__pdf_backend_object_new:nn #1#2
+  {
+    \int_gincr:N \g__pdf_backend_object_int
+    \int_const:cn
+      { c__pdf_backend_object_ \tl_to_str:n {#1} _int }
+      { \g__pdf_backend_object_int }
+    \prop_gput:Nnn \g__pdf_backend_object_prop {#1} {#2}
+  }
+\cs_new:Npn \__pdf_backend_object_ref:n #1
+  { @pdf.obj \int_use:c { c__pdf_backend_object_ \tl_to_str:n {#1} _int } }
+\cs_new_protected:Npn \__pdf_backend_object_write:nn #1#2
+  {
+    \exp_args:Nx \__pdf_backend_object_write:nnn
+      { \prop_item:Nn \g__pdf_backend_object_prop {#1} } {#1} {#2}
+  }
+\cs_generate_variant:Nn \__pdf_backend_object_write:nn { nx }
+\cs_new_protected:Npn \__pdf_backend_object_write:nnn #1#2#3
+  {
+    \use:c { __pdf_backend_object_write_ #1 :nn }
+      { \__pdf_backend_object_ref:n {#2} } {#3}
+  }
+\cs_new_protected:Npn \__pdf_backend_object_write_array:nn #1#2
+  {
+    \__pdf_backend:x
+      { obj ~ #1 ~ [ ~ \exp_not:n {#2} ~ ] }
+  }
+\cs_new_protected:Npn \__pdf_backend_object_write_dict:nn #1#2
+  {
+    \__pdf_backend:x
+      { obj ~ #1 ~ << ~ \exp_not:n {#2} ~ >> }
+  }
+\cs_new_protected:Npn \__pdf_backend_object_write_fstream:nn #1#2
+  { \__pdf_backend_object_write_stream:nnnn { f } {#1} #2 }
+\cs_new_protected:Npn \__pdf_backend_object_write_stream:nn #1#2
+  { \__pdf_backend_object_write_stream:nnnn { } {#1} #2 }
+\cs_new_protected:Npn \__pdf_backend_object_write_stream:nnnn #1#2#3#4
+  {
+    \__pdf_backend:x
+      {
+        #1 stream ~ #2 ~
+          ( \exp_not:n {#4} ) ~ << \exp_not:n {#3} >>
+      }
+  }
+\cs_new_protected:Npn \__pdf_backend_object_now:nn #1#2
+  {
+    \int_gincr:N \g__pdf_backend_object_int
+    \exp_args:Nnx \use:c { __pdf_backend_object_write_ #1 :nn }
+      { @pdf.obj \int_use:N \g__pdf_backend_object_int }
+      {#2}
+  }
+\cs_generate_variant:Nn \__pdf_backend_object_now:nn { nx }
+\cs_new:Npn \__pdf_backend_object_last:
+ { @pdf.obj \int_use:N \g__pdf_backend_object_int }
+\cs_new:Npn \__pdf_backend_pageobject_ref:n #1
+  { @page #1 }
+\bool_new:N \g__pdf_landscape_bool
+\cs_if_exist:NT \landscape
+  {
+    \tl_put_right:Nn \landscape
+      { \bool_gset_true:N \g__pdf_landscape_bool }
+    \tl_put_left:Nn \endlandscape
+      { \bool_gset_false:N \g__pdf_landscape_bool }
+  }
+\int_new:N \g__pdf_backend_annotation_int
+\cs_new_protected:Npn \__pdf_backend_annotation:nnnn #1#2#3#4
+  {
+    \bool_if:NTF \g__pdf_landscape_bool
+      {
+         \box_move_up:nn {#2}
+           {
+             \vbox:n
+               {
+                 \__pdf_backend_annotation_aux:nnnn
+                   { #2 + #3 } {#1} { 0pt } {#4}
+               }
+           }
+      }
+      { \__pdf_backend_annotation_aux:nnnn {#1} {#2} {#3} {#4} }
+  }
+\cs_new_protected:Npn \__pdf_backend_annotation_aux:nnnn #1#2#3#4
+  {
+    \int_gincr:N \g__pdf_backend_object_int
+    \int_gset_eq:NN \g__pdf_backend_annotation_int \g__pdf_backend_object_int
+    \__pdf_backend:x
+      {
+        ann ~ @pdf.obj \int_use:N \g__pdf_backend_object_int \c_space_tl
+        width  ~ \dim_eval:n {#1} ~
+        height ~ \dim_eval:n {#2} ~
+        depth  ~ \dim_eval:n {#3} ~
+        <</Type/Annot #4 >>
+      }
+  }
+\cs_new:Npn \__pdf_backend_annotation_last:
+ { @pdf.obj \int_use:N \g__pdf_backend_annotation_int }
+\cs_new_protected:Npn \__pdf_backend_link_begin_goto:nnw #1#2
+  { \__pdf_backend_link_begin:n { #1 /Subtype /Link /A << /S /GoTo /D ( #2 ) >> } }
+\cs_new_protected:Npn \__pdf_backend_link_begin_user:nnw #1#2
+  { \__pdf_backend_link_begin:n {#1#2} }
+\cs_new_protected:Npn \__pdf_backend_link_begin:n #1
+  {
+    \__pdf_backend:n
+      {
+         bann
+         <<
+           /Type /Annot
+           #1
+         >>
+      }
+  }
+\cs_new_protected:Npn \__pdf_backend_link_end:
+  { \__pdf_backend:n { eann } }
+\cs_new:Npn \__pdf_backend_link_last: { }
+\cs_new_protected:Npn \__pdf_backend_link_margin:n #1
+  { \__kernel_backend_literal:x { dvipdfmx:config~g~ \dim_eval:n {#1} } }
+\cs_new_protected:Npn \__pdf_backend_destination:nn #1#2
+  {
+    \__pdf_backend:x
+      {
+        dest ~ ( \exp_not:n {#1} )
+        [
+          @thispage
+          \str_case:nnF {#2}
+            {
+              { xyz }   { /XYZ ~ @xpos ~ @ypos ~ null }
+              { fit }   { /Fit }
+              { fitb }  { /FitB }
+              { fitbh } { /FitBH }
+              { fitbv } { /FitBV ~ @xpos }
+              { fith }  { /FitH ~ @ypos }
+              { fitv }  { /FitV ~ @xpos }
+            }
+            { /XYZ ~ @xpos ~ @ypos ~ \fp_eval:n { (#2) / 100 } }
+        ]
+      }
+  }
+\cs_new_protected:Npn \__pdf_backend_destination_box:nn #1#2
+  {
+    \group_begin:
+      \hbox_set:Nn \l__pdf_internal_box {#2}
+      \box_move_down:nn { \box_dp:N \l__pdf_internal_box }
+        {
+          \hbox:n
+            {
+              \__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:
+  }
+\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
+  {
+    \bool_if:nF {#1}
+      { \__kernel_backend_literal:n { dvipdfmx:config~C~0x40 } }
+  }
+\cs_new_protected:Npn \__pdf_backend_version_major_gset:n #1
+  {
+    \cs_gset:Npx \__pdf_backend_version_major: { \int_eval:n {#1} }
+    \__kernel_backend_literal:x { pdf:majorversion~ \__pdf_backend_version_major: }
+  }
+\cs_new_protected:Npn \__pdf_backend_version_minor_gset:n #1
+  {
+    \cs_gset:Npx \__pdf_backend_version_minor: { \int_eval:n {#1} }
+    \__kernel_backend_literal:x { pdf:minorversion~ \__pdf_backend_version_minor: }
+  }
+\cs_new:Npn \__pdf_backend_version_major: { 1 }
+\cs_new:Npn \__pdf_backend_version_minor: { 5 }
+\cs_new_protected:Npn \__pdf_backend_bdc:nn #1#2
+  { \__kernel_backend_literal_page:n { /#1 ~ #2 ~ BDC } }
+\cs_new_protected:Npn \__pdf_backend_emc:
+  { \__kernel_backend_literal_page:n { EMC } }
+%% 
+%%
+%% End of file `l3backend-xetex.def'.


Property changes on: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property


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