You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
tex-compiler/texmf-dist/tex/latex-dev/base/ltshipout.ltx

424 lines
14 KiB

%%
%% This is file `ltshipout.ltx',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% ltshipout.dtx (with options: `2ekernel')
%%
%% This is a generated file.
%%
%% Copyright 2020 Frank Mittelbach
%%
%% This file was generated from file(s) of the LaTeX `lthooks Bundle'.
%% --------------------------------------------------------------------------
%%
%% It may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%% http://www.latex-project.org/lppl.txt
%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%%
%% This file may only be distributed together with a copy of the LaTeX
%% `lthooks Bundle'. You may however distribute the `lthooks Bundle'
%% without such generated files.
%%
%% The newest sources can be found below
%%
%% https://github.com/FrankMittelbach/fmitex/
%%
%% where one can also log issues in case there are any.
%%
%%
%% File: ltshipout.dtx (C) Copyright 2020 Frank Mittelbach, LaTeX Team
\providecommand\ltshipoutversion{v0.9a}
\providecommand\ltshipoutdate{2020/07/15}
\ExplSyntaxOn
\bool_new:N \g__shipout_debug_bool
\cs_new_eq:NN \__shipout_debug:n \use_none:n
\cs_new_protected:Npn \shipout_debug_on:
{
\bool_gset_true:N \g__shipout_debug_bool
\__shipout_debug_gset:
}
\cs_new_protected:Npn \shipout_debug_off:
{
\bool_gset_false:N \g__shipout_debug_bool
\__shipout_debug_gset:
}
\cs_new_protected:Npn \__shipout_debug_gset:
{
\cs_gset_protected:Npx \__shipout_debug:n ##1
{ \bool_if:NT \g__shipout_debug_bool {##1} }
}
\hook_new:n{shipout/before}
\hook_new:n{shipout/foreground}
\hook_new:n{shipout/background}
\hook_new:n{shipout/firstpage}
\hook_new:n{shipout/lastpage}
\box_new:N \l_shipout_box
\cs_set_eq:NN \ShipoutBox \l_shipout_box
\cs_set:Npn\__shipout_execute: {
\tl_set:Nx \l__shipout_group_level_tl
{ \int_value:w \tex_currentgrouplevel:D }
\tex_afterassignment:D \__shipout_execute_test_level:
\tex_setbox:D \l_shipout_box
}
\cs_gset_eq:NN \shipout \__shipout_execute:
\tl_new:N \l__shipout_group_level_tl
\cs_new:Npn \__shipout_execute_test_level: {
\int_compare:nNnT
\l__shipout_group_level_tl < \tex_currentgrouplevel:D
\tex_aftergroup:D
\__shipout_execute_cont:
}
\cs_new:Npn \__shipout_execute_cont: {
\box_if_empty:NTF \l_shipout_box
{ \PackageWarning{ltshipout}{Ignoring~ void~ shipout~ box} }
{
\bool_gset_false:N \g__shipout_discard_bool
\set@typeset@protect
\__shipout_get_box_size:N \l_shipout_box
\hook_use:n {shipout/before}
\int_gincr:N \g_shipout_totalpages_int
\bool_if:NTF \g__shipout_discard_bool
{ \PackageInfo{ltshipout}{Completed~ page~ discarded}
\bool_gset_false:N \g__shipout_discard_bool
\tex_deadcycles:D \c_zero_int
}
{ \box_if_empty:NTF \l_shipout_box
{ \PackageWarning{ltshipout}{
Shipout~ box~ was~ voided~ by~ hook,\MessageBreak
ignoring~ shipout~ box }
}
{
\int_gincr:N \g_shipout_readonly_int
\__shipout_debug:n {
\typeout{Absolute~ page~ =~ \int_use:N \g_shipout_readonly_int
\space (target:~ \@abspage@last)}
}
\__shipout_get_box_size:N \l_shipout_box
\@kernel@before@shipout@foreground
\hook_if_empty:nF {shipout/foreground}
{ \__shipout_add_foreground_picture:n
{ \hook_use:n {shipout/foreground} } }
\hook_if_empty:nF {shipout/background}
{ \__shipout_add_background_picture:n
{ \hook_use:n {shipout/background} } }
\__shipout_execute_firstpage_hook:
\int_compare:nNnT \@abspage@last = \g_shipout_readonly_int
{ \hook_if_empty:nF {shipout/lastpage}
{ \__shipout_debug:n { \typeout{Executing~ lastpage~ hook~
on~ page~ \int_use:N \g_shipout_readonly_int } }
\__shipout_add_foreground_box:n { \UseHook{shipout/lastpage}
\@kernel@after@shipout@lastpage }
}
\bool_gset_true:N \g__shipout_lastpage_handled_bool
}
\cs_set_eq:NN \protect \exp_not:N
\tex_shipout:D \box_use:N \l_shipout_box
}
}
}
}
\let\@kernel@after@shipout@lastpage\@empty
\let\@kernel@before@shipout@foreground\@empty
\cs_new:Npn \__shipout_execute_firstpage_hook: {
\hook_if_empty:nF {shipout/firstpage}
{ \__shipout_add_background_box:n { \UseHook{shipout/firstpage} } }
\cs_gset_eq:NN \__shipout_execute_firstpage_hook: \prg_do_nothing:
\cs_gset:Npn \__shipout_add_firstpage_material:Nn ##1 ##2 {
\PackageWarning{ltshipout}{
First~ page~ is~ already~ shipped~ out,~ ignoring\MessageBreak
\string##1 }
}
}
\bool_new:N \g__shipout_lastpage_handled_bool
\cs_new:Npn \__shipout_add_firstpage_material:Nn #1#2 {
\AddToHook{shipout/firstpage}{#2}
}
\cs_new:Npn \__shipout_get_box_size:N #1 {
\dim_set:Nn \l_shipout_box_ht_dim { \box_ht:N #1 }
\dim_set:Nn \l_shipout_box_dp_dim { \box_dp:N #1 }
\dim_set:Nn \l_shipout_box_wd_dim { \box_wd:N #1 }
\dim_set:Nn \l_shipout_box_ht_plus_dp_dim { \l_shipout_box_ht_dim +
\l_shipout_box_dp_dim }
}
\dim_new:N \l_shipout_box_ht_dim
\dim_new:N \l_shipout_box_dp_dim
\dim_new:N \l_shipout_box_wd_dim
\dim_new:N \l_shipout_box_ht_plus_dp_dim
\bool_new:N \g__shipout_discard_bool
\box_new:N \l__shipout_tmp_box
\tl_new:N \l__shipout_saved_badness_tl
\cs_new:Npn \__shipout_add_background_box:n #1
{ \__shipout_get_box_size:N \l_shipout_box
\box_if_vertical:NTF \l_shipout_box
{
\tl_set:Nx \l__shipout_saved_badness_tl
{ \vfuzz=\the\vfuzz\relax
\vbadness=\the\vbadness\relax }
\vfuzz=\c_max_dim
\vbadness=\c_max_int
\vbox_set_to_ht:Nnn \l_shipout_box \l_shipout_box_ht_plus_dp_dim
{
\hbox_set:Nn \l__shipout_tmp_box
{ \l__shipout_saved_badness_tl #1 }
\box_set_wd:Nn \l__shipout_tmp_box \c_zero_dim
\box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim
\box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim
\skip_zero:N \baselineskip
\skip_zero:N \lineskip
\skip_zero:N \lineskiplimit
\box_use:N \l__shipout_tmp_box
\vbox_unpack:N \l_shipout_box
\kern \c_zero_dim
}
\box_set_ht:Nn \l_shipout_box \l_shipout_box_ht_dim
\box_set_dp:Nn \l_shipout_box \l_shipout_box_dp_dim
\l__shipout_saved_badness_tl
}
{
\box_if_horizontal:NT \l_shipout_box
{
\tl_set:Nx \l__shipout_saved_badness_tl
{ \hfuzz=\the\hfuzz\relax
\hbadness=\the\hbadness\relax }
\hfuzz=\c_max_dim
\hbadness=\c_max_int
\hbox_set_to_wd:Nnn \l_shipout_box \l_shipout_box_wd_dim
{
\hbox_set:Nn \l__shipout_tmp_box
{ \l__shipout_saved_badness_tl #1 }
\box_set_wd:Nn \l__shipout_tmp_box \c_zero_dim
\box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim
\box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim
\box_move_up:nn
\l_shipout_box_ht_dim
{ \box_use:N \l__shipout_tmp_box }
\hbox_unpack:N \l_shipout_box
}
\l__shipout_saved_badness_tl
}
}
}
\cs_new:Npn \__shipout_add_foreground_box:n #1
{
\box_if_vertical:NTF \l_shipout_box
{
\tl_set:Nx \l__shipout_saved_badness_tl
{ \vfuzz=\the\vfuzz\relax
\vbadness=\the\vbadness\relax }
\vfuzz=\c_max_dim
\vbadness=\c_max_int
\vbox_set_to_ht:Nnn \l_shipout_box \l_shipout_box_ht_plus_dp_dim
{
\hbox_set:Nn \l__shipout_tmp_box
{ \l__shipout_saved_badness_tl #1 }
\box_set_wd:Nn \l__shipout_tmp_box \c_zero_dim
\box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim
\box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim
\skip_zero:N \baselineskip
\skip_zero:N \lineskip
\skip_zero:N \lineskiplimit
\vbox_unpack:N \l_shipout_box
\kern -\l_shipout_box_ht_plus_dp_dim
\box_use:N \l__shipout_tmp_box
\kern \l_shipout_box_ht_plus_dp_dim
}
\l__shipout_saved_badness_tl
\box_set_ht:Nn \l_shipout_box \l_shipout_box_ht_dim
\box_set_dp:Nn \l_shipout_box \l_shipout_box_dp_dim
}
{
\box_if_horizontal:NT \l_shipout_box
{
\tl_set:Nx \l__shipout_saved_badness_tl
{ \hfuzz=\the\hfuzz\relax
\hbadness=\the\hbadness\relax }
\hfuzz=\c_max_dim
\hbadness=\c_max_int
\hbox_set_to_wd:Nnn \l_shipout_box \l_shipout_box_wd_dim
{
\hbox_unpack:N \l_shipout_box
\kern -\box_wd:N \l_shipout_box
\hbox_set:Nn \l__shipout_tmp_box
{ \l__shipout_saved_badness_tl #1 }
\box_set_wd:Nn \l__shipout_tmp_box \c_zero_dim
\box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim
\box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim
\box_move_up:nn { \box_ht:N \l_shipout_box }
{ \box_use:N \l__shipout_tmp_box }
\kern \box_wd:N \l_shipout_box
}%
\l__shipout_saved_badness_tl
}
}
}
\tl_gput_right:Nn \@kernel@after@begindocument {
\tl_const:Nx \c__shipout_horigin_tl
{
\cs_if_exist_use:NTF \pdfvariable { horigin }
{ \cs_if_exist_use:NF \pdfhorigin { 1in } }
}
\tl_const:Nx \c__shipout_vorigin_tl
{
\cs_if_exist_use:NTF \pdfvariable { vorigin }
{ \cs_if_exist_use:NF \pdfvorigin { 1in } }
}
}
\cs_new:Npn \__shipout_picture_overlay:n #1 {
\kern -\c__shipout_horigin_tl \scan_stop:
\vbox_to_zero:n {
\kern -\c__shipout_vorigin_tl \scan_stop:
\unitlength 1pt \scan_stop:
\hbox_set_to_wd:Nnn \l__shipout_tmp_box \c_zero_dim { \ignorespaces #1 }
\box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim
\box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim
\box_use:N \l__shipout_tmp_box
\tex_vss:D
}
}
\cs_new:Npn \__shipout_add_background_picture:n #1 {
\__shipout_add_background_box:n { \__shipout_picture_overlay:n {#1} }
}
\cs_new:Npn \__shipout_add_foreground_picture:n #1 {
\__shipout_add_foreground_box:n { \__shipout_picture_overlay:n {#1} }
}
\cs_new:Npn \shipout_discard: {
\bool_gset_true:N \g__shipout_discard_bool
}
\int_new:N \g_shipout_readonly_int
\cs_new_eq:NN \ReadonlyShipoutCounter \g_shipout_readonly_int
\int_new:N \g_shipout_totalpages_int
\cs_new_eq:NN \c@totalpages \g_shipout_totalpages_int
\cs_new:Npn \thetotalpages { \arabic{totalpages} }
\xdef\@abspage@last{\number\maxdimen}
\g@addto@macro \@kernel@after@enddocument {
\int_compare:nNnT \@abspage@last = \maxdimen
{
\xdef\@abspage@last{ \int_eval:n {\g_shipout_readonly_int + 1} }
}
}
\g@addto@macro \@kernel@after@enddocument@afterlastpage {
\int_compare:nNnF \g_shipout_readonly_int = 0
{
\if@filesw
\iow_now:Nx \@auxout {
\gdef\string\@abspage@last {\int_use:N \g_shipout_readonly_int}}
\fi
\bool_if:NF \g__shipout_lastpage_handled_bool
{ \tex_shipout:D\vbox to\textheight{
\hbox{\UseHook{shipout/lastpage} \@kernel@after@shipout@lastpage }
\__shipout_excuse_extra_page:
\null
}
}
}
}
\cs_new:Npn \__shipout_excuse_extra_page: {
\vfil
\begin{center}
\bfseries Temporary~ page!
\end{center}
\LaTeX{}~ was~ unable~ to~ guess~ the~ total~ number~ of~ pages~
correctly.~ ~ As~ there~ was~ some~ unprocessed~ data~ that~
should~ have~ been~ added~ to~ the~ final~ page~ this~ extra~
page~ has~ been~ added~ to~ receive~ it.
\par
If~ you~ rerun~ the~ document~ (without~ altering~ it)~ this~
surplus~ page~ will~ go~ away,~ because~ \LaTeX{}~ now~ knows~
how~ many~ pages~ to~ expect~ for~ this~ document.
\vfil
}
\cs_new_eq:NN \DiscardShipoutBox \shipout_discard:
\renewcommand \AtBeginDvi {\__shipout_add_firstpage_material:Nn \AtBeginDvi}
\cs_new_eq:NN \DebugShipoutOn \shipout_debug_on:
\cs_new_eq:NN \DebugShipoutOff \shipout_debug_off:
\cs_new_eq:NN \AtBeginShipoutBox \ShipoutBox
\cs_set_eq:NN\AtBeginShipoutInit\@empty
\newcommand\AtBeginShipout {\AddToHook{shipout/before}}
\newcommand\AtBeginShipoutNext {\AddToHookNext{shipout/before}}
\newcommand\AtBeginShipoutFirst{\__shipout_add_firstpage_material:Nn \AtBeginShipoutFirst}
\cs_new:Npn \ShipoutBoxHeight { \dim_use:N \l_shipout_box_ht_dim }
\cs_new:Npn \ShipoutBoxDepth { \dim_use:N \l_shipout_box_dp_dim }
\cs_new:Npn \ShipoutBoxWidth { \dim_use:N \l_shipout_box_wd_dim }
\cs_new_eq:NN \AtBeginShipoutDiscard \DiscardShipoutBox
\cs_new_eq:NN \AtBeginShipoutAddToBox \__shipout_add_background_box:n
\cs_new_eq:NN \AtBeginShipoutAddToBoxForeground \__shipout_add_foreground_box:n
\cs_new_eq:NN\AtBeginShipoutUpperLeft \__shipout_add_background_picture:n
\cs_new_eq:NN\AtBeginShipoutUpperLeftForeground \__shipout_add_foreground_picture:n
\expandafter\cs_set_eq:NN\csname ver@atbegshi.sty\endcsname\fmtversion
\@namedef {ver@atbegshi.sty}{2020/10/01}
\cs_new_eq:NN\EveryShipout\AtBeginShipout
\cs_new_eq:NN\AtNextShipout\AtBeginShipoutNext
\expandafter\cs_set_eq:NN\csname ver@everyshi.sty\endcsname\fmtversion
\@namedef {ver@everyshi.sty}{2020/10/01}
\cs_new:Npn \AtEndDvi {\AddToHook{shipout/lastpage}}
\expandafter\cs_set_eq:NN\csname ver@atenddvi.sty\endcsname\fmtversion
\@namedef {ver@atenddvi.sty}{2020/10/01}
\ExplSyntaxOff
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\endinput
%%
%% End of file `ltshipout.ltx'.