summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/ncctools/source/watermark.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/ncctools/source/watermark.dtx')
-rw-r--r--macros/latex/contrib/ncctools/source/watermark.dtx217
1 files changed, 217 insertions, 0 deletions
diff --git a/macros/latex/contrib/ncctools/source/watermark.dtx b/macros/latex/contrib/ncctools/source/watermark.dtx
new file mode 100644
index 0000000000..81f9404646
--- /dev/null
+++ b/macros/latex/contrib/ncctools/source/watermark.dtx
@@ -0,0 +1,217 @@
+% \iffalse
+%%
+%% File: watermark.dtx Copyright (C) 2002--2004 by Alexander I. Rozhenko
+%%
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{watermark}
+%<package> [2004/12/09 v1.1 Watermarks (NCC)]
+%
+% \changes{v1.00}{2002/01/29}{This version is uploaded to CTAN}
+% \changes{v1.01}{2002/02/13}{Hbox underfull removed in empty |\thispageheading|}
+% \changes{v1.02}{2003/04/04}{Hbox underfull removed in plain and empty styles}
+% \changes{v1.1}{2004/12/09}{Simplify the implementation of |\thispageheading|}
+% \changes{v1.1}{2004/12/09}{Documentation was prepared}
+%
+%<*driver>
+\let\makeindex\relax
+\documentclass{ltxdoc}
+\usepackage{watermark,nccboxes}
+\GetFileInfo{watermark.sty}
+\begin{document}
+\title{The \textsf{watermark} package\thanks{This file
+ has version number \fileversion, last
+ revised \filedate.}}
+\author{Alexander I. Rozhenko\\rozhenko@oapmg.sscc.ru}
+\date{\filedate}
+\maketitle
+\DocInput{watermark.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \thispageheading{This heading was prepared with the
+% {\tt\string\thispageheading} command.\\
+% It allows long multi-line headings!}
+%
+% \section{User Interface}
+%
+% \DescribeMacro\watermark
+% \DescribeMacro\leftwatermark
+% \DescribeMacro\rightwatermark
+% \DescribeMacro\thiswatermark
+% The package provides watermarks on output pages. A watermark is
+% some text or picture printed at the background of paper.
+% A watermark is prepared in a picture box stored at the
+% beginning of header. So, you should place
+% the watermark material with LaTeX's |\put| and |\multiput| commands.
+% Allowed watermark commands are shown in the table:
+% \begin{center}\catcode`|=12
+% \small
+% \renewcommand\cboxstyle{\footnotesize}
+% \begin{tabular}{|l|l|}\hline
+% \hfill\cbox{Command}\hfill\mbox{} &
+% \hfill\cbox{Meaning}\hfill\mbox{}\\\hline
+% \Strut/.8/
+% \verb+\watermark+\marg{body} &
+% Set the same watermark for all pages\\
+% \verb+\leftwatermark+\marg{body} &
+% Set the even-page watermark\\
+% \verb+\rightwatermark+\marg{body} &
+% Set the odd-page watermark\\
+% \verb+\thiswatermark+\marg{body} &
+% Set a watermark for the current page only \\
+% \hline
+% \end{tabular}
+% \end{center}
+% In one-side mode, the |\leftwatermark| is ignored and the
+% |\rightwatermark| is applied to all pages.
+%
+% \DescribeMacro\thispageheading
+% The package also provides the command
+% |\thispageheading|\marg{heading}
+% which replaces a heading for the current page to the specified
+% multi-line heading. The heading is prepared in the parbox
+% of the |\textwidth| width aligned on the top line. This
+% command does not suppress watermarks.
+%
+% Examples of using watermarks are shown in the |ncccropmark|
+% package.
+% \StopEventually{}
+%
+% \section{The Implementation}
+%
+% \begin{macro}{\@begindvi}
+% To support watermarks, we use the |\@begindvi| hook from the output
+% routine. This hook works only once at the beginning of dvi,
+% but some packages (e.g. |hyperref|) also use it for their own needs.
+% So, we redefine it at the beginning of document in such a way to
+% accurately save its behaviour after the first call when it can be
+% redefined by other packages. All the we need from this hook~---
+% to call the |\WMK@insert| command every time when the output
+% routine composes a new page.
+% \begin{macrocode}
+%<*package>
+\AtBeginDocument{
+ \let\WMK@begindvi\@begindvi
+ \def\@begindvi{%
+% \end{macrocode}
+% Apply saved |\@begindvi| hook and then call the
+% |\WMK@insert| command:
+% \begin{macrocode}
+ \WMK@begindvi
+ \WMK@insert
+% \end{macrocode}
+% After that we must redefine the |\@begindvi| hook,
+% because it is already redefined here to the |\@empty| value
+% (or to something else if another package using this hook is loaded).
+% We save its new meaning in the |\WMK@begindvi| command
+% and redefine the |\@begindvi|:
+% \begin{macrocode}
+ \global\let\WMK@begindvi\@begindvi
+ \gdef\@begindvi{\WMK@begindvi\WMK@insert}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\WMK@insert}
+% The command redefines the current header and inserts the
+% |\WMK@hook| at the beginning of header.
+% A box produced by this hook has zero natural sizes.
+% \begin{macrocode}
+\def\WMK@insert{%
+ \let\WMK@head\@thehead
+ \def\@thehead{\WMK@hook\WMK@head}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\WMK@hook}
+% The command applies
+% this watermark (|\WMK@this|), odd watermark (|\WMK@odd|),
+% or even watermark (|\WMK@even|). The watermarks are prepared
+% within the picture environment:
+% \begin{macrocode}
+\def\WMK@hook{%
+ \begin{picture}(0,0)\relax
+ \ifx\WMK@this\relax
+ \if@twoside
+ \ifodd\c@page\WMK@odd\else\WMK@even\fi
+ \else
+ \WMK@odd
+ \fi
+ \else
+ \WMK@this \global\let\WMK@this\relax
+ \fi
+ \end{picture}%
+% \end{macrocode}
+% After that we test the header. At the first, we test the
+% |\WMK@thishead| command. If it is specified, we let
+% |\WMK@head| to |\WMK@thishead|.
+% \begin{macrocode}
+ \ifx\WMK@thishead\relax \else
+ \let\WMK@head\WMK@thishead
+ \global\let\WMK@thishead\relax
+ \fi
+% \end{macrocode}
+% The original |\@thehead| command
+% saved in |\WMK@head| can be defined with |\@oddhead| content
+% or can be let to |\@oddhead| or |\@evenhead|.
+% We test all these cases to recognize when the head is really empty.
+% A head prepared with |\thispageheading| can be also empty.
+% If the empty case is recognized, we insert the |\hfil| command
+% to avoid underfull.
+% \begin{macrocode}
+ \ifx\WMK@head\@empty \hfil
+ \else
+ \def\@tempa{\@oddhead}%
+ \ifx\WMK@head\@tempa
+ \ifx\@oddhead\@empty \hfil \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Set defaults for this heading and watermarks.
+% \begin{macrocode}
+\let\WMK@thishead\relax
+\let\WMK@this\relax
+\let\WMK@odd\@empty
+\let\WMK@even\@empty
+% \end{macrocode}
+%
+% \begin{macro}{\watermark}
+% \begin{macro}{\leftwatermark}
+% \begin{macro}{\rightwatermark}
+% \begin{macro}{\thiswatermark}
+% Define watermark producing commands:
+% \begin{macrocode}
+\newcommand{\watermark}[1]{\leftwatermark{#1}\rightwatermark{#1}}
+\newcommand{\leftwatermark}[1]{\gdef\WMK@even{#1}}
+\newcommand{\rightwatermark}[1]{\gdef\WMK@odd{#1}}
+\newcommand{\thiswatermark}[1]{\gdef\WMK@this{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\thispageheading}
+% Finally, define the |\thispageheading|\marg{heading} command.
+% We especially test the case of empty heading and
+% set |\WMK@thishead| to the |\@empty| value in this case.
+% This allows avoiding underfull in the |\WMK@hook|.
+% \begin{macrocode}
+\newcommand{\thispageheading}[1]{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\@empty
+ \global\let\WMK@thishead\@empty
+ \else
+ \gdef\WMK@thishead{\parbox[t]\textwidth{#1}}%
+ \fi
+}
+%</package>
+% \end{macrocode}
+% \end{macro}
+\endinput