%%
%% This is file `zref-example.tex',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% zref.dtx  (with options: `example')
%% 
%% This is a generated file.
%% 
%% Copyright (C) 2006-2009 by Heiko Oberdiek <oberdiek@uni-freiburg.de>
%% 
%% 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".
%% 
%% This Current Maintainer of this work is Heiko Oberdiek.
%% 
%% This work consists of the main source file zref.dtx
%% and the derived files
%%    zref.sty, zref.pdf, zref.ins, zref.drv, zref-base.sty,
%%    zref-abspage.sty, zref-counter.sty, zref-dotfill.sty,
%%    zref-hyperref.sty, zref-lastpage.sty, zref-perpage.sty,
%%    zref-runs.sty, zref-savepos.sty, zref-titleref.sty,
%%    zref-totpages.sty, zref-user.sty, zref-xr.sty,
%%    zref-example.tex, zref-example-lastpage.tex, zref-test1.tex,
%%    zref-test-runs.tex.
%% 
\documentclass{book}

\usepackage[ngerman]{babel}%

\usepackage[savepos,totpages,titleref,dotfill,counter,user]{zref}

\makeatletter
\zref@newprop{chaptitle}{}
\zref@addprop{main}{chaptitle}

\newcommand*{\ChapterStart}[2]{%
  \cleardoublepage
  \def\current@chapid{#1}%
  \zref@setcurrent{chaptitle}{#2}%
  \chapter{#2}%
  \zlabel{chap:#1}%
}
\newcommand*{\ChapterStop}{%
  \cleardoublepage
  \zref@wrapper@immediate{%
    \zref@labelbyprops{chapend:\current@chapid}{abspage}%
  }%
}
\newcommand*{\ChapterPages}[1]{%
  \zrefused{chap:#1}%
  \zrefused{chapend:#1}%
  \number\numexpr
    \zref@extract{chapend:#1}{abspage}%
    -\zref@extract{chap:#1}{abspage}%
    +1\relax
}
\makeatother
\begin{document}
\makeatletter

\frontmatter
\zlabel{documentstart}

\begin{itemize}
\item
  The frontmatter part has
  \number\numexpr\zref@extract{chap:first}{abspage}-1\relax~pages.
\item
  Chapter \zref{chap:first} has \ChapterPages{first} page(s).
\item
  Section \zref{hello} is on the
  \ifcase\numexpr
    \zref@extractdefault{hello}{page}{0}%
    -\zref@extractdefault{chap:first}{page}{0}%
    +1\relax
    ??\or first\or second\or third\or forth\fi
  ~page inside its chapter.
\item
  The document has
  \zref[abspage]{LastPage} pages.
  This number is \ifodd\ztotpages odd\else even\fi.
\item
  The last page is labeled with \zpageref{LastPage}.
\item
  The title of chapter \zref{chap:next} is ``\zref[chaptitle]{chap:next}''.
\end{itemize}

\tableofcontents

\mainmatter
\ChapterStart{first}{First chapter}

\section{Test}
\zlabel{a"o}
Section \zref{a"o} on page
\zref@wrapper@babel\zref@extract{a"o}{page}.

Text.
\newpage

\section{Hello World}
\zlabel{hello}

\ChapterStop

\ChapterStart{next}{Next chapter with \emph{umlauts}: "a"o"u"s}

The width of the first column is
  \the\dimexpr \zposx{secondcol}sp - \zposx{firstcol}sp\relax,\\
the height difference of the two baselines is
  \the\dimexpr \zposy{firstcol}sp - \zposy{secondline}sp\relax:\\
\begin{tabular}{ll}
  \zsavepos{firstcol}Hello&\zsavepos{secondcol}World\\
  \zsavepos{secondline}Second line&foobar\\
\end{tabular}

\zrefused{firstcol}
\zrefused{secondcol}
\zrefused{secondline}

\ChapterStop
\ChapterStart{dotfill}{Test for dotfill feature}
\newcommand*{\dftest}[1]{%
  #1&
  [\makebox[{#1}]{\dotfill}]&
  [\makebox[{#1}]{\zdotfill}]\\
}
\begin{tabular}{rll}
& [\verb|\dotfill|] & [\verb|\zdotfill|]\\
\dftest{0.43em}
\dftest{0.44em}
\dftest{0.45em}
\dftest{0.87em}
\dftest{0.88em}
\dftest{0.89em}
\dftest{1.31em}
\dftest{1.32em}
\dftest{1.33em}
\end{tabular}
\ChapterStop
\end{document}
\endinput
%%
%% End of file `zref-example.tex'.
