%% %% This is file `textpos.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% textpos.dtx (with options: `package') %% Textpos: absolute positioning of text on the page %%%% File: textpos.dtx %%%% Copyright 1999-2020, Norman Gray %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 %% of this license or (at your option) any later version. %% The latest version of this license is in %% http://www.latex-project.org/lppl.txt %% and version 1.3 or later is part of all distributions of LaTeX %% version 2005/12/01 or later. %% %% This work has the LPPL maintenance status `maintained'. %% %% The Current Maintainer of this work is Norman Gray %% %% This work consists of the files textpos.dtx and textpos.ins, %% and the derived file textpos.sty. %% %% Author: Norman Gray, gray@nxg.name %% Department of Physics and Astronomy, University of Glasgow, UK %% %% See the file LICENCE for a copy of the LPPL. %% %% Mercurial ident: c834991c867a (1.10+1), 2020-09-26 17:44 +0100 %% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{textpos}[2020/09/26 v1.10] \typeout{Package: textpos 2020/09/26 1.10, absolute positioning of text on the page} \newif\ifTPshowboxes \TPshowboxesfalse \DeclareOption{showboxes}{\TPshowboxestrue} \newif\ifTP@showtext \TP@showtexttrue \DeclareOption{noshowtext}{\TP@showtextfalse} \newif\ifTP@abspos \TP@absposfalse \DeclareOption{absolute}{\TP@abspostrue} \DeclareOption{relative}{\TP@absposfalse} \newif\ifTP@overlay \TP@overlayfalse \DeclareOption{overlay}{\TP@overlaytrue} \newif\ifTP@chatter \TP@chattertrue \DeclareOption{quiet}{\TP@chatterfalse} \DeclareOption{verbose}{\TP@chattertrue} \newif\ifTP@displayholdbox \TP@displayholdboxtrue \DeclareOption{discardcontent}{\TP@displayholdboxfalse} \ProcessOptions \newif\ifTP@Liii \@ifl@t@r\fmtversion{2020/10/01}\TP@Liiitrue\TP@Liiifalse \PackageInfo{textpos}{choosing support for \ifTP@Liii LaTeX3\else LaTeX2e\fi} \ifTP@Liii % avoid everyshi package \else \ifTP@abspos \RequirePackage{everyshi} \fi \fi \RequirePackage{keyval} \define@key{tp}{absolute}{\csname TP@abspos#1\endcsname} \define@key{tp}{overlay}{\csname TP@overlay#1\endcsname} \define@key{tp}{verbose}{\csname TP@chatter#1\endcsname} \define@key{tp}{showboxes}{\csname TPshowboxes#1\endcsname} \define@key{tp}{showtext}{\csname TP@showtext#1\endcsname} \define@key{tp}{discardcontent}{\csname @tempswa#1\endcsname \if@tempswa\TP@displayholdboxfalse\else\TP@displayholdboxtrue\fi} \def\TPoptions{\setkeys{tp}} \def\TP@xfloat#1[#2]{ \par\def\@captype{#1}% \@floatpenalty\z@ \color@vbox \normalcolor \vbox\bgroup } \def\TP@xympar{ \PackageError{textpos} {You can't use \protect\marginpar\space within a textblock} {You're using textpos because you _don't_ want things to float around, yes?}} \newbox\TP@textbox \newif\ifTP@vmode \ifTP@abspos \newbox\TP@holdbox % starts off void \AtEndDocument{\ifTP@displayholdbox\ifvoid\TP@holdbox \else \hbox{}\fi\fi} \fi \newdimen\TPHorizModule \newdimen\TPVertModule \newdimen\TP@margin \TP@margin=0pt \newdimen\TP@absmargin \TP@absmargin=0pt \newcommand{\TPMargin}{% \@ifstar\TPMargin@outer\TPMargin@inner } \newcommand{\TPMargin@inner}[1]{% \TP@margin=#1\relax \ifdim\TP@margin < 0pt \PackageError{textpos} {\protect\TPMargin\space must have a positive argument} {\protect\TPMargin\space must have a positive argument} \fi \TP@absmargin=\TP@margin } \newcommand\TPMargin@outer[1]{% \TP@margin=-#1\relax \ifdim\TP@margin > 0pt \PackageError{textpos} {\protect\TPMargin*\space must have a positive argument} {\protect\TPMargin*\space must have a positive argument} \fi \TP@absmargin=-\TP@margin } \def\TPGrid{% \@ifnextchar[{\@tempswatrue\TP@Grid}{\@tempswafalse\TP@Grid[0pt,0pt]}} \def\TP@Grid[#1,#2]#3#4{ \setlength{\@tempdima}{#1} \multiply\@tempdima by 2 \TPHorizModule=\paperwidth \advance\TPHorizModule by -\@tempdima \divide\TPHorizModule by #3 \setlength{\@tempdima}{#2} \multiply\@tempdima by 2 \TPVertModule=\paperheight \advance\TPVertModule by -\@tempdima \divide\TPVertModule by #4 \ifTP@chatter \typeout{Grid set #3 x #4 = \the\TPHorizModule\space x \the\TPVertModule}% \fi \ifTP@abspos\if@tempswa \textblockorigin{#1}{#2}\fi\fi } \TPGrid{16}{16} \newdimen\TPboxrulesize \setlength{\TPboxrulesize}{0.4pt} \def\showtextsize{\normalsize} \def\TPShowGrid{\@ifstar{\@tempswatrue\@TPShowGrid}{\@tempswafalse\@TPShowGrid}} \def\@TPShowGrid#1#2{ \begin{textblock}{#1}(0,0) \lineskip=0pt % abut boxes directly \setbox0=\hbox{(0)}% \@tempdima=\TPVertModule \advance\@tempdima -1.1\ht0 \@tempcnta=0 \hrule \loop \vbox to \TPVertModule{\noindent \@tempcntb=0 \vrule \loop \hbox to \TPHorizModule{% \if@tempswa\raise\@tempdima\hbox{(\the\@tempcntb,\the\@tempcnta)}\fi \hfil \vrule height \TPVertModule}% \advance\@tempcntb 1 \ifnum\@tempcntb<#1 \repeat \vss \hrule} \advance\@tempcnta 1 \ifnum\@tempcnta<#2 \repeat \end{textblock}} \ifTP@abspos \newdimen\TP@ox \newdimen\TP@oy \fi \def\textblockorigin#1#2{% \ifTP@abspos \TP@ox=-1in \addtolength\TP@ox{#1} \TP@oy=-1in \addtolength\TP@oy{#2} \ifTP@chatter\typeout{TextBlockOrigin set to #1 x #2}\fi \else \PackageError{textpos} {The \protect\textblockorigin\space command\MessageBreak may only be used if the package was given\MessageBreak the`absolute' option when it was invoked} {If you want to use the \protect\textblockorigin\space command, then \MessageBreak invoke the package with the syntax\MessageBreak \protect\usepackage[absolute]{textpos}} \fi } \def\textblocklabel#1{\gdef\TP@textblocklabel{#1}} \def\textblockcolour#1{% \@ifundefined{color}% {\PackageWarning{textpos}{command textblockcolour used,\MessageBreak but {color} package not loaded.\MessageBreak Colour changes ignored.}} {\gdef\TP@blockcolour{#1} \ifx\TP@defaultblockcolour\@undefined \gdef\TP@defaultblockcolour{#1} \fi }} \def\TP@blockcolour{} % safe initial default \let\textblockcolor\textblockcolour \let\tekstblokkulur\textblockcolour \def\textblockrulecolour#1{% \@ifundefined{color}% {\PackageWarning{textpos}{command textblockrulecolour used,\MessageBreak but {color} package not loaded.\MessageBreak Colour changes ignored.}} {\gdef\TP@rulecolour{#1}}} \def\TP@rulecolour{black} \let\textblockrulecolor\textblockrulecolour \let\tekstblokroolkulur\textblockrulecolour \gdef\TP@color[#1]#2{} \def\TP@checkdummycolorpackage{% \@ifundefined{color}% {\globaldefs=1 \DeclareRobustCommand\color[2][]{}% \def\color@block##1##2##3{}% \globaldefs=0 }{}% \global\let\TP@checkdummycolorpackage\relax % don't come here again } \def\TP@referenceposition{0,0} \def\TPReferencePosition#1{\def\TP@referenceposition{#1}} \def\textblock#1{% \@tempdima=#1\TPHorizModule \TP@begintextblock } \def\TP@textblockstar#1{% \setlength{\@tempdima}{#1}% \TP@begintextblock } \expandafter\let\csname textblock*\endcsname\TP@textblockstar \def\TP@begintextblock{% \ifvmode \TP@vmodetrue \else \ifmmode \PackageError{textpos} {You cannot use textblock in maths mode} {You may use the textblock environment only in \MessageBreak vertical mode or horizontal mode. You cannot use it in maths mode.} \else % in horizontal mode \TP@vmodefalse \@bsphack \unskip \fi \fi \@ifnextchar[{\TP@textblock}{\expandafter\TP@textblock\expandafter[\TP@referenceposition]}%] bracematch } \newtoks\TP@tbargs \def\TP@textblock[#1,#2](#3,#4){% \TP@tbargs={{#1}{#2}{#3}{#4}}% \let\@xfloat\TP@xfloat \let\@xympar\TP@xympar \setbox\TP@textbox=\vbox\bgroup \ifTPshowboxes \TP@checkdummycolorpackage {\color{\TP@rulecolour}\hrule height0pt depth \TPboxrulesize }% \vskip-\TPboxrulesize \fi \ifdim\TP@margin = 0pt \hsize=\@tempdima \textwidth\hsize \columnwidth\hsize \linewidth\hsize \else \vskip\TP@absmargin \@tempdimb=\@tempdima % \@tempdimb is outer box width \hsize=\@tempdima % \hsize is inner box width \ifdim\TP@margin < 0pt \advance\@tempdimb by 2\TP@absmargin % bigger box \else \advance\hsize by -2\TP@absmargin % narrower content \fi \hbox to \@tempdimb\bgroup \hskip\TP@absmargin\vbox\bgroup \textwidth\hsize \columnwidth\hsize \linewidth\hsize \fi } \def\endtextblock{\global\@tempswatrue\TP@commonendtextblock} \@namedef{endtextblock*}{\global\@tempswafalse\TP@commonendtextblock} \def\TP@commonendtextblock{% \ifdim\TP@margin = 0pt \relax \else \egroup % end of inner vbox \hskip\TP@absmargin % (just \hfil would work here, too) \egroup % end of inner hbox \vskip\TP@absmargin \fi \ifTPshowboxes \vskip-\TPboxrulesize {\color{\TP@rulecolour}\hrule depth 0pt height \TPboxrulesize}% \fi \egroup % end of \TP@textbox \expandafter\TP@endtextblock\the\TP@tbargs } \def\TP@endtextblock#1#2#3#4{% \if@tempswa % modular/unstarred endtextblock \@tempdima=#3\TPHorizModule \@tempdimb=#4\TPVertModule \else % absolute/starred endtextblock \setlength{\@tempdima}{#3}% \setlength{\@tempdimb}{#4}% \fi \ifdim\TP@margin < 0pt \advance\@tempdima \TP@margin \advance\@tempdimb \TP@margin \@tempdimc=\wd\TP@textbox \advance\@tempdimc 2\TP@margin % now \@tempdimc is width of textblock \multiply\@tempdimc #1 \advance\@tempdima -\@tempdimc \@tempdimc=\ht\TP@textbox \advance\@tempdimc 2\TP@margin % now \@tempdimc is height of textblock \multiply\@tempdimc #2 \advance\@tempdimb -\@tempdimc \else \@tempdimc=#1\wd\TP@textbox \advance\@tempdima -\@tempdimc \@tempdimc=#2\ht\TP@textbox \advance\@tempdimb -\@tempdimc \fi \ifTP@abspos \advance\@tempdima by \TP@ox \advance\@tempdimb by \TP@oy \fi \setbox0=\vbox to 0pt{\vskip\@tempdimb \hbox to 0pt{\hskip\@tempdima \ifx\TP@blockcolour\@empty \else {\TP@checkdummycolorpackage \color{\TP@blockcolour}% \color@block{\wd\TP@textbox}{\ht\TP@textbox}{\dp\TP@textbox}% }% \fi \ifx\TP@defaultblockcolour\@undefined \else \global\let\TP@blockcolour\TP@defaultblockcolour \fi \ifTPshowboxes {\color{\TP@rulecolour}\vrule width \TPboxrulesize}% \hskip -\TPboxrulesize \fi \ifTP@showtext \box\TP@textbox \else \vbox to\ht\TP@textbox{% \ifTPshowboxes {\color{\TP@rulecolour}\hrule depth 0pt height \TPboxrulesize \vskip-\TPboxrulesize}% \fi \vskip\smallskipamount \hbox to\wd\TP@textbox{% \ifx\TP@textblocklabel\undefined \hbox{}% \else \hskip\smallskipamount \fbox{\showtextsize \TP@textblocklabel}% \global\let\TP@textblocklabel\undefined \fi \hss }% \vss \ifTPshowboxes \vskip -\TPboxrulesize {\color{\TP@rulecolour}\hrule depth 0pt height \TPboxrulesize}% \fi }% \fi \ifTPshowboxes \hskip -\TPboxrulesize {\color{\TP@rulecolour}\vrule width \TPboxrulesize}% \fi \hss}% \vss }% end of box0 \ifTP@abspos \global\setbox\TP@holdbox\vbox{% \unvbox\TP@holdbox \box0 }% \else \ifTP@vmode \@tempdima=\prevdepth \prevdepth=-1000pt % = \nointerlineskip, supressing interline glue \box0 % zero height+depth \prevdepth=\@tempdima \else \vadjust{\box0}% \@esphack \fi \fi } \ifTP@abspos \ifTP@Liii \ifTP@overlay \AddToHook{shipout/foreground}{% \ifTP@displayholdbox\put(\strip@pt\dimexpr1in,-\strip@pt\dimexpr1in){\box\TP@holdbox}\fi} \else \AddToHook{shipout/background}{% \ifTP@displayholdbox\put(\strip@pt\dimexpr1in,-\strip@pt\dimexpr1in){\box\TP@holdbox}\fi} \fi \else \ifTP@overlay \EveryShipout{\ifTP@displayholdbox \global\setbox\@cclv\vbox{% \vbox to 0pt{\ifvbox\@cclv \unvbox\@cclv \else \box\@cclv \fi \vss}% \unvbox\TP@holdbox % TP@holdbox is now void }% \fi}% \else \EveryShipout{\ifTP@displayholdbox \global\setbox\@cclv\vbox{% \unvbox\TP@holdbox \ifvbox\@cclv \unvbox\@cclv \else \box\@cclv \fi }% \fi}% \fi \fi \textblockorigin{0pt}{0pt}% \fi \endinput %% %% End of file `textpos.sty'.