% % lltjp-atbegshi.sty % \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{lltjp-atbegshi}[2022-08-12 Patching \string\shipout\space hooks for LuaTeX-ja] % concept: execute all hooks inside yoko direction \vbox \ifltj@ltfilehook@avail %<*ltshipout>----------------------------------- % \RequirePackage{expl3} \ExplSyntaxOn\makeatletter \box_new:N \l__platex_shipout_dummy_box \if_cs_exist:N \__shipout_execute_main_cont:Nnnn %% 2021-06-01 \cs_new_eq:NN \__platex_original_shipout_execute_main_cont:Nnnn \__shipout_execute_main_cont:Nnnn \cs_set:Npn \__shipout_execute_main_cont:Nnnn #1#2#3#4 { % if the box #1 is not a \yoko-box (= horizontal writing), % then make it a \yoko-box behorehand. \platex_if_box_yoko:NF #1 { \vbox_set:Nn #1 { \platex_direction_yoko: \box_use:N #1 } } % if the current direction is not \yoko, % then enclose \__shipout_execute_main_cont:Nnnn with % a dummy \yoko-box named \l__platex_shipout_dummy_box. \platex_if_direction_yoko:TF { \__platex_original_shipout_execute_main_cont:Nnnn { #1 } { #2 } { #3 } { #4 } }{ \vbox_set:Nn \l__platex_shipout_dummy_box { \platex_direction_yoko: \__platex_original_shipout_execute_main_cont:Nnnn { #1 } { #2 } { #3 } { #4 } } % [Limitation] the code above may discard some contents, % so we'd like to put it back by \box\l__platex_shipout_dummy_box. % however, an infinite loop occurs if we uncomment the line below % so we can't. %\box_use:N \l__platex_shipout_dummy_box \box_clear:N \l__platex_shipout_dummy_box } } \else: %% 2020-10-01 \cs_new_eq:NN \__platex_original_shipout_execute_cont: \__shipout_execute_cont: \cs_set:Npn \__shipout_execute_cont: { \platex_if_box_yoko:NF \l_shipout_box { \vbox_set:Nn \l_shipout_box { \platex_direction_yoko: \box_use:N \l_shipout_box } } \platex_if_direction_yoko:TF { \__platex_original_shipout_execute_cont: }{ \vbox_set:Nn \l__platex_shipout_dummy_box { \platex_direction_yoko: \__platex_original_shipout_execute_cont: } \box_clear:N \l__platex_shipout_dummy_box } } \fi: %----------------------------------- \ExplSyntaxOff \expandafter\endinput \fi \RequirePackage{atbegshi} %<*atbegshi>------------------------------------- % patching atbegshi.sty %%% following codes are almost copied from %%% pxatbegshi.sty 2019/09/07 v0.5 (in platex-tools bundle, by H. Yamashita). \ifdefined\AtBeginShipoutOriginalShipout \let\AtBeginShipoutOriginalShipout\ltj@shipout \fi \AtBeginShipoutInit \DeclareRobustCommand \AtBeginDvi [1]{% \global \setbox \@begindvibox \vbox{\yoko\unvbox \@begindvibox #1}% } %% internal macros are locally effective \begingroup % helpers %% unique tokens \def\pxabgs@mark{\pxabgs@mark@} \def\pxabgs@fin{\pxabgs@fin@} %% \pxabgs@patch@cmd\CMD{}{} \def\pxabgs@patch@cmd#1#2#3{% \ifx#1\relax\else \def\pxabgs@next##1#2##2\pxabgs@mark##3\pxabgs@fin{% \ifx\pxabgs@mark##3\pxabgs@mark\let#1\relax \else \def\pxabgs@fragment{##2}\def#1{##1#3##2}% \fi}% \expandafter\pxabgs@next#1\pxabgs@mark#2\pxabgs@mark\pxabgs@fin \fi } % prepare \ifdefined\AtBegShi@Output \let\pxabgs@AtBegShi@Output\AtBegShi@Output \else\let\pxabgs@AtBegShi@Output\relax\fi % try first patch \pxabgs@patch@cmd\pxabgs@AtBegShi@Output {\let\AtBegShi@OrgProtect\protect}% {\setbox8\vbox\bgroup\yoko\let\AtBegShi@OrgProtect\protect} \pxabgs@patch@cmd\pxabgs@AtBegShi@Output {\AtBeginShipoutOriginalShipout\box\AtBeginShipoutBox}% {\AtBeginShipoutOriginalShipout\box\AtBeginShipoutBox\egroup\setbox8\box\voidb@x} \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 } % commit the change only when successful \ifx\pxabgs@AtBegShi@Output\relax \@PackageWarningNoLine{lltjp-atbegshi}{% Failed in patching \string\AtBegShi@Output.\MessageBreak This may cause error in tate direction% } \else \global\let\AtBegShi@Output\pxabgs@AtBegShi@Output \fi \endgroup %% internal macros are no longer effective %------------------------------------- \endinput