summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/tagpdf
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2022-12-23 21:05:03 +0000
committerKarl Berry <karl@freefriends.org>2022-12-23 21:05:03 +0000
commit1c3a11e6ef6781244703d902f924eb0c8a60135c (patch)
tree12ad8d9c32b53f1cf63780b31ce6cb109ec00ce8 /Master/texmf-dist/doc/latex/tagpdf
parent3380912e470b2169b6c54166d32f14d631d63270 (diff)
tagpdf (23dec22)
git-svn-id: svn://tug.org/texlive/trunk@65341 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex/tagpdf')
-rw-r--r--Master/texmf-dist/doc/latex/tagpdf/README.md4
-rw-r--r--Master/texmf-dist/doc/latex/tagpdf/tagpdf-code.pdfbin1240872 -> 1523569 bytes
-rw-r--r--Master/texmf-dist/doc/latex/tagpdf/tagpdf-parent-child-2.csv81
-rw-r--r--Master/texmf-dist/doc/latex/tagpdf/tagpdf-parent-child.csv71
-rw-r--r--Master/texmf-dist/doc/latex/tagpdf/tagpdf.pdfbin492448 -> 738728 bytes
-rw-r--r--Master/texmf-dist/doc/latex/tagpdf/tagpdf.tex559
6 files changed, 557 insertions, 158 deletions
diff --git a/Master/texmf-dist/doc/latex/tagpdf/README.md b/Master/texmf-dist/doc/latex/tagpdf/README.md
index 265428377f3..dc8ac843f8a 100644
--- a/Master/texmf-dist/doc/latex/tagpdf/README.md
+++ b/Master/texmf-dist/doc/latex/tagpdf/README.md
@@ -1,6 +1,6 @@
#tagpdf — A package to create tagged pdf
-Packageversion: 0.97
-Packagedate: 2022/08/24
+Packageversion: 0.98
+Packagedate: 2022/12/22
Author: Ulrike Fischer
## License
diff --git a/Master/texmf-dist/doc/latex/tagpdf/tagpdf-code.pdf b/Master/texmf-dist/doc/latex/tagpdf/tagpdf-code.pdf
index 551a7006249..6dfd5b74a43 100644
--- a/Master/texmf-dist/doc/latex/tagpdf/tagpdf-code.pdf
+++ b/Master/texmf-dist/doc/latex/tagpdf/tagpdf-code.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/tagpdf/tagpdf-parent-child-2.csv b/Master/texmf-dist/doc/latex/tagpdf/tagpdf-parent-child-2.csv
new file mode 100644
index 00000000000..9c0a2dd9074
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/tagpdf/tagpdf-parent-child-2.csv
@@ -0,0 +1,81 @@
+%%
+%% This is file `tagpdf-parent-child-2.csv',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tagpdf-data.dtx (with options: `parent-child-2')
+%%
+%% Copyright (C) 2019-2022 Ulrike Fischer
+%%
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version. The latest
+%% version of this license is in the file:
+%%
+%% https://www.latex-project.org/lppl.txt
+%%
+%% This file is part of the "tagpdf bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%%
+%% File: tagpdf-data.dtx
+%% \ProvidesExplFile {tagpdf-parent-child-2.csv} {2022-12-22} {0.98}
+,,,StructTreeRoot,Document,DocumentFragment,Art,Part,Div,Sect,Aside,BlockQuote,NonStruct,TOC,TOCI,Index,Private,Title,Sub,Quote,Note,Reference,BibEntry,P,Hn,H,Lbl,Code,Em,Strong,Span,Link,Annot,Form,Ruby,RB,RT,RP,Warichu,WT,WP,FENote,L,LI,LBody,Table,TR,TH,TD,THead,TBody,TFoot,Caption,Figure,Formula,math,mathml,Artifact,MC
+Document,both,document level,1,0..n,0..n,∅,‡,‡,∅,0..n,0..n,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅
+DocumentFragment,2.0,document level,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,∅,∅,∅,0..n,∅,∅,∅,∅*,∅,∅,∅,∅,∅,∅,∅*,∅,∅,∅,∅*,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅,∅,∅,∅,0..n,∅
+Art,1.7,grouping,∅,0..n,0..n,∅,‡,‡,0..n,0..n,0..n,‡,∅,∅,∅,0..n,∅,∅,∅,0..n,∅,∅,∅,0..1,0..1,∅,∅,∅,∅,∅,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,∅,∅,∅,0..n,∅
+Part,both,grouping,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅,0..n,∅,∅,∅,∅,0..n,∅,∅,∅,∅*,∅*,∅*,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+Div,both,grouping,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,0..n,0..n,0..n,0..n,0..n,∅,∅,0..n,∅,0..n,∅,∅,∅,∅,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,0..n,∅,0..n,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+Sect,both,grouping,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,∅,∅,0..n,0..n,∅,∅,∅,0..n,∅,∅,∅,0..1,0..1,∅,∅,∅,∅,∅,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,∅,∅,∅,0..n,∅
+Aside,2.0,grouping,∅,0..n,0..n,0..n,‡,‡,0..n,∅,∅,‡,∅,∅,∅,0..n,0..n,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅*,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+BlockQuote,1.7,grouping?,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,∅,∅,∅,0..n,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅*,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+NonStruct,both,grouping,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,∅,0..n,∅
+TOC,1.7,grouping,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,0..n,0..n,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅
+TOCI,1.7,TOC,∅,∅,∅,∅,‡,‡,∅,∅,∅,‡,0..n,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅
+Index,1.7,grouping?,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,∅,∅,∅,0..n,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+Private,1.7,grouping,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,∅,0..n,∅
+P,both,block,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,∅,0..n,0..n,0..n,0..n,∅,∅,0..n,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅*,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+Hn,both,block,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,∅,∅,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+H,both,block,∅,0..1,0..1,0..1,‡,‡,0..1,0..1,0..1,‡,∅,∅,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..1,∅,∅,0..1,0..1,∅,∅,∅,0..1,0..1,0..1,∅,∅,0..1,∅
+Title,2.0,grouping!block,∅,0..n,0..n,0..n,‡,‡,0..n,∅,0..n,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅
+Sub,2.0,inline,∅,∅,∅,∅,‡,‡,∅,∅,∅,‡,∅,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,0..n,0..n,0..n,0..n,∅,0..n,0..n,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,∅,0..n,0..n,0..n,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,0..n,∅*,0..n,∅,∅,0..n,∅
+Quote,1.7,inline,∅,∅,∅,∅,‡,‡,∅,∅,∅,‡,∅,∅,∅,0..n,0..n,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,0..n,∅,0..n,0..n,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,∅,0..n,0..n,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+Note,1.7,inline,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,∅,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+Reference,1.7,inline,∅,∅,∅,∅,‡,‡,∅,0..n,0..n,‡,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅*,∅*,∅,0..n,0..n,0..n,∅,0..n,0..n,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+BibEntry,1.7,inline,∅,∅,∅,∅,‡,‡,∅,∅,∅,‡,∅,∅,∅,0..n,0..n,0..n,0..n,0..n,0..n,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+Lbl,both,inline,∅,∅,∅,0..n,‡,‡,0..n,0..n,0..n,‡,∅,0..n,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,0..n,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,0..n,∅,0..n,∅,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+Code,1.7,inline,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,∅,∅,∅,0..n,0..n,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,0..n,∅,0..n,0..n,0..n,0..n,0..n,∅*,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+Em,2.0,inline,∅,∅,∅,∅,∅,‡,∅,∅,∅,‡,∅,∅,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,∅,0..n,0..n,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+Strong,2.0,inline,∅,∅,∅,∅,∅,‡,∅,∅,∅,‡,∅,∅,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,∅,0..n,0..n,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+Span,both,inline,∅,∅,∅,∅,∅,‡,∅,∅,∅,‡,∅,∅,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,∅,0..n,0..n,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+Link,both,grouping!block!inline,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,∅,∅,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,0..n,∅,∅,0..n,0..n,0..n,∅,0..n,0..n,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+Annot,both,grouping!block!inline,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,∅,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,∅,0..n,0..n,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+Form,both,grouping!block!inline,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,∅,∅,∅,0..n,0..n,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,0..n,∅,0..n,0..n,0..n,∅*,∅*,∅,∅,0..n,0..n,0..n,∅,0..n,0..n,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+Ruby,both,inline,∅,∅,∅,∅,∅,‡,∅,∅,∅,‡,∅,∅,∅,0..n,0..n,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,0..n,∅,0..n,0..n,0..n,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+RB,both,inline,∅,∅,∅,∅,∅,‡,∅,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,[a],∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅
+RT,both,inline,∅,∅,∅,∅,∅,‡,∅,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,[a],∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅
+RP,both,inline,∅,∅,∅,∅,∅,‡,∅,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,[a],∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅
+Warichu,both,inline,∅,∅,∅,∅,∅,‡,∅,∅,∅,‡,∅,∅,∅,0..n,0..n,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,0..n,∅,0..n,0..n,0..n,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+WT,both,inline,∅,∅,∅,∅,∅,‡,∅,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,[b],∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅
+WP,both,inline,∅,∅,∅,∅,∅,‡,∅,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,[b],∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅
+FENote,2.0,grouping!block!inline,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,∅,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,0..n,0..n,0..n,0..n,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+L,both,block!inline,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,∅,∅,0..n,0..n,0..n,0..n,∅,0..n,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅*,∅*,∅*,∅,∅,∅,∅,∅,∅,∅,0..n,0..n,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+LI,both,in L,∅,∅,∅,∅,∅,‡,∅,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅
+LBody,both,in LI,∅,∅,∅,∅,∅,‡,∅,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅
+Table,both,block,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅*,∅*,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+TR,both,Table,∅,∅,∅,∅,∅,‡,∅,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,∅,∅,∅,0..n,∅
+TH,both,Table,∅,∅,∅,∅,∅,‡,∅,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅
+TD,both,Table,∅,∅,∅,∅,∅,‡,∅,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅
+THead,both,Table,∅,∅,∅,∅,∅,‡,∅,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..1,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅
+TBody,both,Table,∅,∅,∅,∅,∅,‡,∅,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅
+TFoot,both,Table,∅,∅,∅,∅,∅,‡,∅,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..1,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅
+Caption,both,grouping!block,∅,∅,∅,0..n,‡,‡,0..n,0..1,0..1,‡,0..1,0..1,0..n,0..n,0..1,∅,∅,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅*,0..1,∅,∅,∅,∅,∅,∅,∅,∅*,0..1,∅,0..1,0..1,∅,∅,∅,∅,∅,∅,∅,0..1,0..1,∅,∅,0..n,∅
+Figure,both,grouping!block!inline,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,∅,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,0..n,0..n,0..n,0..n,0..n,∅*,∅,∅,∅,∅,∅,∅,c,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+Formula,both,grouping!block!inline,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,∅,∅,0..n,0..n,0..n,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,0..n,∅,0..n,0..n,0..n,0..n,0..n,∅*,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,∅
+Artifact,2.0,grouping!block!inline,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,0..n,0..n,0..n,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,∅,0..n,∅
+math,2.0,?,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,∅
+mathml,2.0,?,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,0..n,0..n,∅
+MC,both,---,∅,∅,∅,∅,∅,∅,∅,0..n,0..n,‡,∅,∅,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,‡,‡,‡,0..n,‡,‡,0..n,∅,0..n,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅,0..n,0..n,∅
+%%
+%%
+%% End of file `tagpdf-parent-child-2.csv'.
diff --git a/Master/texmf-dist/doc/latex/tagpdf/tagpdf-parent-child.csv b/Master/texmf-dist/doc/latex/tagpdf/tagpdf-parent-child.csv
new file mode 100644
index 00000000000..975e0bbd360
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/tagpdf/tagpdf-parent-child.csv
@@ -0,0 +1,71 @@
+%%
+%% This is file `tagpdf-parent-child.csv',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tagpdf-data.dtx (with options: `parent-child')
+%%
+%% Copyright (C) 2019-2022 Ulrike Fischer
+%%
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version. The latest
+%% version of this license is in the file:
+%%
+%% https://www.latex-project.org/lppl.txt
+%%
+%% This file is part of the "tagpdf bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%%
+%% File: tagpdf-data.dtx
+%% \ProvidesExplFile {tagpdf-parent-child.csv} {2022-12-22} {0.98}
+,,,StructTreeRoot,Document,Art,Part,Div,Sect,BlockQuote,NonStruct,TOC,TOCI,Index,Private,Quote,Note,Reference,BibEntry,P,Hn,H,Lbl,Code,Span,Link,Annot,Form,Ruby,RB,RT,RP,Warichu,WT,WP,L,LI,LBody,Table,TR,TH,TD,THead,TBody,TFoot,Caption,Figure,Formula,MC
+Document,both,document level,1,0..n,∅,‡,‡,∅,0..n,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅
+Art,1.7,grouping,∅,0..n,∅,‡,‡,0..n,0..n,‡,∅,∅,∅,0..n,∅,0..n,∅,∅,∅,0..1,0..1,∅,∅,∅,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,∅,∅
+Part,both,grouping,∅,0..n,0..n,‡,‡,0..n,0..n,‡,∅,∅,0..n,0..n,∅,0..n,∅,0..n,∅,∅,∅,∅,0..n,∅,∅*,∅*,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,0..n,0..n,0..n,∅
+Div,both,grouping,∅,0..n,0..n,‡,‡,0..n,0..n,‡,0..n,0..n,0..n,0..n,∅,0..n,∅,0..n,∅,∅,∅,∅,0..n,∅,0..n,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,∅,0..n,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅
+Sect,both,grouping,∅,0..n,0..n,‡,‡,0..n,0..n,‡,∅,∅,0..n,0..n,∅,0..n,∅,∅,∅,0..1,0..1,∅,∅,∅,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,∅,∅
+BlockQuote,1.7,grouping?,∅,0..n,0..n,‡,‡,0..n,0..n,‡,∅,∅,∅,0..n,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,0..n,0..n,0..n,∅
+NonStruct,both,grouping,∅,0..n,0..n,‡,‡,0..n,0..n,‡,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅
+TOC,1.7,grouping,∅,0..n,0..n,‡,‡,0..n,0..n,‡,0..n,0..n,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅
+TOCI,1.7,TOC,∅,∅,∅,‡,‡,∅,∅,‡,0..n,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅
+Index,1.7,grouping?,∅,0..n,0..n,‡,‡,0..n,0..n,‡,∅,∅,∅,0..n,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅
+Private,1.7,grouping,∅,0..n,0..n,‡,‡,0..n,0..n,‡,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅
+P,both,block,∅,0..n,0..n,‡,‡,0..n,0..n,‡,∅,0..n,0..n,0..n,∅,0..n,∅,0..n,∅,∅,∅,∅,∅,∅,∅*,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅
+Hn,both,block,∅,0..n,0..n,‡,‡,0..n,0..n,‡,∅,∅,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅
+H,both,block,∅,0..1,0..1,‡,‡,0..1,0..1,‡,∅,∅,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..1,∅,∅,0..1,0..1,∅,∅,∅,0..1,0..1,0..1,∅
+Quote,1.7,inline,∅,∅,∅,‡,‡,∅,∅,‡,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,0..n,∅,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,∅,0..n,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅
+Note,1.7,inline,∅,0..n,0..n,‡,‡,0..n,0..n,‡,∅,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅
+Reference,1.7,inline,∅,∅,∅,‡,‡,∅,0..n,‡,∅,0..n,0..n,0..n,0..n,0..n,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅*,∅*,∅,0..n,0..n,0..n,∅,0..n,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅
+BibEntry,1.7,inline,∅,∅,∅,‡,‡,∅,∅,‡,∅,∅,∅,0..n,0..n,0..n,0..n,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅
+Lbl,both,inline,∅,∅,0..n,‡,‡,0..n,0..n,‡,∅,0..n,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅
+Code,1.7,inline,∅,0..n,0..n,‡,‡,0..n,0..n,‡,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,0..n,∅,0..n,0..n,0..n,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅
+Span,both,inline,∅,∅,∅,∅,‡,∅,∅,‡,∅,∅,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,∅,0..n,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅
+Link,both,grouping!block!inline,∅,0..n,0..n,‡,‡,0..n,0..n,‡,∅,∅,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,0..n,∅,∅,0..n,0..n,0..n,∅,0..n,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅
+Annot,both,grouping!block!inline,∅,0..n,0..n,‡,‡,0..n,0..n,‡,∅,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,∅,0..n,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅
+Form,both,grouping!block!inline,∅,0..n,0..n,‡,‡,0..n,0..n,‡,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,0..n,∅,0..n,∅*,∅*,∅,∅,0..n,0..n,0..n,∅,0..n,0..n,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅
+Ruby,both,inline,∅,∅,∅,∅,‡,∅,∅,‡,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,0..n,∅,0..n,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅
+RB,both,inline,∅,∅,∅,∅,‡,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,[a],∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅
+RT,both,inline,∅,∅,∅,∅,‡,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,[a],∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅
+RP,both,inline,∅,∅,∅,∅,‡,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,[a],∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅
+Warichu,both,inline,∅,∅,∅,∅,‡,∅,∅,‡,∅,∅,∅,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,0..n,∅,0..n,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅
+WT,both,inline,∅,∅,∅,∅,‡,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,[b],∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅
+WP,both,inline,∅,∅,∅,∅,‡,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,[b],∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅
+L,both,block!inline,∅,0..n,0..n,‡,‡,0..n,0..n,‡,∅,∅,0..n,0..n,∅,0..n,∅,∅,0..n,∅,∅,∅,∅,∅,∅*,∅*,∅*,∅,∅,∅,∅,∅,∅,∅,0..n,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅
+LI,both,in L,∅,∅,∅,∅,‡,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅
+LBody,both,in LI,∅,∅,∅,∅,‡,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅
+Table,both,block,∅,0..n,0..n,‡,‡,0..n,0..n,‡,∅,∅,0..n,0..n,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅*,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅
+TR,both,Table,∅,∅,∅,∅,‡,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,∅,0..n,0..n,0..n,∅,∅,∅,∅
+TH,both,Table,∅,∅,∅,∅,‡,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅
+TD,both,Table,∅,∅,∅,∅,‡,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅
+THead,both,Table,∅,∅,∅,∅,‡,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..1,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅
+TBody,both,Table,∅,∅,∅,∅,‡,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅
+TFoot,both,Table,∅,∅,∅,∅,‡,∅,∅,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..1,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅
+Caption,both,grouping!block,∅,∅,0..n,‡,‡,0..n,0..1,‡,0..1,0..1,0..n,0..n,∅,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅*,0..1,∅,∅,∅,∅,∅,∅,∅,0..1,∅,0..1,0..1,∅,∅,∅,∅,∅,∅,∅,0..1,0..1,∅
+Figure,both,grouping!block!inline,∅,0..n,0..n,‡,‡,0..n,0..n,‡,∅,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,∅,0..n,0..n,0..n,∅*,∅,∅,∅,∅,∅,∅,c,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅
+Formula,both,grouping!block!inline,∅,0..n,0..n,‡,‡,0..n,0..n,‡,∅,∅,0..n,0..n,0..n,0..n,∅,∅,0..n,0..n,0..n,0..n,∅,0..n,0..n,0..n,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅
+MC,both,---,∅,∅,∅,∅,∅,∅,0..n,‡,∅,∅,∅,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,0..n,‡,‡,‡,0..n,‡,‡,∅,0..n,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,0..n,∅
+%%
+%%
+%% End of file `tagpdf-parent-child.csv'.
diff --git a/Master/texmf-dist/doc/latex/tagpdf/tagpdf.pdf b/Master/texmf-dist/doc/latex/tagpdf/tagpdf.pdf
index f75c057dbf3..a04314fa715 100644
--- a/Master/texmf-dist/doc/latex/tagpdf/tagpdf.pdf
+++ b/Master/texmf-dist/doc/latex/tagpdf/tagpdf.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/tagpdf/tagpdf.tex b/Master/texmf-dist/doc/latex/tagpdf/tagpdf.tex
index 217314035c5..c1fe9d2d350 100644
--- a/Master/texmf-dist/doc/latex/tagpdf/tagpdf.tex
+++ b/Master/texmf-dist/doc/latex/tagpdf/tagpdf.tex
@@ -1,15 +1,15 @@
% !Mode:: "TeX:DE:UTF-8:Main"
-%\PassOptionsToPackage{check-declarations,enable-debug}{expl3}
+\PassOptionsToPackage{check-declarations,enable-debug}{expl3}
%\RequirePackage{pdfmanagement-testphase}
-\DocumentMetadata{pdfversion=2.0,lang=en-UK,testphase=phase-II}
+\DocumentMetadata{pdfversion=2.0,lang=en-UK,testphase=phase-II,testphase=toc-tagging,testphase=sec-tagging,pdfstandard=a-2b}
\makeatletter
-\def\UlrikeFischer@package@version{0.97}
-\def\UlrikeFischer@package@date{2022-08-24}
+\def\UlrikeFischer@package@version{0.98}
+\def\UlrikeFischer@package@date{2022-12-22}
\makeatother
-\documentclass[DIV=12,parskip=half-,bibliography=totoc]{scrartcl}
-
+\documentclass[DIV=12,parskip=half-,bibliography=totoc,a4paper]{article}
+\usepackage{geometry}
\usepackage[english]{babel}
\usepackage{unicode-math}
@@ -20,7 +20,7 @@
%\patchcmd{\MT@get@prot}{\noindent}{\RawNoindent}{}{\fail}
\makeatother
-\usepackage{scrlayer-scrpage}
+%\usepackage{scrlayer-scrpage}
\usepackage[autostyle]{csquotes}
\usepackage[style=numeric,hyperref=false]{biblatex}
@@ -41,7 +41,7 @@
\tikzset{operator/.style = {font=\footnotesize\ttfamily, anchor=base,draw, rounded corners,node distance=4mm and 4mm}}
-\usepackage{enumitem,xpatch}
+\usepackage{enumitem}
\usepackage{listings}
\lstset{basicstyle=\ttfamily, columns=fullflexible,language=[LaTeX]TeX,
@@ -56,15 +56,12 @@
%show-spaces
}
-\usepackage{hyperxmp}
\usepackage[pdfdisplaydoctitle=true,%hyperfootnotes=false,
]{hyperref}
\hypersetup{
pdftitle={The tagpdf package, v\csname UlrikeFischer@package@version\endcsname},
pdfauthor=Ulrike Fischer,
- pdfaconformance=a,
- pdfuapart=1,
colorlinks}
\tcbuselibrary{documentation}
@@ -79,7 +76,7 @@
\usepackage{tagpdfdocu-patches}
-\cfoot*{\pagemark}
+%\cfoot*{\pagemark}
%
@@ -89,28 +86,21 @@
\date{\csname UlrikeFischer@package@date\endcsname}
\author{Ulrike Fischer\thanks{fischer@troubleshooting-tex.de}}
-\tagpdfsetup{paratagging,paratagging-show}
-
\usepackage{shortvrb}
\MakeShortVerb|
\begin{document}
\tagstructbegin{tag=Title}
-\tagmcbegin{tag=Title}
-
-\begin{center}%\let\thanks\par
+\begin{center}%
+\let\thanks\footnote
\makeatletter
- \usekomafont{title}{\huge \@title \par}
-
- \vskip .5em
- \usekomafont{author}{\@author \par}
-
- \vskip 1em%
- \usekomafont{date}{\@date \par}%
-
+\huge \@title \par
+\vskip .5em
+\@author \par
+\vskip 1em%
+\@date \par
\end{center}%
- \tagmcend
\tagstructend
@@ -147,8 +137,12 @@ Issues, comments, suggestions should be added as issues to the github tracker:
\tagstructend
+\tagtool{sec-add-grouping=false}
+
\tableofcontents
+\tagtool{sec-add-grouping}
+
\section{Introduction}
@@ -250,7 +244,7 @@ It is also possible that validators contradict: that the one says everything is
To make the package usable examples are needed: examples that demonstrate how various structures can be tagged and which patches are needed, examples for the test suite, examples that demonstrates problems.
-\begin{tcolorbox}[before upper=\tagpdfparaOn]
+\begin{tcolorbox}
Feedback, contribuations and corrections are welcome!
\end{tcolorbox}
@@ -299,7 +293,7 @@ I added code to add \enquote{real} space glyphs to the \PDF{}, see section \ref{
\item \textbf{Breaking change!} The argument of \texttt{newattribute} option should no longer add the dictionary bracket \verb+<<..>>+, they are added by the code.
-\item \textbf{Breaking change!} The package now requires the new PDF management as provided for now by the package \texttt{pdfmanagement-testphase}. \texttt{pdfmanagement-testphase},
+\item \textbf{Breaking change!} The package now requires the new PDF management as provided for now by the package \pkg{pdfmanagement-testphase}. \pkg{pdfmanagement-testphase},
prepares the ground for better support for tagged PDF in \LaTeX{}.
It is part of a larger project to automatically generate tagged PDF \url{https://www.latex-project.org/news/2020/11/30/tagged-pdf-FS-study/}
@@ -348,7 +342,8 @@ add annotations to the structure.
\item \textbf{More engines supported} The generic mode of \pkg{tagpdf} now works
(theoretically, it is not much tested) with all engines supported
-by the pdfmanagement. So compilations with Xe\LaTeX{} or with dvips should work. But it should be noted that
+by the \PDF\ management.
+So compilations with Xe\LaTeX{} or with dvips should work. But it should be noted that
these engines and backends don't support the |interspaceword| option. With Xe\LaTeX{} it is perhaps possible
implement something with |\XeTeXinterchartoks|, but for the dvips route I don't see an option (apart from lots
of manual macros everywhere).
@@ -439,11 +434,34 @@ Small bug fixes.
\item Small bug fixes.
\end{itemize}
+\subsection{Changes in version 0.98}
+
+\begin{itemize}
+\item The declarations of tag namespaces have been externalized and are now
+read from files when \pkg{tagpdf} is loaded.
+
+\item The \PDF{} format (and some of the standards) declare various parent-child rules for
+structure tags. A first step to implement this rules and check if they are fullfilled have
+been done. More information can be found in section~\ref{sec:parent-child}.
+
+\item As a side effect of the new rule checking, the requirements for new tags
+ have been tightened: Adding a new tag with add-new-tag now requires that the target role is
+ defined. Unknown roles error.
+
+\item |\tagmcbegin| no longer requires that a tag is set, instead if will pick up
+the tag name from the surrounding structure.
+
+\item Structure destination are now created also with \PDF \textless\,2.0. They shouldn't harm and
+can improve the html export.
+
+\end{itemize}
+
+
\subsection{Proof of concept: the tagging of the documentation itself}
Starting with version 0.6 the documentation itself has been tagged. The tagging wasn't (and isn't) in no way perfect. The validator from Adobe didn't complain, but PAX3 wanted alternative text for all links (no idea why) and so I put everywhere simple text like \enquote{link} and \enquote{ref}. The links to footnotes gave warnings, so I disabled them. I used types from the \PDF{} version 1.7, mostly as I have no idea what should be used for code in 2.0. Margin notes were simply wrong \ldots
-The tagging has been improved and automated over time in sync with improvements and new features in the LaTeX kernel and the pdfmanagement code.
+The tagging has been improved and automated over time in sync with improvements and new features in the LaTeX kernel and the \PDF\ management code.
But even if the documentation passed the tests of the validators: as mentioned above passing a formal test doesn't mean that the content is really good and usable. I have a lot doubts that the code parts are really readable. The bibliography and the references must be improved. The user commands used for the tagging and also some of the patches used are still rather crude. So there is lot space for improvement.
@@ -467,11 +485,16 @@ The \texttt{tagpdf} package can then be loaded and activated by using the \textt
the \texttt{testphase} key is documented in \texttt{documentmetadata-support-doc.pdf} which
is part of the \texttt{latex-lab} bundle.
+Various parts of the code differentiate between \PDF{} version 2.0 and lower versions. If
+\PDF{} 2.0 is wanted it is required to set the version early in the \cs{DocumentMetadata}
+command so that \pkg{tagpdf} can pick up the correct code path.
+
\begin{lstlisting}
\DocumentMetadata
{
% testphase = phase-I, % tagging without paragraph tagging
testphase = phase-II % tagging with paragraph tagging and other new stuff.
+ % pdfversion = 2.0 % pdfversion must be set here.
}
\documentclass{article}
\begin{document}
@@ -481,11 +504,12 @@ some text
\minisec{Activation needed!}
-The package can also be loaded normally with |\usepackage| (but it is
-still required to use \cs{DocumentMetadata} to load the pdfmanagement) but
+It is not recommended anymore, but
+the package can also be loaded normally with |\usepackage| (but it is
+still required to use \cs{DocumentMetadata} to load the \PDF\ management) but
it will then -- apart from loading more packages and defining a lot of things -- not do much. You will have to \emph{activate} it with \verb+\tagpdfsetup+.
-The pdfmanagement loaded with \cs{DocumentMetadata} will in any case load \texttt{tagpdf-base} a
+The \PDF\ management loaded with \cs{DocumentMetadata} will in any case load \texttt{tagpdf-base} a
small package that provides no-op versions of the main tagging commands.
Most commands do nothing if tagging is not activated, but in case a test is needed a command (with the usual p,T,F variants) is provided:
@@ -500,7 +524,7 @@ The check is true only if \emph{everything} is activated. In all other cases (in
%TODO think about tagging of the keys. Aside? Header?
-The package has two different modes: The \textbf{generic mode} works (in theory, currently only tested with pdftex and luatex) probably with all engines, the \textbf{lua mode} only with luatex. The differences between both modes will be described later. The mode can be set with package options:
+The package has two different modes: The \textbf{generic mode} works (in theory, currently only fully tested with pdflatex) probably with all engines, the \textbf{lua mode} only with lualatex. The differences between both modes will be described later. The mode can be set with package options:
\DescribeKey{luamode}
@@ -594,29 +618,59 @@ endstream
\end{lstlisting}
-From this stream one can extract the characters and their placement on the page but not their semantic meaning (the first line is actually a section heading, the last the page number). And while in the example the order is correct there is actually no guaranty that the stream contains the text in the order it should be read.
-
-Tagging means to enrich the \PDF{} with information about the \emph{semantic} meaning and the \emph{reading order}. (Tagging can do more, one can also store all sorts of layout information like font properties and indentation with tags. But as I already wrote this package concentrates on the part of tagging that is needed to improve accessibility.)
-
+From this stream one can extract the characters and their placement on the page
+but not their semantic meaning (the first line is actually a section heading,
+the last the page number). And while in the example the order is correct
+there is actually no guaranty that the stream contains the text in the order
+it should be read.
+Tagging means to enrich the \PDF{} with information about the \emph{semantic}
+meaning and the \emph{reading order}. (Tagging can do more, one can also
+store all sorts of layout information like font properties and indentation
+with tags. But as I already wrote this package concentrates on the part of
+tagging that is needed to improve accessibility.)
\subsection{Three tasks}
-
To tag a \PDF{} three tasks must be carried out:
\begin{enumerate}
\item
- \textbf{The mark-content-task}:\sidenote{mc-task} The document must add \enquote{labels} to the page stream which allows to identify and reference the various chunks of text and other content. This is the most difficult part of tagging -- both for the document writer but also for the package code. At first there can be quite many chunks as every one is a leaf node of the structure and so often a rather small unit. At second the chunks must be defined page-wise -- and this is not easy when you don't know where the page breaks are. Also in a standard document a lot text is created automatically, e.g. the toc, references, citations, list numbers etc and it is not always easy to mark them correctly.
-
-\item
- \textbf{The structure-task}:\sidenote{struct-task} The document must declare the structure. This means marking the start and end of semantically connected portions of the document (correctly nested as a tree). This too means some work for the document writer, but less than for the mc-task: at first quite often the mc-task and the structure-task can be combined, e.g. when you mark up a list number or a tabular cell or a section header; at second one doesn't have to worry about page breaks so quite often one can patch standard environments to declare the structure. On the other side a number of structures end in \LaTeX\ only implicitly -- e.g. an item ends at the next item, so getting the \PDF{} structure right still means that additional mark up must be added.
-
-
-\item
- \textbf{The tree management}:\sidenote{tree-task} At last the structure must be written into the \PDF{}. For every structure an object of type \texttt{StructElem} must be created and flushed with keys for the parents and the kids. A parenttree must be created to get a reference from the mc-chunks to the parent structure. A rolemap must be written. And a number of dictionary entries. All this is hopefully done automatically and correctly by the package \ldots.
+ \textbf{The mark-content-task}:\sidenote{mc-task} The document must add
+ \enquote{labels} to the page stream which allows to identify and reference
+ the various chunks of text and other content.
+ This is the most difficult part of tagging -- both for the document writer
+ but also for the package code. At first there can be quite many
+ chunks as every one is a leaf node of the structure and so often a rather
+ small unit. At second the chunks must be defined page-wise -- and
+ this is not easy when you don't know where the page breaks are.
+ Also in a standard document a lot text is created automatically, e.g.
+ the toc, references, citations, list numbers etc and it is not always
+ easy to mark them correctly.
+
+\item \textbf{The structure-task}:\sidenote{struct-task} The document must
+ declare the structure. This means marking the start and end of
+ semantically connected portions of the document (correctly nested as a
+ tree). This too means some work for the document writer, but less than
+ for the mc-task: at first quite often the mc-task and the
+ structure-task can be combined, e.g. when you mark up a list number or
+ a tabular cell or a section header; at second one doesn't have to worry
+ about page breaks so quite often one can patch standard environments to
+ declare the structure. On the other side a number of structures end in
+ \LaTeX\ only implicitly -- e.g. an item ends at the next item, so
+ getting the \PDF{} structure right still means that additional mark up
+ must be added.
+
+
+\item \textbf{The tree management}:\sidenote{tree-task} At last the
+ structure must be written into the \PDF{}. For every structure an
+ object of type \texttt{StructElem} must be created and flushed with
+ keys for the parents and the kids. A parenttree must be created to get
+ a reference from the mc-chunks to the parent structure. A rolemap must
+ be written. And a number of dictionary entries. All this is hopefully
+ done automatically and correctly by the package \ldots.
\end{enumerate}
@@ -679,9 +733,9 @@ To tag a \PDF{} three tasks must be carried out:
\end{tcolorbox}
-\tagstructbegin{tag=Caption}\tagmcbegin{tag=Caption}
-\caption{Schematical description of the relation between marked content in the page stream and the structure}
-\tagmcend\tagstructend
+\tagstructbegin{tag=Caption}\tagmcbegin{tag=Caption} \caption{Schematical
+description of the relation between marked content in the page stream and the
+structure} \tagmcend\tagstructend
\end{figure}
@@ -692,10 +746,18 @@ To tag a \PDF{} three tasks must be carried out:
-To be able to refer to parts of the text in the structure, the text in the page stream must get \enquote{labels}. In the \PDF{} reference they are called \enquote{marked content}. The three main variants needed here are:
+To be able to refer to parts of the text in the structure, the text in the
+page stream must get \enquote{labels}. In the \PDF{} reference they are
+called \enquote{marked content}. The three main variants needed here are:
\begin{description}
-\item[Artifacts] They are marked with of a pair of keywords, \texttt{BMC} and \texttt{EMC} which surrounds the text. \texttt{BMC} has a single prefix argument, the fix tag name \texttt{/Artifact}. Artifacts should be used for irrelevant text and page content that should be ignored in the structure. Sadly it is often not possible to leave such text simply unmarked -- the accessibility tests in Acrobat and other validators complain.
+\item[Artifacts] They are marked with of a pair of keywords, \texttt{BMC}
+ and \texttt{EMC} which surrounds the text. \texttt{BMC} has a single
+ prefix argument, the fix tag name \texttt{/Artifact}. Artifacts should
+ be used for irrelevant text and page content that should be ignored in
+ the structure. Sadly it is often not possible to leave such text simply
+ unmarked -- the accessibility tests in Acrobat and other validators
+ complain.
\begin{lstlisting}
@@ -708,8 +770,11 @@ To be able to refer to parts of the text in the structure, the text in the page
-\item[Artifacts with a type]
-They are marked with of a pair of keywords, \texttt{BDC} and \texttt{EMC} which surrounds the text. \texttt{BDC} has two arguments: again the tag name \texttt{/Artifact} and a following dictionary which allows to specify the suppressed info. Text in header and footer can e.g. be declared as pagination like this:
+\item[Artifacts with a type] They are marked with of a pair of keywords,
+ \texttt{BDC} and \texttt{EMC} which surrounds the text. \texttt{BDC}
+ has two arguments: again the tag name \texttt{/Artifact} and a
+ following dictionary which allows to specify the suppressed info. Text
+ in header and footer can e.g. be declared as pagination like this:
\begin{lstlisting}
@@ -721,10 +786,19 @@ They are marked with of a pair of keywords, \texttt{BDC} and \texttt{EMC} which
-\item[Content] Content is marked also with of a pair of keywords, \texttt{BDC} and \texttt{EMC}. The first argument of \texttt{BDC} is a tag name which describes the structural type of the text\footnote{There is quite some redundancy in the specification here. The structural type is also set in the structure tree. One wonders if it isn't enough to use always \texttt{/SPAN} here.}
- Examples are \texttt{/P} (paragraph), \texttt{/H2} (heading), \texttt{/TD} (table cell). The reference mentions a number of standard types but it is possible to add more or to use different names.
+\item[Content] Content is marked also with of a pair of keywords,
+ \texttt{BDC} and \texttt{EMC}. The first argument of \texttt{BDC} is a
+ tag name which describes the structural type of the text\footnote{There
+ is quite some redundancy in the specification here. The structural type
+ is also set in the structure tree. One wonders if it isn't enough to
+ use always \texttt{/SPAN} here.} Examples are \texttt{/P} (paragraph),
+ \texttt{/H2} (heading), \texttt{/TD} (table cell). The reference
+ mentions a number of standard types but it is possible to add more or
+ to use different names.
-In the second argument of \texttt{BDC} -- in the property dictionary -- more data can be stored. \emph{Required} is an \texttt{/MCID}-key which takes an integer as a value:
+In the second argument of \texttt{BDC} -- in the property dictionary -- more
+data can be stored. \emph{Required} is an \texttt{/MCID}-key which takes an
+integer as a value:
\begin{lstlisting}
@@ -734,10 +808,15 @@ In the second argument of \texttt{BDC} -- in the property dictionary -- more dat
\end{lstlisting}
-This integer is used to identify the chunk when building the structure tree. The chunks are numbered by page starting with 0. As the numbers are also used as an index in an array they shouldn't be \enquote{holes} in the numbering system
-(It is perhaps possible to handle a numbering scheme not starting by 0 and having holes, but it will enlarge the \PDF{} as one would need dummy objects.).
+This integer is used to identify the chunk when building the structure
+tree. The chunks are numbered by page starting with 0. As the numbers are
+also used as an index in an array they shouldn't be \enquote{holes} in the
+numbering system (It is perhaps possible to handle a numbering scheme not
+starting by 0 and having holes, but it will enlarge the \PDF{} as one would
+need dummy objects.).
-It is possible to add more entries to the property dictionary, e.g. a title, alternative text or a local language setting.
+It is possible to add more entries to the property dictionary, e.g. a
+title, alternative text or a local language setting.
\end{description}
@@ -754,8 +833,11 @@ The needed markers can be added with low level code e.g. like this (in pdftex sy
This sounds easy. But there are quite a number of traps, mostly with pdfLaTeX:
\begin{enumerate}[beginpenalty=10000]
- \item \PDF{} is a page oriented format. And this means that the start \texttt{BDC}/\texttt{BMC} and the corresponding end \texttt{EMC} must be on the same page.
- So marking e.g. a section title like in the following example won't always work as the literal before the section could end on the previous page:
+ \item \PDF{} is a page oriented format. And this means that the start
+ \texttt{BDC}/\texttt{BMC} and the corresponding end \texttt{EMC}
+ must be on the same page. So marking e.g. a section title like in the
+ following example won't always work as the literal before the
+ section could end on the previous page:
\begin{lstlisting}
@@ -765,54 +847,86 @@ This sounds easy. But there are quite a number of traps, mostly with pdfLaTeX:
\end{lstlisting}
- Using the literals \emph{inside} the section argument is better, but then one has to take care that they don't wander into the header and the toc.
-
- \item
- Literals are \enquote{whatsits} nodes and can change spacing, page and line breaking. The literal \emph{behind} the section in the previous example could e.g. lead to a lonely section title at the end of the page.
-
- \item
- The \texttt{/MCID} numbers must be unique on a page. So you can't use the literal in a saved box that you reuse in various places. This is e.\,g. a problem with \texttt{longtable} as it saves the table header and footer in a box.
-
- \item
- The \texttt{/MCID}-chunks are leaf nodes in the structure tree, so they shouldn't be nested.
-
- \item
- Often text in a document is created automatically or moved around: entries in the table of contents, index, bibliography and more. To mark these text chunks correctly one has to analyze the code creating such content to find suitable places to inject the literals.
-
- \item
- The literals are inserted directly and not at shipout. This means that due to the asynchronous page breaking of \TeX\ the MCID-number can be wrong even if the counter is reset at every page. This package uses in generic mode a label-ref-system to get around this problem. This sadly means that often at least three compilations are needed until everything has settled down.
-
- It can actually be worse: If the text is changed after the MCID-numbers have been assigned, and
- a new mc-chunk is inserted in the middle of the page, then all the numbers have to be recalculated
- and that requires again a number of compilations until it really settles down again.
- Internal references are especially problematic here, as the first compilation
- typically creates a non-link |??|, and only the second inserts the structure and the new mc.
- When the reference system in LaTeX will be extended, care will be taken to ensure that already the dummy text builds a chunk.
- Until then the advice is to first compile the document and resolve all cross-reference and to activate tagging only at the end.
-
-
- \item
- There exist environments which process their content more than once -- examples are \texttt{align} and \texttt{tabularx}.
+ Using the literals \emph{inside} the section argument is better, but then
+ one has to take care that they don't wander into the header and the toc.
+
+ \item Literals are \enquote{whatsits} nodes and can change spacing, page
+ and line breaking. The literal \emph{behind} the section in the
+ previous example could e.g. lead to a lonely section title at the end
+ of the page.
+
+ \item The \texttt{/MCID} numbers must be unique on a page. So you can't
+ use the literal in a saved box that you reuse in various places. This
+ is e.\,g. a problem with \texttt{longtable} as it saves the table
+ header and footer in a box.
+
+ \item The \texttt{/MCID}-chunks are leaf nodes in the structure tree, so
+ they shouldn't be nested.
+
+ \item Often text in a document is created automatically or moved around:
+ entries in the table of contents, index, bibliography and more. To
+ mark these text chunks correctly one has to analyze the code creating
+ such content to find suitable places to inject the literals.
+
+ \item The literals are inserted directly and not at shipout. This means
+ that due to the asynchronous page breaking of \TeX\ the MCID-number
+ can be wrong even if the counter is reset at every page. This package
+ uses in generic mode a label-ref-system to get around this problem.
+ This sadly means that often at least three compilations are needed
+ until everything has settled down.
+
+ It can actually be worse: If the text is changed after the MCID-numbers
+ have been assigned, and a new mc-chunk is inserted in the middle of the
+ page, then all the numbers have to be recalculated and that requires
+ again a number of compilations until it really settles down again.
+ Internal references are especially problematic here, as the first
+ compilation typically creates a non-link |??|, and only the second
+ inserts the structure and the new mc. When the reference system in LaTeX
+ will be extended, care will be taken to ensure that already the dummy
+ text builds a chunk. Until then the advice is to first compile the
+ document and resolve all cross-reference and to activate tagging only at
+ the end.
+
+
+ \item There exist environments which process their content more than once
+ -- examples are \texttt{align} and \texttt{tabularx}.
So one has to check for doublettes and holes in the counting system.
- \item
- \PDF{} is a page oriented format. And this means that the start and the end marker must be on the same page \ldots\ \emph{so what to do with normal paragraphs that split over pages??}. This question will be discussed in subsection~\ref{sec:splitpara}.
+ \item \PDF{} is a page oriented format. And this means that the start and
+ the end marker must be on the same page \ldots\ \emph{so what to do
+ with normal paragraphs that split over pages??}. This question will
+ be discussed in subsection~\ref{sec:splitpara}.
\end{enumerate}
\subsubsection{Generic mode versus lua mode in the mc-task}
-While in generic mode the commands insert the literals directly and so have all the problems described above the lua mode works quite differently: The tagging commands don't insert literals but set some \emph{attributes} which are attached to all the following nodes. When the page is shipped out some lua code is called which wanders through the shipout box and injects the literals at the places where the attributes changes.
+While in generic mode the commands insert the literals directly and so have
+all the problems described above the lua mode works quite differently: The
+tagging commands don't insert literals but set some \emph{attributes} which
+are attached to all the following nodes. When the page is shipped out some
+lua code is called which wanders through the shipout box and injects the
+literals at the places where the attributes changes.
This means that quite a number of problems mentioned above are not relevant for the lua mode:
-\begin{enumerate}
-\item Pagebreaks between start and end of the marker are \emph{not} a problem. So you can mark a complete paragraph. If a pagebreak occur directly after an start marker or before an end marker this can lead to empty chunks in the \PDF{} and so bloat up \PDF{} a bit, but this is imho not really a problem (compared to the size increase by the rest of the tagging).
-\item The commands don't insert literals directly and so affect line and page breaking much less.
-\item The numbering of the MCID are done at shipout, so no label/ref system is needed.
-\item The code can do some marking automatically. Currently everything that has not been marked up by the document is marked as artifact.
-\end{enumerate}
+\begin{enumerate}
+\item Pagebreaks between start and end of the marker are
+\emph{not} a problem. So you can mark a complete paragraph. If a pagebreak
+occur directly after an start marker or before an end marker this can lead to
+empty chunks in the \PDF{} and so bloat up \PDF{} a bit, but this is imho not
+really a problem (compared to the size increase by the rest of the tagging).
+
+\item The commands don't insert literals directly and so affect line and page
+breaking much less.
+
+\item The numbering of the MCID are done at shipout, so no label/ref system
+ is needed.
+
+\item The code can do some marking automatically. Currently everything that
+ has not been marked up by the document is marked as artifact.
+\end{enumerate}
@@ -820,37 +934,67 @@ This means that quite a number of problems mentioned above are not relevant for
\subsubsection{Commands to mark content and chunks}
-In generic mode\sidenote{Generic mode only} is vital that the end command is executed on the same page as the begin command. So think carefully how to place them.
-For strategies how to handle paragraphs that split over pages see subsection~\ref{sec:splitpara}.
+In generic mode\sidenote{Generic mode only} is vital that the end command is
+executed on the same page as the begin command. So think carefully how to
+place them. For strategies how to handle paragraphs that split over pages see
+subsection~\ref{sec:splitpara}.
\begin{docCommand}{tagmcbegin}{\marg{key-val-list}}\end{docCommand}
\begin{docCommand}{tag_mc_begin:n}{\marg{key-val-list}}\end{docCommand}
-These commands insert the begin of the marked content code in the \PDF{}. They don't start a paragraph. \emph{They don't start a group}.
-Such markers should not be nested. The command will warn you if this happens.
+These commands insert the begin of the marked content code in the \PDF{}.
+They don't start a paragraph. \emph{They don't start a group}. Such markers
+should not be nested. The command will warn you if this happens.
The key-val list understands the following keys:
\begin{description}
- \item[\PrintKeyName{tag}]
- This is required, unless you use the \PrintKeyName{artifact} key. The value of the key is normally one of the standard type listed in section \ref{sec:new-tag} (without a slash at the begin, this is added by the code). It is possible to setup new tags, see the same section. The value of the key is expanded, so it can be a command. The expansion is passed unchanged to the \PDF{}, so it should with a starting slash give a valid \PDF{} name (some ascii with numbers like \texttt{H4} is fine).
-
- \item[\PrintKeyName{artifact}]
- This will setup the marked content as an artifact. The key should be used for content that should be ignored. The key can take one of the values \PrintKeyName{pagination}, \PrintKeyName{pagination/header}, \PrintKeyName{pagination/footer}, \PrintKeyName{layout}, \PrintKeyName{page}, \PrintKeyName{background} and \PrintKeyName{notype} (this is the default). Text in the header and footer should normally be marked with \PrintKeyName{artifact=pagination} or \PrintKeyName{pagination/header}, \PrintKeyName{pagination/footer} but
- simply artifact (as it is now done automatically) should be ok too.
-
- It is not quite clear if rules and other decorative graphical objects needs to be marked up as artifacts. Acrobat seems not to mind if not, but PAC~3 complained.
-
- The validators complain if some text is not marked up, but it is not quite clear if this is a serious problem.
-
- The\sidenote{lua mode only} lua mode will mark up everything unmarked as \texttt{artifact=notype}. You can suppress this behaviour by setting the tagpdfsetup key \texttt{tagunmarked} to false. See section \ref{ssec:setup}.
-
- \item[\PrintKeyName{stash}]
- Normally marked content will be stored in the \enquote{current} structure. This may not be what you want. As an example you may perhaps want to put a marginnote behind or before the paragraph it is in the tex-code. With this boolean key the content is marked but not stored in the kid-key of the current structure.
-
- \item[\PrintKeyName{label}]
- This key sets a label by which you can call the marked content later in another structure (if it has been stashed with the previous key). Internally the label name will start with \texttt{tagpdf-}.
+ \item[\PrintKeyName{tag}] This key is optional. By default the tag name
+ of the surrounding structure is used, which normally should be fine.
+ But if needed the name can be set explicitly with this key. The value
+ of the key is typically one of the standard type listed in section
+ \ref{sec:new-tag} (without a slash at the begin, this is added by the
+ code). It is possible to setup new tags, see the same section. The
+ value of the key is expanded, so it can be a command. The expansion
+ is passed unchanged to the \PDF{}, so it should with a starting slash
+ give a valid \PDF{} name (some ascii with numbers like \texttt{H4}
+ is fine).
+
+ \item[\PrintKeyName{artifact}] This will setup the marked content as an
+ artifact. The key should be used for content that should be ignored.
+ The key can take one of the values \PrintKeyName{pagination},
+ \PrintKeyName{pagination/header}, \PrintKeyName{pagination/footer},
+ \PrintKeyName{layout}, \PrintKeyName{page},
+ \PrintKeyName{background} and \PrintKeyName{notype} (this is the
+ default). Text in the header and footer should normally be marked
+ with \PrintKeyName{artifact=pagination} or
+ \PrintKeyName{pagination/header}, \PrintKeyName{pagination/footer}
+ but simply artifact (as it is now done automatically) should be ok
+ too.
+
+ It is not quite clear if rules and other decorative graphical objects
+ needs to be marked up as artifacts. Acrobat seems not to mind if not, but
+ PAC~3 complained.
+
+ The validators complain if some text is not marked up, but it is not
+ quite clear if this is a serious problem.
+
+ The\sidenote{lua mode only} lua mode will mark up everything unmarked as
+ \texttt{artifact=notype}. You can suppress this behaviour by setting the
+ tagpdfsetup key \texttt{tagunmarked} to false. See section
+ \ref{ssec:setup}.
+
+ \item[\PrintKeyName{stash}] Normally marked content will be stored in the
+ \enquote{current} structure. This may not be what you want. As an
+ example you may perhaps want to put a marginnote behind or before the
+ paragraph it is in the tex-code. With this boolean key the content is
+ marked but not stored in the kid-key of the current structure.
+
+ \item[\PrintKeyName{label}] This key sets a label by which you can call
+ the marked content later in another structure (if it has been stashed
+ with the previous key). Internally the label name will start with
+ \texttt{tagpdf-}.
\item[\PrintKeyName{alt}]
This key inserts an \texttt{/Alt} value in the property dictionary of the BDC operator. See section~\ref{sec:alt}. The value is handled as verbatim string, commands are not expanded but the value will be expanded first once (so works like the key \texttt{alttext-o} in previous versions which has been removed).
@@ -865,10 +1009,15 @@ The key-val list understands the following keys:
- \item[\PrintKeyName{actualtext}]
- This key inserts an \texttt{/ActualText} value in the property dictionary of the BDC operator. See section~\ref{sec:alt}. The value is handled as verbatim string, commands are not expanded but the value will be expanded first once (so works like the key \texttt{actualtext-o} in previous versions which has been removed).
+ \item[\PrintKeyName{actualtext}] This key inserts an \texttt{/ActualText}
+ value in the property dictionary of the BDC operator. See
+ section~\ref{sec:alt}. The value is handled as verbatim string,
+ commands are not expanded but the value will be expanded first once
+ (so works like the key \texttt{actualtext-o} in previous versions
+ which has been removed).
- That means that you can do something like in the following listing and and it will insert \verb+X+ (hex encoded) in the \PDF{}.
+ That means that you can do something like in the following listing and
+ and it will insert \verb+X+ (hex encoded) in the \PDF{}.
\begin{lstlisting}
@@ -876,18 +1025,26 @@ The key-val list understands the following keys:
\tagmcbegin{tag=Span,actualtext=\myactualtext}
\end{lstlisting}
- According to the PDF reference, \texttt{/ActualText} should only be used on marked content sequence of type Span. This is not enforced by the code currently.
+ According to the PDF reference, \texttt{/ActualText} should only be used
+ on marked content sequence of type Span. This is not enforced by the code
+ currently.
- \item[\PrintKeyName{raw}]
- This key allows you to add more entries to the properties dictionary. The value must be correct, low-level \PDF{}. E.g. \verb+raw=/Alt (Hello)+ will insert an alternative Text.
+ \item[\PrintKeyName{raw}] This key allows you to add more entries to the
+ properties dictionary. The value must be correct, low-level \PDF{}.
+ E.g. \verb+raw=/Alt (Hello)+ will insert an alternative Text.
\end{description}
\begin{docCommand}{tagmcend}{}\end{docCommand}
\begin{docCommand}{tag_mc:end}{}\end{docCommand}
-These commands insert the end code of the marked content. They don't end a group and it doesn't matter if they are in another group as the starting commands. In generic mode both commands check if there has been a begin marker and issue a warning if not. In luamode it is often possible to omit the command, as the effect of the begin command ends with a new \verb+\tagmcbegin+ anyway.
+These commands insert the end code of the marked content. They don't end a
+group and it doesn't matter if they are in another group as the starting
+commands. In generic mode both commands check if there has been a begin
+marker and issue a warning if not. In luamode it is often possible to omit
+the command, as the effect of the begin command ends with a new
+\verb+\tagmcbegin+ anyway.
% no longer relevant
@@ -913,7 +1070,9 @@ These commands insert the end code of the marked content. They don't end a group
\begin{docCommand}{tag_mc_use:n}{}\end{docCommand}
-These commands allow you to record a marked content that you stashed away into the current structure. Be aware that a marked content can be used only once -- the command will warn you if you try to use it a second time.
+These commands allow you to record a marked content that you stashed away
+into the current structure. Be aware that a marked content can be used only
+once -- the command will warn you if you try to use it a second time.
\begin{docCommand}{tag_mc_end_push:}{}\end{docCommand}
@@ -1205,7 +1364,7 @@ The method is described in Frank Mittelbach's talk at TUG~2021
Please note
\begin{itemize}
-\item The code requires a pdfmanagement-testphase version v0.95i or newer.
+\item The code requires a \pkg{pdfmanagement-testphase} version v0.95i or newer.
\item Typically you will need more compilations than previously, don't rely on the rerun messages, but if something looks wrong
rerun.
\item The code relies on that related |\tagmcbegin| and |\tagmcend| are in the same boxing level. If one is in a box (which hides the marks) and the other in the main galley, things will go wrong.
@@ -1324,7 +1483,7 @@ The key-val list understands the following keys:
% By default a structure is added as kid to the currently active structure.
With the parent key one can choose another parent. The value is a structure number which
must refer to an already existing, previously created structure. Such a structure
- number can for example be have been stored with \cs{tag\_get:n}, but one can also use
+ number can have been stored previously with \cs{tag\_get:n}, but one can also use
a label on the parent structure and then use
\cs{ref\_value:nn}\verb+{tagpdfstruct-label}{tagstruct}+ to retrieve it.
@@ -1648,14 +1807,20 @@ In PDF 2.0 the situation is a bit more complicated. At first PDF~2.0 introduced
That means that a type can have more than one \enquote{meaning} depending on the name space it belongs to.
|section (name space A)| and |section (name space B)| are two different types.
-At second PDF 2.0 still requires that a tagged PDF maps all types to a standard type, but now there are three sets of standard types (The meanings of the PDF types can be looked up in the \PDF{}-references \parencite{pdfspec-iso32000-1,pdfspec-iso32000-2_2020}):
+At second PDF 2.0 still requires that a tagged PDF maps all types to a
+standard type, but now there are three sets of standard types (The meanings
+of the PDF types can be looked up in the \PDF{}-references
+\parencite{pdfspec-iso32000-1,pdfspec-iso32000-2_2020}):
\begin{enumerate}
\item The \emph{standard structure namespace for PDF 1.7}, also called the \emph{default standard structure namespace}. The public name of the namespace is |tag/NS/pdf|. This can be used to reference
the namespace e.g. in attributes. These are the structure names from PDF 1.7:
\ExplSyntaxOn
-\clist_use:Nn \c__tag_role_sttags_pdf_pdfII_clist {,\c_space_tl}
-,~ \clist_use:Nn\c__tag_role_sttags_only_pdf_clist {,\c_space_tl}
+\clist_clear:N\l_tmpa_clist
+\prop_map_inline:cn
+ { g__tag_role_NS_pdf_prop }
+ { \clist_put_right:Nn \l_tmpa_clist {#1} }
+\clist_use:Nn \l_tmpa_clist {,\c_space_tl }
\ExplSyntaxOff
\item The \emph{standard structure namespace for PDF 2.0}.
@@ -1663,11 +1828,27 @@ The public name of the namespace is |tag/NS/pdf2|. This can be used to reference
the namespace e.g. in attributes.
These are more or less same types as in PDF. The following types have been removed from this set:\\
\ExplSyntaxOn
-\clist_use:Nn\c__tag_role_sttags_only_pdf_clist {,\c_space_tl}\\
+\clist_clear:N\l_tmpa_clist
+\prop_map_inline:cn { g__tag_role_NS_pdf_prop }
+ {
+ \prop_if_in:cnF
+ { g__tag_role_NS_pdf2_prop }
+ {#1}
+ { \clist_put_right:Nn \l_tmpa_clist {#1} }
+ }
+\clist_use:Nn \l_tmpa_clist {,\c_space_tl }\\
\ExplSyntaxOff
and the following are new:\\
\ExplSyntaxOn
-\clist_use:Nn \c__tag_role_sttags_only_pdfII_clist {,\c_space_tl}
+\clist_clear:N\l_tmpa_clist
+\prop_map_inline:cn { g__tag_role_NS_pdf2_prop }
+ {
+ \prop_if_in:cnF
+ { g__tag_role_NS_pdf_prop }
+ {#1}
+ { \clist_put_right:Nn \l_tmpa_clist {#1} }
+ }
+\clist_use:Nn \l_tmpa_clist {,\c_space_tl }
\ExplSyntaxOff
\item MathML 3.0 as an \emph{other namespaces}.
@@ -1684,10 +1865,16 @@ syntax |section/H1| should in most cases do the right thing.
\begin{description}
\item[\PrintKeyName{tag}] This is the name of the new type as it should then be used in \cs{tagstructbegin}.
-\item[\PrintKeyName{namespace}] This is the namespace of the new type. The value should be a shorthand of a namespace. The allowed values are currently |pdf|, |pdf2|, |mathml| and |user|. The default value (and recommended value for a new tag) is |user|. The public name of the user namespace is |tag/NS/user|. This can be used to reference
- the namespace e.g. in attributes.
-\item[\PrintKeyName{role}] This is the type the tag should be mapped too. In a PDF 1.7 or earlier this is normally a type from the |pdf| set, in PDF 2.0 from the |pdf|, |pdf2| and |mathml| set. It can also be a user type, or a still unknown type. The PDF format allows mapping to be done transitively. But you should be aware that tagpdf can't (or more precisely won't) check such unusual role mapping. It lies in the responsability of the author to ensure here that every type is correctly role mapped.
-\item[\PrintKeyName{role-namespace}] If the role is a known type the default value is the default namespace: |pdf2| for all types in this set, |pdf| for the type which exist only in PDF 1.7, |mathml| for the MathML types, and for previously defined user types whatever namespace has been set there. If the role is unknown, |user| is used and the code hopes that the type will be defined later.
+\item[\PrintKeyName{tag-namespace}] This is the namespace of the new type.
+ The value should be a shorthand of a namespace. The allowed values are
+ currently |pdf|, |pdf2|, |mathml| and |user|. The default value (and
+ recommended value for a new tag) is |user|. The public name of the user
+ namespace is |tag/NS/user|. This can be used to reference the namespace
+ e.g. in attributes.
+\item[\PrintKeyName{role}] This is the type the tag should be mapped too. In a PDF 1.7 or earlier this is normally a type from the |pdf| set, in PDF 2.0 from the |pdf|, |pdf2| or |mathml| set. It can also be a user type, then this user tag must have been declared before. The PDF format allows mapping to be done transitively. But you should be aware that tagpdf can't (or more precisely won't) check if some unusual role mapping makes really sense, this lies in the responsability of the author.
+
+\item[\PrintKeyName{role-namespace}] The default value is the default namespace of the role: |pdf2| for all types in this set, |pdf| for the type which exist only in PDF 1.7, |mathml| for the MathML types, and for previously defined user types whatever namespace has been set there. With this key the value can be overwritten.
+
\item[unknown key] An unknown key is interpreted as a |tag/role|, this preserves the old syntax. So this two calls are equivalent:
\begin{lstlisting}
@@ -1697,10 +1884,71 @@ syntax |section/H1| should in most cases do the right thing.
\end{description}
-The exact effects of the key depends on the PDF version. With PDF 1.7 or older the namespace keys are ignored, with PDF 2.0 the namespace keys are use to setup the correct rolemaps. The |namespace| key is also used to define the default namespace if the type is used as a role or as tag in a structure.
+The exact effects of the keys depend on the PDF version. With PDF 1.7 or older the namespace keys are ignored, with PDF 2.0 the namespace keys are use to setup the correct rolemaps. The |namespace| key is also used to define the default namespace if the type is used as a role or as tag in a structure.
+
+\subsection{The \texttt{latex} namespace}
+Starting with version 0.98 work has started to setup specific latex tags. In
+\PDF{} 2.0 in form of a special name space, with \PDF{} 1.7 or older the
+tags are role mapped. This is work in progress and bound to change.
+\section{Checking parent-child rules}\label{sec:parent-child}
+
+The \PDF{} references formulate various rules about whether a structure can be
+a child of another structure, e.g. a \texttt{Sect} can not be a child of \texttt{P}.
+In the \PDF{} 1.7 reference this rules were
+rather vage, in the \PDF{} 2.0 reference there is a quite specific matrix,
+which sadly misses some of the tags from \PDF{} 1.7. The upcoming
+ISO norm 32005 will
+address this problem and extend the matrix to cover tags from
+\PDF{} 1.7 and 2.0 (but it still misses the \texttt{math} tag and mathml
+tags).
+
+The rules in the matrix are not a simple allowed/not allowed. Instead some rules determine
+that structure elements
+can appear only once in a parent, or that additional requirements can be found in the
+descriptions of the standard structure types, e.g. \texttt{Caption} often has
+to be the first element in the parent structure, and elements like \texttt{Part} and \texttt{Div}
+inherit restrictions from parent structures.
+External standards like \PDF/UA can add more rules.
+
+Altogether this doesn't make it easy to check if a structure tree is conformant or not without slowing down
+the compilation a lot.
+
+With version 0.98 some first steps to do checks (and to react to the result of a change)
+have been implemented. Some checks will led to warning directly, but the majority
+will only be visible if the log-level is increased.
+
+Typical messages will look then like this
+
+\begin{lstlisting}[mathescape]
+Package tagpdf Info: The rule between parent 'Sect (from Sect/pdf2)'
+(tagpdf) and child 'H10 (from H10/pdf2)' is '1 (0..n)'
+
+Package tagpdf Info: The rule between parent 'H2 (from subsection/latex)'
+(tagpdf) and child 'H1 (from section/latex)' is '-1 ($\emptyset$)'
+\end{lstlisting}
+
+The descriptions of the parent and childs are rather verbose as the checks have to take role mapping and name spaces into account. The result of a check is a number---negative if the relation is not allowed,
+positive if allowed. The text in the parentheses show the symbols used in the \PDF-matrix.
+
+Be aware
+\begin{itemize}
+\item This doesn't test all rules, it only implements (hopefully correctly) the matrix.
+\item There can be differences between \PDF~1.7 and 2.0, e.g. \texttt{FENote} is rolemapped to \texttt{Note}
+in \PDF~1.7 and then has different containment rules.
+\item The special tag \texttt{MC} stands for mc-chunks, so \enquote{real content} (the matrix has containments rules for this too).
+\item Currently there is as only negative number \texttt{\textminus1} but that is bound to change, depending on if (and how) it is possible to \enquote{repair} a disallowed parent-child relation.
+\item Warnings can be wrong.
+\end{itemize}
+
+
+
+
+
+
+
\section{\enquote{Real} space glyphs}\label{sec:spacechars}
@@ -1745,20 +1993,20 @@ This is in pdftex a primitive. It inserts the dummy space glyph. \pkg{tagpdf} de
\TeX{}live 2022 (earlier in miktex) both engines will knew new keywords which allow
to create structure destination easily.
- Support for this has been already added to the pdfmanagement and \pkg{tagpdf} will make
- use of it if possible. In most cases it should simply work, but one should be aware
- that as one now has a destination that is actually tied to the content it gets more
- important to actually consider the context and the place where such destinations
- are created. It now makes a difference if the destination is created before the
- structure is opened or after so in some cases
- code that place destinations should be changed to place them inside the structure they
- belong too. .
- One also has to consider the pages connected to the destinations: The structure destination
- is bound to the page where the structure \emph{begins}, if this differ from the page of the page destination
- (e.g. if the destination is created by a \verb+\phantomsection+ in the middle of a longer paragraph)
- then be necessary to surround
- destinations with a dummy structure (a Span or an Artifact) to
- get the right page number.
+ Support for this has been already added to the \PDF\ management and
+ \pkg{tagpdf} will make use of it if possible. In most cases it should simply
+ work, but one should be aware that as one now has a destination that is
+ actually tied to the content it gets more important to actually consider the
+ context and the place where such destinations are created. It now makes a
+ difference if the destination is created before the structure is opened or
+ after so in some cases code that place destinations should be changed to
+ place them inside the structure they belong too. One also has to consider
+ the pages connected to the destinations: The structure destination is bound
+ to the page where the structure \emph{begins}, if this differ from the page
+ of the page destination (e.g. if the destination is created by a
+ \verb+\phantomsection+ in the middle of a longer paragraph) then may be
+ necessary to surround destinations with a dummy structure (a Span or an
+ Artifact) to get the right page number.
@@ -2025,4 +2273,3 @@ This maps 0 to an array and 2 to the object reference \texttt{21 0 R}. Number tr
\end{document}
%http://msf.mathmlcloud.org/file_formats/8 %sample \PDF{} for math
-