3

\myTileWallPaper is defined in the classfile like this

\makeatletter
\newcommand{\myTileWallPaper}[4]{%
\begingroup
\setlength{\tileYoffset}{\wpYoffset}
\setlength{\tilewidth}{#1}%
\setlength{\tileheight}{#2}%
\setlength{\tileY}{0pt}%
\whiledo{\lengthtest{\tileY < \paperheight}}{% 
  \setlength{\tileX}{0pt}%
  \setlength{\tileXoffset}{\wpXoffset}%
  \whiledo{\lengthtest{\tileX < \paperwidth}}{% 
    \put(\LenToUnit{\tileXoffset},\LenToUnit{\tileYoffset}){%
      \includegraphics[height=\tileheight,width=\tilewidth]{#3}}%
    \addtolength{\tileX}{\tilewidth}
    \addtolength{\tileXoffset}{\tilewidth}
  }%
  \addtolength{\tileY}{\tileheight}
  \addtolength{\tileYoffset}{\tileheight}
}%
\endgroup
}
\makeatother

When I use two \AddToShipoutPictures, LaTeX throws an error.

\AddToShipoutPicture{%
\ifthenelse{\isodd{\thepage}}% Wenn ungerade Seitenzahl, dann Bild 1, sonst Bild 2.
    {\myTileWallPaper{\paperwidth}{\paperheight}{wallpaper1}}% ungerade Seite
    {\myTileWallPaper{\paperwidth}{\paperheight}{wallpaper2}}% gerade Seite
}
    \AddToShipoutPicture{\setlength{\unitlength{0.1mm}}\put(500,2522){\includegraphics[width=1.5cm]{Logoimg}}}

The error is as follows :

! Missing number, treated as zero.
<to be read again>
{
l.73 \end{document}
A number should have been here; I inserted `0'.
(If you can't figure out why I needed to see a number,
look up `weird error' in the index to The TeXbook.)

If I remove the 2nd \AddToShipoutPicture, everything seems to work fine. If I remove the 2nd \AddToShipoutPicture and put it ahead of the first one, everything seems to work fine -- although it doesn't work since the wall-paper then covers the logo.

1

The following tiling isn't exactly correct, but it is precisely what you would have had if your code compiled. Use, eg, xwatermark package instead.

\usepackage{graphicx}
\usepackage{catoptions}
\usepackage{eso-pic}

\makeatletter
\cptnewdimens{tileXoffset,tileYoffset,wpXoffset,wpYoffset,
  tilewidth,tileheight,tileX,tileY}
\wpXoffset.25cm\wpYoffset.25cm
\robust@def*\myTileWallPaper#1#2#3{%
  \begingroup
  \tileYoffset\wpYoffset
  \tilewidth=\dimexpr#1\relax
  \tileheight=\dimexpr#2\relax
  \tileY=0pt
  \cptwhiledim\tileY<\paperheight\do{%
    \tileX=0pt \tileXoffset\wpXoffset
    \cptwhiledim\tileX<\paperwidth\do{%
      \put(\LenToUnit{\tileXoffset},\LenToUnit{\tileYoffset}){%
        \includegraphics[height=\tileheight,width=\tilewidth]{#3}%
      }%
      \addtolength{\tileX}{\tilewidth}%
      \addtolength{\tileXoffset}{\tilewidth}%
    }%
    \addtolength{\tileY}{\tileheight}%
    \addtolength{\tileYoffset}{\tileheight}%
  }%
  \endgroup
}
\makeatother

\begin{document}
\AddToShipoutPicture{%
  \ifnumoddTF\thepage
    {\myTileWallPaper{.25\paperwidth}{.25\paperheight}{diag1.eps}}%
    {\myTileWallPaper{.25\paperwidth}{.25\paperheight}{diag2.eps}}%
}

Here is the correct solution. Now you use keys in place of parameters.

\documentclass{article}
\usepackage{atbegshi,picture,graphicx,ifpdf}
\usepackage{pathkeys}
\makeatletter
\pathkeys{wallpaper/asif/define*(cmd):
  viewport/00 00 100 100;
  xtilenr/2;
  ytilenr/2;
  wpxoffset/0pt;
  wpyoffset/0pt;
  inputpath//;
}
\newcommand*\mytilewallpaper[2][]{%
  \begingroup
  \pathkeys@currentpath{wallpaper/asif}%
  \pathkeys{set:#1}%
  \pathkeys@useshortcmds
  \edef\ffileext{\ifpdf pdf\else eps\fi}%
  \edef\reserved@a{\pkv{inputpath}}%
  \edef\reserved@a{\expandafter\ltxkeys@stripallouterbraces
    \expandafter{\reserved@a}}%
  \edef\Ginput@path{\ifcsnullTF\reserved@a{}{{\reserved@a/}}}%
  \cptdimdef\tilewidth{(\paperwidth-\pkv{wpxoffset}*2)/\pkv{xtilenr}}%
  \cptdimdef\tileheight{(\paperheight-\pkv{wpyoffset}*2)/\pkv{ytilenr}}%
  \cptdimdef\tileY{-\paperheight+\pkv{wpyoffset}}%
  \@tempcntb\z@
  \cptwhilenum\@tempcntb<\pkv{ytilenr}\do{%
    \edef\tileX{\pkv{wpxoffset}}%
    \@tempcnta\z@
    \cptwhilenum\@tempcnta<\pkv{xtilenr}\do{%
      \leavevmode\@killglue
      \cptexpanded{\noexpand\put(\tileX,\tileY){\noexpand\includegraphics
      [viewport=\pkv{viewport},height=\tileheight,
      width=\tilewidth,clip]{#2.\ffileext}}}%
      \advance\@tempcnta\@ne
      \cptdimadd\tileX{\tilewidth}%
    }%
    \advance\@tempcntb\@ne
    \cptdimadd\tileY{\tileheight}%
  }%
  \endgroup
}
\makeatother

\begin{document}
\def\wpspec{[viewport=20 21 590 400,xtilenr=4,ytilenr=4,
  wpxoffset=2cm,wpyoffset=2cm,inputpath={./graphics}]{comet1}}
\AtBeginShipout{%
  \AtBeginShipoutUpperLeft{%
  \ifnumoddTF\thepage
    {}%
    {\expandafter\mytilewallpaper\wpspec}%
}}
x
\newpage
x
\end{document} 

enter image description here

  • Thanks Musa for your efforts and patience. I had problems compiling the first code. I am jus checking the 2nd code. Coming back to my initial issue.. I didn't have problem with the wallpaper part of my code -- it was only when i added the 2nd AddToShipoutPicture for providing the logo at the left hand corner of the page, did i run into all the issues. \newline I actually am looking to learn tex/Latex a bit more indepth, not just having a solution , so I was curious about why Latex threw an error message . \newline I would anyway go ahead and test the new. Thanks once again for your patience. – Asif Dec 2 '11 at 1:58
  • The code doesn't compile at --> \pathkeys{wallpaper/asif/define*: .. The error is Package ltxkeys Error : The above keys are undefined and couldn't be set. – Asif Dec 2 '11 at 2:04
  • @Asif: Everything works fine at my end. Please update your ltxkeys package from CTAN. – Ahmed Musa Dec 2 '11 at 3:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.