diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty |
Initial commit
Diffstat (limited to 'macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty')
-rw-r--r-- | macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty | 270 |
1 files changed, 270 insertions, 0 deletions
diff --git a/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty b/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty new file mode 100644 index 0000000000..d810bef9f1 --- /dev/null +++ b/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty @@ -0,0 +1,270 @@ +\RequirePackage{expl3}[2018/06/14] +%\RequirePackage[enable-debug]{expl3}[2018/06/14] +\RequirePackage{xpatch} +\ProvidesExplPackage {tagpdfdocu-patches} {2019/07/02} {0.61} + {patches/commands for the tagpdf documentation} + +% to do : marginnote, perhaps the description macros ... +% to do: footnotes! +% printbibliography? + +\newbibmacro*{begentry}{\tagstructbegin{tag=BibEntry}\tagmcbegin{tag=BibEntry}} +\newbibmacro*{finentry}{\finentry\tagmcend\tagstructend} + +% hyperref +\@ifpackageloaded{hyperref}{% +\pdfstringdefDisableCommands{ + \let\tagstructbegin\@gobble + \let\tagmcbegin\@gobble + \let\tagmcend\relax + \let\tagstructend\relax +}}{} + +%%%%% +% Paragraphs +%%%%% + +% we need a command which simply starts a paragraph \TagP^, +% a "continuation" variant which closes the previous paragraph (\TagP), +% and a final end. + +\NewDocumentCommand\TagP{t{^}} + { + \uftag_mc_if_in:T { \uftag_mc_end: } + \IfBooleanF{#1} + { + \uftag_struct_end: + } + \uftag_struct_begin:n{tag=P} + \uftag_mc_begin:n{tag=P} + } +% close a mc and one structure + +\NewDocumentCommand\TagPend{} + { + \uftag_mc_if_in:T { \uftag_mc_end: } + \uftag_struct_end: + } + + +%%%%% +% maketitle +%%%%% +\tagpdfsetup{ add-new-tag=Title/H1 } + +%%%%% +% tableofcontents +%%%%% + +%Marking the toc entries +%around the whole entry so only structure: +\newcommand\tagscrtocentry[1]{\uftag_struct_begin:n{tag=TOCI}#1\uftag_struct_end:} + +%leaf so structure and mc: +\newcommand\tagscrtocpagenumber[1]{% + \uftag_struct_begin:n{tag=Reference}% + \uftag_mc_begin:n{tag=Reference}% + #1% + \uftag_mc_end: + \uftag_struct_end:} + + +\DeclareTOCStyleEntry[ + entryformat=\tagscrtocentry, + pagenumberformat=\tagscrtocpagenumber]{tocline}{section} +\DeclareTOCStyleEntry[ + entryformat=\tagscrtocentry, + pagenumberformat=\tagscrtocpagenumber]{tocline}{subsection} +\DeclareTOCStyleEntry[ + entryformat=\tagscrtocentry, + pagenumberformat=\tagscrtocpagenumber]{tocline}{subsubsection} +\DeclareTOCStyleEntry[ + entryformat=\tagscrtocentry, + pagenumberformat=\tagscrtocpagenumber]{tocline}{paragraph} + + + +\renewcommand{\addtocentrydefault}[3]{% + \ifstr{#3}{}{} + {%\ + \ifstr{#2}{} + {% + \addcontentsline{toc}{#1} + {% + \protect\nonumberline + \tagstructbegin{tag=P}% + \tagmcbegin{tag=P}% + #3% + \tagmcend + \tagstructend + }% + }% + {% + \addcontentsline{toc}{#1}{% + \tagstructbegin{tag=Lbl}% + \tagmcbegin{tag=Lbl}% + \protect\numberline{#2}% + \tagmcend\tagstructend + \tagstructbegin{tag=P}% + \tagmcbegin{tag=P}% + #3% + \tagmcend + \tagstructend + }% + }% + }}% + +% the dots must be marked too + +\renewcommand*{\TOCLineLeaderFill}[1][.]{ + \leaders\hbox{$\m@th + \mkern \@dotsep mu\hbox{\uftag_mc_begin:n{artifact}#1\uftag_mc_end:}\mkern \@dotsep + mu$}\hfill +} + +%%%%%%%%% +% Sectioning commands +%%%%%%%% + +\prop_new:N \g_tag_section_level_prop +\prop_gput:Nnn \g_tag_section_level_prop {section}{H1} +\prop_gput:Nnn \g_tag_section_level_prop {subsection}{H2} +\prop_gput:Nnn \g_tag_section_level_prop {subsubsection}{H3} +\prop_gput:Nnn \g_tag_section_level_prop {paragraph}{H4} + + + +%unnumbered sections level give an empty mc, need to think about it. +\renewcommand{\sectionlinesformat}[4] + { + \@hangfrom + {\hskip #2 + \tagstructbegin{tag=\prop_item:Nn\g_tag_section_level_prop{#1}} + \tl_if_empty:nF{#3} + { + \uftag_mc_begin:n {tag=\prop_item:Nn\g_tag_section_level_prop{#1}} + #3 + \uftag_mc_end: + } + } + {\uftag_mc_begin:n {tag=\prop_item:Nn\g_tag_section_level_prop{#1}} + #4 + \uftag_mc_end:\tagstructend}% + } + +%minisec is simply P, H6 doesn't work .... +\cs_new:Nn \__uftag_docu_tag_minisec:n +{ + \uftag_struct_begin:n {tag=P} + \uftag_mc_begin:n{tag=P} + #1 + \uftag_mc_end: + \uftag_struct_end: +} + +\addtokomafont{minisec}{\__uftag_docu_tag_minisec:n} + +\AfterTOCHead{\uftag_struct_begin:n{tag=TOC}} +\AfterStartingTOC{\uftag_struct_end:} %end TOC + +%% list + +\newcommand\uftag@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 +} + +\newcommand\Pmeti{% end of \item + \TagPend %end of P + \tagstructend %end of LBody + \tagstructend %end of LI +} + +\ExplSyntaxOff +\xpatchcmd\enit@preset{\@firstofone}{\uftag@enit@format@preset}{}{\fail} +\ExplSyntaxOn +\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{}{format}{% new enumitem don't use first argument + \def\enit@format{% + \tagstructbegin{tag=LI}% + \tagstructbegin{tag=Lbl}% + \tagmcbegin{tag=Lbl}% + #1\tagmcend}} + + %%% hooks for links + %%% attention, to get the order right, it is necessary currently to start a new + %%% mc after a link! I'm not sure if this can/group be included in the hooks + %%% grouping is a bit tricky ... +\cs_if_exist:NT\hook_put_left:nnn +{ + \hook_put_left:nnn + { pdf } + { link_begin_url } + { + \uftag_struct_begin:n{tag=Link} + \uftag_mc_begin:n{tag=Link} + } +\hook_put:nnnn + { pdf } + { link_begin_url_attr } + { /StructParent } + { \int_use:N\c@g__uftag_parenttree_obj_int } + +\hook_put_right:nnn + { pdf } + { link_end_url } + { + \__uftag_struct_finish_link: + \uftag_mc_end: + \uftag_struct_end: + } + +\hook_put_left:nnn + { pdf } + { link_begin_link } + { + \uftag_struct_begin:n{tag=Link} + \uftag_mc_begin:n{tag=Link} + } +\hook_put:nnnn + { pdf } + { link_begin_link_attr } + { /StructParent } + { \int_use:N\c@g__uftag_parenttree_obj_int } +\hook_put_right:nnn + { pdf } + { link_end_link } + { + \__uftag_struct_finish_link: + \uftag_mc_end: + \uftag_struct_end: + } + +% "alternative descriptions " for PAX3. How to get better text here?? +\hook_put:nnnn + { pdf } + { link_begin_url_attr } + { /Contents } + { (url) } + +\hook_put:nnnn + { pdf } + { link_begin_link_attr } + { /Contents } + { (ref) } + } +\endinput |