diff options
author | Norbert Preining <norbert@preining.info> | 2024-03-15 03:06:35 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2024-03-15 03:06:35 +0000 |
commit | 12679ab7d3c2a210f4123163671b532b8b55d5f9 (patch) | |
tree | 0060d13467186ad977f4e73488ee20dd6c0017ab /macros/latex/contrib/l3backend | |
parent | 62170822e034fdd3f81de7274835d0d3b0467100 (diff) |
CTAN sync 202403150306
Diffstat (limited to 'macros/latex/contrib/l3backend')
-rw-r--r-- | macros/latex/contrib/l3backend/CHANGELOG.md | 16 | ||||
-rw-r--r-- | macros/latex/contrib/l3backend/README.md | 2 | ||||
-rw-r--r-- | macros/latex/contrib/l3backend/l3backend-basics.dtx | 14 | ||||
-rw-r--r-- | macros/latex/contrib/l3backend/l3backend-box.dtx | 2 | ||||
-rw-r--r-- | macros/latex/contrib/l3backend/l3backend-code.pdf | bin | 910339 -> 908163 bytes | |||
-rw-r--r-- | macros/latex/contrib/l3backend/l3backend-code.tex | 2 | ||||
-rw-r--r-- | macros/latex/contrib/l3backend/l3backend-color.dtx | 2 | ||||
-rw-r--r-- | macros/latex/contrib/l3backend/l3backend-draw.dtx | 47 | ||||
-rw-r--r-- | macros/latex/contrib/l3backend/l3backend-graphics.dtx | 2 | ||||
-rw-r--r-- | macros/latex/contrib/l3backend/l3backend-header.dtx | 2 | ||||
-rw-r--r-- | macros/latex/contrib/l3backend/l3backend-opacity.dtx | 78 | ||||
-rw-r--r-- | macros/latex/contrib/l3backend/l3backend-pdf.dtx | 2 |
12 files changed, 90 insertions, 79 deletions
diff --git a/macros/latex/contrib/l3backend/CHANGELOG.md b/macros/latex/contrib/l3backend/CHANGELOG.md index 02dfdd3e13..66a69a3bb3 100644 --- a/macros/latex/contrib/l3backend/CHANGELOG.md +++ b/macros/latex/contrib/l3backend/CHANGELOG.md @@ -6,6 +6,19 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2024-03-14] + +### Removed +- Range guard for opacity + +### Fixed +- Initiation of opacity data (see \#1472) +- ExtGState setup for stroking opacity (issue \#1472) +- Inconsistent behavior of opacity functions w/o `pdfmanagement` + (issue \#1473) +- Redundant braces in opacity backend for dvisvgm +- Interaction of scope with box insertion with `dvips` (see \#1504) + ## [2024-02-20] ### Fixed @@ -326,7 +339,8 @@ this project uses date-based 'snapshot' version identifiers. - Include `l3backend` in file names - Moved backend code to internal for each 'parent' module -[Unreleased]: https://github.com/latex3/latex3/compare/2024-02-20...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2024-03-14...HEAD +[2024-03-14]: https://github.com/latex3/latex3/compare/2024-02-20...2024-03-14 [2024-02-20]: https://github.com/latex3/latex3/compare/2024-01-04...2024-02-20 [2024-01-04]: https://github.com/latex3/latex3/compare/2023-11-09...2024-01-04 [2023-11-09]: https://github.com/latex3/latex3/compare/2023-11-04...2023-11-09 diff --git a/macros/latex/contrib/l3backend/README.md b/macros/latex/contrib/l3backend/README.md index 3bfc823410..7be33df8b8 100644 --- a/macros/latex/contrib/l3backend/README.md +++ b/macros/latex/contrib/l3backend/README.md @@ -1,7 +1,7 @@ LaTeX3 Backend Drivers ====================== -Release 2024-02-20 +Release 2024-03-14 This package forms parts of `expl3`, and contains the code used to interface with backends (drivers) across the `expl3` codebase. The functions here are diff --git a/macros/latex/contrib/l3backend/l3backend-basics.dtx b/macros/latex/contrib/l3backend/l3backend-basics.dtx index c80d51e06d..4d3b68225a 100644 --- a/macros/latex/contrib/l3backend/l3backend-basics.dtx +++ b/macros/latex/contrib/l3backend/l3backend-basics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -70,27 +70,27 @@ % \begin{macrocode} \ProvidesExplFile %<*dvipdfmx> - {l3backend-dvipdfmx.def}{2024-02-20}{} + {l3backend-dvipdfmx.def}{2024-03-14}{} {L3 backend support: dvipdfmx} %</dvipdfmx> %<*dvips> - {l3backend-dvips.def}{2024-02-20}{} + {l3backend-dvips.def}{2024-03-14}{} {L3 backend support: dvips} %</dvips> %<*dvisvgm> - {l3backend-dvisvgm.def}{2024-02-20}{} + {l3backend-dvisvgm.def}{2024-03-14}{} {L3 backend support: dvisvgm} %</dvisvgm> %<*luatex> - {l3backend-luatex.def}{2024-02-20}{} + {l3backend-luatex.def}{2024-03-14}{} {L3 backend support: PDF output (LuaTeX)} %</luatex> %<*pdftex> - {l3backend-pdftex.def}{2024-02-20}{} + {l3backend-pdftex.def}{2024-03-14}{} {L3 backend support: PDF output (pdfTeX)} %</pdftex> %<*xetex> - {l3backend-xetex.def}{2024-02-20}{} + {l3backend-xetex.def}{2024-03-14}{} {L3 backend support: XeTeX} %</xetex> % \end{macrocode} diff --git a/macros/latex/contrib/l3backend/l3backend-box.dtx b/macros/latex/contrib/l3backend/l3backend-box.dtx index 4b0059c2b9..3fc3243c42 100644 --- a/macros/latex/contrib/l3backend/l3backend-box.dtx +++ b/macros/latex/contrib/l3backend/l3backend-box.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/macros/latex/contrib/l3backend/l3backend-code.pdf b/macros/latex/contrib/l3backend/l3backend-code.pdf Binary files differindex c62351ab98..9affc7d856 100644 --- a/macros/latex/contrib/l3backend/l3backend-code.pdf +++ b/macros/latex/contrib/l3backend/l3backend-code.pdf diff --git a/macros/latex/contrib/l3backend/l3backend-code.tex b/macros/latex/contrib/l3backend/l3backend-code.tex index d8a1ca7cf6..df0dd0ea8c 100644 --- a/macros/latex/contrib/l3backend/l3backend-code.tex +++ b/macros/latex/contrib/l3backend/l3backend-code.tex @@ -26,7 +26,7 @@ for those people who are interested. \fi -\documentclass{l3doc} +\documentclass[full,kernel]{l3doc} \begin{document} diff --git a/macros/latex/contrib/l3backend/l3backend-color.dtx b/macros/latex/contrib/l3backend/l3backend-color.dtx index 907ca91c6e..eaa89add8c 100644 --- a/macros/latex/contrib/l3backend/l3backend-color.dtx +++ b/macros/latex/contrib/l3backend/l3backend-color.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/macros/latex/contrib/l3backend/l3backend-draw.dtx b/macros/latex/contrib/l3backend/l3backend-draw.dtx index ee33a717fe..eef86886f5 100644 --- a/macros/latex/contrib/l3backend/l3backend-draw.dtx +++ b/macros/latex/contrib/l3backend/l3backend-draw.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -68,7 +68,7 @@ % % \begin{macro}{\@@_backend_literal:n, \@@_backend_literal:e} % The same as literal PostScript: same arguments about positioning apply -% her. +% here. % \begin{macrocode} \cs_new_eq:NN \@@_backend_literal:n \__kernel_backend_literal_postscript:n \cs_generate_variant:Nn \@@_backend_literal:n { e } @@ -81,23 +81,20 @@ % but where we can't split material between separate calls. The % |@beginspecial|/|@endspecial| pair are from |special.pro| and correct the % scale and $y$-axis direction. -% In contrast to \pkg{pgf}, we don't save the current point: -% discussion with Tom Rokici suggested a better way to handle the necessary -% translations (see \cs{@@_backend_box_use:Nnnnn}). (Note that -% |@beginspecial|/|@endspecial| forms a backend scope.) The |[begin]|/^^A -% |[end]| lines are handled differently from the rest as they are -% conceptually different: not really drawing literals but instructions to -% \texttt{dvips} itself. +% As for \pkg{pgf}, we need to save the current point as this is +% required for box placement. (Note that +% |@beginspecial|/|@endspecial| forms a backend scope.) % \begin{macrocode} \cs_new_protected:Npn \@@_backend_begin: { - \__kernel_backend_literal:n { ps::[begin] } + \@@_backend_literal:n { [begin] } + \@@_backend_literal:n { /draw.x~currentpoint~/draw.y~exch~def~def } \@@_backend_literal:n { @beginspecial } } \cs_new_protected:Npn \@@_backend_end: { \@@_backend_literal:n { @endspecial } - \__kernel_backend_literal:n { ps::[end] } + \@@_backend_literal:n { [end] } } % \end{macrocode} % \end{macro} @@ -350,21 +347,23 @@ % Inside a picture |@beginspecial|/|@endspecial| are active, which is % normally a good thing but means that the position and scaling would be off % if the box was inserted directly. To deal with that, there are a number of -% possible approaches. The implementation here was suggested by Tom Rokici -% (author of \texttt{dvips}). We end the current special placement, then -% set the current point with a literal |[begin]|. As for general -% literals, we then use the stack to store the current point and move to -% it. To insert the required transformation, we have to flip the $y$-axis, -% once before and once after it. Then we get back to the \TeX{} reference -% point to insert our content. The clean up has to happen in the right -% places, hence the |[begin]|/|[end]| pair around |restore|. Finally, -% we can return to \enquote{normal} drawing mode. Notice that the set up -% here is very similar to that in \cs{@@_align_currentpoint_\ldots}, but -% the ordering of saving and restoring is different (intermixed). +% possible approaches. A previous implementation suggested by Tom Rokici +% used |@endspecial|/|@beginspecial|. This avoids needing internals of +% \texttt{dvips}, but fails if there the box is used inside a scope +% (see \url{https://github.com/latex3/latex3/issues/1504}). Instead, +% we use the same method as \pkg{pgf}, which means tracking the position +% at the PostScript level. Also note that using |@endspecial| would +% close the scope it creates, meaning that after a box insertion, any +% local changes would be lost. Keeping \texttt{dvips} on track is +% non-trivial, hence the |[begin]|/|[end]| pair before the +% |save| and around the |restore|. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_box_use:Nnnnn #1#2#3#4#5 { - \@@_backend_literal:n { @endspecial } + \@@_backend_literal:n { save } + \@@_backend_literal:n { 72~Resolution~div~72~VResolution~div~neg~scale } + \@@_backend_literal:n { magscale { 1~DVImag~div~dup~scale } if } + \@@_backend_literal:n { draw.x~neg~draw.y~neg~translate } \@@_backend_literal:n { [end] } \@@_backend_literal:n { [begin] } \@@_backend_literal:n { save } @@ -380,7 +379,7 @@ \@@_backend_literal:n { restore } \@@_backend_literal:n { [end] } \@@_backend_literal:n { [begin] } - \@@_backend_literal:n { @beginspecial } + \@@_backend_literal:n { restore } } % \end{macrocode} % \end{macro} diff --git a/macros/latex/contrib/l3backend/l3backend-graphics.dtx b/macros/latex/contrib/l3backend/l3backend-graphics.dtx index cb959169d9..9360bffd2e 100644 --- a/macros/latex/contrib/l3backend/l3backend-graphics.dtx +++ b/macros/latex/contrib/l3backend/l3backend-graphics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/macros/latex/contrib/l3backend/l3backend-header.dtx b/macros/latex/contrib/l3backend/l3backend-header.dtx index d7b6d4c37c..84f8ab53b7 100644 --- a/macros/latex/contrib/l3backend/l3backend-header.dtx +++ b/macros/latex/contrib/l3backend/l3backend-header.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/macros/latex/contrib/l3backend/l3backend-opacity.dtx b/macros/latex/contrib/l3backend/l3backend-opacity.dtx index 6cc972f7d8..a5828bfd90 100644 --- a/macros/latex/contrib/l3backend/l3backend-opacity.dtx +++ b/macros/latex/contrib/l3backend/l3backend-opacity.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -71,9 +71,9 @@ %<*dvips> % \end{macrocode} % -% \begin{macro}{\@@_backend_select:n,\@@_backend_select_aux:n} +% \begin{macro}{\@@_backend_select:n} % \begin{macro}{\@@_backend_fill:n, \@@_backend_stroke:n} -% \begin{macro}{\@@_backend:nnn, \@@_backend:enn} +% \begin{macro}{\@@_backend:nnn} % No stack so set values directly. The need to deal with Distiller and % Ghostscript separately means we use a common auxiliary: the two % systems require different PostScript for transparency. This is @@ -83,25 +83,20 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_select:n #1 { - \exp_args:Ne \@@_backend_select_aux:n - { \fp_eval:n { min(max(0,#1),1) } } - } -\cs_new_protected:Npn \@@_backend_select_aux:n #1 - { \@@_backend:nnn {#1} { fill } { ca } \@@_backend:nnn {#1} { stroke } { CA } } \cs_new_protected:Npn \@@_backend_fill:n #1 { - \@@_backend:enn - { \fp_eval:n { min(max(0,#1),1) } } + \@@_backend:nnn + { #1 } { fill } { ca } } \cs_new_protected:Npn \@@_backend_stroke:n #1 { - \@@_backend:enn - { \fp_eval:n { min(max(0,#1),1) } } + \@@_backend:nnn + { #1 } { stroke } { CA } } @@ -124,7 +119,6 @@ ifelse } } -\cs_generate_variant:Nn \@@_backend:nnn { e } % \end{macrocode} % \end{macro} % \end{macro} @@ -143,7 +137,7 @@ % \begin{macrocode} \bool_lazy_and:nnT { \cs_if_exist_p:N \pdfmanagement_if_active_p: } - { \pdfmanagement_if_active_p:} + { \pdfmanagement_if_active_p: } { %<*luatex|pdftex> \__kernel_color_backend_stack_init:Nnn \c_@@_backend_stack_int @@ -157,24 +151,21 @@ % % \begin{variable}{\l_@@_backend_fill_tl, \l_@@_backend_stroke_tl} % We use |tl| here for speed: at the backend, this should be reasonable. +% Both need to start off fully opaque. % \begin{macrocode} \tl_new:N \l_@@_backend_fill_tl \tl_new:N \l_@@_backend_stroke_tl +\tl_set:Nn \l_@@_backend_fill_tl { 1 } +\tl_set:Nn \l_@@_backend_stroke_tl { 1 } % \end{macrocode} % \end{variable} % -% \begin{macro}{\@@_backend_select:n, \@@_backend_select_aux:n} +% \begin{macro}{\@@_backend_select:n} % \begin{macro}{\@@_backend_reset:} -% Other than the need to evaluate the opacity as an \texttt{fp}, much the -% same as color. +% Much the same as color. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_select:n #1 { - \exp_args:Ne \@@_backend_select_aux:n - { \fp_eval:n { min(max(0,#1),1) } } - } -\cs_new_protected:Npn \@@_backend_select_aux:n #1 - { \tl_set:Nn \l_@@_backend_fill_tl {#1} \tl_set:Nn \l_@@_backend_stroke_tl {#1} \pdfmanagement_add:nnn { Page / Resources / ExtGState } @@ -189,12 +180,6 @@ { /opacity #1 ~ gs } \group_insert_after:N \@@_backend_reset: } -\bool_lazy_and:nnF - { \cs_if_exist_p:N \pdfmanagement_if_active_p: } - { \pdfmanagement_if_active_p:} - { - \cs_gset_protected:Npn \@@_backend_select_aux:n #1 { } - } \cs_new_protected:Npn \@@_backend_reset: { %<*dvipdfmx|xetex> @@ -210,26 +195,26 @@ % \end{macro} % % \begin{macro}{\@@_backend_fill:n, \@@_backend_stroke:n} -% \begin{macro}{\@@_backend_fillstroke:nn, \@@_backend_fillstroke:ee} +% \begin{macro}{\@@_backend_fill_stroke:nn} % For separate fill and stroke, we need to work out if we need to do % more work or if we can stick to a single setting. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_fill:n #1 { - \@@_backend_fill_stroke:ee - { \fp_eval:n { min(max(0,#1),1) } } - \l_@@_backend_stroke_tl + \exp_args:Nno \@@_backend_fill_stroke:nn + { #1 } + { \l_@@_backend_stroke_tl } } \cs_new_protected:Npn \@@_backend_stroke:n #1 { - \@@_backend_fill_stroke:ee - \l_@@_backend_fill_tl - { \fp_eval:n { min(max(0,#1),1) } } + \exp_args:No \@@_backend_fill_stroke:nn + { \l_@@_backend_fill_tl } + { #1 } } \cs_new_protected:Npn \@@_backend_fill_stroke:nn #1#2 { \str_if_eq:nnTF {#1} {#2} - { \@@_backend_select_aux:n {#1} } + { \@@_backend_select:n {#1} } { \tl_set:Nn \l_@@_backend_fill_tl {#1} \tl_set:Nn \l_@@_backend_stroke_tl {#2} @@ -237,7 +222,7 @@ { opacity.fill #1 } { << /ca ~ #1 >> } \pdfmanagement_add:nnn { Page / Resources / ExtGState } - { opacity.stroke #1 } + { opacity.stroke #2 } { << /CA ~ #2 >> } %<*dvipdfmx|xetex> \__kernel_backend_literal_pdf:n @@ -249,11 +234,24 @@ \group_insert_after:N \@@_backend_reset: } } -\cs_generate_variant:Nn \@@_backend_fill_stroke:nn { ee } % \end{macrocode} % \end{macro} % \end{macro} % +% \begin{macro}{\@@_backend_select:n, \@@_backend_fill_stroke:nn} +% Redefine them to stubs if pdfmanagement is either not loaded or +% deactivated. +% \begin{macrocode} +\bool_lazy_and:nnF + { \cs_if_exist_p:N \pdfmanagement_if_active_p: } + { \pdfmanagement_if_active_p: } + { + \cs_gset_protected:Npn \@@_backend_select:n #1 { } + \cs_gset_protected:Npn \@@_backend_fill_stroke:nn #1#2 { } + } +% \end{macrocode} +% \end{macro} +% % \begin{macrocode} %</dvipdfmx|luatex|pdftex|xetex> % \end{macrocode} @@ -272,9 +270,9 @@ \cs_new_protected:Npn \@@_backend_fill:n #1 { \@@_backend:nn {#1} { fill- } } \cs_new_protected:Npn \@@_backend_stroke:n #1 - { \@@_backend:nn { {#1} } { stroke- } } + { \@@_backend:nn {#1} { stroke- } } \cs_new_protected:Npn \@@_backend:nn #1#2 - { \__kernel_backend_scope:e { #2 opacity = " \fp_eval:n { min(max(0,#1),1) } " } } + { \__kernel_backend_scope:e { #2 opacity = " #1 " } } % \end{macrocode} % \end{macro} % \end{macro} diff --git a/macros/latex/contrib/l3backend/l3backend-pdf.dtx b/macros/latex/contrib/l3backend/l3backend-pdf.dtx index 472b7adefa..0a16a79f9e 100644 --- a/macros/latex/contrib/l3backend/l3backend-pdf.dtx +++ b/macros/latex/contrib/l3backend/l3backend-pdf.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % |