summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.dtx
blob: 7b67c520b3973442bbf497c2a66d941194c34918 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
% \iffalse meta-comment
%
%% File: output-patches.dtx (C) Copyright 2020-2021 Frank Mittelbach
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
% license or (at your option) any later version.  The latest version
% of this license is in the file
%
%    https://www.latex-project.org/lppl.txt
%
%<*driver>
\documentclass{l3doc}

\EnableCrossrefs
\CodelineIndex
\begin{document}
  \DocInput{output-patches-tmp-ltx.dtx}
\end{document}
%</driver>
%
% \fi
%
% \providecommand\hook[1]{\texttt{#1}}
%
%
%
% \title{Temporary output patches for tagging and better link support}
% \author{Frank Mittelbach \and Ulrike Fischer}
%
% \maketitle
%
% \section{Introduction}
%
%    This package contains a few patches of internal \LaTeX{} needed
%    to support paragraph tagging across
%    page boundaries (in \pdfTeX) and improve the behaviour of links across page breaks.
%
%    Until this get properly integrated with the kernel code this has
%    to be taken as a prototype and code, interfaces as well as
%    behavior may change without notice and certainly without any
%    backwards compatibility!
%
%
% \StopEventually{\setlength\IndexMin{200pt}  \PrintIndex  }
%
%
% \section{The Implementation}
%    \begin{macrocode}
%<*package>
%    \end{macrocode}
%
%    \begin{macrocode}
\ProvidesPackage{output-patches-tmp-ltx}
        [2021-08-20 v0.95 Temporary patches of output commands]
\RequirePackage{etoolbox}
%    \end{macrocode}
%
%
%  \subsection{Patching the OR}
%  This add hooks around header and footer.
%  At first initialize the hooks
%    \begin{macrocode}
\newcommand\@kernel@before@head{}
\newcommand\@kernel@before@foot{}
\newcommand\@kernel@after@head{}
\newcommand\@kernel@after@foot{}
\newcommand\@kernel@before@footins{}
\newcommand\@kernel@before@cclv{}
\newcommand\@mult@ptagging@hook{}
%    \end{macrocode}
%
%    \begin{macrocode}

\patchcmd\@outputpage
 {\vfil\color@hbox\normalcolor\hb@xt@\textwidth{\@thehead}\color@endbox}
 {\vfil\@kernel@before@head\color@hbox\normalcolor\hb@xt@\textwidth{\@thehead}\color@endbox\@kernel@after@head}
 {\typeout{Patching header in \string\@outputpage}}{\PATCHerror }


\patchcmd\@outputpage
 {\color@hbox\normalcolor\hb@xt@\textwidth{\@thefoot}\color@endbox}
 {\@kernel@before@foot\color@hbox\normalcolor\hb@xt@\textwidth{\@thefoot}\color@endbox\@kernel@after@foot}
 {\typeout{Patching footer in \string\@outputpage}}{\PATCHerror }
%    \end{macrocode}
%
%  \begin{macro}{\@makecol}
%    We have to patch \cs{@makecol} in two places:
%    \begin{itemize}
%    \item
%      update 255 up front to add missing tmb/tme if necessary
%    \item
%      update the \cs{footins} stream if that one got split
%    \end{itemize}
%    \begin{macrocode}

\patchcmd\@makecol
    {\vskip\skip\footins}
    {\vskip\skip\footins\@kernel@before@footins}
  {\typeout{Patching \string\@makecol\space for tagging}}{\PATCHerror }

% for some reason patching with etoolbox only works in this order ...

\pretocmd\@makecol{\@kernel@before@cclv}
  {\typeout{Patching \string\@makecol\space for tagging}}{\PATCHerror }
%    \end{macrocode}
%  \end{macro}
%
% \subsection{\pkg{multicol} adjustments}
%
%    The patches for pkg{multicol} are fairly minimal:
%    \begin{itemize}
%    \item At the start of the environment anything already on the
%    page is picked up and stored in \cs{partial@page}, we may need to add
%    a TMB to that (it should have a proper TME). This has to happen
%    in the \enquote{main} stream context.
%    \item
%    \item
%    \end{itemize}
%
%    \begin{macrocode}
\AddToHook{package/after/multicol}{% multicol needs later loading
%    \end{macrocode}
%
%    \begin{macrocode}
  \patchcmd\page@sofar
      {\setbox\z@\hbox{p}\global\dimen\tw@\dp\z@}%
      {%
        \setbox\z@\hbox{p}\global\dimen\tw@\dp\z@
        \@mult@ptagging@hook
      }%
      {\typeout{Patching \string\page@sofar\space for tagging}}{\PATCHerror}%
}
%    \end{macrocode}
%
% \subsection{Interrupt hooks}
% This requires the l3pdfannot module!
% We add the code here an not in hyperref, as it should also work with links
% created directly with the l3pdfannot commands. The file is only
% loaded by the pdfmanagement, so no need to test if the commands exist.
%    \begin{macrocode}
\ExplSyntaxOn
\def\@kernel@before@head{\pdfannot_link_off:}
\def\@kernel@before@foot{\pdfannot_link_off:}
\def\@kernel@after@head {\pdfannot_link_on:}
\def\@kernel@after@foot {\pdfannot_link_on:}
\ExplSyntaxOff
%    \end{macrocode}
%
%    \begin{macrocode}
\endinput
%</package>
%    \end{macrocode}
%
% \Finale
%