summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/xwatermark/tex/xwatermark.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/xwatermark/tex/xwatermark.sty')
-rw-r--r--macros/latex/contrib/xwatermark/tex/xwatermark.sty2474
1 files changed, 2474 insertions, 0 deletions
diff --git a/macros/latex/contrib/xwatermark/tex/xwatermark.sty b/macros/latex/contrib/xwatermark/tex/xwatermark.sty
new file mode 100644
index 0000000000..9ead5f270e
--- /dev/null
+++ b/macros/latex/contrib/xwatermark/tex/xwatermark.sty
@@ -0,0 +1,2474 @@
+%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%
+% This is file 'xwatermark.sty', version 1.5.2d, October 23, 2012. %
+% %
+% This package puts user-specified watermarks (graphics and arbitrary %
+% texts) on select pages of documents. See package documentation %
+% for further details. %
+% %
+% This work (ie, all the files in the xwatermark manifest) may be %
+% distributed and/or modified under the conditions of the LaTeX %
+% Project Public License, either version 1.3 of this license or 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. %
+% %
+% The LPPL maintenance status of this software is 'author-maintained'. %
+% %
+% This software is provided 'as it is', without warranty of any kind, %
+% either expressed or implied, including, but not limited to, the %
+% implied warranties of merchantability and fitness for a particular %
+% purpose. %
+% %
+% Copyright (c) 2009-2012 Ahmed Musa (amusa22@gmail.com). %
+%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%
+
+\@ifpackageloaded{catoptions}{%
+ \@ifpackagelater{catoptions}{2012/10/14}{}{%
+ \@latex@error{Loaded version of 'catoptions' package is
+ not current}\@ehd
+ }%
+}{%
+ \RequirePackage{catoptions}[2012/10/14]%
+}
+\UseNormalCatcodes
+\StyleFilePurpose{A dynamic watermarking scheme}
+\StyleFileRCSInfo
+$Id: xwatermark.sty,v 1.5.2d 2012/10/23 09:00:00 Ahmed Musa Exp $
+\ProvidesPackage{xwatermark}[\StyleFileInfo]
+\NeedsTeXFormat{LaTeX2e}[2011/06/27]
+\SetStyleFileMessages[xwm@]{info}{warn}{err}
+\robust@def*\xwm@@err#1#2#3{\xwm@err{#1}{#2}\@gobble}
+\cptloadpackages{%
+ fix-cm||2006/03/24;
+ picture||2008/11/26;
+ graphicx||1999/02/16;
+ atbegshi||2008/07/31;
+ fancyhdr;
+ atveryend||2010/03/24;
+ ltxkeys;
+ framed||2007/10/04
+}
+\AtEndOfPackage{\BeforeStartOfDocument{%
+ \ifcsndefTF{ver@hyperref.sty}{}{\usepackage{hyperref}}%
+}}
+
+\newletcs\xwm@nil\relax
+\new@def*\xwm@nnil{\xwm@nil}
+\AtBeginShipoutInit
+\cptnewvariables{box}[xwm@box]{a,b}\relax
+\cptnewvariables{count}[xwm@]{cnta}[\z@pt]
+\cptnewvariables{if}[xwm@]{pdf,swa,swb,foregrd,wall,putmark}[false]
+\newletcs\xwm@catch@nil\relax
+\new@def*\xwm@catchtonil#1\xwm@catch@nil{\def\stuff{#1}}
+\xwm@putmarktrue
+\cptnewvariables{write}[xwm@]{wrt}\relax
+\robust@def*\AtShipoutAlwaysUpperLeft#1{%
+ \AtBeginShipout{\AtBeginShipoutUpperLeft{#1}}%
+}
+\robust@def*\xwm@secstopagerange#1{%
+ % To do: what of if a chapter, instead of another section,
+ % comes after section.
+ \begingroup
+ \ifblankTF{#1}{}{%
+ \def\@do##1##2,##3\@nil##4{%
+ \ifstrcmpTF\do{##1}{}{%
+ \csn@xdef{xwm@sec@page@end@\detokenize{##4}}{##2}%
+ \do{##1}{##2},##3\@nil
+ }%
+ }%
+ \def\do##1##2,##3\@nil{%
+ \ifstrcmpTF\do{##1}{}{%
+ \csn@xdef{xwm@sec@page@start@\detokenize{##1}}{##2}%
+ \@do##3\@nil{##1}%
+ }%
+ }%
+ \do#1,\do\do,\@nil
+ }%
+ \endgroup
+}
+\new@def*\xwm@seclist{}
+\AtEndDocument{%
+ \immediate\write\@auxout{%
+ \string\xwm@secstopagerange{%
+ \xwm@seclist\ifx\xwm@seclist\@empty\else,\fi
+ {10000}{\lastdocpage}%
+ }%
+ }%
+}
+\robust@def*\xwm@recordsecno{%
+ \xdef\xwm@seclist{%
+ \xwm@seclist\ifx\xwm@seclist\@empty\else,\fi
+ {\thesection}{\thepage}%
+ }%
+}
+\edef\reserved@a{%
+ % To do: do the same for chapter.
+ \def\noexpand\@seccntformat##1{%
+ \unexpanded\expandafter{\@seccntformat{#1}}%
+ \unexpanded{\protect\xwm@recordsecno}%
+ }%
+}
+\reserved@a
+\new@def*\xwm@boxframestack{}
+\robust@def*\xwm@pushboxframe{%
+ \xdef\xwm@boxframestack{%
+ \fboxrule=\the\fboxrule\relax
+ \fboxsep=\the\fboxsep\relax
+ \xwm@nil{\expandcsonce\xwm@boxframestack}%
+ }%
+}
+\robust@def*\xwm@popboxframe{%
+ \begingroup
+ \def\reserved@a##1\xwm@nil{\endgroup
+ ##1\gdef\xwm@boxframestack
+ }%
+ \expandafter\reserved@a\xwm@boxframestack
+}
+\robust@def\xwm@stripallouterbraces#1#2{%
+ \edef#2{\unexpanded\cptthreexp{\xwm@str@pallouterbraces#1\strip@nil}}%
+}
+\robust@def\xwm@str@pallouterbraces#1\strip@nil{%
+ \romannumeral\ifbracedTF{#1}{%
+ \expandafter\ifnullTF\expandafter{\@gobble#1}{%
+ \expandafter\@gobble\xwm@str@pallouterbraces#1\strip@nil
+ }{0 #1}%
+ }{0 #1}%
+}
+\robust@def\xwm@stripallouterbracesincs#1{%
+ \expandafter\xwm@stripallouterbraces\expandafter{#1}#1%
+}
+\new@def*\xwmremoveleadparsers#1#2{%
+ \s@expandarg\ifbracedTF{#2}{%
+ \unexpanded\expandafter{#2}%
+ }{%
+ \unexpanded\expandafter{\romannumeral
+ \expandafter\xwm@removeleadparsers#2\noboundary{#1}}%
+ }%
+}
+\new@def*\xwm@removeleadparsers#1#2\noboundary#3{%
+ \ifcondTF\if\string#1\string#3\fi{%
+ \xwm@removeleadparsers#2\noboundary{#3}%
+ }{%
+ 0 #1#2%
+ }%
+}
+\robust@def*\xwm@ifxcolorloaded{%
+ \ifcsndefTF{ver@xcolor.sty}\@iden{%
+ \xwm@err{'xcolor' package not loaded}\@ehd
+ }%
+}
+\robust@def*\xwmdefinecolor{%
+ \xwm@ifxcolorloaded{%
+ \let\reserved@e\definecolor
+ \cpt@testopt\xwm@definecolor{}%
+ }%
+}
+\robust@def*\xwmcolorlet{%
+ \xwm@ifxcolorloaded{%
+ \let\reserved@e\colorlet
+ \cpt@testopt\xwm@definecolor{}%
+ }%
+}
+\robust@def*\xwm@definecolor[#1]#2{%
+ \@ifundefinedcolor{#2}{%
+ \reserved@e[#1]{#2}%
+ }{%
+ \xwm@err{Color name '#2' already defined}\@ehd
+ }%
+}
+\robust@def*\xwmdefinecolorset{\cpt@testopt\xwm@definecolorset{x}}
+\robust@def*\xwm@definecolorset[#1]{%
+ \cpt@testpnopt{\xwm@d@finecolorset{#1}}{1}%
+}
+\robust@def*\xwm@d@finecolorset#1(#2)#3{%
+ \xwm@ifxcolorloaded{%
+ \begingroup
+ \cptemptifycsset{\xwm@tempb,\xwm@tempc,\xwm@tempd,\xwm@tempe}%
+ \def\xwm@tempa##1,##2,##3,##4,##5\@nil{%
+ \ifblankTF{##4}{%
+ \xwm@err{Incomplete color format in
+ \string\xwmdefinecolorset}\@ehd
+ }{%
+ \def\xwm@tempf{##1}%
+ }%
+ }%
+ \cpt@stfalse\cpt@csvnormalize[;]{#3}%
+ \def\do##1;{%
+ \ifnot@nil{##1}{%
+ \xwm@tempa##1,,,,\@nil
+ \xifinsetTF{,\xwm@tempf,}{,\xwm@tempd,}{%
+ \edef\xwm@tempe{\csliststack,\xwm@tempe\xwm@tempf}%
+ }{%
+ \edef\xwm@tempd{\csliststack,\xwm@tempd\xwm@tempf}%
+ \@ifundefinedcolor{#1\xwm@tempf#2}{%
+ \edef\xwm@tempb{\csliststack;\xwm@tempb##1}%
+ }{%
+ \edef\xwm@tempc{\csliststack;\xwm@tempc#1\xwm@tempf#2}%
+ }%
+ }%
+ \do
+ }%
+ }%
+ \expandafter\do\normalized@list;\@nil;%
+ \ifcsemptyTF\xwm@tempe{}{%
+ \xwm@err{Color names '\expandcsonce\xwm@tempe' multiply
+ \MsgBrk submitted to \string\xwmdefinecolorset}\@ehd
+ }%
+ \ifcsemptyTF\xwm@tempc{}{%
+ \xwm@err{Color names '\expandcsonce\xwm@tempc' already in use}\@ehd
+ }%
+ \ifcsemptyTF\xwm@tempb{}{%
+ \cptexpandarg{\xglobal\definecolorset{rgb}{#1}{#2}}
+ {\expandcsonce\xwm@tempb}%
+ }%
+ \endgroup
+ }%
+}
+\DefSuffixChecker\xwm@suffixcheck{*}{+}{'}
+\robust@def*\xwmifitemsinTF{%
+ \begingroup\xwm@swatrue\cpt@testopt\xwm@itemsin\@ne
+}
+\robust@def*\xxwmifitemsinTF{%
+ \begingroup\xwm@swatrue\cpt@testopt\xwm@xitemsin\@ne
+}
+\robust@def*\xwmifitemsinFT{%
+ \begingroup\xwm@swafalse\cpt@testopt\xwm@itemsin\@ne
+}
+\robust@def\xwm@xitemsin[#1]#2#3{%
+ \cptexpandtwoargs{\xwm@itemsin[#1]}{#2}{#3}%
+}
+\robust@def\xwm@itemsin[#1]#2#3{%
+ \begingroup
+ \afterassignment\xwm@catchtonil\@tempcnta=#1\xwm@catch@nil
+ \if\relax\cptoxdetok\stuff\relax
+ \ifnum\numexpr#1<\@ne
+ \xwm@err{Invalid number '\the#1'\relax
+ \MsgBrk for command \string\xwmifitemsinTF}\@ehd
+ \fi
+ \else
+ \xwm@err{Token '\detokenize{#1}' not an integer}\@ehd
+ \fi
+ \endgroup
+ \lowercase{%
+ \edef\xwm@tempa{\unexpanded{#2}}%
+ \edef\xwm@tempb{\unexpanded{#3}}%
+ }%
+ \cpt@sttrue\cpt@csvnormalize[,]\xwm@tempb
+ \def\xwm@nritems{0}%
+ \def\xwm@items{}%
+ \def\csv@do##1{%
+ \xifinsetFT{,\detokenize{##1}}{,\cptoxdetok\xwm@tempb}{}{%
+ \edef\xwm@items{%
+ \expandcsonce\xwm@items\ifx\xwm@items\@empty\else,\fi
+ \unexpanded{##1}%
+ }%
+ \edef\xwm@nritems{\the\numexpr\xwm@nritems+1}%
+ \ifnum\xwm@nritems>\numexpr#1-1\relax\loopbreak\fi
+ }%
+ }%
+ \csv@@parse*[,]\xwm@tempa
+ \expandafter\endgroup
+ \csname
+ @\ifnum\xwm@nritems>\numexpr#1-1\relax
+ \ifxwm@swa first\else second\fi
+ \else
+ \ifxwm@swa second\else first\fi
+ \fi
+ oftwo\endcsname
+}
+\robust@def*\xwm@hyphenpagerange#1#2#3{%
+ \xifinsetTF{\detokenize{\xwmgetpagenumber}}{\cptoxdetok{#1}}{%
+ \xwm@swbtrue
+ }{%
+ \xifinsetTF{\detokenize{\lastdocpage}}{\cptoxdetok{#1}}{%
+ \xwm@swbtrue
+ }{%
+ \xwm@swbfalse
+ }%
+ }%
+ \protected@edef#2{#1}\def#3{}%
+ \begingroup
+ \catcode`\-=12\relax
+ \cptscantokens#2%
+ \postgroupdef#2\endgroup
+ \oifinsetTF{-}{#2}{%
+ \expandafter\xwm@splitpagerange#2\xwm@nil{#2}{#3}%
+ }{%
+ \ifblankTF{#1}{%
+ \xwm@err{Empty page range for watermark:
+ ^^J||\expandcsonce\xwm@currwatermark||.^^J}\@ehd
+ }{%
+ \protected@edef#3{#1}%
+ }%
+ }%
+}
+\robust@def*\xwm@splitpagerange#1-#2\xwm@nil#3#4{%
+ \def#3{#1}\def#4{#2}%
+ \ifinsetTF{-}{#2}{%
+ \xwm@err{Too many hyphens in page range '#1-#2'
+ \MsgBrk of watermark:^^J||\expandcsonce\xwm@currwatermark||}\@ehd
+ }{%
+ \ifblankTF{#1}{%
+ \xwm@warn{No start-page in page-range of watermark:
+ ^^J||\expandcsonce\xwm@currwatermark||.^^JI have used the
+ default start-page '\xwm@defaultfirstpage'
+ instead}%
+ \def#3{\xwm@defaultfirstpage}%
+ \xwm@swafalse
+ }{%
+ \xwm@swatrue
+ }%
+ \ifblankTF{#2}{%
+ \xwm@warn{No end-page for page-range
+ of watermark:^^J||\expandcsonce\xwm@currwatermark||
+ ^^JI have used the default end-page
+ '\xwm@defaultlastpage' instead}%
+ \def#4{\xwm@defaultlastpage}%
+ \xwm@swafalse
+ }{%
+ \xwm@swatrue
+ }%
+ \ifxwm@swa
+ \ifnum\numexpr#1=\numexpr#2\relax\else
+ \ifnum\numexpr#1<\numexpr#2\relax\else
+ \ifxwm@swb\else
+ \xwm@err{Watermark start-page '#1' is greater
+ than end-page '#2'}\@ehd
+ \fi
+ \fi
+ \fi
+ \fi
+ }%
+}
+\let\xwm@papercenter\relax
+\ifdefTF\pdfoutput{%
+ \ifnum\pdfoutput<\@ne\xwm@pdffalse\else\xwm@pdftrue\fi
+}{%
+ \xwm@pdffalse
+}
+\new@def*\xwm@allowedcoordunits{%
+ em,ex,in,pt,pc,cm,mm,dd,cc,nd,nc,bp,sp,\paperwidth,%
+ \paperheight,\textwidth,\textheight,\hsize,\vsize,%
+ \columnwidth,\linewidth
+}
+\robust@def*\xwm@checkcoordunit#1{%
+ \oifinset@sp@TF,{#1}{\xwm@allowedcoordunits}{}{%
+ \xwm@err{Invalid coordinate unit '#1'}{%
+ Allowed coordinate units are:
+ ^^J||\xwm@allowedcoordunits||^^J}%
+ }%
+}
+\robust@def*\xwm@defaultunits#1#2{%
+ \begingroup
+ \@defaultunits\@tempdima\dimexpr#1\p@\relax\@nnil
+ \edefpass#2{\endgroup\def\noexpand#2{\the\@tempdima}}%
+}
+\robust@def*\xwm@getposition#1#2#3{%
+ \begingroup
+ \@defaultunits\@tempdima\dimexpr#1#3\p@\relax\@nnil
+ \edef\xwm@tempa{\the\dimexpr0.5\paperwidth+\@tempdima\relax}%
+ \@defaultunits\@tempdima\dimexpr#2#3\p@\relax\@nnil
+ \edef\xwm@tempb{\the\dimexpr-0.5\paperheight+\@tempdima\relax}%
+ \cptexpanded{\endgroup
+ \csn@def{\cptremovescape#1@a}{\xwm@tempa}%
+ \csn@def{\cptremovescape#2@a}{\xwm@tempb}%
+ }%
+}
+\cptrobustify{%
+ \fbox,\framebox,\makebox,\rotatebox,\scalebox,\raisebox
+}
+\new@def*\xwm@relax{\relax}
+\robust@def*\xwm@settextalign#1{%
+ \ifmacroTF{#1}{}{\cpt@notcserr{#1}}%
+ \begingroup
+ \cptexpandmacro{#1}\xwm@tempa
+ \cptexpandargonce{\endgroup\xwm@stripallouterbraces}\xwm@tempa#1%
+ \ltxkeys@trimspacesincs{#1}%
+ \cptexpandsecond{\def\reserved@a##1}{#1}##2##3\xwm@nil{%
+ \def\reserved@a{##2}%
+ \ifxTF\reserved@a\xwm@nnil{%
+ \cpt@err{Invalid value '#1' for textalign}\@ehd
+ \def#1{xwm@relax}%
+ }{%
+ \def#1{##2}%
+ }%
+ }%
+ \cptexpandsecond{\reserved@a
+ center{center},\centering{center},right{flushright},
+ \flushright{flushright},\raggedleft{flushright},
+ left{flushleft},\flushleft{flushleft},\raggedright{flushleft},
+ justified{xwm@relax},\relax{xwm@relax},xwm@relax{xwm@relax}%
+ }{#1}{\xwm@nil}\xwm@nil
+}
+\robust@def*\xwm@getalign#1{%
+ \ifmacroTF{#1}{%
+ \csn@edef{xwm@\expandafter\@gobblethree\string#1}{%
+ \xifstrcmpTF{#1}{\relax}{relax}{#1}%
+ }%
+ }{%
+ \cpt@notcserr{#1}%
+ }%
+}
+% 'boxalign' may be in the format 't-l, t-r, b-l, b-r, c, s'
+% or 'top-left, top-right, etc':
+\robust@def*\xwm@setboxalign#1{%
+ \ifmacroTF{#1}{}{\cpt@notcserr{#1}}%
+ \begingroup
+ \toks@{}%
+ \cptexpandarg\lowercase{\def\noexpand\reserved@a{#1}}%
+ % We don't want the format 't-l' mixed with 'top-left':
+ \def\xwm@tempa{}\def\xwm@tempb{}%
+ \def\xwm@resa##1-{%
+ \ifstrcmpTF{##1}{\xwm@nil}{}{%
+ \ifinsetTF{,##1,}{,top,left,right,bottom,center,justified,}{%
+ \edef\xwm@tempa{\csliststack,\xwm@tempa##1}%
+ }{%
+ \ifinsetTF{,##1,}{,l,r,b,t,c,s,}{%
+ \edef\xwm@tempb{\xwm@tempb##1}%
+ }{%
+ \toks@\expandafter{\the\toks@##1}%
+ }%
+ }%
+ \xwm@resa
+ }%
+ }%
+ \expandafter\xwm@resa\reserved@a-\xwm@nil-%
+ \s@expandarg\ifnullTF{\the\toks@}{}{%
+ \xwm@err{'boxalign' has invalid or inconsistent
+ \MsgBrk values '#1'}\@ehd
+ }%
+ \ifcsnullTF\xwm@tempa{}{%
+ \ifcsnullTF\xwm@tempb{}{%
+ \xwm@err{Invalid values '#1' for 'boxalign':
+ \MsgBrk possibly a mixture of styles}\@ehd
+ }%
+ }%
+ \def\xwm@tempc{}%
+ \ifcsnullTF\xwm@tempa{}{%
+ \def\xwm@resa##1##2##3\xwm@nil##4{%
+ \ifblankTF{##3}{}{%
+ \ifinsetFT{,##1,}{,##4,}{}{%
+ \xifinsetTF{##2}{\xwm@tempc}{}{%
+ \edef\xwm@tempc{\xwm@tempc##2}%
+ }%
+ }%
+ \xwm@resa##3\xwm@nil{##4}%
+ }%
+ }%
+ \cptexpandarg
+ {\xwm@resa{center}{c}{justified}{s}{left}{l}{right}{r}%
+ {top}{t}{bottom}{b}\xwm@mil\xwm@mil\xwm@nil}\xwm@tempa
+ }%
+ \ifcsnullTF\xwm@tempb{}{%
+ \def\siso@do##1{%
+ \ifinsetFT{,##1,}{,l,r,b,t,c,s,}{}{%
+ \xifinsetTF{##1}{\xwm@tempc}{}{%
+ \edef\xwm@tempc{\xwm@tempc##1}%
+ }%
+ }%
+ }%
+ \simpleexpandarg\siso@@loop\xwm@tempb
+ }%
+ \ifcsnullTF\xwm@tempc{%
+ \xifblankTF{#1}{%
+ \def\xwm@tempc{s}%
+ }{%
+ \xwm@err{Invalid entries '#1' for 'boxalign'}\@ehd
+ }%
+ }{%
+ \begingroup
+ \cpt@cnta\z@pt
+ \def\siso@do##1{\advance\cpt@cnta\@ne}%
+ \s@expandarg\siso@@loop\xwm@tempc
+ \ifnum\cpt@cnta>2\relax
+ \xwm@err{More than two entries '#1' for 'boxalign'}\@ehd
+ \fi
+ \endgroup
+ }%
+ \let#1=\xwm@tempc
+ \postgroupdef#1\endgroup
+}
+\robust@def*\xwm@notenddocerr{%
+ \xwm@err{Wrong location of end-of-document command}\@ehd
+}
+\robust@def*\AfterEndOfDocument{\grightaddtocs\xwm@afterenddoc}
+\new@def*\xwm@afterenddoc{}
+\robust@def*\AfterLastPageOfDocument{%
+ \grightaddtocs\xwm@afterlastpage
+}
+\new@def*\xwm@afterlastpage{}
+\AtEndDocument{%
+ \let\xwm@aft@renddoc\AtVeryEnd@AtVeryEndDocumentHook
+ \def\AtVeryEnd@AtVeryEndDocumentHook{%
+ \let\AfterEndOfDocument\@firstofone
+ \xwm@afterenddoc\xwm@aft@renddoc
+ \let\AfterEndOfDocument\xwm@notenddocerr
+ \undefcs\xwm@afterenddoc
+ \undefcs\xwm@aft@renddoc
+ }%
+ \let\xwm@afterl@stpage\AtVeryEnd@AfterLastShipoutHook
+ \def\AtVeryEnd@AfterLastShipoutHook{%
+ \let\AfterLastPageOfDocument\@firstofone
+ \xwm@afterlastpage\xwm@afterl@stpage
+ \let\AfterLastPageOfDocument\xwm@notenddocerr
+ \undefcs\xwm@afterlastpage
+ \undefcs\xwm@afterl@stpage
+ }%
+}
+\robust@def*\xwmnewlabel{\xwm@newlabel{xwmr}}
+\robust@def*\xwm@newlabel#1#2#3{%
+ \begingroup
+ \ifcsndefFT{#1@#2}{}{%
+ \gdef\xwm@multiplelabels{%
+ \ltxmsg@warn{There were multiply-defined labels}%
+ }%
+ \ltxmsg@warn{Label '#2' multiply defined}%
+ }%
+ \csn@gdef{#1@#2}{#3}%
+ \endgroup
+}
+\let\xwm@multiplelabels\relax
+\BeforeStartOfDocument{%
+ \global\let\xwm@multiplelabels\relax
+}
+\robust@def*\xwm@lbtestdef#1#2#3{%
+ \begingroup
+ \def\xwm@tempa{#3}%
+ \expandafter\ifx\csname#1@#2\endcsname\xwm@tempa\else
+ \gdef\xwm@lbtestsw{00}\fi
+ \endgroup
+}
+\begingroup
+\makeatletter
+\InputIfFileExists{\jobname.xwm}{}{}
+\endgroup
+\if@filesw
+ \immediate\openout\xwm@wrt=\jobname.xwm
+ \immediate\write\xwm@wrt{\relax}
+\fi
+\AfterLastPageOfDocument{%
+ \if@filesw
+ \begingroup
+ \advance\c@page\m@one
+ \xwmlabel{xwmlastpage}%
+ \endgroup
+ \fi
+ \immediate\closeout\xwm@wrt
+ \let\xwm@newlabel\xwm@lbtestdef
+ \gdef\xwm@lbtestsw{01}%
+ \begingroup
+ \makeatletter
+ \InputIfFileExists{\jobname.xwm}{}{}%
+ \endgroup
+ \if@filesw
+ \ifx\xwm@multiplelabels\relax
+ \if\xwm@lbtestsw
+ \ltxmsg@warn{Label(s) may have changed.
+ Rerun to get cross-references right}%
+ \fi
+ \else
+ \xwm@multiplelabels
+ \fi
+ \fi
+}
+\new@def*\xwm@labelcarr#1#2#3\xwm@nil{\ifblankTF{#3}{}{#2}}
+\new@def*\xwmgetpagenumber#1{%
+ \ifcsndefTF{xwmr@#1}{%
+ \cptsevenxp\xwm@labelcarr
+ \usename{xwmr@#1}\xwm@defaultfirstpage\xwm@nil
+ }{%
+ \xwm@defaultfirstpage
+ }%
+}
+\new@def*\lastdocpage{\xwmgetpagenumber{xwmlastpage}}
+\robust@def*\xwmlabel#1{%
+ \@bsphack
+ \begingroup
+ \@onelevel@sanitize\@currentlabelname
+ \edef\@currentlabelname{%
+ \expandafter\strip@period\@currentlabelname\relax.\relax\@@@
+ }%
+ \immediate\write\@auxout{%
+ \string\newlabel{#1}{{\@currentlabel}{\thepage}%
+ {\@currentlabelname}{\@currentHref}{}}%
+ }%
+ \immediate\write\xwm@wrt{%
+ \string\xwmnewlabel{#1}{{\@currentlabel}{\thepage}%
+ {\@currentlabelname}{\@currentHref}{}}%
+ }%
+ \endgroup
+ \@esphack
+}
+\robust@def*\DeclareWatermarkParser#1{%
+ \begingroup
+ \xwm@stripallouterbraces{#1}\xwm@tempa
+ \xdef\xwm@watermarkparser{\cptoxdetok\xwm@tempa}%
+ \endgroup
+}
+\DeclareWatermarkParser{;}
+\robust@def*\xwm@put{\leavevmode\put}
+\new@edef*\xwm@defaultfileext{\ifxwm@pdf pdf\else eps\fi}
+\new@def*\xwm@picfilesread{}
+\robust@def*\xwm@fileextfn#1#2{%
+ \ifcsndefFT{#2picfile}{}{%
+ \def\xwm@tempb##1##2{%
+ \xwm@warn{Default file extension '##1'\MsgBrk
+ substituted for invalid '#1' in\MsgBrk
+ ##2 mode. I'll later confirm the\MsgBrk
+ existence of \usename{#2picfile}.##1%
+ }%
+ }%
+ \ifcsnnullTF{#2picfile}{%
+ \csn@edef{#2picfileext}{}%
+ }{%
+ \xifinsetTF{,\usename{#2picfile},}{,\xwm@picfilesread,}{%
+ \xwm@swbfalse
+ }{%
+ \xwm@swbtrue
+ \cptgxaddtolist*\xwm@picfilesread{\usename{#2picfile}}%
+ }%
+ \aftercsname\xwm@stripallouterbracesincs{#2picfileext}%
+ \ifdefboolTF{xwm@pdf}{%
+ \xifinsetTF{,\usename{#2picfileext},}{,pdf,png,jpeg,jpg,mps,}{}{%
+ \csn@def{#2picfileext}{pdf}%
+ \ifxwm@swb\xwm@tempb{pdf}{pdf}\fi
+ }%
+ }{%
+ \xifinsetTF{,\usename{#2picfileext},}{,eps,ps,}{}{%
+ \csn@def{#2picfileext}{eps}%
+ \ifxwm@swb\xwm@tempb{eps}{dvi}\fi
+ }%
+ }%
+ }%
+ }%
+}
+\ltxkeys@boolkey[XWM]{main}[xwm@]{disablegeometry}[true]{%
+ \BeforeStartOfDocument{%
+ \ifxwm@disablegeometry
+ \ifdefFT\geometry{}{%
+ \geometry{pass}%
+ \xwm@info{On your request (ie, 'disablegeometry=true')
+ \MsgBrk I have disabled the features of the
+ \MsgBrk 'geometry' package}%
+ }%
+ \fi
+ }%
+}
+\new@def*\xwm@gr@phicsoptions{}
+\robust@def*\GraphicsOptions#1{\gdef\xwm@gr@phicsoptions{#1}}
+\ltxkeys@definekeys*[XWM]{main}[xwm@]{%
+ disable-geometry=true/\setaliaskey{disablegeometry};
+ printwatermark=true;
+ print-watermark=true/\setaliaskey{printwatermark};
+ allownesting=true;
+ showpagecenter=true/\ifdefboolTF{xwm@showpagecenter}
+ {\wmk@showpagecentertrue\wlp@showpagecentertrue}{};
+ show-page-center=true/\setaliaskey{showpagecenter};
+ showpapercenter=true/\setaliaskey{showpagecenter};
+ usedummymarks=true;
+ use-dummy-marks=true/\setaliaskey{usedummymarks};
+ defaultfirstpage=1;
+ default-first-page=1/\setaliaskey{defaultfirstpage};
+ defaultlastpage=\xwmgetpagenumber{xwmlastpage};
+ default-last-page=\xwmgetpagenumber{xwmlastpage}/
+ \setaliaskey{defaultlastpage};
+ frontpagestyle=empty;
+ front-page-style=empty/\setaliaskey{frontpagestyle};
+ watermarkparser={;}/\DeclareWatermarkParser{#1};
+ watermark-parser={;}/\setaliaskey{watermarkparser};
+ resetpaperorigin=true/\ifxwm@resetpaperorigin\pdfhorigin\z@pt
+ \pdfvorigin\z@pt\hoffset\z@pt\voffset\z@pt\fi;
+ reset-paper-origin=true/\setaliaskey{resetpaperorigin};
+}
+\ltxkeys@biboolkeys+[XWM]{main}[xwm@]{draft,final}[true]
+ {}{}{\ltxkeys@keyvalerr}
+\ltxkeys@makeoptionkeys[XWM]{main}
+\BeforeStartOfDocument{%
+ \ifxwm@printwatermark
+ \cptreplaceoneelement\XWM@main@initialkeyvals
+ {printwatermark=false}{printwatermark=true}%
+ \fi
+}
+\robust@def*\xwm@defcommonkeys#1{%
+ \begingroup
+ \endlinechar\m@one
+ \expandafter\endgroup\xwm@defc@mmonkeys{#1}%
+}
+\robust@def*\xwm@defc@mmonkeys#1#2{%
+ \csn@def{#1@commonkeys}##1{#2}%
+ \AtEndOfPackage{\letcsntocs{#1@commonkeys}\relax}%
+}
+\xwm@defcommonkeys{xwm-1}{%
+ minmark=true;
+ onepageonly=true;
+ prange=true;
+ tmark=true;
+ pmark=true;
+ graphicsoptions={}/
+ \ifbracedTF{##1}{%
+ \aftercsname{\xwm@stripallouterbraces{##1}}{#1graphicsoptions}
+ }{%
+ \cpt@err{Values of key 'graphicsoptions' not braced}\@ehd
+ };
+ GraphicsOptions=/
+ \ifdocstartedTF{%
+ \xwm@err{\noexpand\GraphicsOptions
+ is a command, not a key.\MsgBrk
+ Maybe you meant 'graphicsoptions'}\@ehd
+ }{};
+ picontoptext=true;
+ picture-on-top-text=true/\setaliaskey{picontoptext};
+ pic-on-top-text=true/\setaliaskey{picontoptext};
+ textontoppic=true/\setaliaskey{picontoptext}[false];
+ text-on-top-picture=true/\setaliaskey{picontoptext}[false];
+ text-on-top-pic=true/\setaliaskey{picontoptext}[false];
+ draftboxcolor=blue;
+ draft-box-color=blue/\setaliaskey{draftboxcolor};
+ textcolor=gray!25;
+ text-color=gray!25/\setaliaskey{textcolor};
+ color=gray!25/\setaliaskey{textcolor};
+ textangle=0;
+ text-angle=0/\setaliaskey{textangle};
+ angle=0/\setaliaskey{textangle};
+ textscale=1;
+ text-scale=1/\setaliaskey{textscale};
+ scale=1/\setaliaskey{textscale};
+ textalign=center/\aftercsname\xwm@settextalign{#1textalign};
+ text-align=center/\setaliaskey{textalign};
+ align=center/\setaliaskey{textalign};
+ showpagecenter=true/\ifdefboolTF{#1showpagecenter}{%
+ \usename{#1showpagecentertrue}}{\usename{#1showpagecenterfalse}};
+ show-page-center=true/\setaliaskey{showpagecenter};
+ showpapercenter=true/\setaliaskey{showpagecenter};
+ fontsize=1cm/\aftercsname{\xwm@defaultunits{##1}}{#1fontsize};
+ fontseries=b;
+ fontfamily=bch;
+ \needvalue{picfile}=/\aftercsname\xwm@stripallouterbracesincs{#1picfile}
+ \ifcsnnullTF{#1picfile}{\usename{#1pmarkfalse}}{\usename{#1pmarktrue}
+ \usename{#1minmarktrue}};
+ \needvalue{picture-file}=/\setaliaskey{picfile};
+ picfileext=\xwm@defaultfileext/\xwm@fileextfn{##1}{#1};
+ pic-file-ext=\xwm@defaultfileext/\setaliaskey{picfileext};
+ picangle=0;
+ picture-angle=0/\setaliaskey{picangle};
+ picscale=1;
+ picture-scale=1/\setaliaskey{picscale};
+ picbb=0 0 100 100;
+ picture-bb=0 0 100 100/\setaliaskey{picbb};
+ pic-bounding-box=0 0 100 100/\setaliaskey{picbb};
+ picxpos=\z@pt;
+ picture-xpos=0/\setaliaskey{picxpos};
+ picture-x-position=0/\setaliaskey{picxpos};
+ picypos=\z@pt;
+ picture-ypos=0/\setaliaskey{picypos};
+ picture-y-position=0/\setaliaskey{picypos};
+ mark=DRAFT/\setaliaskey{textmark};
+ textmark=DRAFT/
+ \aftercsname\xwm@stripallouterbracesincs{#1textmark}
+ \ifcsnnullTF{#1textmark}{%
+ \usename{#1tmarkfalse}
+ }{%
+ \usename{#1tmarktrue}
+ };
+ text-mark=DRAFT/\setaliaskey{textmark};
+ firstpage=true/\ifdefboolFT{#1firstpage}{}{\usename{#1minmarktrue}};
+ first-page=true/\setaliaskey{firstpage};
+ allpages=true/\ifdefboolFT{#1allpages}{}{\usename{#1minmarktrue}};
+ oddpages=true/\ifdefboolFT{#1oddpages}{}{\usename{#1minmarktrue}};
+ evenpages=true/\ifdefboolFT{#1evenpages}{}{\usename{#1minmarktrue}};
+ page=1/
+ \ifinsetTF{-}{##1}{%
+ \xwm@err{I found '-' in '##1' for key 'page',
+ \MsgBrk but 'page' doesn't take page-range}\@ehd
+ }{%
+ \ifnum\numexpr##1=\z@pt\else\usename{#1onepageonlytrue}
+ \usename{#1minmarktrue}\fi
+ };
+ pages=1-1/
+ \aftercsname\xwm@stripallouterbracesincs{#1pages}
+ \aftercsname\xifstrcmpTF{#1pages}{0-0}{}{%
+ \usename{#1prangetrue}\usename{#1minmarktrue}
+ }
+ \cptexpandsecond\xwm@hyphenpagerange{\cptmakecs{#1pages}
+ \cptmakecs{#1pagestart}\cptmakecs{#1pageend}};
+ pagex={1}/
+ \ifbracedTF{##1}{}{%
+ \xwm@err{Value of key 'pagex' must be braced}\@ehd
+ };
+ boxalign=/\ifblankTF{##1}{}
+ {\aftercsname\xwm@setboxalign{#1boxalign}};
+ box-align=/\setaliaskey{boxalign};
+}
+\robust@def*\xwm@adddefkeys{%
+ \begingroup
+ \endlinechar\m@one
+ \cpt@testopt\xwm@addd@fkeys{}%
+}
+\robust@def\xwm@addd@fkeys[#1]#2#3#4#5{%
+ \def\xwm@tempa{\endgroup#4}%
+ \expandafter\expandafter\expandafter\xwm@tempa
+ \expandafter\expandafter\expandafter
+ {\csname#2@commonkeys\endcsname{#3}#1#5}%
+}
+\xwm@adddefkeys[;]{xwm-1}{wmk@}
+ {\ltxkeys@definekeys*[XWM]{watermark}[wmk@]}{%
+ textwidth=\paperheight;
+ text-width=\paperheight/\setaliaskey{textwidth};
+ width=\paperheight/\setaliaskey{textwidth};
+ textheight=\paperwidth;
+ text-height=\paperwidth/\setaliaskey{textheight};
+ height=\paperwidth/\setaliaskey{textheight};
+ \needvalue{picheight}=;
+ pic-height=/\setaliaskey{picheight};
+ picture-height=/\setaliaskey{picheight};
+ \needvalue{picwidth}=;
+ picture-width=/\setaliaskey{picwidth};
+ textxpos=0;
+ text-xpos=0/\setaliaskey{textxpos};
+ text-x-position=0/\setaliaskey{textxpos};
+ xpos=0/\setaliaskey{textxpos};
+ textypos=0;
+ text-ypos=0/\setaliaskey{textypos};
+ text-y-position=0/\setaliaskey{textypos};
+ ypos=0/\setaliaskey{textypos};
+ coordunit=mm/\xwm@checkcoordunit{#1};
+ coord-unit=mm/\setaliaskey{coordunit};
+ position-unit=mm/\setaliaskey{coordunit};
+}
+\ltxkeys@makeoptionkeys*[XWM]{watermark}
+\xwm@adddefkeys[;]{xwm-1}{wlp@}
+ {\ltxkeys@definekeys*[XWM]{wallpaper}[wlp@]}{%
+ textheight=\wlp@tileysize;
+ text-height=\wlp@tileysize/\setaliaskey{textheight};
+ textwidth=\wlp@tilexsize;
+ text-width=\wlp@tilexsize/\setaliaskey{textwidth};
+ picheight=\wlp@tileysize;
+ picture-height=\wlp@tileysize/\setaliaskey{picheight};
+ picwidth=\wlp@tilexsize;
+ picture-width=\wlp@tilexsize/\setaliaskey{picwidth};
+ tilexsize=.25\paperwidth;
+ tile-xsize=.25/\setaliaskey{tilexsize};
+ tileysize=.25\paperheight;
+ tile-ysize=.25/\setaliaskey{tileysize};
+ wpxoffset=\z@pt;
+ wallpaper-xoffset=\z@pt/\setaliaskey{wpxoffset};
+ wpyoffset=\z@pt;
+ wallpaper-yoffset=\z@pt/\setaliaskey{wpyoffset};
+ tilexoffset=\z@pt;
+ tile-xoffset=\z@pt/\setaliaskey{tilexoffset};
+ tileyoffset=\z@pt;
+ tile-yoffset=\z@pt/\setaliaskey{tileyoffset};
+ tileno=4;
+ tilenumber=4/\setaliaskey{tileno};
+ tile-number=4/\setaliaskey{tileno};
+ number-of-tiles=4/\setaliaskey{tileno};
+ squaretiles=true;
+ square-tiles=true/\setaliaskey{squaretiles};
+}
+\ltxkeys@makeoptionkeys*[XWM]{wallpaper}
+\ltxkeys@definekeys*[XWM]{fancypagenos}[pgn@]{%
+ textalign=center/\xwm@settextalign\pgn@textalign;
+ text-align=center/\setaliaskey{textalign};
+ align=center/\setaliaskey{textalign};
+ boxalign=/\ifblankTF{#1}{}{\xwm@setboxalign\pgn@boxalign};
+ box-align=center/\setaliaskey{boxalign};
+ textangle=0;
+ text-angle=0/\setaliaskey{textangle};
+ angle=0/\setaliaskey{textangle};
+ picangle=0;
+ picture-angle=0/\setaliaskey{picangle};
+ textwidth=.25\textwidth;
+ text-width=.25/\setaliaskey{textwidth};
+ width=.25\hsize/\setaliaskey{textwidth};
+ textheight=.25\textheight;
+ text-height=.25/\setaliaskey{textheight};
+ height=.25\vsize/\setaliaskey{textheight};
+ textxpos=\z@pt;
+ x-position=0/\setaliaskey{textxpos};
+ xposition=0/\setaliaskey{textxpos};
+ xpos=\z@pt/\setaliaskey{textxpos};
+ textypos=\z@pt;
+ y-position=0/\setaliaskey{textypos};
+ yposition=0/\setaliaskey{textypos};
+ ypos=\z@pt/\setaliaskey{textypos};
+ textcolor=blue;
+ text-color=blue/\setaliaskey{textcolor};
+ color=blue/\setaliaskey{textcolor};
+ textscale=2.5;
+ text-scale=2.5/\setaliaskey{textscale};
+ scale=2.5/\setaliaskey{textscale};
+ coordunit=mm/\xwm@checkcoordunit{#1};
+ coord-unit=mm/\setaliaskey{coordunit};
+ position-unit=mm/\setaliaskey{coordunit};
+ fontfamily=bch;
+ fontseries=m;
+ format=\fbox;
+ framerule=.4\p@;
+ framesep=3\p@;
+ fontsize=12\p@/\xwm@defaultunits{#1}\pgn@fontsize;
+ cfoot;
+ center-footer=/\setaliaskey{cfoot};
+ footer-center=/\setaliaskey{cfoot};
+ rfoot;
+ right-footer=/\setaliaskey{rfoot};
+ footer-right=/\setaliaskey{rfoot};
+ lfoot;
+ left-footer=/\setaliaskey{lfoot};
+ footer-left=/\setaliaskey{lfoot};
+ chead;
+ center-header=/\setaliaskey{chead};
+ header-center=/\setaliaskey{chead};
+ rhead;
+ right-header=/\setaliaskey{rhead};
+ header-right=/\setaliaskey{rhead};
+ lhead;
+ left-header=/\setaliaskey{lhead};
+ header-left=/\setaliaskey{lhead};
+ headruleheight=.4\p@;
+ headrule-height=.4\p@/\setaliaskey{headruleheight};
+ headruledepth=.4\p@;
+ headrule-depth=.4\p@/\setaliaskey{headruledepth};
+ headrulewidth=\headwidth;
+ headrule-width=\headwidth/\setaliaskey{headrulewidth};
+ headrulesep=2\p@;
+ headrule-sep=2\p@/\setaliaskey{headrulesep};
+ headrule-separation=2\p@/\setaliaskey{headrulesep};
+ headrulecolor=blue;
+ headrule-color=blue/\setaliaskey{headrulecolor};
+ footruleheight=.4\p@;
+ footrule-height=.4\p@/\setaliaskey{footruleheight};
+ footruledepth=.4\p@;
+ footrule-depth=.4\p@/\setaliaskey{footruledepth};
+ footrulewidth=\headwidth;
+ footrule-width=\headwidth/\setaliaskey{footrulewidth};
+ footrulesep=2\p@;
+ footrule-sep=2\p@/\setaliaskey{footrulesep};
+ footrule-separation=2\p@/\setaliaskey{footrulesep};
+ footrulecolor=cyan;
+ footrule-color=blue/\setaliaskey{footrulecolor};
+ hfoffsetleft=.5;
+ hfoffset-left=.5/\setaliaskey{hfoffsetleft};
+ hfoffsetright=.5;
+ hfoffset-right=.5/\setaliaskey{hfoffsetright};
+ style=\thepage;
+ printstyle=\thepage/\setaliaskey{style};
+ sendtoback=true;
+}
+\ltxkeys@makeoptionkeys*[XWM]{fancypagenos}
+\ltxkeys@definekeys*[XWM]{fancypagenos}[pgn@]{%
+ showpagenos=true/\ifpgn@showpagenos\global\pgn@showpagenostrue\fi;
+ showpagenumbers=true/\setaliaskey{showpagenos};
+ show-page-numbers=true/\setaliaskey{showpagenos};
+ show-pagenos=true/\setaliaskey{showpagenos};
+ show-pageno=true/\setaliaskey{showpagenos};
+ showonpageone=true;
+ show-on-page-one=true/\setaliaskey{showonpageone};
+ showheadrule=true;
+ show-headrule=true/\setaliaskey{showheadrule};
+ showfootrule=true;
+ show-footrule=true/\setaliaskey{showfootrule};
+}
+\BeforeStartOfDocument{%
+ \ifpgn@showpagenos
+ \cptreplaceoneelement\XWM@fancypagenos@initialkeyvals
+ {showpagenos=false}{showpagenos=true}%
+ \fi
+}
+\robust@def*\PrintWatermark{\global\xwm@printwatermarktrue}
+\ltxkeys@declareoption*{%
+ \ltxkeys@getpvalnopad
+ \xwm@warn{Unknown option '\CurrentKey' with
+ value '\InnocentVal' ignored}%
+}
+\ltxkeys@executeoptions[XWM]<main>{%
+ printwatermark=true,disablegeometry=false
+}\relax
+\ltxkeys@processoptions*[XWM]<main,watermark,wallpaper,%
+ fancypagenos>\relax
+\new@def*\xwm@samplemarkkeys{%
+ firstpage,lastpage,allpages,oddpages,evenpages,
+ picscale,picture-scale,
+ picfile,picture-file,
+ picfileext,pic-file-ext,
+ picangle,picture-angle,
+ picbb,picture-bb,pic-bounding-box,
+ picxpos,picture-xpos,picture-x-position,
+ picypos,picture-ypos,picture-y-position,
+ showpagecenter,show-page-center,
+ picontoptext,picture-on-top-text,pic-on-top-text,
+ textontoppic,text-on-top-picture,text-on-top-pic=true,
+ pic-height,picture-height,
+ picwidth,picture-width,
+ squaretiles,square-tiles,
+ tilexsize,tile-xsize,
+ tileysize,tile-ysize,
+ wpxoffset,wallpaper-xoffset,
+ wpyoffset,wallpaper-yoffset,
+ tilexoffset,tile-xoffset,
+ tileyoffset,tile-yoffset,
+ tileno,tilenumber,tile-number,number-of-tiles
+}
+\new@def*\xwm@pagespecifiers{%
+ % '=' is needed here to create uniqueness; eg, to avoid confusing
+ % ',page' with ',pages'.
+ page=,pages=,pagex=,firstpage,lastpage,allpages,oddpages,evenpages,%
+ section=,sections=,sectionx=%
+}
+\robust@def*\xwm@decidedetok#1{%
+ \ifntypeTF{#1}{%
+ \ifmacroTF{#1}{%
+ \let\xwm@detoktype\cptoxdetok
+ }{%
+ \let\xwm@detoktype\detokenize
+ }%
+ }{%
+ \let\xwm@detoktype\detokenize
+ }%
+}
+\robust@def*\xwm@decidexp#1{%
+ \ifntypeTF{#1}{%
+ \ifmacroTF{#1}{%
+ \let\xwm@exptype\expandcsonce
+ }{%
+ \let\xwm@exptype\unexpanded
+ }%
+ }{%
+ \let\xwm@exptype\unexpanded
+ }%
+}
+\robust@def*\newwatermark#1{%
+ \xwm@wallfalse
+ \ifstrcmpTF{#1}\dummywatermark{%
+ \xwm@err{'\string\dummywatermark' in front of
+ \string\newwatermark}{First comment out or
+ remove '\string\dummywatermark'.}%
+ }{%
+ \def\xwm@forelist{\xwm@forewmklist}%
+ \def\xwm@backlist{\xwm@backwmklist}%
+ \xwm@suffixcheck\xwm@newwatermark{#1}%
+ }%
+}
+\robust@def*\xnewwatermark{%
+ \xwm@suffixcheck{\cpt@teststpm{\cpt@testopt\cpt@xnewwatermark{}}}%
+}
+\robust@def*\xwm@ltxcmds{%
+ \centering,\flushright,\flushleft,\raggedright,%
+ \raggedleft,\fbox,\framebox,\makebox,\rotatebox,%
+ \scalebox,\raisebox,\color,\textcolor,\usecsn,%
+ \newcommand,\lastdocpage
+}
+\robust@def*\xwm@relaxltxcmds{%
+ \def\ltxkeys@do##1{\let##1=\relax}%
+ \ltxkeys@parse*1\xwm@ltxcmds
+}
+\robust@def*\cpt@xnewwatermark[#1]#2{%
+ \begingroup
+ \xwm@relaxltxcmds
+ \cptexpanded{%
+ \endgroup
+ \newwatermark\ifcpt@st*\fi\ifcpt@pm'\fi
+ [\expandcstwice{#1}]{\expandcstwice{#2}}%
+ }%
+}
+\robust@def*\newwallpaper#1{%
+ \xwm@walltrue
+ \ifstrcmpTF{#1}\dummywallpaper{%
+ \xwm@err
+ {'\string\dummywallpaper' in front of \string\newwallpaper}%
+ {First comment out or remove '\string\dummywallpaper'.}%
+ }{%
+ \def\xwm@forelist{\xwm@forewalllist}%
+ \def\xwm@backlist{\xwm@backwalllist}%
+ \xwm@suffixcheck\xwm@newwatermark{#1}%
+ }%
+}
+\robust@def*\xnewwallpaper{%
+ \cpt@teststpm{\cpt@testopt\cpt@xnewwallpaper{}}%
+}
+\robust@def*\cpt@xnewwallpaper[#1]#2{%
+ \begingroup
+ \xwm@relaxltxcmds
+ \cptexpanded{%
+ \endgroup
+ \newwallpaper\ifcpt@st*\fi\ifcpt@pm'\fi
+ [\expandcstwice{#1}]{\expandcstwice{#2}}%
+ }%
+}
+\robust@def*\xwm@newwatermark{%
+ \def\siso@do##1{\catcode`##1\string=12}%
+ \cpt@teststpm{%
+ \let\ifxwm@foregrd\ifcpt@st
+ \cpt@testopt{%
+ \begingroup
+ \expandafter\siso@@loop\expandafter
+ {\xwm@watermarkparser,;|-=!'"*}%
+ \expandafter\endgroup\xwm@n@wwatermark
+ }{}%
+ }%
+}
+\robust@def\xwm@n@wwatermark[#1]#2{%
+ \ifdefboolTF{cpt@pm}{}{\xwm@n@ww@termark{#1}{#2}}%
+}
+\robust@def\xwm@n@ww@termark#1#2{%
+ \xwm@decidexp{#1}%
+ \edef\xwm@currattrib{\xwm@exptype{#1}}%
+ \cpt@sttrue\cpt@kvnormalize[,]\xwm@currattrib
+ \xwm@decidexp{#2}%
+ \edef\xwm@currmark{\xwm@exptype{#2}}%
+ \xwm@decidedetok{#2}%
+ \xwm@swafalse
+ \xifinsetTF{\detokenize{\newwatermark}}{\xwm@detoktype{#2}}{%
+ \xwm@swatrue
+ }{%
+ \xifinsetTF{\detokenize{\newwallpaper}}{\xwm@detoktype{#2}}{%
+ \xwm@swatrue
+ }{}%
+ }%
+ \ifxwm@swa
+ \ifxwm@allownesting\else
+ \xwm@err{Nested '\string\newwatermark' or
+ '\string\newwallpaper'\MsgBrk
+ while option 'allownesting' is false}\@ehd
+ \fi
+ \fi
+ \ifdefboolTF{xwm@wall}{}{%
+ \xwmifitemsinFT[1]{%
+ squaretiles,square-tiles,tilexsize,tile-xsize,%
+ tileysize,tile-ysize,wpxoffset,wallpaper-xoffset,%
+ wpyoffset,wallpaper-yoffset,tilexoffset,tile-xoffset,%
+ tileyoffset,tile-yoffset,tileno,tilenumber,%
+ tile-number,number-of-tiles%
+ }{#1}{}{%
+ \xwm@@err{'\xwm@items' not admissible for
+ \MsgBrk non-wallpaper watermarks}\@ehd
+ }%
+ }%
+ \ifdefboolTF{xwm@allownesting}{}{%
+ \cpt@choicefdfalse
+ \def\csv@do##1{%
+ \xifinsetFT{,\detokenize{##1}}{,\xwm@detoktype{#2}}{}{%
+ \def\xwm@tempa{##1}%
+ \cpt@choicefdtrue\loopbreak
+ }%
+ }%
+ \csv@@parse*[,]\xwm@samplemarkkeys
+ \ifcpt@choicefd
+ \xwm@err{Illegal location of '\xwm@tempa'.
+ \MsgBrk The following keys are not allowed in
+ \MsgBrk mandatory/second argument of
+ \MsgBrk '\string\newwatermark' or '\string\newwallpaper':
+ ^^J||\xwm@samplemarkkeys||}\@ehd
+ \fi
+ }%
+ \xifinsetFT\xwm@watermarkparser{\xwm@detoktype{#2}}{}{%
+ \xwm@err{Watermark parser '\xwm@watermarkparser' appears in
+ the following watermark.\MsgBrk Enclose your token
+ '\xwm@watermarkparser' in braces:^^J||\unexpanded{#2}||}\@ehd
+ }%
+ \xxwmifitemsinTF[1]\xwm@pagespecifiers{\expandcsonce\xwm@currattrib}{%
+ \xxwmifitemsinTF[2]\xwm@pagespecifiers{\expandcsonce\xwm@currattrib}{%
+ \xwm@err{Too many page specifiers '\xwm@items' for watermark:
+ ^^J||\expandcsonce\xwm@currattrib||}{%
+ Only one page specifier is allowed in watermark.}%
+ }{}%
+ }{%
+ \xwm@err{No page specifier for watermark:
+ ^^J||\expandcsonce\xwm@currmark||}\@ehd
+ }%
+ \ifcsnullTF\xwm@currattrib{%
+ \ifcsnullTF\xwm@currmark{}{%
+ \xwm@@err{No attributes for watermark:
+ ^^J||\expandcsonce\xwm@currmark||}\@ehd
+ }%
+ }{%
+ \xwm@makecurrmark
+ }%
+ \edef\reserved@a{%
+ \ifxwm@foregrd\expandcsonce\xwm@forelist\else
+ \expandcsonce\xwm@backlist\fi
+ }%
+ \expandafter\edef\reserved@a{%
+ \expandafter\ifdefined\reserved@a\expandcstwice\reserved@a\fi
+ \expandcsonce\xwm@currwatermark
+ }%
+}
+\robust@def*\xwm@avoidtwopagespecs{%
+ \if\xwm@pagespecfd
+ \xwm@err{Two page specifiers in watermark attributes:
+ ^^J||\cptoxdetok\xwm@currattrib||}\@ehd
+ \else
+ \def\xwm@pagespecfd{00}%
+ \fi
+}
+\robust@def*\xwm@addcurrmark#1{%
+ % Local group is in effect.
+ % If the current mark is already on current page, ignore it. This, eg,
+ % avoids 'pagex={1,1,2},textmark=X' making two entries for 'X' on page 1.
+ \letcstocsn\reserved@a{xwm@mark@@\romannumeral#1}%
+ \ifx\reserved@a\xwm@currattrib\else
+ \xifinsetTF{\detokenize{textmark=}}{\cptoxdetok\xwm@currattrib}{%
+ \@tempswafalse
+ \ifx\xwm@currmark\@empty\else
+ \xwm@err{Duplicate textmark in ||\cptoxdetok\xwm@currmark||}
+ {I found textmark earlier in the mandotory argument of
+ \noexpand\newwatermark, and now I find textmark key in the
+ attribute list.}%
+ \fi
+ }{%
+ \@tempswatrue
+ }%
+ \edef\xwm@tempb{%
+ page=\number#1,\expandcsonce\xwm@currattrib,%
+ \if@tempswa textmark={\expandcsonce\xwm@currmark}\fi
+ }%
+ \edef\xwm@currwatermark{%
+ % {<page.no>}{<curr.mark>}
+ \expandcsonce\xwm@currwatermark{\number#1}{\expandcsonce\xwm@tempb}%
+ }%
+ \gletcsntocs{xwm@mark@@\romannumeral#1}\xwm@currattrib
+ \fi
+}
+\robust@def*\xwm@getpagespec#1{%
+ \ifinsetTF{,#1,}{,page,pages,pagex,section,sections,sectionx,}{%
+ % \xwm@ifpagespec has shown that #1 is in \xwm@currattrib. We
+ % need to confirm that '#1=' is in \xwm@currattrib.
+ \xifinsetTF{,\detokenize{#1=}}{,\cptoxdetok\xwm@currattrib}{%
+ \def\xwm@tempa##1#1=##2,##3\xwm@nil{%
+ \ifblankTF{##2}{%
+ \xwm@warn{Key '#1' has an empty value; '1' assumed}\@ehd
+ \def\xwm@currpages{1}%
+ }{%
+ \ifinsetTF{,#1,}{,pages,sections,}{%
+ \ifinsetTF{,}{##2}{%
+ \xwm@err{Key '#1' doesn't accept comma-separated
+ \MsgBrk page numbers: use a hyphen}\@ehd
+ }{}%
+ }{%
+ \ifinsetTF{,#1,}{,pagex,sectionx,}{%
+ \ifinsetTF{-}{##2}{%
+ \xwm@err{Key '#1' doesn't accept hyphen-separated
+ \MsgBrk page numbers: use commas}\@ehd
+ }{}%
+ }{}%
+ }%
+ \def\xwm@currpages{##2}%
+ }%
+ \edef\xwm@currattrib{\unexpanded{##1,##3}}%
+ }%
+ \expandafter\xwm@tempa\xwm@currattrib,\xwm@nil
+ }{%
+ \xwm@err{Key '#1' doesn't have '=' and a value}\@ehd
+ }%
+ }{%
+ \xwm@getpagespec@a{#1}%
+ }%
+ \kv@@normalize*\xwm@currattrib
+}
+\robust@def*\xwm@getpagespec@a#1{%
+ \xifinsetTF{,\detokenize{#1=true},}{,\cptoxdetok\xwm@currattrib,}{%
+ \def\xwm@tempa##1#1=true,##2\xwm@nil{%
+ \edef\xwm@currattrib{\unexpanded{##1,##2}}%
+ }%
+ \expandafter\xwm@tempa\xwm@currattrib,\xwm@nil
+ }{%
+ \xifinsetTF{,\detokenize{#1=false},}{,\cptoxdetok\xwm@currattrib,}{%
+ \def\xwm@tempa##1#1=false,##2\xwm@nil{%
+ \edef\xwm@currattrib{\unexpanded{##1,##2}}%
+ }%
+ \expandafter\xwm@tempa\xwm@currattrib,\xwm@nil
+ }{%
+ \def\xwm@tempa##1#1,##2\xwm@nil{%
+ \edef\xwm@currattrib{\unexpanded{##1,##2}}%
+ }%
+ \expandafter\xwm@tempa\xwm@currattrib,\xwm@nil
+ }%
+ }%
+}
+\robust@def*\xwm@ifpagespec#1{%
+ \@expandtwoargs\cpt@in{,\detokenize{#1}}{,\cptoxdetok\xwm@currattrib}%
+ \ifdefboolTF{cpt@in}\@iden\@gobble
+}
+\robust@def*\xwm@normalizedoublecomma#1{%
+ \def\xwm@tempa##1,,##2\normal@nil{%
+ \ifblankTF{##2}{%
+ \edef#1{\unexpanded{##1}}%
+ }{%
+ \xwm@tempa##1,##2\normal@nil
+ }%
+ }%
+ \expandafter\xwm@tempa#1,,\normal@nil
+}
+\robust@def*\xwm@makecurrmark{%
+ \begingroup
+ \edef\xwm@lastpage{\lastdocpage}%
+ \def\xwm@currwatermark{}%
+ \def\xwm@pagespecfd{01}%
+ \xwm@ifpagespec{page=}{%
+ \xwm@avoidtwopagespecs
+ \xwm@getpagespec{page}%
+ \xwm@addcurrmark\xwm@currpages
+ }%
+ \xwm@ifpagespec{pages=}{%
+ \xwm@avoidtwopagespecs
+ \xwm@getpagespec{pages}%
+ \xwm@hyphenpagerange\xwm@currpages\xwm@pagestart\xwm@pageend
+ \xwm@cnta\numexpr\xwm@pagestart\relax
+ \cptloop
+ \xwm@addcurrmark\xwm@cnta
+ \advance\xwm@cnta\@ne
+ \ifnum\xwm@cnta<\numexpr\xwm@pageend+1\relax
+ \cptrepeat
+ }%
+ \xwm@ifpagespec{pagex=}{%
+ \xwm@avoidtwopagespecs
+ \xwm@getpagespec{pagex}%
+ \expandafter\cptfor\xwm@currpages\dofor{%
+ \xwm@addcurrmark{##1}%
+ }%
+ }%
+ \xwm@ifpagespec{firstpage}{%
+ \xwm@avoidtwopagespecs
+ \xwm@getpagespec{firstpage}%
+ \xwm@addcurrmark{1}%
+ }%
+ \xwm@ifpagespec{lastpage}{%
+ \xwm@avoidtwopagespecs
+ \xwm@getpagespec{lastpage}%
+ \xwm@addcurrmark\xwm@lastpage
+ }%
+ \xwm@ifpagespec{allpages}{%
+ \xwm@avoidtwopagespecs
+ \xwm@getpagespec{allpages}%
+ \xwm@cnta\@ne
+ \cptloop
+ \xwm@addcurrmark\xwm@cnta
+ \advance\xwm@cnta\@ne
+ \ifnum\xwm@cnta<\numexpr\xwm@lastpage+1\relax
+ \cptrepeat
+ }%
+ \xwm@ifpagespec{evenpages}{%
+ \xwm@avoidtwopagespecs
+ \xwm@getpagespec{evenpages}%
+ \xwm@cnta\@ne
+ \cptloop
+ \ifodd\xwm@cnta\else
+ \xwm@addcurrmark\xwm@cnta
+ \fi
+ \advance\xwm@cnta\@ne
+ \ifnum\xwm@cnta<\numexpr\xwm@lastpage+1\relax
+ \cptrepeat
+ }%
+ \xwm@ifpagespec{oddpages}{%
+ \xwm@avoidtwopagespecs
+ \xwm@getpagespec{oddpages}%
+ \xwm@cnta\z@pt
+ \cptloop
+ \ifodd\xwm@cnta
+ \xwm@addcurrmark\xwm@cnta
+ \fi
+ \advance\xwm@cnta\@ne
+ \ifnum\xwm@cnta<\numexpr\xwm@lastpage+1\relax
+ \cptrepeat
+ }%
+ % Incomplete concept. To be refined later. Basically, I want to get page
+ % range from section numbers. The work to be done next is actually in
+ % formatting \xwm@seclist and completing \xwm@convertsecstopagerange and
+ % \xwm@convertsecstopagerange@hyphen.
+ \xwm@ifpagespec{section=}{%
+ \xwm@avoidtwopagespecs
+ \xwm@getpagespec{section}%
+ \xwm@convertsecstopagerange\xwm@currpages
+ \xwm@addcurrmark\xwm@currpages
+ }%
+ \xwm@ifpagespec{sections=}{%
+ \xwm@avoidtwopagespecs
+ \xwm@getpagespec{sections}%
+ \xwm@convertsecstopagerange@hyphen\xwm@currpages
+ \xwm@hyphenpagerange\xwm@currpages\xwm@pagestart\xwm@pageend
+ \xwm@cnta\numexpr\xwm@pagestart\relax
+ \cptloop
+ \xwm@addcurrmark\xwm@cnta
+ \advance\xwm@cnta\@ne
+ \ifnum\xwm@cnta<\numexpr\xwm@pageend+1\relax
+ \cptrepeat
+ }%
+ \xwm@ifpagespec{sectionx=}{%
+ \xwm@avoidtwopagespecs
+ \xwm@getpagespec{sectionx}%
+ \xwm@convertsecstopagerange\xwm@currpages
+ \expandafter\cptfor\xwm@currpages\dofor{%
+ \xwm@addcurrmark{##1}%
+ }%
+ }%
+ \if\xwm@pagespecfd\else
+ \xwm@err{No page specifier in watermark attributes:
+ ^^J||\cptoxdetok\xwm@currattrib||}\@ehd
+ \fi
+ \postgroupdef\xwm@currwatermark\endgroup
+}
+% \xwm@convertsecstopagerange{<section.range>}
+\robust@def*\xwm@convertsecstopagerange#1{%
+ \begingroup
+ \def\xwm@tempa{}%
+ \expandafter\cptfor#1\dofor{%
+ \letcstocsn\reserved@a{xwm@sec@page@start@\detokenize{##1}}%
+ \letcstocsn\reserved@b{xwm@sec@page@end@\detokenize{##1}}%
+ \ifx\reserved@a\undefined
+ \def\reserved@a{1}%
+ \fi
+ \ifx\reserved@b\undefined
+ \def\reserved@b{1}%
+ \fi
+ % To do:
+ % To build the page range for each section, loop from section start
+ % (page start) to section end (page end).
+ \xifinsetTF{,\reserved@a,}{,\xwm@tempa,}{}{%
+ \edef\xwm@tempa{%
+ \xwm@tempa\ifx\xwm@tempa\@empty\else,\fi\reserved@a
+ }%
+ }%
+ }%
+ \let#1\xwm@tempa
+ \postgroupdef#1\endgroup
+}
+% \xwm@convertsecstopagerange@hyphen{<section.range>}
+\robust@def*\xwm@convertsecstopagerange@hyphen#1{%
+ \begingroup
+ \def\xwm@tempa{}%
+ \def\csv@do##1{%
+ \letcstocsn\reserved@a{xwm@sec@page@start@\detokenize{##1}}%
+ \ifx\reserved@a\undefined
+ \def\reserved@a{1}%
+ \fi
+ \xifinsetTF{-\reserved@a-}{-\xwm@tempa-}{}{%
+ \edef\xwm@tempa{%
+ \xwm@tempa\ifx\xwm@tempa\@empty\else-\fi\reserved@a
+ }%
+ }%
+ }%
+ \csv@@parse*[-]#1%
+ \let#1\xwm@tempa
+ \postgroupdef#1\endgroup
+}
+\robust@def*\dummywatermark#1{%
+ \ifstrcmpTF{#1}\newwatermark{%
+ \xwm@err
+ {'\string\newwatermark' in front of \string\dummywatermark}%
+ {First comment out or remove '\string\newwatermark'.}%
+ }{%
+ \ifdefboolTF{xwm@usedummymarks}\newwatermark\xwm@dummywatermark
+ #1%
+ }%
+}
+\robust@def*\dummywallpaper#1{%
+ \ifstrcmpTF{#1}\newwallpaper{%
+ \xwm@err
+ {'\string\newwallpaper' in front of \string\dummywallpaper}%
+ {First comment out or remove '\string\newwallpaper'.}%
+ }{%
+ \ifdefboolTF{xwm@usedummymarks}\newwallpaper\xwm@dummywatermark
+ #1%
+ }%
+}
+\robust@def*\xwm@dummywatermark{%
+ \cpt@teststpm{\cpt@testopt\xwm@d@mmywatermark{}}%
+}
+\robust@def*\xwm@d@mmywatermark[#1]#2{}
+\robust@def*\UseDummyWatermarks{\global\xwm@usedummymarkstrue}
+\robust@def*\DiscardDummyWatermarks{\global\xwm@usedummymarksfalse}
+\DiscardDummyWatermarks
+\robust@def*\DiscardAllWatermarks{%
+ \global\let\newwatermark\dummywatermark
+ \global\xwm@usedummymarksfalse
+}
+\robust@def*\xwmsuspendwatermark{\xwm@putmarkfalse}
+\robust@def*\xwmresumewatermark{\xwm@putmarktrue}
+\newletcs\xwmwatermarkoff\xwmsuspendwatermark
+\newletcs\xwmwatermarkon\xwmresumewatermark
+
+\robust@def*\xwm@putbothmarks{%
+ \ifdefboolFT{xwm@putmark}{}{%
+ \ifdefFT\xwm@watermarklist{}\xwm@textpicmark@a
+ \ifdefFT\xwm@wallpaperlist{}\xwm@wallpaper@a
+ }%
+}
+\chardef\xwm@nowatermarksignal\z@pt
+\AtBeginShipout{%
+ \endlinechar13 \catcode13=5\relax
+ \catcode`\ =10\relax
+ \catcode`\\\z@pt
+ \catcode`\{\@ne
+ \catcode`\}\tw@
+ \ifdefboolTF{xwm@printwatermark}{%
+ \let\xwm@watermarklist\xwm@backwmklist
+ \let\xwm@wallpaperlist\xwm@backwalllist
+ \AtBeginShipoutUpperLeft{%
+ \xwm@foregrdfalse
+ \xwm@putbothmarks
+ }%
+ \let\xwm@watermarklist\xwm@forewmklist
+ \let\xwm@wallpaperlist\xwm@forewalllist
+ \AtBeginShipoutUpperLeftForeground{%
+ \xwm@foregrdtrue
+ \xwm@putbothmarks
+ }%
+ }{%
+ \ifnum\xwm@nowatermarksignal<\@ne
+ \edef\xwm@nowatermarksignal{\the\numexpr\xwm@nowatermarksignal+1}%
+ \xwm@info{'printwatermark=false': no watermark printed}%
+ \fi
+ }%
+}
+\robust@def*\xwm@perpagestate{%
+ page=0,
+ pagex={0},
+ pages=0-0,
+ minmark=false,
+ onepageonly=false,
+ prange=false,
+ tmark=false,
+ pmark=false,
+ firstpage=false,
+ allpages=false,
+ oddpages=false,
+ evenpages=false,
+ showpagecenter=false,
+ textmark=DRAFT,
+ textalign=center,
+ boxalign=,
+ textcolor=gray!55,
+ fontfamily=bch,
+ textangle=0,
+ picangle=0,
+ fontsize=1cm,
+ fontseries=b,
+ textscale=1,
+ picscale=1,
+ picheight=,
+ picwidth=,
+ picbb=0 0 100 100,
+ picfileext,
+ picontoptext=false,
+ graphicsoptions={},
+}
+\robust@edef*\xwm@perpagewmkstate{%
+ \expandcsonce\xwm@perpagestate,
+ \unexpanded{%
+ height=\paperwidth,
+ width=\paperheight,
+ textxpos=0,
+ textypos=0,
+ picxpos=\z@pt,
+ picypos=\z@pt,
+ coordunit=mm
+ }%
+}
+\robust@edef*\xwm@perpagewallstate{%
+ \expandcsonce\xwm@perpagestate,
+ \unexpanded{%
+ tilexsize=.5\paperwidth,
+ tileysize=.5\paperheight,
+ wpxoffset=\z@pt,
+ wpyoffset=\z@pt,
+ textmark=,
+ picfile=,
+ tilexoffset=\z@pt,
+ tileyoffset=\z@pt,
+ tileno=4,
+ squaretiles=false
+ }%
+}
+\robust@def*\xwm@textpicmark@a{%
+ \ifcsnullTF\xwm@watermarklist{%
+ \ifdefboolTF{xwm@foregrd}{}{%
+ \ifdefboolFT{xwm@printwatermark}{}{%
+ \ifdefboolTF{xwm@draft}{%
+ \ifdefboolTF{wmk@showpagecenter}{}{%
+ \ifnumcmpFT\c@page=\@ne{}{%
+ \cptexpandargonce{\ltxkeys@setkeys[XWM]{watermark}}%
+ \xwm@perpagewmkstate
+ \wmk@tmarktrue\wmk@pmarkfalse
+ \cptdimdef\wmk@textxpos@a{0.5\paperwidth}%
+ \cptdimdef\wmk@textypos@a{-0.5\paperheight}%
+ \xwm@textpicmark@c
+ \xwm@info{'printwatermark' and 'draft' are 'true'
+ \MsgBrk but no watermark(s): watermark
+ \MsgBrk printed on page 1 only}%
+ }%
+ }%
+ }{%
+ \ifnum\c@page=\@ne
+ \xwm@info{'printwatermark=true' and 'draft=false'
+ \MsgBrk but no watermark(s)}%
+ \fi
+ }%
+ }%
+ }%
+ }{%
+ \xwm@processmarks\xwm@watermarklist{%
+ \xwm@setwatermarkkeys{watermark}{wmk}{##2}%
+ \ifdefboolFT{wmk@minmark}{}\xwm@textpicmark@c
+ }%
+ }%
+}
+\robust@def*\xwm@wallpaper@a{%
+ \ifcsnullTF\xwm@wallpaperlist{}{%
+ \xwm@processmarks\xwm@wallpaperlist{%
+ \xwm@setwatermarkkeys{wallpaper}{wall}{##2}%
+ \ifdefboolFT{wlp@minmark}{}\xwm@wallpaper@c
+ }%
+ }%
+}
+\robust@def*\xwm@setwatermarkkeys#1#2#3{%
+ \ltxkeys@getkeynames{#3}%
+ \cptexpandsecond{%
+ \ltxkeys@setkeys[XWM]{#1}%
+ }{%
+ [\ltxkeys@keynames]{\expandcsnonce{xwm@perpage#2state}}%
+ }%
+ \edef\xwm@currwatermark{\unexpanded{#3}}%
+ \ifblankTF{#3}{}{\ltxkeys@setkeys[XWM]{#1}{#3}}%
+}
+\robust@def*\xwm@processmarks#1#2{%
+ \def\xwm@pr@cessmarks##1##2{%
+ \ifstrcmpTF{##1}{\@nil}{}{%
+ \ifnumcmpTF##1=\c@page{#2}{%
+ \edef#1{\expandcsonce#1\unexpanded{{##1}{##2}}}%
+ }%
+ \xwm@pr@cessmarks
+ }%
+ }%
+ \cptexpandsecondonce{\def#1{}\xwm@pr@cessmarks}{#1}{\@nil}{}%
+}
+\ltxkeys@disablekeys*[XWM]{main}{printwatermark,disablegeometry}
+\BeforeStartOfDocument{%
+ \unless\ifxwm@printwatermark
+ \xwm@info{*** printwatermark=false: no watermark printed}%
+ \fi
+}
+\newcommand\xwm@papercenter{%
+ \color{red}\noindent
+ \xwm@put(0,-0.5\paperheight){\line(1,0){\paperwidth}}%
+ \xwm@put(0.5\paperwidth,0){\line(0,-1){\paperheight}}%
+ \xwm@put(0.5\paperwidth,-0.5\paperheight){\circle{10}}%
+ \normalcolor
+}
+\robust@def*\xwm@textbox#1{%
+ \begingroup
+ \let\nxp\noexpand
+ \let\mcs\cptmakecs
+ \edef\xwm@curralign{\expandcsnonce{#1@textalign}}%
+ \cptexpanded{\endgroup
+ \xwm@put(\mcs{#1@textxpos@a},\mcs{#1@textypos@a}){%
+ \nxp\leavevmode\nxp\@killglue\noindent
+ \nxp\makebox(0,0)[\expandcsnonce{#1@boxalign}]{%
+ \nxp\rotatebox[origin=c]{\mcs{#1@textangle}}{%
+ \nxp\scalebox{\mcs{#1@textscale}}{%
+ \nxp\parbox[c][\mcs{#1@textheight}]%
+ [c]\mcs{#1@textwidth}{%
+ \nxp\color{\mcs{#1@textcolor}}%
+ \cptdimdef\mcs{#1@fontsize@a}{\mcs{#1@fontsize}}%
+ \cptdimdef\mcs{#1@fontsize@a}%
+ {1.5\p@*\mcs{#1@fontsize@a}}%
+ \nxp\fontfamily\mcs{#1@fontfamily}%
+ \nxp\fontseries\mcs{#1@fontseries}%
+ \nxp\fontsize\mcs{#1@fontsize}\mcs{#1@fontsize@a}%
+ \nxp\selectfont
+ \nxp\leavevmode
+ \nxp\begin{\xwm@curralign}%
+ \mcs{#1@textmark}%
+ \nxp\end{\xwm@curralign}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ \@killglue\normalcolor
+}
+% See also \xwmgetpicturesize.
+\robust@def*\xwm@getgrafsize#1{%
+ \ifcsnnullTF{#1@picwidth}{%
+ \ifcsnnullTF{#1@picheight}{%
+ \edef\pic@size{scale=\cptmakecs{#1@picscale}}%
+ }{%
+ \xwm@err{You have supplied picture height
+ but not width}\@ehd
+ }%
+ }{%
+ \ifcsnnullTF{#1@picheight}{%
+ \xwm@err{You have supplied picture width
+ but not height}\@ehd
+ }{%
+ \edef\pic@size{width=\cptmakecs{#1@picwidth},%
+ height=\cptmakecs{#1@picheight}}%
+ }%
+ }%
+}
+\robust@def*\xwm@picmark{%
+ \xwm@findpicfile\wmk@picfile\wmk@picfileext
+ \xwm@getgrafsize{wmk}%
+ \cptpassexpanded{%
+ \setbox\xwm@boxa=\hbox{%
+ \noexpand\includegraphics[\ifxwm@pdf viewport\else
+ bb\fi=\wmk@picbb,\pic@size,clip,\wmk@graphicsoptions,%
+ \xwm@gr@phicsoptions]{\xwm@filefound}%
+ }%
+ }%
+ \cptdimdef\widthofcurrpic{\wd\xwm@boxa}%
+ \cptdimdef\heightofcurrpic{\ht\xwm@boxa}%
+ \cptdimdef\depthofcurrpic{\dp\xwm@boxa}%
+ \xwm@makedraftbox
+ \xwm@put(\wmk@picxpos@a,\wmk@picypos@a){%
+ \rotatebox[origin=c]\wmk@picangle{%
+ \cptexpandsecond{\makebox(0,0)}{[\wmk@boxalign]{%
+ \ifdefboolTF{xwm@draft}{\xwm@draftbox{wmk}}{\copy\xwm@boxa}%
+ }%
+ }%
+ }}%
+}
+\robust@def*\xwm@makedraftbox{%
+ \fboxsep\p@\fboxrule.4\p@
+ \cptdimdef\xwm@tempa{(\ht\xwm@boxa+\dp\xwm@boxa
+ -2\fboxsep-2\fboxrule)/2}%
+ \cptdimdef\xwm@tempb{\wd\xwm@boxa-2\fboxsep-2\fboxrule}%
+ \setbox\@tempboxa\hbox{\color@begingroup
+ \ttfamily\color{red}\Large (draft mode)\color@endgroup}%
+ \setbox\xwm@boxb=\hb@xt@\xwm@tempb{%
+ \xwmstrut\xwm@tempa\z@pt
+ \hb@xt@\xwm@tempb{\hss\unhbox\@tempboxa\hss}%
+ \xwmstrut\z@pt\xwm@tempa
+ }%
+}
+\robust@def*\xwm@draftbox#1{%
+ \begingroup
+ \color{\usename{#1@draftboxcolor}}\fbox{\copy\xwm@boxb}%
+ \endgroup
+}
+\newcommand*\xwm@textpicmark@c{%
+ \xwm@getposition\wmk@textxpos\wmk@textypos\wmk@coordunit
+ \xwm@getposition\wmk@picxpos\wmk@picypos\wmk@coordunit
+ \ifdefboolTF{wmk@picontoptext}{%
+ \ifdefboolFT{wmk@tmark}{}{\xwm@textbox{wmk}}%
+ \ifdefboolFT{wmk@pmark}{}\xwm@picmark
+ }{%
+ \ifdefboolFT{wmk@pmark}{}\xwm@picmark
+ \ifdefboolFT{wmk@tmark}{}{\xwm@textbox{wmk}}%
+ }%
+ \ifdefboolFT{wmk@showpagecenter}{}\xwm@papercenter
+}
+\AtBeginDocument{%
+ \ifdefTF\Ginput@path{%
+ \xdef\xwm@inputpath{\Ginput@path\xwm@inputpath}%
+ \ifxTF\Ginput@path\input@path{}{%
+ \ifdefFT\input@path{}{%
+ \xdef\xwm@inputpath{\input@path\xwm@inputpath}%
+ }%
+ }%
+ }{%
+ \ifdefFT\input@path{}{%
+ \xdef\xwm@inputpath{\input@path\xwm@inputpath}%
+ }%
+ }%
+}
+\new@def*\xwm@inputpath{}
+\robust@def*\watermarkpaths{%
+ \cpt@testst{\cpt@testopt\xwm@w@termarkpaths{}}%
+}
+\robust@def*\xwm@w@termarkpaths[#1]{%
+ \cpt@testpnopt{\xwm@w@term@rkpaths#1}{}
+}
+\robust@def*\xwm@w@term@rkpaths#1(#2)#3{%
+ \cpt@useemptytrue
+ \def\xwm@tempa{#3}%
+ \ifdefboolTF{cpt@st}{%
+ \ifbracedTF{#3}{\xwm@stripallouterbraces{#3}\xwm@tempa}{}%
+ \def\csv@do##1{%
+ \ifbracedTF{##1}{%
+ \xwm@stripallouterbraces{##1}\xwm@tempa
+ }{%
+ \def\xwm@tempa{##1}%
+ }%
+ \cptexpandarg{\grightaddtocs\xwm@inputpath}{{#1\xwm@tempa#2}}%
+ }%
+ \csv@@parse*[,]\xwm@tempa
+ }{%
+ \xifinsetFT{,}{\cptoxdetok\xwm@tempa}{}{%
+ \xwm@err{Input path '#3' contains comma:
+ \MsgBrk Commas can appear only in the argument
+ \MsgBrk of star (*) variant of \string\watermarkpaths}\@ehd
+ }%
+ \def\tsv@do##1{%
+ \ifbracedTF{##1}{%
+ \cptexpandarg{\grightaddtocs\xwm@inputpath}{{#1\@iden##1#2}}%
+ }{%
+ \xwm@err{Input path '##1' needs outer braces}\@ehd
+ }%
+ }%
+ \tsv@@parse*\xwm@tempa
+ }%
+}
+\newletcs\watermarkpath=\watermarkpaths
+\new@def*\xwmifeofTF#1{\ifcondTF\ifeof#1\fi}
+\robust@def*\pdfiffileexistsTF#1{%
+ \ifcondFT\if\pdffilesize{#1}\relax\fi
+}
+\robust@def*\xwmiffileexistsTF#1{%
+ \openin\@inputcheck#1\@space
+ \xwmifeofTF\@inputcheck{%
+ \ifcsnullTF\xwm@inputpath{%
+ \@secondoftwo
+ }{%
+ \xwm@iffileonpath{#1}%
+ }%
+ }{%
+ \closein\@inputcheck
+ \edef\xwm@filefound{#1}%
+ \@firstoftwo
+ }%
+}
+\robust@def*\xwmiffileexistsFT#1{%
+ \xwmiffileexistsTF{#1}\@secondoftwo\@firstoftwo
+}
+\robust@def*\xwm@iffileonpath#1{%
+ \let\xwm@pathfound\@empty
+ \cpt@choicefdfalse
+ \def\tsv@do##1{%
+ \xwm@stripallouterbraces{##1}\xwm@tempa
+ \openin\@inputcheck\xwm@tempa#1\@space
+ \xwmifeofTF\@inputcheck{}{%
+ \let\xwm@pathfound\xwm@tempa
+ \edef\xwm@filefound{\xwm@tempa#1}%
+ \closein\@inputcheck
+ \cpt@choicefdtrue\loopbreak
+ }%
+ }%
+ \tsv@@loop*\xwm@inputpath
+ \ifdefboolTF{cpt@choicefd}%
+}
+\robust@def*\xwm@nofileerr#1#2{%
+ \message{%
+ ^^J! Package xwatermark Error: File '#1.#2' not found.
+ ^^J^^JType x to quit, or <RETURN> to proceed,
+ ^^Jor enter new name (default extension: #2):^^J
+ }%
+ \begingroup
+ \endlinechar-1\global\read-1 to\@gtempa
+ \endgroup
+ \ifcsnullTF\@gtempa{}{%
+ \oifstrcmpTF\@gtempa{x}{%
+ \stop
+ }{%
+ \oifstrcmpTF\@gtempa{X}{%
+ \stop
+ }{%
+ \filename@parse\@gtempa
+ \edef#1{\filename@area\filename@base}%
+ \edef#2{\ifxTF\filename@ext\relax{#2}{\filename@ext}}%
+ \xwm@findpicfile{#1}{#2}%
+ }%
+ }%
+ }%
+}
+\robust@def*\xwm@findpicfile#1#2{%
+ \let\xwm@filefound\@empty
+ \edef\xwm@filegiven{#1.#2}%
+ \ifdefboolTF{xwm@pdf}{%
+ \xwm@f@ndpicfile{#1}{#2}{pdf,png,jpeg,mps}%
+ }{%
+ \xwm@f@ndpicfile{#1}{#2}{eps,ps}%
+ }%
+ \ifcsnullFT\xwm@filefound{}{\xwm@nofileerr{#1}{#2}}%
+}
+\robust@def*\xwm@f@ndpicfile#1#2#3{%
+ \xwm@swafalse
+ \xwmiffileexistsTF{#1.#2}{%
+ \xwm@swbtrue
+ }{%
+ \xwm@swbfalse
+ \def\csv@do##1{%
+ \xwmiffileexistsFT{#1.##1}{}{%
+ \xwm@swatrue\loopbreak
+ }%
+ }%
+ \csv@@loop[,]{#3}%
+ }%
+ \ifdefboolTF{xwm@swb}{}{%
+ \ifdefboolTF{xwm@swa}{%
+ \xwm@warn{File '\xwm@filegiven' doesn't exist
+ \MsgBrk on given path(s) '\xwm@inputpath',
+ \MsgBrk but I have found \xwm@filefound'}%
+ }{%
+ \let\xwm@filefound\@empty
+ \let\xwm@pathfound\@empty
+ }%
+ }%
+}
+\robust@def*\xwm@wallpaper@c{%
+ \ifdefboolTF{wlp@picontoptext}{%
+ \xwm@textwallpaper
+ \xwm@picwallpaper
+ }{%
+ \xwm@picwallpaper
+ \xwm@textwallpaper
+ }%
+ \ifdefboolFT{wlp@showpagecenter}{}\xwm@papercenter
+}
+\robust@def*\xwm@textwallpaper{%
+ \ifdefboolFT{wlp@tmark}{}{%
+ \ifdefboolTF{wlp@squaretiles}\xwm@sqtexttiles\xwm@texttiles
+ }%
+}
+\robust@def*\xwm@picwallpaper{%
+ \ifdefboolFT{wlp@pmark}{}{%
+ \ifdefboolTF{wlp@squaretiles}\xwm@sqpictiles\xwm@pictiles
+ }%
+}
+\robust@def*\xwm@dotiling{\xwm@makedraftbox\xwm@dotiling@a}
+\robust@def*\xwm@dotiling@a{%
+ \let\tiley\wlp@wpyoffset
+ \cptwhiledim\tiley<\paperheight-\wlp@wpyoffset\do{%
+ \cptdimdef\xwm@tempa{-\paperheight+\tiley}%
+ \let\tilex\wlp@wpxoffset
+ \cptwhiledim\tilex<\paperwidth-\wlp@wpxoffset\do{%
+ \leavevmode\@killglue
+ \xwm@put(\tilex,\xwm@tempa){\rotatebox[origin=c]
+ \xwm@currangle{%
+ \cptexpandsecond{\makebox(0,0)}{[\wlp@boxalign]}{%
+ \ifdefboolTF{xwm@draft}{\xwm@draftbox{wlp}}{\copy\xwm@boxa}%
+ }%
+ }}%
+ \cptdimadd\tilex{\wlp@tilexsize+\wlp@tilexoffset}%
+ }%
+ \cptdimadd\tiley{\wlp@tileysize+\wlp@tileyoffset}%
+ }%
+}
+\robust@def*\xwm@toofewtiles#1{%
+ \ifnum\numexpr#1<4\relax
+ \xwm@err{Too few square wallpapers '#1';
+ \MsgBrk minimum expected: 4}\@ehd
+ \fi
+}
+\robust@def*\xwm@texttiles{%
+ \setbox\xwm@boxa=\hbox{%
+ \resizebox\wlp@tilexsize\wlp@tileysize
+ {\color{\wlp@textcolor}\wlp@textmark}%
+ }%
+ \let\xwm@currangle\wlp@textangle
+ \xwm@dotiling
+}
+\robust@def*\xwm@sqtexttiles{%
+ \xwm@toofewtiles\wlp@tileno
+ \cptdimdef\wlp@tilexsize{\paperwidth/\wlp@tileno}%
+ \let\wlp@tileysize\wlp@tilexsize
+ \setbox\xwm@boxa=\hbox{%
+ \resizebox\wlp@tilexsize\wlp@tileysize
+ {\color{\wlp@textcolor}\wlp@textmark}%
+ }%
+ \let\xwm@currangle\wlp@textangle
+ \xwm@dotiling
+}
+\robust@def*\xwm@tilepicbox{%
+ \xwm@findpicfile\wlp@picfile\wlp@picfileext
+ \setbox\xwm@boxa=\hbox{%
+ \cptexpandsecond\includegraphics{%
+ [\ifxwm@pdf viewport\else bb\fi=\wlp@picbb,
+ width=\the\dimexpr\wlp@tilexsize,height=
+ \the\dimexpr\wlp@tileysize,clip,
+ \wlp@graphicsoptions,\xwm@gr@phicsoptions]%
+ }{\xwm@filefound}%
+ }%
+}
+\robust@def*\xwm@pictiles{%
+ \xwm@tilepicbox
+ \let\xwm@currangle\wlp@picangle
+ \xwm@dotiling
+}
+\robust@def*\xwm@sqpictiles{%
+ \xwm@toofewtiles\wlp@tileno
+ \cptdimdef\wlp@tilexsize{\paperwidth/\wlp@tileno}%
+ \let\wlp@tileysize\wlp@tilexsize
+ \xwm@tilepicbox
+ \let\xwm@currangle\wlp@picangle
+ \xwm@dotiling
+}
+\robust@def*\xwmsetbox#1#2#3#4{%
+ \begingroup
+ \setbox1\hbox{\color@begingroup#4\color@endgroup}%
+ \setbox\@tempboxa\hbox to#1\textwidth{%
+ \setbox0\vtop{%
+ \ignorespaces#4\vskip\dimexpr#3\textheight/2\relax
+ }%
+ \cptdimdef\x{(#1\textwidth-\wd1)/2\relax}%
+ \hskip\x\box0\hskip-\x
+ }%
+ \ht\@tempboxa=\dimexpr#2\textheight/2\relax
+ \noindent\box\@tempboxa
+ \endgroup
+}
+\robust@def*\xwmstrut#1#2{%
+ \relax\unskip
+ \ifhmode\nobreak\fi
+ \begingroup
+ \setbox\@tempboxa=\hbox{\vrule\@height#1\@depth#2\@width\z@pt}%
+ \ifmmode\copy\@tempboxa\else\unhcopy\@tempboxa\fi
+ \endgroup
+}
+\robust@def*\xwmgetpicturesize{\cpt@testopt\xwm@getpicsize{}}
+\robust@def*\xwm@getpicsize[#1]#2{%
+ \begingroup
+ \edef\Ginput@path{%
+ \usecsifdef\Ginput@path\usecsifdef\xwm@inputpath
+ \usecsifdef\input@path
+ }%
+ \setbox\xwm@boxa=\hbox{\includegraphics[#1]{#2}}%
+ % See also \widthofcurrpic.
+ \cptdimdef\widthofpic{\wd\xwm@boxa}%
+ \cptdimdef\heightofpic{\ht\xwm@boxa}%
+ \cptdimdef\depthofpic{\dp\xwm@boxa}%
+ \cptdimdef\totalheightofpic{\ht\xwm@boxa+\dp\xwm@boxa}%
+ \let\\\cpt@csexit
+ \cptexpanded{\endgroup
+ \\\widthofpic\\\heightofpic\\\depthofpic\\\totalheightofpic
+ }%
+}
+% #1=optional text to be printed as watermark
+% #2=sundry fixed keys
+% #3=variable keys, separated by semicolon (set-1;...;set-n)
+% Each set-i has the syntax <key1=val1,...,keyn=valn>
+\robust@def*\repeatwatermarks{%
+ \cpt@teststpm{\cpt@testopt\xwm@repeatwatermarks{}}%
+}
+\robust@def\xwm@repeatwatermarks[#1]#2#3{%
+ \edef\cpt@tempa{\csv@@loop\ifcpt@st*\fi}%
+ \def\csv@do##1{%
+ \ifblankTF{##1}{}{\newwatermark[#2,##1]{#1}}%
+ }%
+ \ifdefboolTF{cpt@pm}{}{\cpt@tempa[;]{#3}}%
+}
+\ltxkeys@definekeys*[XWM]{boxedminipage}[xwmbmp@]{%
+ width=\textwidth;
+ textcolor=black;
+ framecolor=black;
+ framesep=3\p@;
+ framerule=0.4\p@;
+ height=\z@pt;
+ depth=\z@pt;
+ textalign=justified/\xwm@settextalign\xwmbmp@textalign;
+ innerpos=c;
+}
+\robust@def*\xwmboxedminipage{\cpt@testopt\xwm@boxedminipage{}}
+\begingroup
+\catcode`\|=\catcode`\%
+\robust@gdef*\xwm@boxedminipage[#1]{%
+ \ltxkeys@launchkeys[XWM]{boxedminipage}{#1}%
+ \xwm@stripallouterbracesincs\xwmbmp@width
+ \xwm@stripallouterbracesincs\xwmbmp@textcolor
+ \leavevmode\@pboxswfalse
+ \begingroup
+ \color{\xwmbmp@framecolor}%
+ \xifstrcmpTF\xwmbmp@innerpos{b}{%
+ \vbox
+ }{%
+ \xifstrcmpTF\xwmbmp@innerpos{t}{%
+ \vtop
+ }{%
+ \ifdefboolTF{mmode}{%
+ \vcenter
+ }{%
+ \@pboxswtrue $\vcenter |$
+ }%
+ }%
+ }%
+ {\ifnum`}=0\fi
+ \hsize\xwmbmp@width\relax
+ \hrule\@height\xwmbmp@framerule
+ \hbox{\ifnum`}=0\fi
+ \vrule\@width\xwmbmp@framerule
+ \kern\xwmbmp@framesep\relax
+ \vbox{\ifnum`}=0\fi
+ \vskip\xwmbmp@framesep\relax
+ \cptdimdef\reserved@a{\hsize-(\xwmbmp@framerule+\xwmbmp@framesep)*2}%
+ \hsize\reserved@a\relax
+ \textwidth\reserved@a\relax
+ \columnwidth\reserved@a\relax
+ \@parboxrestore
+ \c@mpfootnote\z@pt
+ \let\@footnotetext\@mpfootnotetext
+ \let\@listdepth\@mplistdepth\@mplistdepth\z@pt
+ \@minipagerestore\@minipagetrue
+ \everypar{\global\@minipagefalse\everypar{}}%
+ \leavevmode\@killglue
+ \xwmstrut\xwmbmp@height\z@pt
+ \noindent\color{\xwmbmp@textcolor}%
+ \begin\xwmbmp@textalign
+ \ignorespaces
+}
+\robust@gdef*\endxwmboxedminipage{%
+ \end\xwmbmp@textalign
+ \xwmstrut\z@pt\xwmbmp@depth
+ \ifvoid\@mpfootins\else
+ \vskip\skip\@mpfootins\footnoterule\unvbox\@mpfootins
+ \fi
+ \vskip\xwmbmp@framesep\relax
+ \ifnum`{=0\fi}%
+ \kern\xwmbmp@framesep\relax
+ \vrule\@width\xwmbmp@framerule
+ \ifnum`{=0\fi}%
+ \hrule\@height\xwmbmp@framerule
+ \ifnum`{=0\fi}%
+ \if@pboxsw\m@th$\fi |$
+ \leavevmode\@killglue
+ \endgroup
+ \@ignoretrue
+}
+\endgroup
+
+\ltxkeys@definekeys*[XWM]{minipage}[xwmmp@]{%
+ width=\paperwidth;
+ textcolor=black;
+ framecolor=black;
+ framesep=3\p@;
+ framerule=0.4\p@;
+ height=\z@pt;
+ depth=\z@pt;
+ textalign=center/\xwm@settextalign\xwmmp@textalign;
+ text-align=center/\setaliaskey{textalign};
+ framebox=true;
+ insertframe=true/\setaliaskey{framebox};
+ insert-frame=true/\setaliaskey{framebox};
+}
+\robust@def*\xwmminipage{\cpt@testopt\xwm@minipage{}}
+\robust@def\xwm@minipage[#1]#2{%
+ \ltxkeys@launchkeys[XWM]{minipage}{#1}%
+ \xwm@stripallouterbracesincs\xwmmp@width
+ \xwm@stripallouterbracesincs\xwmmp@textcolor
+ \xwm@pushboxframe
+ \fboxsep\xwmmp@framesep\fboxrule\xwmmp@framerule\relax
+ \cptdimdef\xwmmp@boxwidth{\xwmmp@width-2\fboxsep-2\fboxrule}%
+ \def\xwm@printbox{%
+ \color{\xwmmp@framecolor}%
+ \ifxwmmp@framebox\fbox{\fi
+ \usebox\xwm@boxa
+ \ifxwmmp@framebox}\fi
+ \xwm@popboxframe
+ }%
+ \@killglue\noindent
+ \begin{lrbox}\xwm@boxa
+ \@killglue\noindent
+ \begin{minipage}[c][\height][s]\xwmmp@boxwidth
+ \@killglue\noindent
+ \xwmstrut\xwmmp@height\z@pt
+ \begin\xwmmp@textalign
+ \textcolor{\xwmmp@textcolor}{#2}\relax
+ \end\xwmmp@textalign
+ \xwmstrut\z@pt\xwmmp@depth
+ \end{minipage}%
+ \@ignoretrue\@killglue
+ \end{lrbox}%
+ \@ignoretrue\@killglue\noindent
+ \xwm@printbox
+ \normalcolor
+ \@ignoretrue
+}
+\ltxkeys@definekeys*[XWM]{colorbox}[xwmcbx@]{%
+ width=\textwidth;
+ height=\z@pt;
+ depth=\z@pt;
+ framebox=true;
+ insertframe=true/\setaliaskey{framebox};
+ insert-frame=true/\setaliaskey{framebox};
+ textcolor=black;
+ fillcolor=white;
+ outerframecolor=black;
+ outer-frame-color=black/\setaliaskey{outerframecolor};
+ innerframecolor=black;
+ inner-frame-color=black/\setaliaskey{innerframecolor};
+ framesep=3\p@;
+ framerule=0.4\p@;
+ textalign=center/\xwm@settextalign\xwmcbx@textalign;
+ align=center/\setaliaskey{textalign};
+ text-align=center/\setaliaskey{textalign};
+}
+\robust@def*\xwmcolorbox{\cpt@testopt\xwm@colorbox{}}
+\robust@def\xwm@colorbox[#1]#2{%
+ \ltxkeys@launchkeys[XWM]{colorbox}{#1}%
+ \xwm@pushboxframe
+ \fboxsep\xwmcbx@framesep\fboxrule\xwmcbx@framerule\relax
+ \removelastskip\noindent
+ \fcolorbox{\xwmcbx@outerframecolor}{\xwmcbx@fillcolor}{%
+ \cptexpandsecond\xwmminipage{[textalign=\xwmcbx@textalign,
+ framesep=\xwmcbx@framesep,framerule=\xwmcbx@framerule,
+ framecolor=\xwmcbx@innerframecolor,width=\xwmcbx@width,
+ height=\xwmcbx@height,depth=\xwmcbx@depth,
+ textcolor=\xwmcbx@textcolor,framebox=true]}{#2}%
+ }%
+ \xwm@popboxframe
+ \removelastskip
+ \normalcolor
+}
+\ltxkeys@definekeys*[XWM]{makecolorbox}[xwmmbx@]{%
+ width=\textwidth;
+ height=\z@pt;
+ depth=\z@pt;
+ framebox=true;
+ textcolor=black;
+ fillcolor=white;
+ outerframecolor=black;
+ outer-frame-color=black/\setaliaskey{outerframecolor};
+ innerframecolor=black;
+ inner-frame-color=black/\setaliaskey{innerframecolor};
+ framesep=3\p@;
+ framerule=0.4\p@;
+ textalign=center/\xwm@settextalign\xwmmbx@textalign;
+ align=center/\setaliaskey{textalign};
+ text-align=center/\setaliaskey{textalign};
+ boxalign=center/\xwm@settextalign\xwmmbx@boxalign;
+}
+\robust@def*\makecolorbox{\cpt@testopt\xwm@makecolorbox{}}
+\robust@def*\xwm@makecolorbox[#1]#2{%
+ \ltxkeys@launchkeys[XWM]{makecolorbox}{#1}%
+ \begin{\xwmmbx@boxalign}%
+ \makebox[\z@pt][c]{%
+ \xwmstrut\xwmmbx@height\z@pt
+ \xwm@pushboxframe
+ \fboxsep\xwmmbx@framesep\fboxrule\xwmmbx@framerule\relax
+ \fcolorbox{\xwmmbx@outerframecolor}{\xwmmbx@fillcolor}{%
+ \cptexpandsecond\xwmminipage{[textalign=\xwmmbx@textalign,
+ framesep=\xwmmbx@framesep,framerule=\xwmmbx@framerule,
+ framecolor=\xwmmbx@innerframecolor,width=\xwmmbx@width,
+ height=\xwmmbx@height,depth=\xwmmbx@depth,
+ textcolor=\xwmmbx@textcolor,framebox=
+ \thebool@normal{xwmmbx@framebox}]}{#2}%
+ }%
+ \xwm@popboxframe
+ \xwmstrut\z@pt\xwmmbx@depth
+ }%
+ \end{\xwmmbx@boxalign}%
+ \removelastskip
+ \normalcolor
+}
+\ltxkeys@definekeys*[XWM]{shade}[xwmshd@]{%
+ width=\hsize;
+ leftadjust=\z@pt;
+ indent=\z@pt;
+ fillcolor=gray!75;
+ framecolor=black;
+ framesep=3\p@;
+ framerule=0.4\p@;
+ height=\z@pt;
+ depth=\z@pt;
+ textalign=justified/\xwm@settextalign\xwmshd@textalign;
+ textcolor=black
+}
+\robust@def*\xwm@frameshade{%
+ \def\FrameCommand{%
+ \clubpenalty\@m\widowpenalty\@m
+ \noindent\kern\xwmshd@leftadjust
+ \fboxrule\xwmshd@framerule\fboxsep\xwmshd@framesep\relax
+ \fcolorbox{\xwmshd@framecolor}{\xwmshd@fillcolor}%
+ }%
+ \parindent\z@pt\finalhyphendemerits\z@pt
+ \cptdimdef\xwm@tempa{\xwmshd@width-(\xwmshd@framesep
+ +\xwmshd@framerule+\xwmshd@indent)}%
+ \color{\xwmshd@textcolor}%
+ \MakeFramed{%
+ \hsize\xwm@tempa\FrameRestore\@setminipage
+ }%
+ \xwmstrut\xwmshd@height\z@pt
+ \begin\xwmshd@textalign
+}
+\robust@def*\xwmshade{\cpt@testopt\xwm@shade{}}
+\robust@def*\xwm@shade[#1]{%
+ \ltxkeys@launchkeys[XWM]{shade}{#1}%
+ \xwm@frameshade
+}
+\robust@def*\endxwmshade{%
+ \end\xwmshd@textalign
+ \xwmstrut\z@pt\xwmshd@depth
+ \par\unskip\endMakeFramed\@ignoretrue
+}
+\ltxkeys@definekeys*[XWM]{fadingtext}[fad@]{%
+ textcolor=white;
+ boxcolor=black;
+ scale=1;
+ letterwidth=5mm;
+ barcolor=yellow;
+ height=\z@pt;
+ depth=\z@pt
+}
+\newcommand*\xwmfadingtext[2][]{%
+ \ltxkeys@launchkeys[XWM]{fadingtext}{#1}%
+ \begingroup
+ \@tempcnta\z@pt
+ \def\siso@do##1{%
+ \advance\@tempcnta\@ne
+ \csn@xdef{fade@\romannumeral\@tempcnta}{\cpttrimspace{##1}}%
+ }%
+ \siso@@loop{#2}%
+ \def\colbox##1{%
+ \color{.!80}%
+ \colorbox{.}{{%
+ \color{\fad@textcolor!\the\numexpr100-\@tempcnta/\icol*10\relax}%
+ \ifnum\icol=\@ne
+ \kern\dimexpr\fad@letterwidth/50\relax
+ \fi
+ \makebox[\fad@letterwidth]{##1}%
+ \ifnum\icol<\@tempcnta
+ \scalebox\fad@scale{\textcolor{\fad@barcolor}{$|$}}%
+ \else
+ \scalebox\fad@scale{\phantom{$|$}}%
+ \kern\dimexpr-\fad@letterwidth/10\relax
+ \fi
+ }}%
+ }%
+ \color{\fad@boxcolor}%
+ \chardef\icol\z@pt
+ \cptdotimes\@tempcnta{%
+ \cptpushnumber\icol
+ \colbox{\scalebox\fad@scale
+ {\xwmstrut\fad@height\fad@depth
+ \usename{fade@\romannumeral\icol}}}%
+ }%
+ \endgroup
+}
+\cptonlypreamble{%
+ \dummypagenos,\fancypagenos,
+ \FancyPageNumbers,\NoFancyPageNumbers
+}
+\newcommand*\dummypagenos[1][]{}
+\newcommand*\fancypagenos[1][]{%
+ \ifblankTF{#1}{}{\AtBeginDocument{\xwm@fancypagenos{#1}}}%
+}
+\robust@def*\NoFancyPageNumbers{%
+ \AfterStartOfDocument{\global\pgn@showpagenosfalse}%
+}
+\robust@def*\FancyPageNumbers{%
+ \AfterStartOfDocument{\global\pgn@showpagenostrue}%
+}
+\robust@def*\xwm@fancypagenos#1{%
+ \ltxkeys@launchkeys[XWM]{fancypagenos}{#1}%
+ \xwm@getposition\pgn@textxpos\pgn@textypos\pgn@coordunit
+ \ifnumcmpFT\c@page=\@ne{}{%
+ \AfterStartOfDocument{\thispagestyle{\xwm@frontpagestyle}}%
+ }%
+ \pagestyle{fancyplain}%
+ \fancyhf{}%
+ \cfoot{\pgn@cfoot}\rfoot{\pgn@rfoot}%
+ \lfoot{\pgn@lfoot}\chead{\pgn@chead}%
+ \rhead{\pgn@rhead}\lhead{\pgn@lhead}%
+ \ifpgn@showheadrule
+ \def\headrule{{%
+ \color{\pgn@headrulecolor}%
+ \hrule\@height\pgn@headruleheight\@depth\pgn@headruledepth
+ \@width\headwidth\vspace{\pgn@headrulesep}%
+ \hrule\@height\pgn@headruleheight\@depth\pgn@headruledepth
+ \@width\headwidth\vspace{-\pgn@headrulesep}%
+ }}%
+ \else
+ \let\headrule\relax
+ \fi
+ \ifpgn@showfootrule
+ \def\footrule{{%
+ \color{\pgn@footrulecolor}%
+ \hrule\@height\pgn@footruleheight\@depth\pgn@footruledepth
+ \@width\headwidth\vspace{\pgn@footrulesep}%
+ \hrule\@height\pgn@footruleheight\@depth\pgn@footruledepth
+ \@width\headwidth\vspace{\pgn@footrulesep}%
+ }}%
+ \else
+ \let\footrule\relax
+ \fi
+ \xwm@gethfoffset\pgn@hfoffsetleft\pgn@hfoffsetright
+ \fancyhfoffset[R,L]\xwm@hfoffset
+ \AtBeginShipout{%
+ \ifdefboolTF{pgn@sendtoback}{%
+ \AtBeginShipoutUpperLeft{%
+ \xwm@f@ncyp@genos
+ }%
+ }{%
+ \AtBeginShipoutUpperLeftForeground{%
+ \xwm@f@ncyp@genos
+ }%
+ }%
+ }%
+}
+\cptnewswitch{xwm@fancy}
+\robust@def*\xwm@f@ncypagenos{%
+ \def\pgn@textmark{%
+ \begingroup
+ \fboxrule\pgn@framerule\fboxsep\pgn@framesep\relax
+ \pgn@format{\normalfont\pgn@style}%
+ \endgroup
+ }%
+ \cptswitchtrue{xwm@fancy}%
+ \xwm@textbox{pgn}%
+ \cptswitchfalse{xwm@fancy}%
+}
+\robust@def*\xwm@f@ncyp@genos{%
+ \ifboolFT{pgn@showpagenos}{}{%
+ \ifnumcmpTF\c@page=\@ne{%
+ \ifdefboolTF{pgn@showonpageone}\xwm@f@ncypagenos\relax
+ }{%
+ \xwm@f@ncypagenos
+ }%
+ }%
+}
+\robust@def*\xwm@gethfoffset#1#2{%
+ \begingroup
+ \def\temp@err{%
+ \xwm@err{Only digits (without units) are allowed\MsgBrk
+ in the values of 'hfoffsetleft' and 'hfoffsetright'}\@ehd
+ }%
+ \xifblankTF{#1}{}{%
+ \xxwmifitemsinTF\xwm@allowedcoordunits{#1}\temp@err{}%
+ }%
+ \xifblankTF{#2}{}{%
+ \xxwmifitemsinTF\xwm@allowedcoordunits{#2}\temp@err{}%
+ }%
+ \def\xwm@tempc##1##2{%
+ \xifblankTF{##1}{\def##2{1}}{\def##2{##1}}%
+ \ifdim##2\p@>\p@\def##2{1}\fi
+ }%
+ \xwm@tempc{#1}\xwm@tempa\xwm@tempc{#2}\xwm@tempb
+ \def\xwm@tempc##1{%
+ \xifinsetFT{.}{##1}{}{%
+ \def\xwm@tempd####1.####2\xwm@nil{\def##1{.####2}}%
+ \cptexpandsecond\xwm@tempd{##1}\xwm@nil
+ }%
+ }%
+ \xwm@tempc\xwm@tempa\xwm@tempc\xwm@tempb
+ \cptpassexpanded{%
+ \endgroup\def\noexpand\xwm@hfoffset{%
+ \the\dimexpr\xwm@tempa\marginparsep+%
+ \xwm@tempb\marginparwidth\relax
+ }%
+ }%
+}
+\robust@redef*\Gin@ii[#1]#2{%
+ \ifstrcmpTF{[}{#2}{%
+ \Gin@iii[#1][%
+ }{%
+ \begingroup
+ \@tempswafalse
+ \toks@{\Ginclude@graphics{#2}}%
+ \ltxkeys@setkeys{Gin}{#1}%
+ \Gin@esetsize
+ \the\toks@
+ \endgroup
+ }%
+}
+\robust@redef*\Grot@box@kv[#1]#2#3{%
+ \@begin@tempboxa\hbox{#3}%
+ \Grot@x\dimexpr\width/2\relax
+ \Grot@y\dimexpr(\height-\depth)/2\relax
+ \ltxkeys@setkeys{Grot}{#1}%
+ \setbox\z@pt\box\@tempboxa
+ \Grot@setangle{#2}%
+ \Grot@box
+ \@end@tempboxa
+}
+
+\endinput
+
+%%% End of file xwatermark.sty %%%