%% $Id: zwpagelayout.tex 552 2022-04-18 09:39:07Z zw $
\input utf8-t1 % encTeX required
\documentclass[11pt]{article}
\usepackage{zwgetfdate}
\usepackage[footskip=30pt,topmargin=2cm,leftmargin=15mm,rightmargin=55mm,botmargin,nopdfinfo]{zwpagelayout}
\usepackage[T1]{fontenc}
\usepackage{lmodern,array,dcolumn,verbatim,graphicx}
\usepackage[figuresright]{rotating}
\usepackage[protrusion=false,expansion=true,stretch=8,shrink=24,step=4]{microtype}
\makeatletter
\renewcommand*\l@section{\@dottedtocline{1}{\z@}{1.5em}}
\makeatother
\extrarowheight 2pt
\mubytein 0 % important due to bug in url.sty
\usepackage[pdftitle=Page\ Layout\ with\ Crop\ Marks, pdfauthor=Zdenek\ Wagner,
            pdfkeywords={page layout,\ crop marks},
            bookmarks,bookmarksopen,bookmarksopenlevel=2]{hyperref}
\mubytein 1 \mubyteout 1 \mubytelog 1

\marginparwidth\UserRightMargin
\advance\marginparwidth -1cm
\advance\marginparwidth-\marginparsep

\def\mg#1{\ifvmode\leavevmode\fi\marginpar{\texttt{#1}}\ignorespaces}
\def\cmg#1{\mg{\char`\\#1}}
\def\omg#1{\ifvmode\leavevmode\fi\marginpar{\raggedright\hspace{0pt}\opt{#1}}\ignorespaces}
\def\opt#1{\texorpdfstring{\textmd{\textsc{#1}}}{#1}}
\let\pkg\textsc
\DeclareRobustCommand\cmd[1]{\texttt{\char`\\#1}}
\def\ie.{i.\,e.\@}
\def\eg.{e.\,g.\@}
\def\true{\bool{true}}
\def\false{\bool{false}}
\def\bool#1{\texorpdfstring{\textit{#1}}{#1}}
\def\is{\unskip\nobreak\space =\penalty200 \space\ignorespaces}

\DeclareRobustCommand\XeTeX{X\kern-.125em\lower.5ex\hbox{\csname
              reflectbox\endcsname{E}}\kern-.1667em\TeX}
\DeclareRobustCommand\XeLaTeX{X\kern-.125em\lower.5ex\hbox{\csname
              reflectbox\endcsname{E}}\LaTeX}

\makeatletter
\newcommand*\papdims[2][.]{\bgroup
    \def\zw@papdim##1,##2\zw@{\sepunit{##1}#1\sepunit{##2}}%
    \setkeys{zwpl}{#2}%
    \expandafter\zw@papdim\zwpl@papersize\zw@\egroup}

\newcommand*\sepunit[2][\,]{\def\zw@a{}\def\zw@x{#1}\def\zw@y{}\def\zw@z{}\zw@sepunit#2\zw@}
\def\zw@sepunit#1{\ifx#1\zw@
      \let\next\zw@sep@finished
    \else
      \edef\zw@a{\zw@a\zw@y}\edef\zw@y{\zw@z}\edef\zw@z{#1}\let\next\zw@sepunit
    \fi \next}
\def\zw@sep@finished{\zw@a\zw@x\mbox{\zw@y\zw@z}}
\makeatother

\def\krat{\,\ensuremath{\times}\,}

\newcolumntype{x}{D{.}{\krat}{-1}}
\def\xx#{\multicolumn{1}{c|}}

\let\zwcomma\,
\def\,{\texorpdfstring{\zwcomma}{}}

\clubpenalty10000
\widowpenalty10000

\begin{document}
\hyphenation{post-script ghost-script allow-with-height-switching Output-Condition Output-Condition-Identifier}

\title{Page Layout with Crop Marks}
\author{Zdeněk Wagner\\\url{http://icebearsoft.euweb.cz}}
\date{Package date: \DateOfPackage{zwpagelayout}}
\maketitle

\begin{abstract}\noindent
This package was developed as a typographers toolbox offering the most important features for
everyday work. First it allows setting the paper size as well as the page layout. The next
important feature is the ability of printing crop marks both with \TeX~+~dvips or (x)dvipdfm(x) and with pdf\TeX.
Finally it is possible to reflect pages both horizontally and vertically, select black overprint
and set various PDF/X features.
\end{abstract}

\tableofcontents

\section{Introduction}
Users will probably ask: ``Why another page layout package? Is not \pkg{geometry} all what we
need?'' The answer to this question is not easy. The \pkg{geometry} package provides a lot of
features, maybe even too many features. However, some features are missing. Packages for crop marks
can also be found but correct positioning of the crop marks requires cooperation with the
page layout package. It is therefore natural to integrate both these functions into a single
package.

The package is useful also for preparation of book covers. It places the marks showing the position
of a spine and optionally flaps. If you want to see whether the spine and the front and back cover
contents are properly aligned, you can display the frames. Moreover, it is often necessary to
create a proof of the cover while the book is not yet finished and the thickness of the spine is
not known and can be only approximated. You can thus leave the paper width empty and the package
will calculate it from the page width, the flap width and the spine thickness. Whenever the final
value of the spine thickness is known, you change it in the list of options and the whole layout
will adapt automatically.

The files usually fail to meet PDF/X conformance due to silly reasons. It is always mandatory to
set the title, creation date and modification date in any PDF file. It can be done by the
\pkg{hyperref} package. However, \pkg{hyperref} is a complex package that may cause clashes with
other packages. We do not want to kill ants by cannon balls, therefore we do simple things by simple
means. Options for partial PDF/X conformance were added but may be switched off if a user wishes to
use \pkg{hyperref}.

The package is a result of a long-term development inspired by author's everyday needs. It is a
collection of macros that were manually copied from document to document, later placed into private
packages and finally it matured into a package prepared for general use.

Being a result of development it may happen that you may be in the same situation in which I was
myself. The book was finished and the last task was to add the crop marks. Removing layout
definition from a document and replacing it with a different package may cause errors and one more
proof-reading is time consuming and expensive. This package therefore allows the page layout logic
to be switched off and just add the crop marks provided the paper dimensions are correctly
supplied. The details will be explained later when describing the package options.

\section{Installation}\label{installation}
The package consists of a single file, \texttt{zwpagelayout.sty}. Put it to a directory where
\LaTeX\ expects packages, preferably \texttt{texmf-dist/tex/latex/zwpagelayout}. All remaining
files belong to the documentation, put them to a directory where documentation (including
documentation sources) is expected by \pkg{texdoc} or a similar program, preferably
\texttt{texmf-dist/doc/zwpagelayout}.

\section{Package dependence}
As written in the introduction, the goal was to implement as much within this single package in
order to reduce the risk of clashes. Yet a few packages may be loaded. The package needs to know
what engine is being used. For this purpose the \pkg{iftex} package\footnote{Up to version 1.4c
both \pkg{ifxetex} and \pkg{ifpdf} were used. Nowadays both these packages are deprecated and load
\pkg{iftex}. The package would fail with a critical error if they were used.} is used. If
the package is not found, it is assumed that the engines are not available.
No error is reported. The color support requires the \pkg{color} package. It is loaded only if the
color support is requested. The algorithm for deciding when the package is needed will be described
in detail in section~\ref{color}.

Option setting is implemented via the \pkg{kvoptions} package which in turn loads the \pkg{keyval}
package. These packages should be available in any nowaday's \TeX\ distribution.

\section{Usage}
The package is loaded simply by:

\vb
\verb;\usepackage[;$\langle$options$\rangle$\verb;]{zwpagelayout};

\vb\noindent
Remember that the options cannot be given later, all of them must be present either here or as
options to the \cmd{documentclass} command. The package will set some dimensions based upon
\cmd{normalsize}. The package that modifies font sizes must therefore be loaded before
\pkg{zwpagelayout}.

\section{Option values}

Some options accept a value. If the option is not specified, it may have a \textbf{default} value. For ease of use an
option may be given without a value. It will then have a \textbf{standard} value. The default and standard
values will be given in the option description.

The option value may sometimes contain spaces and commas. However, commas are used to separate
options, and during parsing the spaces are ignored. The spaces must therefore be preceded by a
backslash and an option value containing commas must be enclosed in braces, for example:

\vb
\begin{verbatim}
\usepackage[a4,subject=Some\ subject,
            keywords={keyword\ 1,\ keyword\ 2}]{zwpagelayout}
\end{verbatim}

\section{Driver selection}\label{driver.selection}
The driver is usually selected automatically. The package makes use of the \pkg{ifxetex} and
\pkg{ifpdf} packages to detect either \XeTeX\ or pdftex. If none of them is detected, dvips is
assumed.

\omg{driver}
It may sometimes be necessary to set the driver manually by giving the \opt{driver} option. This
option recognizes drivers \texttt{unknown}, \texttt{pdftex}, \texttt{xetex}, and \texttt{dvips}. In
addition \texttt{other} is an alias to \texttt{unknown}, \texttt{dvipdfm} and \texttt{xdvipdfmx}
are aliases to \texttt{xetex}.

The package shows the driver in the log file. If the driver is set to \texttt{unknown}, all driver
specific features will be disabled.

\section{Paper size and orientation}
The first task of the package is to define paper size and orientation. Remember that the package is
intended for use in real life where we cannot be limitted to standard papers sizes. However, the
standard paper sizes are used quite often and we must be able to use them too. The options were
tested with pdf\TeX, \pkg{dvips} as well as \pkg{(x)dvipdfm(x)}.

\subsection{Orientation}\label{orientation}
\omg{AllowWidthHeightSwitching}
The package usually accepts the dimentsions as they are, \ie. width and height of the page. The
orientation cannot be changed. If you wish to have the possibility to change the orientation, you
have to use this option. It is used automatically with all standard paper sizes (see
section~\ref{standard}). You will rarely specify it yourself.

\omg{Portrait}\omg{Landscape}
These options sets the paper orientation, \opt{Portrait} is the default. They can be used only if
\opt{AllowWidthHeightSwitching} was specified, otherwise they are ignored.

\subsection{Paper size}
The package option defines the trimmed paper size. If the crop marks are added, the real paper size
will be added. Dimensions \cmd{paperwidth} and \cmd{paperheight} will thus contain the values that
will subsequently be sent to the driver. If you for any reason wish to know the trimmed dimensions,
you can calculate them as follows:

\begin{center}
trimmed width = \cmd{paperwidth} -- 2\cmd{hoffset}

trimmed height = \cmd{paperheight} -- 2\cmd{voffset}
\end{center}

\subsubsection{Generic paper size}
\omg{papersize}
Option \opt{papersize} is used to define arbitrary paper size. You define it as a pair of two
dimensions, the width and the height. The numbers are separated by a comma, therefore the
specification must be enclosed within braces, \eg.

\begin{verbatim}
\usepackage[papersize={200mm,100mm}]{zwpagelayout}
\end{verbatim}

The above written command sets the paper width to 200\,mm and the paper height to 100\,mm, \ie. the
paper orientation will be landscape. Now consider the following:

\begin{verbatim}
\usepackage[papersize={200mm,100mm},
    AllowWidthHeightSwitching]{zwpagelayout}
\end{verbatim}

Since the width/height switching is allowed and the default orientation is portrait (option
\opt{Portrait} is the default), the width will be 100\,mm and the height will be 200\,mm.

You can achieve the same result as the first command by the lengthy code:

\begin{verbatim}
\usepackage[papersize={200mm,100mm},
    AllowWidthHeightSwitching,Landscape]{zwpagelayout}
\end{verbatim}

You see that the command may become confusing. You should better not use
\opt{AllowWidthHeightSwitching} together with \opt{papersize}.

If the \opt{papersize} option is not used, it defaults to the A4 size, \ie. to paper dimensions \papdims[\krat]{a4}.

If the book cover is being typeset, we want to calculate at least the width. The detailed
explanation will be given in section~\ref{missing}. Here we put just as an example:

\begin{verbatim}
\usepackage[papersize={,200mm},spine=15mm,textwidth=14cm,
            margins]{zwpagelayout}
\end{verbatim}

It is even possible to calculate both dimensions using \eg.

\begin{verbatim}
\usepackage[papersize,spine=15mm,textwidth=14cm,textheight=20cm,
            margins]{zwpagelayout}
\end{verbatim}

\subsubsection{Standard paper sizes}\label{standard}
\omg{a0\,\ldots\,c10}\omg{executive}\omg{legal}\omg{letter}
Options \opt{a0}\ldots\opt{a10}, \opt{b0}\ldots\opt{b10}, \opt{c0}\ldots\opt{c10} are used to
select paper size according to the A, B or C series where the dimensions are rounded to integers in
milimeters. For instance, the A6 size is \papdims[\krat]{a6}. The package also supports paper sizes
\opt{executive} (\papdims[\krat]{executive}), \opt{legal} (\papdims[\krat]{legal}), and
\opt{letter} (\papdims[\krat]{letter}). If one of these options is used,
\opt{AllowWidthHeightSwitching} and \opt{Portrait} are assumed. The page orientation may be
switched by option \opt{Landscape} (see section~\ref{orientation}).

\subsection{Page bounding boxes}\label{Bboxes}
The drivers usually set MediaBox to the physical size of the page. If cropmarks are requested (see
section~\ref{cropmarks}), the package sets also BleedBox and TrimBox, ArtBox is explicitely
forbidden by PDF/X. CropBox is
intentionally unset since it causes cropped display in Adobe Reader. Since page size setting is
delayed, MediaBox contains the whole page including the area for the cropmarks. MediaBox is
calculated by the driver, the other boxes are calculated by \TeX. Their dimensions are therefore
not exact because \TeX\ does not use floating point arithmetic. The difference is negligible.

\omg{noBboxes}
Option \opt{noBboxes} disables setting the above mentioned boxes. Currently there is a known bug
causing fatal error in Adobe Distiller if these boxes are set.

\cmg{noBboxes}
Macro \cmd{noBboxes} performs exactly the same action as the \opt{noBboxes} option. The only
advantage is that it can be used later in the preamble of the document. It cannot be used after
\verb.\begin{document}. because the boxes are already set at that time.

\section{Page layout options}
These options define the layout of the odd page. The layout of the even page is assumed to be a mirror image.
The values of \cmd{oddsidemargin} and \cmd{evensidemargin} are calculated from the values of the options.

\subsection{Margins}
This set of options us used to define margin sizes.
Remember that all margins are measured from the top left corner of the paper, not from 1in border which is
the \textsc{dvi} origin!

\subsubsection{Option \opt{margins}, standard 0\,mm}
\omg{margins}
This option sets all margins (top, left, right, bottom) to the specified size. You will not be able to change
some of the margin to another size. If you need different size for any margin, you have to set all of them
separately and not use this option. Notice that almost everything may be calculated automatically, thus it is
not necessary to specify all values.

\subsubsection{Option \opt{topmargin}, default 1\,in}
\omg{topmargin}
This option sets the value of \cmd{topmargin}.

\subsubsection{Option \opt{botmargin}, standard \opt{topmargin}}
\omg{botmargin}
This option specifies the size of the margin below the running footer.

\subsubsection{Option \opt{leftmargin}, default --1\,in}
\omg{leftmargin}
This option sets the value of the margin at the left side of an odd page (and the margin at the right side of
an even page). Negative value means that the value was not given.

\subsubsection{Option \opt{rightmargin}, default --1\,in}
\omg{rightmargin}
This is the size of the right side of an odd page. Similarly the negative value means that the option was not
specified.

\subsection{Text dimensions}
The following options are used to specify the height and width of the text.

\subsubsection{Option \opt{textwidth}, default --1\,in}
\omg{textwidth}
This option specifies the width of the text without marginal notes. Its meaning is different for
book covers. The option specifies the width of the cover without the extra spine (\opt{xspine}),
flap (\opt{flap}) and trimming (\opt{xtrim} or \opt{trim}).

\subsubsection{Option \opt{textheight}, default --1\,in}
\omg{textheight}
This option specifies the total height of the text including the header and footer.

\subsubsection{Option \opt{headheight}, default 0\,mm}
\omg{headheight}
This option specifies the height of the running head.

\subsubsection{Option \opt{headsep}, default 0\,mm}
\omg{headsep}
This is the value of \cmd{headsep}.

\subsubsection{Option \opt{footskip}, default 0\,mm}
\omg{footskip}
This option specifies the value of \cmd{footskip}.

\subsubsection{Option \opt{topskip}\texorpdfstring{, default \cmd{topskip}}{}}
\omg{topskip}
This option enables changing the value of \cmd{topskip}. It is rarely needed. However, the value of
\cmd{topskip} is usually less than \cmd{baselineskip} which may cause problems in some page layout schemes.
Since we have already written that font sizes must be defined before \pkg{zwpagelayout} is loaded, you can
safely specify \verb;topskip=\baselineskip;.

\subsubsection{Option \opt{strictheight}, default \false, standard \true}
\omg{strictheight}
The value of the \LaTeX\ dimension \cmd{textheight} is calculated from the values of the options and later
adjusted so that together with \cmd{topskip} it represents an integer number of lines. This may not be
desirable in some cases. This option instructs the package not to perform any adjustment and accept the
calculated value.

\subsubsection{Option \opt{adjustfootskip}, default \true, standard \true}
\omg{adjustfootskip}
If option \opt{strictheight} is not given, the calculated value of \cmd{textheight} is decreased to the nearest
integer multiple of \cmd{baselineskip}. The difference is then added to \cmd{footskip} in order to preserve to
total height. If \opt{adjustfootskip} is set to \false, the difference is added to \cmd{headsep} instead.

\begin{figure}[bt]
\noindent
\includegraphics{adjustfoot}\hfill
\includegraphics{adjusthead}

\vb
\caption{Compensation of \cmd{textheight} by changing \cmd{footskip} (on the left) and
\cmd{headsep} (on the right)}\label{adj}
\end{figure}

The difference betweem these two options is shown in figure~\ref{adj}. Adjustment of \cmd{footskip}
was achieved by:

\vb
\begin{verbatim}
\usepackage[c8,margins=6mm,headheight=4mm,headsep=4mm,
   croplength=3mm,cropgap=2mm,
   cropmarks,cropframe,croptitle=Adjust\ footskip]{zwpagelayout}
\end{verbatim}

\vb \noindent
The sample on te right side of the figure was created by:

\vb
\begin{verbatim}
\usepackage[c8,margins=6mm,headheight=4mm,headsep=4mm,adjustheadsep,
   croplength=3mm,cropgap=2mm,
   cropmarks,cropframe,croptitle=Adjust\ headsep]{zwpagelayout}
\end{verbatim}

\subsubsection{Option \opt{adjustheadsep}, default \true, standard \true}
\omg{adjustheadsep}
This is a complementary option to \opt{adjustfootskip}.

\section{Calculation of missing dimensions}\label{missing}
The package can either calculate paper size from the page layout dimensions or calculate missing
page layout dimensions if the paper size and some dimensions are known. It operates separately for
the height and width. You can \eg. define the paper height and calculate the text height from it
and the margins but specify all width layout dimensions and calculate the paper width.

When designing simple pages it is better to define the paper size and calculate some page layout
dimensions. However, for bok covers it is recommended to calculate at least the paper width from
the layout dimensions of the front cover, the spine and the flap width.

\subsection{Calculation of the paper size}
Remember that paper size can be calculated only if all page layout dimensions for the corresponding
orientation (height, width) are specified. There is no diagnostics for warning you if some
important options are missing, the resukt will just be wrong or the package may even report an
error. All dimensions are considered \emph{without} the area for the crop marks.

\subsubsection{Paper height}
Calculation of the paper height is very simple. The formula is:

\vb
\cmd{paperheight} = \opt{topmargin} + \opt{textheight} + \opt{botmargin} + 2 \opt{ytrim}

\vb \noindent
Remember that \opt{textheight} includes also \cmd{headheight}, \cmd{headsep}, and \cmd{footskip}.
It is not necessary to specify \opt{ytrim}, the package checks the existence of this option and
removes it from the formula if not given.

\subsubsection{Paper width}
Algorithm for calculating the paper width differs for simple pages and book covers. In the simple
case the paper width is calculated as follows:

\vb
\cmd{paperwidth} = \opt{leftmargin} + \opt{textwidth} + \opt{rightmargin}

\vb \noindent
The value of \cmd{textwidth} will be equal to \opt{textwidth}. The same value will be stored in
macro \cmd{UserWidth}, see section~\ref{crop.macros}.

If the book cover is designed, the \opt{textwidth} option refers to the width of the text at the
front cover but \opt{leftmargin} and \opt{rightmargin} are used to set \cmd{oddsidemargin} and
\cmd{evensidemargin}. It is therefore better to set these options to zero, or alternatively to the
same value as \opt{flap} or \opt{xtrim} if the corresponding area will be left empty. The value of
\cmd{textwidth} will then be calculated from the final paper width by:

\vb
\cmd{textwidth} = \cmd{paperwidth} -- \opt{leftmargin} -- \opt{rightmargin}

\vb
If the \opt{flap} option is used without the \opt{spine} option in order to emulate the front cover
and spine with an empty back cover, the paper width is calculated as:

\vb
\cmd{paperwidth} = \opt{leftmargin} + \opt{flap} + \opt{textwidth} + \opt{xtrim} +
\opt{rightmargin}

\vb \noindent
The value of \opt{xtrim} may be omitted. The value of \opt{xspine} will be silently ignored. It is
not allowed to have just the spine, the front cover and the flap while leaqving the back cover
empty.

The case of a book cover with the spine given is a bit more complicated:

\vb
\textit{width} = \opt{xspine} + \opt{textwidth} + \opt{flap} + \opt{xtrim}

\cmd{paperwidth} = \opt{leftmargin} + \opt{spine} + 2 \textit{width} + \opt{rightmargin}

\vb \noindent
Options \opt{xspine}, \opt{flap}, and \opt{xtrim} need not be specified if these elements are not
needed.

\subsection{Calculation of page layout dimensions}\label{calc.pg.layout}
Algorithm for calculating the page layout dimensions is intended for simple pages, not for book
covers. Options \opt{xtrim}, \opt{ytrim}, \opt{spine}, \opt{xspine}, and \opt{flap} are silently
ignored but will be taken into account when producing the crop marks. You can still make use of
this algorithm if you understand what you are doing and if you wish to do extra calculations
yourself.

The dimensions may be overdetermined. In such a case the algorithm disregards one of the dimensions
and calculates it.

\subsubsection{Vertical dimensions}\label{vert.dim}
The algorithm first looks whether \opt{textheight} was given. If not it is assumed that the user
wishes to have it calculated from the paper height and the margins. If the \opt{botmargin} option was
not set, it will be set to the same valu as \opt{topmargin}.

In the second step the package looks whether \opt{botmargin} is defined, either by the user or from
the previous step. If so, the text height is calculated, otherwise the bottom margin is calculated
from the top margin and the text height. As a matter of fact, the bottom margin is never used by
\TeX.

Finally the value of \cmd{textwidth} is reduced by \cmd{headheight}, \cmd{headsep}, and
\cmd{footskip}. If \opt{strictheight} is \cmd{false}, the values are later adjusted according to
options \opt{adjustfootskip} and \opt{adjustheadsep} so that \cmd{textheight} -- \cmd{topskip} is
an integer multiple of \cmd{baselineskip}.

\subsubsection{Horizontal dimensions}
The sum of the horizontal dimensions must be equal to the paper width according to the relation:

\vb
\opt{leftmargin} + \opt{textwidth} + \opt{rightmargin} = \cmd{paperwidth}

\vb \noindent
If all three dimensions are specified, \opt{textwidth} is disregarded and calculated from the other
dimensions. If any two dimensions are given, the missing one is calculated from the above formula.
If only one dimension is given, it is assumed that both margins have the same size and the above
formula is applied. It is even possible to omit all dimensions. In such a case the margins are
assumed to have the same size as \opt{topmargin} and the text width can thus be calculated.

\section{Page reflection}\label{reflection}
\omg{Reflect\-Horizontally}
\omg{ReflectVertically}
We sometimes need to print the whole document as a mirror image. Although there are external tools
that can provide such a job taking PDF or PS as input, it is useful to do everything in a single
step. The package provides options \opt{ReflectHorizontally} for horizontal reflection and
\opt{ReflectVertically} for vertical reflection, respectively. If you specify both, some drivers
may interpret both of them and print rotated 180$^{\circ}$, some interpret only one of them.

The PostScript to PDF converters optionally rotate pages according to the text direction. They may
be confused by reflected text and add undesired rotation. If the horizontally reflected text is
roteted 180$^{\circ}$, it looks as if it were reflected vertically instead.

Remember that these options are intended for printing only.
The hypertext links made by the \pkg{hyperref} package will be wrong. If you wish to rotate parts
of texts and preserve hyperlinks, use \pkg{rotating} instead.

A word of warning has to be said. In \texttt{pdftex} reflection is implemented by redefininng
\cmd{shipout}. We add PDF literal code to the beginning of each page. For \texttt{dvips} we add
code to the \texttt{bop-hook}. If you need your own code in the \texttt{bop-hook}, you have to
store the old definition and execute it. For \texttt{xetex} we add code to \texttt{bop} and
\texttt{eop}. It seems that only one \texttt{bop} and one \texttt{eop} can be used. That is why the
page is reflected vertically if both options are used. As a result you are not allowed to use your
own \texttt{bop} and \texttt{eop} code together with these options.

\section{Crop marks}\label{cropmarks}
The crop marks must appear outside the print area. The package assumes that \cmd{paperheight} and
\cmd{paperwidth} contain the page size after trimming. These dimensions will then be increased and the page
will be shifted by setting \cmd{hoffset} and \cmd{voffset}. If you wish to print the crop marks using
\opt{zwpagelayout}, you must not change values of \cmd{hoffset} and \cmd{voffset}.

The values of \cmd{hoffset} and \cmd{voffset} will be set to the sum of \opt{croplength} and \opt{cropgap}, see the following
text.

\subsection{Basic crop marks options}
Options described in this section define basic behaviour of the crop marks. The options can be used
in all crop mark styles.

\subsubsection{Option \opt{onlycropmarks}, default \false, standard \true}
\omg{onlycropmarks}
It may happen that a document is already finished and proof-read and just the crop marks have to be added.
By specifying option \opt{onlycropmarks} you instruct the package to ignore all page layout options and
interpret the crop marks options only. You just have to ensure that \cmd{paperheight} and \cmd{paperwidth} are
set to the dimensions of the trimmed page before the \pkg{zwpagelayout} package is loaded and \cmd{hoffset} and
\cmd{voffset} are left at their default values.

\subsubsection{Option \opt{cropmarks}, default \false, standard \true}
\omg{cropmarks}
This option asks for creation of the crop marks.

\subsubsection{Option \opt{nocropmarks}, default \true, standard \true}
\omg{nocropmarks}
This is a complementary option to \opt{cropmarks}.

\subsubsection{Option \opt{croplength}, default 5\,mm}
\omg{croplength}
This option specifies the length of the crop mark.

\subsubsection{Option \opt{cropgap}, default 5\,mm}
\omg{cropgap}
This is the space that must be left blank between the crop marks and the trimmed page. This area is
also known as bleed.

\subsubsection{Option \opt{cropframe}, default \false, standard \true}\label{cropframe}
\omg{cropframe}
When designing a book cover we often wish to verify whether all elements are properly aligned.
Option \opt{cropframe} can be used to print the frames. It is active only if \opt{cropmarks} was
specified.

\subsubsection{Option \opt{nocropframe}, default \true, standard \true}
\omg{nocropframe}
This is a complementary option to \opt{cropframe}.

\subsubsection{Option \opt{cropstyle}}\label{cropstyle}
\omg{cropstyle}
This option selects the style of the crop marks. Two styles are defined, \textit{default} and
\textit{leaflet}.

\subsubsection{Option \opt{croptitle}}
\omg{croptitle}
This option defines the text that should be printed on each page. It may \eg. be the title of the
document. Remember that all spaces are gobbled when parsing the options. The spaces must therefore
be specified as \verb*;\ ; or the text must be enclosed in curly braces.

\subsubsection{Option \opt{cropseparator}}
\omg{cropseparator}
This is the separator between the title and the page number. Its default value is \verb;:\quad;.

\subsubsection{Option \opt{pagenumberfirst}, default \false, standard \true}
\omg{pagenumberfirst}
Each page contains the title followed by the separator and the page number. If you set this
option to \true, the order will be reversed.

\subsubsection{Option \opt{pagenumberlast}, default \true, standard \true}
\omg{pagenumberlast}
This is a complementary option to \opt{pagenumberfirst}.

\subsubsection{Option \opt{usepagenumbers}, default \true, standard \true}
\omg{usepagenumbers}
This option requests printing the page numbers.

\subsubsection{Option \opt{nopagenumbers}, default \false, standard \true}
\omg{nopagenumbers}
This is a complementary option to \opt{usepagenumbers}.

\iffalse
\subsubsection{Option \opt{cropfontsize}}
\omg{cropfontsize}
This option defines the font size command issued just before the title and page number are printed.
The default command is \verb;\fontsize{10}{10};.

\subsubsection{Option \opt{cropfont}}
\omg{cropfont}
This option contains the command to select a font for the title and the page number. The default
command is \cmd{normalfont}.
\fi

\subsubsection{Option \opt{nobleedclip}, default \false, standard \true}
\omg{nobleedclip}
The pages are clipped to the bleed box so that graphics does not collide with the crop marks. Since
the package must work also with \pkg{dvips}, the PDF operators are not used and the crop marks area
outside the bleed box is just overpainted with white rectangles. The \pkg{color} package is thus
required and will be loaded automatically. If you set \opt{nobleedclip} to \true, the pages will
not be clipped. It may be useful if you know that nothing extends to the crop marks area and the
\pkg{color} package may clash with other packages required by your document.

\subsection{Options for the \textit{default} style}
These options can be used if \opt{cropstyle} is set to \textit{default} or omitted.

\subsubsection{Option \opt{spine}}
\omg{spine}
This option is used for designing book covers. It specifies the width of the book spine. You can
even request a zero width but negative values will have disastrous results.

\subsubsection{Option \opt{xspine}}
\omg{xspine}
This option defines the extra space adjacent to the spine so that the book can be safely opened.
This space should not be used for printing logos etc., because they will soon be damaged by
frequent use of the book. The option is ignored unless \opt{spine} is used.

\subsubsection{Option \opt{flap}}
\omg{flap}
This is another option for book covers. It specifies the width of the flap. If \opt{spine} is
given, the book cover is supposed to have flaps of equal sizes on both sides. Sometimes you do not
have flaps and the back cover remains empty, thus you do not like to prepare the design of it, you
just wish to design the spine and the front cover. This can be acheved by specifying \opt{flap} as
the spine thickness and omitting \opt{spine}.

\subsubsection{Options \opt{trim}, \opt{xtrim}, \opt{ytrim}}
\omg{trim}\omg{xtrim}\omg{ytrim}
The paper or canvas used for printing the book covers is folded to the inner side yet part of it
will be visible. Such part is specified by \opt{xtrim} in horizontal direction and \opt{ytrim} in
vertical direction. You can use \opt{trim} to set both of them to the same value.

\subsection{Options for the \textit{leaflet} style}\label{cropstyle.leaflet}
The following options can be used if \opt{cropstyle} is defined as \textit{leaflet}. As the value
says, the style is useful for leaflet production because in addtion to the crop marks additional
marks for folding. Not all options can be used with all fold types. It will be described in greater
detail in the following text.

The leaflets are usually printed on both sides and sometimes one of the leaves needs width
correction as will be explained later. The macros will apply the correction the one side on odd
pages and on the other side on even pages. This can only happen if the \opt{twoside} class option
is given or a class is used where two-side printing is the default. Usually the leaflet will
consist of two pages only but no check is made.

The \opt{cropframe} option (see~\ref{cropframe}) can also be used for previewing the leaflet
layout.

\subsubsection{Option \opt{leafcount}, default 4}
\omg{leafcount}
This option defines the number of leaves to be used in the Z-type. It is silently ignored with
other fold types. Internally other fold types overwrite it with the value they need in the macros.

\subsubsection{Option \opt{foldcorr}, default 0mm}
\omg{foldcorr}
As default all leaves have equal width. However, from technical or stylistic reasons the letmost or
righmost leaf requires a different width. This can be achieved by this option. The value specifies
an additional horizontal skip that is applied when printing the crop/fold marks and the optional
frames.

The width of the leaves is equal because it is achieved by \cmd{hfil}. If you specify
\verb.foldcorr=-2mm., the corrected leaf will be 2\,mm narower that the others. Since there is
\textit{1fil} in the width specification of the leaves, you can achieve nice tricks be specifying
\verb.foldcorr=5cm plus -1fil.. In such a case the \textit{1fil} in the corrected leaf will vanish
and its width will be 5\,cm.

Width corrections are not allowed in the \textit{Z} and \textit{4} types and the option value is
ignored. The details of the \opt{foldcorr} will be given in the next section.

\subsubsection{Option \opt{fold}, default 2}
\omg{fold}
This option selects a fold type used with the leaflet. Supported options are \textit{2},
\textit{3left}, \textit{3right}, \textit{4}, \textit{Z}. Their exact meaning is described below.

\begin{description}
\item[2] This option is used for singly folded leaflet. Usually the leaves will have different
widths. The width of the left leaf is modified by the \opt{foldcorr} option.
\item[3left] This option defines a leaflet with three leaves folded inside. For technical reasons
the leaf folded inside must be slightly narrower. Typically this is the leftmost leaf. The leaf can
be made narrower by applying \opt{foldcorr}.
\item[3right] This is essentially the same as the previous option with the only difference that the
\opt{foldcorr} correction is applied to the rightmost leaf.
\item[Z] This option is used for Z-folded leaflets. The number of leaves is defined by the
\opt{leafcount} option and with correction is not allowed.
\item[4] This type of leaflet looks as the Z-type but without a fold in the middle. It can be
viewed as a middle leaf of double width and the outer leaves are folded so that they touch each
other. The middle crop mark is therefore missing because there is no fold there but a line will be
drawn if the \opt{cropframe} option is requested.
\end{description}

As a final remark it is important to write that the width correction is applied as explained above
on the odd pages. The correction of the same size is applied to the opposite side of the leaflet on
even pages.

\section{Color support}\label{color}
The package offers basic color support, namely it prints the names of separations. The
color support is implemented via a few options. Color printing is performed using the \pkg{color}
package that is loaded automatically. The package does not use predefined color names.

The package recognizes the \pkg{color} package by existence of the \cmd{definecolor} macro. If this
macro is not defined, the \pkg{color} package will be added if:
\begin{itemize}
\item option \opt{color} is \true
\item option \opt{nobleedclip} is \false\ and \opt{cropmarks} is \true
\item option \opt{redefineblack} is \true
\item option \opt{redefinetocmyk} is \true
\item option \opt{overprint} is \true
\end{itemize}
If none of the above applies, the color support is not needed and the package will not be loaded.

If the \pkg{color} package is being loaded, no options are given to it. Especially the driver
selected by the \opt{driver} option (see section~\ref{driver.selection}) is not set. If you must
specify any option for the \pkg{color} package, you have to load it yourself before loading
\pkg{zwpagelayout}.

\subsection{Color support for cropmarks}
\omg{color}
Option \opt{color} asks for the color support. Without setting this option to \true\ all other
color options are silently ignored.

\omg{colormodel}
Option \opt{colormodel} defines the color model used. Its default value is \texttt{cmyk}. You will
rarely need to change it.

\omg{cropcolor}
Option \opt{cropcolor} specifies the color to be used for the crop marks. Remember that the crop
marks must be visible on all separations, thus it might not be sufficient to print them in black.
As default their color is mixed of 100\,\% of all components of the current color model. Since the
default model is \texttt{cmyk}, the default value of this option is \verb;{1,1,1,1};. Notice that the
syntax conforms to the requirements of the \pkg{color} package.

\omg{colors}\label{colors}
Option \opt{colors} assigns names to the color components of the current model. Specification of
each color must be enclosed in curly brackets. The color name is followed by a colon and comma
separated values conforming to the syntax of the \pkg{color} package. It will be clear from the
following examples.

Suppose that for some strange reason you prepare the document in the RGB space. Your specification
will then be:

\vb

\begin{verbatim}
\usepackage[cropmarks,color,colormodel=rgb,cropcolor={1,1,1},
    colors={{RED:1,0,0},{GREEN:0,1,0},{BLUE:0,0,1}},
    croptitle=RGB\ example]{zwpagelayout}
\end{verbatim}

\vb

Now we show a more realistic example. The document should be printed in custom colors. Since the
true specification of custom colors requires much work and is rarely worth the trouble, we make use
of the CMYK model. We will use cyan instead of Pantone 298 (blue), magenta instead of Pantone 213
(red), black will remain black and the yellow separation will be unused. The crop marks should not
produce anything on the yellow separation and we should provide proper color names. The
specification will therefore look as:

\vb

\begin{verbatim}
\usepackage[cropmarks,color,cropcolor={1,1,0,1},
    colors={{Pantone\ 298\ (blue):1,0,0,0},
            {Pantone\ 213\ (red):0,1,0,0},{Black:0,0,0,1}},
    croptitle=Example\ with\ custom\ colors]{zwpagelayout}
\end{verbatim}

\vb

Notice that the \opt{colormodel} option was not specified. Its default value was used. The
\opt{cropcolor} option left zero for the yellow separation.

If a color is light as e.\,g. the process yellow, it may be better to display its name in white on
a colored background. This is achieved by preceding the color name with an asterisk. This is now
the default behaviour for the yellow color. The default definition is:

\vb
\begin{verbatim}
colors={{CYAN:1,0,0,0},{MAGENTA:0,1,0,0},{*YELLOW:0,0,1,0},{BLACK:0,0,0,1}}
\end{verbatim}

\vb

\subsection{CMYK colors}\label{cmykcolors}
\mg{cmykblack}\mg{cmykread}\mg{cmykgreen}\mg{cmykblue}
The \pkg{color} package defines \textit{black} using the GRAY model and colors \textit{red},
\textit{green}, \textit{blue} by the RGB model. The GRAY model rarely causes any problem but the
RGB model is not acceptable for printing. The \opt{zwpagelayout} package therefore defines the
corresponding colors using the CMYK model. Different names are selected so that there is no clash
in case you really need these colors in RGB.

\subsection{Overprinting support, default \false, standard \true}\label{overprinting}
\omg{overprint}
The overprinting support must be requested by the \opt{overprint} option. If the option remains
\false, the overprinting commands will be defined but will do nothing. Remember that you can
overprint any color, not just black. You thus should not enable overprinting globally. The mode is
therefore set to \textit{knockout} within the package.

\cmg{OverprintXeTeXExtGState}
Overprint is implemented in all supported drivers. However, there is a minor problem with the
(x)dvipdfm(x) family of drivers. The definition of the graphic state must be present in the
resources of each page where overprinting is used. The (x)dvipdfm(x) drivers do not do it
automatically, it has to be done by the \cmd{OverprintXeTeXExtGState} macro. Since the cropmarks
switch overprint off, they require the definition of the graphic state and the macro is always
invoked from the running head. This requirement is thus a minor problem. The user usually does not
care whether overprint is enabled for preview and proof-reading. The final document will have
cropmarks and thus overprint will be enabled.

\cmg{SetOverprint}\cmg{SetKnockout}
These macros change the mode to \textit{overprint} or \textit{knockout}, respectively. They act as
declarative macros, similarly as \eg. \cmd{itshape}. You have to use them within a group. The
macros are intended to be used for changing the mode for a longer part of text. Due to the way how
environments are handled in \LaTeX, it is also possible to write:

\vb
\begin{verbatim}
\begin{SetOverprint}
Some long text to be overprinted...
\end{SetOverprint}
\end{verbatim}

\vb

\cmg{textoverprint}\cmg{textknockout}
If a short part of text should be printed in a different mode, one-argument macros
\cmd{textoverprint} and \cmd{textknockout} can be used. They act similarly as the \cmd{textit}
macro.

\omg{redefineblack}
Overprinting works only if both the background and forground colors are in the CMYK model. However,
the \textit{black} color, which is most often overprinted, is defined in the GRAY model as default.
This package defines the \texttt{cmykblack} color that may be used for this purpose. In addition if
\opt{redefineblack} is set to \true, the standard \textit{black} color will be redefined in CMYK.

\omg{redefinetocmyk}
Although \textit{red}, \textit{green}, \textit{blue} will rarely be used for overprinting (maybe
just as a background), option \opt{redefinetocmyk} requests redefinition of these colors to CMYK.
The \textit{black} color will be redefined as well.

\vb
\textbf{Important note:} the (x)dvipdfm(x) drivers may switch to the gray colour model after
\cmd{textcolor} even if redefinition of black or even all colours to CMYK was requested. If black
overprint does not work, insert explicit \verb;\color{cmykblack};. This trick is not needed with
pdf\TeX\ or dvips.

\vb

\mg{grblack}\mg{rgbred}\mg{rgbgreen}\mg{rgbblue}
If the colors are redefined to CMYK, the original definitions are not available. Although you
redefine them due to a printing process where the RGB colors are undesirable, you can sometimes
need them. For this purpose \textit{grblack}, \textit{rgbred}, \textit{rgbgreen}, \textit{rgbblue}
colors are always available.

\section{PDF information}\label{pdfinfo}
The package writes the basic information that is required by PDF/X even if PDF/X conformace is not
requested. The basic pieces of information are \texttt{CreationDate} and \texttt{ModDate}.
Implementation is driver dependent and some information is supplied by the driver itself. Thus
\texttt{pdftex} inserts both, (x)dvipdfm(x) (\XeTeX) adds \texttt{CreationDate} only, dvips adds
none. The missing information is supplied by this package based on \cmd{date} and \cmd{time}. The
next subsections will explain how other fields can be defined and how they can be disabled if
needed.

\subsection{PDF title}\label{pdftitle}
\omg{title}
The \opt{title} option is used to set the title field. The default is to take the contents of the
\opt{croptitle} option even if the cropmarks are switched off. If \opt{croptitle} is empty,
\cmd{jobname} is used. If you specify this option without a value, it has a special meaning of
suppressing creation of PDF information field. Since this is not mnemonic, there is a
\opt{nopdfinfo} option with the same effect, see subsection~\ref{nopdfinfo}.

\subsection{PDF author}
\omg{author}
The \opt{author} option sets the author of the document. The field is not required by PDF/X,
therefore it has no default value.

\subsection{PDF subject}
\omg{subject}
The \opt{subject} option defines the subject of the document.

\subsection{PDF keywords}
\omg{keywords}
The \opt{keywords} option is used to set the list of keywords. Usually the keywords will be given
as a comma separated list. They must therefore be enclosed in braces.

\subsection{Option \opt{nopdfinfo}}\label{nopdfinfo}
\omg{nopdfinfo}
The above mentioned fields may also be set in the PDF file by the \pkg{hyperref} package. If
\pkg{hyperref} is used, it may not be desirable if \pkg{zwpagelayout} wrote the PDF information. If
you specify \opt{nopdfinfo} in the list of options, setting all above mentined information (including
\texttt{ModDate}) will be disabled. This option is not boolean, it just erases the contents of the
\opt{title} option, see subsection~\ref{pdftitle}. Since options are procesed in the order in which
they are declared in the package, \opt{nopdfinfo} will always erase the PDF title even if it is
specified before \opt{title}.

It has recently been found that these packages do not conflict, it is safe to specify some
pieces of information by \pkg{zwpagelayout} and other pieces of information via \pkg{hyperref}.
Anyway, this option will be preserved for the case that it might be needed in the future.

\section{PDF/X-1a compliance}\label{pdfx1a}
The package partially implements the PDF/X-1a standard. Remember that implementation is driver
dependent and not everything can be achieved with all drivers. The following sections will give you
more detail. Unlike the \pkg{pdfx} package we try to do as much in \texttt{xetex} and set the
bounding boxes according to the real page size.

\subsection{Option \opt{pdfminorversion}}
\omg{pdfminorversion}
This option allows you to set the version of the PDF file. It works with \texttt{pdftex} only. There
is no \cmd{special} for sending this information to (x)dvipdfm(x), it can only be set on the
command line. Similarly PostScript to PDF converters accept such setting from the command line or a
configuration file although there is a PS command for setting it.

\cmg{SetPDFminorversion}
The same effect can also be achieved by \cmd{SetPDFminorversion} from a preamble. The macro accepts
a single argument and is implemented for \texttt{pdftex} only. It does nothing for other drivers.

\subsection{Option \opt{pdfx}}
\omg{pdfx}
This option ask the package to create PDF/X-1a file. The first requirement is to set PDF version
to~1.3, thus it sets the minor version to~3 and then disables macro \cmd{SetPDFminorversion}. Other options
have reasonable default values but they can be changed as described in the following subsections.

PDF/X-1a compliance is not handled for \texttt{dvips} and some features are not available for
\texttt{xetex}.

\subsection{Options \opt{OutputCondition} and \opt{OutputConditionIdentifier}, default Euroscale
Coated~v2}
\omg{OutputCondition}
\omg{OutputConditionIdentifier}
These options specify the ICC profile. I am not sure how to obtain the correct names. The default
values correspond to the ICC profiles used in Europe but you can easily set another value. From my
personal experience I prefer \textit{eucmyk50} when converting my images from AdobeRGB to CMYK.

\subsection{Option \opt{ICCfile}}
\omg{ICCfile}
This option specifies the name of the file containing the ICC profile. There is no default
definition and no profile is embedded. The profiles usually accompany commercial products as
printers and scanners or can be downloaded from the web. If you have a CMYK profile that you wish
to embed, you can specify its name with the opt{ICCfile} option. The profile can only be embedded
by \texttt{pdftex}.

\subsection{Font embedding}
PDF/X requires all fonts to be embedded. The \pkg{zwpagelayout} package cannot ensure it. You have
to verify your configuration files and make sure that fonts are embedded.

\subsection{Page bounding boxes}
It is mandatory to set BleedBox and TrimBox in addittion to MediaBox. Setting these boxes
is explained in section~\ref{Bboxes}. ArtBox is explicitely forbidden by PDF/x, therefore it is not
set.

\subsection{PDF information}
Mandatory fields are title, CreationDate and ModDate. All these fields are set automatically unless
they are disabled as described in section~\ref{pdfinfo}.

\subsection{MPT metadata}
Emdedding MPT metadata is currently not implemented. It will be implemented in the future but only
for \texttt{pdftex}.

\subsection{Color}
PDF/X-1a allows only CMYK colors and spot colors. Since \pkg{zwpagelayout} does not handle colors
itself but makes use of the \pkg{color} package, it cannot verify that only allowed colors are
used.


\section{Useful macros}\label{macros}
The package offers two types of useful macros. The macros from the first group help in designing
the document. However, as mentioned in the Introduction, the package may be deployed in already
existing document just for adding the crop marks. In order to reduce the risk of conflicts with
other packages these macros are unavailable if the \opt{onlycropmarks} option is used. The second
group contains macros that are primarily used in the crop mark generation. They are always visible.

\subsection{Userspace macros}\label{user.macros}
As written above, macros of this group are available only if the \opt{onlycropmarks} option was not
used. It is not planned to make any interface for providing them even with the \opt{onlycropmarks}
option. If the document is already finished, you do not need them. If you write a new document, it
is preferable to use the whole package for defining the page layout. The macros will than be
available.

\cmg{topskip}
\cmg{Vcorr}
\TeX\ should use integer arithmetic but some implementations, \eg. em\TeX, violate this rule. This
makes processing the text faster but may have bad results. If you combine text with boxes and fixed
size glues the height of which is an integer multiple of \cmd{baselineskip}, the round-off errors
may add a few scaled points, the page overflows and as a result is made one line shorter and
underfull vbox is reported. For this reason tiny shrink is added to \cmd{topskip}, its
size is \the\topskip. Yet it may not be sufficient in some cases. We therefore provide vertical
skip macro \cmd{Vcorr} the size of which is shrinkable zero. The meaning of \cmd{Vcorr} is {\tt
\meaning\Vcorr}.

\cmg{vb}
We often need a vertical skip the size of which is a multiple of \cmd{baselineskip}. Macro \cmd{vb}
serves this very purpose. It accepts an optional argument in square brackets which denotes the
multiple of \cmd{baselineskip}. The default value is~1. The command also contains compensation
shrinkage. Some packages activate several characters, even those which could be used in numerical
and dimension specifications. Hyphens and dots are temporarily deactivated within the optional
argument of the \cmd{vb} macro. You thus can comfortably specify negative as well as fractional
dimensions.

\cmg{NewOddPage}
\LaTeX\ provides \cmd{cleardoublepage} for moving the next text to the beginning of the odd page.
However, you have no control over the page style of the inserted empty even page. This feature is
enabled in the \cmd{NewOddPage} macro. Its syntax is:

\vb
\verb;\NewOddPage*[;$\langle$style$\rangle$\verb;];

\vb\noindent
Optional parameter $\langle$style$\rangle$ defines the style of the empty even page that should be
fed to the \cmd{thispagestyle} command. The default is \texttt{empty}. The starred version displays
a warning in the log file if an empty page was inserted.

\cmg{SetOddPageMessage}
This macro sets the contents of the message that should be displayed as a warning if an empty page
was inserted as a result of \cmd{NewOddPage*}. The macro acts as \cmd{gdef}. This means that the
definition is global and you can therefore have only one message unless you redefine it. The body
of the message may contain macros. They will be expanded when the message is being written. You can
use \cmd{MessageBreak} in order to split the text into several lines.

\cmg{NewEvenPage}
Generally speaking, you should not start a chapter on an even page but there are cases when it is
desirable. Imagine the situation when each chapter starts with a full page illustration on the left
and with its title page on the right. In such cases you need to start at the even page but \LaTeX\
does not contain any direct tool for doing it. This package provides the \cmd{NewEvenPage} with the
same syntax as \cmd{NewOddPage}.

\cmg{SetEvenPageMessage}
Similarly this macro serves for setting the message text that appears if an empty page was inserted
as a result of the \cmd{NewEvenPage*} macro.

\subsection{Crop mark macros}\label{crop.macros}
\cmg{clap}
\TeX\ offers zero-width horizontal boxes with contents overlapping to the right (\cmd{rlap}) or to
the left (\cmd{llap}). The \pkg{zwpagelayout} package frequently needs a zero-width box with the
contents centered overlapping evenly to both sides. The package thus provides macro \cmd{clap} and
makes it available for the user.

\cmg{CropFlap}
\cmg{CropSpine}
\cmg{CropXSpine}
\cmg{CropXtrim}
\cmg{CropYtrim}
\cmg{UserWidth}
\cmg{UserLeftMargin}
\cmg{UserRightMargin}
It was written in the Introduction that the package allows to prepare the book cover before the
exact dimensions are known. Later we just adapt the values of the package options and everything is
recalculated automatically. As a matter of fact, it could not happen if we did not refer to
selected dimensions in the document symbolically. Thus the values of some options are available in
macros: \cmd{CropFlap}\is\opt{flap}, \cmd{CropSpine}\is\opt{spine}, \cmd{CropXSpine}\is\opt{spine},
\cmd{CropXtrim}\is\opt{xtrim}, \cmd{CropYtrim}\is\opt{ytrim},
\cmd{UserWidth}\is\opt{textwidth}, \cmd{UserLeftMargin}\is\opt{leftmargin},
\cmd{UserRightMargin}\is\opt{rightmargin}.

The use of these macros can be shown by an example. The book cover with flaps displayed in
Figure~\ref{cover} was prepared by the following code:

\vb
\verbatiminput{coversample}

\begin{sidewaysfigure}[p]
\centerline{\includegraphics{coversample}}

\caption{Sample of a book cover with flaps}\label{cover}
\end{sidewaysfigure}

Remember that these macros contain only the dimensions that were specified in the \cmd{usepackage}
command, not those that were calculated by the algorithm described in section~\ref{calc.pg.layout}.
If a shortcut option was used, all real dimensions are defined, \ie. the \opt{margins} option fills
all four margin options, \opt{topmargin}, \opt{leftmargin}, \opt{rightmargin}, \opt{botmargin}, and
the \opt{trim} option fills both \opt{xtrim} and \opt{ytrim}. You can take advantage of it to make
your document more general. You can \eg. define the book cover in two variants, with or without
flaps, using this trick:

\vb
\begin{verbatim}
\ifcat$\CropFlap$
  % no flaps
\else
  \vbox to \textheight{\hsize\CropFlap
    Flap text
  }\hss
\fi
\end{verbatim}

\vb

\cmg{thePageNumber}
Macro \cmd{thePageNumber} is used to print the page number together with the crop mark text. We have
already shownd that it may be suppressed by the \opt{nopagenumbers} option. Another possibility is
to redefine it. We can \eg. define the book title with the \opt{croptitle} option and use the
text ``Cover'' instead of the page number when typesetting the cover. Usage of this macro is also
demonstrated in Figure~\ref{cover}.

\subsection{Driver switching macros}\label{driver.switching}
These macros provides conditional branching according to the currently selected driver no matter
whether it is chosen automatically or by specifying the \opt{driver} option described in
section~\ref{driver.selection}. The macros do not change page layout, they are therefore available
even if the \opt{onlycropmarks} option was given.

\cmg{ifcaseZWdriver}
Macro \cmd{ifcaseZWdriver} expands to an open \cmd{ifcase} primitive. You can thus branch the code
according to the driver. The numeric values are 0 for \texttt{unknown}, 1 for \texttt{pdftex}, 2
for \texttt{xetex}, 3 for \texttt{dvips}. The branching may look as follows:

\vb
\begin{verbatim}
\ifcaseZWdriver
  Code for unknown
\or
  Code for pdftex
\or
  Code for xetex
\or
  Code for dvips
\else
  Error, it may not happen!
\fi
\end{verbatim}

\vb
Since \cmd{ifcaseZWdriver} is a macro, it cannot be used inside another conditional statement. If
it falls to the \false\ branch, it will not be expanded and \TeX\ will complain that it sees
misplaced \cmd{else} etc. You would have to enter all corresponding contidional as \cmd{csname}
constructions or define the condition in a separate macro that will be invoked from the condition.

\textbf{Important note:} It is not guaranteed that the numerical assignment will be kept unchanched
in future versions.

\cmg{ZWifdriver}
The \cmd{ZWifdriver} allows conditional execution of a code for a specified driver. It requires two
parameters. The first parameter is the driver name, the second parameter is the code to be
executed. The macro recognizes all driver names and aliases as given in
section~\ref{driver.selection}. It can be used \eg. in cases when you have to perform some action
for a specific driver only. Suppose that you do not want to set the page bounding boxes
(see~\ref{Bboxes}) if \texttt{dvips} is used but want to set them if the same document is
processed by any other driver. You can thus put the following command to the preamble of the
document:

\vb \noindent
\verb.\ZWifdriver{dvips}{\noBboxes}.

\vb
\textbf{Note:} This macro does not depend on the numerical assignment given above. It will
therefore work the same way in the future versions.

\section{Customizing crop styles}
This section is intended for real \TeX perts. The package tries to provide a lot of options that
enable to customize the default crop style. Try to live with them because here you are touching the
very guts of the package. If you squeeze them badly, your document will suffer from strange
problems the source of which will be difficult to trace. However, if you like tough challenges and
your stomach is strong enough, then read on, but remember, you have been warned.

You ask for a different crop style by the \opt{cropstyle} option as described in
section~\ref{cropstyle} on page~\pageref{cropstyle}. Assume that you load the package with:

\vb
\begin{verbatim}
\usepackage[cropmarks,cropstyle=special,...]{zwpagelayout}
\end{verbatim}

\cmg{cropstyle@special}
You will then have to define macro \cmd{cropstyle@special}. The package first patches the footer in
all page styles. A zero-width, zero-height, zero-depth box is added to the beginning of the footer.
The actual point is set to the lower left corner of the paper as defined by \cmd{paperheight} and
\cmd{paperwidth}. If \opt{nobleedclip} was not used, the area outside the bleed box is erased. The
current color is set according to \opt{cropcolor} option and the font is selected. Afterwards the
\cmd{cropstyle@special} macro is called.

Some crop styles may require initialization. If it is the case of your style, you have to define
macro \cmd{cropstyle@special@setup}. This macro will be executed in the \cmd{AtBeginDocument} hook.
Execution of the macro in that hook allows you to defin the crop style in a package that may be
loaded after \pkg{zwpagelayout}.
It is not an error if the setup macro does not exist.

As already noted, the intention is to discourage users from writing their own crop styles. We will
therefore only mention that the package defines a few useful macros that can be used in the crop
style definition. If your temptation to design your own crop style is really strong, you should
better study the package internals yourself.

\section{Summary of driver specific features}
The driver specific features are described throughout the manual but it may not be clear from the
option or macro description that it is driver dependent. These features with the reference to the
section, where it is described, are written below. All these features are disabled if an
\texttt{unknown} driver is being used (section~\ref{driver.selection}).
\begin{itemize}
\item Page bounding boxes, section~\ref{Bboxes}
\item Page reflection, section~\ref{reflection}
\item Overprinting, section~\ref{overprinting}
\item Setting PDF information, section~\ref{pdfinfo}
\item PDF/X-1a compliance, section~\ref{pdfx1a}
\end{itemize}
Color support is, of course, driver dependent too. However, the \pkg{zwpagelayout} has no
pretention to deal with it. It is fully handled within the \pkg{color} package.

\section{Known bugs and unimplemented features}
This section describes features that are known not to work in all case or those that do not work with
all drivers.

\subsection{Driver repertoire}
Only a few most frequent drivers are automatically detected and supported. Their list is presented
in section~\ref{driver.selection}. If you use another driver, you should probably disable all
driver specific features.

\subsection{Shifted cropmarks when the running foot overflows}
If there is not enough space for the running foot, the cropmarks will most likely be shifted. It
usually happens if you set option \opt{footskip} to zero (which is its default value) and forget to
use \verb.\pagestyle{empty}..

\subsection{Page boxes and Adobe Distiller}
Setting page boxes causes a fatal error in Adobe Distiller (verified with versions 4 and~9). See
section~\ref{Bboxes}.

\subsection{Page reflection}
Option \opt{ReflectVertically} seems to produce slightly shifted output. If any of these options is
used in \XeTeX\ or more specifically with (x)dvipdfm(x) drivers, other \texttt{bop} or \texttt{eop}
code must not be used. See section~\ref{reflection} for details on its implementation.

\subsection{Overprinting}
Overprinting works in (x)dvipdfm(x) drivers but may be cumbersome in some situations. More details
are given in section~\ref{overprinting}.

It was also found that overprinting does not work if the PostScript file is converted to PDF by
GhostScript version~7.x. This is a bug in GhostScript, overprinting works fine if
GhostScript~8.x is used.

The effect of oveprinting was tested in Adobe Acrobat~9 Pro in MS~Windows~XP Home Service Pack~3.

\subsection{Inconsistent dates}
Values of \texttt{CreationDate} and \texttt{ModDate} (see section~\ref{pdfinfo}) supplied by the driver contain information on
the time zone. Unfortunatelly, time zone setting is not available in \TeX. If both fields come from
the same origin, they are set consistently. If one of them is set by the driver and the other by
the \pkg{zwpagelayout} package, then only the field set by he driver will contain the time zone
value. Depending on your time zone it may look as if the document were modified before it was
created.

\subsection{PDF/X conformance}
The PDF/X conformance is only partial. The details are given in section~\ref{pdfx1a} and its
subsections.

\section{Changes}
This section summarizes the changes. The version and the package date is given. It may be useful to
specify the date in the \cmd{usepackage} or \cmd{RequirePackage} command if you rely on a specific
feature not available in the old version of the package.

\subsection{Version 1.4e, 2022/04/18}
Bug fix, a typo in a macro name.

\subsection{Version 1.4d, 2020/02/07}
\begin{itemize}
\item Bug fix, packages \pkg{ifpdf} and \pkg{ifxetex} replaced with \pkg{iftex}.
\item Bug fix, identification of PDF/X-1a corrected.
\item Feature request, luatex85 loaded in order to support Lua\LaTeX\ compatibility.
\item Modification, distribution file flattened as required by CTAN, see
section~\ref{installation}.
\end{itemize}

\subsection{Version 1.4c, 2013/01/13}
Bug fix, the PDF boxes are properly set even in the (x)dvipdfm(x) family of drivers, i.\,e.\@ in
\XeLaTeX.

\subsection{Version 1.4b, 2012/10/04}
New feature, the color name in the cropmarks can be displayed in white on a colored background, see
page~\pageref{color}.

\subsection{Version 1.4a, 2012/05/20}
Bug fix, if a user requested unexistent page style, the cropmark mechanism looped forever until all
main memory was exhausted. Now the package issues an error message and uses the ``empty'' page
style.

\subsection{Version 1.4, 2012/05/13}
Black overprint is implemented for the (x)dvipdfm(x) family of drivers. It means that it now works
in \XeLaTeX, see section~\ref{overprinting}.

\subsection{Version 1.3a, 2012/01/10}
\begin{itemize}
\item Bug fix, code rearrangement in order to prevent an error message if \opt{onlycropmarks} is
used. It leads to the following changes in the functionality:
\begin{enumerate}
\item Page size is always set in the driver specific way. It is still assumed that
\cmd{paperheight} and \cmd{paperwidth} contained correct values before the package was loaded.
\item Bounding boxes are set unless they are explicitly suppressed.
\item PDF options are honoured. It is therefore possible to request PDF/X compliance, set the PDF
title and other information. If you do not wish it, you have to suppress it explicitely by
\opt{nopdfinfo}.
\end{enumerate}
\end{itemize}

\subsection{Version 1.3, 2011/11/22}
\begin{itemize}
\item Bug fix, weird errors appeared if the \pkg{ifxetex} package was loaded previously either
directly or indirectly. Loading of both \pkg{ifpdf} and \pkg{ifxetex} packages written in a different way.
\item Bug fix, pagestyle patching redesigned (r.~409); in the previous versions the crop marks may
disapear if \cmd{pagestyle} was issued again, mainly when the \pkg{fancyhdr} package was used.
\item New feature, when defining a page style, a part of another style may now be inherited. The
following code now can be used:
\begin{verbatim}
\def\ps@mypagestyle{\ps@plain
    \def\@oddhead{\hfill My running head}\let\@evenhead\@oddhead}
\pagestyle{mypagestyle}
\end{verbatim}
\item Bug fix: \cmd{globaldefs} is set to zero for printing crop marks. If it were nonzero,
crop marks will not work and will spoil the document. \LaTeX\ users probably do not know this
primitive but who knows\,\ldots
\item Bug fix: without the \opt{twoside} class option and with asymetric margins the crop marks were
printed on wrong positions on the even pages.
\item New feature: crop marks style for leaflets added (section~\ref{cropstyle.leaflet}).
\end{itemize}

\subsection{Version 1.2, 2011/09/04}
\begin{itemize}
\item Bug fix, \cmd{fi} was missing in the definition of \cmd{ZWifdriver}.
\end{itemize}

\subsection{Version 1.1, 2010/12/21}
Two bugs were fixed and a few new features were introduced. Documentation is modified and extended as
well.
\begin{itemize}
\item Bug fix, if \cmd{pagestyle} or \cmd{thispagestyle} was issued within a group while crop marks
were active, the package often failed into an endless loop which resulted in exhausting the memory.
\item Bug fix, the code for page reflection for \texttt{dvips} did not preserve properly the old
\texttt{bop-hook}.
\item New feature, the driver can be explicitly selected (section~\ref{driver.selection}) and the
code can be branched according to the driver (section~\ref{driver.switching}).
\item New feature, page reflection implemented for (x)dvipdfm(x) drivers, \ie. for \XeTeX\
(section~\ref{reflection}).
\item New feature, CMYK and RGB colors explicitly defined (section~\ref{color}).
\item New feature, colors may be redefined to use the CMYK model (section~\ref{color}).
\item New feature, overprinting implemented for \texttt{pdftex} and \texttt{dvips}
(section~\ref{overprinting}).
\item New feature, PDF information can be set without the need of loading the \pkg{hyperref}
package (section~\ref{pdfinfo}).
\item New feature, partial PDF/X-1a compliance (section~\ref{pdfx1a}).
\end{itemize}

\subsection{Version 1.0a, 2008/12/26}
The sample files distributed with the package no longer require enc\TeX\ and private macro
packages.

\section{License}
The package can be used and distributed according to the \LaTeX\ Project Public License version~1.3 or later the
text of which can be found at the \texttt{License.txt} file or at
\url{http://www.latex-project.org/lppl.txt}

\section{Trade marks}
This document makes use of trade marks owned by Adobe Systems Incorporated and Microsoft
Corporation when refering to their products.

\end{document}
