diff options
Diffstat (limited to 'macros/latex/contrib/tagpdf')
41 files changed, 1029 insertions, 2472 deletions
diff --git a/macros/latex/contrib/tagpdf/README.md b/macros/latex/contrib/tagpdf/README.md index d21932976e..f614f459fa 100644 --- a/macros/latex/contrib/tagpdf/README.md +++ b/macros/latex/contrib/tagpdf/README.md @@ -1,6 +1,6 @@ #tagpdf — A package to create tagged pdf -Packageversion: 0.92 -Packagedate: 2021/08/27 +Packageversion: 0.93 +Packagedate: 2022/01/13 Author: Ulrike Fischer ## License @@ -10,29 +10,35 @@ The tagpdf package may be modified and distributed under the terms and condition ## Contents -- Readme (this file) -- tagpdf.sty (the sty) -- tagpdf-roles-code.sty (internal code) -- tagpdf-mc-code-shared.sty (internal code) -- tagpdf-mc-code-generic.sty (internal code) -- tagpdf-mc-code-lua.sty (internal code) -- tagpdf-struct-code.sty (internal code) -- tagpdf-tree-code.sty (internal code) -- tagpdf-space-code.sty (internal code) -- tagpdf-attr-code.sty (internal code) -- tagpdf-checks-code.sty (internal code) -- tagpdf-user.sty (user commands) -- tagpdf-pdftex.def (pdftex specific code) -- tagpdf-luatex.def (luatex specific code) -- tagpdf.lua (lua code for luatex) -- tagpdf.tex, tagpdf.pdf, tagpdf.bib, tagpdfdocu-patches.sty, - link-figure-input.tex, pac3.png (the docu) -- various examples (part of the documentation) +- README.md (this file) +- code files: + - tagpdf.ins + - tagpdf.dtx + - tagpdf-roles.dtx + - tagpdf-mc-shared.dtx + - tagpdf-mc-generic.dtx + - tagpdf-mc-lua.dtx + - tagpdf-struct.dtx + - tagpdf-tree.dtx + - tagpdf-space.dtx + - tagpdf-checks.dtx + - tagpdf-user.dtx +- documentation: + - tagpdf.pdf + - various examples (part of the documentation) +- source files for the documentation: + - tagpdf.tex + - tagpdf.bib + - tagpdfdocu-patches.sty, + - link-figure-input.tex + - pac3.png, global-ex.png ## Installation -Put the styles (with the exception of the tagpdfdocu-patches.sty), -the .def and the lua-files where it can be found. +At best use the package manager of your texsystem to install tagpdf. +For a manual installation run the .ins-file with latex and put the +created .sty, .def and .lua-files +where they can be found. ## Issues, comments, etc diff --git a/macros/latex/contrib/tagpdf/ex-AF-file.pdf b/macros/latex/contrib/tagpdf/ex-AF-file.pdf Binary files differindex a1b7db7c77..19a9d7b8ea 100644 --- a/macros/latex/contrib/tagpdf/ex-AF-file.pdf +++ b/macros/latex/contrib/tagpdf/ex-AF-file.pdf diff --git a/macros/latex/contrib/tagpdf/ex-AF-file.tex b/macros/latex/contrib/tagpdf/ex-AF-file.tex index 3e569807db..2282cd0026 100644 --- a/macros/latex/contrib/tagpdf/ex-AF-file.tex +++ b/macros/latex/contrib/tagpdf/ex-AF-file.tex @@ -1,26 +1,26 @@ % !Mode:: "TeX:DE:UTF-8:Main" -\RequirePackage{pdfmanagement-testphase} -\DeclareDocumentMetadata{ - pdfversion=2.0 - ,lang=de-DE - ,uncompress} +\IfFormatAtLeastTF{2022-06-01}{} + {\RequirePackage{pdfmanagement-testphase}} +\DocumentMetadata + { + uncompress, + pdfversion=2.0, + lang=de-DE, + testphase=tagpdf %load and activate tagpdf + } \documentclass{article} -\usepackage{tagpdf} \usepackage{iftex} -\tagpdfsetup{tabsorder=structure, - activate, - interwordspace - } +\tagpdfsetup{tabsorder=structure} -\iftutex +\ifluatex \usepackage{fontspec} \usepackage{unicode-math} \usepackage{luacode} \newfontface\zerowidthfont{freeserif} \else \usepackage[T1]{fontenc} -\fi +\fi \usepackage{graphicx} \begin{filecontents}{example-input-file.tex} @@ -29,6 +29,7 @@ Additional info! \begin{document} \pagestyle{empty} +\tagpdfparaOff %we don't want to nest paragraphs ... \ExplSyntaxOn diff --git a/macros/latex/contrib/tagpdf/ex-alt-actualtext-luatex.pdf b/macros/latex/contrib/tagpdf/ex-alt-actualtext-luatex.pdf Binary files differindex 3cda28e0da..d77cb67941 100644 --- a/macros/latex/contrib/tagpdf/ex-alt-actualtext-luatex.pdf +++ b/macros/latex/contrib/tagpdf/ex-alt-actualtext-luatex.pdf diff --git a/macros/latex/contrib/tagpdf/ex-alt-actualtext.tex b/macros/latex/contrib/tagpdf/ex-alt-actualtext.tex index 148a010701..ae44370152 100644 --- a/macros/latex/contrib/tagpdf/ex-alt-actualtext.tex +++ b/macros/latex/contrib/tagpdf/ex-alt-actualtext.tex @@ -8,7 +8,7 @@ \usepackage{tagpdf} \tagpdfsetup{tabsorder=structure, activate} -\usepackage{iftex} +\usepackage{iftex} \iftutex \usepackage{fontspec} \usepackage{unicode-math} @@ -26,6 +26,7 @@ % with pdflatex there is a encoding problem with the math \begin{document} +\tagpdfparaOff \pagestyle{empty} @@ -155,9 +156,9 @@ Etwas unmarkierter Text. actualtext=Ente, alttext=Dies ist eine Ente} %% a char is needed so that actualtext works, - \tagpdfifluatexTF + \ifluatex {{\zerowidthfont^^^^200c}}% - {\makebox[0pt][l]{.}}% + \else {\makebox[0pt][l]{.}} \fi% %it seems not to be needed for alttext and voice software .... \includegraphics[width=1cm]{example-image-duck} \tagmcend diff --git a/macros/latex/contrib/tagpdf/ex-attribute-luatex.pdf b/macros/latex/contrib/tagpdf/ex-attribute-luatex.pdf Binary files differindex f813c0e919..dc0d6b9df8 100644 --- a/macros/latex/contrib/tagpdf/ex-attribute-luatex.pdf +++ b/macros/latex/contrib/tagpdf/ex-attribute-luatex.pdf diff --git a/macros/latex/contrib/tagpdf/ex-attribute.pdf b/macros/latex/contrib/tagpdf/ex-attribute.pdf Binary files differdeleted file mode 100644 index 9871e6a033..0000000000 --- a/macros/latex/contrib/tagpdf/ex-attribute.pdf +++ /dev/null diff --git a/macros/latex/contrib/tagpdf/ex-formula-problem-luatex.pdf b/macros/latex/contrib/tagpdf/ex-formula-problem-luatex.pdf Binary files differindex 5a9f8e03a9..f470531f33 100644 --- a/macros/latex/contrib/tagpdf/ex-formula-problem-luatex.pdf +++ b/macros/latex/contrib/tagpdf/ex-formula-problem-luatex.pdf diff --git a/macros/latex/contrib/tagpdf/ex-mc-manual-para-split.pdf b/macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.pdf Binary files differindex 3dedd62f26..6fcda263ce 100644 --- a/macros/latex/contrib/tagpdf/ex-mc-manual-para-split.pdf +++ b/macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.pdf diff --git a/macros/latex/contrib/tagpdf/ex-mc-manual-para-split.tex b/macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.tex index d89e3601f4..92966275c5 100644 --- a/macros/latex/contrib/tagpdf/ex-mc-manual-para-split.tex +++ b/macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.tex @@ -1,11 +1,17 @@ % !Mode:: "TeX:DE:UTF-8:Main" % !!!!!!!!!!!!!!!!! +% Obsolete example! +% !!!!!!!!!!!!!!!! % This test files shows how to add a manual page split. % It *only* handles the mc-step in the page stream. % Structure commands and all the related management are not % involved. So it also only uses activate-mc. +% It is obsolete as the current tagpdf version now handles the +% page split automatically. To keep the example working this is disabled +% below with \csname __tag_mc_disable_marks:\endcsname + \RequirePackage{pdfmanagement-testphase} \DeclareDocumentMetadata{pdfversion=1.7,uncompress} \documentclass{book} @@ -17,7 +23,7 @@ \iftutex \usepackage{fontspec} \usepackage{luacode} -\else +\else \usepackage[T1]{fontenc} \fi @@ -31,8 +37,10 @@ \pagestyle{fancy} \fancyhf{} -\cfoot{\tagmcbegin{artifact=pagination}\thepage\tagmcend} \begin{document} +%disable the automatic page break handler: +\csname __tag_mc_disable_marks:\endcsname + \tagmcbegin{tag=P} Cras egestas ipsum a nisl. Vivamus varius dolor ut dolor. Fusce vel enim. Pellentesque accumsan ligula et eros. Cras diff --git a/macros/latex/contrib/tagpdf/ex-patch-list-luatex.pdf b/macros/latex/contrib/tagpdf/ex-patch-list-luatex.pdf Binary files differindex 9ddd1a9f99..d432342c1e 100644 --- a/macros/latex/contrib/tagpdf/ex-patch-list-luatex.pdf +++ b/macros/latex/contrib/tagpdf/ex-patch-list-luatex.pdf diff --git a/macros/latex/contrib/tagpdf/ex-patch-list-obsolete.tex b/macros/latex/contrib/tagpdf/ex-patch-list-obsolete.tex new file mode 100644 index 0000000000..7245dd39b8 --- /dev/null +++ b/macros/latex/contrib/tagpdf/ex-patch-list-obsolete.tex @@ -0,0 +1,100 @@ +% !Mode:: "TeX:DE:UTF-8:Main" + + +%!! Obsolete example as it uses manual tagging of paragraph. +% Check the newer version ex-patch-list for a simpler version! + +%This example shows how one can patch lists command +%it is based on enumitem + +%It uses a command to end \item (\meti). It is perhaps possible to hide this command +% inside \item/end{list}, but with nested list it is not so easy. + +% not really up-to-date, with paratagging one could simplify things. + +% Pay attention to casing. Li/LI, Lbody/Lbody are different. +%no page break involved. So the example works in lua and generic mode +\RequirePackage{pdfmanagement-testphase} +\DeclareDocumentMetadata{pdfversion=1.7,uncompress} + +\documentclass{scrbook} +\usepackage[english]{babel} +\usepackage{tagpdf} + +\usepackage{iftex} +\iftutex + \usepackage{fontspec} + \usepackage{luacode} +\else + \usepackage[T1]{fontenc} +\fi + + + +\tagpdfsetup{tabsorder=structure, + activate, + } + +\usepackage{lipsum}%\textheight3cm + +\usepackage{enumitem,xpatch} + +\makeatletter + +\newcommand\tag@enit@format@preset[1]{% + \tagstructbegin{tag=LI}% + \tagstructbegin{tag=Lbl}% + \tagmcbegin{tag=Lbl}% + #1% + \tagmcend + \tagstructend %end Lbl + \tagstructbegin{tag=LBody}} + +\newcommand\meti{% end of \item + \tagstructend %end of LBody + \tagstructend %end of LI +} + +\xpatchcmd\enit@preset{\@firstofone}{\tag@enit@format@preset}{}{\fail} + +\setlist{ + before*=\tagstructbegin{tag=L}, + after*={\tagstructend}} + +% keys that overwrite \enit@format must be patched, eg like the follow +% the font key should be patched in a similar way +\enitkv@key{enumitem}{format}{% + \def\enit@format{% + \tagstructbegin{tag=LI}% + \tagstructbegin{tag=Lbl}% + \tagmcbegin{tag=Lbl}% + #1\tagmcend}} +\makeatother +% marking of the text inside the list can not be handled automatically -- one doesn't know the type +% we use simple P here +\newcommand\TAGP{\tagstructbegin{tag=P}\tagmcbegin{tag=P}} +\newcommand\PGAT{\tagmcend\tagstructend} + +\begin{document} +%I don't want to handle pagestyles, so set everything to empty: +\pagestyle{empty}\renewcommand\chapterpagestyle{empty} + + + +\begin{itemize} +\item \TAGP Ducks say quack\PGAT\meti +\item \TAGP Marmots say something Parmotlike\PGAT\meti +\end{itemize} + +\begin{enumerate} +\item \TAGP The highest pass is the Col de l'Iseran.\PGAT\meti +\item \TAGP The second highest pass is the Passo dello Stelvio.\PGAT\meti +\end{enumerate} + +\begin{description} +\item[ducks] \TAGP yellow\PGAT\meti +\item[marmots] \TAGP brown\PGAT\meti +\end{description} + + +\end{document}
\ No newline at end of file diff --git a/macros/latex/contrib/tagpdf/ex-patch-list.tex b/macros/latex/contrib/tagpdf/ex-patch-list.tex index d6485c86fe..30448c6a80 100644 --- a/macros/latex/contrib/tagpdf/ex-patch-list.tex +++ b/macros/latex/contrib/tagpdf/ex-patch-list.tex @@ -1,24 +1,25 @@ % !Mode:: "TeX:DE:UTF-8:Main" -%This example shows how one can patch lists command -%it is based on enumitem +% This example shows how one can patch lists command +% it is based on enumitem -%It uses a command to end \item (\meti). It is perhaps possible to hide this command -% inside \item/end{list}, but with nested list it is not so easy. +% Pay attention to casing. Li/LI, Lbody/Lbody are different. -% not really up-to-date, with paratagging one could simplify things. +% It doesn't test nesting! + +% We are using \DocumentMetadata +% This requires a new pdfmanagement and/or latex-dev! +% Older systems should use \DeclareDocumentMetadata +\IfFormatAtLeastTF{2022-06-01}{} + {\RequirePackage{pdfmanagement-testphase}} +\DocumentMetadata{pdfversion=1.7,uncompress,testphase=tagpdf} -% Pay attention to casing. Li/LI, Lbody/Lbody are different. -%no page break involved. So the example works in lua and generic mode -\RequirePackage{pdfmanagement-testphase} -\DeclareDocumentMetadata{pdfversion=1.7,uncompress} \documentclass{scrbook} \usepackage[english]{babel} -\usepackage{tagpdf} \usepackage{iftex} -\iftutex +\ifluatex \usepackage{fontspec} \usepackage{luacode} \else @@ -27,49 +28,53 @@ -\tagpdfsetup{tabsorder=structure, - activate, - } +\tagpdfsetup + { + tabsorder=structure, + } \usepackage{lipsum}%\textheight3cm \usepackage{enumitem,xpatch} -\makeatletter +% At first we add to the begin/end hooks the structure commands. +% To avoid problems with nested paragraphs we force a new paragraph for now. +% Real code should avoid that! +\AddToHook{env/itemize/begin}{\par\tagstructbegin{tag=L}}%\par is needed to close the paragraph before. +\AddToHook{env/itemize/end}{\par\tagstructend\tagstructend\tagstructend}%LBody,LI,L +\AddToHook{env/enumerate/begin}{\par\tagstructbegin{tag=L}} +\AddToHook{env/enumerate/end}{\par\tagstructend\tagstructend\tagstructend}%LBody,LI,L +\AddToHook{env/description/begin}{\par\tagstructbegin{tag=L}} +\AddToHook{env/description/end}{\par\tagstructend\tagstructend\tagstructend}%LBody,LI,L +\makeatletter +\ExplSyntaxOn +%We detect is this is the first or a follow up item where we have to end a structure first: \newcommand\tag@enit@format@preset[1]{% - \tagstructbegin{tag=LI}% - \tagstructbegin{tag=Lbl}% - \tagmcbegin{tag=Lbl}% - #1% + \str_if_eq:eeTF { \prop_item:cn { g__tag_struct_\g__tag_struct_stack_current_tl _prop }{S} }{/L} + { + %\typeout{BEGIN~OF~LIST} + } + {%\typeout{NEXT ITEM} + \tagstructend\tagstructend} % for the LBody/LI + \tagstructbegin{tag=LI} + \tagstructbegin{tag=Lbl} + \tagmcbegin{tag=Lbl} + #1 \tagmcend - \tagstructend %end Lbl - \tagstructbegin{tag=LBody}} - -\newcommand\meti{% end of \item - \tagstructend %end of LBody - \tagstructend %end of LI -} + \tagstructend + \tagstructbegin{tag=LBody} + } + +\ExplSyntaxOff \xpatchcmd\enit@preset{\@firstofone}{\tag@enit@format@preset}{}{\fail} +%close mc from paratagging and reopen ... +\xpatchcmd\@item{\box\@labels}{\tagmcend \box\@labels \tagmcbegin{tag=P}}{}{\fail} -\setlist{ - before*=\tagstructbegin{tag=L}, - after*={\tagstructend}} - -% keys that overwrite \enit@format must be patched, eg like the follow -% the font key should be patched in a similar way -\enitkv@key{enumitem}{format}{% - \def\enit@format{% - \tagstructbegin{tag=LI}% - \tagstructbegin{tag=Lbl}% - \tagmcbegin{tag=Lbl}% - #1\tagmcend}} \makeatother -% marking of the text inside the list can not be handled automatically -- one doesn't know the type -% we use simple P here -\newcommand\TAGP{\tagstructbegin{tag=P}\tagmcbegin{tag=P}} -\newcommand\PGAT{\tagmcend\tagstructend} + + \begin{document} %I don't want to handle pagestyles, so set everything to empty: @@ -78,18 +83,18 @@ \begin{itemize} -\item \TAGP Ducks say quack\PGAT\meti -\item \TAGP Marmots say something Parmotlike\PGAT\meti +\item Ducks say quack +\item Marmots say something Parmotlike \end{itemize} \begin{enumerate} -\item \TAGP The highest pass is the Col de l'Iseran.\PGAT\meti -\item \TAGP The second highest pass is the Passo dello Stelvio.\PGAT\meti +\item The highest pass is the Col de l'Iseran. +\item The second highest pass is the Passo dello Stelvio. \end{enumerate} \begin{description} -\item[ducks] \TAGP yellow\PGAT\meti -\item[marmots] \TAGP brown\PGAT\meti +\item[ducks] yellow +\item[marmots] brown \end{description} diff --git a/macros/latex/contrib/tagpdf/ex-patch-sectioning-koma-luatex.pdf b/macros/latex/contrib/tagpdf/ex-patch-sectioning-koma-luatex.pdf Binary files differindex c0e033318c..2b76c005a8 100644 --- a/macros/latex/contrib/tagpdf/ex-patch-sectioning-koma-luatex.pdf +++ b/macros/latex/contrib/tagpdf/ex-patch-sectioning-koma-luatex.pdf diff --git a/macros/latex/contrib/tagpdf/ex-patch-sectioning-koma.pdf b/macros/latex/contrib/tagpdf/ex-patch-sectioning-koma.pdf deleted file mode 100644 index 4b1ceb47ad..0000000000 --- a/macros/latex/contrib/tagpdf/ex-patch-sectioning-koma.pdf +++ /dev/null @@ -1,2134 +0,0 @@ -%PDF-1.7 -% -11 0 obj -<< /MCID 0 >> -endobj -16 0 obj -<< /MCID 1 >> -endobj -18 0 obj -<< /MCID 2 >> -endobj -20 0 obj -<< /MCID 3 >> -endobj -23 0 obj -<< /MCID 4 >> -endobj -25 0 obj -<< /MCID 5 >> -endobj -28 0 obj -<< /MCID 6 >> -endobj -30 0 obj -<< /MCID 7 >> -endobj -32 0 obj -<< /MCID 8 >> -endobj -35 0 obj -<< /MCID 9 >> -endobj -37 0 obj -<< /MCID 10 >> -endobj -39 0 obj -<< /MCID 11 >> -endobj -41 0 obj -<< -/Length 5594 ->> -stream -/opacity1 gs -/H1 /l3pdf1 BDC -BT -/F32 20.6625 Tf 59.528 690.672 Td [(Contents)]TJ -ET -EMC -/Lbl /l3pdf2 BDC -BT -/F29 10.9091 Tf 59.528 653.751 Td [(1)]TJ -ET -EMC -/P /l3pdf3 BDC -BT -/F29 10.9091 Tf 75.798 653.751 Td [(c)28(hapter)]TJ -ET -EMC -/Reference /l3pdf4 BDC -BT -/F29 10.9091 Tf 470.797 653.751 Td [(3)]TJ -ET -EMC -/P /l3pdf5 BDC -BT -/F29 10.9091 Tf 59.528 629.354 Td [(c)28(hapter)]TJ -ET -EMC -/Reference /l3pdf6 BDC -BT -/F29 10.9091 Tf 470.797 629.354 Td [(5)]TJ -ET -EMC -/Lbl /l3pdf7 BDC -BT -/F29 10.9091 Tf 75.798 615.805 Td [(1.1)]TJ -ET -EMC -/P /l3pdf8 BDC -BT -/F29 10.9091 Tf 100.747 615.805 Td [(section)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 138.478 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 146.947 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 155.416 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 163.885 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 172.355 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 180.824 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 189.293 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 197.762 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 206.231 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 214.701 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 223.17 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 231.639 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 240.108 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 248.578 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 257.047 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 265.516 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 273.985 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 282.454 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 290.924 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 299.393 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 307.862 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 316.331 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 324.801 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 333.27 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 341.739 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 350.208 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 358.677 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 367.147 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 375.616 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 384.085 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 392.554 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 401.023 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 409.493 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 417.962 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 426.431 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 434.9 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 443.37 615.805 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 451.839 615.805 Td [(.)]TJ -ET -EMC -/Reference /l3pdf9 BDC -BT -/F29 10.9091 Tf 470.797 615.805 Td [(5)]TJ -ET -EMC -/Lbl /l3pdf10 BDC -BT -/F29 10.9091 Tf 100.747 602.256 Td [(1.1.1)]TJ -ET -EMC -/P /l3pdf11 BDC -BT -/F29 10.9091 Tf 135.458 602.256 Td [(subsection)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 189.293 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 197.762 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 206.231 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 214.701 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 223.17 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 231.639 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 240.108 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 248.578 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 257.047 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 265.516 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 273.985 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 282.454 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 290.924 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 299.393 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 307.862 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 316.331 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 324.801 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 333.27 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 341.739 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 350.208 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 358.677 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 367.147 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 375.616 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 384.085 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 392.554 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 401.023 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 409.493 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 417.962 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 426.431 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 434.9 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 443.37 602.256 Td [(.)]TJ -ET -EMC -/Artifact BMC -BT -/F29 10.9091 Tf 451.839 602.256 Td [(.)]TJ -ET -EMC -/Reference /l3pdf12 BDC -BT -/F29 10.9091 Tf 470.797 602.256 Td [(5)]TJ -ET -EMC - -endstream -endobj -12 0 obj -<< -/Type /Page -/Contents 41 0 R -/Resources 40 0 R -/MediaBox [0 0 595.276 841.89] -/Tabs /S /StructParents 0 -/Parent 44 0 R ->> -endobj -40 0 obj -<< -/Properties <</l3pdf1 11 0 R /l3pdf2 16 0 R /l3pdf3 18 0 R /l3pdf4 20 0 R /l3pdf5 23 0 R /l3pdf6 25 0 R /l3pdf7 28 0 R /l3pdf8 30 0 R /l3pdf9 32 0 R /l3pdf10 35 0 R /l3pdf11 37 0 R /l3pdf12 39 0 R >>/ExtGState 1 0 R -/Font << /F32 42 0 R /F29 43 0 R >> -/ProcSet [ /PDF /Text ] ->> -endobj -47 0 obj -<< -/Length 13 ->> -stream -/opacity1 gs - -endstream -endobj -46 0 obj -<< -/Type /Page -/Contents 47 0 R -/Resources 45 0 R -/MediaBox [0 0 595.276 841.89] -/Tabs /S /StructParents 1 -/Parent 44 0 R ->> -endobj -45 0 obj -<< -/ExtGState 1 0 R -/ProcSet [ /PDF ] ->> -endobj -49 0 obj -<< /MCID 0 >> -endobj -51 0 obj -<< /MCID 1 >> -endobj -53 0 obj -<< -/Length 157 ->> -stream -/opacity1 gs -/H1 /l3pdf13 BDC -BT -/F32 20.6625 Tf 59.528 690.672 Td [(1)]TJ -ET -EMC -/H1 /l3pdf14 BDC -BT -/F32 20.6625 Tf 83.699 690.672 Td [(chapter)]TJ -ET -EMC - -endstream -endobj -50 0 obj -<< -/Type /Page -/Contents 53 0 R -/Resources 52 0 R -/MediaBox [0 0 595.276 841.89] -/Tabs /S /StructParents 2 -/Parent 44 0 R ->> -endobj -52 0 obj -<< -/Properties <</l3pdf13 49 0 R /l3pdf14 51 0 R >>/ExtGState 1 0 R -/Font << /F32 42 0 R >> -/ProcSet [ /PDF /Text ] ->> -endobj -56 0 obj -<< -/Length 13 ->> -stream -/opacity1 gs - -endstream -endobj -55 0 obj -<< -/Type /Page -/Contents 56 0 R -/Resources 54 0 R -/MediaBox [0 0 595.276 841.89] -/Tabs /S /StructParents 3 -/Parent 44 0 R ->> -endobj -54 0 obj -<< -/ExtGState 1 0 R -/ProcSet [ /PDF ] ->> -endobj -58 0 obj -<< /MCID 0 >> -endobj -61 0 obj -<< /MCID 1 >> -endobj -62 0 obj -<< /MCID 2 >> -endobj -64 0 obj -<< /MCID 3 >> -endobj -65 0 obj -<< /MCID 4 >> -endobj -67 0 obj -<< /MCID 5 >> -endobj -68 0 obj -<< /MCID 6 >> -endobj -70 0 obj -<< /MCID 7 >> -endobj -1 0 obj -<< /opacity1 <</ca 1/CA 1>> >> -endobj -72 0 obj -<< -/Length 595 ->> -stream -/opacity1 gs -/H1 /l3pdf15 BDC -BT -/F32 20.6625 Tf 59.528 690.672 Td [(chapter)]TJ -ET -EMC -/H2 /l3pdf16 BDC -BT -/F41 14.3462 Tf 59.528 649.367 Td [(1.1)]TJ -ET -EMC -/H2 /l3pdf17 BDC -BT -/F41 14.3462 Tf 88.826 649.367 Td [(section)]TJ -ET -EMC -/H3 /l3pdf18 BDC -BT -/F42 11.9552 Tf 59.528 624.619 Td [(1.1.1)]TJ -ET -EMC -/H3 /l3pdf19 BDC -BT -/F42 11.9552 Tf 93.89 624.619 Td [(subsection)]TJ -ET -EMC -/H4 /l3pdf20 BDC -EMC -/H4 /l3pdf21 BDC -BT -/F31 10.9091 Tf 59.528 604.026 Td [(subsubsection)]TJ -ET -EMC -/P /l3pdf22 BDC -BT -/F29 10.9091 Tf 59.528 583.433 Td [(a)-331(paragraph)]TJ 10.847 -13.549 Td [(x)]TJ -ET -EMC - -endstream -endobj -59 0 obj -<< -/Type /Page -/Contents 72 0 R -/Resources 71 0 R -/MediaBox [0 0 595.276 841.89] -/Tabs /S /StructParents 4 -/Parent 44 0 R ->> -endobj -71 0 obj -<< -/Properties <</l3pdf15 58 0 R /l3pdf16 61 0 R /l3pdf17 62 0 R /l3pdf18 64 0 R /l3pdf19 65 0 R /l3pdf20 67 0 R /l3pdf21 68 0 R /l3pdf22 70 0 R >>/ExtGState 1 0 R -/Font << /F32 42 0 R /F41 73 0 R /F42 74 0 R /F31 75 0 R /F29 43 0 R >> -/ProcSet [ /PDF /Text ] ->> -endobj -76 0 obj -<< /Marked true >> -endobj -6 0 obj -<< /Nums [0 [ 10 0 R 15 0 R 17 0 R 19 0 R 22 0 R 24 0 R 27 0 R 29 0 R 31 0 R 34 0 R 36 0 R 38 0 R ] -1 [ ] -2 [ 48 0 R 48 0 R ] -3 [ ] -4 [ 57 0 R 60 0 R 60 0 R 63 0 R 63 0 R 66 0 R 66 0 R 69 0 R ] -] >> -endobj -7 0 obj -<< /DocumentFragment /Art /Aside /Note /Title /H1 /Sub /Span /H7 /H6 /H8 /H6 /H9 /H6 /H10 /H6 /FENote /Note /Em /Span /Strong /Span >> -endobj -8 0 obj -[ ] -endobj -9 0 obj -<< /Type /StructElem /S /Document /P 5 0 R /K [10 0 R 13 0 R 48 0 R 57 0 R 60 0 R 63 0 R 66 0 R 69 0 R] >> -endobj -10 0 obj -<< /Type /StructElem /S /H1 /P 9 0 R /K <</Type /MCR /Pg 12 0 R/MCID 0>> >> -endobj -13 0 obj -<< /Type /StructElem /S /TOC /P 9 0 R /K [14 0 R 21 0 R 26 0 R 33 0 R] >> -endobj -14 0 obj -<< /Type /StructElem /S /TOCI /P 13 0 R /K [15 0 R 17 0 R 19 0 R] >> -endobj -15 0 obj -<< /Type /StructElem /S /Lbl /P 14 0 R /K <</Type /MCR /Pg 12 0 R/MCID 1>> >> -endobj -17 0 obj -<< /Type /StructElem /S /P /P 14 0 R /K <</Type /MCR /Pg 12 0 R/MCID 2>> >> -endobj -19 0 obj -<< /Type /StructElem /S /Reference /P 14 0 R /K <</Type /MCR /Pg 12 0 R/MCID 3>> >> -endobj -21 0 obj -<< /Type /StructElem /S /TOCI /P 13 0 R /K [22 0 R 24 0 R] >> -endobj -22 0 obj -<< /Type /StructElem /S /P /P 21 0 R /K <</Type /MCR /Pg 12 0 R/MCID 4>> >> -endobj -24 0 obj -<< /Type /StructElem /S /Reference /P 21 0 R /K <</Type /MCR /Pg 12 0 R/MCID 5>> >> -endobj -26 0 obj -<< /Type /StructElem /S /TOCI /P 13 0 R /K [27 0 R 29 0 R 31 0 R] >> -endobj -27 0 obj -<< /Type /StructElem /S /Lbl /P 26 0 R /K <</Type /MCR /Pg 12 0 R/MCID 6>> >> -endobj -29 0 obj -<< /Type /StructElem /S /P /P 26 0 R /K <</Type /MCR /Pg 12 0 R/MCID 7>> >> -endobj -31 0 obj -<< /Type /StructElem /S /Reference /P 26 0 R /K <</Type /MCR /Pg 12 0 R/MCID 8>> >> -endobj -33 0 obj -<< /Type /StructElem /S /TOCI /P 13 0 R /K [34 0 R 36 0 R 38 0 R] >> -endobj -34 0 obj -<< /Type /StructElem /S /Lbl /P 33 0 R /K <</Type /MCR /Pg 12 0 R/MCID 9>> >> -endobj -36 0 obj -<< /Type /StructElem /S /P /P 33 0 R /K <</Type /MCR /Pg 12 0 R/MCID 10>> >> -endobj -38 0 obj -<< /Type /StructElem /S /Reference /P 33 0 R /K <</Type /MCR /Pg 12 0 R/MCID 11>> >> -endobj -48 0 obj -<< /Type /StructElem /S /H1 /P 9 0 R /K [<</Type /MCR /Pg 50 0 R/MCID 0>> <</Type /MCR /Pg 50 0 R/MCID 1>>] >> -endobj -57 0 obj -<< /Type /StructElem /S /H1 /P 9 0 R /K <</Type /MCR /Pg 59 0 R/MCID 0>> >> -endobj -60 0 obj -<< /Type /StructElem /S /H2 /P 9 0 R /K [<</Type /MCR /Pg 59 0 R/MCID 1>> <</Type /MCR /Pg 59 0 R/MCID 2>>] >> -endobj -63 0 obj -<< /Type /StructElem /S /H3 /P 9 0 R /K [<</Type /MCR /Pg 59 0 R/MCID 3>> <</Type /MCR /Pg 59 0 R/MCID 4>>] >> -endobj -66 0 obj -<< /Type /StructElem /S /H4 /P 9 0 R /K [<</Type /MCR /Pg 59 0 R/MCID 5>> <</Type /MCR /Pg 59 0 R/MCID 6>>] >> -endobj -69 0 obj -<< /Type /StructElem /S /P /P 9 0 R /K <</Type /MCR /Pg 59 0 R/MCID 7>> /ActualText <FEFF0061006200630021> >> -endobj -5 0 obj -<< /Type /StructTreeRoot /K 9 0 R /ParentTree 6 0 R /RoleMap 7 0 R /Namespaces 8 0 R >> -endobj -78 0 obj -[565 489.6 565 502.5 336.6 550.8 565 259 289.6 534.4 259 871 565 550.8 565 565 374.3 422.3 397.8 565] -endobj -79 0 obj -[312.4 562.4 562.4 562.4 562.4 562.4 562.4 562.4 562.4 562.4 562.4 562.4 312.4 312.4 874.8 874.8 874.8 531.1 749.8 742.9 746.3 718.6 808.8 671.1 639.9 749.8 786.8 305.5 527.6 774.1 608.6 974.3 786.8 830.8 715.1 830.8 724.4 624.8 768.3 764.9 742.9 1055.3 742.9 742.9 687.3 339 562.4 339 687.3 874.8 312.4 539.2 578.6 499.9 578.6 510.9 343.7 562.4 578.6 266.1 297.4 547.3 266.1 891 578.6 562.4 578.6 578.6 383 431.1 406.1 578.6] -endobj -80 0 obj -[319.1 574.4 574.4 574.4 574.4 574.4 574.4 574.4 574.4 574.4 574.4 574.4 319.1 319.1 893.5 893.5 893.5 542.5 765.8 767.2 766.5 733.9 830.3 681.6 649.7 765.8 820.1 320.4 543.1 799.1 617.8 1011.6 820.1 840.5 734.6 840.5 740 638.2 776.7 793.6 767.2 1086.3 767.2 767.2 702 348.3 574.4 348.3 702 893.5 319.1 550.7 590.8 510.6 590.8 523.9 351 574.4 590.8 271.7 303.7 558.9 271.7 909.9 590.8 574.4 590.8 590.8 391.2 440.4 414.8] -endobj -81 0 obj -[276.4 497.2 497.2 497.2 497.2 497.2 497.2 497.2 497.2 497.2 497.2 497.2 276.4 276.4 773.2 773.2 773.2 469.6 773.2 745.3 704 718 759.2 676.4 648.8 780 745.3 358.9 510.8 772.9 621.2 910.9 745.3 773.2 676.4 773.2 731.6 552.4 718 745.3 745.3 1021.3 745.3 745.3 607.6 276.4 497.2 276.4 607.6 773.2 276.4 497.2 552.4 442 552.4 442 304 497.2 552.4 276.4 304 524.8 276.4 828.4 552.4 497.2 552.4 524.8 386.8 392.3 386.8 552.4 524.8 718 524.8] -endobj -82 0 obj -[584.9 584.9 584.9 584.9 584.9 584.9 584.9 584.9 584.9 325 325 909.9 909.9 909.9 552.4 779.9 781.2 780.6 747.4 845.5 706.8 674.3 779.9 822.5 326.3 553.1 813.7 641.8 1017.4 822.5 868.6 748.1 868.6 759.9 649.9 803.6 801.8 781.2 1106.2 781.2 781.2 714.9 343.9 584.9 343.9 714.9 909.9 325 562.8 605.7 519.9 605.7 522.6 357.5 584.9 605.7 280.8 313.3 573.2 280.8 930.7 605.7 584.9 605.7 605.7 400.3 448.4 422.4] -endobj -83 0 obj -<< -/Length1 721 -/Length2 14150 -/Length3 0 -/Length 14871 ->> -stream -%!FontType1-1.0: SFRM1095 0.3 -%%CreationDate: Wed Sep 12 2001 -% Copyright (c) 2001 Vladimir Volovich <vvv@vsu.ru>. -% See the file COPYING (GNU General Public License) for license conditions. -% Converted from METAFONT EC/TC and LH fonts: -% ecrm1095, tcrm1095, larm1095, lbrm1095, lcrm1095, rxrm1095. -11 dict begin -/FontInfo 6 dict dup begin -/version (0.3) def -/FullName (Computer Modern Roman) def -/FamilyName (Computer Modern) def -/ItalicAngle 0 def -/isFixedPitch false def -/Weight (Medium) def -end readonly def -/FontName /HHSFZO+SFRM1095 def -/Encoding StandardEncoding def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] def -/FontBBox{-188 -320 1445 942}readonly def -currentdict end -currentfile eexec -oc;j~EЪ+`U+1;[ihd_Twρb=I"aě!]#g~Q^VmcNtقP*4Jq=G1`ސnG)]'Ze+hb?%_hpY5(9Թ-H$-:ynK")cff,vrG+@) -`{/}*D@Vٴ:Ix`(]-.a1ŗ/O)@0p<n-fe̸=yrB<S'Z챒ZyDX㣢}'MZc|-5,fש39٦4y5+:
g}`)H@ R/{x}PzH2LK$Q "jGϜd;'w-+=0"e<a{6 -oK^"]npY\NCE,pJ˪ڻWGBdSQis;叮՝dɷziR?X<nJgD -AwkR+-]&9Ze"J{|+<+r3K0Dw(
yVRfۢOű8EFxx~lϧA&۫+|~n0+=K9ʧ) -C*j -ʢضʸ -Fo?apt#`J68%`o -1=31#QtP#Y?>IѹB@=TLX+2*"V&uNQXKfHt*NxsH*J1Kl<OFxgt#Lڟl&!^cnԘ,ҷe4I>a C^B -R];{ܻb9|4A_cؤ1t-b0q+E0Lf1XwcU?3B0Y>҉m'D&G;GwV![ŘҭckdmuV~w^Wc Pesoph>5T&^WUۉ) -ǗNhSHWd<]"}[w"L9 !0G7!l_gג.V͇b>*[ -V8hn^$w8"."~ bG!eIxJu[Q[HШQ&Kp5d %f -`R^g
)alCY
5ÌG̖) #|FrHY\ISާ)dPbXOPʶ|b¢D,<qULQzJXW!wShn BdcP0Y>҉m'eHUDџ6D{zr#}q]`ќd!ea"\9E9D*R1[6gw}ϰ@8 -* -sZd<"sXAyt`ve -e|r5|7* -}V!PFq:b?`29Ҿ
. Ac BxwQz6䴊Y(Ub`ؓȇ·svJ[ -v~ -u@5/V_-/^^dHZZVXGBѢX -%z"QųoŹDEZYGqlP:!eVX~[l$3jY XU}6y~^yOOy,Io\o7WQ]f?:uEYRD|IMJ5wt(ڕL)HkԉqXI[0u8l@V62N$*,!94&LҾ!"7o$?i[Y>9iue!H(ds,3'1[͞L̈<!^Phx&^@ݥ
{~!<ن`:y&_a5TX2zzH+3ږA8G?O?Ml - -F?5gH3Qɼe'i7&9Y+BI'o,l686h?c)CTrH!7a=1awscpDHaKҏR6<}[/Uذ3qЀBJɌ2W"`6G1/CPuY<$W86%,H9qyH3pWz"#\tK6=k -?m? -EK=ie~hACVS'BZ",-C`{F)Ђ_I$Lb{apys̠\[447?TMd~$%, ogASi%GAn@ sy]pq!ldKnr? \":.Zt&uqxN*ZjRT*dr 5߆/F`꾢)-Iѯ;a7hE?bV~B4Uװg>6j3e 7a0U -ˁ1纷pN8Y!7_3)o^Z@]_?U'
p̬{uA"o%\g7xZ3gVU?8"_a&wl
(ؑiɍ$k":n2Xm*QՎI5W0Q/\# ҡu93ZDQx$ -ajKr6JcZ|{y7W >aDS36 -X0}!3He
65+o -.+>ǗsP%gwe7|T rXL$b& -r>xz:\i:Va kzC~S~Sƾ~)گ]1Kֿ -dL`|VcH)>}z4Ssh c*b
aŢF+r\7wV{8RlGёPw=K'Ǒw
-إn;u˾#SoҦd-.nLp%N<ifj, -(CZ߮C>"sd~_{I<i_!J/7x飠5xuu`s_z9JnG$k2'& TS!i41Bۨ}:"k}ߩf&'u"23C{ ~)Ū3zF!+J8 -wSZS;Ve
JJjgx}Z' -bGI3OW rNAc,[@ҋN7Ф<,<}o@rW\fv=ҊA =bSk FCry.Gܭٌ`](x-NW2k!BhVW@?,[- ^`{p ۡ9PP,&I6`f㩹uKoǴ9Kyb_mô5+?sV -0C
5;{%+&ve
N%3]MRhYDT{]N=.\o!jX]V>M9ZɃS!DcSYl1W]f -KD{6sH^S Ub˾]/b|]hcpR)3qK0!a)dM`®Ss"HzSLg>Yt -g5g
i"; Zuk=V~ӂ-+
qlhUMe$uqP須4<kū[{+S{SJ)E..qZJj&@Ll4L-0ٳV<5rbY) [p[,eŴNhye,ɤK2TC?-=dCs:hT~gXݵknXwh&{i^9z^I54#O&eI&fdMIo8/~]R(+ԼAcU#KQگ(]'*O௷RpR~$b.@%xaYRR=D7LDA=Ad#Sާ-%ݐS0op"Q¼s%9Vxz3w(_/롘ydqEHDd()lF}/QC4|*]Zo,^oJ˷<g7{|T`=!zE?Ź@E(Ax|,& -탲ܯ&x:O;#dxUn]#\H>dC|u*X=WZL{%flJ~rvH -(iGYhvO0Wcߨ|BM##
L+G,bD=45.UDq')[~&)
`(5?ձJ:A
`e dWcĖK@Uـ;lbd`+CI)B&"&1d1iKk݁5Nn<=dp~+أ -¶&"]qU!vj+MooTiu* -%</B˙UהrV@ik7
7=R{fb!cBx/Jj'>NWTs96z?(&Bt<$===pɏzSüF 2֜/ \8[CEFͿFfGPbv<JYᨉ6tLԆ -Acl!{v\n@!)%o2qXb% -i@ڈT>dL읽ex6dZhp"K {E{f詊TikIʵE9鮫}OJȊ*Q[0 x0d,#]9|(79n.<
m`'c7;B$JB7hC1VuR Vp`ITP{NvEdMOrPNx/V%Rޑep2=@sXDo݀:d؛k,$NIuڿ\tI$)qkz~7LVOo&Kqp_[QbFln8[aڤ[$8qY9
{ EUV.ysGߑ3mCp0WxYdcTVEoez.nw$3 -8QVd'3`9HvJ7)o &a -t42MUO(} 3^Z*3sZ#l{i[yLn08/2qLȕԱ]EB[ɳkZo8
Rۊ -j=p^*^)*ڬmP:7SYc2g%'&%ޥ1?2@jE3tl!9 -U9>cLM?#{zf7|Iw諎C.V/~e%YOY# -:)
Jrv5W(#эϋ] ;s"cm@Iˏ'+>*?nB29QγP(M|_Ib.NIVĻ?~$~L<Q"BQ]9Ax)4I!I {lۯ?^XL{Opa
K*X~%dC|0!+zM8KuR)Tuz},'˺vp;"˔ᤉiÒs.2
gpX=Zx4ZVǺ-OFy3N]I> 0ll2}vWGj?ܮfxϻ~\N]tR)UQHD{Asl33l'`o7V -8 -Yoe${S·$`gW~_99kuOW"i = l}yz}Q}xihʢBainXUAʐ\eNVЀ._
e/'#ي~"!=Re -!GQMy
jzg&}eHa]Д":gDZ3.qw"wSF˷:THY 6"6}'>OK=O7YIGVEc'!FW%zERfʎ\)o:|>**S+g0U͂Dž\O#pEs@x%Т\?[ߴ$ȣ'j6Em J kclzuNX۟)zuEoǜ%v{
9-5;I疲^jtb.0J;FxR#a@j` -9J5~@Km* #ذ>.by*y<B,\GJN,lVZ$/6G~n0FH4^Jժ=&炕lm14*ݻrqEύkX7smxfACǑ|)q:-㫔z -)џ
-*#~~WnwKNNZ6yh!%`V9Pf -9
NQiF3ǝqdSgx~p#-xNS -ִ݈gVL
)m&V-y[8G:%`wl*gZi2;XJ
tZjkI3H -DpXاfZR
l8s먴up{M+ Tky
SB
vRu3 -endstream -endobj -84 0 obj -<< -/Type /FontDescriptor -/FontName /HHSFZO+SFRM1095 -/Flags 4 -/FontBBox [-188 -320 1445 942] -/Ascent 689 -/CapHeight 689 -/Descent -194 -/ItalicAngle 0 -/StemV 50 -/XHeight 430 -/CharSet (/a/b/c/e/five/g/h/i/n/o/one/p/period/r/s/t/three/u/x) -/FontFile 83 0 R ->> -endobj -85 0 obj -<< -/Length1 738 -/Length2 12419 -/Length3 0 -/Length 13157 ->> -stream -%!FontType1-1.0: SFSX1095 0.3 -%%CreationDate: Wed Sep 12 2001 -% Copyright (c) 2001 Vladimir Volovich <vvv@vsu.ru>. -% See the file COPYING (GNU General Public License) for license conditions. -% Converted from METAFONT EC/TC and LH fonts: -% ecsx1095, tcsx1095, lasx1095, lbsx1095, lcsx1095, rxsx1095. -11 dict begin -/FontInfo 6 dict dup begin -/version (0.3) def -/FullName (Computer Modern Sans Serif Bold Extended) def -/FamilyName (Computer Modern) def -/ItalicAngle 0 def -/isFixedPitch false def -/Weight (Bold) def -end readonly def -/FontName /FKLUEV+SFSX1095 def -/Encoding StandardEncoding def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] def -/FontBBox{-229 -332 1765 914}readonly def -currentdict end -currentfile eexec -oc;j~EЪ+`U+1;[ihd_Twρb=I"aě!]#g~Q^VmcNtقP*4Jq=G1`ސnG)]'Ze+hb?%_hpY5(9>(&sـ1
7_lu~N 7cG2~VhwdO_Fh-J&(jrqQ<
+V\@RxL -6}f *|s5 -پQp~!֘Iqyd!L"0L|8(;uԒb -2%nS`sg|wvq+,Yʞ
t\3}h cs*aV\% y9Hw EOdW&!677߫A/RFj߬inM«L'{rUzo@eA>!7o7b!j'N&(_N~<-k!~;dqS]%
:A871oGE||43 -JUcc'z`/j;p/4?=d9 -$rXudư -{|`t}c72f,WFǦ$|`.2DsVRf[fg|jiCTjk}θn_{?Kp9ô0yzf9gC]OI[+̚Gѣ*$3W t]*Te$"N6 -.iUX,o$[*EF՝Uj1n6͐Cb<']aEۧ~$fTM#<-G,+t+*xzm=B`Zkz1T0 t*>@3+iRM3+w˼83`o} ;rJ6wQύN0t6p{9ȑ]WeO]ln%VD1y r^`es%]UTfrFr ʛ'|qvYCOIx1Z5!q~dgFX#h,_1bx J-Ȟo -[ 1HsǞ#H-ѸEa"b(k"=oθ%s'g3>G}4g#gReL=>K-W"n` jzȘ֦\)CmLWY$VPodo{篛{'0
rwTz[cmJQY xV &\:,L*w
;B,ĠQ -6[uk\zs'Y`1
A=%ܾV9n`xl^!sb<PhGZclo}M4:jݴAq35:c˱ɧ᭮g1ؠ
't{hOy3))<tq9N҆c"a3l*Թ(O,0Wz_Gj'|}Lh8.K}x>Ս2\$+6I%m;gj)|\h%Uϙ7xtW>U.b - pw;&1Pa9M<NimG0ԡݰC٩ͅޖЖ1\Ay$ȉYRBщn>.DUh M4#RHdzNo| 얾|zFpSVixD|a>WrMKEe?$iERhF<83l= jphfZ;?uEB?M2`
3Q<7ru6CbXDG#\<H\8B9))Q^e\.T>%7U1Wf<'[h4x6UKe-Plw/Nz̫.1즓X{^a){5uPy|FЀ͞mS9N5SCCx5|`S<S1BXO(Ъy[>ThD!U]K)!!ʕ;qn] ߐ2 -==vN~dG{R iб a@cqCO~wa*969vN歹dLϯ\se"\8ǨzYpe,rI -3ykNOXpD*g ȤQFX'Xl7l%%LN#eH!{0G
R= {o 14!@םx4F,4|yZTYX%_V -I؇X\Ѣ,{"PoX/`\3~KZ@W̢=O4mG3UǀQbyh$?:+YJ~0^,g?=G -j'd?v^a+YIZ_UxWWgYj#% >Z kBT5Dm -uܶuP.,Gk캳T
@&F]g -P-qrKT#/~Az=/Le ~ޫ;Zl]u!b=V߂-u/ba -7Ney{@R!h:
Xr$ճw0x0k3nj4B^,ybl-JRk2yPzmQ~6V -OlY6_[V%FKD' -3mnCG -sάͩ5 -͏hj`מ3feيx]_i?h)8ܨ{̮?@F+<hbGӋ\6#w -xH -Qxy4hดOrPkJjuƛLB!̀r$ɲhUe\::'%T*sE`_Xe~}KcNmM9{r.˜Uu8n}IAF<P8jʠk/WgI_feu+oaSJ33ȌpI1R}L]"9+ttU+ -#ڿn^Aa7ȉu$/,*4HºJ~P0d.ݓ`uݩO@8
Ӛ?L/؆[prTuST;6%ˌ(If +է -HdUνA?G!ɭ_0E)Y(܊AhO5f`J_<9FE*j
0)o~PMGT/!t=]U-ZWJ7kw.՜byraЮ\=OLEeo<UW3;B{GVE$ŘN}zu@gWugқYD>5O<郁f$d\</͵A TBoe%O|<(.OHn!:ҢvxSD(T{^NgҖA`]U]81z;|iSP~q2y(d_ď7/]9hji#\ ,RuGQS{l4=2.4\aZ}XiU3_b(ݽ P\eh]U1*iI,N6-3_O>&(2wPVˠj\;|=(P+2\ -hI,JTY -)>GRQs䙿|2pq#5BI#OCU -8Ծ=Mm!>[h?ۘs`dž[ -TCG}P].K%NL3;M$7YSB/؇%2x$7PAA[%hE4%rBbTv&Z -va<':t́FRԸn/'-+n{*vx -X{blɮhK -<dL
- Hq8mNT?^G_OdSXLJ1_%e$CҊgBɶ"v& -nOvՃeM~Y -|gA8LmIr<*,?e'5Rsk2:yn'k- pOOX/p9,3ljsst
mxri6'rq,<j-'OoIt'aHdzNi -ZC^s&0lV1śMpSVP(=譾|dT([T{~>\R C[$iJ+fV qI%w2b-ז?1҆U{m^YZ{%.LwjJUUpu+a^D;G,ajh_j#J8Vqct]8 a'БO['yCux*1KnBAQ厅Ea34gvK%g~fː4o3gIaV(7̶>@A#Xɱ*wNq
+rcݮ4K#XCulIӨj%12륽~)$H58!"+HUgOLw&Ѧ >kscA -endstream -endobj -86 0 obj -<< -/Type /FontDescriptor -/FontName /FKLUEV+SFSX1095 -/Flags 4 -/FontBBox [-229 -332 1765 914] -/Ascent 729 -/CapHeight 694 -/Descent -193 -/ItalicAngle 0 -/StemV 50 -/XHeight 459 -/CharSet (/b/c/e/i/n/o/s/t/u) -/FontFile 85 0 R ->> -endobj -87 0 obj -<< -/Length1 738 -/Length2 12694 -/Length3 0 -/Length 13432 ->> -stream -%!FontType1-1.0: SFSX1200 0.3 -%%CreationDate: Wed Sep 12 2001 -% Copyright (c) 2001 Vladimir Volovich <vvv@vsu.ru>. -% See the file COPYING (GNU General Public License) for license conditions. -% Converted from METAFONT EC/TC and LH fonts: -% ecsx1200, tcsx1200, lasx1200, lbsx1200, lcsx1200, rxsx1200. -11 dict begin -/FontInfo 6 dict dup begin -/version (0.3) def -/FullName (Computer Modern Sans Serif Bold Extended) def -/FamilyName (Computer Modern) def -/ItalicAngle 0 def -/isFixedPitch false def -/Weight (Bold) def -end readonly def -/FontName /KKGAAD+SFSX1200 def -/Encoding StandardEncoding def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] def -/FontBBox{-232 -329 1767 915}readonly def -currentdict end -currentfile eexec -oc;j~EЪ+`U+1;[ihd_Twρb=I"aě!]#g~Q^VmcNtقP*4Jq=G1`ސnG)]'Ze+hb?%_hpY5(97B2]C2Oazݐ*u]QDnX*vZXBĴ,B/4`b8}&PdJؑ!Ics\yFjA2)z-L<i!"qZ
@&M҄R -3,ab<ΌzmTbScMk}X#1dNuH(iKyvdpxˌoj <mod W!k<0nv_][!QЄNVyj۳sҺ[Ʃ -VP{8%T - JV'^LB|<B{"KK -殖މ<2T3)4XOF"QLknS"ۖuFhi,Gh -!$t43tH6hj1D<Q<5EB_r{]Ya?{%((/NRqv##= -FyhA6BJb[R`͆cO]p3cJg>P/!)|pw5IZEh]BU>[X8-64qכ>(FuJzQ.;аE\]2ޞY4]7Yw!*q&H;
tAve4|?hK <ș_<쥱A/fĜ'HQFiȭ~OAr1Z{~+ZQqt`fN*[6W[Qt%g -Y:{MW沨ڙG^P]FJpύA{~#MJ
kʕm0
m |N,3* ?(O><Lex.6)bHEM\/b}`_7UL]T{"nfwN! >؏+` ~Iud]AOy0{4XWK-Ʃ|>8Q"Rhf -o۰;-O1b#60<IS%a!iyEjglE?Y ~z%tZQ}Q$O+tO% -u_ẁdLMKL7%]>z~ 9N<\|]x19]E}5 -띯tnDy8{1.Q@6:N\+P%%[n;%k_X -^ϱp?wofӧ8 -(>T0$'>},OmX'.,$/1NYYrһN!1^{U'XDUrp}8*&_zwhJЩʔ>R#Bu6@G|Hk@ݨ(V?Lz`L0Rш|tʟ]~,T{5fe93Q"}l!7`/*2)}[A2c>4 rTim{:(-0yD% U&fTtnoM3%YI3OǸ&Ð-Q0G?rly[Ϟx99!|8 -_{m_kL~čCG%M͋?rMczrm`|*D;WY`i{?~:jȟ)PS;due|xR%zNMŞp?Fv -V4-0 kYH?,K_d;7U0J0E>Jk)'uc3E*FQtbދuIѩܐDiHc^qWh !MxI͐];Ƌ`Qg)ACT\"pikpk"X`yii L:9å54n!
nd*4"Nx0'o9ɇD -92J~ -1e -op -FsICe./L[N3` -֣rg̚WO=N"Bi;&o7ŵ^' ?yHp؍vKߒm!Q͕VI{HXj -JM[Omg1P̩e_d#'ܞ\хn#5?*|.$XC5Y]4nuA&H"()閬 26Q]ȖDStr&^1kl-b?a,}h8(\yr S!ٮ`[Zr+mX#
$SHx\|ce"jԜ:)C#m%D/X]+.iK܁]w.%Q 'ѧ]I01)m"*䯞*' 7#{:½`)ZUy_y;O6n. UmyÐ,Q 3<8Wր42L)z2<zB=Jvbi -Vuq*+1;#F dзxq\|(ct|#N4m9BPԹyqY8oH#ag*J_4Ǧ-bMHtx;MN['3 jBz\{wX&7u"p] -~mS_zWs妾WtkZ]֠2Llv+8p(;Xŷܲ:_%e%K8=@G'?UM][m w,[n:?8k`@>x_}U#ͨ*)s3=n9I:5ijr{QWJaNi3)ItlKuO
@OmiöqK!1۾xJCHǨYn^;[*}AQ5|%->O<kbb\Bn͔8j*8Xnˉ
+E*4!Db -oiAvu&bEҘpztYI@kzgfZpe<c&!>lɦ+J4 -QNpa|I.2Q%V%)ْFk;\2M8ՀXrvBi/m6E9]6\HEx[_U1]ưYSAFՑ ?XghSpip\Y=yٖ?CxEH&DRgu+n`+sJ,6cS]:yOKS<I3 -L7.LLIޞsA?;|TܾGR=(r4D[ye5/,tDk!ث%GD?K0*
PUVN!so9@* -Mfq݆EJ#GZd@)g -CDûu~cM%Q59zwj0_`/]߿.?
~M6xw5|ٟv!*A!iE쟑lf;쭹<JdZ|KłI9XO-٩!xRhhy<Ϸ̓Km5b>{<!^ErfJ>\@NWa x$%aQf텣;\ :4C1iK,_ 5d01B)})LgzԈ :~Mnt=.-<2f&~赍Wuޔ|rT_ңB;6~<8'V`?S+-һN\lRy\8W{}&KJ|FQ3%sϙtKC -Zs b<OAoiͲ%?A PpB2Zm}|n;2,mOA"6%@k9{;г&}ez -n.1WSUXtڐ,f -ߎ2M1o%>pKݫAѷszcAXOэk}ĥ;]NM2D7}k-Q6wT"FLc)4})<vp"w{9s٭MQ2}fѓc(S@-9ϕHBF=q\ϬmUF.YzF",.o/oXߘAܿ=IPVZtr8cfmb1
u7QIǑġn腜Ɉ\#̼$i9_;?ed\gB";YAㄶi88&3qZ\Ax|"<yu>Q;z6Ceŋ|9%4Ÿc{sNfdQvRFEan0zduhrJ!Bу-`ȓ -? UI6C5l,_DjglE?Y ~z%9^9̫*B$C:Z0`P#vu<¬c =ĵ&_grr@>(\fpP;;+m̙V]$CQL)Ln<C(R}K?;q,!['8*Gv8 ^hQ%=/A8c~q) -gs V!&7
2IUÁz;rB~у1.=PPȕTJ4Ae{f) -i
v?uh
pbqhdm"E{FCeAڑ+T:؟ZJD8/oUQvЊ*ӃKi v DQ@ <Y}魿bՂt -90-3r%iޏ!2Ĝ5 '37\>lKt iͺg_B3OD'*15v\2S&`bV½VІ?5ZFZw -:/!V l͊=vzv
H0ptxU(H߱X氡S~dfCBW$YOk34ګ]Yz ?q/Zm6RVgSkBi6ҧnD[U)&qY`-)o:UhrJ3ET0F, 1JCt~`xqK`RlGq$o -ahSs'B6.+wi$P -Dkt:l>"{N8ymhJNT -l1"$_ί
R-N.6A)uKJl,j!41>'J涋˓&m`+6 K -IR4o X[|#,?;.ҠR -n\XM -`x.&'RQa:[ZDTνR\\p9UcX#4_ޛ{CFv-e2u`usO9 -. 1K[?wα_bKt{JOWwN
b
~ -0'AxH`i_ts@bh*i*Uڿs9',HAR08a9\/f -ګɗ0?1`*
θ1W%*+6%' -endstream -endobj -88 0 obj -<< -/Type /FontDescriptor -/FontName /KKGAAD+SFSX1200 -/Flags 4 -/FontBBox [-232 -329 1767 915] -/Ascent 729 -/CapHeight 694 -/Descent -194 -/ItalicAngle 0 -/StemV 50 -/XHeight 458 -/CharSet (/b/c/e/i/n/o/one/period/s/t/u) -/FontFile 87 0 R ->> -endobj -89 0 obj -<< -/Length1 738 -/Length2 11968 -/Length3 0 -/Length 12706 ->> -stream -%!FontType1-1.0: SFSX1440 0.3 -%%CreationDate: Wed Sep 12 2001 -% Copyright (c) 2001 Vladimir Volovich <vvv@vsu.ru>. -% See the file COPYING (GNU General Public License) for license conditions. -% Converted from METAFONT EC/TC and LH fonts: -% ecsx1440, tcsx1440, lasx1440, lbsx1440, lcsx1440, rxsx1440. -11 dict begin -/FontInfo 6 dict dup begin -/version (0.3) def -/FullName (Computer Modern Sans Serif Bold Extended) def -/FamilyName (Computer Modern) def -/ItalicAngle 0 def -/isFixedPitch false def -/Weight (Bold) def -end readonly def -/FontName /RQIEES+SFSX1440 def -/Encoding StandardEncoding def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] def -/FontBBox{-238 -326 1844 909}readonly def -currentdict end -currentfile eexec -oc;j~EЪ+`U+1;[ihd_Twρb=I"aě!]#g~Q^VmcNtقP*4Jq=G1`ސnG)]'Ze+hb?%_hpZePEY}κH=-g0Q LyfYԙ >#N
>iyMզxbt,rEk](1ۄ84C+jj苑JXrIoce3f
lf%/5lZlKK˥O:emphM|_Zm+Fԫjkb);;S&wxgtsHVT}q3Ja_7rGjm -J[H]~xuAE2t|.5_0pŘF>}GC@ZSҟWN >Z0[<?8s۞-vă唊Fs3H+Ex)e^ -}#f^9<!:Zԣݷ+d{x΅[4]"ikgrnO\k|x#M-!~R)*oG3~ngr#L*ڌNݏ cdT=h4q$GF%t0K[3fqBVi$.O\ -+BإoR22iV_zr PC@Rv#L9"be3` a߹e_/ -GeUCWRw.Ք ?}-Tr[w,JR&g:yB
>a6Q4SY*dz~9w:)6@yiX_Wby -yFnxyהMQ[̍$!}lsR':{n=B1=;EeE6e.[rLcp:c$cwmI}HհyVp!p{6By"{Jy$dݦa\<xЛWSDŁ -'tі0!.\H:u*Aڬx^w{wkTm/X<ڃr"-P^B:27b3;x&USJ?-GA<HEsϕ%p] -@U)RLU -
@90!2 -#b@P5\Bk6Z_yr2p,#^:'{ -5iP+/@mŘb}ڱF -6q̈x%.4P#b6@=}y"B%R8zX^&kUyKc;pKY5;_B1jp3soTh]"LKtr'^〭⌡=;@jW<.Z`Gb^AQr3tmJiO-<8COTcaQhƐk"U(RuQu.EUJ10<:cﰬHK_]f2Nx]P\GRÇYsO -jhkZM0,:5F8 fEYL1i4ײj'[?#l]FF0];YI9b8oKL@""8eD"Ȇs$R`2YyScJ
i酇cӭ%ssx-`&?Zln0Uf+ٵ |Y9MBd3u ]9>$IPsźFgG`,S\v^<~#0'D -p}LC!&B'EguΰORHC3|D}NRUQx̰1N>1rEI3TJ IhSߟp"Y-hYV,gHb%;Z J1rPvwi3ј2\oI@M6aaQn'm9NNvq" ۪N'`k9Γ.P*ɣ+6*WNv%ɪ*qcU$ǰqIrH1BYQt8_TBg,C!"+uCȵH7l#VK`jXW?_2j}4I9
L6ʡ+<P=+A%YY>>D~ڄI/I['NfsUݴûR.Ъ<%qt!e5naXb"#y7K_ʓx>HzU-Eyj`W@RDs8
w?c5Bkj'/v"`SɃ<27dHF`cyO>
$W;1/^ҏLJs0;G*TP{gY1
;gD%B]Pm\MEsX -wsߧ+]B6i_qOҟj&P03zvedRl ;ڥ81xv9rL> - -VΕIq -PA -p{oWacEM@wYӋ-LbHEP -bUY0w{\)b*4{a1 6
X)E>ҍ$4مs3m_I|+E
.1*}Md6}F/{
GQ.J]9o/J' )/U9xU$ԉ桟un*:%G@˭ -0mgLO0jTzxz<iu skʧސ۵%F}!eՉ=D*#r 'VhTT)ZY~ѥ1wE&>1zL-uJt)6ΝY<jD' -UtvVjf5^)CRO4ɫ=DgitTJ LLYa%T(*UM_m$""L7QT/= --ToP7K!+*mz560(L$bБ"d{*m
DE^Рm -a% čkx
']T9zuVK-^9|ۄB:fZb%u=gkgHb8vT84jOA:Vkt$l+O_G9"/Ǔ<~!h5'WpLƋQ˜b+ rKV:添I{#3n{{^41EjsFk)hu-+x|EhS%CLMh#8ZkA\)>!fаZj$\\C(+9;1KlW$,-ZCld< -lNh:GYfX"s0x%!1F GD?l*`ӢE1.#
n>z\>W27qKo;mRQ*D"09O<& -N .xǷhͱ@0uɜ*Uۗo?؉,ȽDWDpNFaTƍ\܂oЮ [A!Y$M UW)OSPoT.R<UCuL)1?V;@6͢K^2Fm~UN~ECW2ٲ{U7Kdΰ6>oI?9gwXftxpXNHO4Mq190 *~Bl{4
A*{L)$ -I̾0*ҩ".yBf5)!xcR82(HtIX&{t 3!sGj:0esA|ԫu2 #7Ha)Xi%
dhg-i-bPu$B/'cizvV 8Q/,ϫ*W}lA<7
n7c -[WŶxF>N,Pr $ -z*9Z
3mEW#mpe0ʜ,uQA h9ɑxԮ؇zĪ9NZv>/ʐeD6[[#SU-]jGilu~ә*9m}MDF?)&+& -%,@۞BLvDdlUq=:&$c,׆!FL;&N7C[*,4|/G~p/3%[\rڝXeCQ-rS3BʗW<
)xw0*N)MpPLV]3ڸ鱃v[qq|e8rBmrPVgYj#8wUG8j+xJgjK._,`.(QU:DpIqmm -h#y/}]96_D3HIz&:7{ns"c 4m;0f^O;P3lV*_9wF>Xigo%q:~)4Ƽص&J*U -r6C\]:Z>EPot4'jЃ>3-i iaf,9cNfɶuy,2vHnJJtZ2R?;)r:Z0<l8:YQԝ百5ڢ۽gVNzAãuXdMuIp'=h|Va65&|HJLct7{7u/~laDROzSVOIҏ\ ߢskWiNݛaی&FWGRRR64JH#PkXKkQqJ*õEgf0~3Z!O.ԗ݇.3DmOs@mt{BF_)Y{, <fO
4S7XUn3*>F@ex*%63@Cw+w6>oI??Uŧbs@)(&S_ga"$rg!6%
S5)Nbu86K*y=>(
ı~)098ls
`_m^7W5=RR8k$u~V,hJ.XɗJv4Ek!9C[Ȳi#H6)؝JqCRGqr`e$Y:?oBFNUE%~(ը~믐fBaG)SԊpt-'] mI/fR4]B6 ߡfL^!Ě=<4>HҪ -M`8#E7JLuhw[N .h#7MV^jr؟] |h+SPx7JJ=!&#_Z#+ܳ"KJz\!zfz7¨M-,vn DN Wئ ЍY%\"#pLA1t.BBƺp
ĝz^n!0k$X\LI_L+0Oaatj&qQ -
5:\}V-PNyŃqpCt1l+uy &U*1?Ivݮ8|Jmc&9ICycjMȍ -?pʐczw -ԞN*'1cXd"}c8AH:4?80RLgī5 -Mz -t[s&p*ձ$7!Bjg%Eie$Kzԫzuls[Pzsu_ȭ`5?\1?d^yE_q1~=mچ`Qi -i[ R0X?H*ѮaZWH&M*993Ysh a>ߜԣJ`Lq~$jiU"nU?hrd6G@:}{|C׳.ymWSrhޖ!!j+>Y}%i - 3_3.#&mk5;/5qsƚL/:qlV2薿&P)4-|y=SrbQm?_zRc]srܦ*>eX#dB)iɧNX!RePϓf֩dLu <'9S}Cvex@wGT卖%B#0#011+{
'Rrx\[mmtoz.*l -uoCpMcQ؋6lԁa:@k L5̚ \\C< -endstream -endobj -90 0 obj -<< -/Type /FontDescriptor -/FontName /RQIEES+SFSX1440 -/Flags 4 -/FontBBox [-238 -326 1844 909] -/Ascent 709 -/CapHeight 686 -/Descent -194 -/ItalicAngle 0 -/StemV 50 -/XHeight 451 -/CharSet (/c/e/i/n/o/one/period/s/t) -/FontFile 89 0 R ->> -endobj -91 0 obj -<< -/Length1 738 -/Length2 8972 -/Length3 0 -/Length 9710 ->> -stream -%!FontType1-1.0: SFSX2074 0.3 -%%CreationDate: Wed Sep 12 2001 -% Copyright (c) 2001 Vladimir Volovich <vvv@vsu.ru>. -% See the file COPYING (GNU General Public License) for license conditions. -% Converted from METAFONT EC/TC and LH fonts: -% ecsx2074, tcsx2074, lasx2074, lbsx2074, lcsx2074, rxsx2074. -11 dict begin -/FontInfo 6 dict dup begin -/version (0.3) def -/FullName (Computer Modern Sans Serif Bold Extended) def -/FamilyName (Computer Modern) def -/ItalicAngle 0 def -/isFixedPitch false def -/Weight (Bold) def -end readonly def -/FontName /FEKEGK+SFSX2074 def -/Encoding StandardEncoding def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] def -/FontBBox{-234 -319 1740 892}readonly def -currentdict end -currentfile eexec -oc;j~EЪ+`U+1;[ihd_Twρb=I"aě!]#g~Q^VmcNtقP*4Jq=G1`ސnG)]'Ze+hb?%_hpZr=Ш6(YAĪvr%lݐrh-`=J2`pzJPJ&G,
xYMcɩ1Dj1ET}g&38|{iӐFZvEГTN}:6OY=^au@A_ظ(gɍO*N0݆0ݵ6dmBY'qp0 |D8PG9 &ߣU<vKcE8RIt:.'3k_mo_"lrW'g6 - -a4cq84n.j!}f_]X0OM=o,^em}+]qQL0햯zu?8V&v 28S?Ggާ#
IO++ -:䁩n3tv2<
Yy
[eFxZ >vKHI J_>\:| -YG)uxNDOy|oMKz>سfrV]++e:":!JD,3x9 z/ZP.4kD1+EgQ>OQ+ -c3l/KD|n>B#^4:KO(,q.L*֣a&UЫe2!qu6Ϛmn}f)D#40-͟uå=^<آˏٹJ4jDk"BD,k]2,¨, Ϻb)R& -_D<&F_?'%;%.2Y=hc&`n|[_͵j}wr+P>?R v8 4;^M|+={m<Z~w&Y_A;@DlH~뼸@2Yd2_}XwمO0@r@K[WM35d3.vN!y -b3{/cWO|>v{zŊVS0\5 bm֨b9y+_[r'-#}:e|}w\7'3K_[(Rӿ~AyGףasOi1y3V2ԣv&yqzֶX],D[l}P~%i+@ -1;deUӎHX(22U msPL6ɀרQ7+<dkqX -K9O0䪫ٓ7Ј6p,;?r>!ă"$]+<`GLyiTݦ,Ta
5 ~-S:
7IȮY
"<:iFȞ!<[5rM=/^NU;!W"9ەc3aa̩\dU{EpY!#WSPJ ->rz1Eq$S8{*9hQSt#NHcoϱ r,(^4a4OHAKL\G^ - ;!^B"!Qrɣ\7]O+p#W(GCfLL9V&PHP|,n@wpMdz,uշ,|YtxKMIa[0"E5;*nP ,K_y+.51t퇍vPSvc@=OjH9^9"]^Jv6#Uz@R;|"" "o0/}*<A+1)$"lBS?<EB6d*F&Ya]p1M2HbR -ݱ}32Vjb(٠ -c.^%/AURnSk`<iĄt}n])A몷*? -f44T;oQ">]QELy<JBXa|mcw??bDa3#UOf-u=;GKCr -? -DC u]oи5ͼRW9Q%!W:SyJFF\)iЍV(tCGF}z婊7QTG_]"LmAud뿺W5DG70Im\." l?hBaf3cHkmk|u#{0X.zTϵ|BO\ycHO9:hh=wX^z%A,S\[ u>bԵ4$
Nas\]Q7V.Ɗ=d"M?̛9Tccvt]kƜ}!6YD~K,Qrp_|!Rkbʆ_DA4.^%WR)=S8 -1Y \sOst3Ah]hl&X $$GHCkNFL;;~y*a -EÏ -r=̩ۺaW,Y(m#Ukڋ,fw ~`TGL*'cTObxKc(AEk mw$;*6CNxu๏ܿ>ull`n>^l+/>FNRstt -Q2'wL
,#%rk`=ڠk-%DFlzSyES^[ ǂdDS'' -=ѷfŁV+eoVwArTS$R[
ԺO'xJ6՜IuD>6G4BfѦOhxZc): mx)k#?pq[}w/n0!=u@E ,<T>MSMr|$ڵ" ejz:TJ̦)NV*m'Qx#B)kPGm:ڧ羘B]mtp-9ǰ7>"/Bg|RIKZw83y&58;t!rױ( [ڔIqvP܄ct1,ZX;N/c{?
/AB2p|lrD#lYWHHbo&ҦH@+VH5*>CD-WCɛɅuBUԁl@A@Z<.8K[Kϙ!sXF`8bXp)`6-k
-mOz(6:_w>a^ɔ22OG'\R4SdxRلzn9}9捶-wPNٵȭ~]NCQE -NA:\0q`~ނ,"@w, -l,Wr)}}jJ{W81:t -VIb"U{ސ?FzmT mIRSMW+dz5Jy+m0ɠu.\(_j6$W3t(E)U`֜B̦HJ#[rX1~}P9۰u?͍c -tu7J#n긂)7WTxEgskfu|h\7Y*}ai -hxrQ\ ]n:D;y*kXb6yH:]!@m̆U A>GϼZMެ[^z/|i -㈬q9ًhPR!uBI"jl->4
=k-wѫoRYmOV -)bfZr؆L51N4H
k -!u{l?G+ko2zQ${1F ~cEZ]CW`(D0ߦ*n_2
UiF;`ln*uɌe{z -vJ:h|VAhK0>pWGs>LpU$Y0.wmʌ،zDQ*Pt--LLGIȥ {LЩDK}ޤ6̟; *ǹn |N>tzvruTBxViRo -B4CZHh|8cxH?B3&>Otݹ[F[>)ΘԠ72K0qt8쮖A$sdReQ$0 -D%3[#_X*@7 -endstream -endobj -92 0 obj -<< -/Type /FontDescriptor -/FontName /FEKEGK+SFSX2074 -/Flags 4 -/FontBBox [-234 -319 1740 892] -/Ascent 712 -/CapHeight 686 -/Descent -192 -/ItalicAngle 0 -/StemV 50 -/XHeight 447 -/CharSet (/C/a/c/e/h/n/o/one/p/r/s/t) -/FontFile 91 0 R ->> -endobj -77 0 obj -<< -/Type /Encoding -/Differences [46/period 49/one 51/three 53/five 67/C 97/a/b/c 101/e 103/g/h/i 110/n/o/p 114/r/s/t/u 120/x] ->> -endobj -93 0 obj -<< -/Length 1996 ->> -stream -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (TeX-ecrm1095-cm-super-t1-0) -%%Title: (TeX-ecrm1095-cm-super-t1-0 TeX ecrm1095-cm-super-t1 0) -%%Version: 1.000 -%%EndComments -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo -<< /Registry (TeX) -/Ordering (ecrm1095-cm-super-t1) -/Supplement 0 ->> def -/CMapName /TeX-ecrm1095-cm-super-t1-0 def -/CMapType 2 def -1 begincodespacerange -<00> <FF> -endcodespacerange -11 beginbfrange -<0E> <0F> <2039> -<10> <12> <201C> -<15> <16> <2013> -<21> <26> <0021> -<28> <5F> <0028> -<61> <7E> <0061> -<98> <99> <0178> -<C0> <D6> <00C0> -<D8> <DE> <00D8> -<E0> <F6> <00E0> -<F8> <FE> <00F8> -endbfrange -94 beginbfchar -<00> <0060> -<01> <00B4> -<02> <02C6> -<03> <02DC> -<04> <00A8> -<05> <02DD> -<06> <02DA> -<07> <02C7> -<08> <02D8> -<09> <00AF> -<0A> <02D9> -<0B> <00B8> -<0C> <02DB> -<0D> <201A> -<13> <00AB> -<14> <00BB> -<17> <200C> -<19> <0131> -<1A> <0237> -<1B> <00660066> -<1C> <00660069> -<1D> <0066006C> -<1E> <006600660069> -<1F> <00660066006C> -<20> <2423> -<27> <2019> -<60> <2018> -<7F> <002D> -<80> <0102> -<81> <0104> -<82> <0106> -<83> <010C> -<84> <010E> -<85> <011A> -<86> <0118> -<87> <011E> -<88> <0139> -<89> <013D> -<8A> <0141> -<8B> <0143> -<8C> <0147> -<8D> <014A> -<8E> <0150> -<8F> <0154> -<90> <0158> -<91> <015A> -<92> <0160> -<93> <015E> -<94> <0164> -<95> <0162> -<96> <0170> -<97> <016E> -<9A> <017D> -<9B> <017B> -<9C> <0132> -<9D> <0130> -<9E> <0111> -<9F> <00A7> -<A0> <0103> -<A1> <0105> -<A2> <0107> -<A3> <010D> -<A4> <010F> -<A5> <011B> -<A6> <0119> -<A7> <011F> -<A8> <013A> -<A9> <013E> -<AA> <0142> -<AB> <0144> -<AC> <0148> -<AD> <014B> -<AE> <0151> -<AF> <0155> -<B0> <0159> -<B1> <015B> -<B2> <0161> -<B3> <015F> -<B4> <0165> -<B5> <0163> -<B6> <0171> -<B7> <016F> -<B8> <00FF> -<B9> <017A> -<BA> <017E> -<BB> <017C> -<BC> <0133> -<BD> <00A1> -<BE> <00BF> -<BF> <00A3> -<D7> <0152> -<DF> <00530053> -<F7> <0153> -<FF> <00DF> -endbfchar -endcmap -CMapName currentdict /CMap defineresource pop -end -end -%%EndResource -%%EOF - -endstream -endobj -43 0 obj -<< -/Type /Font -/Subtype /Type1 -/BaseFont /HHSFZO+SFRM1095 -/FontDescriptor 84 0 R -/FirstChar 46 -/LastChar 120 -/Widths 81 0 R -/Encoding 77 0 R -/ToUnicode 93 0 R ->> -endobj -94 0 obj -<< -/Length 1996 ->> -stream -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (TeX-ecsx1095-cm-super-t1-0) -%%Title: (TeX-ecsx1095-cm-super-t1-0 TeX ecsx1095-cm-super-t1 0) -%%Version: 1.000 -%%EndComments -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo -<< /Registry (TeX) -/Ordering (ecsx1095-cm-super-t1) -/Supplement 0 ->> def -/CMapName /TeX-ecsx1095-cm-super-t1-0 def -/CMapType 2 def -1 begincodespacerange -<00> <FF> -endcodespacerange -11 beginbfrange -<0E> <0F> <2039> -<10> <12> <201C> -<15> <16> <2013> -<21> <26> <0021> -<28> <5F> <0028> -<61> <7E> <0061> -<98> <99> <0178> -<C0> <D6> <00C0> -<D8> <DE> <00D8> -<E0> <F6> <00E0> -<F8> <FE> <00F8> -endbfrange -94 beginbfchar -<00> <0060> -<01> <00B4> -<02> <02C6> -<03> <02DC> -<04> <00A8> -<05> <02DD> -<06> <02DA> -<07> <02C7> -<08> <02D8> -<09> <00AF> -<0A> <02D9> -<0B> <00B8> -<0C> <02DB> -<0D> <201A> -<13> <00AB> -<14> <00BB> -<17> <200C> -<19> <0131> -<1A> <0237> -<1B> <00660066> -<1C> <00660069> -<1D> <0066006C> -<1E> <006600660069> -<1F> <00660066006C> -<20> <2423> -<27> <2019> -<60> <2018> -<7F> <002D> -<80> <0102> -<81> <0104> -<82> <0106> -<83> <010C> -<84> <010E> -<85> <011A> -<86> <0118> -<87> <011E> -<88> <0139> -<89> <013D> -<8A> <0141> -<8B> <0143> -<8C> <0147> -<8D> <014A> -<8E> <0150> -<8F> <0154> -<90> <0158> -<91> <015A> -<92> <0160> -<93> <015E> -<94> <0164> -<95> <0162> -<96> <0170> -<97> <016E> -<9A> <017D> -<9B> <017B> -<9C> <0132> -<9D> <0130> -<9E> <0111> -<9F> <00A7> -<A0> <0103> -<A1> <0105> -<A2> <0107> -<A3> <010D> -<A4> <010F> -<A5> <011B> -<A6> <0119> -<A7> <011F> -<A8> <013A> -<A9> <013E> -<AA> <0142> -<AB> <0144> -<AC> <0148> -<AD> <014B> -<AE> <0151> -<AF> <0155> -<B0> <0159> -<B1> <015B> -<B2> <0161> -<B3> <015F> -<B4> <0165> -<B5> <0163> -<B6> <0171> -<B7> <016F> -<B8> <00FF> -<B9> <017A> -<BA> <017E> -<BB> <017C> -<BC> <0133> -<BD> <00A1> -<BE> <00BF> -<BF> <00A3> -<D7> <0152> -<DF> <00530053> -<F7> <0153> -<FF> <00DF> -endbfchar -endcmap -CMapName currentdict /CMap defineresource pop -end -end -%%EndResource -%%EOF - -endstream -endobj -75 0 obj -<< -/Type /Font -/Subtype /Type1 -/BaseFont /FKLUEV+SFSX1095 -/FontDescriptor 86 0 R -/FirstChar 98 -/LastChar 117 -/Widths 78 0 R -/Encoding 77 0 R -/ToUnicode 94 0 R ->> -endobj -95 0 obj -<< -/Length 1996 ->> -stream -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (TeX-ecsx1200-cm-super-t1-0) -%%Title: (TeX-ecsx1200-cm-super-t1-0 TeX ecsx1200-cm-super-t1 0) -%%Version: 1.000 -%%EndComments -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo -<< /Registry (TeX) -/Ordering (ecsx1200-cm-super-t1) -/Supplement 0 ->> def -/CMapName /TeX-ecsx1200-cm-super-t1-0 def -/CMapType 2 def -1 begincodespacerange -<00> <FF> -endcodespacerange -11 beginbfrange -<0E> <0F> <2039> -<10> <12> <201C> -<15> <16> <2013> -<21> <26> <0021> -<28> <5F> <0028> -<61> <7E> <0061> -<98> <99> <0178> -<C0> <D6> <00C0> -<D8> <DE> <00D8> -<E0> <F6> <00E0> -<F8> <FE> <00F8> -endbfrange -94 beginbfchar -<00> <0060> -<01> <00B4> -<02> <02C6> -<03> <02DC> -<04> <00A8> -<05> <02DD> -<06> <02DA> -<07> <02C7> -<08> <02D8> -<09> <00AF> -<0A> <02D9> -<0B> <00B8> -<0C> <02DB> -<0D> <201A> -<13> <00AB> -<14> <00BB> -<17> <200C> -<19> <0131> -<1A> <0237> -<1B> <00660066> -<1C> <00660069> -<1D> <0066006C> -<1E> <006600660069> -<1F> <00660066006C> -<20> <2423> -<27> <2019> -<60> <2018> -<7F> <002D> -<80> <0102> -<81> <0104> -<82> <0106> -<83> <010C> -<84> <010E> -<85> <011A> -<86> <0118> -<87> <011E> -<88> <0139> -<89> <013D> -<8A> <0141> -<8B> <0143> -<8C> <0147> -<8D> <014A> -<8E> <0150> -<8F> <0154> -<90> <0158> -<91> <015A> -<92> <0160> -<93> <015E> -<94> <0164> -<95> <0162> -<96> <0170> -<97> <016E> -<9A> <017D> -<9B> <017B> -<9C> <0132> -<9D> <0130> -<9E> <0111> -<9F> <00A7> -<A0> <0103> -<A1> <0105> -<A2> <0107> -<A3> <010D> -<A4> <010F> -<A5> <011B> -<A6> <0119> -<A7> <011F> -<A8> <013A> -<A9> <013E> -<AA> <0142> -<AB> <0144> -<AC> <0148> -<AD> <014B> -<AE> <0151> -<AF> <0155> -<B0> <0159> -<B1> <015B> -<B2> <0161> -<B3> <015F> -<B4> <0165> -<B5> <0163> -<B6> <0171> -<B7> <016F> -<B8> <00FF> -<B9> <017A> -<BA> <017E> -<BB> <017C> -<BC> <0133> -<BD> <00A1> -<BE> <00BF> -<BF> <00A3> -<D7> <0152> -<DF> <00530053> -<F7> <0153> -<FF> <00DF> -endbfchar -endcmap -CMapName currentdict /CMap defineresource pop -end -end -%%EndResource -%%EOF - -endstream -endobj -74 0 obj -<< -/Type /Font -/Subtype /Type1 -/BaseFont /KKGAAD+SFSX1200 -/FontDescriptor 88 0 R -/FirstChar 46 -/LastChar 117 -/Widths 79 0 R -/Encoding 77 0 R -/ToUnicode 95 0 R ->> -endobj -96 0 obj -<< -/Length 1996 ->> -stream -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (TeX-ecsx1440-cm-super-t1-0) -%%Title: (TeX-ecsx1440-cm-super-t1-0 TeX ecsx1440-cm-super-t1 0) -%%Version: 1.000 -%%EndComments -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo -<< /Registry (TeX) -/Ordering (ecsx1440-cm-super-t1) -/Supplement 0 ->> def -/CMapName /TeX-ecsx1440-cm-super-t1-0 def -/CMapType 2 def -1 begincodespacerange -<00> <FF> -endcodespacerange -11 beginbfrange -<0E> <0F> <2039> -<10> <12> <201C> -<15> <16> <2013> -<21> <26> <0021> -<28> <5F> <0028> -<61> <7E> <0061> -<98> <99> <0178> -<C0> <D6> <00C0> -<D8> <DE> <00D8> -<E0> <F6> <00E0> -<F8> <FE> <00F8> -endbfrange -94 beginbfchar -<00> <0060> -<01> <00B4> -<02> <02C6> -<03> <02DC> -<04> <00A8> -<05> <02DD> -<06> <02DA> -<07> <02C7> -<08> <02D8> -<09> <00AF> -<0A> <02D9> -<0B> <00B8> -<0C> <02DB> -<0D> <201A> -<13> <00AB> -<14> <00BB> -<17> <200C> -<19> <0131> -<1A> <0237> -<1B> <00660066> -<1C> <00660069> -<1D> <0066006C> -<1E> <006600660069> -<1F> <00660066006C> -<20> <2423> -<27> <2019> -<60> <2018> -<7F> <002D> -<80> <0102> -<81> <0104> -<82> <0106> -<83> <010C> -<84> <010E> -<85> <011A> -<86> <0118> -<87> <011E> -<88> <0139> -<89> <013D> -<8A> <0141> -<8B> <0143> -<8C> <0147> -<8D> <014A> -<8E> <0150> -<8F> <0154> -<90> <0158> -<91> <015A> -<92> <0160> -<93> <015E> -<94> <0164> -<95> <0162> -<96> <0170> -<97> <016E> -<9A> <017D> -<9B> <017B> -<9C> <0132> -<9D> <0130> -<9E> <0111> -<9F> <00A7> -<A0> <0103> -<A1> <0105> -<A2> <0107> -<A3> <010D> -<A4> <010F> -<A5> <011B> -<A6> <0119> -<A7> <011F> -<A8> <013A> -<A9> <013E> -<AA> <0142> -<AB> <0144> -<AC> <0148> -<AD> <014B> -<AE> <0151> -<AF> <0155> -<B0> <0159> -<B1> <015B> -<B2> <0161> -<B3> <015F> -<B4> <0165> -<B5> <0163> -<B6> <0171> -<B7> <016F> -<B8> <00FF> -<B9> <017A> -<BA> <017E> -<BB> <017C> -<BC> <0133> -<BD> <00A1> -<BE> <00BF> -<BF> <00A3> -<D7> <0152> -<DF> <00530053> -<F7> <0153> -<FF> <00DF> -endbfchar -endcmap -CMapName currentdict /CMap defineresource pop -end -end -%%EndResource -%%EOF - -endstream -endobj -73 0 obj -<< -/Type /Font -/Subtype /Type1 -/BaseFont /RQIEES+SFSX1440 -/FontDescriptor 90 0 R -/FirstChar 46 -/LastChar 116 -/Widths 80 0 R -/Encoding 77 0 R -/ToUnicode 96 0 R ->> -endobj -97 0 obj -<< -/Length 1996 ->> -stream -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (TeX-ecsx2074-cm-super-t1-0) -%%Title: (TeX-ecsx2074-cm-super-t1-0 TeX ecsx2074-cm-super-t1 0) -%%Version: 1.000 -%%EndComments -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo -<< /Registry (TeX) -/Ordering (ecsx2074-cm-super-t1) -/Supplement 0 ->> def -/CMapName /TeX-ecsx2074-cm-super-t1-0 def -/CMapType 2 def -1 begincodespacerange -<00> <FF> -endcodespacerange -11 beginbfrange -<0E> <0F> <2039> -<10> <12> <201C> -<15> <16> <2013> -<21> <26> <0021> -<28> <5F> <0028> -<61> <7E> <0061> -<98> <99> <0178> -<C0> <D6> <00C0> -<D8> <DE> <00D8> -<E0> <F6> <00E0> -<F8> <FE> <00F8> -endbfrange -94 beginbfchar -<00> <0060> -<01> <00B4> -<02> <02C6> -<03> <02DC> -<04> <00A8> -<05> <02DD> -<06> <02DA> -<07> <02C7> -<08> <02D8> -<09> <00AF> -<0A> <02D9> -<0B> <00B8> -<0C> <02DB> -<0D> <201A> -<13> <00AB> -<14> <00BB> -<17> <200C> -<19> <0131> -<1A> <0237> -<1B> <00660066> -<1C> <00660069> -<1D> <0066006C> -<1E> <006600660069> -<1F> <00660066006C> -<20> <2423> -<27> <2019> -<60> <2018> -<7F> <002D> -<80> <0102> -<81> <0104> -<82> <0106> -<83> <010C> -<84> <010E> -<85> <011A> -<86> <0118> -<87> <011E> -<88> <0139> -<89> <013D> -<8A> <0141> -<8B> <0143> -<8C> <0147> -<8D> <014A> -<8E> <0150> -<8F> <0154> -<90> <0158> -<91> <015A> -<92> <0160> -<93> <015E> -<94> <0164> -<95> <0162> -<96> <0170> -<97> <016E> -<9A> <017D> -<9B> <017B> -<9C> <0132> -<9D> <0130> -<9E> <0111> -<9F> <00A7> -<A0> <0103> -<A1> <0105> -<A2> <0107> -<A3> <010D> -<A4> <010F> -<A5> <011B> -<A6> <0119> -<A7> <011F> -<A8> <013A> -<A9> <013E> -<AA> <0142> -<AB> <0144> -<AC> <0148> -<AD> <014B> -<AE> <0151> -<AF> <0155> -<B0> <0159> -<B1> <015B> -<B2> <0161> -<B3> <015F> -<B4> <0165> -<B5> <0163> -<B6> <0171> -<B7> <016F> -<B8> <00FF> -<B9> <017A> -<BA> <017E> -<BB> <017C> -<BC> <0133> -<BD> <00A1> -<BE> <00BF> -<BF> <00A3> -<D7> <0152> -<DF> <00530053> -<F7> <0153> -<FF> <00DF> -endbfchar -endcmap -CMapName currentdict /CMap defineresource pop -end -end -%%EndResource -%%EOF - -endstream -endobj -42 0 obj -<< -/Type /Font -/Subtype /Type1 -/BaseFont /FEKEGK+SFSX2074 -/FontDescriptor 92 0 R -/FirstChar 49 -/LastChar 116 -/Widths 82 0 R -/Encoding 77 0 R -/ToUnicode 97 0 R ->> -endobj -44 0 obj -<< -/Type /Pages -/Count 5 -/Kids [12 0 R 46 0 R 50 0 R 55 0 R 59 0 R] ->> -endobj -98 0 obj -<< -/Type /Catalog -/Pages 44 0 R -/MarkInfo 76 0 R/Lang (en-US)/StructTreeRoot 5 0 R ->> -endobj -99 0 obj -<< -/Producer (pdfTeX-1.40.23) -/Creator (TeX) -/CreationDate (D:20210713163210+02'00') -/ModDate (D:20210713163210+02'00') -/Trapped /False -/PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.23 (TeX Live 2021/W32TeX) kpathsea version 6.3.3) ->> -endobj -xref -0 100 -0000000002 65535 f -0000007831 00000 n -0000000003 00000 f -0000000004 00000 f -0000000000 00000 f -0000011814 00000 n -0000008990 00000 n -0000009204 00000 n -0000009355 00000 n -0000009375 00000 n -0000009498 00000 n -0000000015 00000 n -0000006042 00000 n -0000009591 00000 n -0000009682 00000 n -0000009768 00000 n -0000000046 00000 n -0000009863 00000 n -0000000077 00000 n -0000009956 00000 n -0000000108 00000 n -0000010057 00000 n -0000010136 00000 n -0000000139 00000 n -0000010229 00000 n -0000000170 00000 n -0000010330 00000 n -0000010416 00000 n -0000000201 00000 n -0000010511 00000 n -0000000232 00000 n -0000010604 00000 n -0000000263 00000 n -0000010705 00000 n -0000010791 00000 n -0000000294 00000 n -0000010886 00000 n -0000000325 00000 n -0000010980 00000 n -0000000357 00000 n -0000006184 00000 n -0000000389 00000 n -0000090532 00000 n -0000081600 00000 n -0000090710 00000 n -0000006697 00000 n -0000006555 00000 n -0000006483 00000 n -0000011082 00000 n -0000006755 00000 n -0000007033 00000 n -0000006786 00000 n -0000007175 00000 n -0000006817 00000 n -0000007525 00000 n -0000007383 00000 n -0000007311 00000 n -0000011210 00000 n -0000007583 00000 n -0000008532 00000 n -0000011303 00000 n -0000007614 00000 n -0000007645 00000 n -0000011431 00000 n -0000007676 00000 n -0000007707 00000 n -0000011559 00000 n -0000007738 00000 n -0000007769 00000 n -0000011687 00000 n -0000007800 00000 n -0000008674 00000 n -0000007878 00000 n -0000088299 00000 n -0000086066 00000 n -0000083833 00000 n -0000008954 00000 n -0000079400 00000 n -0000011918 00000 n -0000012036 00000 n -0000012479 00000 n -0000012917 00000 n -0000013368 00000 n -0000013790 00000 n -0000028759 00000 n -0000029030 00000 n -0000042285 00000 n -0000042522 00000 n -0000056052 00000 n -0000056300 00000 n -0000069104 00000 n -0000069348 00000 n -0000079155 00000 n -0000079545 00000 n -0000081778 00000 n -0000084011 00000 n -0000086244 00000 n -0000088477 00000 n -0000090797 00000 n -0000090899 00000 n -trailer -<< /Size 100 -/Root 98 0 R -/Info 99 0 R -/ID [<A273A391B74CA8F331548AD088A757DA> <A273A391B74CA8F331548AD088A757DA>] >> -startxref -91167 -%%EOF diff --git a/macros/latex/contrib/tagpdf/ex-patch-sectioning-memoir.pdf b/macros/latex/contrib/tagpdf/ex-patch-sectioning-memoir.pdf Binary files differindex 6ba2eec79e..ee9b314f4f 100644 --- a/macros/latex/contrib/tagpdf/ex-patch-sectioning-memoir.pdf +++ b/macros/latex/contrib/tagpdf/ex-patch-sectioning-memoir.pdf diff --git a/macros/latex/contrib/tagpdf/ex-softhyphen.pdf b/macros/latex/contrib/tagpdf/ex-softhyphen.pdf Binary files differindex 8f7271a6e6..d5dea39b12 100644 --- a/macros/latex/contrib/tagpdf/ex-softhyphen.pdf +++ b/macros/latex/contrib/tagpdf/ex-softhyphen.pdf diff --git a/macros/latex/contrib/tagpdf/ex-spaceglyph-listings.pdf b/macros/latex/contrib/tagpdf/ex-spaceglyph-listings.pdf Binary files differindex 1d4b5312e9..a045fae9fa 100644 --- a/macros/latex/contrib/tagpdf/ex-spaceglyph-listings.pdf +++ b/macros/latex/contrib/tagpdf/ex-spaceglyph-listings.pdf diff --git a/macros/latex/contrib/tagpdf/ex-spaceglyph-listings.tex b/macros/latex/contrib/tagpdf/ex-spaceglyph-listings.tex index d04f8824fb..affcdff51d 100644 --- a/macros/latex/contrib/tagpdf/ex-spaceglyph-listings.tex +++ b/macros/latex/contrib/tagpdf/ex-spaceglyph-listings.tex @@ -1,10 +1,11 @@ % !Mode:: "TeX:DE:UTF-8:Main" -\RequirePackage{pdfmanagement-testphase} -\DeclareDocumentMetadata{uncompress,} +\IfFormatAtLeastTF{2022-06-01}{} + {\RequirePackage{pdfmanagement-testphase}} +\DocumentMetadata{uncompress,testphase=tagpdf} \documentclass{article} \usepackage{amsmath} \usepackage[ngerman]{babel} -\usepackage{tagpdf,listings} +\usepackage{listings} \makeatletter %\def\lst@outputspace{\pdffakespace\ } %not so good % this here works fine with luatex, if the font has a space glyph: @@ -12,11 +13,11 @@ \def\lst@visiblespace{\lst@ttfamily{\char32}{\char32}} % with pdftex this could work %\def\lst@visiblespace{\lst@ttfamily{\pdffakespace\ }{\pdffakespace\ }} -\tagpdfsetup{activate,interwordspace=on,show-spaces,log=v} +\tagpdfsetup{show-spaces,log=v} \begin{document}\pagestyle{empty} -\tagmcbegin{tag=P} + \begin{lstlisting}[showspaces] aaa aaa xxxx \end{lstlisting} -\tagmcend + \end{document}
\ No newline at end of file diff --git a/macros/latex/contrib/tagpdf/ex-structure-luatex.pdf b/macros/latex/contrib/tagpdf/ex-structure-luatex.pdf Binary files differdeleted file mode 100644 index fce47848aa..0000000000 --- a/macros/latex/contrib/tagpdf/ex-structure-luatex.pdf +++ /dev/null diff --git a/macros/latex/contrib/tagpdf/ex-structure.tex b/macros/latex/contrib/tagpdf/ex-structure-obsolete.tex index 8ce5b624b8..1070b7c46d 100644 --- a/macros/latex/contrib/tagpdf/ex-structure.tex +++ b/macros/latex/contrib/tagpdf/ex-structure-obsolete.tex @@ -1,4 +1,9 @@ % !Mode:: "TeX:DE:UTF-8:Main" + +%!!!!!!! +% obsolete in part (paratagging will interfere) +% don't expect a correct output! +% \RequirePackage{pdfmanagement-testphase} \DeclareDocumentMetadata{pdfversion=1.7,uncompress} @@ -27,7 +32,6 @@ \pagestyle{fancy} \fancyhf{} -\cfoot{\tagmcbegin{artifact=pagination}\thepage\tagmcend} \begin{document} \tagstructbegin{tag=Sect} diff --git a/macros/latex/contrib/tagpdf/ex-tagpdf-template.pdf b/macros/latex/contrib/tagpdf/ex-tagpdf-template.pdf Binary files differindex 699f824495..337c049d53 100644 --- a/macros/latex/contrib/tagpdf/ex-tagpdf-template.pdf +++ b/macros/latex/contrib/tagpdf/ex-tagpdf-template.pdf diff --git a/macros/latex/contrib/tagpdf/ex-tagpdf-template.tex b/macros/latex/contrib/tagpdf/ex-tagpdf-template.tex index a2b0db1164..c59ff33da3 100644 --- a/macros/latex/contrib/tagpdf/ex-tagpdf-template.tex +++ b/macros/latex/contrib/tagpdf/ex-tagpdf-template.tex @@ -2,15 +2,22 @@ %this is more or less minimal template that can be used as starting point %it doesn't set everything that would be needed! -\RequirePackage{pdfmanagement-testphase} -\DeclareDocumentMetadata - { - uncompress, - pdfversion=2.0 - } + +% \DocumentMetadata requires a new pdfmanagement-testphase version! Older versions +% should use \DeclareDocumentMetadata + +% with a new LaTeX it will not longer be needed to load pdfmanagment-testphase! +\IfFormatAtLeastTF{2022-06-01}{} + {\RequirePackage{pdfmanagement-testphase}} +\DocumentMetadata + {uncompress, + pdfversion=2.0, + testphase=tagpdf %load and activate tagpdf + } + \documentclass{scrartcl} \usepackage[english]{babel} -\usepackage{tagpdf} + \usepackage{iftex} \iftutex \usepackage{fontspec} @@ -21,9 +28,6 @@ \tagpdfsetup { tabsorder=structure, - activate, %adds Document structure - paratagging, %activates tagging of paragraphs. - interwordspace %actives interword spaces (lualatex, pdflatex) } \begin{document} \pagestyle{empty} % diff --git a/macros/latex/contrib/tagpdf/example-input-file.tex b/macros/latex/contrib/tagpdf/example-input-file.tex deleted file mode 100644 index b85cfea571..0000000000 --- a/macros/latex/contrib/tagpdf/example-input-file.tex +++ /dev/null @@ -1,5 +0,0 @@ -%% LaTeX2e file `example-input-file.tex' -%% generated by the `filecontents' environment -%% from source `ex-AF-file' on 2021/02/23. -%% -Additional info! diff --git a/macros/latex/contrib/tagpdf/tagpdf-backend.dtx b/macros/latex/contrib/tagpdf/tagpdf-backend.dtx index f28a02ea6e..dcf7afb823 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-backend.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-backend.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf-backend.dtx % -% Copyright (C) 2019-2021 Ulrike Fischer +% 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 @@ -51,13 +51,13 @@ % }^^A % } % -% \date{Version 0.92, released 2021-08-27} +% \date{Version 0.93, released 2022-01-13} % \maketitle % \begin{implementation} % \begin{macrocode} %<@@=tag> %<*luatex> -\ProvidesExplFile {tagpdf-luatex.def} {2021-08-27} {0.92} +\ProvidesExplFile {tagpdf-luatex.def} {2022-01-13} {0.93} {tagpdf~driver~for~luatex} % \end{macrocode} % \section{Loading the lua} @@ -161,8 +161,8 @@ local ProvidesLuaModule = { name = "tagpdf", - version = "0.92", --TAGVERSION - date = "2021-08-27", --TAGDATE + version = "0.93", --TAGVERSION + date = "2022-01-13", --TAGDATE description = "tagpdf lua code", license = "The LATEX Project Public License 1.3c" } @@ -739,11 +739,6 @@ end ltx.@@.func.markspaceoff=@@_deactivate_mark_space % \end{macrocode} % \end{macro} -% \begin{macro} -% { -% default_space_char, -% default_fontid, -% } % We need two local variable to setup a default space char. % \begin{macrocode} local default_space_char = node.new(GLYPH) @@ -751,7 +746,6 @@ local default_fontid = font.id("TU/lmr/m/n/10") default_space_char.char = 32 default_space_char.font = default_fontid % \end{macrocode} -% \end{macro} % \begin{macro} % { % @@_space_chars_shipout, diff --git a/macros/latex/contrib/tagpdf/tagpdf-checks.dtx b/macros/latex/contrib/tagpdf/tagpdf-checks.dtx index 5cdbc60cf6..53f97383f8 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-checks.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-checks.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf-checks.dtx % -% Copyright (C) 2019-2021 Ulrike Fischer +% 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 @@ -52,7 +52,7 @@ % }^^A % } % -% \date{Version 0.92, released 2021-08-27} +% \date{Version 0.93, released 2022-01-13} % \maketitle % \begin{documentation} % \section{Commands} @@ -245,13 +245,60 @@ % INFO PARENTTREE-NUMENTRY & 3 \\ % INFO PARENTTREE-STRUCT-OBJREF & 4 % \end{longtable} - +% +% \subsection{Debug mode messages and code} +% If the package tagpdf-debug is loaded a number of commands are redefined and +% enhanced with additional commands which can be used to output debug messages or +% collect statistics. The commands are present but do nothing if the log-level is zero. +% \begin{tabular}{llll} +% command & name & action & remark\\\hline +% |\tag_mc_begin:n| & mc-begin-insert & msg \\ +% & mc-begin-ignore & msg & if inactive \\ +% \end{tabular} +% +% \subsection{Messages} +% \begin{function}{ +% mc-nested, +% mc-tag-missing, +% mc-label-unknown, +% mc-used-twice, +% mc-used-twice, +% mc-not-open, +% mc-pushed, +% mc-popped, +% mc-current} +% Various messages related to mc-chunks. TODO document their meaning. +% \end{function} +% \begin{function}{struct-no-objnum,struct-faulty-nesting, +% struct-missing-tag,struct-used-twice,struct-label-unknown,struct-show-closing} +% Various messages related to structure. TODO document their meaning. +% \end{function} +% +% \begin{function}{attr-unknown} +% Message if an attribute i sunknown. +% \end{function} +% +% \begin{function}{role-missing,role-unknown,role-unknown-tag,role-tag,new-tag} +% Messages related to role mapping. +% \end{function} +% +% \begin{function}{tree-mcid-index-wrong} +% Used in the tree code, typically indicates the document must be rerun. +% \end{function} +% +% \begin{function}{sys-no-interwordspace} +% Message if an engine doesn't support inter word spaces +% \end{function} +% +% \begin{function}{para-hook-count-wrong} +% Message if the number of begin paragraph and end paragraph differ. This normally means faulty structure. +% \end{function} % \end{documentation} % \begin{implementation} % \begin{macrocode} %<@@=tag> %<*header> -\ProvidesExplPackage {tagpdf-checks-code} {2021-08-27} {0.92} +\ProvidesExplPackage {tagpdf-checks-code} {2022-01-13} {0.93} {part of tagpdf - code related to checks, conditionals, debugging and messages} %</header> % \end{macrocode} @@ -791,5 +838,88 @@ % \begin{macrocode} %</package> % \end{macrocode} +% \begin{macrocode} +%<*debug> +% \end{macrocode} +% Code for tagpdf-debug. This will probably change over time. +% At first something for the mc commands. +% \begin{macrocode} +\msg_new:nnn { tag / debug } {mc-begin} { MC~begin~#1~with~options:~\tl_to_str:n{#2}~[\msg_line_context:] } +\msg_new:nnn { tag / debug } {mc-end} { MC~end~#1~[\msg_line_context:] } + +\cs_new_protected:Npn \@@_debug_mc_begin_insert:n #1 + { + \int_compare:nNnT { \l_@@_loglevel_int } > {0} + { + \msg_note:nnnn { tag / debug } {mc-begin} {inserted} { #1 } + } + } +\cs_new_protected:Npn \@@_debug_mc_begin_ignore:n #1 + { + \int_compare:nNnT { \l_@@_loglevel_int } > {0} + { + \msg_note:nnnn { tag / debug } {mc-begin } {ignored} { #1 } + } + } +\cs_new_protected:Npn \@@_debug_mc_end_insert: + { + \int_compare:nNnT { \l_@@_loglevel_int } > {0} + { + \msg_note:nnn { tag / debug } {mc-end} {inserted} + } + } +\cs_new_protected:Npn \@@_debug_mc_end_ignore: + { + \int_compare:nNnT { \l_@@_loglevel_int } > {0} + { + \msg_note:nnn { tag / debug } {mc-end } {ignored} + } + } +% \end{macrocode} +% And now something for the structures +% \begin{macrocode} +\msg_new:nnn { tag / debug } {struct-begin} + { + Struct~begin~#1~with~options:~\tl_to_str:n{#2}~[\msg_line_context:] + } +\msg_new:nnn { tag / debug } {struct-end} + { + Struct~end~#1~[\msg_line_context:] + } + +\cs_new_protected:Npn \@@_debug_struct_begin_insert:n #1 + { + \int_compare:nNnT { \l_@@_loglevel_int } > {0} + { + \msg_note:nnnn { tag / debug } {struct-begin} {inserted} { #1 } + \seq_log:N \g_@@_struct_tag_stack_seq + } + } +\cs_new_protected:Npn \@@_debug_struct_begin_ignore:n #1 + { + \int_compare:nNnT { \l_@@_loglevel_int } > {0} + { + \msg_note:nnnn { tag / debug } {struct-begin } {ignored} { #1 } + } + } +\cs_new_protected:Npn \@@_debug_struct_end_insert: + { + \int_compare:nNnT { \l_@@_loglevel_int } > {0} + { + \msg_note:nnn { tag / debug } {struct-end} {inserted} + \seq_log:N \g_@@_struct_tag_stack_seq + } + } +\cs_new_protected:Npn \@@_debug_struct_end_ignore: + { + \int_compare:nNnT { \l_@@_loglevel_int } > {0} + { + \msg_note:nnn { tag / debug } {struct-end } {ignored} + } + } +% \end{macrocode} +% \begin{macrocode} +%</debug> +% \end{macrocode} % \end{implementation} % \PrintIndex diff --git a/macros/latex/contrib/tagpdf/tagpdf-code.pdf b/macros/latex/contrib/tagpdf/tagpdf-code.pdf Binary files differindex 46d3a425fd..6f92329af5 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-code.pdf +++ b/macros/latex/contrib/tagpdf/tagpdf-code.pdf diff --git a/macros/latex/contrib/tagpdf/tagpdf-code.tex b/macros/latex/contrib/tagpdf/tagpdf-code.tex index 5d29d0ba6b..d51c209929 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-code.tex +++ b/macros/latex/contrib/tagpdf/tagpdf-code.tex @@ -34,8 +34,15 @@ % version data. \usepackage{longtable} \usepackage{tagpdf} - - +\makeatletter +%\def\@setupverbvisiblespace{} +%\def\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi +% \bgroup +% \verb@eol@error \let\do\@makeother \dospecials +% \verbatim@font\@noligs +% \language\l@nohyphenation +% \@ifstar\@verb\@verb} +\makeatother \begin{document} \GetFileInfo{tagpdf.sty} diff --git a/macros/latex/contrib/tagpdf/tagpdf-mc-generic.dtx b/macros/latex/contrib/tagpdf/tagpdf-mc-generic.dtx index 903b38d5a3..994e3b0b85 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-mc-generic.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-mc-generic.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf-mc.dtx % -% Copyright (C) 2019-2021 Ulrike Fischer +% 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 @@ -50,7 +50,7 @@ % }^^A % } % -% \date{Version 0.92, released 2021-08-27} +% \date{Version 0.93, released 2022-01-13} % \maketitle % \begin{documentation} % \end{documentation} @@ -59,9 +59,13 @@ % \begin{macrocode} %<@@=tag> %<*generic> -\ProvidesExplPackage {tagpdf-mc-code-generic} {2021-08-27} {0.92} +\ProvidesExplPackage {tagpdf-mc-code-generic} {2022-01-13} {0.93} {part of tagpdf - code related to marking chunks - generic mode} %</generic> +%<*debug> +\ProvidesExplPackage {tagpdf-debug-generic} {2022-01-13} {0.93} + {part of tagpdf - debugging code related to marking chunks - generic mode} +%</debug> % \end{macrocode} % %\subsection{Variables} @@ -653,6 +657,7 @@ % It is use by the get command. % \begin{macrocode} \cs_new:Nn \@@_get_data_mc_tag: { \g_@@_mc_key_tag_tl } +%</generic> % \end{macrocode} % \end{macro} % @@ -663,10 +668,20 @@ % the state is passed to the end command through a global var and % a global boolean. % \begin{macrocode} +%<*generic|debug> +%<*generic> \cs_new_protected:Npn \tag_mc_begin:n #1 %#1 keyval { \@@_check_if_active_mc:T { +%</generic> +%<*debug> +\cs_set_protected:Npn \tag_mc_begin:n #1 %#1 keyval + { + \@@_check_if_active_mc:TF + { + \@@_debug_mc_begin_insert:n { #1 } +%</debug> \group_begin: %hm \@@_check_mc_if_nested: \bool_gset_true:N \g_@@_in_mc_bool @@ -695,18 +710,38 @@ } \group_end: } +%<*debug> + { + \@@_debug_mc_begin_ignore:n { #1 } + } +%</debug> } +%<*generic> \cs_new_protected:Nn \tag_mc_end: { \@@_check_if_active_mc:T { +%</generic> +%<*debug> +\cs_set_protected:Nn \tag_mc_end: + { + \@@_check_if_active_mc:TF + { + \@@_debug_mc_end_insert: +%</debug> \@@_check_mc_if_open: \bool_gset_false:N \g_@@_in_mc_bool \tl_gset:Nn \g_@@_mc_key_tag_tl { } \@@_mc_emc: \@@_mc_end_marks: } +%<*debug> + { + \@@_debug_mc_end_ignore: + } +%</debug> } +%</generic|debug> % \end{macrocode} % \end{macro} @@ -717,12 +752,15 @@ % we assume that their values are safe. % \begin{macro} % { -% tag,raw, -% alttext, -% actualtext, -% label,artifact +% tag (mc-key), +% raw (mc-key), +% alttext (mc-key), +% actualtext (mc-key), +% label (mc-key), +% artifact (mc-key) % } % \begin{macrocode} +%<*generic> \keys_define:nn { @@ / mc } { tag .code:n = % the name (H,P,Span) etc diff --git a/macros/latex/contrib/tagpdf/tagpdf-mc-luacode.dtx b/macros/latex/contrib/tagpdf/tagpdf-mc-luacode.dtx index 2698b7ad59..d8dba57fd1 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-mc-luacode.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-mc-luacode.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf-mc.dtx % -% Copyright (C) 2019-2021 Ulrike Fischer +% 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 @@ -50,9 +50,8 @@ % }^^A % } % -% \date{Version 0.92, released 2021-08-27} +% \date{Version 0.93, released 2022-01-13} % \maketitle - % \begin{implementation} % The code is splitted into three parts: code shared by all engines, % code specific to luamode and code not used by luamode. @@ -91,7 +90,7 @@ % \begin{macrocode} %<@@=tag> %<*luamode> -\ProvidesExplPackage {tagpdf-mc-code-lua} {2021-08-27} {0.92} +\ProvidesExplPackage {tagpdf-mc-code-lua} {2022-01-13} {0.93} {tagpdf - mc code only for the luamode } %</luamode> % \end{macrocode} @@ -159,7 +158,7 @@ \cs_new_protected:Npn \@@_add_missing_mcs_to_stream:Nn #1#2 {} % \end{macrocode} % \end{macro} -% \begin{macro}{\@@_mc_if_in:,\tag_mc_if_in:} +% \begin{macro}[pTF]{\@@_mc_if_in:,\tag_mc_if_in:} % This tests, if we are in an mc, for attributes % this means to check against a number. % \begin{macrocode} @@ -358,10 +357,12 @@ % \subsection{Key definitions} % \begin{macro} % { -% tag,raw, -% alttext, -% actualtext, -% label,artifact +% tag (mc-key), +% raw (mc-key), +% alttext (mc-key), +% actualtext (mc-key), +% label (mc-key), +% artifact (mc-key) % } % TODO: check conversion, check if local/global setting is right. % \begin{macrocode} diff --git a/macros/latex/contrib/tagpdf/tagpdf-mc-shared.dtx b/macros/latex/contrib/tagpdf/tagpdf-mc-shared.dtx index 17f6df0fcf..852f1d0846 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-mc-shared.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-mc-shared.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf-mc.dtx % -% Copyright (C) 2019-2021 Ulrike Fischer +% 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 @@ -50,7 +50,7 @@ % }^^A % } % -% \date{Version 0.92, released 2021-08-27} +% \date{Version 0.93, released 2022-01-13} % \maketitle % \begin{documentation} % \section{Public Commands} @@ -120,7 +120,7 @@ % The following keys can be used with |\tag_mc_begin:n|, |\tagmcbegin|, % |\tag_mc_begin_pop:n|, % -% \begin{function}{tag} +% \begin{function}{tag (mc-key)} % This key is required, unless artifact is used. % The value is a tag like |P| or |H1| without a slash at the begin, % this is added by the code. @@ -131,7 +131,7 @@ % (some ascii with numbers like \texttt{H4} is fine). % \end{function} % -% \begin{function}{artifact} +% \begin{function}{artifact (mc-key)} % 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 |pagination|, @@ -139,33 +139,33 @@ % (this is the default). % \end{function} % -% \begin{function}{raw} +% \begin{function}{raw (mc-key)} % This key allows 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{function} % -% \begin{function}{alttext} +% \begin{function}{alttext (mc-key)} % This key inserts an \texttt{/Alt} value in the property dictionary of the BDC operator. % The value is handled as verbatim string, commands are not expanded. % The value will be expanded first once. % \end{function} % -% \begin{function}{actualtext} +% \begin{function}{actualtext (mc-key)} % This key inserts an \texttt{/ActualText} value in the property dictionary % of the BDC operator. The value is handled as verbatim string, % commands are not expanded. % The value will be expanded first once. % \end{function} % -% \begin{function}{label} +% \begin{function}{label (mc-key)} % This key sets a label by which one can call the marked content % later in another structure % (if it has been stashed with the |stash| key). % Internally the label name will start with \texttt{tagpdf-}. % \end{function} % -% \begin{function}{stash} +% \begin{function}{stash (mc-key)} % This \enquote{stashes} an mc-chunk: it is not inserted into the current structure. % It should be normally be used along with a label to be able to use the mc-chunk % in another place. @@ -178,7 +178,7 @@ % \begin{macrocode} %<@@=tag> %<*header> -\ProvidesExplPackage {tagpdf-mc-code-shared} {2021-08-27} {0.92} +\ProvidesExplPackage {tagpdf-mc-code-shared} {2022-01-13} {0.93} {part of tagpdf - code related to marking chunks - code shared by generic and luamode } %</header> @@ -407,7 +407,7 @@ % \subsection{Keys} % This are the keys where the code can be shared between the modes. % -% \begin{macro}{stash,__artifact-bool,__artifact-type} +% \begin{macro}{stash (mc-key),__artifact-bool,__artifact-type} % the two internal artifact keys are use to define the public |artifact|. % For now we add support for the subtypes Header and Footer. % Watermark,PageNum, LineNum,Redaction,Bates will be added if some use case diff --git a/macros/latex/contrib/tagpdf/tagpdf-roles.dtx b/macros/latex/contrib/tagpdf/tagpdf-roles.dtx index 78dccdc02a..f8b0589bb5 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-roles.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-roles.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf-roles.dtx % -% Copyright (C) 2019-2021 Ulrike Fischer +% 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 @@ -50,13 +50,48 @@ % }^^A % } % -% \date{Version 0.92, released 2021-08-27} +% \date{Version 0.93, released 2022-01-13} % \maketitle +% \begin{documentation} +% \begin{function} +% { +% add-new-tag (setup-key), +% tag (rolemap-key), +% namespace (rolemap-key), +% role (rolemap-key), +% role-namespace (rolemap-key) +% } +% This key can be used in \cs{tagpdfsetup} to declare and rolemap new tags. +% It takes as value a key-value list or a simple |new-tag/old-tag|. +% +% The key-value list knows the following keys: +% \begin{description} +% \item[\texttt{tag}] This is the name of the new type as it should then be used in \cs{tagstructbegin}. +% \item[\texttt{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[\texttt{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 tagpdf can't/won't check such unusual role mapping. +% \item[\texttt{role-namespace}] If the role is a known type +% the default value is the default namespace of this type. +% If the role is unknown, |user| is used and +% the code hopes that the type will be defined later. With this key a specific +% namespace can be forced. +% \end{description} +% \end{function} +% \end{documentation} % \begin{implementation} % \begin{macrocode} %<@@=tag> %<*header> -\ProvidesExplPackage {tagpdf-roles-code} {2021-08-27} {0.92} +\ProvidesExplPackage {tagpdf-roles-code} {2022-01-13} {0.93} {part of tagpdf - code related to roles and structure names} %</header> % \end{macrocode} @@ -631,9 +666,15 @@ % \end{macrocode} % \end{macro} % \subsection{Key-val user interface} -% The user interface use the key |add-new-tag|, which takes either a +% The user interface uses the key |add-new-tag|, which takes either a % keyval list as argument, or a tag/role. -% \begin{macro}{tag,tag-namespace,role,role-namespace,add-new-tag} +% \begin{macro} +% { +% tag (rolemap-key), +% tag-namespace (rolemap-key), +% role (rolemap-key), +% role-namespace (rolemap-key), +% add-new-tag (setup-key)} % \begin{macrocode} \keys_define:nn { @@ / tag-role } { diff --git a/macros/latex/contrib/tagpdf/tagpdf-space.dtx b/macros/latex/contrib/tagpdf/tagpdf-space.dtx index c2a999cc1b..40c4367ba2 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-space.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-space.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf-space.dtx % -% Copyright (C) 2019-2021 Ulrike Fischer +% 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 @@ -50,13 +50,25 @@ % }^^A % } % -% \date{Version 0.92, released 2021-08-27} +% \date{Version 0.93, released 2022-01-13} % \maketitle +% \begin{documentation} +% \begin{function}{interwordspace (setup-key)} +% This key allows to activate/deactivate the real space chars if the engine supports +% it. The allowed values are |true|, |on|, |false|, |off|. +% \end{function} +% \begin{function}{show-spaces (setup-key)} +% This key works only with luatex and shows with small red +% bars where spaces have been inserted. This is only for debugging and +% is not completly reliable (and change affect other literals and tagging), so it +% should be used with care. +% \end{function} +% \end{documentation} % \begin{implementation} % \begin{macrocode} %<@@=tag> %<*header> -\ProvidesExplPackage {tagpdf-space-code} {2021-08-27} {0.92} +\ProvidesExplPackage {tagpdf-space-code} {2022-01-13} {0.93} {part of tagpdf - code related to real space chars} %</header> % \end{macrocode} @@ -65,7 +77,7 @@ % support real space chars. Most of the code for luatex which uses attributes % is in the lua code, here are only the keys. % -% \begin{macro}{interwordspace,show-spaces} +% \begin{macro}{interwordspace (setup-key),show-spaces (setup-key)} % \begin{macrocode} %<*package> \sys_if_engine_pdftex:T diff --git a/macros/latex/contrib/tagpdf/tagpdf-struct.dtx b/macros/latex/contrib/tagpdf/tagpdf-struct.dtx index 610d631333..6f03c5ac0f 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-struct.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-struct.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf-struct.dtx % -% Copyright (C) 2019-2021 Ulrike Fischer +% 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 @@ -50,7 +50,7 @@ % }^^A % } % -% \date{Version 0.92, released 2021-08-27} +% \date{Version 0.93, released 2022-01-13} % \maketitle % \begin{documentation} % \section{Public Commands} @@ -94,9 +94,9 @@ % \end{function} % \section{Public keys} % \subsection{Keys for the structure commands} -% \begin{function}{tag} +% \begin{function}{tag (struct-key)} % This is required. The value of the key is normally one of the -% standard types listed in section \ref{sec:new-tag}. +% standard types listed in the main tagpdf documentation. % It is possible to setup new tags/types. % The value can also be of the form |type/NS|, where |NS| is the % shorthand of a declared name space. @@ -104,54 +104,54 @@ % This allows to use a different name space than % the one connected by default to the tag. But normally this should not be needed. % \end{function} -% \begin{function}{stash} +% \begin{function}{stash (struct-key)} % Normally a new structure inserts itself as a kid % into the currently active structure. This key prohibits this. % The structure is nevertheless from now on % \enquote{the current active structure} % and parent for following marked content and structures. % \end{function} -% \begin{function}{label} +% \begin{function}{label (struct-key)} % This key sets a label by which % one can use the structure later in another structure. % Internally the label name will start with \texttt{tagpdfstruct-}. % \end{function} -% \begin{function}{title,title-o} +% \begin{function}{title (struct-key),title-o (struct-key)} % This keys allows to set the dictionary entry % \texttt{/Title} in the structure object. % The value is handled as verbatim string and hex encoded. % Commands are not expanded. |title-o| will expand the value once. % \end{function} % -% \begin{function}{alttext} +% \begin{function}{alttext (struct-key)} % This key inserts an \texttt{/Alt} value in the dictionary of structure object. % The value is handled as verbatim string and hex encoded. % The value will be expanded first once. % \end{function} -% \begin{function}{actualtext} +% \begin{function}{actualtext (struct-key)} % This key inserts an \texttt{/ActualText} value in the dictionary of structure object. % The value is handled as verbatim string and hex encoded. % The value will be expanded first once. % \end{function} -% \begin{function}{lang} +% \begin{function}{lang (struct-key)} % This key allows to set the language for a structure element. The value should be a bcp-identifier, % e.g. |de-De|. % \end{function} -% \begin{function}{ref} +% \begin{function}{ref (struct-key)} % This key allows to add references to other structure elements, % it adds the |/Ref| array to the structure. % The value should be a comma separated list of structure labels % set with the |label| key. e.g. |ref={label1,label2}|. % \end{function} -% \begin{function}{E} +% \begin{function}{E (struct-key)} % This key sets the |/E| key, the expanded form of an % abbreviation or an acronym % (I couldn't think of a better name, so I sticked to E). % \end{function} -% \begin{function}{AF,AFinline,AFinline-o} +% \begin{function}{AF (struct-key),AFinline (struct-key),AFinline-o (struct-key)} % \begin{syntax} % AF = \meta{object name}\\ -% AF-inline = \meta{text content} +% AF-inline = \meta{text content}\\ % \end{syntax} % These keys allows to reference an associated file in the structure element. % The value \meta{object name} should be the name of an object pointing @@ -165,9 +165,11 @@ % Future versions will perhaps extend this to more mime types, but it is % still a research task to find out what is really needed. % +% |AF| can be used more than once, to associate more than one file. The inline +% keys can be used only once per structure. Additional calls are ignored. % \end{function} % -% \begin{function}{attribute} +% \begin{function}{attribute (struct-key)} % This key takes as argument a comma list of attribute names % (use braces to protect the commas from the external key-val parser) % and allows to add one or more attribute dictionary entries in @@ -179,7 +181,7 @@ % % \end{function} % -% \begin{function}{attribute-class} +% \begin{function}{attribute-class (struct-key)} % This key takes as argument a comma list of attribute class names % (use braces to protect the commas from the external key-val parser) % and allows to add one or more attribute classes to the structure object. @@ -188,7 +190,7 @@ % must be declared first in \cs{tagpdfsetup}. % \end{function} % \subsection{Setup keys} -% \begin{function}{newattribute} +% \begin{function}{newattribute (setup-key)} % \begin{syntax} % newattribute = \Arg{name}\Arg{Content} % \end{syntax} @@ -206,12 +208,20 @@ % \end{verbatim} % % \end{function} +% \begin{function}{root-AF (setup-key)} +% \begin{syntax} +% root-AF = \meta{object name} +% \end{syntax} +% This key can be used in the setup command \cs{tagpdfsetup} and allows +% to add associated files to the root structure. Like |AF| it can be used more than +% once to add more than one file. +% \end{function} % \end{documentation} % \begin{implementation} % \begin{macrocode} %<@@=tag> %<*header> -\ProvidesExplPackage {tagpdf-struct-code} {2021-08-27} {0.92} +\ProvidesExplPackage {tagpdf-struct-code} {2022-01-13} {0.93} {part of tagpdf - code related to storing structure} %</header> % \end{macrocode} @@ -313,7 +323,8 @@ ParentTreeNextKey, % optional RoleMap, ClassMap, - Namespaces + Namespaces, + AF %pdf 2.0 } \seq_const_from_clist:Nn \c_@@_struct_StructElem_entries_seq @@ -742,11 +753,16 @@ % at the begin. % \begin{macro} % { -% label,stash,tag, -% title,title-o, -% alttext, -% actualtext, -% lang,ref,E +% label (struct-key), +% stash (struct-key), +% tag (struct-key), +% title (struct-key), +% title-o (struct-key), +% alttext (struct-key), +% actualtext (struct-key), +% lang (struct-key), +% ref (struct-key), +% E (struct-key) % } % \begin{macrocode} \keys_define:nn { @@ / struct } @@ -854,22 +870,51 @@ } % \end{macrocode} % \end{macro} -% \begin{macro}{AF,AFinline,AFinline-o} +% \begin{macro}{AF (struct-key),AFinline (struct-key),AFinline-o (struct-key)} % keys for the AF keys (associated files). They use commands from l3pdffile! % The stream variants use txt as extension to get the mimetype. % TODO: check if this should be configurable. For math we will perhaps need another % extension. +% AF is an array and can be used more than once, so we store it in a tl. +% which is expanded. +% AFinline can be use only once (more quite probably doesn't make sense). % \begin{macrocode} +\cs_new_protected:Npn \@@_struct_add_AF:nn #1 #2 % #1 struct num #2 object name + { + \tl_if_exist:cTF + { + g_@@_struct_#1_AF_tl + } + { + \tl_gput_right:cx + { g_@@_struct_#1_AF_tl } + { ~ \pdf_object_ref:n {#2} } + } + { + \tl_new:c + { g_@@_struct_#1_AF_tl } + \tl_gset:cx + { g_@@_struct_#1_AF_tl } + { \pdf_object_ref:n {#2} } + } + } +\cs_generate_variant:Nn \@@_struct_add_AF:nn {en,ee} \keys_define:nn { @@ / struct } { AF .code:n = % AF property { \pdf_object_if_exist:nTF {#1} { + \@@_struct_add_AF:en { \int_eval:n {\c@g_@@_struct_abs_int} }{#1} \@@_prop_gput:cnx { g_@@_struct_\int_eval:n {\c@g_@@_struct_abs_int}_prop } { AF } - { \pdf_object_ref:n {#1} } + { + [ + \tl_use:c + { g_@@_struct_\int_eval:n {\c@g_@@_struct_abs_int}_AF_tl } + ] + } } { @@ -879,16 +924,24 @@ { \group_begin: \pdf_object_if_exist:eF {@@/fileobj\int_use:N\c@g_@@_struct_abs_int} - { - \pdffile_embed_stream:nxx - {#1} - {tag-AFfile\int_use:N\c@g_@@_struct_abs_int.txt} - {@@/fileobj\int_use:N\c@g_@@_struct_abs_int} - } - \@@_prop_gput:cnx - { g_@@_struct_\int_use:N\c@g_@@_struct_abs_int _prop } - { AF } - { \pdf_object_ref:e {@@/fileobj\int_use:N\c@g_@@_struct_abs_int } } + { + \pdffile_embed_stream:nxx + {#1} + {tag-AFfile\int_use:N\c@g_@@_struct_abs_int.txt} + {@@/fileobj\int_use:N\c@g_@@_struct_abs_int} + \@@_struct_add_AF:ee + { \int_eval:n {\c@g_@@_struct_abs_int} } + { @@/fileobj\int_use:N\c@g_@@_struct_abs_int } + \@@_prop_gput:cnx + { g_@@_struct_\int_use:N\c@g_@@_struct_abs_int _prop } + { AF } + { + [ + \tl_use:c + { g_@@_struct_\int_eval:n {\c@g_@@_struct_abs_int}_AF_tl } + ] + } + } \group_end: } ,AFinline-o .code:n = @@ -900,24 +953,63 @@ {#1} {tag-AFfile\int_use:N\c@g_@@_struct_abs_int.txt} {@@/fileobj\int_use:N\c@g_@@_struct_abs_int} + \@@_struct_add_AF:ee + { \int_eval:n {\c@g_@@_struct_abs_int} } + { @@/fileobj\int_use:N\c@g_@@_struct_abs_int } + \@@_prop_gput:cnx + { g_@@_struct_\int_use:N\c@g_@@_struct_abs_int _prop } + { AF } + { + [ + \tl_use:c + { g_@@_struct_\int_eval:n {\c@g_@@_struct_abs_int}_AF_tl } + ] + } } - \@@_prop_gput:cnx - { g_@@_struct_\int_use:N\c@g_@@_struct_abs_int _prop } - { AF } - { \pdf_object_ref:e {@@/fileobj\int_use:N\c@g_@@_struct_abs_int } } \group_end: } } +%</package> +% \end{macrocode} +% \end{macro} +% \begin{macro}{root-AF (setup-key)} +% The root structure can take AF keys too, so we provide a key for it. +% This key is used with |\tagpdfsetup|, not in a structure! +% \begin{macrocode} +\keys_define:nn { @@ / setup } + { + root-AF .code:n = + { + \pdf_object_if_exist:nTF {#1} + { + \@@_struct_add_AF:en { 0 }{#1} + \@@_prop_gput:cnx + { g_@@_struct_0_prop } + { AF } + { + [ + \tl_use:c + { g_@@_struct_0_AF_tl } + ] + } + } + { + + } + }, + } % \end{macrocode} % \end{macro} -% % \section{User commands} % % \begin{macro}{\tag_struct_begin:n,\tag_struct_end:} % \begin{macrocode} -\cs_new_protected:Npn \tag_struct_begin:n #1 %#1 key-val +%<*package|debug> +%<package>\cs_new_protected:Npn \tag_struct_begin:n #1 %#1 key-val +%<debug>\cs_set_protected:Npn \tag_struct_begin:n #1 %#1 key-val { - \@@_check_if_active_struct:T +%<package>\@@_check_if_active_struct:T +%<debug>\@@_check_if_active_struct:TF { \group_begin: \int_gincr:N \c@g_@@_struct_abs_int @@ -970,16 +1062,18 @@ } %\prop_show:c { g_@@_struct_\g_@@_struct_stack_current_tl _prop } %\seq_show:c {g_@@_struct_kids_\l_@@_struct_stack_parent_tmpa_tl _seq} +%<debug> \@@_debug_struct_begin_insert:n { #1 } \group_end: } +%<debug>{ \@@_debug_struct_begin_ignore:n { #1 }} } - - -\cs_new_protected:Nn \tag_struct_end: +%<package>\cs_new_protected:Nn \tag_struct_end: +%<debug>\cs_set_protected:Nn \tag_struct_end: { %take the current structure num from the stack: %the objects are written later, lua mode hasn't all needed info yet %\seq_show:N \g_@@_struct_stack_seq - \@@_check_if_active_struct:T +%<package>\@@_check_if_active_struct:T +%<debug>\@@_check_if_active_struct:TF { \seq_gpop:NN \g_@@_struct_tag_stack_seq \l_@@_tmpa_tl \seq_gpop:NNTF \g_@@_struct_stack_seq \l_@@_tmpa_tl @@ -999,14 +1093,18 @@ { \tl_gset:NV \g_@@_struct_tag_tl \l_@@_tmpa_tl } +%<debug>\@@_debug_struct_end_insert: } +%<debug>{\@@_debug_struct_end_ignore:} } +%</package|debug> % \end{macrocode} % \end{macro} % \begin{macro}{\tag_struct_use:n} % This command allows to use a stashed structure in another place. % TODO: decide how it should be guarded. Probably by the struct-check. % \begin{macrocode} +%<*package> \cs_new_protected:Nn \tag_struct_use:n %#1 is the label { \@@_check_if_active_struct:T @@ -1073,7 +1171,7 @@ % \section{Attributes and attribute classes} % \begin{macrocode} %<*header> -\ProvidesExplPackage {tagpdf-attr-code} {2021-08-27} {0.92} +\ProvidesExplPackage {tagpdf-attr-code} {2022-01-13} {0.93} {part of tagpdf - code related to attributes and attribute classes} %</header> % \end{macrocode} @@ -1101,7 +1199,7 @@ % \end{macrocode} % \end{variable} % \subsection{Commands and keys} -% \begin{macro}{\@@_attr_new_entry:nn,newattribute} +% \begin{macro}{\@@_attr_new_entry:nn,newattribute (setup-key)} % This allows to define attributes. Defined attributes % are stored in a global property. |newattribute| expects % two brace group, the name and the content. The content typically @@ -1132,7 +1230,7 @@ } % \end{macrocode} % \end{macro} -% \begin{macro}{attribute-class} +% \begin{macro}{attribute-class (struct-key)} % attribute-class has to store the used attribute names so that % they can be added to the ClassMap later. % \begin{macrocode} @@ -1172,7 +1270,7 @@ } % \end{macrocode} % \end{macro} -% \begin{macro}{attribute} +% \begin{macro}{attribute (struct-key)} % \begin{macrocode} \keys_define:nn { @@ / struct } { diff --git a/macros/latex/contrib/tagpdf/tagpdf-tree.dtx b/macros/latex/contrib/tagpdf/tagpdf-tree.dtx index b8e1b0d54a..e6964666d9 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-tree.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-tree.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf-tree.dtx % -% Copyright (C) 2019-2021 Ulrike Fischer +% 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 @@ -51,13 +51,13 @@ % }^^A % } % -% \date{Version 0.92, released 2021-08-27} +% \date{Version 0.93, released 2022-01-13} % \maketitle % \begin{implementation} % \begin{macrocode} %<@@=tag> %<*header> -\ProvidesExplPackage {tagpdf-tree-code} {2021-08-27} {0.92} +\ProvidesExplPackage {tagpdf-tree-code} {2022-01-13} {0.93} {part of tagpdf - code related to writing trees and dictionaries to the pdf} %</header> % \end{macrocode} diff --git a/macros/latex/contrib/tagpdf/tagpdf-user.dtx b/macros/latex/contrib/tagpdf/tagpdf-user.dtx index 23737dfc29..2b58d81659 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-user.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-user.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf-user.dtx % -% Copyright (C) 2019-2021 Ulrike Fischer +% 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 @@ -50,7 +50,7 @@ % }^^A % } % -% \date{Version 0.92, released 2021-08-27} +% \date{Version 0.93, released 2022-01-13} % \maketitle % \begin{documentation} % \section{Setup commands} @@ -60,7 +60,18 @@ % \end{syntax} % This is the main setup command to adapt the behaviour of tagpdf. % It can be used in the preamble and in the document (but not all keys make sense there). +% \end{function} % +% \begin{function}{activate (setup-key)} +% And additional setup key which combine the other activate keys +% |activate-mc|, |activate-tree|, |activate-struct| and additionally +% add a document structure. +% \end{function} +% +% +% \begin{function}{\tagpdfifluatexTF,\tagpdfifluatexT,\tagpdfifpdftexT} +% small wrappers around engine tests. This functions should not be used and will be removed +% in one of the next versions. % \end{function} % % \section{Commands related to mc-chunks} @@ -76,7 +87,7 @@ % and \cs{tagmcend} will issue in horizontal mode an \cs{unskip}. % \end{function} % -% \begin{function}{\tagmcifin} +% \begin{function}{\tagmcifinTF} % \begin{syntax} % \cs{tagmcifin} \Arg{true code}\Arg{false code} % \end{syntax} @@ -112,7 +123,7 @@ % necessarly stops the compilation. The keys and their function are described below. % \end{function} % -% \begin{function}{mc-data} +% \begin{function}{mc-data (show-key)} % \begin{syntax} % |mc-data| = \meta{number} % \end{syntax} @@ -123,7 +134,7 @@ % newpage. The value is a positive integer and sets the first mc-shown. If no value % is given, 1 is used and so all mc-chunks created so far are shown. % \end{function} -% \begin{function}{mc-current} +% \begin{function}{mc-current (show-key)} % \begin{syntax} % |mc-current| % \end{syntax} @@ -131,7 +142,14 @@ % chunk is open it shows only the state of the abs count. It works in all mode, % but the output in luamode looks different. % \end{function} -% \begin{function}{struct-stack} +% \begin{function}{mc-marks (show-key)} +% \begin{syntax} +% |mc-marks| = |show|\verb+|+|use| +% \end{syntax} +% This key helps to debug the page marks. It should only be used at shipout in +% header or footer. +% \end{function} +% \begin{function}{struct-stack (show-key)} % \begin{syntax} % |struct-stack| = |log|\verb+|+|show| % \end{syntax} @@ -163,7 +181,7 @@ % faulty code, e.g. a missing |\par| at the end of a low-level vbox can highly % confuse the tagging. The tags should be carefully checked if this is used. % -% \begin{function}{paratagging,paratagging-show} +% \begin{function}{paratagging (setup-key),paratagging-show (setup-key)} % \begin{syntax} % |paratagging| = |true|\verb+|+|false|\\ % |paratagging-show| = |true|\verb+|+|false|\\ @@ -179,15 +197,34 @@ % faster then |\tagpdfsetup|. But I'm not sure if the names are good. % \end{function} % +% \begin{function}{\tagpdfsuppressmarks} +% This command allows to suppress the creation of the marks. It takes an argument +% which should normally be one of the mc-commands, puts a group around it and +% suppress the marks creation in this group. This command should be used if +% the begin and end command are at different boxing levels. E.g. +% \begin{verbatim} +% \@hangfrom +% { +% \tagstructbegin{tag=H1}% +% \tagmcbegin {tag=H1}% +% #2 +% } +% {#3\tagpdfsuppressmarks{\tagmcend}\tagstructend}% +% \end{verbatim} +% \end{function} +% % \subsection{Header and footer} -% Header and footer are automatically excluded from tagging. This can for -% now to allow debugging be disabled with the following key, but probably -% this key will disappear again. If some real content is in the header and +% Header and footer are automatically excluded from tagging. This can +% be disabled with the following key. +% If some real content is in the header and % footer, tagging must be restarted there explicitly. +% The key accepts the values |true| which surrounds the header with an artifact +% mc-chunk, |false| which disables the automatic tagging, and |pagination| which +% additionally adds an artifact structure with an pagination attribute. % -% \begin{function}{exclude-header-footer} +% \begin{function}{exclude-header-footer (setup-key)} % \begin{syntax} -% |exclude-header-footer| = |true|\verb+|+|false| +% |exclude-header-footer| = |true|\verb+|+|false|\verb+|+pagination % \end{syntax}% % \end{function} @@ -213,7 +250,7 @@ % \begin{macrocode} %<@@=tag> %<*header> -\ProvidesExplPackage {tagpdf-user} {2021-08-27} {0.92} +\ProvidesExplPackage {tagpdf-user} {2022-01-13} {0.93} {tagpdf - user commands} %</header> % \end{macrocode} @@ -288,14 +325,6 @@ % \end{macro} % % -% \begin{macro}{\tagpdfifluatexTF,\tagpdfifluatexT,\tagpdfifpdftexTF} -% I should deprecate them ... -% \begin{macrocode} -\cs_set_eq:NN\tagpdfifluatexTF \sys_if_engine_luatex:TF -\cs_set_eq:NN\tagpdfifluatexT \sys_if_engine_luatex:T -\cs_set_eq:NN\tagpdfifpdftexT \sys_if_engine_pdftex:T -% \end{macrocode} -% \end{macro} % % \section{Debugging} % \begin{macro}{\ShowTagging} @@ -310,7 +339,7 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{mc-data} +% \begin{macro}{mc-data (show-key)} % This key is (currently?) relevant for lua mode only. % It shows the data of all mc-chunks created so far. % It is accurate only after shipout, so typically should be issued after a @@ -330,7 +359,7 @@ % \end{macrocode} % \end{macro} -% \begin{macro}{mc-current} +% \begin{macro}{mc-current (show-key)} % This shows some info about the current mc-chunk. It works in generic and lua-mode. % \begin{macrocode} \keys_define:nn { @@ / show } @@ -397,7 +426,7 @@ } % \end{macrocode} % \end{macro} -% \begin{macro}{mc-marks} +% \begin{macro}{mc-marks (show-key)} % It maps the mc-marks into the sequences and then shows them. % This allows to inspect the first and last mc-Mark on a page. % It should only be used in the shipout (header/footer). @@ -447,7 +476,7 @@ } % \end{macrocode} % \end{macro} -% \begin{macro}{struct-stack} +% \begin{macro}{struct-stack (show-key)} % \begin{macrocode} \keys_define:nn { @@ / show } { @@ -466,7 +495,7 @@ % This part should be regularly revisited to check if the code should go to a % better place or can be improved. % \subsection{Document structure} -% \begin{macro}{\@@_add_document_structure:n,activate} +% \begin{macro}{\@@_add_document_structure:n,activate (setup-key)} % \begin{macrocode} \cs_new_protected:Npn \@@_add_document_structure:n #1 { @@ -485,6 +514,28 @@ } % \end{macrocode} % \end{macro} +% \subsection{Structure destinations} +% In TeXlive 2022 pdftex and luatex will offer support for structure destinations. +% The pdfmanagement has already backend support. We activate them if the +% prerequisites are there: The pdf version should be 2.0, structures should be activated, +% the code in the pdfmanagement must be there. +% \begin{macrocode} +\AddToHook{begindocument/before} + { + \bool_lazy_all:nT + { + { \g_@@_active_struct_dest_bool } + { \g_@@_active_struct_bool } + { \cs_if_exist_p:N \pdf_activate_structure_destination: } + { ! \pdf_version_compare_p:Nn < {2.0} } + } + { + \tl_set:Nn \l_pdf_current_structure_destination_tl { __tag/struct/\g__tag_struct_stack_current_tl } + \pdf_activate_structure_destination: + } + } +% \end{macrocode} + % \subsection{Fake space} % \begin{macro}{\pdffakespace} % We need a luatex variant for |\pdffakespace|. This should probably go into @@ -518,8 +569,8 @@ % %\begin{macro} % { -% paratagging, -% paratagging-show, +% paratagging (setup-key), +% paratagging-show (setup-key), % } % These keys enable/disable locally paratagging, and the debug modus. % It can affect the typesetting if |paratagging-show| is used. The small numbers @@ -593,7 +644,7 @@ \tl_put_right:Nn \@mult@ptagging@hook { \@@_check_typeout_v:n {====>~In~\string\page@sofar} - \process@cols\mult@gfirstbox + \process@cols\mult@firstbox { \@@_add_missing_mcs_to_stream:Nn \count@ {multicol} } @@ -686,7 +737,41 @@ \bool_gset_eq:NN \g_@@_in_mc_bool\g_@@_saved_in_mc_bool } } +% \end{macrocode} +% This version allows to use an Artifact structure +% \begin{macrocode} +\@@_attr_new_entry:nn {@@/attr/pagination}{/O/Artifact/Type/Pagination} +\cs_new_protected:Npn \@@_exclude_struct_headfoot_begin:n #1 + { + \bool_set_false:N \l_@@_para_bool + \bool_if:NTF \g_@@_mode_lua_bool + { + \tag_mc_end_push: + } + { + \bool_gset_eq:NN \g_@@_saved_in_mc_bool \g_@@_in_mc_bool + \bool_gset_false:N \g_@@_in_mc_bool + } + \tag_struct_begin:n{tag=Artifact,attribute-class=@@/attr/#1} + \tag_mc_begin:n {artifact=#1} + } +\cs_new_protected:Npn \@@_exclude_struct_headfoot_end: + { + \tag_mc_end: + \tag_struct_end: + \bool_if:NTF \g_@@_mode_lua_bool + { + \tag_mc_begin_pop:n{} + } + { + \bool_gset_eq:NN \g_@@_in_mc_bool\g_@@_saved_in_mc_bool + } + } +% \end{macrocode} +% And now the keys +% \begin{macro}{exclude-header-footer (setup-key)} +% \begin{macrocode} \keys_define:nn { @@ / setup } { exclude-header-footer .choice:, @@ -697,6 +782,13 @@ \cs_set_eq:NN \@@_hook_kernel_after_head: \@@_exclude_headfoot_end: \cs_set_eq:NN \@@_hook_kernel_after_foot: \@@_exclude_headfoot_end: }, + exclude-header-footer / pagination .code:n = + { + \cs_set:Nn \@@_hook_kernel_before_head: { \@@_exclude_struct_headfoot_begin:n {pagination} } + \cs_set:Nn \@@_hook_kernel_before_foot: { \@@_exclude_struct_headfoot_begin:n {pagination} } + \cs_set_eq:NN \@@_hook_kernel_after_head: \@@_exclude_struct_headfoot_end: + \cs_set_eq:NN \@@_hook_kernel_after_foot: \@@_exclude_struct_headfoot_end: + }, exclude-header-footer / false .code:n = { \cs_set_eq:NN \@@_hook_kernel_before_head: \prg_do_nothing: @@ -708,7 +800,7 @@ exclude-header-footer .initial:n = true } % \end{macrocode} - +% \end{macro} % \subsection{Links} % We need to close and reopen mc-chunks around links. % Currently we handle URI and GoTo (internal) links. diff --git a/macros/latex/contrib/tagpdf/tagpdf.dtx b/macros/latex/contrib/tagpdf/tagpdf.dtx index 0aeac22d7f..5406505c59 100644 --- a/macros/latex/contrib/tagpdf/tagpdf.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf.dtx @@ -2,7 +2,7 @@ % %% File: tagpdf.dtx % -% Copyright (C) 2019-2021 Ulrike Fischer +% 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 @@ -23,13 +23,64 @@ % for those people who are interested. % % \fi +% \begin{documentation} +% \begin{function}{\ref_value:nnn} +% This is a temporary definition which will have to +% move to l3ref. It allows to locally set a default value if the label or the attribute +% doesn't exist. See issue \#4 in Accessible-xref. +% \begin{syntax} +% \cs{ref_value:nnn}\Arg{label}\Arg{attribute}\Arg{fallback default} +% \end{syntax} +% \end{function} +% +% \begin{function}{ \tag_stop_group_begin:, \tag_stop_group_end: } +% We need a command to stop tagging in some places. +% This simply switches the two local booleans. +% \end{function} +% +% \begin{function}{activate-space (setup-key)} +% |activate-space| activates the additional parsing needed for +% interword spaces. It is not documented, the parsing is currently +% implicitly activated by the known key |interwordspace|, as the code will +% perhaps move to some other place, now that it is better separated. +% \end{function} +% +% \begin{function}{activate-mc (setup-key), +% activate-tree (setup-key), +% activate-struct (setup-key), +% activate-all (setup-key)} +% Keys to activate the various tagging steps +% \end{function} +%\begin{function}{no-struct-dest (setup-key)} +% The key allows to suppress the creation of structure destinations +% \end{function} +% +% \begin{function}{log (setup-key)} +% The |log| takes currently the values |none|, |v|, |vv|, |vvv|, |all|. +% More details are in \texttt{tagpdf-checks}. +% \end{function} +% +% \begin{function}{tagunmarked (setup-key)} +% This key allows to set if (in luamode) unmarked text should be +% marked up as artifact. The initial value is true. +% \end{function} +% +% \begin{function}{tabsorder (setup-key)} +% This sets the tabsorder on a page. The values are |row|, |column|, |structure| (default) +% or |none|. Currently this is set more or less globally. More finer control can be +% added if needed. +% \end{function} % +% \begin{function}{tagstruct,tagstructobj,tagabspage,tagmcabs,tagmcid} +% These are attributes used by the label/ref system. +% \end{function} +% \end{documentation} % \begin{implementation} % \section{Initialization and test if pdfmanagement is active.} % \begin{macrocode} %<@@=tag> %<*package> -\ProvidesExplPackage {tagpdf} {2021-08-27} {0.92} +\ProvidesExplPackage {tagpdf} {2022-01-13} {0.93} { A package to experiment with pdf tagging } \bool_if:nF @@ -51,18 +102,33 @@ before~\string\documentclass } } +%</package> % \end{macrocode} +%<*debug> +% \begin{macrocode} +\ProvidesExplPackage {tagpdf-debug} {2022-01-13} {0.93} + { debug code for tagpdf } +\@ifpackageloaded{tagpdf}{}{\PackageWarning{tagpdf-debug}{tagpdf~not~loaded,~quitting}\endinput} + \end{macrocode} +%</debug> % We map the internal module name \enquote{tag} to \enquote{tagpdf} in messages. % \begin{macrocode} -\prop_if_exist:NT \g_msg_module_name_prop - { - \prop_gput:Nnn \g_msg_module_name_prop { tag }{ tagpdf } - } +%<*package> +\prop_gput:Nnn \g_msg_module_name_prop { tag }{ tagpdf } +%</package> +% \end{macrocode} +% Debug mode has its special mapping: +% \begin{macrocode} +%<*debug> +\prop_gput:Nnn \g_msg_module_type_prop { tag / debug} {} +\prop_gput:Nnn \g_msg_module_name_prop { tag / debug }{tagpdf~DEBUG} +%</debug> % \end{macrocode} %\section{Package options} % There are only two options to switch for luatex between generic and luamode, % TODO try to get rid of them. % \begin{macrocode} +%<*package> \bool_new:N\g_@@_mode_lua_bool \DeclareOption {luamode} { \sys_if_engine_luatex:T { \bool_gset_true:N \g_@@_mode_lua_bool } } \DeclareOption {genericmode}{ \bool_gset_false:N\g_@@_mode_lua_bool } @@ -105,10 +171,6 @@ % \begin{macro}{\ref_value:nnn} % This allows to locally set a default value if the label or the attribute % doesn't exist. -% See issue \#4 in Accessible-xref. -% \begin{syntax} -% \cs{ref_value:nnn}\Arg{label}\Arg{attribute}\Arg{Fallback default} -% \end{syntax} % \begin{macrocode} \cs_if_exist:NF \ref_value:nnn { @@ -180,7 +242,8 @@ % \g_@@_active_space_bool, % \g_@@_active_mc_bool, % \g_@@_active_tree_bool, -% \g_@@_active_struct_bool +% \g_@@_active_struct_bool, +% \g_@@_active_struct_dest_bool % } % These booleans should help to control the global behaviour of tagpdf. % Ideally it should more or less do nothing if all are false. @@ -190,6 +253,8 @@ % commands, the struct-boolean activates the storing of the structure data. % In a normal document all should be active, the split is only there for % debugging purpose. +% Structure destination will be activated automatically if pdf version 2.0 is detected, +% but with the boolean struct-dest-boolean one can suppress them. % Also we assume currently that they are set only at begin document. But % if some control passing over groups are needed they could be perhaps % used in a document too. @@ -199,6 +264,8 @@ \bool_new:N \g_@@_active_mc_bool \bool_new:N \g_@@_active_tree_bool \bool_new:N \g_@@_active_struct_bool +\bool_new:N \g_@@_active_struct_dest_bool +\bool_gset_true:N \g_@@_active_struct_dest_bool % \end{macrocode} % \end{variable} @@ -369,17 +436,19 @@ % % \begin{macro} % { -% activate-space, -% activate-mc, -% activate-tree, -% activate-struct, -% activate-all, +% activate-space (setup-key), +% activate-mc (setup-key), +% activate-tree (setup-key), +% activate-struct (setup-key), +% activate-all (setup-key), +% no-struct-dest (setup-key) % } % Keys to (globally) activate tagging. % |activate-space| activates the additional parsing needed for % interword spaces. It is not documented, the parsing is currently % implicitly activated by the known key |interwordspace|, as the code will % perhaps move to some other place, now that it is better separated. +% |no-struct-dest| allows to suppress structure destinations. % \begin{macrocode} \keys_define:nn { @@ / setup } { @@ -388,10 +457,12 @@ activate-tree .bool_gset:N = \g_@@_active_tree_bool, activate-struct .bool_gset:N = \g_@@_active_struct_bool, activate-all .meta:n = - {activate-mc,activate-tree,activate-struct}, + {activate-mc={#1},activate-tree={#1},activate-struct={#1}}, + activate-all .default:n = true, + no-struct-dest .bool_gset_inverse:N = \g_@@_active_struct_dest_bool, % \end{macrocode} % \end{macro} -% \begin{macro}{log} +% \begin{macro}{log (setup-key)} % The |log| takes currently the values |none|, |v|, |vv|, |vvv|, |all|. % The description of the log levels is in tagpdf-checks. % \begin{macrocode} @@ -407,7 +478,7 @@ log / all .code:n = {\int_set:Nn \l_@@_loglevel_int { 10 }}, % \end{macrocode} % \end{macro} -% \begin{macro}{tagunmarked} +% \begin{macro}{tagunmarked (setup-key)} % This key allows to set if (in luamode) unmarked text should be % marked up as artifact. The initial value is true. % \begin{macrocode} @@ -415,9 +486,9 @@ tagunmarked .initial:n = true, % \end{macrocode} % \end{macro} -% \begin{macro}{tabsorder} -% This sets the tabsorder one a page. The values are |row|, |column|, |structure| (default) -% or |none|. Currently this is set more or less globally. More finer controll can be +% \begin{macro}{tabsorder (setup-key)} +% This sets the tabsorder on a page. The values are |row|, |column|, |structure| (default) +% or |none|. Currently this is set more or less globally. More finer control can be % added if needed. % \begin{macrocode} tabsorder .choice:, @@ -452,6 +523,15 @@ \RequirePackage {tagpdf-mc-code-generic} % } %</mcloading> +%<*debug> +\bool_if:NTF \g_@@_mode_lua_bool + { + \RequirePackage {tagpdf-debug-lua} + } + { + \RequirePackage {tagpdf-debug-generic} % + } +%</debug> % \end{macrocode} % \end{implementation} % \PrintIndex diff --git a/macros/latex/contrib/tagpdf/tagpdf.ins b/macros/latex/contrib/tagpdf/tagpdf.ins index 583509d4a2..e212ae48b2 100644 --- a/macros/latex/contrib/tagpdf/tagpdf.ins +++ b/macros/latex/contrib/tagpdf/tagpdf.ins @@ -2,7 +2,7 @@ File: tagpdf.ins -Copyright (C) 2019-2021 Ulrike Fischer +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 @@ -34,7 +34,7 @@ for those people who are interested. \let\MetaPrefix\relax \preamble -Copyright (C) 2019-2021 Ulrike Fischer +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 @@ -59,13 +59,13 @@ and all files in that bundle must be distributed together. { \from{tagpdf.dtx}{package} \from{tagpdf-checks.dtx}{package} - \from{tagpdf-user.dtx}{package} \from{tagpdf-mc-shared.dtx}{shared} \from{tagpdf.dtx}{mcloading} \from{tagpdf-tree.dtx}{package} \from{tagpdf-roles.dtx}{package} \from{tagpdf-struct.dtx}{package}%contains also the attr code. \from{tagpdf-space.dtx}{package} + \from{tagpdf-user.dtx}{package} } } @@ -76,6 +76,26 @@ and all files in that bundle must be distributed together. \generate {\file{tagpdf-mc-code-lua.sty}{\from{tagpdf-mc-luacode.dtx}{luamode}}} +% check later if the mc-code uses debug guards too. +\generate + {\file{tagpdf-debug.sty} + { + \from{tagpdf.dtx}{debug} + \from{tagpdf-checks.dtx}{debug} + \from{tagpdf-user.dtx}{debug} + \from{tagpdf-mc-shared.dtx}{debug} + \from{tagpdf-tree.dtx}{debug} + \from{tagpdf-roles.dtx}{debug} + \from{tagpdf-struct.dtx}{debug}% + \from{tagpdf-space.dtx}{debug} + } + } + +\generate + {\file{tagpdf-debug-generic.sty}{\from{tagpdf-mc-generic.dtx}{debug}}} + +\generate + {\file{tagpdf-debug-lua.sty}{\from{tagpdf-mc-luacode.dtx}{debug}}} \def\MetaPrefix{-- } \def\defaultpostamble{% diff --git a/macros/latex/contrib/tagpdf/tagpdf.pdf b/macros/latex/contrib/tagpdf/tagpdf.pdf Binary files differindex 58004f717f..72892e853c 100644 --- a/macros/latex/contrib/tagpdf/tagpdf.pdf +++ b/macros/latex/contrib/tagpdf/tagpdf.pdf diff --git a/macros/latex/contrib/tagpdf/tagpdf.tex b/macros/latex/contrib/tagpdf/tagpdf.tex index e1d690fc95..af08d81651 100644 --- a/macros/latex/contrib/tagpdf/tagpdf.tex +++ b/macros/latex/contrib/tagpdf/tagpdf.tex @@ -1,12 +1,11 @@ % !Mode:: "TeX:DE:UTF-8:Main" %\PassOptionsToPackage{check-declarations,enable-debug}{expl3} -\RequirePackage{pdfmanagement-testphase} -\DeclareDocumentMetadata{pdfversion=2.0,lang=en-UK} - +%\RequirePackage{pdfmanagement-testphase} +\DocumentMetadata{pdfversion=2.0,lang=en-UK,testphase=phase-II} \makeatletter -\def\UlrikeFischer@package@version{0.92} -\def\UlrikeFischer@package@date{2021-08-27} +\def\UlrikeFischer@package@version{0.93} +\def\UlrikeFischer@package@date{2022-01-13} \makeatother \documentclass[DIV=12,parskip=half-,bibliography=totoc]{scrartcl} @@ -16,6 +15,10 @@ \usepackage{unicode-math} \setmainfont{Heuristica} \usepackage{microtype} +\makeatletter +% see https://github.com/schlcht/microtype/issues/8 +\patchcmd{\MT@get@prot}{\noindent}{\RawNoindent}{}{\fail} +\makeatother \usepackage{scrlayer-scrpage} @@ -46,12 +49,9 @@ commentstyle=\color{green!50!black}\bfseries} -\usepackage{tagpdf} + \tagpdfsetup{ - activate-all, - uncompress, tabsorder=structure, - interwordspace=true, %log=v %show-spaces } @@ -150,6 +150,21 @@ Issues, comments, suggestions should be added as issues to the github tracker: \tableofcontents +\section{Preface to version 0.93} +The main change in the package itself in this version is the support for structure destinations. +This is a new type of destinations in \PDF~2.0. +For pdftex and luatex this requires new binaries. They will be included +in texlive 2022, miktex already has the new pdftex, the new luatex will probably follow soon. + +Beside this mostly some clean up and bug fixes has been done. + +A more important step will be done in \LaTeX{} itself in the next dev-release: The command \cs{DocumentMetadata} will be +added to the format and will take over the role of \cs{DeclareDocumentMetadata} from \pkg{pdfmanagement-testphase} and additionally +will also load the pdf management code. This will simplify the documents as it will no longer be needed to load +a package. + + + \section{Preface to version 0.92} In this version support for page breaks in pdftex has been added. As described in section~\ref{sec:splitpara}, @@ -318,7 +333,7 @@ utf8 is now the required encoding. \item The keys |lang|, |ref| and |E| have been added for structures. \item The new hooks of LaTeX are used to tagged many paragraphs automatically. The small red numbers around paragraphs in the documentation show them in action. The main problem here is not to tag a paragraph, but to avoid to tag too many: paragraphs pop up in many places. -\end{itemize} +\end{itemize} \subsection{Changes in version 0.81} @@ -390,6 +405,25 @@ will now expand once. \end{itemize} +\subsection{Changes in version 0.93} + +\begin{itemize} +\item Support for associated files in the root element (key \texttt{root-AF}) +has been added. This allow e.g. to add a css-file which is be used if the \PDF\ is converted to +html. + +\item First steps have been done to adapt the package to planed changes in \LaTeX{}: The command \cs{DocumentMetadata} will be +added to the format and will take over the role of \cs{DeclareDocumentMetadata} from \pkg{pdfmanagement-testphase}. + +\item The package has now support for \enquote{structure destinations}. +This is a new type of destinations in \PDF~2.0. +For pdftex and luatex this requires new binaries. They will be included +in texlive 2022, miktex already has the new pdftex, the new luatex will probably follow soon. + +\item The commands \cs{tagpdfifluatexT}, \cs{tagpdfifluatexTF} has been removed \cs{tagpdfifpdftexT}, + +\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 @@ -424,15 +458,27 @@ activated like this: } \documentclass{article} \begin{document} -some text +some text \end{document} \end{lstlisting} +With \LaTeX{} 2022-06-01 (or a current \LaTeX-dev) the call will be simpler + +\begin{lstlisting} +\DocumentMetadata + { + testphase = tagpdf, % load + activate + } +\documentclass{article} +\begin{document} +some text +\end{document} +\end{lstlisting} \minisec{Activation needed!} -When the package is loaded it will -- apart from loading more packages and defining a lot of things -- not do much. You will have to activate it with \verb+\tagpdfsetup+ or as shown above in \verb+\DeclareDocumentMetadata+. +When the package is loaded it will -- apart from loading more packages and defining a lot of things -- not do much. You will have to activate it with \verb+\tagpdfsetup+ or as shown above in \verb+\DeclareDocumentMetadata+/\verb+\DocumentMetadata+. 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: @@ -478,6 +524,9 @@ The default value is |Document|. Boolean, initially false. Activates the code related to marked content. \item[\PrintKeyName{activate-struct}] Boolean, initially false. Activates the code related to structures. Should be used only if \PrintKeyName{activate-mc} has been used too. +\item[\PrintKeyName{no-struct-dest}] + Starting with version 0.93 \pkg{tagpdf} will create automatically structure destinations (see section~\ref{sec:struct-dest} if \pkg{hyperref} is used, if + the engine supports it and if the pdf version is 2.0. With this key this can be suppressed. \item[\PrintKeyName{activate-tree}] Boolean, initially false. Activates the code related to trees. Should be used only if the two other keys has been used too. \item[\PrintKeyName{add-new-tag}] @@ -794,7 +843,7 @@ The key-val list understands the following keys: 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{alttext}] - This key inserts an \texttt{/Alt} value in the property dictionary of the BDC operator. See section~\ref{sec:alttext}. 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). + This key inserts an \texttt{/Alt} value in the property dictionary of the BDC operator. See section~\ref{sec:alttext}. 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). That means that you can do something like in the following listing and it will insert \verb+\frac{a}{b}+ (hex encoded) in the \PDF{}. @@ -809,14 +858,17 @@ 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:alttext}. 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} \newcommand\myactualtext{X} - \tagmcbegin{tag=P,actualtext=\myactualtext} + \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. + + \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} @@ -1005,7 +1057,11 @@ repeated on every page at best only once. All this need some thoughts both from providing support for header and footers. For now tagpdf added some first support for automatically tagging: -Starting with version 0.92 header and footer are automatically marked up as (simple) artifacts. +Starting with version 0.92 header and footer are by default automatically marked up as (simple) artifacts. + +With the key \PrintKeyName{exclude-header-footer} the behaviour can be changed: The value \texttt{false} disables the +automatic tagging, the value \texttt{pagination} add additionally an \texttt{/Artifact} structure with the attribute \texttt{/Pagination}. + If some additional markup (or even a structure) is wanted, something like this should be used (here with the syntax of the \pkg{fancyhdr} package) to close the open mc-chunk and restart if after the content: @@ -1299,8 +1355,10 @@ The key-val list understands the following keys: For example: \begin{lstlisting} + \group_begin: \pdfdict_put:nnn {l_pdffile/Filespec} {AFRelationship}{/Supplement} \pdffile_embed_file:nnn{example-input-file.tex}{}{tag/AFtest} + \group_end: \tagstructbegin{tag=P,AF=tag/AFtest} \end{lstlisting} @@ -1311,6 +1369,12 @@ The key-val list understands the following keys: a concept new in PDF 2.0, but the code currently doesn't check the pdf version, it is your responsability to set it (this can be done with the \texttt{pdfversion} key in \verb+\DeclareDocumentMetadata+). + \item[\PrintKeyName{root-AF}] + This key allows to reference an associated file in the root structure element. Using the root + can be e.g. useful to add a css-file. When converting the pdf to a html with e.g. ngpdf this css-file is then + referenced in the head of the html. + + \item[\PrintKeyName{AFinline}] This key allows to embed an associated file with inline content. The value is some text, which is embedded in the PDF as a text file with mime type text/plain. @@ -1586,10 +1650,10 @@ syntax |section/H1| should in most cases do the right thing. \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 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}] 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[unknown key] An unknown key is interpreted as a |tag/role|, this preserves the old syntax. So this two calls are equivalent: - + \begin{lstlisting} \tagpdfsetup{add-new-tag = section/H1} \tagpdfsetup{add-new-tag = {tag=section,role=H1}} @@ -1623,6 +1687,43 @@ The key \PrintKeyName{show-spaces} will show lines at the places where in lua mo This is in pdftex a primitive. It inserts the dummy space glyph. \pkg{tagpdf} defines this command also for luatex -- attention if can perhaps insert break points. +\section{Structure destinations}\label{sec:struct-dest} + + Standard destinations (anchors for internal links) + consist of a reference to a page in the pdf and instructions + how to display it---typically they will put a specific coordinate 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 \texttt{/StructElem} object). + GoTo links can then additionally to the \texttt{/D} key which points to a + standard 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 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. + \section{Accessibility is not only tagging} diff --git a/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty b/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty index 6ba1ee8d3f..3c283a8a3e 100644 --- a/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty +++ b/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty @@ -1,55 +1,7 @@ %\RequirePackage[enable-debug]{expl3}[2018/06/14] -\ProvidesExplPackage {tagpdfdocu-patches} {2021-08-27} {0.92} +\ProvidesExplPackage {tagpdfdocu-patches} {2022-01-13} {0.93} {patches/commands for the tagpdf documentation} \RequirePackage{etoolbox} -%%%% -% header and footer (now needed as attributes are global again) -%%%% -%% patching \@oddfoot/\@oddhead is nonsense, that is redefined all the time. -%% Using the scrlayer interfaces would probably work -%% but we will need a core latex solution anyway -%% so let's test it here and patch \@outputpage -%% we also disable paratagging, not for the tagging but to avoid that the small -%% numbers gives overfull vbox messages ... -\bool_new:N \g__tag_docu_saved_in_mc_bool -\patchcmd\@outputpage - {\hb@xt@\textwidth{\@thehead}} - { - \hb@xt@\textwidth - { - \bool_set_false:N \l__tag_para_bool - \bool_gset_eq:NN \g__tag_docu_saved_in_mc_bool \g__tag_in_mc_bool - \bool_gset_false:N \g__tag_in_mc_bool - \hfil - \tag_mc_begin:n {artifact=pagination} - \tag_stop_group_begin: - \@thehead - \tag_stop_group_end: - \tag_mc_end: - \bool_gset_eq:NN \g__tag_in_mc_bool\g__tag_docu_saved_in_mc_bool - \hfil - } - } - {}{\fail} -\patchcmd\@outputpage - {\hb@xt@\textwidth{\@thefoot}} - { - \hb@xt@\textwidth - { - \bool_set_false:N \l__tag_para_bool - \bool_gset_eq:NN \g__tag_docu_saved_in_mc_bool \g__tag_in_mc_bool - \bool_gset_false:N \g__tag_in_mc_bool - \hfil - \tag_mc_begin:n {artifact=pagination} - \tag_stop_group_begin: - \@thefoot - \tag_stop_group_end: - \tag_mc_end: - \bool_gset_eq:NN \g__tag_in_mc_bool\g__tag_docu_saved_in_mc_bool - \hfil - } - } - {}{\fail} %%%%% % tableofcontents |