[latex3-commits] [git/LaTeX3-latex3-latex3] gh1191: Add "pdf-attr" key to l3graphics (3ac2fcddb)
Joseph Wright
joseph.wright at morningstar2.co.uk
Wed Apr 12 17:46:54 CEST 2023
Repository : https://github.com/latex3/latex3
On branch : gh1191
Link : https://github.com/latex3/latex3/commit/3ac2fcddbe4261e1545dfe17d44df57e79ad9fdd
>---------------------------------------------------------------
commit 3ac2fcddbe4261e1545dfe17d44df57e79ad9fdd
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date: Wed Apr 12 16:41:50 2023 +0100
Add "pdf-attr" key to l3graphics
>---------------------------------------------------------------
3ac2fcddbe4261e1545dfe17d44df57e79ad9fdd
l3backend/CHANGELOG.md | 3 ++
l3backend/l3backend-graphics.dtx | 55 +++++++++++++++++---------------
l3experimental/CHANGELOG.md | 3 ++
l3experimental/l3graphics/l3graphics.dtx | 8 +++++
l3kernel/testfiles/m3expl001.xetex.tlg | 2 +-
l3kernel/testfiles/m3expl003.xetex.tlg | 2 +-
6 files changed, 45 insertions(+), 28 deletions(-)
diff --git a/l3backend/CHANGELOG.md b/l3backend/CHANGELOG.md
index 82228400e..992b6ce5f 100644
--- a/l3backend/CHANGELOG.md
+++ b/l3backend/CHANGELOG.md
@@ -6,6 +6,9 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+### Changed
+- Pass additional attributes when loading PDF graphics
+
## [2023-03-30]
### Changed
diff --git a/l3backend/l3backend-graphics.dtx b/l3backend/l3backend-graphics.dtx
index 97c97536f..228ca0db8 100644
--- a/l3backend/l3backend-graphics.dtx
+++ b/l3backend/l3backend-graphics.dtx
@@ -184,7 +184,8 @@
\cs_new_protected:Npn \@@_backend_getbb_jpg:n #1
{
\int_zero:N \l_@@_page_int
- \tl_clear:N \l_@@_pagebox_tl
+ \tl_clear:N m\l_@@_pagebox_tl
+ \str_clear:N \l_@@_pdf_str
\tl_set:Nx \l_@@_attr_tl
{
\tl_if_empty:NF \l_@@_decodearray_str
@@ -205,6 +206,8 @@
: \l_@@_pagebox_tl
\int_compare:nNnT \l_@@_page_int > 1
{ :P \int_use:N \l_@@_page_int }
+ \str_if_empty:NF \l_@@_pdf_str
+ { :X \l_@@_pdf_str }
}
\@@_backend_getbb_auxi:n {#1}
}
@@ -231,9 +234,12 @@
\cs_new_protected:Npn \@@_backend_getbb_auxiii:n #1
{
\tex_immediate:D \tex_pdfximage:D
- \bool_lazy_or:nnT
- { \l_@@_interpolate_bool }
- { ! \tl_if_empty_p:N \l_@@_decodearray_str }
+ \bool_lazy_any:nT
+ {
+ { \l_@@_interpolate_bool }
+ { ! \tl_if_empty_p:N \l_@@_decodearray_str }
+ { ! \str_if_empty_p:N \l_@@_pdf_str }
+ }
{
attr ~
{
@@ -241,6 +247,7 @@
{ /Decode~[ \l_@@_decodearray_str ] }
\bool_if:NT \l_@@_interpolate_bool
{ /Interpolate~true }
+ \l_@@_pdf_str
}
}
\int_compare:nNnT \l_@@_page_int > 0
@@ -398,6 +405,7 @@
{
\int_zero:N \l_@@_page_int
\tl_clear:N \l_@@_pagebox_tl
+ \str_clear:N \l_@@_pdf_str
\@@_extract_bb:n {#1}
}
\cs_new_eq:NN \@@_backend_getbb_jpeg:n \@@_backend_getbb_jpg:n
@@ -430,10 +438,9 @@
% \begin{macro}{\@@_backend_include_auxi:nn}
% \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 \XeTeX{}: for
-% the latter it is better to use the primitive route. The relevant code for
-% that is included later in this file.
+% The special syntax depends on the file type. As detailed later, we use the
+% primitive in \XeTeX{} to read the PDF bounding box but not to include the
+% graphic.
% \begin{macrocode}
\cs_new_protected:Npn \@@_backend_include_eps:n #1
{
@@ -452,10 +459,8 @@
\cs_new_eq:NN \@@_backend_include_jpeg:n \@@_backend_include_jpg:n
\cs_new_eq:NN \@@_backend_include_png:n \@@_backend_include_jpg:n
\cs_new_eq:NN \@@_backend_include_bmp:n \@@_backend_include_jpg:n
-%<*dvipdfmx>
\cs_new_protected:Npn \@@_backend_include_pdf:n #1
{ \@@_backend_include_auxi:nn {#1} { epdf } }
-%</dvipdfmx>
% \end{macrocode}
% Graphic inclusion is set up to use the fact that each image is stored in
% the PDF as an XObject. This means that we can include repeated images
@@ -474,6 +479,8 @@
{ :D \l_@@_decodearray_str }
\bool_if:NT \l_@@_interpolate_bool
{ :I }
+ \str_if_empty:NF \l_@@_pdf_str
+ { :X \l_@@_pdf_str }
}
{#1} {#2}
}
@@ -513,15 +520,19 @@
\dim_to_decimal_in_bp:n \l_@@_ury_dim \c_space_tl
}
(#1)
- \bool_lazy_or:nnT
- { \l_@@_interpolate_bool }
- { ! \tl_if_empty_p:N \l_@@_decodearray_str }
+ \bool_lazy_any:nT
+ {
+ { \l_@@_interpolate_bool }
+ { ! \tl_if_empty_p:N \l_@@_decodearray_str }
+ { ! \str_if_empty_p:N \l_@@_pdf_str }
+ }
{
<<
\tl_if_empty:NF \l_@@_decodearray_str
{ /Decode~[ \l_@@_decodearray_str ] }
\bool_if:NT \l_@@_interpolate_bool
{ /Interpolate~true> }
+ \l_@@_pdf_str
>>
}
}
@@ -575,6 +586,7 @@
{
\int_zero:N \l_@@_page_int
\tl_clear:N \l_@@_pagebox_tl
+ \str_clear:N \l_@@_pdf_str
\@@_backend_getbb_auxi:nN {#1} \tex_XeTeXpicfile:D
}
\cs_new_eq:NN \@@_backend_getbb_jpeg:n \@@_backend_getbb_jpg:n
@@ -638,19 +650,10 @@
% \end{macro}
%
% \begin{macro}{\@@_backend_include_pdf:n}
-% For PDF graphics, properly supporting the |pagebox| concept in \XeTeX{}
-% is best done using the |\tex_XeTeXpdffile:D| primitive. The syntax here
-% is the same as for the graphic measurement part, although we know at this
-% stage that there must be some valid setting for \cs{l_@@_pagebox_tl}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_include_pdf:n #1
- {
- \tex_XeTeXpdffile:D #1 ~
- \int_compare:nNnT \l_@@_page_int > 0
- { page ~ \int_use:N \l_@@_page_int \c_space_tl }
- \exp_after:wN \@@_backend_getbb_pagebox:w \l_@@_pagebox_tl
- }
-% \end{macrocode}
+% Earlier versions of the backend code used the \XeTeX{} primitive to
+% implement this separately from the \texttt{dvipdfmx} approach. However,
+% that does not allow for the addition of arbitrary PDF attributes, so
+% we stick to the method which does.
% \end{macro}
%
% \begin{macro}{\@@_backend_get_pagecount:n}
diff --git a/l3experimental/CHANGELOG.md b/l3experimental/CHANGELOG.md
index a3be92ce0..cfbdccde3 100644
--- a/l3experimental/CHANGELOG.md
+++ b/l3experimental/CHANGELOG.md
@@ -7,6 +7,9 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+### Added
+- Key `pdf-attr` to `l3graphics` for additional attribute setting
+
## [2023-03-30]
### Fixed
diff --git a/l3experimental/l3graphics/l3graphics.dtx b/l3experimental/l3graphics/l3graphics.dtx
index 346c1ef92..11e5e46d7 100644
--- a/l3experimental/l3graphics/l3graphics.dtx
+++ b/l3experimental/l3graphics/l3graphics.dtx
@@ -78,6 +78,11 @@
% which may contain multiple pages.
% \end{variable}
%
+% \begin{variable}{pdf-attr}
+% Additional PDF-focussed attributes: available to allow control of
+% extended |.pdf| structures beyond those needed for graphic inclusion.
+% \end{variable}
+%
% \begin{variable}{pagebox}
% The nature of the page box setting used to determine the bounding box of
% material: used for |.pdf| files which feature multiple page box
@@ -206,6 +211,7 @@
% \l_@@_interpolate_bool ,
% \l_@@_page_int ,
% \l_@@_pagebox_tl ,
+% \l_@@_pdf_str ,
% \l_@@_type_str
% }
% Keys which control features of graphics. The standard value of |pagebox|
@@ -235,6 +241,8 @@
crop ,
page .int_set:N =
\l_@@_page_int ,
+ pdf-attr .str_set:N =
+ \l_@@_pdf_str ,
type . str_set:N =
\l_@@_type_str
}
diff --git a/l3kernel/testfiles/m3expl001.xetex.tlg b/l3kernel/testfiles/m3expl001.xetex.tlg
index 6d4216dd0..00e86501b 100644
--- a/l3kernel/testfiles/m3expl001.xetex.tlg
+++ b/l3kernel/testfiles/m3expl001.xetex.tlg
@@ -117,6 +117,7 @@ Defining \__graphics_backend_include_jpg:n on line ...
Defining \__graphics_backend_include_jpeg:n on line ...
Defining \__graphics_backend_include_png:n on line ...
Defining \__graphics_backend_include_bmp:n on line ...
+Defining \__graphics_backend_include_pdf:n on line ...
Defining \__graphics_backend_include_auxi:nn on line ...
Defining \__graphics_backend_include_auxii:nnn on line ...
Defining \__graphics_backend_include_auxii:xnn on line ...
@@ -135,7 +136,6 @@ Defining \__graphics_backend_getbb_auxiv:VnNnn on line ..
Defining \__graphics_backend_getbb_auxv:nNnn on line ...
Defining \__graphics_backend_getbb_auxvi:nNnn on line ...
Defining \__graphics_backend_getbb_pagebox:w on line ...
-Defining \__graphics_backend_include_pdf:n on line ...
Defining \__graphics_backend_get_pagecount:n on line ...
Defining \l__pdf_internal_box on line ...
\l__pdf_internal_box=\box...
diff --git a/l3kernel/testfiles/m3expl003.xetex.tlg b/l3kernel/testfiles/m3expl003.xetex.tlg
index 6d4216dd0..00e86501b 100644
--- a/l3kernel/testfiles/m3expl003.xetex.tlg
+++ b/l3kernel/testfiles/m3expl003.xetex.tlg
@@ -117,6 +117,7 @@ Defining \__graphics_backend_include_jpg:n on line ...
Defining \__graphics_backend_include_jpeg:n on line ...
Defining \__graphics_backend_include_png:n on line ...
Defining \__graphics_backend_include_bmp:n on line ...
+Defining \__graphics_backend_include_pdf:n on line ...
Defining \__graphics_backend_include_auxi:nn on line ...
Defining \__graphics_backend_include_auxii:nnn on line ...
Defining \__graphics_backend_include_auxii:xnn on line ...
@@ -135,7 +136,6 @@ Defining \__graphics_backend_getbb_auxiv:VnNnn on line ..
Defining \__graphics_backend_getbb_auxv:nNnn on line ...
Defining \__graphics_backend_getbb_auxvi:nNnn on line ...
Defining \__graphics_backend_getbb_pagebox:w on line ...
-Defining \__graphics_backend_include_pdf:n on line ...
Defining \__graphics_backend_get_pagecount:n on line ...
Defining \l__pdf_internal_box on line ...
\l__pdf_internal_box=\box...
More information about the latex3-commits
mailing list.