From 8d7f98b66885b8a8f5e0cccb43f7c97060affb01 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 29 Aug 2016 21:19:42 +0000 Subject: tikz-page (29aug16) git-svn-id: svn://tug.org/texlive/trunk@41949 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/tex/latex/tikz-page/tikz-page.sty | 452 +++++++++++++++++++++ 1 file changed, 452 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/tikz-page/tikz-page.sty (limited to 'Master/texmf-dist/tex/latex/tikz-page') diff --git a/Master/texmf-dist/tex/latex/tikz-page/tikz-page.sty b/Master/texmf-dist/tex/latex/tikz-page/tikz-page.sty new file mode 100644 index 00000000000..c6132d9a087 --- /dev/null +++ b/Master/texmf-dist/tex/latex/tikz-page/tikz-page.sty @@ -0,0 +1,452 @@ +%% +%% This is file `tikz-page.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% tikz-page.dtx (with options: `tikz-page') +%% This is a generated file. +%% +%% Copyright ^^c2^^a9 2016 by S^^c3^^a9bastien Gross +%% +%% This program is free software. It comes without any warranty, to the extent +%% permitted by applicable law. You can redistribute it and/or modify it under +%% the terms of the Do What The Fuck You Want To Public License, Version 2, as +%% published by Sam Hocevar. See http://sam.zoy.org/wtfpl/COPYING for more +%% details. +%% +%% This file may be distributed and/or modified under the conditions of +%% the LaTeX Project Public License, either version 1.3c 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.3c or later is part of all distributions of LaTeX +%% version 2006/05/20 or later. +%% + + +%% DeclareTCBListing{macrocode} leave a blank line after code. + + + + +\def\pkgfileversion{1.0} +\def\pkgfiledate{2016/08/22} + + + + + + + + + + + + + + +%% Reset the FancyVerbLine counter to have the correct lines number in front +%% of implementation. + + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{tikz-page}[\pkgfiledate\space (v\pkgfileversion)] + + +\newif\if@tp@use@textpos\@tp@use@textposfalse +\DeclareOption{textpos}{\@tp@use@textpostrue} +\ProcessOptions + +\if@tp@use@textpos +\RequirePackage[absolute]{textpos} +\fi + +\RequirePackage{fancyhdr} +\RequirePackage{tikz} +\usetikzlibrary{plotmarks,calc,shapes,positioning,decorations.text} +\RequirePackage{graphicx} +\RequirePackage{calc} + +\makeatletter + + +\newlength{\@tp@left@margin} +\newlength{\@tp@right@margin} +\newlength{\@tp@top@margin} +\newlength{\@tp@bottom@margin} + + + +\newcommand\@tp@create@length[2]{% + \expandafter\newskip\csname tp@#1@#2\endcsname% +}% + + +\foreach\@@tp@element in {page,body,marginpar,header,footer,top,right,bottom,left}{% + \foreach\@@tp@len in {xmin,xmax,xmid,ymin,ymax,ymid}{% + \@tp@create@length{\@@tp@element}{\@@tp@len}% +}}% + +\newcommand{\tpflip}[2]{\ifodd\thepage#1\else#2\fi} + + +\def\tp@compute@margins{% + \setlength{\tp@page@xmin}{0pt}% + \setlength{\tp@page@ymin}{0pt}% + \setlength{\tp@page@xmax}{\paperwidth}% + \setlength{\tp@page@ymax}{\paperheight}% + \setlength{\tp@page@xmid}{\dimexpr(\tp@page@xmin+\tp@page@xmax)/2\relax}% + \setlength{\tp@page@ymid}{\dimexpr(\tp@page@ymin+\tp@page@ymax)/2\relax}% + % + \setlength\@tp@left@margin{\dimexpr(1in+\hoffset+\tpflip{\oddsidemargin}{\evensidemargin})\relax}% + \setlength\@tp@right@margin{\dimexpr(\paperwidth-\@tp@left@margin-\textwidth)\relax}% + \setlength\@tp@top@margin{\dimexpr(1in+\voffset+\topmargin+\headheight+\headsep)\relax}% + \setlength\@tp@bottom@margin{\dimexpr(\paperheight-(\textheight+\@tp@top@margin))\relax}% + %% Body computation + \setlength\tp@body@xmin{\dimexpr\tp@page@xmin+\@tp@left@margin\relax}% + \setlength\tp@body@xmax{\dimexpr\tp@page@xmax-\@tp@right@margin\relax}% + \setlength\tp@body@xmid{\dimexpr((\tp@body@xmax+\tp@body@xmin)/2)\relax}% + \setlength\tp@body@ymax{\dimexpr(\tp@page@ymax-\@tp@top@margin)\relax}% + \setlength\tp@body@ymin{\dimexpr\tp@body@ymin+\@tp@bottom@margin\relax}% + \setlength\tp@body@ymid{\dimexpr(\tp@body@ymin+(\tp@body@ymax-\tp@body@ymin)/2)\relax}% + % + %% Margin computation + % + \tpflip{% + \setlength\tp@marginpar@xmin{\dimexpr\tp@body@xmax+\marginparsep\relax} + \setlength\tp@marginpar@xmax{\dimexpr\tp@marginpar@xmin+\marginparwidth\relax}% + }{% + \setlength\tp@marginpar@xmax{\dimexpr\tp@body@xmin-\marginparsep\relax}% + \setlength\tp@marginpar@xmin{\dimexpr\tp@marginpar@xmax-\marginparwidth\relax}% + }% + \setlength\tp@marginpar@xmid{\dimexpr((\tp@marginpar@xmax+\tp@marginpar@xmin)/2)\relax}% + \setlength\tp@marginpar@ymax{\tp@body@ymax}% + \setlength\tp@marginpar@ymin{\tp@body@ymin}% + \setlength\tp@marginpar@ymid{\tp@body@ymid}% + % + %% header + % + \setlength\tp@header@xmax{\tp@body@xmax}% + \setlength\tp@header@xmin{\tp@body@xmin}% + \setlength\tp@header@xmid{\tp@body@xmid}% + \setlength\tp@header@ymin{\dimexpr\tp@body@ymax+\headsep\relax}% + \setlength\tp@header@ymax{\dimexpr\tp@header@ymin+\headheight\relax}% + \setlength\tp@header@ymid{\dimexpr((\tp@header@ymax+\tp@header@ymin)/2)\relax}% + % + %% footer + % + \setlength\tp@footer@xmax{\tp@body@xmax}% + \setlength\tp@footer@xmin{\tp@body@xmin}% + \setlength\tp@footer@xmid{\tp@body@xmid}% + \setlength\tp@footer@ymin{\dimexpr\tp@body@ymin-\footskip\relax}% + \setlength\tp@footer@ymax{\tp@footer@ymin}% + \setlength\tp@footer@ymid{\dimexpr((\tp@footer@ymax+\tp@footer@ymin)/2)\relax}% + %% + %% blocks% + %% + \setlength\tp@top@xmin{\tp@page@xmin}% + \setlength\tp@top@xmax{\tp@page@xmax}% + \setlength\tp@top@xmid{\dimexpr((\tp@top@xmax+\tp@top@xmin)/2)\relax}% + \setlength\tp@top@ymin{\tp@body@ymax}% + \setlength\tp@top@ymax{\tp@page@ymax}% + \setlength\tp@top@ymid{\dimexpr((\tp@top@ymax+\tp@top@ymin)/2)\relax}% + %% + \setlength\tp@bottom@xmin{\tp@page@xmin}% + \setlength\tp@bottom@xmax{\tp@page@xmax}% + \setlength\tp@bottom@xmid{\dimexpr((\tp@bottom@xmax+\tp@bottom@xmin)/2)\relax}% + \setlength\tp@bottom@ymin{\tp@page@ymin}% + \setlength\tp@bottom@ymax{\tp@body@ymin}% + \setlength\tp@bottom@ymid{\dimexpr((\tp@bottom@ymax+\tp@bottom@ymin)/2)\relax}% + %% + \setlength\tp@left@xmin{\tp@page@xmin}% + \setlength\tp@left@xmax{\tp@body@xmin}% + \setlength\tp@left@xmid{\dimexpr((\tp@left@xmax+\tp@left@xmin)/2)\relax}% + \setlength\tp@left@ymin{\tp@body@ymin}% + \setlength\tp@left@ymax{\tp@body@ymax}% + \setlength\tp@left@ymid{\dimexpr((\tp@left@ymax+\tp@left@ymin)/2)\relax}% + %% + \setlength\tp@right@xmin{\tp@body@xmax}% + \setlength\tp@right@xmax{\tp@page@xmax}% + \setlength\tp@right@xmid{\dimexpr((\tp@right@xmax+\tp@right@xmin)/2)\relax}% + \setlength\tp@right@ymin{\tp@body@ymin}% + \setlength\tp@right@ymax{\tp@body@ymax}% + \setlength\tp@right@ymid{\dimexpr((\tp@right@ymax+\tp@right@ymin)/2)\relax}% +}%% \end{macrocode} + + +\def\@tp@genanchors#1{% + \anchor{#1 north}{\pgf@x=\csname tp@#1@xmid\endcsname \pgf@y=\csname tp@#1@ymax\endcsname}% + \anchor{#1 south}{\pgf@x=\csname tp@#1@xmid\endcsname \pgf@y=\csname tp@#1@ymin\endcsname}% + \anchor{#1 west}{\pgf@x=\csname tp@#1@xmin\endcsname \pgf@y=\csname tp@#1@ymid\endcsname}% + \anchor{#1 northwest}{\pgf@x=\csname tp@#1@xmin\endcsname \pgf@y=\csname tp@#1@ymax\endcsname}% + \anchor{#1 southwest}{\pgf@x=\csname tp@#1@xmin\endcsname \pgf@y=\csname tp@#1@ymin\endcsname}% + \anchor{#1 east}{\pgf@x=\csname tp@#1@xmax\endcsname \pgf@y=\csname tp@#1@ymid\endcsname}% + \anchor{#1 northeast}{\pgf@x=\csname tp@#1@xmax\endcsname \pgf@y=\csname tp@#1@ymax\endcsname}% + \anchor{#1 southeast}{\pgf@x=\csname tp@#1@xmax\endcsname \pgf@y=\csname tp@#1@ymin\endcsname}% + \anchor{#1 center}{\pgf@x=\csname tp@#1@xmid\endcsname \pgf@y=\csname tp@#1@ymid\endcsname}% +}% + +\newcommand\tp@pgfdeclareanchoralias[3]{% + \expandafter\def\csname pgf@anchor@#1@#3\expandafter\endcsname + \expandafter{\csname pgf@anchor@#1@#2\endcsname}} + +\pgfdeclareshape{page}{ + \backgroundpath{ + \pgfpathmoveto{\pgfpoint{\tp@page@xmin}{\tp@page@ymin}} + \pgfpathlineto{\pgfpoint{\tp@page@xmin}{\tp@page@ymax}} + \pgfpathlineto{\pgfpoint{\tp@page@xmax}{\tp@page@ymax}} + \pgfpathlineto{\pgfpoint{\tp@page@xmax}{\tp@page@xmin}} + \pgfpathclose + } + %% basic anchors + \anchor{north}{\pgf@x=\tp@page@xmid \pgf@y=\tp@page@ymax}% + \anchor{south}{\pgf@x=\tp@page@xmid \pgf@y=\tp@page@ymin}% + \anchor{west}{\pgf@x=\tp@page@xmin \pgf@y=\tp@page@ymid}% + \anchor{northwest}{\pgf@x=\tp@page@xmin \pgf@y=\tp@page@ymax}% + \anchor{southwest}{\pgf@x=\tp@page@xmin \pgf@y=\tp@page@ymin}% + \anchor{east}{\pgf@x=\tp@page@xmax \pgf@y=\tp@page@ymid}% + \anchor{northeast}{\pgf@x=\tp@page@xmax \pgf@y=\tp@page@ymax}% + \anchor{southeast}{\pgf@x=\tp@page@xmax \pgf@y=\tp@page@ymin}% + %\anchor{center}{\pgfpointorigin} + \anchor{center}{\pgf@x=\tp@page@xmid \pgf@y=\tp@page@ymid} + \anchor{origin}{\pgfpointorigin}%\pgf@x=0pt \pgf@y=0pt} + \@tp@genanchors{page} + %% Body anchors + \@tp@genanchors{body} + \@tp@genanchors{marginpar} + \@tp@genanchors{header} + \@tp@genanchors{footer} + \@tp@genanchors{top} + \@tp@genanchors{bottom} + \@tp@genanchors{left} + \@tp@genanchors{right} +} + +\newdimen\tp@linewidth +\newdimen\tp@marksize +\setlength\tp@marksize{3pt} +\pgfdeclareplotmark{tpx}{ + \setlength{\tp@linewidth}{\pgflinewidth} + \pgfsetlinewidth{0.1pt} + \pgfpathmoveto{\pgfpoint{-\tp@marksize}{-\tp@marksize}} + \pgfpathlineto{\pgfpoint{\tp@marksize}{\tp@marksize}} + \pgfpathmoveto{\pgfpoint{-\tp@marksize}{\tp@marksize}} + \pgfpathlineto{\pgfpoint{\tp@marksize}{-\tp@marksize}} + \pgfusepathqstroke + \setlength{\pgflinewidth}{\tp@linewidth} +} + + +\def\tikzpageputanchorsdefaults{ + \foreach \anchor/\placement in {% + northwest/below right% + ,north/below% + ,northeast/below left% + ,west/right% + ,center/below% + ,east/left% + ,southwest/above right% + ,south/above% + ,southeast/above left% + } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark + ] coordinates{(0,0)} + node[blue,\placement] {\scriptsize\texttt{(page.\anchor)}}; +} + +\def\tikzpageputanchorsbody{ + \foreach \anchor/\placement in {% + body northwest/below right% + ,body north/below% + ,body northeast/below left% + ,body west/right% + ,body center/below% + ,body east/left% + ,body southwest/above right% + ,body south/above% + ,body southeast/above left% + } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark + ] coordinates{(0,0)} + node[blue,\placement] {\scriptsize\texttt{(page.\anchor)}}; +} + +\def\tikzpageputanchorsmarginpar{ + \foreach \anchor/\placement in {% + marginpar northwest/below left% + ,marginpar north/left% + ,marginpar northeast/above left% + ,marginpar west/below% + ,marginpar center/below% + ,marginpar east/above% + ,marginpar southwest/below right% + ,marginpar south/right% + ,marginpar southeast/above right% + } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark + ] coordinates{(0,0)} + node[blue,\placement, rotate=90] {\scriptsize\texttt{(page.\anchor)}}; +} + +\def\tikzpageputanchorsheader{ + \foreach \anchor/\placement in {% + header northwest/above right% + ,header north/above% + ,header northeast/above left% + ,header west/right% + ,header center/right% + ,header east/left% + ,header southwest/below right% + ,header south/below% + ,header southeast/below left% + } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark + ] coordinates{(0,0)} + node[blue,\placement] {\scriptsize\texttt{(page.\anchor)}}; +} + +\def\tikzpageputanchorsfooter{ + \foreach \anchor/\placement in {% + footer northwest/above right% + ,footer north/above% + ,footer northeast/above left% + ,footer west/right% + ,footer center/right% + ,footer east/left% + ,footer southwest/below right% + ,footer south/below% + ,footer southeast/below left% + } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark + ] coordinates{(0,0)} + node[blue,\placement] {\scriptsize\texttt{(page.\anchor)}}; +} + +\def\tikzpageputanchorstop{ + \foreach \anchor/\placement in {% + top northwest/below right% + ,top north/below% + ,top northeast/below left% + ,top west/right% + ,top center/below% + ,top east/left% + ,top southwest/above right% + ,top south/above% + ,top southeast/above left% + } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark + ] coordinates{(0,0)} + node[blue,\placement] {\scriptsize\texttt{(page.\anchor)}}; +} + +\def\tikzpageputanchorsbottom{ + \foreach \anchor/\placement in {% + bottom northwest/below right% + ,bottom north/below% + ,bottom northeast/below left% + ,bottom west/right% + ,bottom center/below% + ,bottom east/left% + ,bottom southwest/above right% + ,bottom south/above% + ,bottom southeast/above left% + } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark + ] coordinates{(0,0)} + node[blue,\placement] {\scriptsize\texttt{(page.\anchor)}}; +} + +\def\tikzpageputanchorsleft{ + \foreach \anchor/\placement in {% + left northwest/below left% + ,left north/left% + ,left northeast/above left% + ,left west/below% + ,left center/below% + ,left east/above% + ,left southwest/below right% + ,left south/right% + ,left southeast/above right% + } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark + ] coordinates{(0,0)} + node[blue,\placement, rotate=90] {\scriptsize\texttt{(page.\anchor)}}; +} + +\def\tikzpageputanchorsright{ + \foreach \anchor/\placement in {% + right northwest/below left% + ,right north/left% + ,right northeast/above left% + ,right west/below% + ,right center/below% + ,right east/above% + ,right southwest/below right% + ,right south/right% + ,right southeast/above right% + } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark + ] coordinates{(0,0)} + node[blue,\placement, rotate=90] {\scriptsize\texttt{(page.\anchor)}}; +} + +\def\tikzpageputanchors{ + \tikzpageputanchorsdefaults + \tikzpageputanchorsbody + \tikzpageputanchorsmarginpar + \tikzpageputanchorsheader + \tikzpageputanchorsfooter + \tikzpageputanchorstop + \tikzpageputanchorsbottom + \tikzpageputanchorsleft + \tikzpageputanchorsright +} + +\def\tpshowframes{ + \draw[fill=blue!50, opacity=.3, draw] (page.bottom northwest) rectangle (page.bottom southeast); + \draw[fill=yellow!50, opacity=.3, draw] (page.top northwest) rectangle (page.top southeast); + \draw[fill=red!50, opacity=.3, draw] (page.left northwest) rectangle (page.left southeast); + \draw[fill=green!50, opacity=.3, draw] (page.right northwest) rectangle (page.right southeast); +} + +\def\tpfancyhdrdefault{ + \node [outer sep=0,inner sep=0, anchor=mid] at (page.header center) {}; + \node [outer sep=0,inner sep=0, anchor=mid east] at (page.header east) {\tpflip{\sl\leftmark}{\sl\rightmark}}; + \node [outer sep=0,inner sep=0, anchor=mid west] at (page.header west) {\tpflip{\sl\rightmark}{\sl\leftmark}}; + \node [outer sep=0,inner sep=0, anchor=base east] at (page.footer east) {}; + \node [,outer sep=0,inner sep=0,anchor=base] at (page.footer center) {\thepage}; + \node [outer sep=0,inner sep=0, anchor=base west] at (page.footer west) {}; +} + +\newcommand{\tikzpage}{ + \if@tp@use@textpos + \begin{textblock*}{\textwidth}[0,0](0pt,0pt)% + \fi + \tp@compute@margins% + \if@tp@use@textpos + \begin{tikzpicture}[]% + \clip (0,0) rectangle (\paperwidth, \paperheight); + \else + \begin{tikzpicture}[remember picture, overlay]% + \fi + \if@tp@use@textpos + \node[anchor=origin,shape=page] (page) {}; + \else + \node[anchor=origin,shape=page] (page) at (current page.south west) {}; + \fi + \@ifundefined{tikzpagelayout}{}{\tikzpagelayout} + \end{tikzpicture}% + \if@tp@use@textpos + \end{textblock*}% + \fi +} + +\fancypagestyle{plain}{ + \fancyhf{} + \chead{\tikzpage} +} +\fancypagestyle{empty}{ + \fancyhf{} + \chead{\tikzpage} +} + +\makeatother + + +\endinput +%% +%% End of file `tikz-page.sty'. -- cgit v1.2.3