diff options
Diffstat (limited to 'macros/jptex/latex/platex-tools/pxatbegshi.sty')
-rw-r--r-- | macros/jptex/latex/platex-tools/pxatbegshi.sty | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/macros/jptex/latex/platex-tools/pxatbegshi.sty b/macros/jptex/latex/platex-tools/pxatbegshi.sty new file mode 100644 index 0000000000..77e00d6a54 --- /dev/null +++ b/macros/jptex/latex/platex-tools/pxatbegshi.sty @@ -0,0 +1,133 @@ +% +% pxatbegshi.sty +% written by Hironobu Yamashita (@aminophen) +% +% This package is part of the platex-tools bundle. +% https://github.com/aminophen/platex-tools +% +% -------------------------------------------------------------------- +% [Note] +% Previous version (2018/09/21 v0.4) was largely based on +% "cope with tate-direction" +% of bxpapersize.sty 2017/05/02 v0.3a by T. Yato. +% -- concept: execute all hooks in temporary yoko direction, +% -- by prepending \yoko and switching back to the original +% However, it was problematic when used with multicol.sty. +% +% Thus, in newer version (2019/09/07 v0.5), I reverted back to +% the original code (2018/09/21 v0.3), which was largely based on +% H. Kitagawa's on GitHub:texjporg/tex-jp-build#21. +% -- concept: execute all hooks inside yoko direction \vbox +% +% Update: version 2020/09/09 v0.6 supports LaTeX2e 2020-10-01 +% based on a method proposed by H. Kitagawa in lltjp-atbegshi.sty. +% +% Update: version 2020/09/25 v0.7 does nothing, since +% pLaTeX2e 2020-10-01 will support the situation natively. +% -------------------------------------------------------------------- +% + +%% package declaration +\NeedsTeXFormat{pLaTeX2e} +\ProvidesPackage{pxatbegshi} + [2021/05/31 v0.7c Patch to atbegshi for (u)pLaTeX] + +%% Since LaTeX2e 2020-10-01, atbegshi.sty is merely +%% an emulation by atbegshi-ltx.sty from ltshipout.dtx. + +\chardef\pxabgs@status=\z@ +\@ifl@t@r\fmtversion{2020/10/01}{\chardef\pxabgs@status=\@ne}{} +\ifnum\pxabgs@status=\@ne + % if LaTeX2e and pLaTeX2e are inconsistent, raise an error! + \@ifl@t@r\pfmtversion{2020/10/01}{% + \PackageInfo{pxatbegshi}{This package is no longer needed}% + }{% + \PackageError{pxatbegshi}{Inconsistent LaTeX2e/pLaTeX2e combination}\@ehc + }% + \RequirePackage{atbegshi}% input anyway + \expandafter\endinput +\fi + +%% The rest of this package is meant for +%% LaTeX2e 2020-02-02 PL5 or older. + +\RequirePackage{atbegshi} + +\ifx\AtBegShi@Output\@undefined + \PackageError{pxatbegshi}{This should not happen}\@ehc + \expandafter\endinput +\fi + +%% preparations +\def\pxabgs@pkgname{pxatbegshi} +\def\pxabgs@warn{\PackageWarningNoLine\pxabgs@pkgname} + +%% internal macros are locally effective +\begingroup + +%--------------------------------------- helpers + +%% unique tokens +\def\pxabgs@mark{\pxabgs@mark@} +\def\pxabgs@fin{\pxabgs@fin@} + +%% \pxabgs@patch@cmd\CMD{<orig>}{<new>} +\@onlypreamble\pxabgs@patch@cmd +\def\pxabgs@patch@cmd#1#2#3{% + \def\pxabgs@next##1#2##2\pxabgs@mark##3\pxabgs@fin{% + \ifx\pxabgs@mark##3\pxabgs@mark + \let\pxabgs@fragment\relax + \else + \def\pxabgs@fragment{##2}% + \def#1{##1#3##2}% + \fi}% + \expandafter\pxabgs@next#1\pxabgs@mark#2\pxabgs@mark\pxabgs@fin} + +%--------------------------------------- + +% prepare +\let\pxabgs@AtBegShi@Output\AtBegShi@Output +% try first patch +\pxabgs@patch@cmd\pxabgs@AtBegShi@Output + {\let\AtBegShi@OrgProtect\protect}% + {\setbox8\vbox\bgroup\yoko\let\AtBegShi@OrgProtect\protect} +\ifx\pxabgs@fragment\relax % failure + \let\pxabgs@AtBegShi@Output\relax +\else % success, try second patch + \pxabgs@patch@cmd\pxabgs@AtBegShi@Output + {\AtBeginShipoutOriginalShipout\box\AtBeginShipoutBox}% + {\AtBeginShipoutOriginalShipout\box\AtBeginShipoutBox\egroup} + \ifx\pxabgs@fragment\relax % failure + \let\pxabgs@AtBegShi@Output\relax + \else % success, try third patch + \pxabgs@patch@cmd\pxabgs@AtBegShi@Output{% + \begingroup + \setbox\AtBeginShipoutBox\box\AtBeginShipoutBox + \endgroup + \let\protect\AtBegShi@OrgProtect + }{% + \begingroup + \setbox\AtBeginShipoutBox\box\AtBeginShipoutBox + \endgroup + \let\protect\AtBegShi@OrgProtect + \egroup + } + \ifx\pxabgs@fragment\relax % failure + \let\pxabgs@AtBegShi@Output\relax + \fi + \fi +\fi +% commit the change only when successful +\ifx\pxabgs@AtBegShi@Output\relax + \pxabgs@warn{Failed in patching \string\AtBegShi@Output} +\else + \global\let\AtBegShi@Output\pxabgs@AtBegShi@Output +\fi + +\endgroup +%% internal macros are no longer effective + +%--------------------------------------- done + +\endinput +%% EOF |