summaryrefslogtreecommitdiff
path: root/macros/jptex/latex/gentombow/bounddvi.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/jptex/latex/gentombow/bounddvi.sty')
-rw-r--r--macros/jptex/latex/gentombow/bounddvi.sty112
1 files changed, 112 insertions, 0 deletions
diff --git a/macros/jptex/latex/gentombow/bounddvi.sty b/macros/jptex/latex/gentombow/bounddvi.sty
new file mode 100644
index 0000000000..a70da52c6e
--- /dev/null
+++ b/macros/jptex/latex/gentombow/bounddvi.sty
@@ -0,0 +1,112 @@
+%
+% bounddvi.sty
+% 2020/10/08 v8.2-v7.0 h.y.acetaminophen [at] gmail.com
+% 2004/12/15 v6.0-v1.0 inoue [at] ma.ns.tcu.ac.jp
+%
+% This package, originally written by Koichi Inoue
+% and modified by Hironobu Yamashita, is distributed
+% as part of the gentombow bundle.
+% https://github.com/aminophen/gentombow
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{bounddvi}[2020/10/08 v8.2 bounddvi]
+
+% Note: graphics/color drivers
+% - dvips.def 2016/07/10 v3.1a or later
+% - dvipdfmx.def 2016/07/10 v4.12 or later
+% emit papersize special _only_ when \Gin@setpagesizetrue
+% and \mag = 1000. When graphicx(s) or color is used with
+% setpagesize option (= default since 2016) and \mag equals
+% to 1000, we can exploit its routine.
+% (they are using \AtBeginDocument{\AtBeginDvi{...}})
+% However, these .def files do _not_ care about tombow; so,
+% we set \stock{width,height} to invoke stock test in those
+% files (probably meant for memoir.cls).
+
+% detection of \iftombow status is delayed until \AtBeginDocument,
+% to support both (u)pLaTeX kernel and ``gentombow.sty''
+\def\bddv@maybe@ensure@stock{%
+ \ifx\tombowtrue\@undefined
+ \let\bddv@ensure@stock\relax % skip if-tokens
+ \fi
+ \bddv@ensure@stock}
+
+% when \iftombow == \iftrue, we also need \stock{width,height}
+\def\bddv@ensure@stock{%
+ \iftombow
+ % if \stockwidth/\stockheight are not available,
+ % define them now
+ \ifx\stockwidth\@undefined \newdimen\stockwidth \fi
+ \ifx\stockheight\@undefined \newdimen\stockheight \fi
+ % if \stockwidth already has effective value, do nothing;
+ % otherwise assume pLaTeX-style tombow and set it to
+ % \paperwidth + 2in (similar for \stockheight)
+ \ifdim\stockwidth>\z@\else
+ \stockwidth\paperwidth \advance\stockwidth2in
+ \fi
+ \ifdim\stockheight>\z@\else
+ \stockheight\paperheight \advance\stockheight2in
+ \fi
+ \fi
+}
+
+% prepare actual papersize special
+\def\bddv@emit@papersize{%
+ \begingroup
+ % if \stockwidth/\stockheight are defined & have effective
+ % values, copy them to \paperwidth/\paperheight
+ % for current group
+ \ifx\stockwidth\@undefined\else \ifdim\stockwidth>\z@
+ \paperwidth\stockwidth
+ \fi\fi
+ \ifx\stockheight\@undefined\else \ifdim\stockheight>\z@
+ \paperheight\stockheight
+ \fi\fi
+ % adjust for \mag and emit papersize special
+ \divide\paperwidth\@m\multiply\paperwidth\mag
+ \divide\paperheight\@m\multiply\paperheight\mag
+ \special{papersize=\the\paperwidth,\the\paperheight}%
+ \endgroup
+}
+
+%% Since LaTeX2e 2020-10-01, \@begindocumenthook is deprecated
+%% and \UseHook{begindocument} etc. are used.
+%% This code appends papersize special to the _end_ of the hook.
+%% (Note: support for old dvips is removed.)
+\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}
+\IfFormatAtLeastTF{2020-10-01}{%
+ \AtBeginDocument{%
+ \bddv@maybe@ensure@stock
+ \AtBeginDvi{\bddv@emit@papersize}}%
+ \endinput
+}{}
+
+%% The rest of this package is meant for
+%% LaTeX2e 2020-02-02 PL5 or older.
+
+% following code is almost equivalent to
+% \AtBeginDocument{\AtBeginDvi{...}}
+% however, we put into the _beginning_ of \@begindocumenthook;
+% this ensures proper papersize when old dvips
+% (TeX Live 2016 or earlier) is used.
+% also, note that old pLaTeX (before 2016/07/01) needs \yoko
+% at the beginning of \AtBeginDvi.
+\begingroup
+\def\@prependto@begindocumenthook{%
+ \bddv@maybe@ensure@stock
+ \global\setbox\@begindvibox\vbox{%
+ \csname yoko\endcsname\unvbox\@begindvibox
+ \bddv@emit@papersize}}
+\toks@\expandafter\expandafter\expandafter
+ {\expandafter\@prependto@begindocumenthook\@begindocumenthook}
+\xdef\@begindocumenthook{\the\toks@}
+% append papersize special again to the _end_ of the
+% current \@begindocumenthook; this will be meaningful e.g. when
+% geometry is loaded before bounddvi.
+% (geometry adds \AtBeginDocument{\AtBeginDvi{...}} specification)
+\expandafter\g@addto@macro\expandafter\@begindocumenthook
+ \expandafter{\@prependto@begindocumenthook}
+\endgroup
+
+\endinput