diff options
author | Karl Berry <karl@freefriends.org> | 2016-08-29 21:19:42 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2016-08-29 21:19:42 +0000 |
commit | 8d7f98b66885b8a8f5e0cccb43f7c97060affb01 (patch) | |
tree | 0b2332cf66c3fa41d1bf40d3c089158c89445742 /Master/texmf-dist/source/latex/tikz-page | |
parent | 2962ec38fd49c09aa977d3bb795f1db5d138c072 (diff) |
tikz-page (29aug16)
git-svn-id: svn://tug.org/texlive/trunk@41949 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/tikz-page')
-rw-r--r-- | Master/texmf-dist/source/latex/tikz-page/tikz-page.dtx | 871 |
1 files changed, 871 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/tikz-page/tikz-page.dtx b/Master/texmf-dist/source/latex/tikz-page/tikz-page.dtx new file mode 100644 index 00000000000..27ffe0b964a --- /dev/null +++ b/Master/texmf-dist/source/latex/tikz-page/tikz-page.dtx @@ -0,0 +1,871 @@ +% \iffalse meta-comment % -*- latex -*- +% +%<*ignore> +\begingroup + \catcode123=1 % + \catcode125=2 % + \def\x{LaTeX2e}% +\expandafter\endgroup +\ifcase 0\ifx\install y1\fi\expandafter + \ifx\csname processbatchFile\endcsname\relax\else1\fi + \ifx\fmtname\x\else 1\fi\relax +\else\csname fi\endcsname +%</ignore> +%<*install> +\input docstrip.tex +\keepsilent + +\usedir{tex/latex/tikz-page} + +\let\MetaPrefix\relax +\preamble +This is a generated file. + +Copyright © 2016 by Sébastien Gross <seb•ɑƬ•chezwam•ɖɵʈ•org> + +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. + +\endpreamble% +\let\MetaPrefix\DoubleperCent + + +\generate{\file{tikz-page.sty}{\from{tikz-page.dtx}{tikz-page}}} + +\obeyspaces +\Msg{*************************************************************} +\Msg{* *} +\Msg{* To finish the installation you have to move the following *} +\Msg{* file into a directory searched by TeX: *} +\Msg{* *} +\Msg{* tikz-page.sty *} +\Msg{* *} +\Msg{* To produce the documentation run the file mypackage.dtx *} +\Msg{* through LaTeX. *} +\Msg{* *} +\Msg{* Happy TeXing! *} +\Msg{* *} +\Msg{*************************************************************} +\endbatchfile +%</install> +%<*ignore> +\fi +%</ignore> +%<*driver> +\ProvidesFile{tikz-page.drv} +\documentclass{ltxdoc} +\EnableCrossrefs +\CodelineIndex +\RecordChanges +\usepackage[english]{babel} +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage{tcolorbox} +\tcbuselibrary{listings,documentation} +\tcbuselibrary{documentation,listings,minted} +\tcbuselibrary{breakable} +\tcbuselibrary{skins,raster} +\tcbset{listing engine=minted} +\usepackage{url} +\usepackage{minted} +\usepackage{calc} +\usepackage{makeidx} +\usepackage[textpos]{tikz-page} +\renewcommand{\headrulewidth}{0pt} +\makeindex +\definecolor{halfgray}{gray}{0.55} +\newcommand\anglei{-45} +\newcommand\angleii{45} +\newcommand\angleiii{225} +\newcommand\angleiv{135} +\newcommand{\pagedecoration}{ + \tpflip{ + \coordinate (aux1) at ([yshift=-15pt]page.northeast); + \coordinate (aux2) at ([yshift=-410pt]page.northeast); + \coordinate (aux3) at ([xshift=-4.5cm]page.northeast); + \coordinate (aux4) at ([yshift=-150pt]page.northeast); + }{ + \coordinate (aux1) at ([yshift=-15pt]page.northwest); + \coordinate (aux2) at ([yshift=-410pt]page.northwest); + \coordinate (aux3) at ([xshift=4.5cm]page.northwest); + \coordinate (aux4) at ([yshift=-150pt]page.northwest); + \renewcommand\anglei{-135} + \renewcommand\angleii{135} + \renewcommand\angleiii{-45} + \renewcommand\angleiv{45} + } + \begin{scope}[halfgray!40,line width=12pt,rounded corners=12pt] + \draw (aux1) -- coordinate (a) ++(\angleiii:5) -- ++(\anglei:5.1) coordinate (b); + \draw[shorten <= -10pt] (aux3) -- (a) -- (aux1); + \draw[opacity=0.6,halfgray,shorten <= -10pt] (b) -- ++(\angleiii:2.2) -- ++(\anglei:2.2); + \end{scope} + \draw[halfgray,line width=8pt,rounded corners=8pt,shorten <= -10pt] + (aux4) -- ++(\angleiii:0.8) -- ++(\anglei:0.8); + \begin{scope}[halfgray!70,line width=6pt,rounded corners=8pt] + \draw[shorten <= -10pt] (aux2) -- ++(\angleiii:3) coordinate[pos=0.45] (c) -- ++(\anglei:3.1); + \draw (aux2) -- (c) -- ++(\angleiv:2.5) -- ++(\angleii:2.5) -- ++(\anglei:2.5) coordinate[pos=0.3] (d); + \draw (d) -- +(\angleii:1); + \end{scope} +} + +\newcommand{\tikzpagelayout}{ + \pagedecoration + \node [,outer sep=0,inner sep=0,anchor=base] at (page.footer center) {\thepage}; + \node [,outer sep=0,inner sep=0,anchor=base, rotate=90, color=black!10] at (page.left south) {\footnotesize{tikz-page \pkgfileversion}}; +} +\fancypagestyle{plain}{ + \fancyhf{} + \chead{\tikzpage} +} +\fancypagestyle{titlepage}{ + \fancyhf{} + \chead{\tikzpage} +} +\pagestyle{plain} +\begin{document} +\DocInput{tikz-page.dtx} +\printindex + +\end{document} +%</driver> +%<*README> + +%</README> + +% \fi + +% \iffalse +%% DeclareTCBListing{macrocode} leave a blank line after code. +% \fi + +% \expandafter \let \csname macrocode\endcsname \relax \expandafter \let \csname endmacrocode\endcsname \relax +% \expandafter \let \csname macrocode*\endcsname \relax \expandafter \let \csname endmacrocode*\endcsname \relax +% \newminted[macrocode]{latex}{breaklines,breakafter=()/+-\\,baselinestretch=0.5,fontsize=\footnotesize,linenos,numbersep=3mm,firstnumber=last} +% +% \BeforeBeginEnvironment{macrocode}{% +% \begin{tcolorbox}[boxrule=0.1pt,colframe=red!75!black,left=8mm,width=\linewidth,breakable=true,colback=white,enhanced]} +% \AfterEndEnvironment{macrocode}{\end{tcolorbox}}% + + +% \newminted[example]{latex}{breaklines,breakafter=()/+-\\,baselinestretch=0.5,fontsize=\footnotesize} +% \BeforeBeginEnvironment{example}{% +% \begin{tcolorbox}[boxrule=0.1pt,colframe=red!75!black,left=8mm,width=\linewidth,breakable=true,colback=white,enhanced]} +% \AfterEndEnvironment{example}{\end{tcolorbox}}% + +% \tcbset{ +% tpexample/.style = {% +% enhanced jigsaw, +% lower separated=false, +% leftlower=0pt, +% rightlower=0pt, +% boxrule=0.1pt, +% breakable=true, +% colframe=red!75!black, +% colback=white, +% listing engine=minted, +% minted options={breaklines,breakafter=()/+-\\,baselinestretch=0.5,fontsize=\footnotesize}, +% listing and comment, +% pdf comment, +% compilable listing, +% run pdflatex} +% } + + +% \iffalse +%<*tikz-page> +% \fi +\def\pkgfileversion{1.0} +\def\pkgfiledate{2016/08/22} +% \iffalse +%</tikz-page> +% \fi + +% \title{the \textsc{tikz-page} package } +% \author {Sébastien Gross <seb chezwam org>} +% \date{This file describes version \pkgfileversion\ (\pkgfiledate)} +% \maketitle +% \tableofcontents + + +% \section{Introduction} + +% There are many ways to embelish a page with \LaTeX. One of the most +% easiest way is to use |fancyhdr| which allows to redefine both headers and +% footer. The |geometry| package is also useful to setup correct margins. If +% you need to put some background materials this might become painful, +% especially if you need your background to reach the page borders. + +% There are some trick that help you in this task. |tikz-page| helps you in +% this way by the use of semeral mechanisms. Either you can use plain |tikz| +% picture on the background of your page, or use the \meta{textpos} option +% which enables absolute |textpos| positionning. Each method has its +% benefits and nuisances. With |tikz| you have to compile your document +% twice (which can be painful while you are designing your page layout) and +% with |textpos| you can get some incompatibility issues (please refer to +% |textpos| documentation). + +% |tikz-page| is trying to give you best of both world by creating a new +% page object in a |tikzpicture| with many anchors. So you can easily place +% your page material at its correct position. + + +% \section{Usage} + +% Basically you only need to add \mintinline{latex}{\usepackage{tikz-page}} +% at the begining of your document. Then you have to declare a +% \docAuxCommand{tikzpagelayout} command which is executed inside the +% background |tikzpicture|. Thus you can access the |page| shape and all its +% anchors. For example the following simple example add the page number to +% the footer center: + +% \iffalse +%<*example> +% \fi +% \begin{example} +\newcommand{tikzpagelayout}{% + \node [outer sep=0,inner sep=0,anchor=base] at (page.footer center) {\thepage}; +} +% \end{example} +% \iffalse +%</example> +% \fi + + +% If you want to simulate the default |fancyhdr| behaviour you can define the +% \docAuxCommand{tikzpagelayout} as following: + + +% \iffalse +%<*example> +% \fi +% \begin{example} +\newcommand{tikzpagelayout}{% + \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] at (page.footer center) {\thepage}; +% \end{example} +% \iffalse +%</example> +% \fi + +% A minimum working example: +% \iffalse +%<*example> +% \fi +%\begin{tcblisting}{tpexample} +\documentclass{article} +\usepackage{tikz-page} +\usepackage{lipsum} +\newcommand{\tikzpagelayout}{ + \tpshowframes + \tikzpageputanchors +} +\pagestyle{plain} +\begin{document} +\lipsum +\end{document} +% \end{tcblisting} +% \iffalse +%</example> +% \fi + + +% A more complex example\cite{Graphical Decoration}: +% \iffalse +%<*example> +% \fi +%\begin{tcblisting}{tpexample} +\documentclass{article} +\usepackage{tikz-page} +\usepackage{lipsum} +\definecolor{halfgray}{gray}{0.55} +\newcommand\anglei{-45} +\newcommand\angleii{45} +\newcommand\angleiii{225} +\newcommand\angleiv{135} +\newcommand{\tikzpagelayout}{ + \tpflip{ + \coordinate (aux1) at ([yshift=-15pt]page.northeast); + \coordinate (aux2) at ([yshift=-410pt]page.northeast); + \coordinate (aux3) at ([xshift=-4.5cm]page.northeast); + \coordinate (aux4) at ([yshift=-150pt]page.northeast); + }{ + \coordinate (aux1) at ([yshift=-15pt]page.northwest); + \coordinate (aux2) at ([yshift=-410pt]page.northwest); + \coordinate (aux3) at ([xshift=4.5cm]page.northwest); + \coordinate (aux4) at ([yshift=-150pt]page.northwest); + \renewcommand\anglei{-135} + \renewcommand\angleii{135} + \renewcommand\angleiii{-45} + \renewcommand\angleiv{45} + } + \begin{scope}[halfgray!40,line width=12pt,rounded corners=12pt] + \draw (aux1) -- coordinate (a) ++(\angleiii:5) -- ++(\anglei:5.1) coordinate (b); + \draw[shorten <= -10pt] (aux3) -- (a) -- (aux1); + \draw[opacity=0.6,halfgray,shorten <= -10pt] (b) -- ++(\angleiii:2.2) -- ++(\anglei:2.2); + \end{scope} + \draw[halfgray,line width=8pt,rounded corners=8pt,shorten <= -10pt] + (aux4) -- ++(\angleiii:0.8) -- ++(\anglei:0.8); + \begin{scope}[halfgray!70,line width=6pt,rounded corners=8pt] + \draw[shorten <= -10pt] (aux2) -- ++(\angleiii:3) coordinate[pos=0.45] (c) -- ++(\anglei:3.1); + \draw (aux2) -- (c) -- ++(\angleiv:2.5) -- ++(\angleii:2.5) -- ++(\anglei:2.5) coordinate[pos=0.3] (d); + \draw (d) -- +(\angleii:1); + \end{scope} +} +\pagestyle{plain} +\begin{document} +\lipsum +\end{document} +% \end{tcblisting} +% \iffalse +%</example> +% \fi + + + +% \iffalse +%<*tikz-page> +% \fi + +% \iffalse +%% Reset the FancyVerbLine counter to have the correct lines number in front +%% of implementation. +% \fi +% \setcounter{FancyVerbLine}{0} + +% \section{Implementation} + +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{tikz-page}[\pkgfiledate\space (v\pkgfileversion)] +% \end{macrocode} + +% The \meta{textpos} option can be used if you want to use |textpos| +% \meta{overlay} option instead of |current page| to position the page +% layout. Beware that |textpos| with \meta{overlay} option maybe incompatible +% with some other packages. On the other hand |tikz| |current page| requires +% at least 2 compilation to work correctly. Thus you might want to use +% \meta{textpos} at conception time and remove this option for your final +% build or if you have incompatibility issues. + +% \begin{macrocode} +\newif\if@tp@use@textpos\@tp@use@textposfalse +\DeclareOption{textpos}{\@tp@use@textpostrue} +\ProcessOptions + +\if@tp@use@textpos +\RequirePackage[absolute]{textpos} +\fi +% \end{macrocode} + +% \begin{macrocode} +\RequirePackage{fancyhdr} +\RequirePackage{tikz} +\usetikzlibrary{plotmarks,calc,shapes,positioning,decorations.text} +\RequirePackage{graphicx} +\RequirePackage{calc} +% \end{macrocode} + + +\makeatletter + +% All margin sizes are defined in\docLength{@tp@left@margin}, +% \docLength{@tp@right@margin}, \docLength{@tp@top@margin}, +% \docLength{@tp@bottom@margin} their values are computed by the +% \refCom{tp@compute@margins}. + +% \begin{macrocode} +\newlength{\@tp@left@margin} +\newlength{\@tp@right@margin} +\newlength{\@tp@top@margin} +\newlength{\@tp@bottom@margin} +% \end{macrocode} + + +% \begin{docCommand}{@tp@create@length}{\marg{block name}\marg{length name}} + +% Generate a \cs{tp@\meta{block name}@\meta{length name}} length. This +% command is intended to be only used to create block length defined below. + +% \begin{macrocode} +\newcommand\@tp@create@length[2]{% + \expandafter\newskip\csname tp@#1@#2\endcsname% +}% +% \end{macrocode} +% \end{docCommand} +% + +% For each standard blocks in the page (|page|, |body|, |marginpar|, +% |header|, |footer|) and additionnal blocks (|top|, |right|, |bottom|, +% |left|), 6 lenths are computed in order to define their anchors. Each +% length is defined using the \refCom{@tp@create@length} macro. + +% \begin{macrocode} +\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}% +}}% +% \end{macrocode} + +% \begin{docCommand}{tcflip}{\marg{odd page code}\marg{even page code}} +% Execute \meta{odd page even code} on odd pages and \meta{even page code} +% on even ones. +% \end{docCommand} +% \begin{macrocode} +\newcommand{\tpflip}[2]{\ifodd\thepage#1\else#2\fi} +% \end{macrocode} + +% \begin{docCommand}{tp@compute@margins}{} +% +% This is where the magic happens. This command sets all \cs{tp@\meta{block +% name}@\meta{length name}} lengths. +% +% \end{docCommand} + +% \begin{macrocode} +\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} + +% \begin{docCommand}{@tp@genanchors}{\marg{block name}} +% Generate all 9 anchors (|northwest|, |north|, |northest|, |west|, +% |center|, |east|, |southwest|, |south|, |southest|) for \meta{block name}. +% \end{docCommand} + +% \begin{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}% +}% +% \end{macrocode} + +% \begin{macrocode} +\newcommand\tp@pgfdeclareanchoralias[3]{% + \expandafter\def\csname pgf@anchor@#1@#3\expandafter\endcsname + \expandafter{\csname pgf@anchor@#1@#2\endcsname}} +% \end{macrocode} + +% \begin{macrocode} +\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} +} +% \end{macrocode} + + +%Create a new |tpx| mark to show anchor location when using +%\refCom{tikzpageputanchors} to display anchors on the page. +% +% \begin{macrocode} +\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} +} +% \end{macrocode} + + +% Anchors can be displayed block by block (using +% \cs{tikzpageputanchorsdefaults}, \cs{tikzpageputanchors} +% \cs{tikzpageputanchorsmarginpar}, \cs{tikzpageputanchorsheader}, +% \cs{tikzpageputanchorsfooter}, \cs{tikzpageputanchorstop}, +% \cs{tikzpageputanchorsright}, \cs{tikzpageputanchorsbottom}, +% \cs{tikzpageputanchorsleft}) or globally (using \refCom{tikzpageputanchors}). + +% \begin{macrocode} +\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)}}; +} +% \end{macrocode} + +% \begin{docCommand}{tikzpageputanchors}{} +% A simple short hand to display all anchors at once. +% \end{docCommand} +% \begin{macrocode} +\def\tikzpageputanchors{ + \tikzpageputanchorsdefaults + \tikzpageputanchorsbody + \tikzpageputanchorsmarginpar + \tikzpageputanchorsheader + \tikzpageputanchorsfooter + \tikzpageputanchorstop + \tikzpageputanchorsbottom + \tikzpageputanchorsleft + \tikzpageputanchorsright +} +% \end{macrocode} + + + +% \begin{docCommand}{tpshowframes}{} +% +% Display |top|, |right|, |bottom| and |left| block using a specific +% background. This can be used in conjunction with \refCom{tikzpageputanchors} for +% debuging purposes. +% +% \end{docCommand} +% \begin{macrocode} +\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); +} +% \end{macrocode} + + +% \begin{docCommand}{tpfancyhdrdefault}{} +% An example to display headers and footer as |fancyhdr| does. +% \end{docCommand} +% \begin{macrocode} +\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) {}; +} +% \end{macrocode} + +% \begin{docCommand}{tikzpage}{} +% Generate a |tikzpicture| for the whole page. if a \cs{tikzpagelayout} +% command exists, it will be executed. +% \end{docCommand} +% \begin{macrocode} +\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 +} +% \end{macrocode} + + +\fancypagestyle{plain}{ + \fancyhf{} + \chead{\tikzpage} +} +\fancypagestyle{empty}{ + \fancyhf{} + \chead{\tikzpage} +} + + +% +\makeatother +% \iffalse +%</tikz-page> +% \fi +% +% \Finale +% +% +% \iffalse +% <*example> +% \fi +% \begin{thebibliography}{9} + +% \bibitem{Graphical Decoration} Trying to do graphical decorations in +% “ClassicThesis style” \url{http://tex.stackexchange.com/questions/86294} +% \end{thebibliography} +% \iffalse +% </example> +% \fi + +\endinput |