% % 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 % -------------------------------------------------- % %% package declaration \NeedsTeXFormat{pLaTeX2e} \ProvidesPackage{pxatbegshi} [2019/09/07 v0.5 Patch to atbegshi for (u)pLaTeX] %% preparations \def\pxabgs@pkgname{pxatbegshi} \def\pxabgs@warn{\PackageWarningNoLine\pxabgs@pkgname} %% load it \RequirePackage{atbegshi} %% internal macros are locally effective \begingroup %--------------------------------------- helpers %% unique tokens \def\pxabgs@mark{\pxabgs@mark@} \def\pxabgs@fin{\pxabgs@fin@} %% \pxabgs@patch@cmd\CMD{}{} \@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} %--------------------------------------- % concept: execute all hooks inside yoko direction \vbox % 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