\ProvidesPackage{zwpagelayout}[2022/04/18 ZW Page Layout]
\PackageInfo{zwpagelayout}{$Id: zwpagelayout.sty 552 2022-04-18 09:39:07Z zw $\@gobble}

%% Copyright 2008--2022 Z. Wagner, http://icebearsoft.euweb.cz
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% 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.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
% 
% The Current Maintainer of this work is Z. Wagner.
%
% This work consists of the files: zwpagelayout.sty and
% the documentation files zwpagelayout.tex, zwpagelayout.pdf together with
% adjustfoot.tex, adjustfoot.pdf, adjusthead.tex, adjusthead.pdf,
% coversample.tex, coversample.pdf, LoremIpsumDolor.tex.

\@ifpackageloaded{iftex}{}{\IfFileExists{iftex.sty}{\RequirePackage{iftex}}{\newif\ifpdf\newif\ifxetex\newif\ifluatex}}
\ifluatex\RequirePackage{luatex85}\fi
\RequirePackage{kvoptions}[2010/02/22]
\SetupKeyvalOptions{family=zwpl,prefix=zwpl@}

% Fix a problem with xkeyval

\expandafter\ifx\csname kvsetkeys\endcsname\relax
  \let\ZWsetkeys\setkeys
\else
  \let\ZWsetkeys\kvsetkeys
\fi

% Backslash character with catcode=12

{\lccode`\!`\\ \lowercase{\gdef\PDFbkslash{!}}}

% Percent character with catcode=12

{\lccode`\!`\% \lowercase{\gdef\ZWpercent{!}}}

% Driver selection macros and options

\def\zwpl@useunknown{0}
\def\zwpl@usepdftex{1}
\def\zwpl@usexetex{2}
\def\zwpl@usedvips{3}
\let\zwpl@usedvipdfm\zwpl@usexetex
\let\zwpl@usexdvipdfmx\zwpl@usexetex
\let\zwpl@useother\zwpl@useunknown
\newcount\zwpl@Driver
\zwpl@Driver\ifpdf \zwpl@usepdftex \else \ifxetex \zwpl@usexetex \else \zwpl@usedvips \fi \fi
\relax

\DeclareStringOption{driver}

% Landscape/Portrait

\DeclareBoolOption{Landscape}
\DeclareComplementaryOption{Portrait}{Landscape}
\DeclareBoolOption{AllowWidthHeightSwitching}

% Generic paper size, default=A4

\DeclareStringOption[210mm,297mm]{papersize}[] % empty means to calculate

% Normalized paper sizes

\DeclareVoidOption{a0}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={841mm,1189mm}}}
\DeclareVoidOption{a1}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={594mm,841mm}}}
\DeclareVoidOption{a2}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={420mm,594mm}}}
\DeclareVoidOption{a3}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={297mm,420mm}}}
\DeclareVoidOption{a4}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={210mm,297mm}}}
\DeclareVoidOption{a5}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={148mm,210mm}}}
\DeclareVoidOption{a6}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={105mm,148mm}}}
\DeclareVoidOption{a7}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={74mm,105mm}}}
\DeclareVoidOption{a8}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={52mm,74mm}}}
\DeclareVoidOption{a9}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={37mm,52mm}}}
\DeclareVoidOption{a10}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={26mm,37mm}}}
\DeclareVoidOption{b0}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={1000mm,1414mm}}}
\DeclareVoidOption{b1}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={707mm,1000mm}}}
\DeclareVoidOption{b2}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={500mm,707mm}}}
\DeclareVoidOption{b3}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={353mm,500mm}}}
\DeclareVoidOption{b4}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={250mm,353mm}}}
\DeclareVoidOption{b5}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={176mm,250mm}}}
\DeclareVoidOption{b6}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={125mm,176mm}}}
\DeclareVoidOption{b7}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={88mm,125mm}}}
\DeclareVoidOption{b8}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={62mm,88mm}}}
\DeclareVoidOption{b9}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={44mm,62mm}}}
\DeclareVoidOption{b10}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={31mm,44mm}}}
\DeclareVoidOption{c0}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={917mm,1279mm}}}
\DeclareVoidOption{c1}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={648mm,917mm}}}
\DeclareVoidOption{c2}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={458mm,648mm}}}
\DeclareVoidOption{c3}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={324mm,458mm}}}
\DeclareVoidOption{c4}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={229mm,324mm}}}
\DeclareVoidOption{c5}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={162mm,229mm}}}
\DeclareVoidOption{c6}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={114mm,162mm}}}
\DeclareVoidOption{c7}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={81mm,114mm}}}
\DeclareVoidOption{c8}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={57mm,81mm}}}
\DeclareVoidOption{c9}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={40mm,57mm}}}
\DeclareVoidOption{c10}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={28mm,40mm}}}
\DeclareVoidOption{letter}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={8.5in,11in}}}
\DeclareVoidOption{legal}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={8.5in,14in}}}
\DeclareVoidOption{executive}{\ZWsetkeys{zwpl}{AllowWidthHeightSwitching,papersize={7.25in,10.5in}}}

% Layout (for the odd page, even page is mirrored)

\DeclareStringOption{margins}[0mm]
\DeclareStringOption[1in]{topmargin}
\DeclareStringOption[-1in]{leftmargin}
\DeclareStringOption[-1in]{rightmargin}
\DeclareStringOption[-1in]{textwidth}
\DeclareStringOption[-1in]{textheight} % height including a header, headsep, and footskip
\DeclareStringOption[0mm]{headheight}
\DeclareStringOption[0mm]{headsep}
\DeclareStringOption[0mm]{footskip}
\DeclareStringOption{topskip}
\DeclareStringOption{botmargin}[\zwpl@topmargin]
\DeclareBoolOption{strictheight}
\DeclareBoolOption[true]{adjustfootskip}
\DeclareComplementaryOption{adjustheadsep}{adjustfootskip}

% Options for cropmarks

\DeclareBoolOption{onlycropmarks}% Page layout is already set in a compatible way
\DeclareBoolOption{cropmarks}
\DeclareComplementaryOption{nocropmarks}{cropmarks}
\DeclareStringOption[5mm]{croplength}
\DeclareStringOption[5mm]{cropgap}
\DeclareStringOption{spine}
\DeclareStringOption{xspine}
\DeclareStringOption{flap}
\DeclareStringOption{xtrim}
\DeclareStringOption{ytrim}
\DeclareStringOption{trim}
\DeclareBoolOption{cropframe}
\DeclareComplementaryOption{nocropframe}{cropframe}
\DeclareStringOption[default]{cropmarkstyle}
\DeclareStringOption{croptitle}
\DeclareStringOption[:\quad]{cropseparator}
\DeclareBoolOption{pagenumberfirst}
\DeclareComplementaryOption{pagenumberlast}{pagenumberfirst}
\DeclareBoolOption[true]{usepagenumbers}
\DeclareComplementaryOption{nopagenumbers}{usepagenumbers}
%%%\DeclareStringOption[\fontsize{10}{10}]{cropfontsize}
%%%\DeclareStringOption[\normalfont]{cropfont}
\DeclareBoolOption{nobleedclip}
\DeclareBoolOption{noBboxes}

% Leaflet cropmarks (cropmarkstyle=leaflet)
\DeclareStringOption[0mm]{foldcorr}% Ignored when fold=4 and fold=Z
\DeclareStringOption[2]{fold}% Valid options: 2, 3left, 3right, 4, Z
\DeclareStringOption[4]{leafcount}% For fold=Z only

% Color support for cropmarks and black overprint
\DeclareBoolOption{color}
\DeclareStringOption[cmyk]{colormodel}
\DeclareStringOption[1,1,1,1]{cropcolor}
\DeclareStringOption[{CYAN:1,0,0,0},{MAGENTA:0,1,0,0},{*YELLOW:0,0,1,0},{BLACK:0,0,0,1}]{colors}
\DeclareBoolOption{redefineblack}
\DeclareBoolOption{redefinetocmyk}

% Overprint support, it will automatically request color
\DeclareBoolOption{overprint}

% PDF information
\DeclareStringOption[\zwpl@default@title]{title}[]
\DeclareStringOption{author}
\DeclareStringOption{subject}
\DeclareStringOption{keywords}
\DeclareVoidOption{nopdfinfo}{\ZWsetkeys{zwpl}{title}}

\def\zwpl@default@title{\ifcat$\zwpl@croptitle$\jobname\else\zwpl@croptitle\fi}

% PDF/X-1a support etc.
\DeclareStringOption{pdfminorversion}
\DeclareBoolOption{pdfx}
\DeclareStringOption[Euroscale Coated v2]{OutputCondition}
\DeclareStringOption[Euroscale Coated v2]{OutputConditionIdentifier}
\DeclareStringOption{ICCfile}

% Reflect, works with pdftex, (x)dvipdfm(x) aa well as dvips

\def\zwpl@makeHreflect{\AtBeginDocument{\ifcaseZWdriver
    \or
         \let\zwpl@Hship\shipout
         \def\shipout{\zwpl@Hreflect\zwpl@Hship}\zwpl@Hreflect
    \or
         \zwpl@XHreflect
    \else\zwpl@psHreflect\fi}}

\def\zwpl@makeVreflect{\AtBeginDocument{\ifcaseZWdriver
    \or
          \let\zwpl@Vship\shipout
          \def\shipout{\zwpl@Vreflect\zwpl@Vship}\zwpl@Vreflect
     \or
          \zwpl@XVreflect
     \else\zwpl@psVreflect\fi}}

\DeclareVoidOption{ReflectHorizontally}{\zwpl@makeHreflect}
\DeclareVoidOption{ReflectVertically}{\zwpl@makeVreflect}

\ProcessKeyvalOptions*

% Define the driver

\ifcat$\zwpl@driver$ \else
  \expandafter\ifx\csname zwpl@use\zwpl@driver\endcsname\relax
    \PackageErrorNoLine{zwpagelayout}{Unsupported driver \zwpl@driver}
  \else
    \zwpl@Driver\csname zwpl@use\zwpl@driver\endcsname\relax
  \fi
\fi
\def\ifcaseZWdriver{\ifcase\zwpl@Driver}
\DeclareRobustCommand\ZWifdriver[2]{\expandafter\ifx\csname zwpl@use#1\endcsname\relax
    \PackageWarningNoLine{zwpagelayout}{Driver #1 not recognized, code ignored}%
  \else
  \ifnum\csname zwpl@use#1\endcsname=\zwpl@Driver\relax #2\fi\fi}

\PackageInfo{zwpagelayout}{Driver mode used:
            \ifcaseZWdriver unknown\or pdftex\or xetex\else dvips\fi.\MessageBreak}

% Define pdfmark if the RIP does not know it

\ifnum\zwpl@Driver=\zwpl@usedvips
  \special{!/pdfmark where {pop}{userdict /pdfmark /cleartomark load put} ifelse}
\fi

% Other packages

\ifzwpl@onlycropmarks
  \ZWsetkeys{zwpl}{cropmarks}
\else

% Set the paper size

\def\zwpl@setpapersize#1,#2\zw@{\paperwidth\z@ \paperheight\z@
  \ifcat$#1$\else \paperwidth#1 \fi
  \ifcat$#2$\else \paperheight#2 \fi}

\ifcat$\zwpl@papersize$
  \zwpl@setpapersize,\zw@
\else
  \expandafter\zwpl@setpapersize\zwpl@papersize\zw@
\fi

\def\zwpl@switchpapdims{\@tempdima=\paperheight \paperheight=\paperwidth \paperwidth=\@tempdima}

\ifzwpl@AllowWidthHeightSwitching
  \ifzwpl@Landscape
    \ifdim\paperheight>\paperwidth \zwpl@switchpapdims\fi
  \else
    \ifdim\paperheight<\paperwidth \zwpl@switchpapdims\fi
  \fi
\fi
\fi % \ifzwpl@cropmarks

% This part used always

\let\ZWPL@XeTeXboxes\relax
\AtBeginDocument{\ifcaseZWdriver \or
   \pdfpagewidth\paperwidth \pdfpageheight\paperheight
\else
   \special{papersize=\the\paperwidth,\the\paperheight}\fi}

\def\zwpl@setbpdim#1#2{\@tempdimc#2 \@tempdimc .99626\@tempdimc
    \edef#1{\strip@pt\@tempdimc}}

\def\zwpl@setboxex{\zwpl@setbpdim\zwpl@bleedorig\zwpl@croplength
    \@tempdima\paperwidth \advance\@tempdima-\zwpl@croplength
    \zwpl@setbpdim\zwpl@bleedwidth\@tempdima
    \@tempdima\paperheight \advance\@tempdima-\zwpl@croplength
    \zwpl@setbpdim\zwpl@bleedheight\@tempdima
    \@tempdimb\zwpl@croplength \advance\@tempdimb\zwpl@cropgap
    \zwpl@setbpdim\zwpl@trimorig\@tempdimb
    \@tempdima\paperwidth \advance\@tempdima-\@tempdimb
    \zwpl@setbpdim\zwpl@trimwidth\@tempdima
    \@tempdima\paperheight \advance\@tempdima-\@tempdimb
    \zwpl@setbpdim\zwpl@trimheight\@tempdima
    \edef\zw@tmp{/BleedBox [\zwpl@bleedorig\space \zwpl@bleedorig\space
                            \zwpl@bleedwidth\space \zwpl@bleedheight]
                 /TrimBox [\zwpl@trimorig\space \zwpl@trimorig\space
                           \zwpl@trimwidth\space \zwpl@trimheight]
                 %/ArtBox [\zwpl@trimorig\space \zwpl@trimorig\space
                          %\zwpl@trimwidth\space \zwpl@trimheight]
    }
    \ifcaseZWdriver
    \or
      \expandafter\pdfpageattr\expandafter{\zw@tmp}
    \or
      \edef\ZWPL@XeTeXboxes{\noexpand\special{pdf:put @thispage <<\zw@tmp>>}}
    \else
      \special{! userdict begin
                 userdict /bop-hook known {/bop-hook load cvx /ZWBox-hook exch def} if
                 /bop-hook {
                   [/BleedBox [\zwpl@bleedorig\space \zwpl@bleedorig\space
                               \zwpl@bleedwidth\space \zwpl@bleedheight] /PAGE pdfmark
                   [/TrimBox [\zwpl@trimorig\space \zwpl@trimorig\space
                              \zwpl@trimwidth\space \zwpl@trimheight] /PAGE pdfmark
                   %[/ArtBox [\zwpl@trimorig\space \zwpl@trimorig\space
                             %\zwpl@trimwidth\space \zwpl@trimheight] /PAGE pdfmark
                   userdict /ZWBox-hook known {ZWBox-hook} if
                 } def
      end}
    \fi}

\ifzwpl@cropmarks
  \ifzwpl@noBboxes \else \AtBeginDocument{\zwpl@setboxex}\fi
\fi

\def\noBboxes{\def\zwpl@setboxex{}}
\@onlypreamble\noBboxes

% Two digits
\def\zwpl@num#1{\ifnum #1<10 0\fi \the#1}

% Date of TeXing in PDF format (without parentheses and D:)
\def\SetTeXingDate#1{\xdef#1{\the\year\zwpl@num\month\zwpl@num\day}}
\SetTeXingDate\DateOfTeXing

% Time of TeXing, you can modify Date of TeXing by:
% \edef\DateOfTeXing{\DateOfTeXing\TimeOfTeXing}
\count@=\time   \divide\count@ by 60
\edef\@temp{\zwpl@num\count@}%
\multiply\count@ by -60         \advance\count@ by \time
\edef\TimeOfTeXing{\@temp\zwpl@num\count@}%

% Default version of the modification date
\def\zwpl@modt{(D:\DateOfTeXing\TimeOfTeXing)}

% PDF info + PDF/X-1a
\def\SetPDFminorversion#1{\ZWifdriver{pdftex}{\pdfminorversion#1 \relax}}
\@onlypreamble\SetPDFminorversion

\ifzwpl@pdfx
  \ZWsetkeys{zwpl}{pdfminorversion=3}
  \let\SetPDFminorversion\@gobble
\fi

\ifcat$\zwpl@pdfminorversion$ \else \ZWifdriver{pdftex}{\pdfminorversion3 \relax}\fi
\def\zwpl@pdfxinfo{}
\ifzwpl@pdfx
  \def\zwpl@pdfxinfo{ /GTS_PDFXVersion (PDF/X-1a:2001) /GTS_PDFXConformance (PDFX-1a:2001)}
  \ifcat$\zwpl@ICCfile$ \else
    \ifcase\zwpl@Driver
    \or
      \immediate\pdfobj stream attr{/N 4} file{\zwpl@ICCfile}
      \edef\zwpl@iccobj{\the\pdflastobj}
    \fi
  \fi
\fi

\edef\zwpl@pdftitle{\zwpl@title}
\ifcat$\zwpl@pdftitle$
  \ifzwpl@pdfx
    \ifcase\zwpl@Driver
    \or
      \pdfinfo{\zwpl@pdfinfo}
    \or
      \ifxetex \def\zwpl@crt{XeTeX}\else \def\zwpl@crt{TeX+dvipdfm}\fi
      \edef\zwpl@pdfcrt{ /Creator (\zwpl@crt) }
      \special{pdf:docinfo << \zwpl@pdfmoddate \zwpl@pdfcrt  \zwpl@pdfxinfo >>}
    \fi
  \fi
\else
  \edef\zwpl@pdftitle{/Title (\zwpl@pdftitle)}
  \ifcat$\zwpl@author$\def\zwpl@pdfauthor{}\else
    \edef\zwpl@pdfauthor{ /Author (\zwpl@author)}\fi
  \ifcat$\zwpl@subject$\def\zwpl@pdfsubject{}\else
    \edef\zwpl@pdfsubject{ /Subject (\zwpl@subject)}\fi
  \ifcat$\zwpl@keywords$\def\zwpl@pdfkeywords{}\else
    \edef\zwpl@pdfkeywords{ /Keywords (\zwpl@keywords)}\fi
  \edef\zwpl@pdfcreationdate{ /CreationDate \zwpl@modt}
  \edef\zwpl@pdfmoddate{ /ModDate \zwpl@modt}
  \ifcase\zwpl@Driver
  \or
    \pdfinfo{\zwpl@pdftitle \zwpl@pdfauthor \zwpl@pdfsubject \zwpl@pdfkeywords \zwpl@pdfxinfo}
  \or
    \ifxetex \def\zwpl@crt{XeTeX}\else \def\zwpl@crt{TeX+dvipdfm}\fi
    \edef\zwpl@pdfcrt{ /Creator (\zwpl@crt) }
    \special{pdf:docinfo << \zwpl@pdftitle \zwpl@pdfauthor \zwpl@pdfsubject \zwpl@pdfkeywords
                            \zwpl@pdfmoddate \zwpl@pdfcrt  \zwpl@pdfxinfo >>}
  \else
    \def\zwpl@pdfcrt{ /Creator (TeX+dvips) }
    \special{ps:[ \zwpl@pdftitle \zwpl@pdfauthor \zwpl@pdfsubject \zwpl@pdfkeywords
                  \zwpl@pdfcreationdate \zwpl@pdfmoddate \zwpl@pdfcrt /DOCINFO pdfmark}
  \fi
\fi

% Catalog entry for PDF/X
\ifzwpl@pdfx
  \ifx\zwpl@iccobj\undefined
    \def\zwpl@profile{}
  \else
    \def\zwpl@profile{ /DestOutputProfile \zwpl@iccobj\space 0 R}
  \fi
  \def\zwpl@catalog{/OutputIntents [ <<
    /Type/OutputIntent
    /S/GTS_PDFX
    /OutputCondition (\zwpl@OutputCondition)
    /OutputConditionIdentifier (\zwpl@OutputConditionIdentifier)
    /RegistryName (http://www.color.org)\zwpl@profile
  >> ]}
  \ifcase\zwpl@Driver
  \or
    \pdfcatalog{\zwpl@catalog}
  \or
    \special{pdf: put @catalog <<\zwpl@catalog>>}
  \fi
\fi

\ifzwpl@onlycropmarks \else % page layout disabled if only cropomarks requested

% Page margins
\ifcat$\zwpl@margins$ \else
  \ZWsetkeys{zwpl}{topmargin=\zwpl@margins,botmargin,
                 leftmargin=\zwpl@margins,rightmargin=\zwpl@margins}
\fi
\topmargin\zwpl@topmargin
\oddsidemargin\zwpl@leftmargin
\evensidemargin\zwpl@rightmargin
\textwidth\zwpl@textwidth
\textheight\zwpl@textheight
\headheight\zwpl@headheight
\headsep\zwpl@headsep
\footskip\zwpl@footskip
\ifcat$\zwpl@topskip$\else
  \topskip\zwpl@topskip
\fi

\ifcat$\zwpl@trim$ \else
  \ZWsetkeys{zwpl}{xtrim=\zwpl@trim,ytrim=\zwpl@trim}
\fi

% Paper width
\ifdim\paperwidth>\z@

\ifdim\textwidth>\z@
  \ifdim\oddsidemargin<\z@\else
  \ifdim\evensidemargin<\z@\else
    \textwidth -1in
\fi \fi \fi

\ifdim\textwidth>\z@
  \ifdim\oddsidemargin<\z@
    \ifdim\evensidemargin<\z@
      \oddsidemargin\paperwidth
      \advance\oddsidemargin-\textwidth
      \divide\oddsidemargin 2
      \evensidemargin\oddsidemargin
    \else
      \oddsidemargin\paperwidth
      \advance\oddsidemargin -\textwidth
      \advance\oddsidemargin -\evensidemargin
    \fi
  \else
    \evensidemargin\paperwidth
    \advance\evensidemargin -\textwidth
    \advance\evensidemargin -\oddsidemargin
  \fi
\else
  \ifdim\oddsidemargin<\z@
    \ifdim\evensidemargin<\z@
      \oddsidemargin\topmargin
      \evensidemargin\topmargin
    \else
      \oddsidemargin\evensidemargin
    \fi
  \else
    \ifdim\evensidemargin<\z@
      \evensidemargin\oddsidemargin
    \fi
  \fi
  \textwidth\paperwidth
  \advance\textwidth -\oddsidemargin
  \advance\textwidth -\evensidemargin
\fi

\else % calculate \paperwidth
  % \textwidth is the page body text without a spine, xspine, flaps, trim
  \ifcat$\zwpl@flap$\else \advance\textwidth\zwpl@flap \fi
  \ifcat$\zwpl@spine$\else
    % xspine ignored without spine
    \ifcat$\zwpl@xspine$\else
      \advance\textwidth\zwpl@xspine
    \fi
    \multiply\textwidth 2
    \advance\textwidth\zwpl@spine
  \fi
  \ifcat$\zwpl@xtrim$\else
    \@tempdima\zwpl@xtrim
    \advance\textwidth 2\@tempdima
  \fi
  \ifdim\oddsidemargin<\z@
    \ifdim\evensidemargin<\z@
      \oddsidemargin\topmargin
      \evensidemargin\topmargin
    \else
      \oddsidemargin\evensidemargin
    \fi
  \else
    \ifdim\evensidemargin<\z@
      \evensidemargin\oddsidemargin
    \fi
  \fi
  \paperwidth\textwidth
  \advance\paperwidth\oddsidemargin
  \advance\paperwidth\evensidemargin
\fi

% Paper height
\ifdim\paperheight>\z@

\ifdim\textheight>\z@ \else
  \ifcat$\zwpl@botmargin$
    \ZWsetkeys{zwpl}{botmargin}
  \fi
\fi

\ifcat$\zwpl@botmargin$\else
  \textheight\paperheight
  \advance\textheight -\topmargin
  \advance\textheight -\zwpl@botmargin
\fi

\else % calculate \paperheight
  \paperheight\topmargin
  \ifcat$\zwpl@ytrim$\else
    % add 2*ytrim to textheight
    \@tempdima\zwpl@ytrim
    \advance\textheight 2\@tempdima
  \fi
  \advance\paperheight\textheight
  \ifcat$\zwpl@botmargin$ \else
    \advance\paperheight\zwpl@botmargin
  \fi
\fi

\small\normalsize

\parskip\z@

% Set \textheight
\advance\textheight -\footskip
\advance\textheight -\headheight
\advance\textheight -\headsep
\ifzwpl@strictheight\else
  \ifzwpl@adjustfootskip
    \advance\footskip \textheight
  \else
    \advance\headsep \textheight
  \fi
  \advance\textheight -\topskip
  \divide\textheight by \baselineskip
  \count@ \textheight
  \textheight \count@\baselineskip
  \advance\textheight \topskip
  \ifzwpl@adjustfootskip
    \advance\footskip -\textheight
  \else
    \advance\headsep -\textheight
  \fi
\fi
\advance\topskip 100sp minus 500sp 

\advance\topmargin -1in
\advance\oddsidemargin -1in
\advance\evensidemargin -1in


% \vskip multiple baselines hacked for emTeX

\DeclareRobustCommand\vb{\begingroup \catcode`\-12 \catcode`\.12 \ZW@vb}
\newcommand*\ZW@vb[1][1]{\endgroup\vspace{#1\ZW@baselineskip}}

\newskip\ZW@baselineskip
\def\set@ZW@baselineskip{\ZW@baselineskip \baselineskip
  \advance\ZW@baselineskip 10sp minus 50sp }

\AtBeginDocument{\set@ZW@baselineskip}

% Correction \vskip

\newcommand*\Vcorr{\vskip 10sp minus 50sp}

% New odd/even page leaving an empty page of a specific style

\def\NewOddPage{\@ifstar{\ZW@s@oddpage}{\ZW@oddpage}}
\def\ZW@s@oddpage{\def\ZW@maybewarning{\PackageWarningNoLine{zwpagelayout}}\ZW@oddpage}
\newcommand*\ZW@oddpage[1][empty]{\clearpage
  \ifodd\c@page \else \thispagestyle{#1}\null\ZW@maybewarning{\ZW@oddwarning}\clearpage
    \let\ZW@maybewarning\@gobble
  \fi}

\def\NewEvenPage{\@ifstar{\ZW@s@evenpage}{\ZW@evenpage}}
\def\ZW@s@evenpage{\def\ZW@maybewarning{\PackageWarningNoLine{zwpagelayout}}\ZW@evenpage}
\newcommand*\ZW@evenpage[1][empty]{\clearpage
  \ifodd\c@page \thispagestyle{#1}\null\ZW@maybewarning{\ZW@evenwarning}\clearpage
    \let\ZW@maybewarning\@gobble
  \fi}

\let\ZW@maybewarning\@gobble
\def\SetOddPageMessage#{\gdef\ZW@oddwarning}
\def\SetEvenPageMessage#{\gdef\Z@@evenwarning}
\def\ZW@oddwarning{Empty page inserted}\let\ZW@evenwarning\ZW@oddwarning

% End of page layout setting

\fi % \ifzwpl@onlycropmarks ... \else ... \fi


% User defined dimensions

\def\CropFlap{\zwpl@flap}
\def\CropSpine{\zwpl@spine}
\def\CropXSpine{\zwpl@xspine}
\def\CropXtrim{\zwpl@xtrim}
\def\CropYtrim{\zwpl@ytrim}
\def\UserWidth{\zwpl@textwidth}
\def\UserLeftMargin{\zwpl@leftmargin}
\def\UserRightMargin{\zwpl@rightmargin}
\def\UserTopMargin{\zwpl@topmargin}
\def\UserBotMargin{\zwpl@botmargin}

% Handling color, needed in several cases
\ifzwpl@redefinetocmyk \zwpl@redefineblacktrue \fi
\def\zwpl@next{}
\def\zwpl@reqclr{\def\zwpl@next{\RequirePackage{color}}}
\expandafter\ifx\csname definecolor\endcsname\relax
  \ifzwpl@color \zwpl@reqclr \fi
  \ifzwpl@cropmarks \ifzwpl@nobleedclip \else \zwpl@reqclr \fi \fi
  \ifzwpl@redefineblack \zwpl@reqclr \fi
  \ifzwpl@overprint \zwpl@reqclr \fi
\fi
\zwpl@next
\expandafter\ifx\csname definecolor\endcsname\relax \else
  \definecolor{cmykblack}{cmyk}{0,0,0,1}
  \definecolor{grblack}{gray}{0}
  \ifzwpl@redefineblack
    \definecolor{black}{cmyk}{0,0,0,1}\color{black}
  \fi
  \definecolor{cmykred}{cmyk}{0,1,1,0}
  \definecolor{cmykgreen}{cmyk}{1,0,1,0}
  \definecolor{cmykblue}{cmyk}{1,1,0,0}
  \definecolor{rgbred}{rgb}{1,0,0}
  \definecolor{rgbgreen}{rgb}{0,1,0}
  \definecolor{rgbblue}{rgb}{0,0,1}
  \ifzwpl@redefinetocmyk
    \definecolor{red}{cmyk}{0,1,1,0}
    \definecolor{green}{cmyk}{1,0,1,0}
    \definecolor{blue}{cmyk}{1,1,0,0}
  \fi
\fi

% Black overprint user macros
\DeclareRobustCommand\SetOverprint{\zwpl@optrue \zwpl@setop \ignorespaces}
\DeclareRobustCommand\SetKnockout{\zwpl@opfalse \zwpl@setop \ignorespaces}
\DeclareRobustCommand\textoverprint[1]{{\SetOverprint#1}}
\DeclareRobustCommand\textknockout[1]{{\SetKnockout#1}}

% Black overprint implementation
\let\zwpl@setop\relax
\let\zwpl@resetop\relax
\let\OverprintXeTeXExtGState\relax
\newif\ifzwpl@op

\ifzwpl@overprint
\ifcase\zwpl@Driver
\or % pdftex
  \AtBeginDocument{%
    \immediate\pdfobj{<< /Type /ExtGState /op false /OP false /OPM 0 >>}
    \edef\op@off{\the\pdflastobj}
    \immediate\pdfobj{<< /Type /ExtGState /op true /OP true /OPM 1 >>}
    \edef\op@on{\the\pdflastobj}
    \immediate\pdfobj{ << %
      /GSko \op@off\space 0 R %
      /GSop \op@on\space 0 R >>}
    \edef\@extgs{\the\pdflastobj}
    \edef\next{\global\noexpand\pdfpageresources={\the\pdfpageresources
      \space /ExtGState \@extgs\space 0 R }}
    \next
  }
  % macros for setting and resetting the overprint state
  \def\zwpl@setop{\zwpl@resetop
    \aftergroup\zwpl@resetop}
  \def\zwpl@resetop{%
    \ifzwpl@op
      \pdfliteral direct {/GSop gs}%
    \else
      \pdfliteral direct {/GSko gs}%
    \fi
  }
\or % xetex
  \special{pdf: object @opoff << /Type /ExtGState /op false /OP false /OPM 0 >>}
  \special{pdf: object @opon << /Type /ExtGState /op true /OP true /OPM 1 >>}
  \special{pdf: object @extgs << /GSko @opoff /GSop @opon >>}
  % macros for setting and resetting the overprint state
  % (x)dvipdfm(x) requires setting ExtGState at each page where overprint
  % is going to be used, done automatically if cropmarks are enabled
  \def\OverprintXeTeXExtGState{\special{pdf: put @resources << /ExtGState @extgs >>}}
  \def\zwpl@setop{\zwpl@resetop
    \aftergroup\zwpl@resetop}
  \def\zwpl@resetop{%
    \ifzwpl@op
      \special{pdf: code /GSop gs}%
    \else
      \special{pdf: code /GSko gs}%
    \fi
  }
\else % dvips
  \def\zwpl@setop{\zwpl@resetop
    \aftergroup\zwpl@resetop}
  \def\zwpl@resetop{%
    \ifzwpl@op
      \special{ps: true setoverprint}%
    \else
      \special{ps: false setoverprint}%
    \fi
  }
\fi
\SetKnockout
\else
  \def\zwpl@setop{\global\let\zwpl@setop\relax
      \PackageWarningNoLine{zwpagelayout}{Use the "overprint" option to enable overprint.}}
\fi



% Handle cropmarks
\newdimen\zwpl@low \zwpl@low 1in
\advance\zwpl@low\topmargin
\advance\zwpl@low \headheight
\advance\zwpl@low \headsep
\advance\zwpl@low \textheight
\advance\zwpl@low \footskip
\advance\zwpl@low -\paperheight

\ifzwpl@cropmarks
  \AtBeginDocument{\expandafter\ifx\csname cropmarkstyle@\zwpl@cropmarkstyle\endcsname\relax
    \PackageWarningNoLine{zwpagelayout}{Unimplemented cropmarkstyle=\zwpl@cropmarkstyle}
  \fi \csname cropmarkstyle@\zwpl@cropmarkstyle @setup\endcsname}
  \let\zwpl@pagestyle\pagestyle
  \let\zwpl@thispagestyle\thispagestyle
  \def\pagestyle{\let\zwpl@next\zwpl@pagestyle \zwpl@testps}
  \def\thispagestyle{\let\zwpl@next\zwpl@thispagestyle \zwpl@testps}
\fi

\def\zwpl@testps#1{\xdef\zw@pstyle{ZW\ZWpercent#1\ZWpercent}%
    \@ifundefined{ps@#1}{\xdef\zw@reqstyle{empty}%
      \PackageError{zwpagelayout}{Page style `#1' undefined, `empty' will be used.}}%
      {\xdef\zw@reqstyle{#1}}%
    \@ifundefined{ps@\zw@pstyle}{\zwpl@patchps{\zw@reqstyle}{\zw@pstyle}}{}\zwpl@next{\zw@pstyle}}

\def\zwpl@patchps#1#2{\expandafter\gdef\csname ps@#2\endcsname{\csname ps@#1\endcsname \zwpl@patchfoot}}

\def\zwpl@patchfoot{\let\zwpl@oddfoot\@oddfoot \let\zwpl@evenfoot\@evenfoot
  \ifzwpl@overprint
    \expandafter\ifx\csname OverprintXeTeXExtGState\endcsname\relax \else
      \let\zwpl@oddhead\@oddhead \let\zwpl@evenhead\@evenhead
      \def\@oddhead{\OverprintXeTeXExtGState \zwpl@oddhead}%
      \def\@evenhead{\OverprintXeTeXExtGState \zwpl@evenhead}%
    \fi
  \fi
  \def\@oddfoot{\zwpl@cropbox\zwpl@oddfoot\zw@tinyfil}%
  \def\@evenfoot{\zwpl@cropbox\zwpl@evenfoot\zw@tinyfil}}

\def\zw@tinyfil{\tolerance\@M \hskip \z@ plus .00001fil \relax}

% We must use the knockout mode in the cropmarks (added 2010-12-21)
\def\zwpl@cropbox{{\globaldefs=0\relax \ifzwpl@overprint\SetKnockout\fi
  \csname ZWPL@XeTeXboxes\endcsname
  \rlap{% Some parameters may be changed within the document
  \raisebox{\zwpl@low}[\z@][\z@]{\everyvbox{}\offinterlineskip\boxmaxdepth\z@
    \hskip -\hoffset \hskip -1in \hskip -
    \if@twoside \ifodd\c@page \oddsidemargin \else \evensidemargin \fi \else \oddsidemargin \fi
    \vbox to \paperheight{\hsize\paperwidth \parindent\z@
       \ifzwpl@nobleedclip\else
         \begingroup \vbox to \z@{\color{white}\noindent
           \rlap{\vbox to \paperheight{\hsize \paperwidth
                 \hrule width \hsize height \zwpl@croplength \vfill
                 \hrule width \hsize height \zwpl@croplength}}%
           \rlap{\vbox to \paperheight{\hsize\paperwidth
                 \vrule width \zwpl@croplength height \paperheight
                 \hfill \vrule width \zwpl@croplength}}%
         \vss}%
         \endgroup
       \fi
       \ifzwpl@color
         \edef\zwpl@temp{\noexpand\color[\zwpl@colormodel]{\zwpl@cropcolor}}\zwpl@temp
       \fi
       %%%\zwpl@cropfont \zwpl@cropfontsize \selectfont
       \normalfont \fontsize{10}{10}\selectfont
       \csname cropmarkstyle@\zwpl@cropmarkstyle\endcsname
    }%
}}}}

\ifzwpl@cropmarks \zwpl@patchfoot \fi

% General definitions for the crop marks
\newdimen\zwpl@len  \zwpl@len\zwpl@croplength
\newdimen\zwpl@gap  \zwpl@gap\zwpl@cropgap
\newdimen\zwpl@plus \newdimen\zwpl@minus
\zwpl@plus \zwpl@croplength
\zwpl@plus .5\zwpl@plus
\zwpl@minus -\zwpl@plus
\advance\zwpl@plus .2pt
\advance\zwpl@minus .2pt

\newdimen\zwpl@frame \zwpl@frame\paperheight

\ifzwpl@cropmarks
  \hoffset \zwpl@croplength
  \advance\hoffset \zwpl@gap
  \voffset\hoffset
  \advance\paperheight 2\voffset
  \advance\paperwidth 2\hoffset
\fi
\advance\zwpl@low -\voffset

\newdimen\zwpl@vsize
\zwpl@vsize\paperheight
\advance\zwpl@vsize -2\zwpl@croplength

\def\clap#1{\hbox to \z@{\hss #1\hss}}
\def\zwpl@cbox#1{\rlap{\hbox to \zwpl@croplength{\hss #1\hss}}}

\def\zwpl@vert{\vrule height \zwpl@croplength depth \z@ width .4pt }
\def\zwpl@horiz{\vrule height .2pt depth .2pt width \zwpl@croplength}
\def\zwpl@choriz{\vrule height \zwpl@plus depth \zwpl@minus width \zwpl@croplength}
\def\zwpl@cross{\zwpl@cbox{\zwpl@vert}\zwpl@choriz}
\def\zwpl@frm{\clap{\vrule height \zwpl@frame depth \z@ width .4pt}}
\def\zwpl@hh{\hbox to \hsize}
\def\zwpl@hline{\zwpl@hh{\zwpl@horiz \hskip\zwpl@gap
    \ifzwpl@cropframe
      \leaders \vrule height .2pt depth .2pt \hfill
    \else
      \hfill
    \fi
    \hskip\zwpl@gap \zwpl@horiz}}

\def\zwpl@cvert{\clap{\zwpl@vert}}

% Vertical crop lines for the default style
\newcommand*\zwpl@vline[1][]{%
  \zwpl@hh{\zwpl@cross \hskip\zwpl@gap \clap{\zwpl@vert}%
    \ifcat$\zwpl@xtrim$\else
      \hskip\zwpl@xtrim \clap{\zwpl@vert}%
    \fi
    \ifcat$\zwpl@flap$\else
      \hskip\zwpl@flap \clap{\zwpl@vert}%
    \fi
    \rlap{\hskip\zwpl@gap #1}%
    \hss
    \ifcat$\zwpl@spine$\else
      \ifcat$\zwpl@xspine$\else
        \clap{\zwpl@vert}\hskip\zwpl@xspine
      \fi
      \clap{\zwpl@vert}\hskip\zwpl@spine \clap{\zwpl@vert}%
      \ifcat$\zwpl@xspine$\else
        \hskip\zwpl@xspine \clap{\zwpl@vert}%
      \fi
      \hss
      \ifcat$\zwpl@flap$\else
        \clap{\zwpl@vert}\hskip\zwpl@flap
      \fi
    \fi
    \ifcat$\zwpl@xtrim$\else
      \clap{\zwpl@vert}\hskip\zwpl@xtrim
    \fi
    \clap{\zwpl@vert}\hskip\zwpl@gap \zwpl@cross}}

% Default crop mark style
\def\cropmarkstyle@default{%
  \expandafter\zwpl@vline\ifzwpl@color[\zwpl@showallcolors]\fi
  \vskip\zwpl@gap \zwpl@hline
  \ifcat$\zwpl@ytrim$\else
    \vskip\zwpl@ytrim \zwpl@hline
  \fi
  \vss
  \ifzwpl@cropframe
    \zwpl@hh{\hskip \hoffset \zwpl@frm
    \ifcat$\zwpl@xtrim$\else
      \hskip\zwpl@xtrim \zwpl@frm
    \fi
    \ifcat$\zwpl@flap$\else
      \hskip\zwpl@flap \zwpl@frm
    \fi
    \hss
    \ifcat$\zwpl@spine$\else
      \ifcat$\zwpl@xspine$\else
        \zwpl@frm \hskip\zwpl@xspine
      \fi
      \zwpl@frm \hskip\zwpl@spine \zwpl@frm
      \ifcat$\zwpl@xspine$\else
        \hskip\zwpl@xspine \zwpl@frm
      \fi
      \hss 
      \ifcat$\zwpl@flap$\else
        \zwpl@frm \hskip\zwpl@flap
      \fi
    \fi
    \ifcat$\zwpl@xtrim$\else
      \zwpl@frm \hskip\zwpl@xtrim
    \fi
    \zwpl@frm \hskip \hoffset}\vss
  \fi
  \ifcat$\zwpl@ytrim$\else
    \zwpl@hline \vskip\zwpl@ytrim
  \fi
  \zwpl@hline \vskip\zwpl@gap \zwpl@vline[\zwpl@printcroptitle]}

% Leaflet style
\def\zwpl@fold@use#1{\csname zwpl@fold@#1@leaf\endcsname}
\def\zwpl@fold@def#{\expandafter\expandafter\expandafter\def\zwpl@fold@use}

% We can do this because cropmark dimensions are set within a group
\def\zwpl@switchskips{\let\zwpl@temp\zwpl@leftskip
                      \let\zwpl@leftskip\zwpl@rightskip
                      \let\zwpl@rightskip\zwpl@temp}

\newif\ifzwpl@middle
\def\zwpl@nofoldcorr{\def\zwpl@foldcorr{0mm}}

% Leaflet initialization
\zwpl@fold@def{2}{\def\zwpl@leafcount{2}%
  \def\zwpl@leftskip{\hskip\zwpl@foldcorr}%
  \def\zwpl@rightskip{}}
\zwpl@fold@def{3left}{\def\zwpl@leafcount{3}%
  \def\zwpl@leftskip{\hskip\zwpl@foldcorr}%
  \def\zwpl@rightskip{}}
\zwpl@fold@def{3right}{\zwpl@fold@use{3left}\zwpl@switchskips}
\zwpl@fold@def{Z}{\def\zwpl@leftskip{}\let\zwpl@rightskip\zwpl@leftskip\zwpl@nofoldcorr}
\zwpl@fold@def{4}{\zwpl@fold@use{Z}\def\zwpl@leafcount{4}\zwpl@middletrue}

\def\cropmarkstyle@leaflet@setup{%
  \expandafter\expandafter\expandafter\ifx\zwpl@fold@use{\zwpl@fold}\relax
    \PackageWarningNoLine{zwpagelayout}{Unimplemented leaflet fold=\zwpl@fold.\MessageBreak
                                        Leaflet crop marks will not be printed.}
    \def\zwpl@cropmarkstyle{\ZWpercent}
  \else
    \zwpl@fold@use{\zwpl@fold}%
    % Test the variables by assignments
    \@tempskipa=\zwpl@foldcorr\relax
    \count@=\zwpl@leafcount\relax
  \fi
}

% vertical crop lines for a leaflet
\newcommand*\zwpl@vleaf[1][]{%
  \zwpl@hh{\zwpl@cross \hskip\zwpl@gap \zwpl@cvert
    \rlap{\hskip\zwpl@gap #1}\zwpl@leftskip
    \count@=1
    \loop
      \hfil
      \ifzwpl@middle
        \ifnum\count@>1
          \zwpl@middlefalse
        \else
          \zwpl@cvert
        \fi
      \else
        \zwpl@cvert
      \fi
      \advance\count@ 1
    \ifnum\count@<\zwpl@leafcount \repeat
    \hfil \zwpl@rightskip
    \zwpl@cvert\hskip\zwpl@gap \zwpl@cross}}

% Crop marks for a leaflet
\def\cropmarkstyle@leaflet{%
  \if@twoside \ifodd\c@page \else \zwpl@switchskips \fi \fi
  \expandafter\zwpl@vleaf\ifzwpl@color[\zwpl@showallcolors]\fi
  \vskip\zwpl@gap \zwpl@hline
  \vss
  \ifzwpl@cropframe
    \zwpl@hh{\hskip \hoffset \zwpl@frm \zwpl@leftskip
    \count@=1
    \loop
      \hfil \zwpl@frm
      \advance\count@ 1
    \ifnum\count@<\zwpl@leafcount \repeat
    \hfil \zwpl@rightskip
    \zwpl@frm \hskip \hoffset}\vss
  \fi
  \zwpl@hline \vskip\zwpl@gap \zwpl@vleaf[\zwpl@printcroptitle]}

% Print the crop title
\def\zwpl@printcroptitle{\raisebox{.8ex}[\z@][\z@]{\ifzwpl@usepagenumbers
  \ifzwpl@pagenumberfirst
    \thePageNumber 
    \ifcat$\zwpl@croptitle$\else
      \zwpl@cropseparator \zwpl@croptitle
    \fi
  \else
    \ifcat$\zwpl@croptitle$\else
      \zwpl@croptitle \zwpl@cropseparator
    \fi
    \thePageNumber
  \fi
\else
  \ifcat$zwpl@croptitle$\else
    \zwpl@croptitle
  \fi
\fi}}

\def\thePageNumber{\#\,\arabic{page}}

\def\zwpl@xprintcolor{\@ifstar\zwpl@s@printcolor\zwpl@printcolor}

\def\zwpl@printcolor#1:#2:{\edef\zwpl@temp{\noexpand\textcolor[\zwpl@colormodel]{#2}{#1}}\zwpl@temp\space}

\def\zwpl@s@printcolor#1:#2:{\bgroup
    \setbox\@tempboxa=\hbox{\space \ignorespaces #1 \unskip \space}\@tempdima=\wd\@tempboxa
    \@tempdimb=\ht\@tempboxa  \advance\@tempdimb .5pt
    \@tempdimc=\dp\@tempboxa  \advance\@tempdimc .5pt
    \edef\zwpl@temp{\noexpand\textcolor[\zwpl@colormodel]{#2}{\rlap{\vrule
          width \@tempdima height \@tempdimb depth \@tempdimc}}}\zwpl@temp
    \color{white}\box\@tempboxa \egroup \space}

\def\zwpl@showcolors#1,#2*{\zwpl@xprintcolor#1:%
    \ifcat$#2$\let\zwpl@next\relax
    \else\def\zwpl@next{\zwpl@showcolors#2*}\fi \zwpl@next}

\def\zwpl@showallcolors{\raisebox{.25ex}[\z@][\z@]{\expandafter\zwpl@showcolors\zwpl@colors,*}}

% Reflect (should be at the end of the package)

\newcount\zwpl@Hshift
\newcount\zwpl@Vshift

% shift calculation
\def\zwpl@calcshift#1#2{#1#2
    \divide #1 8
    \multiply #1 5
    \divide #1 8
    \multiply #1 5
    \divide #1 25696 }

% pdftex version
\def\zwpl@Hreflect{\zwpl@calcshift\zwpl@Hshift\hsize
    \pdfliteral{-1 0 0 1 \the\zwpl@Hshift\space 0 cm}}

\def\zwpl@Vreflect{\@tempdima\vsize
    \advance\@tempdima-\topmargin
    \zwpl@calcshift\zwpl@Vshift\@tempdima
    \pdfliteral{1 0 0 -1 0 -\the\zwpl@Vshift\space cm}}

% (x)dvipdfm(x) version, modifies bop and eop
\def\zwpl@XHreflect{\zwpl@calcshift\zwpl@Hshift\paperwidth
    \special{pdf: bop q -1 0 0 1 \the\zwpl@Hshift\space 0 cm}\special{pdf: eop Q}}

\def\zwpl@XVreflect{\zwpl@calcshift\zwpl@Vshift\paperheight
    \special{pdf: bop q 1 0 0 -1 0 \the\zwpl@Vshift\space cm}\space{pdf: eop Q}}

% dvips version (modifies bop-hook)
\def\zwpl@psreflect#1#2#3#4{\zwpl@calcshift#3#4
    \special{! userdict begin
               userdict /bop-hook known {/bop-hook load cvx /ZW#1-hook exch def} if
               /bop-hook {
                   [#2] concat
                   userdict /ZW#1-hook known {ZW#1-hook} if
               } def end}}

\def\zwpl@psHreflect{\zwpl@psreflect H{-1 0 0 1 \the\zwpl@Hshift\space 0}\zwpl@Hshift\paperwidth}
\def\zwpl@psVreflect{\zwpl@psreflect V{1 0 0 -1 0 \the\zwpl@Vshift}\zwpl@Vshift\paperheight}
