summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/l3backend
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2024-03-15 03:06:35 +0000
committerNorbert Preining <norbert@preining.info>2024-03-15 03:06:35 +0000
commit12679ab7d3c2a210f4123163671b532b8b55d5f9 (patch)
tree0060d13467186ad977f4e73488ee20dd6c0017ab /macros/latex/contrib/l3backend
parent62170822e034fdd3f81de7274835d0d3b0467100 (diff)
CTAN sync 202403150306
Diffstat (limited to 'macros/latex/contrib/l3backend')
-rw-r--r--macros/latex/contrib/l3backend/CHANGELOG.md16
-rw-r--r--macros/latex/contrib/l3backend/README.md2
-rw-r--r--macros/latex/contrib/l3backend/l3backend-basics.dtx14
-rw-r--r--macros/latex/contrib/l3backend/l3backend-box.dtx2
-rw-r--r--macros/latex/contrib/l3backend/l3backend-code.pdfbin910339 -> 908163 bytes
-rw-r--r--macros/latex/contrib/l3backend/l3backend-code.tex2
-rw-r--r--macros/latex/contrib/l3backend/l3backend-color.dtx2
-rw-r--r--macros/latex/contrib/l3backend/l3backend-draw.dtx47
-rw-r--r--macros/latex/contrib/l3backend/l3backend-graphics.dtx2
-rw-r--r--macros/latex/contrib/l3backend/l3backend-header.dtx2
-rw-r--r--macros/latex/contrib/l3backend/l3backend-opacity.dtx78
-rw-r--r--macros/latex/contrib/l3backend/l3backend-pdf.dtx2
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
index c62351ab98..9affc7d856 100644
--- a/macros/latex/contrib/l3backend/l3backend-code.pdf
+++ b/macros/latex/contrib/l3backend/l3backend-code.pdf
Binary files differ
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
%