[latex3-commits] [git/LaTeX3-latex3-pdfresources] testmetadata: add support for structure destinations (9a6bfc7)

Ulrike Fischer fischer at troubleshooting-tex.de
Tue Jan 4 19:11:55 CET 2022


Repository : https://github.com/latex3/pdfresources
On branch  : testmetadata
Link       : https://github.com/latex3/pdfresources/commit/9a6bfc785d15540241f4daf600ce11c2b5616a43

>---------------------------------------------------------------

commit 9a6bfc785d15540241f4daf600ce11c2b5616a43
Author: Ulrike Fischer <fischer at troubleshooting-tex.de>
Date:   Tue Jan 4 19:11:55 2022 +0100

    add support for structure destinations


>---------------------------------------------------------------

9a6bfc785d15540241f4daf600ce11c2b5616a43
 l3backend-testphase.dtx                    | 348 +++++++++++++++++++
 testfiles/structure-destination.luatex.tpf | 244 +++++++++++++
 testfiles/structure-destination.pvt        |  26 ++
 testfiles/structure-destination.tpf        | 532 +++++++++++++++++++++++++++++
 testfiles/structure-destination.xetex.tpf  | 221 ++++++++++++
 5 files changed, 1371 insertions(+)

diff --git a/l3backend-testphase.dtx b/l3backend-testphase.dtx
index 7c902d8..b3f8f63 100644
--- a/l3backend-testphase.dtx
+++ b/l3backend-testphase.dtx
@@ -1600,6 +1600,354 @@
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
+% \subsection{Structure Destinations}
+% Standard destinations consist of a reference to a page in the pdf and instructions
+% how to display it---typically they will put a specific location in the left top corner
+% of the viewer and so give the impression that a link jumped to the word in this place.
+% But in reality they are not connected to the content.
+%
+% Starting with pdf~2.0 destinations can in a tagged PDF also point to a structure, to a /StructElem object.
+% GoTo links can then additionally to the \texttt{/D} key pointing to a
+% page destination also point to such a structure destination with an \texttt{/SD} key.
+% Programs that e.g. convert such a PDF to html can then create better links.
+% (According to the reference, PDF-viewer should prefer the structure destination
+% over the page destination, but as far as it is known this isn't done yet.)
+%
+% Currently structure destinations and GoTo links making use of it could natively only
+% be created with the dvipdfmx backend. With pdftex and lualatex it was only possible to create
+% a restricted type which used only the \enquote{Fit} mode. Starting with
+% \TeX{}live 2022  (earlier in miktex) both engine will knew new keywords which allow
+% to create structure destination easily.
+%
+% The following backend code prepares the use of structure destinations. The general idea is
+% that if structure destinations are used, they should be used always. So we define
+% alternative commands which can be activated by mapping them to the standard backend commands.
+%
+% \begin{macro}{\l_pdf_current_structure_destination_tl}
+%
+% This commands holds the name of the structure object to use in the next command
+% which creates a destination. The code which activates structure destinations
+% must also ensure that it has a sensible, expandable content. \pkg{tagpdf} for example
+% will define it as
+% \begin{verbatim}
+% \tl_set:Nn \l_pdf_current_structure_destination_tl { __tag/struct/\g__tag_struct_stack_current_tl }
+% \end{verbatim}
+%    \begin{macrocode}
+%<*drivers>
+\tl_new:N   \l_pdf_current_structure_destination_tl
+%</drivers>
+%    \end{macrocode}
+% \end{macro}
+%
+% We will define alternatives for three backend commands:
+% \begin{verbatim}
+% \__pdf_backend_destination:nn       -> \__pdf_backend_structure_destination:nn
+% \__pdf_backend_destination:nnnn -> \__pdf_backend_structure_destination:nnnn
+% \__pdf_backend_link_begin_goto:nnw  -> \__pdf_backend_link_begin_structure_goto:nnw
+% \end{verbatim}
+%
+% Activating means mapping them onto the original commands. Be aware that not
+% all engines and compilation routes support structure destinations, for them
+% the command will be a no-op.
+%
+% \begin{macro}{\pdf_activate_structure_destination:}
+%    \begin{macrocode}
+%<*drivers>
+\cs_new_protected:Npn \pdf_activate_structure_destination:
+ {
+   \cs_gset_eq:NN \@@_backend_destination:nn \@@_backend_structure_destination:nn
+   \cs_gset_eq:NN \@@_backend_destination:nnnn \@@_backend_structure_destination:nnnn
+   \cs_gset_eq:NN \@@_backend_link_begin_goto:nnw  \@@_backend_link_begin_structure_goto:nnw
+ }
+%</drivers>
+%    \end{macrocode}
+% \end{macro}
+% Now the driver dependant parts.
+% By default the new commands are simply copies of the original commands.
+% We adapt them then for the engines and engine version which provide support
+% for structure destinations.
+%
+%    \begin{macrocode}
+%<*drivers>
+\cs_set_eq:NN \@@_backend_structure_destination:nn       \@@_backend_destination:nn
+\cs_set_eq:NN \@@_backend_structure_destination:nnnn \@@_backend_destination:nnnn
+\cs_set_eq:NN \@@_backend_link_begin_structure_goto:nnw  \@@_backend_link_begin_goto:nnw
+%</drivers>
+%    \end{macrocode}
+% \begin{macro}{\@@_backend_structure_destination:nn}
+% This command is the backend command to create a destination.
+% It should in parallel create also a structure destination.
+% At first xetex/dvipdfmx.
+% The structure destination is an array, so we use obj for it
+% so that we can reference it:
+%    \begin{macrocode}
+%<*xdvipdfmx|dvipdfmx>
+\cs_set_protected:Npn \@@_backend_structure_destination:nn #1#2
+  {
+    \@@_backend:x
+      {
+        dest ~ ( \exp_not:n {#1} )
+        [
+          @thispage
+          \str_case:nnF {#2}
+            {
+              { xyz }   { /XYZ ~ @xpos ~ @ypos ~ null }
+              { fit }   { /Fit }
+              { fitb }  { /FitB }
+              { fitbh } { /FitBH }
+              { fitbv } { /FitBV ~ @xpos }
+              { fith }  { /FitH ~ @ypos }
+              { fitv }  { /FitV ~ @xpos }
+              { fitr }  { /Fit }
+            }
+            { /XYZ ~ @xpos ~ @ypos ~ \fp_eval:n { (#2) / 100 } }
+        ]
+      }
+%    \end{macrocode}
+% We test if the structure object exist. The object of the structure destination
+% gets the name \texttt{@pdf.Sdest.\meta{destname}}, where \meta{destname} is the
+% name of the standard destination so that we can reference it in the GoTo links.
+%    \begin{macrocode}
+    \exp_args:Ne \pdf_object_if_exist:nT { \l_pdf_current_structure_destination_tl }
+      {
+        \@@_backend:x
+         {
+          obj ~ @pdf.SDest.\exp_not:n{#1}
+          [
+            \exp_args:Ne \pdf_object_ref:n { \l_pdf_current_structure_destination_tl }
+            \str_case:nnF {#2}
+              {
+                { xyz }   { /XYZ ~ @xpos ~ @ypos ~ null }
+                { fit }   { /Fit }
+                { fitb }  { /FitB }
+                { fitbh } { /FitBH }
+                { fitbv } { /FitBV ~ @xpos }
+                { fith }  { /FitH ~ @ypos }
+                { fitv }  { /FitV ~ @xpos }
+                { fitr }  { /Fit }
+              }
+              { /XYZ ~ @xpos ~ @ypos ~ \fp_eval:n { (#2) / 100 } }
+          ]
+        }
+      }
+  }
+%    \end{macrocode}
+% The second destination command is for the boxed destination. Here we need to define
+% an new auxiliary command:
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_structure_destination_aux:nnnn #1#2#3#4
+  {
+    \vbox_to_zero:n
+      {
+        \__kernel_kern:n {#4}
+        \hbox:n
+          {
+            \@@_backend:n { obj ~ @pdf_ #2 _llx ~ @xpos }
+            \@@_backend:n { obj ~ @pdf_ #2 _lly ~ @ypos }
+          }
+        \tex_vss:D
+      }
+    \__kernel_kern:n {#1}
+    \vbox_to_zero:n
+      {
+        \__kernel_kern:n { -#3 }
+        \hbox:n
+          {
+            \@@_backend:n
+              {
+                dest ~ (#2)
+                [
+                  @thispage
+                  /FitR ~
+                    @pdf_ #2 _llx ~ @pdf_ #2 _lly ~
+                    @xpos ~ @ypos
+                ]
+              }
+%    \end{macrocode}
+% Here we add the structure destination to the same box
+%    \begin{macrocode}
+            \exp_args:Ne \pdf_object_if_exist:nT { \l_pdf_current_structure_destination_tl }
+              {
+                \@@_backend:x
+                  {
+                    obj ~ @pdf.SDest.\exp_not:n{#2}
+                    [
+                      \exp_args:Ne \pdf_object_ref:n { \l_pdf_current_structure_destination_tl }
+                      /FitR ~
+                        @pdf_ #2 _llx ~ @pdf_ #2 _lly ~
+                        @xpos ~ @ypos
+                    ]
+                  }
+              }
+          }
+        \tex_vss:D
+      }
+    \__kernel_kern:n { -#1 }
+  }
+%    \end{macrocode}
+% And now we redefine the destination command:
+%    \begin{macrocode}
+\cs_set_protected:Npn \@@_backend_structure_destination:nnnn #1#2#3#4
+  {
+    \exp_args:Ne \@@_backend_structure_destination_aux:nnnn
+      { \dim_eval:n {#2} } {#1} {#3} {#4}
+  }
+%    \end{macrocode}
+% At last the goto link.
+%    \begin{macrocode}
+\cs_set_protected:Npn \@@_backend_link_begin_structure_goto:nnw #1#2
+  {
+    \@@_backend_link_begin:n { #1 /Subtype /Link /A << /S /GoTo /D ( #2 ) /SD~@pdf.SDest.#2  >> }
+  }
+%</xdvipdfmx|dvipdfmx>
+%    \end{macrocode}
+% \end{macro}
+% Now pdftex. We only redefine for version 1.40 revision 24 or later.
+%    \begin{macrocode}
+%<*pdftex>
+\bool_lazy_and:nnT
+  { \int_compare_p:nNn {\tex_pdftexversion:D } > {139} }
+  { \int_compare_p:nNn {\tex_pdftexrevision:D } > {23} }
+  {
+    \cs_set_protected:Npn \@@_backend_structure_destination:nn #1#2
+      {
+        \tex_pdfdest:D
+           name {#1}
+           \str_case:nnF {#2}
+             {
+               { xyz }   { xyz }
+               { fit }   { fit }
+               { fitb }  { fitb }
+               { fitbh } { fitbh }
+               { fitbv } { fitbv }
+               { fith }  { fith }
+               { fitv }  { fitv }
+               { fitr }  { fitr }
+             }
+             { xyz ~ zoom \fp_eval:n { #2 * 10 } }
+           \scan_stop:
+        \exp_args:Ne \pdf_object_if_exist:nT { \l_pdf_current_structure_destination_tl }
+          {
+            \tex_pdfdest:D
+               struct~
+               \int_use:c
+                 { c_@@_backend_object_ \exp_args:Ne \tl_to_str:n {\l_pdf_current_structure_destination_tl} _int }~
+               name {#1}
+               \str_case:nnF {#2}
+                 {
+                   { xyz }   { xyz }
+                   { fit }   { fit }
+                   { fitb }  { fitb }
+                   { fitbh } { fitbh }
+                   { fitbv } { fitbv }
+                   { fith }  { fith }
+                   { fitv }  { fitv }
+                   { fitr }  { fitr }
+                 }
+                 { xyz ~ zoom \fp_eval:n { #2 * 10 } }
+               \scan_stop:
+          }
+      }
+    \cs_set_protected:Npn \@@_backend_destination:nnnn #1#2#3#4
+      {
+       \tex_pdfdest:D
+        name {#1}
+        fitr ~
+        width  \dim_eval:n {#2} ~
+        height \dim_eval:n {#3} ~
+        depth  \dim_eval:n {#4} \scan_stop:
+       \exp_args:Ne \pdf_object_if_exist:nT { \l_pdf_current_structure_destination_tl }
+         {
+           \tex_pdfdest:D
+             struct~
+             \int_use:c
+               { c_@@_backend_object_ \exp_args:Ne \tl_to_str:n {\l_pdf_current_structure_destination_tl} _int }~
+             name {#1}
+             fitr ~
+             width  \dim_eval:n {#2} ~
+             height \dim_eval:n {#3} ~
+             depth  \dim_eval:n {#4} \scan_stop:
+         }
+     }
+    \cs_set_protected:Npn \@@_backend_link_begin_structure_goto:nnw #1#2
+      {
+        \@@_backend_link_begin:nnnw {#1} { goto~struct~name~{#2}~name } {#2}
+      }
+  }
+%</pdftex>
+%    \end{macrocode}
+% luatex is quite similar to pdftex. Mostly the test for the version is different
+%    \begin{macrocode}
+%<*luatex>
+ \int_compare:nNnT {\directlua{tex.print(status.list()["development_id"])} } > {7468}
+  {
+    \cs_set_protected:Npn \@@_backend_structure_destination:nn #1#2
+      {
+        \tex_pdfextension:D dest
+           name {#1}
+           \str_case:nnF {#2}
+             {
+               { xyz }   { xyz }
+               { fit }   { fit }
+               { fitb }  { fitb }
+               { fitbh } { fitbh }
+               { fitbv } { fitbv }
+               { fith }  { fith }
+               { fitv }  { fitv }
+               { fitr }  { fitr }
+             }
+             { xyz ~ zoom \fp_eval:n { #2 * 10 } }
+           \scan_stop:
+        \exp_args:Ne \pdf_object_if_exist:nT { \l_pdf_current_structure_destination_tl }
+          {
+            \tex_pdfextension:D dest
+               struct~
+               \int_use:c
+                 { c_@@_backend_object_ \exp_args:Ne \tl_to_str:n {\l_pdf_current_structure_destination_tl} _int }~
+               name {#1}
+               \str_case:nnF {#2}
+                 {
+                   { xyz }   { xyz }
+                   { fit }   { fit }
+                   { fitb }  { fitb }
+                   { fitbh } { fitbh }
+                   { fitbv } { fitbv }
+                   { fith }  { fith }
+                   { fitv }  { fitv }
+                   { fitr }  { fitr }
+                 }
+                 { xyz ~ zoom \fp_eval:n { #2 * 10 } }
+               \scan_stop:
+          }
+      }
+    \cs_set_protected:Npn \@@_backend_destination:nnnn #1#2#3#4
+      {
+       \tex_pdfextension:D dest
+        name {#1}
+        fitr ~
+        width  \dim_eval:n {#2} ~
+        height \dim_eval:n {#3} ~
+        depth  \dim_eval:n {#4} \scan_stop:
+       \exp_args:Ne \pdf_object_if_exist:nT { \l_pdf_current_structure_destination_tl }
+         {
+           \tex_pdfextension:D dest
+             struct~
+             \int_use:c
+               { c_@@_backend_object_ \exp_args:Ne \tl_to_str:n {\l_pdf_current_structure_destination_tl} _int }~
+             name {#1}
+             fitr ~
+             width  \dim_eval:n {#2} ~
+             height \dim_eval:n {#3} ~
+             depth  \dim_eval:n {#4} \scan_stop:
+         }
+     }
+    \cs_set_protected:Npn \@@_backend_link_begin_structure_goto:nnw #1#2
+      {
+        \@@_backend_link_begin:nnnw {#1} { goto~struct~name~{#2}~name } {#2}
+      }
+  }
+%</luatex>
+%    \end{macrocode}
 % \subsection{lua code for lualatex}
 %    \begin{macrocode}
 %<*lua>
diff --git a/testfiles/structure-destination.luatex.tpf b/testfiles/structure-destination.luatex.tpf
new file mode 100644
index 0000000..fb843f4
--- /dev/null
+++ b/testfiles/structure-destination.luatex.tpf
@@ -0,0 +1,244 @@
+%PDF-2.0
+%ÌÕÁÔÅØÐÄÆ
+24 0 obj
+<< /Type/OBJR/Obj 23 0 R >>
+endobj
+26 0 obj
+<< /Length 545 >>        
+stream
+/opacity1 gs
+/Artifact BMC
+EMC
+/P<</MCID 0>> BDC
+BT
+/F15 9.96264 Tf
+1 0 0 1 148.712 707.125 Tm [<00620051004B003200670069003200740069>]TJ
+ET
+EMC
+/H1<</MCID 1>> BDC
+BT
+/F15 9.96264 Tf
+1 0 0 1 148.712 695.17 Tm [<00620032002B006900420051004D>]TJ
+ET
+EMC
+/P<</MCID 2>> BDC
+BT
+/F15 9.96264 Tf
+1 0 0 1 148.712 683.215 Tm [<001C0023>-28<002B>]TJ
+ET
+EMC
+/Link<</MCID 3>> BDC
+BT
+/F15 9.96264 Tf
+1 0 0 1 163.935 683.215 Tm [<0052>]TJ
+ET
+EMC
+/Artifact BMC
+EMC
+/Artifact BMC
+BT
+/F15 9.96264 Tf
+1 0 0 1 303.133 139.255 Tm [<0052>]TJ
+ET
+EMC
+/Artifact BMC
+EMC
+endstream
+endobj
+17 0 obj
+<< /Type /Page /Contents 26 0 R /Resources 25 0 R /MediaBox [ 0 0 595.276 841.89 ] /StructParents 0/Tabs /S /Parent 31 0 R /Annots 32 0 R >>
+endobj
+32 0 obj
+[ 23 0 R ]
+endobj
+23 0 obj
+<< /Type /Annot /Subtype /Link /Contents (ref) /Border [0 0 1] /H /I /C [0.701176 0.4 0.414118] /StructParent 1  /Rect [ 162.939 682.109 169.913 691.125 ]/A  << /S /GoTo /D (section.1) >> >>
+endobj
+27 0 obj
+<< /D [ 17 0 R /XYZ 132.768 754.95 null ] >>
+endobj
+28 0 obj
+<< /D [ 17 0 R /XYZ 133.768 717.088 null ] >>
+endobj
+30 0 obj
+<< /D [ 17 0 R /XYZ 133.768 707.016 null ] >>
+endobj
+25 0 obj
+<< /ExtGState 1 0 R /Font << /F15 29 0 R >> >>
+endobj
+1 0 obj
+<< /opacity1 <</ca 1/CA 1>>  >>
+endobj
+33 0 obj
+<< /Marked true  >>
+endobj
+6 0 obj
+<< /Nums [0 [ 19 0 R 20 0 R 21 0 R 22 0 R] 
+1 22 0 R
+] >>
+endobj
+7 0 obj
+<<  >>
+endobj
+9 0 obj
+<< /Type /Namespace /NS (http://iso.org/pdf/ssn)  >>
+endobj
+11 0 obj
+<< /Type /Namespace /NS (http://iso.org/pdf2/ssn)  >>
+endobj
+13 0 obj
+<< /Type /Namespace /NS (http://www.w3.org/1998/Math/MathML)  >>
+endobj
+15 0 obj
+<< /Type /Namespace /NS (data:,5FD41CBF-AD98-FFB3-A320-958A09C52F9)  >>
+endobj
+8 0 obj
+[ 9 0 R 11 0 R 13 0 R 15 0 R  ]
+endobj
+18 0 obj
+<<  /Type /StructElem /S /Document /P 5 0 R /K [19 0 R 20 0 R 21 0 R] /NS 11 0 R  >>
+endobj
+19 0 obj
+<<  /Type /StructElem /S /P /P 18 0 R /K <</Type /MCR /Pg 17 0 R /MCID 0>>  /NS 11 0 R  >>
+endobj
+20 0 obj
+<<  /Type /StructElem /S /H1 /P 18 0 R /K <</Type /MCR /Pg 17 0 R /MCID 1>>  /NS 11 0 R  >>
+endobj
+21 0 obj
+<<  /Type /StructElem /S /P /P 18 0 R /K [<</Type /MCR /Pg 17 0 R /MCID 2>>  22 0 R ] /NS 11 0 R  >>
+endobj
+22 0 obj
+<<  /Type /StructElem /S /Link /P 21 0 R /K [<</Type /MCR /Pg 17 0 R /MCID 3>>  24 0 R] /NS 11 0 R  >>
+endobj
+5 0 obj
+<<  /Type /StructTreeRoot /K 18 0 R /ParentTree 6 0 R /RoleMap 7 0 R /Namespaces 8 0 R >>
+endobj
+34 0 obj
+[ 28 [ 500 ] 35 [ 556 ] 43 [ 444 ] 50 [ 444 ] 66 [ 278 ] 75 [ 833 ] 77 [ 556 ] 81 [ 500 500 ] 98 [ 394 ] 103 [ 333 ] 105 [ 389 ] 116 [ 528 ] ]
+endobj
+36 0 obj
+<< /Subtype /CIDFontType0C /Length 2013 >>       
+[BINARY STREAM]
+endobj
+35 0 obj
+<< /Type /FontDescriptor /FontName /JHTUHO+LMRoman10-Regular /Flags 4 /FontBBox [ -430 -290 1417 1127 ] /Ascent 1127 /CapHeight 683 /Descent -290 /ItalicAngle 0 /StemV 93 /XHeight 431 /FontFile3 36 0 R >>
+endobj
+37 0 obj
+<< /Length 861 >>        
+stream
+%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-JHTUHO-LMRoman10-Regular-0)
+%%Title: (TeX-JHTUHO-LMRoman10-Regular-0 TeX JHTUHO-LMRoman10-Regular 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (JHTUHO-LMRoman10-Regular)
+/Supplement 0
+>> def
+/CMapName /TeX-Identity-JHTUHO-LMRoman10-Regular def
+/CMapType 2 def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+0 beginbfrange
+endbfrange
+13 beginbfchar
+<001C> <0061>
+<0023> <0062>
+<002B> <0063>
+<0032> <0065>
+<0042> <0069>
+<004B> <006D>
+<004D> <006E>
+<0051> <006F>
+<0052> <0031>
+<0062> <0073>
+<0067> <0020>
+<0069> <0074>
+<0074> <0078>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+endstream
+endobj
+29 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /JHTUHO+LMRoman10-Regular /DescendantFonts [ 38 0 R ] /ToUnicode 37 0 R >>
+endobj
+38 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /JHTUHO+LMRoman10-Regular /FontDescriptor 35 0 R /W 34 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+endobj
+31 0 obj
+<< /Type /Pages  /Count 1 /Kids [ 17 0 R ] >>
+endobj
+39 0 obj
+<< /Names [ (Doc-Start) 28 0 R (page.1) 27 0 R (section.1) 30 0 R ] /Limits [ (Doc-Start) (section.1) ] >>
+endobj
+40 0 obj
+<< /Dests 39 0 R >>
+endobj
+41 0 obj
+<< /Type /Catalog /Pages 31 0 R /Names 40 0 R /MarkInfo 33 0 R/Lang (en-US)/PageMode /UseOutlines/OpenAction [17 0 R /Fit]/PageLabels <</Nums[0<</S/D>>]>>/StructTreeRoot 5 0 R >>
+endobj
+42 0 obj
+<< /Creator <FEFF004C006100540065005800200077006900740068002000680079007000650072007200650066>/Producer (LuaTeX)/CreationDate (D:20010101205959-00'00')/ModDate (D:20010101205959-00'00') /Trapped /False >>
+endobj
+xref
+0 43
+0000000002 65535 f 
+0000001308 00000 n 
+0000000003 00000 f 
+0000000004 00000 f 
+0000000010 00000 f 
+0000002392 00000 n 
+0000001391 00000 n 
+0000001464 00000 n 
+0000001793 00000 n 
+0000001486 00000 n 
+0000000012 00000 f 
+0000001554 00000 n 
+0000000014 00000 f 
+0000001624 00000 n 
+0000000016 00000 f 
+0000001705 00000 n 
+0000000000 00000 f 
+0000000669 00000 n 
+0000001840 00000 n 
+0000001941 00000 n 
+0000002048 00000 n 
+0000002156 00000 n 
+0000002273 00000 n 
+0000000853 00000 n 
+0000000020 00000 n 
+0000001245 00000 n 
+0000000064 00000 n 
+0000001060 00000 n 
+0000001121 00000 n 
+0000005895 00000 n 
+0000001183 00000 n 
+0000006249 00000 n 
+0000000826 00000 n 
+0000001355 00000 n 
+0000002497 00000 n 
+0000004753 00000 n 
+0000002656 00000 n 
+0000004974 00000 n 
+0000006049 00000 n 
+0000006311 00000 n 
+0000006434 00000 n 
+0000006470 00000 n 
+0000006665 00000 n 
+trailer
+<< /Size 43 /Root 41 0 R /Info 42 0 R /ID [ <2350CAD05F8A7AF0AA4058486855344F> <2350CAD05F8A7AF0AA4058486855344F> ] >>
+startxref
+6886
+%%EOF
diff --git a/testfiles/structure-destination.pvt b/testfiles/structure-destination.pvt
new file mode 100644
index 0000000..14fe30d
--- /dev/null
+++ b/testfiles/structure-destination.pvt
@@ -0,0 +1,26 @@
+\PassOptionsToPackage{enable-debug,check-declarations}{expl3}
+\DocumentMetadata
+ {
+   pdfversion=2.0, %not so good with pdftex ...
+   uncompress,
+   testphase=tagpdf
+ }
+\RequirePackage{pdfmanagement-regressiontest}
+\documentclass{article}
+
+\usepackage{hyperref}
+\ExplSyntaxOn
+\tl_set:Nn \l_pdf_current_structure_destination_tl { __tag/struct/\g__tag_struct_stack_current_tl }
+\pdf_activate_structure_destination:
+\ExplSyntaxOff
+\begin{document}
+some text
+
+\tagpdfparaOff
+\tagstructbegin{tag=H1}\tagmcbegin{tag=H1}\refstepcounter{section}\label{h1} section\tagmcend\tagstructend
+
+\tagpdfparaOn
+
+abc\ref{h1}
+
+\end{document} 
\ No newline at end of file
diff --git a/testfiles/structure-destination.tpf b/testfiles/structure-destination.tpf
new file mode 100644
index 0000000..01b242b
--- /dev/null
+++ b/testfiles/structure-destination.tpf
@@ -0,0 +1,532 @@
+%PDF-2.0
+%ÐÔÅØ
+20 0 obj
+<< /MCID 0  >>
+endobj
+22 0 obj
+<< /MCID 1  >>
+endobj
+24 0 obj
+<< /MCID 2  >>
+endobj
+26 0 obj
+<< /MCID 3  >>
+endobj
+28 0 obj
+<< /Type/OBJR/Obj 27 0 R >>
+endobj
+29 0 obj
+<< /MCID 4  >>
+endobj
+31 0 obj
+<<
+/Length 454       
+>>
+stream
+/opacity1 gs
+/Artifact BMC
+EMC
+/P /l3pdf1 BDC
+BT
+/F19 9.9626 Tf 148.712 707.125 Td [(some)]TJ/F28 1 Tf( )Tj/F19 9.9626 Tf 24.962 0 Td [(text)]TJ
+ET
+EMC
+/H1 /l3pdf2 BDC
+BT
+/F19 9.9626 Tf 148.712 695.17 Td [(section)]TJ
+ET
+EMC
+/P /l3pdf3 BDC
+BT
+/F19 9.9626 Tf 148.712 683.215 Td [(ab)-28(c)]TJ
+ET
+EMC
+/Link /l3pdf4 BDC
+BT
+/F19 9.9626 Tf 163.933 683.215 Td [(1)]TJ
+ET
+EMC
+/P /l3pdf5 BDC
+EMC
+/Artifact BMC
+BT
+/F19 9.9626 Tf 303.133 139.255 Td [(1)]TJ
+ET
+EMC
+endstream
+endobj
+17 0 obj
+<<
+/Type /Page
+/Contents 31 0 R
+/Resources 30 0 R
+/MediaBox [0 0 595.276 841.89]
+/Tabs /S /StructParents 0 
+/Parent 37 0 R
+/Annots [ 27 0 R ]
+>>
+endobj
+27 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Contents (ref) /Border [0 0 1] /H /I /C [0.701176 0.4 0.414118] /StructParent 1 
+/Rect [162.937 682.219 169.911 691.13]
+/A << /S /GoTo /D (section.1) >>
+>>
+endobj
+32 0 obj
+<<
+/D [17 0 R /XYZ 132.768 754.95 null]
+>>
+endobj
+33 0 obj
+<<
+/D [17 0 R /XYZ 133.768 717.088 null]
+>>
+endobj
+36 0 obj
+<<
+/D [17 0 R /XYZ 133.768 707.125 null]
+>>
+endobj
+30 0 obj
+<<
+/Properties <</l3pdf1 20 0 R /l3pdf2 22 0 R /l3pdf3 24 0 R /l3pdf4 26 0 R /l3pdf5 29 0 R >>/ExtGState 1 0 R 
+/Font << /F19 34 0 R /F28 35 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1 0 obj
+<< /opacity1 <</ca 1/CA 1>>  >>
+endobj
+38 0 obj
+<< /Marked true  >>
+endobj
+6 0 obj
+<< /Nums [0 [ 19 0 R 21 0 R 23 0 R 25 0 R 23 0 R ]
+1 25 0 R
+] >>
+endobj
+7 0 obj
+<<  >>
+endobj
+9 0 obj
+<< /Type /Namespace /NS (http://iso.org/pdf/ssn)  >>
+endobj
+11 0 obj
+<< /Type /Namespace /NS (http://iso.org/pdf2/ssn)  >>
+endobj
+13 0 obj
+<< /Type /Namespace /NS (http://www.w3.org/1998/Math/MathML)  >>
+endobj
+15 0 obj
+<< /Type /Namespace /NS (data:,317AE812-890F-5C19-B513-12E89E157D33)  >>
+endobj
+8 0 obj
+[ 9 0 R 11 0 R 13 0 R 15 0 R  ]
+endobj
+18 0 obj
+<<  /Type /StructElem /S /Document /P 5 0 R /K [19 0 R 21 0 R 23 0 R] /NS 11 0 R  >>
+endobj
+19 0 obj
+<<  /Type /StructElem /S /P /P 18 0 R /K <</Type /MCR /Pg 17 0 R/MCID 0>> /NS 11 0 R  >>
+endobj
+21 0 obj
+<<  /Type /StructElem /S /H1 /P 18 0 R /K <</Type /MCR /Pg 17 0 R/MCID 1>> /NS 11 0 R  >>
+endobj
+23 0 obj
+<<  /Type /StructElem /S /P /P 18 0 R /K [<</Type /MCR /Pg 17 0 R/MCID 2>> 25 0 R <</Type /MCR /Pg 17 0 R/MCID 1>>] /NS 11 0 R  >>
+endobj
+25 0 obj
+<<  /Type /StructElem /S /Link /P 23 0 R /K [<</Type /MCR /Pg 17 0 R/MCID 0>> 28 0 R] /NS 11 0 R  >>
+endobj
+5 0 obj
+<<  /Type /StructTreeRoot /K 18 0 R /ParentTree 6 0 R /RoleMap 7 0 R /Namespaces 8 0 R >>
+endobj
+39 0 obj
+[1]
+endobj
+40 0 obj
+[500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8]
+endobj
+41 0 obj
+<<
+/Length1 1527
+/Length2 10260
+/Length3 0
+/Length 11787     
+>>
+[BINARY STREAM]
+endobj
+42 0 obj
+<<
+/Type /FontDescriptor
+/FontName /DPQNGR+CMR10
+/Flags 4
+/FontBBox [-40 -250 1009 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/CharSet (/a/b/c/e/i/m/n/o/one/s/t/x)
+/FontFile 41 0 R
+>>
+endobj
+43 0 obj
+<<
+/Length1 839
+/Length2 980
+/Length3 0
+/Length 1819      
+>>
+[BINARY STREAM]
+endobj
+44 0 obj
+<<
+/Type /FontDescriptor
+/FontName /FRJGEQ+DummySpace
+/Flags 4
+/FontBBox [0 0 0 0]
+/Ascent 0
+/CapHeight 0
+/Descent 0
+/ItalicAngle 0
+/StemV 0
+/XHeight 400
+/CharSet (/space)
+/FontFile 43 0 R
+>>
+endobj
+45 0 obj
+<<
+/Length 1724      
+>>
+stream
+%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-cmr10-builtin-0)
+%%Title: (TeX-cmr10-builtin-0 TeX cmr10-builtin 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (cmr10-builtin)
+/Supplement 0
+>> def
+/CMapName /TeX-cmr10-builtin-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <FF>
+endcodespacerange
+7 beginbfrange
+<07> <08> <03A5>
+<23> <26> <0023>
+<28> <3B> <0028>
+<3F> <5B> <003F>
+<61> <7A> <0061>
+<7B> <7C> <2013>
+<A8> <A9> <03A5>
+endbfrange
+78 beginbfchar
+<00> <0393>
+<01> <2206>
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<09> <03A8>
+<0A> <2126>
+<0B> <00660066>
+<0C> <00660069>
+<0D> <0066006C>
+<0E> <006600660069>
+<0F> <00660066006C>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<21> <0021>
+<22> <201D>
+<27> <2019>
+<3C> <00A1>
+<3D> <003D>
+<3E> <00BF>
+<5C> <201C>
+<5D> <005D>
+<5E> <02C6>
+<5F> <02D9>
+<60> <2018>
+<7D> <02DD>
+<7E> <02DC>
+<7F> <00A8>
+<A0> <0020>
+<A1> <0393>
+<A2> <2206>
+<A3> <0398>
+<A4> <039B>
+<A5> <039E>
+<A6> <03A0>
+<A7> <03A3>
+<AA> <03A8>
+<AB> <00AD>
+<AC> <00A0>
+<AD> <2126>
+<AE> <00660066>
+<AF> <00660069>
+<B0> <0066006C>
+<B1> <006600660069>
+<B2> <00660066006C>
+<B3> <0131>
+<B4> <0237>
+<B5> <0060>
+<B6> <00B4>
+<B7> <02C7>
+<B8> <02D8>
+<B9> <00AF>
+<BA> <02DA>
+<BB> <00B8>
+<BC> <00DF>
+<BD> <00E6>
+<BE> <0153>
+<BF> <00F8>
+<C0> <00C6>
+<C1> <0152>
+<C2> <00D8>
+<C4> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+endstream
+endobj
+34 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /DPQNGR+CMR10
+/FontDescriptor 42 0 R
+/FirstChar 49
+/LastChar 120
+/Widths 40 0 R
+/ToUnicode 45 0 R
+>>
+endobj
+46 0 obj
+<<
+/Length 1334      
+>>
+stream
+%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-dummy-space-builtin-0)
+%%Title: (TeX-dummy-space-builtin-0 TeX dummy-space-builtin 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (dummy-space-builtin)
+/Supplement 0
+>> def
+/CMapName /TeX-dummy-space-builtin-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <FF>
+endcodespacerange
+7 beginbfrange
+<20> <26> <0020>
+<28> <5F> <0028>
+<61> <7E> <0061>
+<A1> <A3> <00A1>
+<AC> <AD> <2039>
+<B2> <B3> <2020>
+<C6> <C7> <02D8>
+endbfrange
+47 beginbfchar
+<27> <2019>
+<60> <2018>
+<A4> <2044>
+<A5> <00A5>
+<A6> <0192>
+<A7> <00A7>
+<A8> <00A4>
+<A9> <0027>
+<AA> <201C>
+<AB> <00AB>
+<AE> <00660069>
+<AF> <0066006C>
+<B1> <2013>
+<B4> <00B7>
+<B6> <00B6>
+<B7> <2022>
+<B8> <201A>
+<B9> <201E>
+<BA> <201D>
+<BB> <00BB>
+<BC> <2026>
+<BD> <2030>
+<BF> <00BF>
+<C1> <0060>
+<C2> <00B4>
+<C3> <02C6>
+<C4> <02DC>
+<C5> <00AF>
+<C8> <00A8>
+<CA> <02DA>
+<CB> <00B8>
+<CD> <02DD>
+<CE> <02DB>
+<CF> <02C7>
+<D0> <2014>
+<E1> <00C6>
+<E3> <00AA>
+<E8> <0141>
+<E9> <00D8>
+<EA> <0152>
+<EB> <00BA>
+<F1> <00E6>
+<F5> <0131>
+<F8> <0142>
+<F9> <00F8>
+<FA> <0153>
+<FB> <00DF>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+endstream
+endobj
+35 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /FRJGEQ+DummySpace
+/FontDescriptor 44 0 R
+/FirstChar 32
+/LastChar 32
+/Widths 39 0 R
+/ToUnicode 46 0 R
+>>
+endobj
+37 0 obj
+<<
+/Type /Pages
+/Count 1
+/Kids [17 0 R]
+>>
+endobj
+47 0 obj
+<<
+/Names [(Doc-Start) 33 0 R (page.1) 32 0 R (section.1) 36 0 R]
+/Limits [(Doc-Start) (section.1)]
+>>
+endobj
+48 0 obj
+<<
+/Dests 47 0 R
+>>
+endobj
+49 0 obj
+<<
+/Type /Catalog
+/Pages 37 0 R
+/Names 48 0 R
+/MarkInfo 38 0 R/Lang (en-US)/PageMode /UseOutlines/OpenAction [17 0 R /Fit]/PageLabels <</Nums[0<</S/D>>]>>/StructTreeRoot 5 0 R
+>>
+endobj
+50 0 obj
+<<
+/Creator <FEFF004C006100540065005800200077006900740068002000680079007000650072007200650066>/Producer (pdfTeX)/CreationDate (D:20010101205959-00'00')/ModDate (D:20010101205959-00'00')
+/Trapped /False
+>>
+endobj
+xref
+0 51
+0000000002 65535 f 
+0000001462 00000 n 
+0000000003 00000 f 
+0000000004 00000 f 
+0000000010 00000 f 
+0000002578 00000 n 
+0000001545 00000 n 
+0000001625 00000 n 
+0000001955 00000 n 
+0000001647 00000 n 
+0000000012 00000 f 
+0000001715 00000 n 
+0000000014 00000 f 
+0000001785 00000 n 
+0000000016 00000 f 
+0000001866 00000 n 
+0000000000 00000 f 
+0000000727 00000 n 
+0000002002 00000 n 
+0000002103 00000 n 
+0000000015 00000 n 
+0000002208 00000 n 
+0000000046 00000 n 
+0000002314 00000 n 
+0000000077 00000 n 
+0000002461 00000 n 
+0000000108 00000 n 
+0000000888 00000 n 
+0000000139 00000 n 
+0000000183 00000 n 
+0000001271 00000 n 
+0000000214 00000 n 
+0000001092 00000 n 
+0000001151 00000 n 
+0000019143 00000 n 
+0000020694 00000 n 
+0000001211 00000 n 
+0000020856 00000 n 
+0000001509 00000 n 
+0000002683 00000 n 
+0000002703 00000 n 
+0000003110 00000 n 
+0000014996 00000 n 
+0000015237 00000 n 
+0000017152 00000 n 
+0000017360 00000 n 
+0000019301 00000 n 
+0000020915 00000 n 
+0000021034 00000 n 
+0000021070 00000 n 
+0000021265 00000 n 
+trailer
+<< /Size 51
+/Root 49 0 R
+/Info 50 0 R
+/ID [<9BD18DF3359C1216B83ADB4AA401CC9A> <9BD18DF3359C1216B83ADB4AA401CC9A>] >>
+startxref
+21486
+%%EOF
diff --git a/testfiles/structure-destination.xetex.tpf b/testfiles/structure-destination.xetex.tpf
new file mode 100644
index 0000000..da43581
--- /dev/null
+++ b/testfiles/structure-destination.xetex.tpf
@@ -0,0 +1,221 @@
+%PDF-2.0
+%äðíø
+29 0 obj
+<</Length 497>>
+stream
+ q 1 0 0 1 72 769.89 cm 0 G 0 g 0 g 0 G /opacity1 gs /Artifact BMC EMC /P/l3pdf1 BDC BT /F1 9.9626 Tf 76.712 -62.765 Td[<00620051004b0032>-333<0069003200740069>]TJ ET EMC /H1/l3pdf2 BDC BT /F1 9.9626 Tf 76.712 -74.72 Td[<00620032002b006900420051004d>]TJ ET EMC /P/l3pdf3 BDC BT /F1 9.9626 Tf 76.712 -86.675 Td[<001c0023>-28<002b>]TJ ET EMC /Link/l3pdf4 BDC BT /F1 9.9626 Tf 91.935 -86.675 Td[<0052>]TJ ET EMC /P/l3pdf5 BDC EMC /Artifact BMC BT /F1 9.9626 Tf 231.133 -630.635 Td[<0052>]TJ ET EMC Q
+endstream
+endobj
+30 0 obj
+<</ExtGState 4 0 R/Properties<</l3pdf1 6 0 R/l3pdf2 9 0 R/l3pdf3 11 0 R/l3pdf4 12 0 R/l3pdf5
+15 0 R>>/Font<</F1 7 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>
+endobj
+14 0 obj
+<</Type/Annot/Contents(ref)/Border[0 0 1]/H/I/C[.701176 .4 .414118]/StructParent
+1/Subtype/Link/A<</S/GoTo/D(section.1)/SD 13 0 R>>/Rect[162.939 679.329 169.913 695.439]>>
+endobj
+13 0 obj
+[10 0 R/XYZ 133.77 707.02 null]
+endobj
+4 0 obj
+<</opacity1<</ca 1/CA 1>>>>
+endobj
+22 0 obj
+<</Type/StructTreeRoot/K 5 0 R/ParentTree 25 0 R/RoleMap 26 0 R/Namespaces 27 0 R>>
+endobj
+25 0 obj
+<</Nums[0[16 0 R 17 0 R 17 0 R]1 16 0 R]>>
+endobj
+26 0 obj
+<<>>
+endobj
+27 0 obj
+[18 0 R 19 0 R 20 0 R 21 0 R]
+endobj
+18 0 obj
+<</Type/Namespace/NS(http://iso.org/pdf/ssn)>>
+endobj
+19 0 obj
+<</Type/Namespace/NS(http://iso.org/pdf2/ssn)>>
+endobj
+20 0 obj
+<</Type/Namespace/NS(http://www.w3.org/1998/Math/MathML)>>
+endobj
+21 0 obj
+<</Type/Namespace/NS(data:,C365B0E9-EB53-3FEA-9927-B229BDB823FA)>>
+endobj
+5 0 obj
+<</Type/StructElem/S/Document/P 22 0 R/K[23 0 R 10 0 R 17 0 R]/NS 19 0 R>>
+endobj
+23 0 obj
+<</Type/StructElem/S/P/P 5 0 R/K<</Type/MCR/Pg 3 0 R/MCID 0>>/NS 19 0 R>>
+endobj
+6 0 obj
+<</MCID 0>>
+endobj
+10 0 obj
+<</Type/StructElem/S/H1/P 5 0 R/K<</Type/MCR/Pg 3 0 R/MCID 1>>/NS 19 0 R>>
+endobj
+9 0 obj
+<</MCID 1>>
+endobj
+17 0 obj
+<</Type/StructElem/S/P/P 5 0 R/K[<</Type/MCR/Pg 3 0 R/MCID 2>>16 0 R<</Type/MCR/Pg
+3 0 R/MCID 1>>]/NS 19 0 R>>
+endobj
+11 0 obj
+<</MCID 2>>
+endobj
+16 0 obj
+<</Type/StructElem/S/Link/P 17 0 R/K[<</Type/MCR/Pg 3 0 R/MCID 0>>24 0 R]/NS 19 0 R>>
+endobj
+12 0 obj
+<</MCID 3>>
+endobj
+24 0 obj
+<</Type/OBJR/Obj 14 0 R>>
+endobj
+15 0 obj
+<</MCID 4>>
+endobj
+28 0 obj
+<</Marked true>>
+endobj
+34 0 obj
+<</Names[(Doc-Start)31 0 R(page.1)32 0 R(section.1)33 0 R]>>
+endobj
+31 0 obj
+[3 0 R/XYZ 133.77 717.09 null]
+endobj
+32 0 obj
+[3 0 R/XYZ 132.77 754.95 null]
+endobj
+33 0 obj
+[3 0 R/XYZ 133.77 707.02 null]
+endobj
+35 0 obj
+<</Dests 34 0 R>>
+endobj
+37 0 obj
+[14 0 R]
+endobj
+3 0 obj
+<</Tabs/S/StructParents 0/Resources 30 0 R/Type/Page/Parent 36 0 R/Contents[29 0 R]/Annots
+37 0 R>>
+endobj
+36 0 obj
+<</Type/Pages/Count 1/Kids[3 0 R]/MediaBox[0 0 595.28 841.89]>>
+endobj
+2 0 obj
+<</Creator<feff004c006100540065005800200077006900740068002000680079007000650072007200650066>/Producer(xetex)/CreationDate(D:20010101194934+01'00')/ModDate(D:20010101205959-00'00')>>
+endobj
+1 0 obj
+<</MarkInfo 28 0 R/Lang(en-US)/PageMode/UseOutlines/OpenAction[3 0 R/Fit]/PageLabels<</Nums[0<</S/D>>]>>/StructTreeRoot
+22 0 R/Names 35 0 R/Pages 36 0 R/Type/Catalog>>
+endobj
+38 0 obj
+<</Length 511>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /EXQIVM+LMRoman10-Regular-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+  /Registry (Adobe)
+  /Ordering (UCS)
+  /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+12 beginbfchar
+<001C> <0061>
+<0023> <0062>
+<002B> <0063>
+<0032> <0065>
+<0042> <0069>
+<004B> <006D>
+<004D> <006E>
+<0051> <006F>
+<0052> <0031>
+<0062> <0073>
+<0069> <0074>
+<0074> <0078>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+endstream
+endobj
+40 0 obj
+<</Subtype/CIDFontType0C/Length 1985>>
+[BINARY STREAM]
+endobj
+41 0 obj
+[28[500]35[556]43[444]50[444]66[278]75[833]77[556]81[500 500]98[394]105[389]116[528]]
+endobj
+8 0 obj
+<</Type/Font/Subtype/CIDFontType0/BaseFont/EXQIVM+LMRoman10-Regular/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement
+0>>/FontDescriptor 39 0 R/DW 280/W 41 0 R>>
+endobj
+39 0 obj
+<</Type/FontDescriptor/Ascent 806/Descent -194/StemV 69/CapHeight 806/AvgWidth 549/FontBBox[-430
+-290 1417 1127]/ItalicAngle 0/Flags 6/Style<</Panose<000000000500000000000000>>>/FontName/EXQIVM+LMRoman10-Regular/FontFile3
+40 0 R>>
+endobj
+7 0 obj
+<</Type/Font/Subtype/Type0/BaseFont/EXQIVM+LMRoman10-Regular-Identity-H/Encoding/Identity-H/DescendantFonts[8 0 R]/ToUnicode
+38 0 R>>
+endobj
+xref
+0 42
+0000000000 65535 f 
+0000002912 00000 n 
+0000002715 00000 n 
+0000002520 00000 n 
+0000000976 00000 n 
+0000001530 00000 n 
+0000001710 00000 n 
+0000006252 00000 n 
+0000005816 00000 n 
+0000001828 00000 n 
+0000001737 00000 n 
+0000001982 00000 n 
+0000002112 00000 n 
+0000000928 00000 n 
+0000000740 00000 n 
+0000002182 00000 n 
+0000002010 00000 n 
+0000001855 00000 n 
+0000001245 00000 n 
+0000001308 00000 n 
+0000001372 00000 n 
+0000001447 00000 n 
+0000001019 00000 n 
+0000001620 00000 n 
+0000002140 00000 n 
+0000001119 00000 n 
+0000001178 00000 n 
+0000001199 00000 n 
+0000002210 00000 n 
+0000000015 00000 n 
+0000000562 00000 n 
+0000002320 00000 n 
+0000002367 00000 n 
+0000002414 00000 n 
+0000002243 00000 n 
+0000002461 00000 n 
+0000002635 00000 n 
+0000002495 00000 n 
+0000003095 00000 n 
+0000006005 00000 n 
+0000003656 00000 n 
+0000005714 00000 n 
+trailer
+<</ID[<ID-STRING><ID-STRING>]/Root
+1 0 R/Info 2 0 R/Size 42>>
+startxref
+6401
+%%EOF





More information about the latex3-commits mailing list.