From 431a21790bcbf7d842f7a3d5e6e3eaef4ae823af Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Sat, 30 Jan 2021 03:00:54 +0000 Subject: CTAN sync 202101300300 --- macros/latex/contrib/l3backend/l3backend-pdf.dtx | 163 +++++++++++++---------- 1 file changed, 91 insertions(+), 72 deletions(-) (limited to 'macros/latex/contrib/l3backend/l3backend-pdf.dtx') diff --git a/macros/latex/contrib/l3backend/l3backend-pdf.dtx b/macros/latex/contrib/l3backend/l3backend-pdf.dtx index e74ac8286b..226f864933 100644 --- a/macros/latex/contrib/l3backend/l3backend-pdf.dtx +++ b/macros/latex/contrib/l3backend/l3backend-pdf.dtx @@ -2,7 +2,7 @@ % %% File: l3backend-pdf.dtx % -% Copyright (C) 2019-2021 The LaTeX3 Project +% Copyright (C) 2019-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 this @@ -35,7 +35,7 @@ % } % % \author{^^A -% The \LaTeX3 Project\thanks +% The \LaTeX{} Project\thanks % {^^A % E-mail: % \href{mailto:latex-team@latex-project.org} @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-01-09} +% \date{Released 2020-01-29} % % \maketitle % @@ -616,11 +616,12 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_backend_destination:nn, \@@_backend_destination_box:nn} +% \begin{macro}{\@@_backend_destination:nn} +% \begin{macro}{\@@_backend_destination:nnnn, \@@_backend_destination_aux:nnnn} % Here, we need to turn the zoom into a scale. We also need to know where % the current anchor point actually is: worked out in PostScript. For the % rectangle version, we have a bit more PostScript: we need two points. -% fitr without rule spec doesn't work, so it falls back to /Fit here. +% fitr without rule spec doesn't work, so it falls back to \texttt{/Fit} here. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_destination:nn #1#2 { @@ -648,32 +649,42 @@ /DEST } } -\cs_new_protected:Npn \@@_backend_destination_box:nn #1#2 - { - \group_begin: - \hbox_set:Nn \l_@@_internal_box {#2} - \box_move_down:nn - { \box_dp:N \l_@@_internal_box } - { \hbox:n { \__kernel_backend_postscript:n { pdf.save.ll } } } - \box_use:N \l_@@_internal_box - \box_move_up:nn - { \box_ht:N \l_@@_internal_box } - { \hbox:n { \__kernel_backend_postscript:n { pdf.save.ur } } } - \@@_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 \@@_backend_destination:nnnn #1#2#3#4 + { + \exp_args:Ne \@@_backend_destination_aux:nnnn + { \dim_eval:n {#2} } {#1} {#3} {#4} + } +\cs_new_protected:Npn \@@_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: + \@@_backend_pdfmark:n + { + /View + [ + /FitR ~ + pdf.llx ~ pdf.lly ~ pdf.dest2device ~ + pdf.urx ~ pdf.ury ~ pdf.dest2device + ] + /Dest ( #2 ) cvn + /DEST + } } % \end{macrocode} % \end{macro} +% \end{macro} % % \subsubsection{Structure} % @@ -859,7 +870,8 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_backend_destination:nn, \@@_backend_destination_box:nn} +% \begin{macro}{\@@_backend_destination:nn} +% \begin{macro}{\@@_backend_destination:nnnn} % A simple task: pass the data to the primitive. The |\scan_stop:| deals % with the danger of an unterminated keyword. The zoom given here is a % percentage, but we need to pass it as \emph{per mille}. The rectangle @@ -888,26 +900,23 @@ { xyz ~ zoom \fp_eval:n { #2 * 10 } } \scan_stop: } -\cs_new_protected:Npn \@@_backend_destination_box:nn #1#2 +\cs_new_protected:Npn \@@_backend_destination:nnnn #1#2#3#4 { - \group_begin: - \hbox_set:Nn \l_@@_internal_box {#2} %<*luatex> - \tex_pdfextension:D dest ~ + \tex_pdfextension:D dest ~ % %<*pdftex> - \tex_pdfdest:D + \tex_pdfdest:D % - name {#1} - fitr ~ - width \box_wd:N \l_@@_internal_box - height \box_ht:N \l_@@_internal_box - depth \box_dp:N \l_@@_internal_box - \box_use:N \l_@@_internal_box - \group_end: + name {#1} + fitr ~ + width \dim_eval:n {#2} ~ + height \dim_eval:n {#3} ~ + depth \dim_eval:n {#4} \scan_stop: } % \end{macrocode} % \end{macro} +% \end{macro} % % \subsubsection{Catalogue entries} % @@ -1475,11 +1484,13 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_backend_destination:nn, \@@_backend_destination_box:nn} +% \begin{macro}{\@@_backend_destination:nn} +% \begin{macro}{\@@_backend_destination:nnnn,\@@_backend_destination_aux:nnnn} % Here, we need to turn the zoom into a scale. The method for \texttt{FitR} % is from Alexander Grahn: the idea is to avoid needing to do any calculations % in \TeX{} by using the backend data for \texttt{@xpos} and \texttt{@ypos}. -% fitr without rule spec doesn't work, so it falls back to /Fit here. +% \texttt{/FitR} without rule spec doesn't work, so it falls back to +% \texttt{/Fit} here. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_destination:nn #1#2 { @@ -1503,39 +1514,47 @@ ] } } -\cs_new_protected:Npn \@@_backend_destination_box:nn #1#2 +\cs_new_protected:Npn \@@_backend_destination:nnnn #1#2#3#4 { - \group_begin: - \hbox_set:Nn \l_@@_internal_box {#2} - \box_move_down:nn { \box_dp:N \l_@@_internal_box } - { - \hbox:n - { - \@@_backend:n { obj ~ @pdf_ #1 _llx ~ @xpos } - \@@_backend:n { obj ~ @pdf_ #1 _lly ~ @ypos } - } - } - \box_use:N \l_@@_internal_box - \box_move_up:nn { \box_ht:N \l_@@_internal_box } - { - \hbox:n - { - \@@_backend:n - { - dest ~ (#1) - [ - @thispage - /FitR ~ - @pdf_ #1 _llx ~ @pdf_ #1 _lly ~ - @xpos ~ @ypos - ] - } - } - } - \group_end: + \exp_args:Ne \@@_backend_destination_aux:nnnn + { \dim_eval:n {#2} } {#1} {#3} {#4} + } +\cs_new_protected:Npn \@@_backend_destination_aux:nnnn #1#2#3#4 + { + \vbox_to_zero:n + { + \tex_kern:D \dim_eval:n {#4} \scan_stop: + \hbox:n + { + \@@_backend:n { obj ~ @pdf_ #2 _llx ~ @xpos } + \@@_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 + { + \@@_backend:n + { + dest ~ (#2) + [ + @thispage + /FitR ~ + @pdf_ #2 _llx ~ @pdf_ #2 _lly ~ + @xpos ~ @ypos + ] + } + } + \tex_vss:D + } + \tex_kern:D -#1 \scan_stop: } % \end{macrocode} % \end{macro} +% \end{macro} % % \subsubsection{Structure} % -- cgit v1.2.3