diff options
author | Karl Berry <karl@freefriends.org> | 2021-01-29 22:37:37 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-01-29 22:37:37 +0000 |
commit | 88b40fe28cf8ad53d15f707a0e4a3f99c953bb4b (patch) | |
tree | bc34852e40c7d6417600fca15591bdb58acbaf5c /Master/texmf-dist/tex/latex/l3backend | |
parent | 7ae58a3bf77274814f2c766b55c3713cab428aea (diff) |
l3 (29jan21)
git-svn-id: svn://tug.org/texlive/trunk@57554 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/l3backend')
6 files changed, 755 insertions, 258 deletions
diff --git a/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def b/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def index b64b2f1b028..9947b2830aa 100644 --- a/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def +++ b/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def @@ -10,8 +10,9 @@ %% l3backend-draw.dtx (with options: `package,dvipdfmx') %% l3backend-graphics.dtx (with options: `package,dvipdfmx') %% l3backend-pdf.dtx (with options: `package,dvipdfmx') +%% l3backend-opacity.dtx (with options: `package,dvipdfmx') %% -%% Copyright (C) 1990-2021 The LaTeX3 Project +%% Copyright (C) 1990-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -25,7 +26,7 @@ %% %% File: l3backend-basics.dtx \ProvidesExplFile - {l3backend-dvipdfmx.def}{2021-01-09}{} + {l3backend-dvipdfmx.def}{2020-01-29}{} {L3 backend support: dvipdfmx} \cs_if_exist:NTF \__kernel_dependency_version_check:nn { @@ -90,25 +91,44 @@ \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \s__color_stop #3 { \tl_set:Nn #3 { {#1} {#2} } } } -\int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 } +\int_new:N \l__color_backend_stack_int +\int_compare:nNnTF \c__kernel_sys_dvipdfmx_version_int < { 20201111 } + { \cs_new_protected:Npn \__kernel_color_backend_stack_init:Nnn #1#2#3 { } } { - \int_new:N \g__color_stack_int - \cs_new_protected:Npn \__kernel_color_stack_init:Nnn #1#2#3 + \int_new:N \g__color_backend_stack_int + \cs_new_protected:Npx \__kernel_color_backend_stack_init:Nnn #1#2#3 { - \int_gincr:N \g__color_stack_int - \int_const:Nn #1 { \g__color_stack_int } - \__kernel_backend_literal:x + \int_gincr:N \exp_not:N \g__color_backend_stack_int + \int_const:Nn #1 { \exp_not:N \g__color_backend_stack_int } + \cs_if_exist:NTF \AtBeginDvi + { \exp_not:N \AtBeginDvi } + { \exp_not:N \use:n } { - pdfcolorstackinit ~ - \int_use:N \g__color_stack_int \c_space_tl - \tl_if_blank:nF {#2} { #2 ~ } - (#3) + \__kernel_backend_literal:x + { + pdfcolorstackinit ~ + \exp_not:N \int_use:N \exp_not:N \g__color_backend_stack_int + \c_space_tl + \exp_not:N \tl_if_blank:nF {#2} { #2 ~ } + (#3) + } } } + \cs_if_exist:cTF { main@pdfcolorstack } + { + \int_set:Nn \l__color_backend_stack_int + { \int_use:c { main@pdfcolorstack } } + } + { + \__kernel_color_backend_stack_init:Nnn \c__color_backend_main_stack_int + { page ~ direct } { 0 ~ g ~ 0 ~ G } + \int_set_eq:NN \l__color_backend_stack_int + \c__color_backend_main_stack_int + } } \int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 } { - \cs_new_protected:Npn \__kernel_color_stack_push:nn #1#2 + \cs_new_protected:Npn \__color_backend_stack_push:nn #1#2 { \__kernel_backend_literal:x { @@ -117,7 +137,8 @@ push ~ (#2) } } - \cs_new_protected:Npn \__kernel_color_stack_pop:n #1 + \cs_generate_variant:Nn \__color_backend_stack_push:nn { nx } + \cs_new_protected:Npn \__color_backend_stack_pop:n #1 { \__kernel_backend_literal:x { @@ -127,20 +148,23 @@ } } } -\int_new:N \l__kernel_color_stack_int +\tl_new:N \l__color_backend_fill_tl +\tl_new:N \l__color_backend_stroke_tl \cs_new_protected:Npn \__color_backend_select_cmyk:n #1 - { \__color_backend_select:n { #1 ~ k ~ #1 ~ K } } + { \__color_backend_select:nn { #1 ~ k } { #1 ~ K } } \cs_new_protected:Npn \__color_backend_select_gray:n #1 - { \__color_backend_select:n { #1 ~ g ~ #1 ~ G } } + { \__color_backend_select:nn { #1 ~ g } { #1 ~ G } } \cs_new_protected:Npn \__color_backend_select_rgb:n #1 - { \__color_backend_select:n { #1 ~ rg ~ #1 ~ RG } } -\cs_new_protected:Npn \__color_backend_select:n #1 + { \__color_backend_select:nn { #1 ~ rg } { #1 ~ RG } } +\cs_new_protected:Npn \__color_backend_select:nn #1#2 { - \__kernel_color_stack_push:nn \l__kernel_color_stack_int {#1} + \tl_set:Nn \l__color_backend_fill_tl {#1} + \tl_set:Nn \l__color_backend_stroke_tl {#2} + \__color_backend_stack_push:nn \l__color_backend_stack_int { #1 ~ #2 } \group_insert_after:N \__color_backend_reset: } \cs_new_protected:Npn \__color_backend_reset: - { \__kernel_color_stack_pop:n \l__kernel_color_stack_int } + { \__color_backend_stack_pop:n \l__color_backend_stack_int } \int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } { \cs_gset_protected:Npn \__color_backend_select_cmyk:n #1 @@ -154,7 +178,7 @@ { \__kernel_backend_literal:n { pdf: ec } } } \cs_new_protected:Npn \__color_backend_select_separation:nn #1#2 - { \__color_backend_select:n { /#1 ~ cs ~ /#1 ~ CS ~ #2 ~ scn ~ #2 ~ SCN } } + { \__color_backend_select:nn { /#1 ~ cs ~ #2 ~ scn } { /#1 ~ CS ~ #2 ~ SCN } } \cs_new_eq:NN \__color_backend_select_devicen:nn \__color_backend_select_separation:nn \cs_new_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { @@ -261,24 +285,65 @@ { \__color_backend_devicen_init:w #2 \s__color_stop } } \cs_new_eq:NN \__color_backend_devicen_init:n \__color_backend_separation_init:n +\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } + { + \cs_gset_protected:Npn \__color_backend_select_separation:nn #1#2 { } + \cs_gset_eq:NN \__color_backend_select_devicen:nn + \__color_backend_select_separation:nn + } \cs_new_protected:Npn \__color_backend_fill_cmyk:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ k } } + { \__color_backend_fill:n { #1 ~ k } } \cs_new_protected:Npn \__color_backend_fill_gray:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ g } } + { \__color_backend_fill:n { #1 ~ g } } \cs_new_protected:Npn \__color_backend_fill_rgb:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ rg } } - \cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ K } } + { \__color_backend_fill:n { #1 ~ rg } } +\cs_new_protected:Npn \__color_backend_fill:n #1 + { + \tl_set:Nn \l__color_backend_fill_tl {#1} + \__color_backend_stack_push:nn \l__color_backend_stack_int + { #1 ~ \l__color_backend_stroke_tl } + \group_insert_after:N \__color_backend_reset: + } +\cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1 + { \__color_backend_stroke:n { #1 ~ K } } \cs_new_protected:Npn \__color_backend_stroke_gray:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ G } } + { \__color_backend_stroke:n { #1 ~ G } } \cs_new_protected:Npn \__color_backend_stroke_rgb:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ RG } } + { \__color_backend_stroke:n { #1 ~ RG } } +\cs_new_protected:Npn \__color_backend_stroke:n #1 + { + \tl_set:Nn \l__color_backend_stroke_tl {#1} + \__color_backend_stack_push:nn \l__color_backend_stack_int + { \l__color_backend_fill_tl \c_space_tl #1 } + \group_insert_after:N \__color_backend_reset: + } \cs_new_protected:Npn \__color_backend_fill_separation:nn #1#2 - { \__kernel_backend_literal_pdf:n { /#1 ~ cs ~ #2 ~ scn } } + { \__color_backend_fill:n { /#1 ~ cs ~ #2 ~ scn } } \cs_new_protected:Npn \__color_backend_stroke_separation:nn #1#2 - { \__kernel_backend_literal_pdf:n { /#1 ~ CS ~ #2 ~ SCN } } + { \__color_backend_stroke:n { /#1 ~ CS ~ #2 ~ SCN } } \cs_new_eq:NN \__color_backend_fill_devicen:nn \__color_backend_fill_separation:nn \cs_new_eq:NN \__color_backend_stroke_devicen:nn \__color_backend_stroke_separation:nn +\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } + { + \cs_gset_protected:Npn \__color_backend_fill_cmyk:n #1 + { + \__kernel_backend_literal:n { pdf: bc ~ [#1] } + \group_insert_after:N \__color_backend_reset: + } + \cs_gset_eq:NN \__color_backend_fill_gray:n \__color_backend_fill_cmyk:n + \cs_gset_eq:NN \__color_backend_fill_rgb:n \__color_backend_fill_cmyk:n + \cs_gset_protected:Npn \__color_backend_reset: + { \__kernel_backend_literal:n { pdf: ec } } + \cs_gset_protected:Npn \__color_backend_stroke:n #1 + { \__kernel_backend_literal:n {#1} } + \cs_gset_protected:Npn \__color_backend_fill_separation:nn #1#2 { } + \cs_gset_eq:NN \__color_backend_fill_devicen:nn + \__color_backend_fill_separation:nn + \cs_gset_eq:NN \__color_backend_stroke_separation:nn + \__color_backend_fill_separation:nn + \cs_gset_eq:NN \__color_backend_stroke_devicen:nn + \__color_backend_stroke_separation:nn + } %% File: l3backend-box.dtx \cs_new_protected:Npn \__box_backend_clip:N #1 { @@ -754,36 +819,43 @@ ] } } -\cs_new_protected:Npn \__pdf_backend_destination_box:nn #1#2 +\cs_new_protected:Npn \__pdf_backend_destination:nnnn #1#2#3#4 { - \group_begin: - \hbox_set:Nn \l__pdf_internal_box {#2} - \box_move_down:nn { \box_dp:N \l__pdf_internal_box } - { - \hbox:n - { - \__pdf_backend:n { obj ~ @pdf_ #1 _llx ~ @xpos } - \__pdf_backend:n { obj ~ @pdf_ #1 _lly ~ @ypos } - } - } - \box_use:N \l__pdf_internal_box - \box_move_up:nn { \box_ht:N \l__pdf_internal_box } - { - \hbox:n - { - \__pdf_backend:n - { - dest ~ (#1) - [ - @thispage - /FitR ~ - @pdf_ #1 _llx ~ @pdf_ #1 _lly ~ - @xpos ~ @ypos - ] - } - } - } - \group_end: + \exp_args:Ne \__pdf_backend_destination_aux:nnnn + { \dim_eval:n {#2} } {#1} {#3} {#4} + } +\cs_new_protected:Npn \__pdf_backend_destination_aux:nnnn #1#2#3#4 + { + \vbox_to_zero:n + { + \tex_kern:D \dim_eval:n {#4} \scan_stop: + \hbox:n + { + \__pdf_backend:n { obj ~ @pdf_ #2 _llx ~ @xpos } + \__pdf_backend:n { obj ~ @pdf_ #2 _lly ~ @ypos } + } + \tex_vss:D + } + \tex_kern:D #1 \scan_stop: + \vbox_to_zero:n + { + \tex_kern:D \dim_eval:n { -#3 } \scan_stop: + \hbox:n + { + \__pdf_backend:n + { + dest ~ (#2) + [ + @thispage + /FitR ~ + @pdf_ #2 _llx ~ @pdf_ #2 _lly ~ + @xpos ~ @ypos + ] + } + } + \tex_vss:D + } + \tex_kern:D -#1 \scan_stop: } \cs_new_protected:Npn \__pdf_backend_compresslevel:n #1 { \__kernel_backend_literal:x { dvipdfmx:config~z~ \int_eval:n {#1} } } @@ -808,6 +880,98 @@ { \__kernel_backend_literal_page:n { /#1 ~ #2 ~ BDC } } \cs_new_protected:Npn \__pdf_backend_emc: { \__kernel_backend_literal_page:n { EMC } } +%% File: l3backend-opacity.dtx +\cs_if_exist:NT \pdfmanagement_add:nnn + { + \__kernel_color_backend_stack_init:Nnn \c__opacity_backend_stack_int + { page ~ direct } { /opacity 1 ~ gs } + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity 1 } { << /ca ~ 1 /CA ~ 1 >> } + } +\tl_new:N \l__opacity_backend_fill_tl +\tl_new:N \l__opacity_backend_stroke_tl +\cs_new_protected:Npn \__opacity_backend_select:n #1 + { + \exp_args:Nx \__opacity_backend_select_aux:n + { \fp_eval:n { min(max(0,#1),1) } } + } +\cs_new_protected:Npn \__opacity_backend_select_aux:n #1 + { + \tl_set:Nn \l__opacity_backend_fill_tl {#1} + \tl_set:Nn \l__opacity_backend_stroke_tl {#1} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity #1 } + { << /ca ~ #1 /CA ~ #1 >> } + \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + { /opacity #1 ~ gs } + \group_insert_after:N \__opacity_backend_reset: + } +\cs_if_exist:NF \pdfmanagement_add:nnn + { + \cs_gset_protected:Npn \__opacity_backend_select_aux:n #1 { } + } +\cs_new_protected:Npn \__opacity_backend_reset: + { \__opacity_backend_stack_pop:n \c__opacity_backend_stack_int } +\cs_new_protected:Npn \__opacity_backend_fill:n #1 + { + \__opacity_backend_fill_stroke:xx + { \fp_eval:n { min(max(0,#1),1) } } + \l__opacity_backend_stroke_tl + } +\cs_new_protected:Npn \__opacity_backend_stroke:n #1 + { + \__opacity_backend_fill_stroke:xx + \l__opacity_backend_fill_tl + { \fp_eval:n { min(max(0,#1),1) } } + } +\cs_new_protected:Npn \__opacity_backend_fill_stroke:nn #1#2 + { + \str_if_eq:nnTF {#1} {#2} + { \__opacity_backend_select_aux:n {#1} } + { + \tl_set:Nn \l__opacity_backend_fill_tl {#1} + \tl_set:Nn \l__opacity_backend_stroke_tl {#2} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.fill #1 } + { << /ca ~ #1 >> } + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.stroke #1 } + { << /CA ~ #2 >> } + \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + { /opacity.fill #1 ~ gs /opacity.stroke #2 ~ gs } + \group_insert_after:N \__opacity_backend_reset: + } + } +\cs_generate_variant:Nn \__opacity_backend_fill_stroke:nn { xx } +\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } + { + \cs_gset_protected:Npn \__opacity_backend_select_aux:n #1 + { + \tl_set:Nn \l__opacity_backend_fill_tl {#1} + \tl_set:Nn \l__opacity_backend_stroke_tl {#1} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity #1 } + { << /ca ~ #1 /CA ~ #1 >> } + \__kernel_backend_literal_pdf:n { /opacity #1 ~ gs } + } + \cs_gset_protected:Npn \__opacity_backend_fill_stroke:nn #1#2 + { + \str_if_eq:nnTF {#1} {#2} + { \__opacity_backend_select_aux:n {#1} } + { + \tl_set:Nn \l__opacity_backend_fill_tl {#1} + \tl_set:Nn \l__opacity_backend_stroke_tl {#2} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.fill #1 } + { << /ca ~ #1 >> } + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.stroke #1 } + { << /CA ~ #2 >> } + \__kernel_backend_literal_pdf:n + { /opacity.fill #1 ~ gs /opacity.stroke #2 ~ gs } + } + } + } %% %% %% End of file `l3backend-dvipdfmx.def'. diff --git a/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def b/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def index 61f8f584ea8..ff4307c4acf 100644 --- a/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def +++ b/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def @@ -10,8 +10,9 @@ %% l3backend-draw.dtx (with options: `package,dvips') %% l3backend-graphics.dtx (with options: `package,dvips') %% l3backend-pdf.dtx (with options: `package,dvips') +%% l3backend-opacity.dtx (with options: `package,dvips') %% -%% Copyright (C) 1990-2021 The LaTeX3 Project +%% Copyright (C) 1990-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -25,7 +26,7 @@ %% %% File: l3backend-basics.dtx \ProvidesExplFile - {l3backend-dvips.def}{2021-01-09}{} + {l3backend-dvips.def}{2020-01-29}{} {L3 backend support: dvips} \cs_if_exist:NTF \__kernel_dependency_version_check:nn { @@ -104,8 +105,7 @@ \cs_new_protected:Npn \__color_backend_select:n #1 { \__kernel_backend_literal:n { color~push~ #1 } - \__kernel_backend_postscript:n { /color.sc~ { ~ } ~def } - \__kernel_backend_postscript:n { /color.fc~ { ~ } ~def } + \__kernel_backend_postscript:n { /color.sc ~ { } ~ def } \group_insert_after:N \__color_backend_reset: } \cs_new_protected:Npn \__color_backend_reset: @@ -282,21 +282,26 @@ } } \cs_new_protected:Npn \__color_backend_fill_cmyk:n #1 - { \__kernel_backend_postscript:n { /color.fc { #1 ~ setcmykcolor } def } } + { \__color_backend_fill:n { cmyk ~ #1 } } \cs_new_protected:Npn \__color_backend_fill_gray:n #1 - { \__kernel_backend_postscript:n { /color.fc { #1 ~ setgray } def } } + { \__color_backend_fill:n { gray ~ #1 } } \cs_new_protected:Npn \__color_backend_fill_rgb:n #1 - { \__kernel_backend_postscript:n { /color.fc { #1 ~ setrgbcolor } def } } - \cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1 + { \__color_backend_fill:n { rgb ~ #1 } } +\cs_new_protected:Npn \__color_backend_fill:n #1 + { + \__kernel_backend_literal:n { color~push~ #1 } + \group_insert_after:N \__color_backend_reset: + } +\cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1 { \__kernel_backend_postscript:n { /color.sc { #1 ~ setcmykcolor } def } } \cs_new_protected:Npn \__color_backend_stroke_gray:n #1 { \__kernel_backend_postscript:n { /color.sc { #1 ~ setgray } def } } \cs_new_protected:Npn \__color_backend_stroke_rgb:n #1 { \__kernel_backend_postscript:n { /color.sc { #1 ~ setrgbcolor } def } } \cs_new_protected:Npn \__color_backend_fill_separation:nn #1#2 - { \__kernel_backend_postscript:n { /color.fc { #1 } def } } + { \__color_backend_fill:n { separation ~ #1 ~ #2 } } \cs_new_protected:Npn \__color_backend_stroke_separation:nn #1#2 - { \__kernel_backend_postscript:n { /color.sc { #1 } def } } + { \__kernel_backend_postscript:n { /color.sc { separation ~ #1 ~ #2 } def } } \cs_new_eq:NN \__color_backend_fill_devicen:nn \__color_backend_fill_separation:nn \cs_new_eq:NN \__color_backend_stroke_devicen:nn \__color_backend_stroke_separation:nn %% File: l3backend-box.dtx @@ -436,14 +441,11 @@ } \cs_new_protected:Npn \__draw_backend_fill: { - \__draw_backend_literal:n { gsave } - \__draw_backend_literal:n { color.fc } \__draw_backend_literal:x { \bool_if:NT \g__draw_draw_eor_bool { eo } fill } - \__draw_backend_literal:n { grestore } \bool_if:NT \g__draw_draw_clip_bool { \__draw_backend_literal:x @@ -457,16 +459,15 @@ } \cs_new_protected:Npn \__draw_backend_fillstroke: { - \__draw_backend_literal:n { gsave } - \__draw_backend_literal:n { color.sc } - \__draw_backend_literal:n { color.fc } \__draw_backend_literal:x { \bool_if:NT \g__draw_draw_eor_bool { eo } fill } - \__draw_backend_literal:n { grestore } + \__draw_backend_literal:n { gsave } + \__draw_backend_literal:n { color.sc } \__draw_backend_literal:n { stroke } + \__draw_backend_literal:n { grestore } \bool_if:NT \g__draw_draw_clip_bool { \__draw_backend_literal:x @@ -904,29 +905,38 @@ /DEST } } -\cs_new_protected:Npn \__pdf_backend_destination_box:nn #1#2 - { - \group_begin: - \hbox_set:Nn \l__pdf_internal_box {#2} - \box_move_down:nn - { \box_dp:N \l__pdf_internal_box } - { \hbox:n { \__kernel_backend_postscript:n { pdf.save.ll } } } - \box_use:N \l__pdf_internal_box - \box_move_up:nn - { \box_ht:N \l__pdf_internal_box } - { \hbox:n { \__kernel_backend_postscript:n { pdf.save.ur } } } - \__pdf_backend_pdfmark:n - { - /View - [ - /FitR ~ - pdf.llx ~ pdf.lly ~ pdf.dest2device ~ - pdf.urx ~ pdf.ury ~ pdf.dest2device - ] - /Dest ( #1 ) cvn - /DEST - } - \group_end: +\cs_new_protected:Npn \__pdf_backend_destination:nnnn #1#2#3#4 + { + \exp_args:Ne \__pdf_backend_destination_aux:nnnn + { \dim_eval:n {#2} } {#1} {#3} {#4} + } +\cs_new_protected:Npn \__pdf_backend_destination_aux:nnnn #1#2#3#4 + { + \vbox_to_zero:n + { + \tex_kern:D \dim_eval:n {#4} \scan_stop: + \hbox:n { \__kernel_backend_postscript:n { pdf.save.ll } } + \tex_vss:D + } + \tex_kern:D #1 \scan_stop: + \vbox_to_zero:n + { + \tex_kern:D \dim_eval:n { -#3 } \scan_stop: + \hbox:n { \__kernel_backend_postscript:n { pdf.save.ur } } + \tex_vss:D + } + \tex_kern:D -#1 \scan_stop: + \__pdf_backend_pdfmark:n + { + /View + [ + /FitR ~ + pdf.llx ~ pdf.lly ~ pdf.dest2device ~ + pdf.urx ~ pdf.ury ~ pdf.dest2device + ] + /Dest ( #2 ) cvn + /DEST + } } \cs_new_protected:Npn \__pdf_backend_compresslevel:n #1 { @@ -960,6 +970,26 @@ { \__pdf_backend_pdfmark:n { /#1 ~ #2 /BDC } } \cs_new_protected:Npn \__pdf_backend_emc: { \__pdf_backend_pdfmark:n { /EMC } } +%% File: l3backend-opacity.dtx +\cs_new_protected:Npn \__opacity_backend_select:n #1 + { + \exp_args:Nx \__opacity_backend_select_aux:n + { \fp_eval:n { min(max(0,#1),1) } } + } +\cs_new_protected:Npn \__opacity_backend_select_aux:n #1 + { + \__kernel_backend_postscript:n + { #1 ~ .setfillconstantalpha ~ #1 ~ .setstrokeconstantalpha } + } +\cs_new_protected:Npn \__opacity_backend_fill:n #1 + { \__opacity_backend:xn { \fp_eval:n { min(max(0,#1),1) } } { fill } } +\cs_new_protected:Npn \__opacity_backend_stroke:n #1 + { \__opacity_backend:xn { \fp_eval:n { min(max(0,#1),1) } } { stroke } } +\cs_new_protected:Npn \__opacity_backend:nn #1#2 + { + \__kernel_backend_postscript:n { #1 ~ .set #2 constantalpha } + } +\cs_generate_variant:Nn \__opacity_backend:nn { x } %% %% %% End of file `l3backend-dvips.def'. diff --git a/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def b/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def index 28a6be023e0..1f8ebeb0408 100644 --- a/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def +++ b/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def @@ -10,8 +10,9 @@ %% l3backend-draw.dtx (with options: `package,dvisvgm') %% l3backend-graphics.dtx (with options: `package,dvisvgm') %% l3backend-pdf.dtx (with options: `package,dvisvgm') +%% l3backend-opacity.dtx (with options: `package,dvisvgm') %% -%% Copyright (C) 1990-2021 The LaTeX3 Project +%% Copyright (C) 1990-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -25,7 +26,7 @@ %% %% File: l3backend-basics.dtx \ProvidesExplFile - {l3backend-dvisvgm.def}{2021-01-09}{} + {l3backend-dvisvgm.def}{2020-01-29}{} {L3 backend support: dvisvgm} \cs_if_exist:NTF \__kernel_dependency_version_check:nn { @@ -125,63 +126,63 @@ \cs_new_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { } \cs_new_protected:Npn \__color_backend_separation_init_CIELAB:nnnnnn #1#2#3 { } \cs_new_protected:Npn \__color_backend_fill_cmyk:n #1 - { \__color_backend_cmyk:nw { fill } #1 \s__color_stop } + { \__color_backend_fill:n { cmyk ~ #1 } } +\cs_new_protected:Npn \__color_backend_fill_gray:n #1 + { \__color_backend_fill:n { gray ~ #1 } } +\cs_new_protected:Npn \__color_backend_fill_rgb:n #1 + { \__color_backend_fill:n { rgb ~ #1 } } +\cs_new_protected:Npn \__color_backend_fill:n #1 + { + \__kernel_backend_literal:n { color~push~ #1 } + \group_insert_after:N \__color_backend_reset: + } \cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1 - { \__color_backend_cmyk:nw { stroke } #1 \s__color_stop } -\cs_new_protected:Npn \__color_backend_cmyk:nw - #1#2 ~ #3 ~ #4 ~ #5 \s__color_stop + { \__color_backend_cmyk:w #1 \s__color_stop } +\cs_new_protected:Npn \__color_backend_stroke_cmyk:w + #1 ~ #2 ~ #3 ~ #4 \s__color_stop { \use:x { - \__color_backend:nnnn - {#1} - { \fp_eval:n { -100 * ( 1 - min ( 1 , #2 + #5 ) ) } } - { \fp_eval:n { -100 * ( 1 - min ( 1 , #3 + #5 ) ) } } - { \fp_eval:n { -100 * ( 1 - min ( 1 , #4 + #5 ) ) } } + \__color_backend:nnn + { \fp_eval:n { -100 * ( 1 - min ( 1 , #1 + #4 ) ) } } + { \fp_eval:n { -100 * ( 1 - min ( 1 , #2 + #4 ) ) } } + { \fp_eval:n { -100 * ( 1 - min ( 1 , #3 + #4 ) ) } } } } -\cs_new_protected:Npn \__color_backend_fill_gray:n #1 - { \__color_backend_grab:nn { fill } {#1} } \cs_new_protected:Npn \__color_backend_stroke_gray:n #1 - { \__color_backend_grab:nn { stroke } {#1} } -\cs_new_protected:Npn \__color_backend_gray:nn #1#2 { \use:x { - \__color_backend_gray_aux:nn - {#1} - { \fp_eval:n { 100 * (#2) } } + \__color_backend_stroke_gray_aux:n + { \fp_eval:n { 100 * (#1) } } } } -\cs_new_protected:Npn \__color_backend_gray_aux:nn #1#2 - { \__color_backend:nnn {#1} {#2} {#2} {#2} } -\cs_new_protected:Npn \__color_backend_fill_rgb:n #1 - { \__color_backend_rgb:nw { fill } #1 \s__color_stop } +\cs_new_protected:Npn \__color_backend_stroke_gray_aux:n #1 + { \__color_backend:nnn {#1} {#1} {#1} } \cs_new_protected:Npn \__color_backend_stroke_rgb:n #1 - { \__color_backend_rgb:nw { stroke } #1 \s__color_stop } -\cs_new_protected:Npn \__color_backend_rgb:nw - #1#2 ~ #3 ~ #4\s__color_stop + { \__color_backend_rgb:w #1 \s__color_stop } +\cs_new_protected:Npn \__color_backend_stroke_rgb:w + #1 ~ #2 ~ #3 \s__color_stop { \use:x { - \__color_backend:nnnn - { fill } + \__color_backend:nnn + { \fp_eval:n { 100 * (#1) } } { \fp_eval:n { 100 * (#2) } } { \fp_eval:n { 100 * (#3) } } - { \fp_eval:n { 100 * (#4) } } } } -\cs_new_protected:Npx \__color_backend:nnnn #1#2#3#4 +\cs_new_protected:Npx \__color_backend:nnn #1#2#3 { \__kernel_backend_scope:n { - #1 = + stroke = " rgb ( + #1 \c_percent_str , #2 \c_percent_str , - #3 \c_percent_str , - #4 \c_percent_str + #3 \c_percent_str ) " } @@ -524,6 +525,15 @@ \cs_new:Npn \__pdf_backend_version_minor: { -1 } \cs_new_protected:Npn \__pdf_backend_bdc:nn #1#2 { } \cs_new_protected:Npn \__pdf_backend_emc: { } +%% File: l3backend-opacity.dtx +\cs_new_protected:Npn \__opacity_backend_select:n #1 + { \__opacity_backend:nn {#1} { } } +\cs_new_protected:Npn \__opacity_backend_fill:n #1 + { \__opacity_backend:nn {#1} { fill- } } +\cs_new_protected:Npn \__opacity_backend_stroke:n #1 + { \__opacity_backend:nn { {#1} } { stroke- } } +\cs_new_protected:Npn \__opacity_backend:nn #1#2 + { \__kernel_backend_scope:x { #2 opacity = " \fp_eval:n { min(max(0,#1),1) } " } } %% %% %% End of file `l3backend-dvisvgm.def'. diff --git a/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def b/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def index 69caa65acef..1a5b246fa6b 100644 --- a/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def +++ b/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def @@ -10,8 +10,9 @@ %% l3backend-draw.dtx (with options: `package,luatex') %% l3backend-graphics.dtx (with options: `package,luatex') %% l3backend-pdf.dtx (with options: `package,luatex') +%% l3backend-opacity.dtx (with options: `package,luatex') %% -%% Copyright (C) 1990-2021 The LaTeX3 Project +%% Copyright (C) 1990-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -25,7 +26,7 @@ %% %% File: l3backend-basics.dtx \ProvidesExplFile - {l3backend-luatex.def}{2021-01-09}{} + {l3backend-luatex.def}{2020-01-29}{} {L3 backend support: PDF output (LuaTeX)} \cs_if_exist:NTF \__kernel_dependency_version_check:nn { @@ -103,7 +104,8 @@ } } } -\cs_new_protected:Npn \__kernel_color_stack_init:Nnn #1#2#3 +\int_new:N \l__color_backend_stack_int +\cs_new_protected:Npn \__kernel_color_backend_stack_init:Nnn #1#2#3 { \int_const:Nn #1 { @@ -112,32 +114,36 @@ {#3} } } -\cs_new_protected:Npn \__kernel_color_stack_push:nn #1#2 +\cs_new_protected:Npn \__color_backend_stack_push:nn #1#2 { \tex_pdfextension:D colorstack ~ \int_eval:n {#1} ~ push ~ {#2} } -\cs_new_protected:Npn \__kernel_color_stack_pop:n #1 +\cs_generate_variant:Nn \__color_backend_stack_push:nn { nx } +\cs_new_protected:Npn \__color_backend_stack_pop:n #1 { \tex_pdfextension:D colorstack ~ \int_eval:n {#1} ~ pop \scan_stop: } -\int_new:N \l__kernel_color_stack_int +\tl_new:N \l__color_backend_fill_tl +\tl_new:N \l__color_backend_stroke_tl \cs_new_protected:Npn \__color_backend_select_cmyk:n #1 - { \__color_backend_select:n { #1 ~ k ~ #1 ~ K } } + { \__color_backend_select:nn { #1 ~ k } { #1 ~ K } } \cs_new_protected:Npn \__color_backend_select_gray:n #1 - { \__color_backend_select:n { #1 ~ g ~ #1 ~ G } } + { \__color_backend_select:nn { #1 ~ g } { #1 ~ G } } \cs_new_protected:Npn \__color_backend_select_rgb:n #1 - { \__color_backend_select:n { #1 ~ rg ~ #1 ~ RG } } -\cs_new_protected:Npn \__color_backend_select:n #1 + { \__color_backend_select:nn { #1 ~ rg } { #1 ~ RG } } +\cs_new_protected:Npn \__color_backend_select:nn #1#2 { - \__kernel_color_stack_push:nn \l__kernel_color_stack_int {#1} + \tl_set:Nn \l__color_backend_fill_tl {#1} + \tl_set:Nn \l__color_backend_stroke_tl {#2} + \__color_backend_stack_push:nn \l__color_backend_stack_int { #1 ~ #2 } \group_insert_after:N \__color_backend_reset: } \cs_new_protected:Npn \__color_backend_reset: - { \__kernel_color_stack_pop:n \l__kernel_color_stack_int } + { \__color_backend_stack_pop:n \l__color_backend_stack_int } \cs_new_protected:Npn \__color_backend_select_separation:nn #1#2 - { \__color_backend_select:n { /#1 ~ cs ~ /#1 ~ CS ~ #2 ~ scn ~ #2 ~ SCN } } + { \__color_backend_select:nn { /#1 ~ cs ~ #2 ~ scn } { /#1 ~ CS ~ #2 ~ SCN } } \cs_new_eq:NN \__color_backend_select_devicen:nn \__color_backend_select_separation:nn \cs_new_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { @@ -245,21 +251,35 @@ } \cs_new_eq:NN \__color_backend_devicen_init:n \__color_backend_separation_init:n \cs_new_protected:Npn \__color_backend_fill_cmyk:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ k } } + { \__color_backend_fill:n { #1 ~ k } } \cs_new_protected:Npn \__color_backend_fill_gray:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ g } } + { \__color_backend_fill:n { #1 ~ g } } \cs_new_protected:Npn \__color_backend_fill_rgb:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ rg } } - \cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ K } } + { \__color_backend_fill:n { #1 ~ rg } } +\cs_new_protected:Npn \__color_backend_fill:n #1 + { + \tl_set:Nn \l__color_backend_fill_tl {#1} + \__color_backend_stack_push:nn \l__color_backend_stack_int + { #1 ~ \l__color_backend_stroke_tl } + \group_insert_after:N \__color_backend_reset: + } +\cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1 + { \__color_backend_stroke:n { #1 ~ K } } \cs_new_protected:Npn \__color_backend_stroke_gray:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ G } } + { \__color_backend_stroke:n { #1 ~ G } } \cs_new_protected:Npn \__color_backend_stroke_rgb:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ RG } } + { \__color_backend_stroke:n { #1 ~ RG } } +\cs_new_protected:Npn \__color_backend_stroke:n #1 + { + \tl_set:Nn \l__color_backend_stroke_tl {#1} + \__color_backend_stack_push:nn \l__color_backend_stack_int + { \l__color_backend_fill_tl \c_space_tl #1 } + \group_insert_after:N \__color_backend_reset: + } \cs_new_protected:Npn \__color_backend_fill_separation:nn #1#2 - { \__kernel_backend_literal_pdf:n { /#1 ~ cs ~ #2 ~ scn } } + { \__color_backend_fill:n { /#1 ~ cs ~ #2 ~ scn } } \cs_new_protected:Npn \__color_backend_stroke_separation:nn #1#2 - { \__kernel_backend_literal_pdf:n { /#1 ~ CS ~ #2 ~ SCN } } + { \__color_backend_stroke:n { /#1 ~ CS ~ #2 ~ SCN } } \cs_new_eq:NN \__color_backend_fill_devicen:nn \__color_backend_fill_separation:nn \cs_new_eq:NN \__color_backend_stroke_devicen:nn \__color_backend_stroke_separation:nn %% File: l3backend-box.dtx @@ -594,18 +614,14 @@ { xyz ~ zoom \fp_eval:n { #2 * 10 } } \scan_stop: } -\cs_new_protected:Npn \__pdf_backend_destination_box:nn #1#2 +\cs_new_protected:Npn \__pdf_backend_destination:nnnn #1#2#3#4 { - \group_begin: - \hbox_set:Nn \l__pdf_internal_box {#2} - \tex_pdfextension:D dest ~ - name {#1} - fitr ~ - width \box_wd:N \l__pdf_internal_box - height \box_ht:N \l__pdf_internal_box - depth \box_dp:N \l__pdf_internal_box - \box_use:N \l__pdf_internal_box - \group_end: + \tex_pdfextension:D dest ~ + name {#1} + fitr ~ + width \dim_eval:n {#2} ~ + height \dim_eval:n {#3} ~ + depth \dim_eval:n {#4} \scan_stop: } \cs_new_protected:Npn \__pdf_backend_catalog_gput:nn #1#2 { @@ -735,6 +751,69 @@ { \__kernel_backend_literal_page:n { /#1 ~ #2 ~ BDC } } \cs_new_protected:Npn \__pdf_backend_emc: { \__kernel_backend_literal_page:n { EMC } } +%% File: l3backend-opacity.dtx +\cs_if_exist:NT \pdfmanagement_add:nnn + { + \__kernel_color_backend_stack_init:Nnn \c__opacity_backend_stack_int + { page ~ direct } { /opacity 1 ~ gs } + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity 1 } { << /ca ~ 1 /CA ~ 1 >> } + } +\tl_new:N \l__opacity_backend_fill_tl +\tl_new:N \l__opacity_backend_stroke_tl +\cs_new_protected:Npn \__opacity_backend_select:n #1 + { + \exp_args:Nx \__opacity_backend_select_aux:n + { \fp_eval:n { min(max(0,#1),1) } } + } +\cs_new_protected:Npn \__opacity_backend_select_aux:n #1 + { + \tl_set:Nn \l__opacity_backend_fill_tl {#1} + \tl_set:Nn \l__opacity_backend_stroke_tl {#1} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity #1 } + { << /ca ~ #1 /CA ~ #1 >> } + \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + { /opacity #1 ~ gs } + \group_insert_after:N \__opacity_backend_reset: + } +\cs_if_exist:NF \pdfmanagement_add:nnn + { + \cs_gset_protected:Npn \__opacity_backend_select_aux:n #1 { } + } +\cs_new_protected:Npn \__opacity_backend_reset: + { \__opacity_backend_stack_pop:n \c__opacity_backend_stack_int } +\cs_new_protected:Npn \__opacity_backend_fill:n #1 + { + \__opacity_backend_fill_stroke:xx + { \fp_eval:n { min(max(0,#1),1) } } + \l__opacity_backend_stroke_tl + } +\cs_new_protected:Npn \__opacity_backend_stroke:n #1 + { + \__opacity_backend_fill_stroke:xx + \l__opacity_backend_fill_tl + { \fp_eval:n { min(max(0,#1),1) } } + } +\cs_new_protected:Npn \__opacity_backend_fill_stroke:nn #1#2 + { + \str_if_eq:nnTF {#1} {#2} + { \__opacity_backend_select_aux:n {#1} } + { + \tl_set:Nn \l__opacity_backend_fill_tl {#1} + \tl_set:Nn \l__opacity_backend_stroke_tl {#2} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.fill #1 } + { << /ca ~ #1 >> } + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.stroke #1 } + { << /CA ~ #2 >> } + \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + { /opacity.fill #1 ~ gs /opacity.stroke #2 ~ gs } + \group_insert_after:N \__opacity_backend_reset: + } + } +\cs_generate_variant:Nn \__opacity_backend_fill_stroke:nn { xx } %% %% %% End of file `l3backend-luatex.def'. diff --git a/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def b/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def index ec7b463b0a5..1c1e221a1f0 100644 --- a/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +++ b/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def @@ -10,8 +10,9 @@ %% l3backend-draw.dtx (with options: `package,pdftex') %% l3backend-graphics.dtx (with options: `package,pdftex') %% l3backend-pdf.dtx (with options: `package,pdftex') +%% l3backend-opacity.dtx (with options: `package,pdftex') %% -%% Copyright (C) 1990-2021 The LaTeX3 Project +%% Copyright (C) 1990-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -25,7 +26,7 @@ %% %% File: l3backend-basics.dtx \ProvidesExplFile - {l3backend-pdftex.def}{2021-01-09}{} + {l3backend-pdftex.def}{2020-01-29}{} {L3 backend support: PDF output (pdfTeX)} \cs_if_exist:NTF \__kernel_dependency_version_check:nn { @@ -103,7 +104,8 @@ } } } -\cs_new_protected:Npn \__kernel_color_stack_init:Nnn #1#2#3 +\int_new:N \l__color_backend_stack_int +\cs_new_protected:Npn \__kernel_color_backend_stack_init:Nnn #1#2#3 { \int_const:Nn #1 { @@ -112,32 +114,36 @@ {#3} } } -\cs_new_protected:Npn \__kernel_color_stack_push:nn #1#2 +\cs_new_protected:Npn \__color_backend_stack_push:nn #1#2 { \tex_pdfcolorstack:D \int_eval:n {#1} ~ push ~ {#2} } -\cs_new_protected:Npn \__kernel_color_stack_pop:n #1 +\cs_generate_variant:Nn \__color_backend_stack_push:nn { nx } +\cs_new_protected:Npn \__color_backend_stack_pop:n #1 { \tex_pdfcolorstack:D \int_eval:n {#1} ~ pop \scan_stop: } -\int_new:N \l__kernel_color_stack_int +\tl_new:N \l__color_backend_fill_tl +\tl_new:N \l__color_backend_stroke_tl \cs_new_protected:Npn \__color_backend_select_cmyk:n #1 - { \__color_backend_select:n { #1 ~ k ~ #1 ~ K } } + { \__color_backend_select:nn { #1 ~ k } { #1 ~ K } } \cs_new_protected:Npn \__color_backend_select_gray:n #1 - { \__color_backend_select:n { #1 ~ g ~ #1 ~ G } } + { \__color_backend_select:nn { #1 ~ g } { #1 ~ G } } \cs_new_protected:Npn \__color_backend_select_rgb:n #1 - { \__color_backend_select:n { #1 ~ rg ~ #1 ~ RG } } -\cs_new_protected:Npn \__color_backend_select:n #1 + { \__color_backend_select:nn { #1 ~ rg } { #1 ~ RG } } +\cs_new_protected:Npn \__color_backend_select:nn #1#2 { - \__kernel_color_stack_push:nn \l__kernel_color_stack_int {#1} + \tl_set:Nn \l__color_backend_fill_tl {#1} + \tl_set:Nn \l__color_backend_stroke_tl {#2} + \__color_backend_stack_push:nn \l__color_backend_stack_int { #1 ~ #2 } \group_insert_after:N \__color_backend_reset: } \cs_new_protected:Npn \__color_backend_reset: - { \__kernel_color_stack_pop:n \l__kernel_color_stack_int } + { \__color_backend_stack_pop:n \l__color_backend_stack_int } \cs_new_protected:Npn \__color_backend_select_separation:nn #1#2 - { \__color_backend_select:n { /#1 ~ cs ~ /#1 ~ CS ~ #2 ~ scn ~ #2 ~ SCN } } + { \__color_backend_select:nn { /#1 ~ cs ~ #2 ~ scn } { /#1 ~ CS ~ #2 ~ SCN } } \cs_new_eq:NN \__color_backend_select_devicen:nn \__color_backend_select_separation:nn \cs_new_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { @@ -245,21 +251,35 @@ } \cs_new_eq:NN \__color_backend_devicen_init:n \__color_backend_separation_init:n \cs_new_protected:Npn \__color_backend_fill_cmyk:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ k } } + { \__color_backend_fill:n { #1 ~ k } } \cs_new_protected:Npn \__color_backend_fill_gray:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ g } } + { \__color_backend_fill:n { #1 ~ g } } \cs_new_protected:Npn \__color_backend_fill_rgb:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ rg } } - \cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ K } } + { \__color_backend_fill:n { #1 ~ rg } } +\cs_new_protected:Npn \__color_backend_fill:n #1 + { + \tl_set:Nn \l__color_backend_fill_tl {#1} + \__color_backend_stack_push:nn \l__color_backend_stack_int + { #1 ~ \l__color_backend_stroke_tl } + \group_insert_after:N \__color_backend_reset: + } +\cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1 + { \__color_backend_stroke:n { #1 ~ K } } \cs_new_protected:Npn \__color_backend_stroke_gray:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ G } } + { \__color_backend_stroke:n { #1 ~ G } } \cs_new_protected:Npn \__color_backend_stroke_rgb:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ RG } } + { \__color_backend_stroke:n { #1 ~ RG } } +\cs_new_protected:Npn \__color_backend_stroke:n #1 + { + \tl_set:Nn \l__color_backend_stroke_tl {#1} + \__color_backend_stack_push:nn \l__color_backend_stack_int + { \l__color_backend_fill_tl \c_space_tl #1 } + \group_insert_after:N \__color_backend_reset: + } \cs_new_protected:Npn \__color_backend_fill_separation:nn #1#2 - { \__kernel_backend_literal_pdf:n { /#1 ~ cs ~ #2 ~ scn } } + { \__color_backend_fill:n { /#1 ~ cs ~ #2 ~ scn } } \cs_new_protected:Npn \__color_backend_stroke_separation:nn #1#2 - { \__kernel_backend_literal_pdf:n { /#1 ~ CS ~ #2 ~ SCN } } + { \__color_backend_stroke:n { /#1 ~ CS ~ #2 ~ SCN } } \cs_new_eq:NN \__color_backend_fill_devicen:nn \__color_backend_fill_separation:nn \cs_new_eq:NN \__color_backend_stroke_devicen:nn \__color_backend_stroke_separation:nn %% File: l3backend-box.dtx @@ -594,18 +614,14 @@ { xyz ~ zoom \fp_eval:n { #2 * 10 } } \scan_stop: } -\cs_new_protected:Npn \__pdf_backend_destination_box:nn #1#2 +\cs_new_protected:Npn \__pdf_backend_destination:nnnn #1#2#3#4 { - \group_begin: - \hbox_set:Nn \l__pdf_internal_box {#2} - \tex_pdfdest:D - name {#1} - fitr ~ - width \box_wd:N \l__pdf_internal_box - height \box_ht:N \l__pdf_internal_box - depth \box_dp:N \l__pdf_internal_box - \box_use:N \l__pdf_internal_box - \group_end: + \tex_pdfdest:D + name {#1} + fitr ~ + width \dim_eval:n {#2} ~ + height \dim_eval:n {#3} ~ + depth \dim_eval:n {#4} \scan_stop: } \cs_new_protected:Npn \__pdf_backend_catalog_gput:nn #1#2 { @@ -735,6 +751,69 @@ { \__kernel_backend_literal_page:n { /#1 ~ #2 ~ BDC } } \cs_new_protected:Npn \__pdf_backend_emc: { \__kernel_backend_literal_page:n { EMC } } +%% File: l3backend-opacity.dtx +\cs_if_exist:NT \pdfmanagement_add:nnn + { + \__kernel_color_backend_stack_init:Nnn \c__opacity_backend_stack_int + { page ~ direct } { /opacity 1 ~ gs } + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity 1 } { << /ca ~ 1 /CA ~ 1 >> } + } +\tl_new:N \l__opacity_backend_fill_tl +\tl_new:N \l__opacity_backend_stroke_tl +\cs_new_protected:Npn \__opacity_backend_select:n #1 + { + \exp_args:Nx \__opacity_backend_select_aux:n + { \fp_eval:n { min(max(0,#1),1) } } + } +\cs_new_protected:Npn \__opacity_backend_select_aux:n #1 + { + \tl_set:Nn \l__opacity_backend_fill_tl {#1} + \tl_set:Nn \l__opacity_backend_stroke_tl {#1} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity #1 } + { << /ca ~ #1 /CA ~ #1 >> } + \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + { /opacity #1 ~ gs } + \group_insert_after:N \__opacity_backend_reset: + } +\cs_if_exist:NF \pdfmanagement_add:nnn + { + \cs_gset_protected:Npn \__opacity_backend_select_aux:n #1 { } + } +\cs_new_protected:Npn \__opacity_backend_reset: + { \__opacity_backend_stack_pop:n \c__opacity_backend_stack_int } +\cs_new_protected:Npn \__opacity_backend_fill:n #1 + { + \__opacity_backend_fill_stroke:xx + { \fp_eval:n { min(max(0,#1),1) } } + \l__opacity_backend_stroke_tl + } +\cs_new_protected:Npn \__opacity_backend_stroke:n #1 + { + \__opacity_backend_fill_stroke:xx + \l__opacity_backend_fill_tl + { \fp_eval:n { min(max(0,#1),1) } } + } +\cs_new_protected:Npn \__opacity_backend_fill_stroke:nn #1#2 + { + \str_if_eq:nnTF {#1} {#2} + { \__opacity_backend_select_aux:n {#1} } + { + \tl_set:Nn \l__opacity_backend_fill_tl {#1} + \tl_set:Nn \l__opacity_backend_stroke_tl {#2} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.fill #1 } + { << /ca ~ #1 >> } + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.stroke #1 } + { << /CA ~ #2 >> } + \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + { /opacity.fill #1 ~ gs /opacity.stroke #2 ~ gs } + \group_insert_after:N \__opacity_backend_reset: + } + } +\cs_generate_variant:Nn \__opacity_backend_fill_stroke:nn { xx } %% %% %% End of file `l3backend-pdftex.def'. diff --git a/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def b/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def index 9c90ca0c6fc..d9bf8704302 100644 --- a/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def +++ b/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def @@ -10,8 +10,9 @@ %% l3backend-draw.dtx (with options: `package,xetex') %% l3backend-graphics.dtx (with options: `package,xetex') %% l3backend-pdf.dtx (with options: `package,xetex') +%% l3backend-opacity.dtx (with options: `package,xetex') %% -%% Copyright (C) 1990-2021 The LaTeX3 Project +%% Copyright (C) 1990-2021 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -25,7 +26,7 @@ %% %% File: l3backend-basics.dtx \ProvidesExplFile - {l3backend-xetex.def}{2021-01-09}{} + {l3backend-xetex.def}{2020-01-29}{} {L3 backend support: XeTeX} \cs_if_exist:NTF \__kernel_dependency_version_check:nn { @@ -90,25 +91,44 @@ \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \s__color_stop #3 { \tl_set:Nn #3 { {#1} {#2} } } } -\int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 } +\int_new:N \l__color_backend_stack_int +\int_compare:nNnTF \c__kernel_sys_dvipdfmx_version_int < { 20201111 } + { \cs_new_protected:Npn \__kernel_color_backend_stack_init:Nnn #1#2#3 { } } { - \int_new:N \g__color_stack_int - \cs_new_protected:Npn \__kernel_color_stack_init:Nnn #1#2#3 + \int_new:N \g__color_backend_stack_int + \cs_new_protected:Npx \__kernel_color_backend_stack_init:Nnn #1#2#3 { - \int_gincr:N \g__color_stack_int - \int_const:Nn #1 { \g__color_stack_int } - \__kernel_backend_literal:x + \int_gincr:N \exp_not:N \g__color_backend_stack_int + \int_const:Nn #1 { \exp_not:N \g__color_backend_stack_int } + \cs_if_exist:NTF \AtBeginDvi + { \exp_not:N \AtBeginDvi } + { \exp_not:N \use:n } { - pdfcolorstackinit ~ - \int_use:N \g__color_stack_int \c_space_tl - \tl_if_blank:nF {#2} { #2 ~ } - (#3) + \__kernel_backend_literal:x + { + pdfcolorstackinit ~ + \exp_not:N \int_use:N \exp_not:N \g__color_backend_stack_int + \c_space_tl + \exp_not:N \tl_if_blank:nF {#2} { #2 ~ } + (#3) + } } } + \cs_if_exist:cTF { main@pdfcolorstack } + { + \int_set:Nn \l__color_backend_stack_int + { \int_use:c { main@pdfcolorstack } } + } + { + \__kernel_color_backend_stack_init:Nnn \c__color_backend_main_stack_int + { page ~ direct } { 0 ~ g ~ 0 ~ G } + \int_set_eq:NN \l__color_backend_stack_int + \c__color_backend_main_stack_int + } } \int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 } { - \cs_new_protected:Npn \__kernel_color_stack_push:nn #1#2 + \cs_new_protected:Npn \__color_backend_stack_push:nn #1#2 { \__kernel_backend_literal:x { @@ -117,7 +137,8 @@ push ~ (#2) } } - \cs_new_protected:Npn \__kernel_color_stack_pop:n #1 + \cs_generate_variant:Nn \__color_backend_stack_push:nn { nx } + \cs_new_protected:Npn \__color_backend_stack_pop:n #1 { \__kernel_backend_literal:x { @@ -127,20 +148,23 @@ } } } -\int_new:N \l__kernel_color_stack_int +\tl_new:N \l__color_backend_fill_tl +\tl_new:N \l__color_backend_stroke_tl \cs_new_protected:Npn \__color_backend_select_cmyk:n #1 - { \__color_backend_select:n { #1 ~ k ~ #1 ~ K } } + { \__color_backend_select:nn { #1 ~ k } { #1 ~ K } } \cs_new_protected:Npn \__color_backend_select_gray:n #1 - { \__color_backend_select:n { #1 ~ g ~ #1 ~ G } } + { \__color_backend_select:nn { #1 ~ g } { #1 ~ G } } \cs_new_protected:Npn \__color_backend_select_rgb:n #1 - { \__color_backend_select:n { #1 ~ rg ~ #1 ~ RG } } -\cs_new_protected:Npn \__color_backend_select:n #1 + { \__color_backend_select:nn { #1 ~ rg } { #1 ~ RG } } +\cs_new_protected:Npn \__color_backend_select:nn #1#2 { - \__kernel_color_stack_push:nn \l__kernel_color_stack_int {#1} + \tl_set:Nn \l__color_backend_fill_tl {#1} + \tl_set:Nn \l__color_backend_stroke_tl {#2} + \__color_backend_stack_push:nn \l__color_backend_stack_int { #1 ~ #2 } \group_insert_after:N \__color_backend_reset: } \cs_new_protected:Npn \__color_backend_reset: - { \__kernel_color_stack_pop:n \l__kernel_color_stack_int } + { \__color_backend_stack_pop:n \l__color_backend_stack_int } \int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } { \cs_gset_protected:Npn \__color_backend_select_cmyk:n #1 @@ -154,7 +178,7 @@ { \__kernel_backend_literal:n { pdf: ec } } } \cs_new_protected:Npn \__color_backend_select_separation:nn #1#2 - { \__color_backend_select:n { /#1 ~ cs ~ /#1 ~ CS ~ #2 ~ scn ~ #2 ~ SCN } } + { \__color_backend_select:nn { /#1 ~ cs ~ #2 ~ scn } { /#1 ~ CS ~ #2 ~ SCN } } \cs_new_eq:NN \__color_backend_select_devicen:nn \__color_backend_select_separation:nn \cs_new_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { @@ -261,24 +285,65 @@ { \__color_backend_devicen_init:w #2 \s__color_stop } } \cs_new_eq:NN \__color_backend_devicen_init:n \__color_backend_separation_init:n +\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } + { + \cs_gset_protected:Npn \__color_backend_select_separation:nn #1#2 { } + \cs_gset_eq:NN \__color_backend_select_devicen:nn + \__color_backend_select_separation:nn + } \cs_new_protected:Npn \__color_backend_fill_cmyk:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ k } } + { \__color_backend_fill:n { #1 ~ k } } \cs_new_protected:Npn \__color_backend_fill_gray:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ g } } + { \__color_backend_fill:n { #1 ~ g } } \cs_new_protected:Npn \__color_backend_fill_rgb:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ rg } } - \cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ K } } + { \__color_backend_fill:n { #1 ~ rg } } +\cs_new_protected:Npn \__color_backend_fill:n #1 + { + \tl_set:Nn \l__color_backend_fill_tl {#1} + \__color_backend_stack_push:nn \l__color_backend_stack_int + { #1 ~ \l__color_backend_stroke_tl } + \group_insert_after:N \__color_backend_reset: + } +\cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1 + { \__color_backend_stroke:n { #1 ~ K } } \cs_new_protected:Npn \__color_backend_stroke_gray:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ G } } + { \__color_backend_stroke:n { #1 ~ G } } \cs_new_protected:Npn \__color_backend_stroke_rgb:n #1 - { \__kernel_backend_literal_pdf:n { #1 ~ RG } } + { \__color_backend_stroke:n { #1 ~ RG } } +\cs_new_protected:Npn \__color_backend_stroke:n #1 + { + \tl_set:Nn \l__color_backend_stroke_tl {#1} + \__color_backend_stack_push:nn \l__color_backend_stack_int + { \l__color_backend_fill_tl \c_space_tl #1 } + \group_insert_after:N \__color_backend_reset: + } \cs_new_protected:Npn \__color_backend_fill_separation:nn #1#2 - { \__kernel_backend_literal_pdf:n { /#1 ~ cs ~ #2 ~ scn } } + { \__color_backend_fill:n { /#1 ~ cs ~ #2 ~ scn } } \cs_new_protected:Npn \__color_backend_stroke_separation:nn #1#2 - { \__kernel_backend_literal_pdf:n { /#1 ~ CS ~ #2 ~ SCN } } + { \__color_backend_stroke:n { /#1 ~ CS ~ #2 ~ SCN } } \cs_new_eq:NN \__color_backend_fill_devicen:nn \__color_backend_fill_separation:nn \cs_new_eq:NN \__color_backend_stroke_devicen:nn \__color_backend_stroke_separation:nn +\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } + { + \cs_gset_protected:Npn \__color_backend_fill_cmyk:n #1 + { + \__kernel_backend_literal:n { pdf: bc ~ [#1] } + \group_insert_after:N \__color_backend_reset: + } + \cs_gset_eq:NN \__color_backend_fill_gray:n \__color_backend_fill_cmyk:n + \cs_gset_eq:NN \__color_backend_fill_rgb:n \__color_backend_fill_cmyk:n + \cs_gset_protected:Npn \__color_backend_reset: + { \__kernel_backend_literal:n { pdf: ec } } + \cs_gset_protected:Npn \__color_backend_stroke:n #1 + { \__kernel_backend_literal:n {#1} } + \cs_gset_protected:Npn \__color_backend_fill_separation:nn #1#2 { } + \cs_gset_eq:NN \__color_backend_fill_devicen:nn + \__color_backend_fill_separation:nn + \cs_gset_eq:NN \__color_backend_stroke_separation:nn + \__color_backend_fill_separation:nn + \cs_gset_eq:NN \__color_backend_stroke_devicen:nn + \__color_backend_stroke_separation:nn + } %% File: l3backend-box.dtx \cs_new_protected:Npn \__box_backend_clip:N #1 { @@ -800,36 +865,43 @@ ] } } -\cs_new_protected:Npn \__pdf_backend_destination_box:nn #1#2 +\cs_new_protected:Npn \__pdf_backend_destination:nnnn #1#2#3#4 { - \group_begin: - \hbox_set:Nn \l__pdf_internal_box {#2} - \box_move_down:nn { \box_dp:N \l__pdf_internal_box } - { - \hbox:n - { - \__pdf_backend:n { obj ~ @pdf_ #1 _llx ~ @xpos } - \__pdf_backend:n { obj ~ @pdf_ #1 _lly ~ @ypos } - } - } - \box_use:N \l__pdf_internal_box - \box_move_up:nn { \box_ht:N \l__pdf_internal_box } - { - \hbox:n - { - \__pdf_backend:n - { - dest ~ (#1) - [ - @thispage - /FitR ~ - @pdf_ #1 _llx ~ @pdf_ #1 _lly ~ - @xpos ~ @ypos - ] - } - } - } - \group_end: + \exp_args:Ne \__pdf_backend_destination_aux:nnnn + { \dim_eval:n {#2} } {#1} {#3} {#4} + } +\cs_new_protected:Npn \__pdf_backend_destination_aux:nnnn #1#2#3#4 + { + \vbox_to_zero:n + { + \tex_kern:D \dim_eval:n {#4} \scan_stop: + \hbox:n + { + \__pdf_backend:n { obj ~ @pdf_ #2 _llx ~ @xpos } + \__pdf_backend:n { obj ~ @pdf_ #2 _lly ~ @ypos } + } + \tex_vss:D + } + \tex_kern:D #1 \scan_stop: + \vbox_to_zero:n + { + \tex_kern:D \dim_eval:n { -#3 } \scan_stop: + \hbox:n + { + \__pdf_backend:n + { + dest ~ (#2) + [ + @thispage + /FitR ~ + @pdf_ #2 _llx ~ @pdf_ #2 _lly ~ + @xpos ~ @ypos + ] + } + } + \tex_vss:D + } + \tex_kern:D -#1 \scan_stop: } \cs_new_protected:Npn \__pdf_backend_compresslevel:n #1 { \__kernel_backend_literal:x { dvipdfmx:config~z~ \int_eval:n {#1} } } @@ -854,6 +926,69 @@ { \__kernel_backend_literal_page:n { /#1 ~ #2 ~ BDC } } \cs_new_protected:Npn \__pdf_backend_emc: { \__kernel_backend_literal_page:n { EMC } } +%% File: l3backend-opacity.dtx +\cs_if_exist:NT \pdfmanagement_add:nnn + { + \__kernel_color_backend_stack_init:Nnn \c__opacity_backend_stack_int + { page ~ direct } { /opacity 1 ~ gs } + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity 1 } { << /ca ~ 1 /CA ~ 1 >> } + } +\tl_new:N \l__opacity_backend_fill_tl +\tl_new:N \l__opacity_backend_stroke_tl +\cs_new_protected:Npn \__opacity_backend_select:n #1 + { + \exp_args:Nx \__opacity_backend_select_aux:n + { \fp_eval:n { min(max(0,#1),1) } } + } +\cs_new_protected:Npn \__opacity_backend_select_aux:n #1 + { + \tl_set:Nn \l__opacity_backend_fill_tl {#1} + \tl_set:Nn \l__opacity_backend_stroke_tl {#1} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity #1 } + { << /ca ~ #1 /CA ~ #1 >> } + \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + { /opacity #1 ~ gs } + \group_insert_after:N \__opacity_backend_reset: + } +\cs_if_exist:NF \pdfmanagement_add:nnn + { + \cs_gset_protected:Npn \__opacity_backend_select_aux:n #1 { } + } +\cs_new_protected:Npn \__opacity_backend_reset: + { \__opacity_backend_stack_pop:n \c__opacity_backend_stack_int } +\cs_new_protected:Npn \__opacity_backend_fill:n #1 + { + \__opacity_backend_fill_stroke:xx + { \fp_eval:n { min(max(0,#1),1) } } + \l__opacity_backend_stroke_tl + } +\cs_new_protected:Npn \__opacity_backend_stroke:n #1 + { + \__opacity_backend_fill_stroke:xx + \l__opacity_backend_fill_tl + { \fp_eval:n { min(max(0,#1),1) } } + } +\cs_new_protected:Npn \__opacity_backend_fill_stroke:nn #1#2 + { + \str_if_eq:nnTF {#1} {#2} + { \__opacity_backend_select_aux:n {#1} } + { + \tl_set:Nn \l__opacity_backend_fill_tl {#1} + \tl_set:Nn \l__opacity_backend_stroke_tl {#2} + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.fill #1 } + { << /ca ~ #1 >> } + \pdfmanagement_add:nnn { Page / Resources / ExtGState } + { opacity.stroke #1 } + { << /CA ~ #2 >> } + \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + { /opacity.fill #1 ~ gs /opacity.stroke #2 ~ gs } + \group_insert_after:N \__opacity_backend_reset: + } + } +\cs_generate_variant:Nn \__opacity_backend_fill_stroke:nn { xx } %% %% %% End of file `l3backend-xetex.def'. |