Closed callegar closed 12 years ago
% \iffalse meta-comment
%
% Copyright 2006
% Sergio Callegari sergio.callegari@gmail.com
%
% ---------------------------------------------
% This file is part of the draftwatermark package,
% a contribution to the LaTeX2e system.
% ---------------------------------------------
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License, either version 1.3 of this licence, or
% any later version. The latest version of this license is at
% http://www.latex-project.org/lppl.txt and version 1.3 is part
% of all distributions of LaTeX version 2003/06/01 or later.
%
% This work has the LPPL maintenance status "author-maintained".
%
% This program consists of the files listed in the README file
% included in the package.
%
%<_driver>
\documentclass{ltxdoc}
\usepackage{mathptmx, helvet, courier}
\EnableCrossrefs
\DoNotIndex{\def,\gdef,\let,\NeedsTeXFormat,\newcommand}
\DoNotIndex{\ProvidesPackage,\endinput}
\DoNotIndex{\box,\dp,\fontsize,\ifx,\else,\fi}
\DoNotIndex{\hbox,\hss,\makebox,\moveleft,\newif,\newlength}
\DoNotIndex{\ProcessOptions,\vbox,\vss,\z@}
\CodelineIndex
\RecordChanges
\begin{document}
\DocInput{draftwatermark.dtx}
\end{document}
%
%
% \fi
%
% \CheckSum{96}
%
% \def\filename{draftwatermark.dtx}
% \def\fileversion{1.0}
% \def\filedate{2006/06/30}
% \def\docdate{2006/06/30}
%
% \newcommand{\Lpack}[1]{\textsf {#1}} ^^A typeset a package
% \newcommand{\Lopt}[1]{\textsf {#1}} ^^A typeset an option
% \newcommand{\file}[1]{\texttt {#1}} ^^A typeset a file
% \newcommand{\Lcount}[1]{\textsl {\small#1}} ^^A typeset a counter
% \newcommand{\pstyle}[1]{\textsl {#1}} ^^A typeset a pagestyle
% \newcommand{\Lenv}[1]{\texttt {#1}} ^^A typeset an environment
%
% \title{The \Lpack{draftwatermark} package\thanks{This file
% (\texttt{\filename}) has version number \fileversion, last
% revised \filedate.}}
%
% \author{%
% Sergio Callegari\thanks{Sergio Callegari can be reached at
% \texttt{sergio.callegar at gmail dot com}}}
%
% \date{\docdate}
%
% \maketitle
%
% \begin{abstract}
% The \Lpack{draftwatermark} package extends \LaTeX\ providing a
% means to add a textual, light gray watermark on every page or on
% the first page of a document. Typical usage may consist in writing
% words such as \emph{DRAFT} or \emph{CONFIDENTIAL} across document
% pages. The package may remind in some sense \Lpack{draftcopy} by
% Dr. Juergen Vollmer, but its implementation is much lighter (as
% the reduced code footprint shows) and does not rely on postscript
% specials, making the package fully compatible with pdf\LaTeX. The
% package depends on \Lpack{everypage} by the same author.
% \end{abstract}
%
% \section{Introduction}
%
% This program extends \LaTeX\ providing a means to add a textual,
% light gray watermark on every page or on the first page of a
% document. Typical usage may consist in writing words such as
% \emph{DRAFT} or \emph{CONFIDENTIAL} across document pages. Typical
% usage may consist in writing words such as \emph{DRAFT} or
% \emph{CONFIDENTIAL} across document pages. The package may remind in
% some sense \Lpack{draftcopy} by Dr. Juergen Vollmer, but its
% implementation differs by a few points:
% \begin{enumerate}
% \item Code footprint is much, much smaller (about one order of
% magnitude smaller), although this does not mean much on modern
% computers.
% \item There is no use of Postscript specials or other
% driver-dependent tricks, so the package should be compatible with
% any output driver and with pdf\LaTeX\ in particular. Lack of
% compatibility with pdf\LaTeX\ in these days is the biggest pitfall
% of \Lpack{draftcopy} and was the first motivation for writing
% \Lpack{draftwatermark}.
% \item Reduced code footprint comes at some price with regards to
% features. Many features of \Lpack{draftcopy} are not supported here,
% most notably \Lpack{draftwatermark} has:
% \begin{itemize}
% \item No automatic selection of the watermark text to use, depending on
% the language, using translations of the word DRAFT''. However, % this is no big loss, since there is a possibility to set the text % to use explicitly, and this leaves the freedom to chose whatever % text one happens to prefer, including things that have nothing to % do with the word
DRAFT'' (e.g., CONFIDENTIAL'',
FOR YOUR
% EYES ONLY'', etc.).
% \item No possibility to put the watermark at the bottom of the page.
% Watermarks are placed at the center of the page.
% \item No possibility to selectively activate or disactivate
% operation depending on the global draft and final options.
% No possibility to watermark only the first \emph{two} pages of a
% document. However, it is possible to watermark only the first.
% \end{itemize}
% Other features available as options in \Lpack{draftcopy} (e.g., the
% possibility of time-stamping the watermark text) can qbe obtained
% working on the watermark text itself.
% \item Dependence on the \Lpack{everypage} package by the same
% author.
% \end{enumerate}
%
% \section{User interface}
% When loaded, \Lpack{draftwatermark} sets up a number of defaults
% (detailed later and modifiable by specific commands) and immediately
% becomes active. If loaded as
% \begin{quote}
% |\usepackage{draftwatermark}|
% \end{quote}
% the package sets up itself to put a background text on every
% page. Alternatively, if loaded as
% \begin{quote}
% |\usepackage[firstpage]{draftwatermark}|
% \end{quote}
% the package sets up itself to put a background text only on the
% first page.
%
% \subsection{Default behavior and commands to modify it}
% The package defaults are illustrated in table~\ref{tbl:defaults}.
%
% \begin{table}[ht]
% \begin{center}
% \DeleteShortVerb{|}
% \begin{tabular}{|p{0.6\linewidth}|c|}
% \hline
% \MakeShortVerb{|}
% Behavior & Default value\
% \hline\hline
% Angle at which the watermark text is drawn & 45�\
% Lightness of the watermark text (1=white, 0=black) & 0.8\
% Font size of the watermark text & 5$\;$cm\
% Scaling of the watermark text & 1.2\
% Watermark text & DRAFT\
% \hline
% \end{tabular}
% \end{center}
% \caption{Package defaults.}
% \label{tbl:defaults}
% \end{table}
%
% With reference to the defaults, note that:
% \begin{enumerate}
% \item the watermark text is always in gray;
% \item the watermark font size cannot exceed a maximum value that is
% about 5$\;$cm.
% \item the watermark scale can be any value. Using the default, the
% word DRAFT'' at 45� uses up all the space on an A4 paper. To have % a good looking large text, it is better to enlarge the font size as % much as possibile, rather than using a small font size and pumping % up the scale. % \end{enumerate} % % \DescribeMacro{\SetWatermarkAngle} % \DescribeMacro{\SetWatermarkLightness} % \DescribeMacro{\SetWatermarkFontSize} % \DescribeMacro{\SetWatermarkScale} % \DescribeMacro{\SetWatermarkText} % Table~\ref{tbl:commands} illustrates the commands used to modify the % package behaviour. Note that there is exactly one command per % function and that every command takes a single argument. % % \begin{table}[ht] % \begin{center} % \DeleteShortVerb{\|} % \begin{tabular}{|p{0.4\linewidth}|l|} % \hline % \MakeShortVerb{\|} % Behavior & Command affecting it\\ % \hline\hline % Angle at which the watermark text is drawn & % |\SetWatermarkAngle{|\meta{real}|}|\\ % Lightness of the watermark text (1=white, 0=black) & % |\SetWatermarkLightness{|\meta{real}|}|\\ % Font size of the watermark text & % |\SetWatermarkFontSize{|\meta{length}|}|\\ % Scaling of the watermark text & % |\SetWatermarkScale{|\meta{real}|}|\\ % Watermark text & % |\SetWatermarkText{|\meta{text}|}|\\ % \hline % \end{tabular} % \end{center} % \caption{Commands affecting the package behavior.} % \label{tbl:commands} % \end{table} % % Observe that the |\SetWatermarkFontSize| command takes a length % rather than a simple number. Also observe that multiline textual % watermarks can easily be obtained by the |\shortstack| command and % that there is the possibility of using an image rather than a text % (e.g., a
caution, work in progress'' sign, etc.).
%
% Note that once the package is loaded, there is no way to stop it.
% In order to have textual watermarks that appear only when
% specific conditions are met, conditionals must be included in the
% watermarks.
%
% Eventually consider that no special assumption is made on the
% \LaTeX\ output driver, so \Lpack{draftwatermark} should work equally
% well with \LaTeX\ and pdf\LaTeX. Furthermore, the package should
% work equally well with the dvi, dvips, etc.\@ output drivers.
% Obviously, the final compatibility with the different output drivers
% depends on the actual code that is placed in the textual watermark.
%
% \StopEventually {}
%
% \section{Implementation}
%
% Announce the name and version of the package, which requires
% \LaTeXe.
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{draftwatermark}%
[2006/06/30 1.0 Put a gray textual watermark on document pages]
% \end{macrocode}
%
% Require the needed packages. Note that if these are pre-loaded
% before loading \Lpack{draftwatermark}, using suitable options to
% preset behavior for a desired output driver, this is used also
% here.
% \begin{macrocode}
\RequirePackage{everypage}
\RequirePackage{graphicx}
\RequirePackage{color}
% \end{macrocode}
%
% \begin{macro}{\if@sc@wm@first}
% Set up the conditional to store whether a watermark is needed only
% on the first page or everywhere.
% \begin{macrocode}
\newif\if@sc@wm@first
\@sc@wm@firstfalse
% \end{macrocode}
% \end{macro}
%
% Declare the package options.
% \begin{macrocode}
\DeclareOption{firstpage}{%
\@sc@wm@firsttrue}
\ProcessOptions
% \end{macrocode}
%
% \begin{macro}{\sc@wm@angle}
% \begin{macro}{\sc@wm@lightness}
% \begin{macro}{\sc@wm@scale}
% \begin{macro}{\sc@wm@fontsize}
% \begin{macro}{\sc@wm@text}
% Set up the package defaults.
% \begin{macrocode}
\newlength\sc@wm@fontsize
%% defaults
\def\sc@wm@angle{45}
\def\sc@wm@lightness{0.8}
\def\sc@wm@scale{1}
\setlength\sc@wm@fontsize{5cm}
\def\sc@wm@text{DRAFT}
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\SetWatermarkAngle}
% \begin{macro}{\SetWatermarkLightness}
% \begin{macro}{\SetWatermarkFontSize}
% \begin{macro}{\SetWatermarkScale}
% \begin{macro}{\SetWatermarkText}
% Set up the commands to modify the behavior.
% \begin{macrocode}
\newcommand\SetWatermarkAngle[1]{%
\def\sc@wm@angle{#1}}
\newcommand\SetWatermarkLightness[1]{%
\def\sc@wm@lightness{#1}}
\newcommand\SetWatermarkFontSize[1]{%
\setlength\sc@wm@fontsize{#1}}
\newcommand\SetWatermarkScale[1]{%
\def\sc@wm@scale{#1}}
\newcommand\SetWatermarkText[1]{%
\def\sc@wm@text{#1}}
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
%\begin{macro}{\sc@watermark}
% The command to draw the watermark\ldots This assumes an origin in
% the left top corner of the page (and also assumes that |\paperwidth|
% and |\paperheight| are set correctly. There is no need to worry
% about the horizontal and vertical size that is taken by the
% watermark object. Note that this is typically a text, but
% |\sc@wm@text| may well contain other material, e.g.\@ an
% |\includegraphics| directive.
% \begin{macrocode}
\newcommand\sc@watermark{%
\setlength{\@tempdimb}{.5\paperwidth}%
\setlength{\@tempdimc}{-.5\paperheight}%
\put(\strip@pt\@tempdimb,\strip@pt\@tempdimc){%
\makebox(0,0){\rotatebox{\sc@wm@angle}{%
\scalebox{\sc@wm@scale}{%
\textcolor[gray]{\sc@wm@lightness}{
\fontsize{\sc@wm@fontsize}{1.2\sc@wm@fontsize}
\selectfont
\sc@wm@text}}}}}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\sc@wm@print}
% The command to actually \emph{print} the watermark. It is assumed
% that this is called before any other material is shipped to the
% page. As such, the origin here is the page origin in Knuthian sense
% (1 inch down, 1 inch right from the top left corner of the
% page\ldots First of all, this is changed to the proper top left
% corner of the page.
% \begin{macrocode}
\newcommand\sc@wm@print[1]{%
\setbox\@tempboxa\vbox to \z@{%
\vskip -1in \moveleft 1in \vbox{%
\hbox to \z@{%
\dp\@tempboxa\z@ \box\@tempboxa} % \end{macrocode} % \end{macro} % % Eventually, set up the |\sc@wm@print| command to be called when % needed, using the appropriate \Lpack{everypage} hook. % \begin{macrocode} \if@sc@wm@first \AddThispageHook{\sc@wm@print{\sc@watermark}} \else \AddEverypageHook{\sc@wm@print{\sc@watermark}} \fi \endinput % \end{macrocode} % % \Finale % \PrintIndex % %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation ! Double quote \" Hash (number) # %% Dollar \$ Percent \% Ampersand & %% Acute accent \' Left paren ( Right paren ) %% Asterisk _ Plus + Comma \, %% Minus - Point . Solidus \/ %% Colon : Semicolon \; Less than < %% Equals \= Greater than > Question mark \? %% Commercial at \@ Left bracket [ Backslash \ %% Right bracket ] Circumflex ^ Underscore _ %% Grave accent ` Left brace { Vertical bar | %% Right brace } Tilde ~} \endinput
%%% Local Variables: %%% mode: doctex %%% TeX-master: t %%% End:
Reported by R (Chandra) Chandrasekhar on 22/2/09