summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/metapost/featpost/latex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/metapost/featpost/latex')
-rw-r--r--Master/texmf-dist/doc/metapost/featpost/latex/linuxdoc-sgml.sty117
-rw-r--r--Master/texmf-dist/doc/metapost/featpost/latex/logofeatpost.tex18
-rw-r--r--Master/texmf-dist/doc/metapost/featpost/latex/ltugboat.cls1225
-rw-r--r--Master/texmf-dist/doc/metapost/featpost/latex/macroMan.tex1737
-rw-r--r--Master/texmf-dist/doc/metapost/featpost/latex/mflogohack.sty31
-rw-r--r--Master/texmf-dist/doc/metapost/featpost/latex/null.sty0
-rw-r--r--Master/texmf-dist/doc/metapost/featpost/latex/qwertz.sty19
7 files changed, 3147 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/metapost/featpost/latex/linuxdoc-sgml.sty b/Master/texmf-dist/doc/metapost/featpost/latex/linuxdoc-sgml.sty
new file mode 100644
index 00000000000..a8ad9ad41e3
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/featpost/latex/linuxdoc-sgml.sty
@@ -0,0 +1,117 @@
+%% This is linuxdoc-sgml.sty, for use with SGML-generated LaTeX
+%% by Matt Welsh (mdw@sunsite.unc.edu)
+%%
+%% $Id: linuxdoc-sgml.sty,v 1.8 1998/05/14 20:06:13 cg Exp $
+%%
+%% Based on linuxdoc.sty by Michael K. Johnson, and latex.tex by
+%% Leslie Lamport. MODIFIED BY L. NOBRE G. TO BE USED IN TUGBOAT
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{linuxdoc-sgml}
+
+%%% GLOBAL LAYOUT THINGS
+
+%\marginparwidth 0.0 in
+%\parindent 0.0 in
+%\topmargin -0.5 in
+%\setlength{\textheight}{\paperheight}
+%\addtolength{\textheight}{-2 in}
+%\advance\headsep 2 ex
+%\advance\textheight -2 ex
+%\renewcommand{\baselinestretch}{1.14}
+%\addtolength{\parskip}{1.2 ex}
+
+%%% ONE-SIDED/TWO-SIDED DEPENDENCIES
+
+%\if@twoside % ``book'' style was chosen
+% \oddsidemargin 0.0 in
+% \evensidemargin 0 in
+% \textwidth 6 in
+% \def\ps@headings{\let\@mkboth\markboth
+% \def\@oddfoot{}\def\@evenfoot{}% No feet.
+% \def\@evenhead{\protect\rule[-4pt]{\textwidth}{.5pt}\kern-\textwidth
+% \rm \thepage\hfil \bf \leftmark} % Left heading.
+% \def\@oddhead{\protect\rule[-4pt]{\textwidth}{.5pt}\kern-\textwidth
+% {\bf \rightmark}\hfil \rm\thepage} % Right heading.
+% \def\chaptermark##1{\markboth {{\ifnum \c@secnumdepth >\m@ne
+% \@chapapp\ \thechapter. \ \fi ##1}}{}}%
+% \def\sectionmark##1{\markright {{\ifnum \c@secnumdepth >\z@
+% \thesection. \ \fi ##1}}}}
+
+%\else % if not book style, then
+% \oddsidemargin 0.0 in
+% \evensidemargin\oddsidemargin
+% \textwidth 6.5 in
+% \def\ps@headings{\let\@mkboth\markboth
+% \def\@oddfoot{}\def\@evenfoot{}% No feet.
+% \def\@oddhead{\protect\rule[-4pt]{\textwidth}{.5pt}\kern-\textwidth
+% {\bf \rightmark}\hfil \rm\thepage} % Right heading.
+% \def\@evenhead\@oddhead
+% \def\chaptermark##1{\markboth {{\ifnum \c@secnumdepth >\m@ne
+% \@chapapp\ \thechapter. \ \fi ##1}}{}}%
+% \def\sectionmark##1{\markright {{\ifnum \c@secnumdepth >\z@
+% \thesection. \ \fi ##1}}}}
+
+%\fi
+
+%% Titlepage stuff
+
+\gdef\@title{}
+\gdef\title#1{\gdef\@title{#1}}
+\gdef\@date{}
+\gdef\date#1{\gdef\@date{#1}}
+\gdef\@author{}
+\gdef\author#1{\gdef\@author{#1}}
+\gdef\@abstract{}
+\gdef\abstract#1{\gdef\@abstract{#1}}
+
+\def\maketitle{\thispagestyle{empty}\let\footnotesize\small%
+\let\footnoterule\relax
+%\setcounter{page}{0}%
+%\null
+%\vskip 3 in
+\noindent
+{\huge\sf \@title}\\
+%\rule{\textwidth}{1mm}\\ %%%%%%%%%%%%%%%%%%%%%% MAIN MODIFICATION
+\mbox{}\@author\ \hfill \@date\ \\
+\vskip 1 ex
+\noindent{\sf \@abstract}
+\setcounter{footnote}{0}%
+\gdef\@author{}\gdef\@title{}\gdef\@years{}\gdef\@abstract{}
+\let\maketitle\relax}
+
+%% Needs to be here for the previous ps@headings defs to work.
+\pagestyle{headings}
+
+%%% USEFUL MACROS
+
+\newcommand{\linux}{Linux} % Always use this when
+ % refering to the \linux\
+ % operating system, like that.
+\newcommand{\key}[1]{{\fbox{\small\tt #1}}} % Use this to mark keys, like
+ % \key{del} for the delete key.
+\newcommand{\ret}{\fbox{\sf return}} % Special case for the return key.
+\newcommand{\st}{\small\tt} % Small typewriter -- comes in handy.
+%\newcommand{\lb}{{\tt\char '173}} % Left Brace '{'
+%\newcommand{\rb}{{\tt\char '175}} % Right Brace '}'
+\newcommand{\lbr}{$\langle$} % Left Bracket '<'
+\newcommand{\rbr}{$\rangle$} % Right Bracket '>'
+\newcommand{\bs}{{\tt\char '134}} % BackSlash '\'
+\newcommand{\tm}{${}^{\mbox{\tiny\sf TM}}$}
+\newcommand{\TM}{\tm} % TM trademark symbol in
+ % either case
+\newcommand{\cparam}[1]{{\rm \lbr{\sl #1}\rbr}}
+ % Metavariables.
+
+%% Define NAMEURL macro to handle the optional name argument
+%% This calls on the \url macro from the url.sty package so the
+%% URL will be hyphenated correctly.
+\def\nameurl#1#2{{\em #2} {\tt <\url{#1}>}}
+\def\onlynameurl#1{{\em #1}}
+
+%% the tscreen environment automatically goes into typewriter type,
+%% but is otherwise like the screen environment
+
+\newenvironment{tscreen}%
+ {\begin{quote}\bgroup\small\tt}%
+ {\egroup\end{quote}}
diff --git a/Master/texmf-dist/doc/metapost/featpost/latex/logofeatpost.tex b/Master/texmf-dist/doc/metapost/featpost/latex/logofeatpost.tex
new file mode 100644
index 00000000000..b7c852c4b5c
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/featpost/latex/logofeatpost.tex
@@ -0,0 +1,18 @@
+\documentclass{article}
+\newfont{\normald}{logod10 scaled 10000}
+\usepackage{graphics,color}
+%\setlength{\textwidth}{724pt}
+%\setlength{\oddsidemargin}{-5.4mm}
+%\setlength{\textheight}{57mm}
+%\setlength{\topmargin}{-4mm}
+%\setlength{\headheight}{5mm}
+%\setlength{\headsep}{2mm}
+%\setlength{\footskip}{2\baselineskip}
+\pagestyle{empty}
+\begin{document}
+\fcolorbox{white}{white}{
+ \begin{tabular}{l}
+ {\normald FEATPOST}
+ \end{tabular}
+ }
+\end{document}
diff --git a/Master/texmf-dist/doc/metapost/featpost/latex/ltugboat.cls b/Master/texmf-dist/doc/metapost/featpost/latex/ltugboat.cls
new file mode 100644
index 00000000000..cc0ad276d09
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/featpost/latex/ltugboat.cls
@@ -0,0 +1,1225 @@
+%%
+%% This is file `ltugboat.cls',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tugboat.dtx (with options: `latex,classtop,common,classtail,latex2e,ltugboatcls')
+%%
+%% Copyright (C) 1994,1995,1996 TeX Users Group
+%% All rights reserved.
+%%
+%% This file is part of the tugboat package.
+%% -----------------------------------------
+%%
+%% This is a generated file. Permission is granted to customize the
+%% declarations in this file to serve the needs of your installation.
+%% However, no permission is granted to distribute a modified version of
+%% this file under its original name.
+%%
+%%
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesClass {ltugboat}
+ [1998/09/10 v1.4r
+ TUGboat journal class%
+ ]
+\csname tugstyloaded@\endcsname
+\def\tugstyloaded@{\tugstyinit\endinput}
+\providecommand{\@tugclass}{ltugboat}
+\def\TBInfo{\ClassInfo{\@tugclass}}
+\def\TBError{\ClassError{\@tugclass}}
+\def\TBWarning{\ClassWarning{\@tugclass}}
+\newif\ifpreprint
+\def\preprint{\preprinttrue}
+\DeclareOption{draft}{%
+ \AtEndOfClass{%
+ \setcounter{page}{1001}%
+ \BlackBoxes
+ \def\MakeRegistrationMarks{}%
+ \PrelimDrafttrue
+ }%
+}
+\DeclareOption{preprint}{%
+ \preprinttrue
+}
+\DeclareOption{final}{%
+ \AtEndOfClass{%
+ \UseTrimMarks
+ \NoBlackBoxes
+ \PrelimDraftfalse
+ }%
+}
+\DeclareOption{11pt}{%
+ \TBWarning{The \@tugclass\space class only supports 10pt fonts:
+ \MessageBreak option \CurrentOption\space ignored}%
+}
+\DeclareOption{12pt}{\csname ds@11pt\endcsname}
+\DeclareOption{oneside}{\TBWarning{Option \CurrentOption\space ignored}}
+\DeclareOption{twoside}{\ds@oneside}
+\DeclareOption{onecolumn}{\ds@oneside}
+\DeclareOption{twocolumn}{\ds@oneside}
+\DeclareOption{tugproc}{%
+ \TBWarning{Option \CurrentOption\space ignored: use class ltugproc
+ instead of \@tugclass}%
+}
+\DeclareOption{rawcite}{\let\if@Harvardcite\iffalse}
+\DeclareOption{harvardcite}{\let\if@Harvardcite\iftrue}
+\DeclareOption{extralabel}{\let\UseExtraLabel\@firstofone}
+\DeclareOption{noextralabel}{\let\UseExtraLabel\@gobble}
+\DeclareOption{numbersec}{\let\if@numbersec\iftrue}
+\DeclareOption{nonumber}{\let\if@numbersec\iffalse}
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
+\ExecuteOptions{draft,extralabel,numbersec,rawcite}
+\ProcessOptions
+\LoadClass[twoside]{article}
+\def\sectitlefont{\fontfamily\sfdefault\fontseries{bx}\fontshape{n}%
+ \fontsize\@xviipt\stbaselineskip\selectfont}
+\def\tensl{\fontseries{m}\fontshape{sl}\fontsize\@xpt\@xiipt
+ \selectfont}
+\def\EdNoteFont{\fontfamily{cmr}\fontseries{m}\fontshape{ui}%
+ \fontsize\@xpt\@xiipt\selectfont}
+\IfFileExists{mflogo.sty}%
+ {\RequirePackage{mflogo}}%
+ {\TBWarning
+ {Package mflogo.sty not available --\MessageBreak
+ Proceeding to emulate mflogo.sty}
+ \DeclareRobustCommand\logofamily{%
+ \not@math@alphabet\logofamily\relax
+ \fontencoding{U}\fontfamily{logo}\selectfont}
+ \DeclareTextFontCommand{\textlogo}{\logofamily}
+ \def\MF{\textlogo{META}\-\textlogo{FONT}\@}
+ \def\MP{\textlogo{META}\-\textlogo{POST}\@}
+ \DeclareFontFamily{U}{logo}{}
+ \DeclareFontShape{U}{logo}{m}{n}{%
+ <8><9>gen*logo%
+ <10><10.95><12><14.4><17.28><20.74><24.88>logo10%
+ }{}
+ \DeclareFontShape{U}{logo}{m}{sl}{%
+ <8><9>gen*logosl%
+ <10><10.95><12><14.4><17.28><20.74><24.88>logosl10%
+ }{}
+ \DeclareFontShape{U}{logo}{m}{it}{%
+ <->ssub*logo/m/sl%
+ }{}%
+ }
+\def\makeescape#1{\catcode`#1=\z@}
+\def\makebgroup#1{\catcode`#1=\@ne}
+\def\makeegroup#1{\catcode`#1=\tw@}
+\def\makemath #1{\catcode`#1=\thr@@}
+\def\makealign #1{\catcode`#1=4 }
+\def\makeeol #1{\catcode`#1=5 }
+\def\makeparm #1{\catcode`#1=6 }
+\def\makesup #1{\catcode`#1=7 }
+\def\makesub #1{\catcode`#1=8 }
+\def\makeignore#1{\catcode`#1=9 }
+\def\makespace #1{\catcode`#1=10 }
+\def\makeletter#1{\catcode`#1=11 }
+\chardef\other=12
+\let\makeother\@makeother
+\def\makeactive#1{\catcode`#1=13 }
+\def\makecomment#1{\catcode`#1=14 }
+\def\savecat#1{%
+ \expandafter\xdef\csname\string#1savedcat\endcsname{\the\catcode`#1}}
+\def\restorecat#1{\catcode`#1=\csname\string#1savedcat\endcsname}
+\def\SaveCS#1{\expandafter\let\csname saved@@#1\expandafter\endcsname
+ \csname#1\endcsname}
+\def\RestoreCS#1{\expandafter\let\csname#1\expandafter\endcsname
+ \csname saved@@#1\endcsname}
+\def\plaintubstyle{plain}
+\def\latextubstyle{latex}
+\providecommand\hb@xt@{\hbox to}
+\providecommand\textsuperscript[1]{\ensuremath{\m@th
+ ^{\mbox{\fontsize\sf@size\z@
+ \selectfont #1}}}}
+\def\AllTeX{(\La\kern-.075em)\kern-.075em\TeX}
+\def\AMS{American Mathematical Society}
+\def\AmS{$\mathcal{A}$\kern-.1667em\lower.5ex\hbox
+ {$\mathcal{M}$}\kern-.125em$\mathcal{S}$}
+\def\AmSLaTeX{\AmS-\LaTeX}
+\def\AmSTeX{\AmS-\TeX}
+\def\aw{A\kern.1em-W}
+\def\AW{Addison\kern.1em-\penalty\z@\hskip\z@skip Wesley}
+\def\BibTeX{\textsc{Bib}\kern-.08em\TeX}
+\def\CandT{\textsl{Computers \& Typesetting}}
+\def\CTAN{\acro{CTAN}}
+\def\DTD{\acro{DTD}}
+\def\DVItoVDU{DVIto\kern-.12em VDU}
+\DeclareRobustCommand\eTeX{\ensuremath{\varepsilon}-\kern-.125em\TeX}
+\def\HTML{\acro{HTML}}
+\def\ISBN{\acro{ISBN}}
+\def\ISSN{\acro{ISSN}}
+\def\JTeX{\leavevmode\hbox{\lower.5ex\hbox{J}\kern-.18em\TeX}}
+\def\JoT{\textsl{The Joy of \TeX}}
+\def\LAMSTeX{L\raise.42ex\hbox{\kern-.3em
+ $\m@th$\fontsize\sf@size\z@\selectfont
+ $\m@th\mathcal{A}$}%
+ \kern-.2em\lower.376ex\hbox{$\m@th\mathcal{M}$}\kern-.125em
+ {$\m@th\mathcal{S}$}-\TeX}
+\newcommand{\La}%
+ {L\kern-.36em
+ {\setbox0\hbox{T}%
+ \vbox to\ht0{\hbox{$\m@th$%
+ \csname S@\f@size\endcsname
+ \fontsize\sf@size\z@
+ \math@fontsfalse\selectfont
+ A}%
+ \vss}%
+ }}
+\def\Mc{\setbox\TestBox=\hbox{M}M\vbox
+ to\ht\TestBox{\hbox{c}\vfil}} % for Robert McGaffey
+\def\mf{\textsc{Metafont}}
+\def\MFB{\textsl{The \MF book}}
+\let\TB@@mp\mp
+\DeclareRobustCommand\mp{\ifmmode\TB@@mp\else MetaPost\fi}
+\DeclareTextSymbol{\textohm}{OT1}{'012}
+\DeclareTextSymbolDefault{\textohm}{OT1}
+\newcommand\OMEGA{\textohm}
+\DeclareRobustCommand{\OTP}{\OMEGA\acro{TP}}
+\def\mtex{T\kern-.1667em\lower.424ex\hbox{\^E}\kern-.125emX\@}
+\DeclareRobustCommand\NTS{$\mathcal{N}$\lower.5ex\hbox
+ {$\mathcal{T}$}$\mathcal{S}$\@}
+\def\pcMF{\leavevmode\raise.5ex\hbox{p\kern-.3\p@ c}MF\@}
+\def\PCTeX{PC\thinspace\TeX}
+\def\pcTeX{\leavevmode\raise.5ex\hbox{p\kern-.3\p@ c}\TeX}
+\def\Pas{Pascal}
+\def\PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC\@}
+\def\PiCTeX{\PiC\kern-.11em\TeX}
+\def\plain{\texttt{plain}}
+\def\POBox{P.\thinspace O.~Box }
+\def\PS{{Post\-Script}}
+\def\SC{Steering Committee}
+\def\SGML{\acro{SGML}}
+\def\SliTeX{\textrm{S\kern-.06em\textsc{l\kern-.035emi}%
+ \kern-.06em\TeX}}
+ \def\slMF{\textsl{\MF}} % should never be used
+ \def\stTeX{\textsc{st}\kern-0.13em\TeX}
+\def\TANGLE{\texttt{TANGLE}\@}
+\def\TB{\textsl{The \TeX book}}
+\def\TP{\textsl{\TeX}: \textsl{The Program}}
+\DeclareRobustCommand\TeX{T\kern-.1667em\lower.424ex\hbox{E}\kern-.125emX\@}
+\def\TeXhax{\TeX hax}
+\def\TeXMaG{\TeX M\kern-.1667em\lower.5ex\hbox{A}%
+ \kern-.2267emG\@}
+\def\TeXtures{\textit{Textures}}
+\let\Textures=\TeXtures
+\def\TeXXeT{\TeX-{}-\XeT}
+\def\ttn{\textsl{TTN}\@}
+\def\TTN{\textsl{\TeX{} and TUG News}}
+\let\texttub\textsl % redefined in other situations
+\def\TUB{\texttub{TUGboat}}
+\def\TUG{\TeX\ \UG}
+\def\tug{\acro{TUG}}
+\def\UG{Users Group}
+\def\UNIX{\acro{UNIX}}
+\def\VAX{V\kern-.12em A\kern-.1em X\@}
+\def\VorTeX{V\kern-2.7\p@\lower.5ex\hbox{O\kern-1.4\p@ R}\kern-2.6\p@\TeX}
+\def\XeT{X\kern-.125em\lower.424ex\hbox{E}\kern-.1667emT\@}
+\def\WEB{\texttt{WEB}\@}
+\def\WEAVE{\texttt{WEAVE}\@}
+\newlinechar=`\^^J
+\normallineskiplimit=\p@
+\clubpenalty=10000
+\widowpenalty=10000
+\def\NoParIndent{\parindent=\z@}
+\newdimen\normalparindent
+\normalparindent=20\p@
+\def\NormalParIndent{\global\parindent=\normalparindent}
+\NormalParIndent
+\def\BlackBoxes{\overfullrule=5\p@}
+\def\NoBlackBoxes{\overfullrule=\z@}
+\def\newline{\hskip\z@\@plus\pagewd\break}
+\edef\allowhyphens{\noexpand\hyphenpenalty\the\hyphenpenalty\relax
+ \noexpand\exhyphenpenalty\the\exhyphenpenalty\relax}
+\def\nohyphens{\hyphenpenalty\@M\exhyphenpenalty\@M}
+\newbox\T@stBox \newbox\TestBox
+\newcount\T@stCount \newcount\TestCount
+\newdimen\T@stDimen \newdimen\TestDimen
+\newif\ifT@stIf \newif\ifTestIf
+\def\ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax }
+\newif\iftop@ \newif\ifbot@
+\def\topsmash{\top@true\bot@false\smash@}
+\def\botsmash{\top@false\bot@true\smash@}
+\def\smash{\top@true\bot@true\smash@}
+\def\smash@{\relax\ifmmode\def\next{\mathpalette\mathsm@sh}%
+ \else\let\next\makesm@sh\fi \next }
+\def\finsm@sh{\iftop@\ht\z@\z@\fi\ifbot@\dp\z@\z@\fi\box\z@}
+\long\def\ulap#1{\vbox to \z@{\vss#1}}
+\long\def\dlap#1{\vbox to \z@{#1\vss}}
+\def\xlap#1{\hb@xt@\z@{\hss#1\hss}}
+\long\def\ylap#1{\vbox to \z@{\vss#1\vss}}
+\long\def\zlap#1{\ylap{\xlap{#1}}}
+\def\basezero{\baselineskip\z@skip \lineskip\z@skip}
+\def\nullhrule{\hrule \@height\z@ \@depth\z@ \@width\z@ }
+\def\nullvrule{\vrule \@height\z@ \@depth\z@ \@width\z@ }
+\def\makestrut[#1;#2]{\vrule \@height#1 \@depth#2 \@width\z@ }
+\def\drawoutlinebox[#1;#2;#3]{\T@stDimen=#3
+ \vbox to#1{\hrule \@height\T@stDimen \@depth\z@
+ \vss\hb@xt@#2{\vrule \@width\T@stDimen
+ \hfil\makestrut[#1;\z@]%
+ \vrule \@width\T@stDimen}\vss
+ \hrule \@height\T@stDimen \@depth\z@}}
+\newcount\hours
+\newcount\minutes
+\def\SetTime{\hours=\time
+ \global\divide\hours by 60
+ \minutes=\hours
+ \multiply\minutes by 60
+ \advance\minutes by-\time
+ \global\multiply\minutes by-1 }
+\SetTime
+\def\now{\number\hours:\ifnum\minutes<10 0\fi\number\minutes}
+\def\Now{\today\ \now}
+\newif\ifPrelimDraft
+\def\midrtitle{\ifPrelimDraft {\textsl{preliminary draft, \Now}}\fi}
+\newdimen\raggedskip \raggedskip=\z@
+\newdimen\raggedstretch \raggedstretch=5em % ems of font set now (10pt)
+\newskip\raggedparfill \raggedparfill=\z@\@plus 1fil
+\def\raggedspaces{\spaceskip=.3333em \relax \xspaceskip=.5em \relax }
+\def\raggedright{%
+ \nohyphens
+ \rightskip=\raggedskip\@plus\raggedstretch \raggedspaces
+ \parfillskip=\raggedparfill }
+\def\raggedleft{%
+ \nohyphens
+ \leftskip=\raggedskip\@plus\raggedstretch \raggedspaces
+ \parfillskip=\z@skip }
+\def\raggedcenter{%
+ \nohyphens
+ \leftskip=\raggedskip\@plus\raggedstretch
+ \rightskip=\leftskip \raggedspaces
+ \parindent=\z@ \parfillskip=\z@skip }
+\def\normalspaces{\spaceskip\z@skip \xspaceskip\z@skip }
+\DeclareRobustCommand{\nobreakspace}{%
+ \unskip\nobreak\ \ignorespaces}
+\def\boxcs#1{\box\csname#1\endcsname}
+\def\setboxcs#1{\setbox\csname#1\endcsname}
+\def\newboxcs#1{\expandafter\newbox\csname#1\endcsname}
+\let\gobble\@gobble
+\def\vellipsis{%
+ \leavevmode\kern0.5em
+ \raise\p@\vbox{\baselineskip6\p@\vskip7\p@\hbox{.}\hbox{.}\hbox{.}}
+ }
+\def\bull{\vrule \@height 1ex \@width .8ex \@depth -.2ex }
+\def\cents{{\rm\raise.2ex\rlap{\kern.05em$\scriptstyle/$}c}}
+\def\Dag{\raise .6ex\hbox{$\scriptstyle\dagger$}}
+\def\careof{\leavevmode\hbox{\raise.75ex\hbox{c}\kern-.15em
+ /\kern-.125em\smash{\lower.3ex\hbox{o}}} \ignorespaces}
+\DeclareRobustCommand\sfrac[1]{\@ifnextchar/{\@sfrac{#1}}%
+ {\@sfrac{#1}/}}
+\def\@sfrac#1/#2{\leavevmode\kern.1em\raise.5ex
+ \hbox{$\m@th\mbox{\fontsize\sf@size\z@
+ \selectfont#1}$}\kern-.1em
+ /\kern-.15em\lower.25ex
+ \hbox{$\m@th\mbox{\fontsize\sf@size\z@
+ \selectfont#2}$}}
+\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}}
+\DeclareRobustCommand\meta[1]{%
+ \ensuremath{\langle}\emph{#1}\ensuremath{\rangle}}
+\DeclareRobustCommand\env[1]{%
+ \cs{begin}\texttt{\char`\{#1\char`\}}}
+\def\thinskip{\hskip 0.16667em\relax}
+\def\endash{--}
+\def\emdash{\endash-}
+\def\d@sh#1#2{\unskip#1\thinskip#2\thinskip\ignorespaces}
+\def\dash{\d@sh\nobreak\endash}
+\def\Dash{\d@sh\nobreak\emdash}
+\def\ldash{\d@sh\empty{\hbox{\endash}\nobreak}}
+\def\rdash{\d@sh\nobreak\endash}
+\def\Ldash{\d@sh\empty{\hbox{\emdash}\nobreak}}
+\def\Rdash{\d@sh\nobreak\emdash}
+\def\hyph{-\penalty\z@\hskip\z@skip }
+\def\slash{/\penalty\z@\hskip\z@skip }
+\def\nth#1{%
+ \def\reserved@a##1##2\@nil{\ifcat##1n%
+ 0%
+ \let\reserved@b\ensuremath
+ \else##1##2%
+ \let\reserved@b\relax
+ \fi}%
+ \TestCount=\reserved@a#1\@nil\relax
+ \ifnum\TestCount <0 \multiply\TestCount by\m@ne \fi % subdue negatives
+ \T@stCount=\TestCount
+ \divide\T@stCount by 100 \multiply\T@stCount by 100
+ \advance\TestCount by-\T@stCount % n mod 100
+ \ifnum\TestCount >20 \T@stCount=\TestCount
+ \divide\T@stCount by 10 \multiply\T@stCount by 10
+ \advance\TestCount by-\T@stCount % n mod 10
+ \fi
+ \reserved@b{#1}%
+ \textsuperscript{\ifcase\TestCount th% 0th
+ \or st% 1st
+ \or nd% 2nd
+ \or rd% 3rd
+ \else th% nth
+ \fi}%
+ }
+\def\Review{\@ifnextchar:{\@Review}{\@Review:}}
+\def\@Review:{\@ifnextchar[%]
+ {\@Rev}%
+ {\@Rev[Book review]}}
+\def\@Rev[#1]#2{{\ignorespaces#1\unskip:\enspace\ignorespaces
+ \slshape\mdseries#2}}
+\def\reviewitem{\addvspace{\BelowTitleSkip}%
+ \def\revauth##1{\def\therevauth{##1, }\ignorespaces}%
+ \def\revtitle##1{\def\therevtitle{{\slshape##1}. }\ignorespaces}%
+ \def\revpubinfo##1{\def\therevpubinfo{##1.}\ignorespaces}%
+ }
+\def\endreviewitem{{\noindent\interlinepenalty=10000
+ \therevauth\therevtitle\therevpubinfo\endgraf}%
+ \vskip\medskipamount
+ }
+\def\booktitle#1{{\slshape#1\/}}
+\newcount\issueseqno \issueseqno=-1
+\def\v@lx{\gdef\volx{Volume~\volno~(\volyr), No.~\issno}}
+\def\volyr{}
+\def\volno{}
+\def\vol #1,#2.{\gdef\volno{#1\unskip}%
+ \gdef\issno{\ignorespaces#2\unskip}%
+ \setbox\TestBox=\hbox{\volyr}%
+ \ifdim \wd\TestBox > .2em \v@lx \fi }
+\def\issdate #1#2 #3.{\gdef\issdt{#1#2 #3}\gdef\volyr{#3}%
+ \gdef\bigissdt{#1{\smc\uppercase{#2}} #3}%
+ \setbox\TestBox=\hbox{\volno}%
+ \ifdim \wd\TestBox > .2em \v@lx \fi }
+\vol 0, 0.
+\issdate Thermidor, 2001.
+\def\tubissue#1{\@ifnextchar(%)
+ {\@tubissue@b{#1}}
+ {\@tubissue@a{#1}}}
+\def\@tubissue@b#1(#2){\@tubissue@a{#1}{#2}}
+\def\@tubissue@a#1#2%
+ {\TUB~#1, no.~#2}
+\def\infil@{\jobname}
+\def\Input #1 {\ifnum\issueseqno<0
+ \def\infil@{#1}%
+ \else
+ \def\infil@{tb\number\issueseqno#1}
+ \fi
+ \edef\jobname{\infil@}\@readFLN
+ \@@input \infil@\relax
+ \if@RMKopen
+ \immediate\closeout\@TBremarkfile\@RMKopenfalse
+ \fi
+}
+\newif\if@RMKopen \@RMKopenfalse
+\newwrite\@TBremarkfile
+\def\@TBremark#1{%
+ \if@RMKopen
+ \else
+ \@RMKopentrue\immediate\openout\@TBremarkfile=\infil@.rmk
+ \fi
+ \toks@={#1}%
+ \immediate\write\@TBremarkfile{^^J\the\toks@}%
+ \immediate\write16{^^JTBremark:: \the\toks@^^J}%
+}
+\let\TBremark=\gobble
+\def\TBEnableRemarks{\let\TBremark\@TBremark}
+\def\TUBedit#1{}
+\def\TUBfilename#1#2{\expandafter\def\csname file@@#1\endcsname{#2}}
+\InputIfFileExists{\jobname.fln}%
+ {\TBInfo{Reading alternative file file \jobname.fln}}{}
+\def\@tubfilename#1{\expandafter\ifx\csname file@@#1\endcsname\relax
+ #1\else\csname file@@#1\endcsname\fi}
+\def\fileinput#1{\@@input\@tubfilename{#1} }
+\def\pagexrefON#1{%
+ \write-1{\def\expandafter\noexpand\csname#1\endcsname{\number\c@page}}%
+ \write\ppoutfile{%
+ \def\expandafter\noexpand\csname#1\endcsname{\number\c@page}}%
+ }
+\def\PageXrefON#1{%
+ \immediate\write-1{\def\expandafter
+ \noexpand\csname#1\endcsname{\number\c@page}}%
+ \immediate\write\ppoutfile{\def\expandafter
+ \noexpand\csname#1\endcsname{\number\c@page}}}
+\def\pagexrefOFF#1{}
+\let\pagexref=\pagexrefOFF
+\def\PageXrefOFF#1{}
+\let\PageXref=\PageXrefOFF
+\def\xreftoON#1{%
+ \ifundefined{#1}%
+ ???\TBremark{Need cross reference for #1.}%
+ \else\csname#1\endcsname\fi}
+\def\xreftoOFF#1{???}
+\let\xrefto=\xreftoOFF
+\let\TBdriver\gobble
+\hyphenation{Eijk-hout Hara-lam-bous man-u-script man-u-scripts}
+\PrelimDrafttrue
+\textheight 54pc
+\textwidth 39pc
+\columnsep 1.5pc
+\columnwidth 18.75pc
+\parindent \normalparindent
+\parskip \z@ % \@plus\p@
+\leftmargini 2em
+\leftmarginv .5em
+\leftmarginvi .5em
+\oddsidemargin \z@
+\evensidemargin \z@
+\topmargin -2.5pc
+\headheight 12\p@
+\headsep 20\p@
+\marginparwidth 48\p@
+\marginparsep 10\p@
+\partopsep=\z@
+\topsep=3\p@\@plus\p@\@minus\p@
+\parsep=3\p@\@plus\p@\@minus\p@
+\itemsep=\parsep
+\twocolumn
+\newdimen\pagewd \pagewd=39pc
+\newdimen\trimwd \trimwd=\pagewd
+\newdimen\trimlgt \trimlgt=11in
+\newdimen\headmargin \headmargin=3.5pc
+\newcommand\DeclareLaTeXLogo[5]{\expandafter\def
+ \csname @LaTeX@#1/#2/#3\endcsname{{#4}{#5}}}
+\def\@LaTeX@default{{.36}{.15}}
+\DeclareLaTeXLogo{cmss}{bx}n{.3}{.15}
+\DeclareLaTeXLogo{cmr}m{it}{.3}{.27}
+\DeclareLaTeXLogo{cmr}{bx}{it}{.3}{.27}
+\DeclareRobustCommand\LaTeX{\expandafter\let\expandafter\reserved@a
+ \csname @LaTeX@\f@family/\f@series/\f@shape\endcsname
+ \ifx\reserved@a\relax\let\reserved@a\@LaTeX@default\fi
+ \expandafter\@LaTeX\reserved@a}
+\newcommand\@LaTeX[2]{L\kern-#1em
+ {\sbox\z@ T%
+ \vbox to\ht0{\hbox{$\m@th$%
+ \csname S@\f@size\endcsname
+ \fontsize\sf@size\z@
+ \math@fontsfalse\selectfont
+ A}%
+ \vss}%
+ }%
+ \kern-#2em%
+ \TeX}
+\def\theauthor#1{\csname theauthor#1\endcsname}
+\def\theaddress#1{\csname theaddress#1\endcsname}
+\def\thenetaddress#1{\csname thenetaddress#1\endcsname}
+\def\thePersonalURL#1{\csname thePersonalURL#1\endcsname}
+\def\@defaultauthorlist{%
+ \count@\authornumber
+ \advance\count@ by -2
+ \@tempcnta0
+ \loop
+ \ifnum\count@>0
+ \advance\@tempcnta by \@ne
+ \ignorespaces\theauthor{\number\@tempcnta}\unskip,
+ \advance\count@ by \m@ne
+ \repeat
+ \count@\authornumber
+ \advance\count@ by -\@tempcnta
+ \ifnum\authornumber>0
+ \ifnum\count@>1
+ \count@\authornumber
+ \advance\count@ by \m@ne
+ \ignorespaces\theauthor{\number\count@}\unskip\ and
+ \fi
+ \ignorespaces\theauthor{\number\authornumber}\unskip
+ \fi
+}
+\def\signature#1{\def\@signature{#1}}
+\def\@signature{\@defaultsignature}
+\def\@defaultsignature{{%
+ \let\thanks\@gobble
+ \ifnum\authornumber<0
+ \medskip
+ \signaturemark
+ \theauthor{\number\authornumber}\\
+ \theaddress{\number\authornumber}\\
+ \allowhyphens
+ \thenetaddress{\number\authornumber}\\
+ \thePersonalURL{\number\authornumber}\\
+ \else
+ \count@=0
+ \loop
+ \ifnum\count@<\authornumber
+ \medskip
+ \advance\count@ by \@ne
+ \signaturemark
+ \theauthor{\number\count@}\\
+ \theaddress{\number\count@}\\
+ {%
+ \allowhyphens
+ \thenetaddress{\number\count@}\\
+ \thePersonalURL{\number\count@}\\
+ }%
+ \repeat
+ \fi
+ }%
+}
+\newdimen\signaturewidth \signaturewidth=12pc
+\newcommand\makesignature[1][\medskipamount]{%
+ \@tempdima\signaturewidth
+ \advance\@tempdima 1.5pc
+ \ifdim \@tempdima>\columnwidth
+ \signaturewidth \columnwidth
+ \advance\signaturewidth -1.5pc
+ \fi
+ \par
+ \penalty9000
+ \vspace{#1}%
+ \rightline{%
+ \vbox{\hsize\signaturewidth \ninepoint \raggedright
+ \parindent \z@ \everypar={\hangindent 1pc }
+ \parskip \z@skip
+ \def\|{\unskip\hfil\break}%
+ \def\\{\endgraf}%
+ \def\phone{\rm Phone: }
+ \rm\@signature}%
+ }%
+ \ifnum\authornumber<0 \endgroup\fi
+}
+\def\signaturemark{\leavevmode\llap{$\diamond$\enspace}}
+\newcount\authornumber
+\authornumber=0
+\def\author{%
+ \global\advance\authornumber\@ne
+ \TB@author
+}
+\def\contributor{%
+ \begingroup
+ \authornumber\m@ne
+ \TB@author
+}
+\def\TB@author#1{%
+ \expandafter\def\csname theauthor\number\authornumber\endcsname
+ {\ignorespaces#1\unskip}%
+ \expandafter\def\csname theaddress\number\authornumber\endcsname
+ {\TBWarning{Address for #1\space missing}\@gobble}%
+ \expandafter\def\csname thenetaddress\number\authornumber\endcsname
+ {\TBWarning{Net address for #1\space missing}\@gobble}%
+ \expandafter\let\csname thePersonalURL\number\authornumber\endcsname
+ \@gobble
+ }
+\def\address#1{%
+ \expandafter\def\csname theaddress\number\authornumber\endcsname
+ {\leavevmode\ignorespaces#1\unskip}}
+\def\network#1{\def\@network{#1: }}
+\newcommand\netaddress[1][\relax]{%
+ \begingroup
+ \def\@network{}%
+ #1\@sanitize\makespace\ \makeactive\@
+ \makeactive\.\makeactive\%\@relay@netaddress}%
+\def\@relay@netaddress#1{%
+ \ProtectNetChars
+ \expandafter\protected@xdef
+ \csname thenetaddress\number\authornumber\endcsname
+ {\protect\leavevmode\textrm{\@network}%
+ {\protect\NetAddrChars\net
+ \ignorespaces#1\unskip}}%
+ \endgroup
+ }
+\def\personalURL{\begingroup
+ \@sanitize\makespace\ \makeactive\@
+ \makeactive\.\makeactive\%\makeactive\/\@personalURL}%
+\def\@personalURL#1{%
+ \ProtectNetChars
+ \expandafter\protected@xdef
+ \csname thePersonalURL\number\authornumber\endcsname{%
+ \protect\leavevmode
+ {%
+ \protect\URLchars\net
+ \ignorespaces#1\unskip
+ }%
+ }%
+ \endgroup
+ }
+{%
+ \makecomment\*
+ \makeactive\@
+ \gdef\netaddrat{\makeactive\@*
+ \def@{\discretionary{\char"40}{}{\char"40}}}
+ \makeactive\%
+ \gdef\netaddrpercent{\makeactive\%*
+ \def%{\discretionary{\char"25}{}{\char"25}}}
+ \makeactive\.
+ \gdef\netaddrdot{\makeactive\.*
+ \def.{\discretionary{\char"2E}{}{\char"2E}}}
+ \gdef\NetAddrChars{\netaddrat \netaddrpercent \netaddrdot}
+ \makeactive\/
+ \gdef\URLchars{*
+ \NetAddrChars
+ \makeactive\/*
+ \def/{\discretionary{\char"2F}{}{\char"2F}}}
+ \gdef\ProtectNetChars{*
+ \def@{\protect@}*
+ \def%{\protect%}*
+ \def.{\protect.}*
+ \def/{\protect/}*
+ }
+}
+\if@compatibility
+ \DeclareRobustCommand\net{\normalfont\ttfamily\mathgroup\symtypewriter}
+\else
+ \DeclareOldFontCommand{\net}{\ttfamily\upshape\mdseries}{\mathtt}
+\fi
+\def\authorlist#1{\def\@author{#1}}
+\def\@author{\@defaultauthorlist}
+\def\maketitle{\par
+ \ifdim\PreTitleDrop > \z@
+ \loop
+ \ifdim \PreTitleDrop > \textheight
+ \vbox{}\vfil\eject
+ \advance\PreTitleDrop by -\textheight
+ \repeat
+ \vbox to \PreTitleDrop{}
+ \global\PreTitleDrop=\z@
+ \fi
+ \begingroup
+ \setcounter{footnote}{0}
+ \def\thefootnote{\fnsymbol{footnote}}
+ \@maketitle
+ \@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \gdef\@thanks{}
+ }
+\def\secsep{\vskip 5\baselineskip}
+\newdimen\stbaselineskip \stbaselineskip=18\p@
+\newdimen\stfontheight
+ \settoheight{\stfontheight}{\sectitlefont O}
+\newif\ifSecTitle
+\SecTitlefalse
+\newif\ifWideSecTitle
+\newcommand\sectitle{%
+ \SecTitletrue
+ \@ifstar
+ {\WideSecTitletrue\def\s@ctitle}%
+ {\WideSecTitlefalse\def\s@ctitle}%
+}
+\newdimen\PreTitleDrop \PreTitleDrop=\z@
+\newskip\AboveTitleSkip \AboveTitleSkip=12\p@
+\newskip\BelowTitleSkip \BelowTitleSkip=8\p@
+\newdimen\strulethickness \strulethickness=.6\p@
+\def\@sectitle #1{%
+ \par
+ \penalty-1000
+ \ifWideSecTitle\else\secsep\fi
+ {%
+ \fboxrule\strulethickness
+ \fboxsep\z@
+ \noindent\framebox[\hsize]{%
+ \raggedcenter
+ \def\\{\unskip\break}%
+ \sectitlefont
+ \makestrut[2\stfontheight;\z@]%
+ #1%
+ \makestrut[\z@;\stfontheight]\endgraf
+ }%
+ }%
+ \nobreak
+ \vskip\baselineskip
+}
+\def\@makesectitle{\ifSecTitle
+ \global\SecTitlefalse
+ \ifWideSecTitle
+ \twocolumn[\@sectitle{\s@ctitle}]%
+ \global\WideSecTitlefalse
+ \else
+ \@sectitle{\s@ctitle}%
+ \fi
+ \else
+ \vskip\AboveTitleSkip
+ \kern\topskip
+ \hrule \@height\z@ \@depth\z@ \@width 10\p@
+ \kern-\topskip
+ \kern-\strulethickness
+ \hrule \@height\strulethickness \@depth\z@
+ \kern\medskipamount
+ \nobreak
+ \fi
+}
+\def\@maketitle{\@makesectitle
+ {%
+ \nohyphens \interlinepenalty\@M
+ \setbox0=\hbox{%
+ \let\thanks\@gobble
+ \let\\=\quad
+ \let\and=\quad
+ \ignorespaces\@author}%
+ {%
+ \noindent\bf\raggedright\ignorespaces\@title\endgraf
+ }%
+ \ifdim \wd0 < 5\p@ % omit if author is null
+ \else
+ \nobreak \vskip 4\p@
+ {%
+ \leftskip=\normalparindent
+ \raggedright
+ \def\and{\unskip\\}%
+ \noindent\@author\endgraf
+ }%
+ \fi
+ \nobreak
+ \vskip\BelowTitleSkip
+ }%
+ \global\@afterindentfalse
+ \aftergroup\@afterheading
+}
+\newenvironment{dedication}%
+ {\raggedright\noindent\itshape\ignorespaces}%
+ {\endgraf\medskip}
+\renewenvironment{abstract}%
+ {%
+ \begin{SafeSection}%
+ \section*{Abstract}%
+ }%
+ {\end{SafeSection}}
+\newenvironment{longabstract}%
+ {%
+ \begin{SafeSection}%
+ \section*{Abstract}%
+ \bgroup\small
+ }%
+ {%
+ \endgraf\egroup
+ \end{SafeSection}%
+ \vspace{.25\baselineskip}
+ \begin{center}
+ {$--*--$}
+ \end{center}
+ \vspace{.5\baselineskip}}
+\if@numbersec
+ \def\section{\TB@startsection{{section}%
+ 1%
+ \z@
+ {-8\p@}%
+ {4\p@}%
+ {\normalsize\bf\raggedright\hyphenpenalty=\@M}}}
+ \def\subsection{\TB@startsection{{subsection}%
+ 2%
+ \z@
+ {-8\p@}%
+ {4\p@}%
+ {\normalsize\bf\raggedright\hyphenpenalty=\@M}}}
+ \def\subsubsection{\TB@startsection{{subsubsection}%
+ 3%
+ \z@
+ {-8\p@}%
+ {4\p@}%
+ {\normalsize\bf\raggedright\hyphenpenalty=\@M}}}
+ \def\paragraph{\TB@startsection{{paragraph}%
+ 4%
+ \z@
+ {2.5ex\@plus 1ex}%
+ {-1em}%
+ {\normalsize\bf}}}
+\else
+ \setcounter{secnumdepth}{0}
+ \def\section{\TB@nolimelabel
+ \TB@startsection{{section}%
+ 1%
+ \z@
+ {-8\p@}%
+ {4\p@}%
+ {\normalsize\bf\raggedright\hyphenpenalty=\@M}}}
+ \def\subsection{\TB@nolimelabel
+ \TB@startsection{{subsection}%
+ 2%
+ \z@
+ {-8\p@}%
+ {-0.5em\@plus-\fontdimen3\font}%
+ {\normalsize\bf\raggedright\hyphenpenalty=\@M}}}
+ \def\subsubsection{\TB@nolimelabel
+ \TB@startsection{{subsubsection}%
+ 3%
+ \parindent
+ {-8\p@}%
+ {-0.5em\@plus-\fontdimen3\font}%
+ {\normalsize\bf\raggedright\hyphenpenalty=\@M}}}
+\fi
+\def\TB@startsection#1{\@ifstar
+ {\TBWarning{*-form of \expandafter\string\csname\@firstofsix#1%
+ \endcsname\space inappropriate}%
+ \@startsection#1}%
+ {\@startsection#1}}
+\def\@firstofsix#1#2#3#4#5#6{#1}
+\def\TB@safe@startsection#1{\@startsection#1}
+\newenvironment{SafeSection}%
+ {\let\TB@startsection\TB@safe@startsection}%
+ {}
+\if@numbersec
+ \def\subparagraph{\TB@nosection\subparagraph\paragraph}
+\else
+ \def\paragraph{\TB@nosection\paragraph\subsubsection}
+ \def\subparagraph{\TB@nosection\subparagraph\subsubsection}
+\fi
+\def\chapter{\TB@nosection\chapter\section}
+\def\part{\TB@nosection\part\section}
+\def\TB@nosection#1#2{\TBWarning{class does not support \string#1,
+ \string#2\space used instead}#2}
+\def\l@section#1#2{\addpenalty{\@secpenalty}%
+ \addvspace{1.0em\@plus\p@}%
+ \@tempdima 1.5em
+ \begingroup
+ \parindent\z@ \rightskip\z@ % article style makes \rightskip > 0
+ \parfillskip\z@
+ \bf\leavevmode\advance\leftskip\@tempdima\hskip-\leftskip#1\nobreak\hfil
+ \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
+ \endgroup}
+\renewcommand\appendix{\par
+ \renewcommand\thesection{\@Alph\c@section}%
+ \setcounter{section}{0}%
+ \if@numbersec
+ \else
+ \setcounter{secnumdepth}{1}%
+ \fi
+ \def\@tempa{appendix}
+ \ifx\@tempa\@currenvir
+ \expandafter\@appendix@env
+ \fi
+}
+\newcommand\app@prefix@section{}
+\newcommand\@appendix@env[1][Appendix]{%
+ \renewcommand\@seccntformat[1]{\csname app@prefix@##1\endcsname
+ \csname the##1\endcsname\quad}%
+ \renewcommand\app@prefix@section{#1 }%
+}
+\let\endappendix\relax
+\def\TB@nolimelabel{\def\@currentlabel{\protect\TBWarning
+ {Invalid label on page \thepage\space used}%
+ \textbf{?!?}}}
+\let\TB@@sect\@sect
+\let\TB@@ssect\@ssect
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \def\@currentlabelname{#7}%
+ \TB@@sect{#1}{#2}{#3}{#4}{#5}{#6}[{#7}]{#8}%
+}
+\def\@ssect#1#2#3#4#5{%
+ \def\@currentlabelname{#5}%
+ \TB@@ssect{#1}{#2}{#3}{#4}{#5}%
+}
+\def\label#1{{%
+ \@bsphack
+ \let\label\@gobble
+ \let\index\@gobble
+ \if@filesw
+ \protected@write\@auxout{}%
+ {\string\newlabel{#1}{%
+ {\@currentlabel}{\thepage}{\@currentlabelname}}%
+ }%
+ \fi
+ \@esphack
+ }%
+}
+\let\@currentlabelname\@empty
+\DeclareRobustCommand\ref[1]{\expandafter\@setref
+ \csname r@#1\endcsname\@firstofthree{#1}}
+\DeclareRobustCommand\pageref[1]{\expandafter\@setref
+ \csname r@#1\endcsname\@secondofthree{#1}}
+\DeclareRobustCommand\nameref[1]{\expandafter\@setref
+ \csname r@#1\endcsname\@thirdofthree{#1}}
+\long\def\@firstofthree#1#2#3{#1}
+\long\def\@secondofthree#1#2#3{#2}
+\long\def\@thirdofthree#1#2#3{#3}
+\long\def\@makecaption#1#2{%
+ \vskip\abovecaptionskip
+ \sbox\@tempboxa{#1: #2}%
+ \ifdim \wd\@tempboxa >\hsize
+ \raggedright\hyphenpenalty=\@M
+ #1: #2\par
+ \else
+ \global \@minipagefalse
+ \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi
+ \vskip\belowcaptionskip}
+\renewcommand\normalsize{%
+ \@setfontsize\normalsize\@xpt\@xiipt
+ \abovedisplayskip=3\p@\@plus 3\p@\@minus\p@
+ \belowdisplayskip=\abovedisplayskip
+ \abovedisplayshortskip=\z@\@plus 3\p@
+ \belowdisplayshortskip=\p@\@plus 3\p@\@minus\p@
+}
+
+\renewcommand\small{%
+ \@setfontsize\small\@ixpt{11}%
+ \abovedisplayskip=2.5\p@\@plus 2.5\p@\@minus\p@
+ \belowdisplayskip=\abovedisplayskip
+ \abovedisplayshortskip=\z@\@plus 2\p@
+ \belowdisplayshortskip=\p@\@plus 2\p@\@minus\p@
+}
+\renewcommand\footnotesize{%
+ \@setfontsize\footnotesize\@viiipt{9.5}%
+ \abovedisplayskip=3\p@\@plus 3\p@\@minus\p@
+ \belowdisplayskip=\abovedisplayskip
+ \abovedisplayshortskip=\z@\@plus 3\p@
+ \belowdisplayshortskip=\p@\@plus 3\p@\@minus\p@
+}
+\def\@listi{%
+ \leftmargin\leftmargini\parsep=\p@\@plus\p@\@minus\p@
+ \itemsep=\parsep
+ \listparindent=1em
+ }
+
+\def\@listii{%
+ \leftmargin\leftmarginii
+ \labelwidth=\leftmarginii \advance\labelwidth-\labelsep
+ \topsep=2\p@\@plus\p@\@minus\p@
+ \parsep=\p@\@plus\p@\@minus\p@
+ \itemsep=\parsep
+ \listparindent=1em
+ }
+
+\def\@listiii{%
+ \leftmargin=\leftmarginiii
+ \labelwidth=\leftmarginiii \advance\labelwidth-\labelsep
+ \topsep=\p@\@plus\p@\@minus\p@
+ \parsep=\z@
+ \itemsep=\topsep
+ \listparindent=1em
+ }
+\def\quote{\list{}{\rightmargin.5\leftmargin}\item[]}
+\renewcommand{\quotation}{\list{}{\listparindent 1.5em
+ \rightmargin.5\leftmargin\parsep \z@\@plus\p@}\item[]}
+\let\@TBverbatim\verbatim
+\let\@TBendverbatim\endverbatim
+\def\verbatim{\futurelet\reserved@a\@switch@sqbverbatim}
+\def\@switch@sqbverbatim{\ifx\reserved@a[%]
+ \expandafter\@sqbverbatim\else
+ \def\reserved@b{\@sqbverbatim[]}\expandafter\reserved@b\fi}
+\def\@sqbverbatim[#1]{%
+ \def\ruled{\let\if@ruled\iftrue}%
+ #1\@TBverbatim}
+\def\@verbatim{%
+ \if@ruled\trivlist\item\hrule\kern5\p@\nobreak\fi
+ \trivlist \item\relax
+ \if@minipage\else\vskip\parskip\fi
+ \leftskip\@totalleftmargin\rightskip\z@skip
+ \parindent\z@\parfillskip\@flushglue\parskip\z@skip
+ \@@par
+ \@tempswafalse
+ \def\par{%
+ \if@tempswa
+ \leavevmode \null \@@par\penalty\interlinepenalty
+ \else
+ \@tempswatrue
+ \ifhmode\@@par\penalty\interlinepenalty\fi
+ \fi}%
+ \obeylines \verbatim@font \@noligs
+ \let\do\@makeother \dospecials
+ \everypar \expandafter{\the\everypar \unpenalty}%
+}%
+\def\endverbatim{\@TBendverbatim
+ \if@ruled\kern5\p@\hrule\endtrivlist\fi}
+{\makeactive<
+ \gdef<#1>{{\reset@font\ensuremath{\langle}%
+ \textit{#1}%
+ \ensuremath{\rangle}}}
+}
+\let\if@ruled\iffalse
+\if@Harvardcite
+\let\@internalcite\cite
+\def\cite{\def\@citeseppen{-1000}%
+ \def\@cite##1##2{(##1\if@tempswa , ##2\fi)}%
+ \def\citeauthoryear##1##2##3{##1, ##3}\@internalcite}
+\def\citeNP{\def\@citeseppen{-1000}%
+ \def\@cite##1##2{##1\if@tempswa , ##2\fi}%
+ \def\citeauthoryear##1##2##3{##1, ##3}\@internalcite}
+\def\citeN{\def\@citeseppen{-1000}%
+ \def\@cite##1##2{##1\if@tempswa , ##2)\else{)}\fi}%
+ \def\citeauthoryear##1##2##3{##1 (##3}\@citedata}
+\def\citeA{\def\@citeseppen{-1000}%
+ \def\@cite##1##2{(##1\if@tempswa , ##2\fi)}%
+ \def\citeauthoryear##1##2##3{##1}\@internalcite}
+\def\citeANP{\def\@citeseppen{-1000}%
+ \def\@cite##1##2{##1\if@tempswa , ##2\fi}%
+ \def\citeauthoryear##1##2##3{##1}\@internalcite}
+\def\shortcite{\def\@citeseppen{-1000}%
+ \def\@cite##1##2{(##1\if@tempswa , ##2\fi)}%
+ \def\citeauthoryear##1##2##3{##2, ##3}\@internalcite}
+\def\shortciteNP{\def\@citeseppen{-1000}%
+ \def\@cite##1##2{##1\if@tempswa , ##2\fi}%
+ \def\citeauthoryear##1##2##3{##2, ##3}\@internalcite}
+\def\shortciteN{\def\@citeseppen{-1000}%
+ \def\@cite##1##2{##1\if@tempswa , ##2)\else{)}\fi}%
+ \def\citeauthoryear##1##2##3{##2 (##3}\@citedata}
+\def\shortciteA{\def\@citeseppen{-1000}%
+ \def\@cite##1##2{(##1\if@tempswa , ##2\fi)}%
+ \def\citeauthoryear##1##2##3{##2}\@internalcite}
+\def\shortciteANP{\def\@citeseppen{-1000}%
+ \def\@cite##1##2{##1\if@tempswa , ##2\fi}%
+ \def\citeauthoryear##1##2##3{##2}\@internalcite}
+\def\citeyear{\def\@citeseppen{-1000}%
+ \def\@cite##1##2{(##1\if@tempswa , ##2\fi)}%
+ \def\citeauthoryear##1##2##3{##3}\@citedata}
+\def\citeyearNP{\def\@citeseppen{-1000}%
+ \def\@cite##1##2{##1\if@tempswa , ##2\fi}%
+ \def\citeauthoryear##1##2##3{##3}\@citedata}
+\def\@citedata{%
+ \@ifnextchar [{\@tempswatrue\@citedatax}%
+ {\@tempswafalse\@citedatax[]}%
+}
+
+\def\@citedatax[#1]#2{%
+\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi%
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do%
+ {\@citea\def\@citea{, }\@ifundefined% by Young
+ {b@\@citeb}{{\bf ?}%
+ \@warning{Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}%
+\def\@citex[#1]#2{%
+\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi%
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do%
+ {\@citea\def\@citea{; }\@ifundefined% by Young
+ {b@\@citeb}{{\bf ?}%
+ \@warning{Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}%
+\def\@biblabel#1{}
+\newlength{\bibhang}
+\setlength{\bibhang}{2em}
+\newdimen\bibindent
+\bibindent=1.5em
+\@ifundefined{refname}%
+ {\newcommand{\refname}{References}}%
+ {}%
+\def\thebibliography#1{\let\TB@startsection\TB@safe@startsection
+ \section*{\refname\@mkboth
+ {\uppercase{\refname}}{\uppercase{\refname}}}\list
+ {[\arabic{enumi}]}{%
+ \labelwidth\z@ \labelsep\z@
+ \leftmargin\bibindent
+ \itemindent -\bibindent
+ \listparindent \itemindent
+ \parsep \z@
+ \usecounter{enumi}}
+ \def\newblock{}
+ \sloppy
+ \sfcode`\.=1000\relax}
+\def\etal{et\,al.\@}
+\def\bibentry{\smallskip
+ \hangindent=\parindent
+ \hangafter=1
+ \noindent
+ \sloppy
+ \clubpenalty500 \widowpenalty500
+ \frenchspacing}
+\def\bibliography#1{%
+ \if@filesw\immediate\write\@auxout{\string\bibdata{\@tubfilename{#1}}}\fi
+ \@input{\jobname.bbl}}
+
+\def\bibliographystyle#1{\if@filesw\immediate\write\@auxout
+ {\string\bibstyle{\@tubfilename{#1}}}\fi}
+\else
+\let\TB@save@thebibliography\thebibliography
+\def\thebibliography{\let\TB@startsection\TB@safe@startsection
+ \TB@save@thebibliography}
+\fi
+\def\HorzR@gisterRule{\vrule \@height 0.2\p@ \@depth\z@ \@width 0.5in }
+\def\DownShortR@gisterRule{\vrule \@height 0.2\p@ \@depth 1pc \@width 0.2\p@ }
+\def\UpShortR@gisterRule{\vrule \@height 1pc \@depth\z@ \@width 0.2\p@ }
+\def\ttopregister{\dlap{%
+ \hb@xt@\trimwd{\HorzR@gisterRule \hfil \HorzR@gisterRule
+ \HorzR@gisterRule \hfil \HorzR@gisterRule}%
+ \hb@xt@\trimwd{\hfil \DownShortR@gisterRule \hfil}}}
+\def\tbotregister{\ulap{%
+ \hb@xt@\trimwd{\hfil \UpShortR@gisterRule \hfil}%
+ \hb@xt@\trimwd{\HorzR@gisterRule \hfil \HorzR@gisterRule
+ \HorzR@gisterRule \hfil \HorzR@gisterRule}}}
+\def\topregister{\ttopregister}
+\def\botregister{\tbotregister}
+\def \rtitlex{\def\texttub##1{{\normalsize\textrm{##1}}}\TUB, \volx }
+
+\def\PrelimDraftfooter{%
+ \dlap{\kern\textheight\kern3pc
+ \rlap{\hb@xt@\pagewd{\midrtitle\hfil\midrtitle}}
+ }}
+
+\def\MakeRegistrationMarks{}
+\def\UseTrimMarks{%
+ \def\MakeRegistrationMarks{%
+ \ulap{\rlap{%
+ \vbox{\dlap{\vbox to\trimlgt{\vfil\botregister}}%
+ \topregister\vskip \headmargin \vskip 10\p@}}}}%
+ }
+
+\def\@oddhead{\MakeRegistrationMarks\PrelimDraftfooter
+ \normalsize\csname normalshape\endcsname\rm
+ \rtitlex\qquad\midrtitle \hfil \thepage}
+\def\@evenhead{\MakeRegistrationMarks\PrelimDraftfooter
+ \normalsize\csname normalshape\endcsname\rm
+ \thepage\hfil\midrtitle\qquad\rtitlex}
+\def\@oddfoot{}
+\def\@evenfoot{}
+\def\ps@headings{}
+\pagestyle{headings}
+\def\@outputdblcol{\if@firstcolumn \global\@firstcolumnfalse
+ \global\setbox\@leftcolumn\box\@outputbox
+ \global\brokenpenalty10000
+ \else \global\@firstcolumntrue
+ \global\brokenpenalty100
+ \setbox\@outputbox\vbox{\hb@xt@\textwidth{\hb@xt@\columnwidth
+ {\box\@leftcolumn \hss}\hfil \vrule \@width\columnseprule\hfil
+ \hb@xt@\columnwidth{\box\@outputbox \hss}}}\@combinedblfloats
+ \@outputpage \begingroup \@dblfloatplacement \@startdblcolumn
+ \@whilesw\if@fcolmade \fi{\@outputpage\@startdblcolumn}\endgroup
+ \fi}
+\newif\ifFirstPar \FirstParfalse
+\def\smc{\sc}
+\def\ninepoint{\small}
+\DeclareRobustCommand\SMC{%
+ \ifx\@currsize\normalsize\small\else
+ \ifx\@currsize\small\footnotesize\else
+ \ifx\@currsize\footnotesize\scriptsize\else
+ \ifx\@currsize\large\normalsize\else
+ \ifx\@currsize\Large\large\else
+ \ifx\@currsize\LARGE\Large\else
+ \ifx\@currsize\scriptsize\tiny\else
+ \ifx\@currsize\tiny\tiny\else
+ \ifx\@currsize\huge\LARGE\else
+ \ifx\@currsize\Huge\huge\else
+ \small\SMC@unknown@warning
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+}
+\newcommand\SMC@unknown@warning{\TBWarning{\string\SMC: unrecognised
+ text font size command -- using \string\small}}
+\newcommand\textSMC[1]{{\SMC #1}}
+\newcommand\acro[1]{\textSMC{#1}\@}
+\def\xEdNote{{\EdNoteFont Editor's note:\enspace }}
+\def \EdNote{\@ifnextchar[%]
+ {%
+ \ifvmode
+ \smallskip\noindent\let\@EdNote@\@EdNote@v
+ \else
+ \unskip\quad\def\@EdNote@{\unskip\quad}%
+ \fi
+ \@EdNote
+ }%
+ \xEdNote
+}
+\long\def\@EdNote[#1]{%
+ [\thinspace\xEdNote\ignorespaces
+ #1%
+ \unskip\thinspace]%
+ \@EdNote@
+}
+\def\@EdNote@v{\par\smallskip}
+\def\SelfDocumenting{%
+ \setlength\textwidth{31pc}
+ \onecolumn
+ \parindent \z@
+ \parskip 2\p@\@plus\p@\@minus\p@
+ \oddsidemargin 8pc
+ \evensidemargin 8pc
+ \marginparwidth 8pc
+ \toks@\expandafter{\@oddhead}%
+ \xdef\@oddhead{\hss\hb@xt@\pagewd{\the\toks@}}%
+ \toks@\expandafter{\@evenhead}%
+ \xdef\@evenhead{\hss\hb@xt@\pagewd{\the\toks@}}%
+ \def\ps@titlepage{}%
+}
+\def\ps@titlepage{}
+
+\long\def\@makefntext#1{\parindent 1em\noindent\hb@xt@2em{}%
+ \llap{\@makefnmark}\null$\mskip5mu$#1}
+
+\def\fnum@figure{{\bf Figure \thefigure}}
+\if@Harvardcite
+ \AtBeginDocument{%
+ \bibliographystyle{ltugbib}%
+ }
+\fi
+\authornumber\z@
+\let\@signature\@defaultsignature
+\InputIfFileExists{ltugboat.cfg}{\TBInfo{Loading ltugboat
+ configuration information}}{}
+\endinput
+%%
+%% End of file `ltugboat.cls'.
diff --git a/Master/texmf-dist/doc/metapost/featpost/latex/macroMan.tex b/Master/texmf-dist/doc/metapost/featpost/latex/macroMan.tex
new file mode 100644
index 00000000000..4e8c9f3a333
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/featpost/latex/macroMan.tex
@@ -0,0 +1,1737 @@
+\documentclass[a4paper]{article}
+\newif\ifpdf
+\ifx\pdfoutput\undefined
+ \pdffalse % we do not use PDFLaTeX
+\else
+ \pdfoutput=1 % we use PDFLaTeX
+ \pdftrue
+\fi
+\usepackage{linuxdoc-sgml}
+\usepackage{qwertz}
+\usepackage{url}
+\usepackage[latin1]{inputenc}
+\ifpdf
+ \usepackage[pdftex,colorlinks=true,urlcolor=blue,linkcolor=blue]{hyperref}
+ \pdfcompresslevel=9
+\else
+ \usepackage{t1enc}
+%% \usepackage[dvips]{hyperref}
+\fi
+\usepackage[english]{babel}
+\usepackage{epsfig}
+\usepackage{null}
+\def\addbibtoc{
+\addcontentsline{toc}{section}{\numberline{\mbox{}}\relax\bibname}
+}%end-preamble
+\setcounter{page}{1}
+\urldef{\aaaurl} \url{http://www-math.univ-poitiers.fr/~phan/m3Dplain.html}
+\urldef{\aaburl} \url{http://directory.fsf.org/GNU/3DLDF.html}
+\urldef{\aacurl} \url{http://www.povray.org/}
+\urldef{\aadurl} \url{http://www.blender3d.org/}
+\urldef{\aaeurl} \url{http://jl.photodex.com/dog/}
+\urldef{\aafurl} \url{http://www.flexer.it/galrey/}
+\urldef{\aagurl} \url{http://lince.cii.fc.ul.pt/xcmd/xcmd.html}
+\urldef{\aahurl} \url{http://www.ctan.org/tex-archive/graphics/metapost/contrib/macros/latexmp/}
+\urldef{\aaiurl} \url{http://www.ida.liu.se/~joned/download/mps2eps/}
+\urldef{\aajurl} \url{http://matagalatlante.org/nobre/hyt/technicaldrawfromphoto.html}
+\urldef{\aakurl} \url{http://www.gnuplot.info/}
+\urldef{\aalurl} \url{http://gri.sourceforge.net/}
+\title{FEATPOST macros}
+\author{L. Nobre G., {\ttfamily http://matagalatlante.org}}
+\date{December 2004}
+\abstract{ This document intends to be an explanation of the MetaPost macros defined in the {\ttfamily FEATPOST} package. Its purpose is to draw
+ two or three-dimensional physics diagrams.
+ The {\ttfamily FEATPOST} package is supposed to help you draw figures
+ containing 3D dots, vectors, flat arrows, angles, parametric
+ lines, circles, ellipses, cones, cylinders, spheres, globes, hemispheres, toruses, elliptical frusta,
+ polygons, polyhedra, functional and parametric surfaces, direction fields, field lines
+ and trajectories in vector fields, schematic automobiles, electric charges, etc.
+ The fact that it is a programming language instead of Computer Aided Design (CAD) helps the user to experiment different figure layouts without changing specified geometric relationships among figure elements. Two of the intrinsic MetaPost features which may be important for physics
+ diagrams are: (i) the typesetting power of
+ TeX is easily called when needed and (ii) besides a sufficient
+ number of mathematical operators, geometric relationships may
+ be expressed by linear equations, without explicit assignements.
+ }
+
+
+\begin{document}
+\maketitle
+
+\section{Introduction}
+
+3D in MetaPost is not a new idea. Denis Roegel
+contributed related packages to CTAN some years ago. It was the
+subject of a 1997 TUGboat article (V18, N4, 274-283). Anthony
+Phan has been developing a very elegant package
+called
+{\em m3D} {\tt \aaaurl}
+. Due to his skilled coding, {\ttfamily m3D} can
+handle larger objects and can produce more realistic renderings than
+{\ttfamily FEATPOST}. Another possibilty is
+{\em GNU 3DLDF} {\tt \aaburl}
+.
+In any case we are talking about vector-based abstract diagrams,
+so the functionality of
+these packages is nearer to {\ttfamily GNUPLOT} than to {\ttfamily OpenGL}.
+We could also talk about {\ttfamily
+{\em POV-ray} {\tt \aacurl}
+} or
+{\ttfamily
+{\em blender} {\tt \aadurl}
+} but these
+are focused on ray-traced images, a completely different thing.
+
+Regarding software {\ttfamily FEATPOST} requires only MetaPost but
+reccomends {\ttfamily LaTeX, bash, ImageMagick, ghostscript,
+Linuxdoc, Textutils, dvips, epstopdf, sed, gv, plaympeg,
+{\em dog} {\tt \aaeurl}
+,
+{\em galrey} {\tt \aafurl}
+} and {\ttfamily
+{\em xcmd} {\tt \aagurl}
+}. Also, it is highly beneficial to
+be able to understand and cope with MetaPost error messages as
+{\ttfamily FEATPOST} has no protection against mistaken inputs. One
+probable cause of errors is the use of variables with the name of
+procedures, like
+\begin{tscreen}
+\begin{verbatim}
+X, Y, Z, N, rp, cb, ps
+\end{verbatim}
+\end{tscreen}
+All other procedure names have six or more characters.
+
+The user must be aware that MetaPost has a limited arithmetic power
+and that the author has limited programming skills,
+which may lead to unperfect 3D figures or very long processing time.
+It's advisable not to try very complex diagrams and it's recommended to
+keep 3D coordinates within order 1 (default MetaPost units).
+
+All {\ttfamily FEATPOST} macros are build apon the MetaPost
+{\ttfamily color} variable type. It looks like this:
+\begin{tscreen}
+\begin{verbatim}
+(red,green,blue)
+\end{verbatim}
+\end{tscreen}
+Its components may, nevertheless,
+be arbtitrary numbers, like:
+\begin{tscreen}
+\begin{verbatim}
+(X,Y,Z)
+\end{verbatim}
+\end{tscreen}
+So, the
+{\ttfamily color} type is adequate to define not only colors but
+also 3D points and vectors.
+
+
+\section{Small Tutorial}
+
+One very minimalistic example program could be:
+\begin{tscreen}
+\begin{verbatim}
+beginfig(1);
+ cartaxes(1,1,1);
+endfig;
+end;
+\end{verbatim}
+\end{tscreen}
+where {\ttfamily cartaxes} is a
+{\ttfamily FEATPOST} macro that produces
+the Cartesian referential.
+
+One small example program may be:
+\begin{tscreen}
+\begin{verbatim}
+f := 5.4*(1.5,0.5,1);
+Spread := 30;
+beginfig(1);
+ numeric gridstep, sidenumber, i, j, coord, aa, ab, ac;
+ color pa;
+ gridstep = 0.9;
+ sidenumber = 10;
+ coord = 0.5*sidenumber*gridstep;
+ for i=0 upto sidenumber:
+ for j=0 upto sidenumber:
+ pa := (-coord+j*gridstep,-coord+i*gridstep,0);
+ aa := uniformdeviate(360);
+ ab := uniformdeviate(180);
+ ac := uniformdeviate(90);
+ kindofcube( false, false, pa, aa, ab, ac, 0.4, 0.4, 0.9 );
+ endfor;
+ endfor;
+endfig;
+end.
+\end{verbatim}
+\end{tscreen}
+where {\ttfamily kindofcube}
+is a {\ttfamily FEATPOST} macro that produces
+a rectangular prism (cuboid).
+
+\begin{figure}[tbp]
+\ifpdf
+
+\else
+\centerline{\epsfig{file=../allps/kindofcube.1,height=5cm,angle=0}}\fi
+\ifpdf
+\centerline{\epsfig{file=../nontextualpng/kindofcube.1.png}}\fi
+\caption{Example that uses {\ttfamily kindofcube}.}
+\end{figure}
+\label{figkindofcube1}
+
+The main variable of any three-dimensional figure is the
+point of view. {\ttfamily FEATPOST} uses the variable {\ttfamily f}
+as the point of view. {\ttfamily Spread} is another global
+variable that controls the size of the projection.
+
+Another example may be:
+\begin{tscreen}
+\begin{verbatim}
+f := (13,7,3.5);
+Spread := 35;
+beginfig(1);
+ numeric i, len, wang, reflen, frac, coordg;
+ numeric fws, NumLines, inray, outay;
+ path conepath, cira, cirb, ella, ellb, tuba, tubb, tubc;
+ color axe, aroc, cubevertex, conecenter, conevertex;
+ color allellaxe, ellaaxe, ellbaxe, pca, pea, pcb, peb;
+ frac := 0.5;
+ len := 0.6;
+ wang := 60;
+ axe := (0,cosd(90-wang),sind(90-wang));
+ fws := 4;
+ reflen := 0.2*fws;
+ outay := 0.45*fws;
+ inray := 0.7*outay;
+ coordg := frac*fws;
+ NumLines := 30;
+ HoriZon := -0.5*fws;
+ setthestage( 0.5*NumLines, 2*fws );
+ cubevertex = (0.12*fws,-0.5*fws,-0.5*fws);
+ kindofcube(false,true,cubevertex,180,0,0,0.65*fws,0.2*fws,fws);
+ aroc := outay*(0,cosd(wang),sind(wang))-0.5*(0,fws,fws);
+ rigorousdisc( inray, true, aroc, outay, axe*len );
+ allellaxe := reflen*( 0.707, 0.707, 0 );
+ ellaaxe := reflen*( 0.707, -0.707, 1.0 );
+ ellbaxe := reflen*( -0.707, 0.707, 1.0 );
+ conecenter = ( coordg, coordg, -0.5*fws );
+ pca := ( coordg, -coordg, -0.5*fws );
+ pcb := ( -coordg, coordg, -0.5*fws );
+ pea := ( coordg, -coordg, 0.9*fws );
+ peb := ( -coordg, coordg, 0.9*fws );
+ cira := goodcirclepath( pca, blue, reflen );
+ cirb := goodcirclepath( pcb, blue, reflen );
+ ella := ellipticpath( pea, allellaxe, ellaaxe );
+ ellb := ellipticpath( peb, allellaxe, ellbaxe );
+ tuba := twocyclestogether( cira, ella );
+ tubb := twocyclestogether( cirb, ellb );
+ tubc := twocyclestogether( ella, ellb );
+ unfill tubb; draw tubb;
+ unfill tubc; draw tubc;
+ unfill tuba; draw tuba;
+ conevertex = conecenter + ( -3.5*reflen, 0, 0.8*fws );
+ verygoodcone(false,conecenter,blue,reflen,conevertex);
+endfig;
+end.
+\end{verbatim}
+\end{tscreen}
+where we find a {\ttfamily rigorousdisc}
+and a {\ttfamily verygoodcone}
+(the nicest {\ttfamily FEATPOST} macros) in addition to
+{\ttfamily setthestage}, {\ttfamily twocyclestogether} and
+{\ttfamily kindofcube}.
+
+\begin{figure}[tbp]
+\ifpdf
+
+\else
+\centerline{\epsfig{file=../allps/stageforthree.1,height=5cm,angle=0}}\fi
+\ifpdf
+\centerline{\epsfig{file=../nontextualpng/stageforthree.1.png}}\fi
+\caption{Example that uses {\ttfamily rigorousdisc} and {\ttfamily verygoodcone}.}
+\end{figure}
+\label{figstageforthree}
+
+
+\subsection{Mechanics}
+
+The following is the sequence of steps necessary to produce
+the diagrams.
+\begin{enumerate}
+\item To use LaTeX fonts enter the shell command
+\par
+\addvspace{\medskipamount}
+\nopagebreak\hrule
+\begin{verbatim}
+export TEX=latex
+\end{verbatim}
+\nopagebreak\hrule
+\addvspace{\medskipamount}
+\item Make your MetaPost program know {\ttfamily FEATPOST} macros.
+This may be accomplished in two ways:
+\begin{itemize}
+\item Insert the line:
+\begin{tscreen}
+\begin{verbatim}
+input featpost3Dplus2D;
+\end{verbatim}
+\end{tscreen}
+at
+the beginning
+of your program and
+then enter the shell command
+\par
+\addvspace{\medskipamount}
+\nopagebreak\hrule
+\begin{verbatim}
+mpost yourprogram.mp
+\end{verbatim}
+\nopagebreak\hrule
+\addvspace{\medskipamount}
+ or
+\item Pre-compile the macros into a {\ttfamily mem} file,
+for instance:
+\par
+\addvspace{\medskipamount}
+\nopagebreak\hrule
+\begin{verbatim}
+inimpost featpost.mp
+\end{verbatim}
+\nopagebreak\hrule
+\addvspace{\medskipamount}
+ and then run your
+program with
+\par
+\addvspace{\medskipamount}
+\nopagebreak\hrule
+\begin{verbatim}
+mpost -mem featpost yourprogram.mp
+\end{verbatim}
+\nopagebreak\hrule
+\addvspace{\medskipamount}
+\end{itemize}
+\item If your program contains LaTeX text you may insert, at the
+beginning, the lines
+\begin{tscreen}
+\begin{verbatim}
+verbatimtex
+\documentclass{article}
+\begin{document}
+etex
+\end{verbatim}
+\end{tscreen}
+and at the end
+\begin{tscreen}
+\begin{verbatim}
+verbatimtex
+\end{document}
+etex
+\end{verbatim}
+\end{tscreen}
+or make use of the
+
+{\em latexmp} {\tt \aahurl}
+ package.
+\item Pass the produced figure(s) through {\ttfamily dvips}
+if they contain any text. You may do this with the provided
+shell script {\ttfamily laproof}.
+\par
+\addvspace{\medskipamount}
+\nopagebreak\hrule
+\begin{verbatim}
+laproof yourprogram N
+\end{verbatim}
+\nopagebreak\hrule
+\addvspace{\medskipamount}
+ where {\ttfamily N}
+is the figure number. This
+script produces an EPS figure that may be viewed with
+{\ttfamily gv} but that should not be inserted in LaTeX
+documents. Insert the original figure in LaTeX
+documents. Instead of {\ttfamily laproof} you may just as
+well use
+{\em MPS2EPS} {\tt \aaiurl}
+.
+\end{enumerate}
+
+
+
+\subsection{Main Features}
+
+
+\subsubsection{Perspectives}
+
+{\ttfamily FEATPOST} can do three kinds of perspective.
+\begin{tscreen}
+\begin{verbatim}
+f := ( 1.2 , 2.0 , 1.6 );
+Spread := 75;
+
+V1 := (1,1,1);
+V2 := (-1,1,1);
+V3 := (-1,-1,1);
+V4 := (1,-1,1);
+V5 := (1,1,-1);
+V6 := (-1,1,-1);
+V7 := (-1,-1,-1);
+V8 := (1,-1,-1);
+makeface1(1,2,3,4);makeface2(5,6,7,8);
+makeface3(1,2,6,5);makeface4(2,3,7,6);
+makeface5(3,4,8,7);makeface6(4,1,5,8);
+makeline1(1,7);makeline2(2,8);
+makeline3(3,5);makeline4(4,6);
+
+beginfig(1);
+ ParallelProj := true;
+ SphericalDistortion := false;
+ draw_all_test(red,true);
+endfig;
+
+beginfig(2);
+ ParallelProj := false;
+ SphericalDistortion := false;
+ draw_all_test(green,true);
+endfig;
+
+beginfig(3);
+ ParallelProj := false;
+ SphericalDistortion := true;
+ PrintStep := 5;
+ draw_all_test(blue,true);
+endfig;
+
+end;
+\end{verbatim}
+\end{tscreen}
+
+
+\begin{figure}[tbp]
+\ifpdf
+
+\else
+\centerline{\epsfig{file=../allps/cubicfigures.1,height=5cm,angle=0}}\fi
+\ifpdf
+\centerline{\epsfig{file=../nontextualpng/cubicfigures.1.png}}\fi
+\caption{Orthogonal perspective.}
+\end{figure}
+\label{figcubicfigures1}
+
+\begin{figure}[tbp]
+\ifpdf
+
+\else
+\centerline{\epsfig{file=../allps/cubicfigures.2,height=5cm,angle=0}}\fi
+\ifpdf
+\centerline{\epsfig{file=../nontextualpng/cubicfigures.2.png}}\fi
+\caption{Rigorous perspective.}
+\end{figure}
+\label{figcubicfigures2}
+
+\begin{figure}[tbp]
+\ifpdf
+
+\else
+\centerline{\epsfig{file=../allps/cubicfigures.3,height=5cm,angle=0}}\fi
+\ifpdf
+\centerline{\epsfig{file=../nontextualpng/cubicfigures.3.png}}\fi
+\caption{Fish-eye perspective.}
+\end{figure}
+\label{figcubicfigures3}
+
+
+\subsubsection{From 3D to 2D}
+
+The most important macro is {\ttfamily rp} that converts 3D points
+to two-dimensional (2D) rigorous, orthogonal
+or fish-eye projections. To draw a line in
+3D-space try
+\begin{tscreen}
+\begin{verbatim}
+draw rp(a)--rp(b);
+\end{verbatim}
+\end{tscreen}
+where
+{\ttfamily a} and {\ttfamily b} are points in space
+(of {\ttfamily color} type).
+But if you're going for fish-eye it's better to
+\begin{tscreen}
+\begin{verbatim}
+draw pathofstraightline(a,b);
+\end{verbatim}
+\end{tscreen}
+If
+you don't know, leave it as
+\begin{tscreen}
+\begin{verbatim}
+drawsegment(a,b,withpen somepen);
+\end{verbatim}
+\end{tscreen}
+
+
+
+\subsubsection{Angles}
+
+When {\ttfamily FEATPOST} was created its main ability was
+to mark and to calculate angles. This is done with the
+macros {\ttfamily angline} and {\ttfamily getangle} as in the
+following program:
+\begin{tscreen}
+\begin{verbatim}
+f := (5,3.5,1);
+beginfig(2);
+ cartaxes(1,1,1);
+ color va, vb, vc, vd;
+ va = (0.29,0.7,1.0);
+ vb = (X(va),Y(va),0);
+ vc = N((-Y(va),X(va),0));
+ vd = (0,Y(vc),0);
+ drawarrow rp(black)--rp(va);
+ draw rp(black)--rp(vb)--rp(va) dashed evenly;
+ draw rp(vc)--rp(vd) dashed evenly;
+ drawarrow rp(black)--rp(vc);
+ squareangline( va, vc, black, 0.15 );
+ angline(va,red,black,0.75,decimal getangle(va,red),lft);
+endfig;
+\end{verbatim}
+\end{tscreen}
+\begin{figure}[tbp]
+\ifpdf
+
+\else
+\centerline{\epsfig{file=../allps/cartaxes.2,height=5cm,angle=0}}\fi
+\ifpdf
+\centerline{\epsfig{file=../allpng/cartaxes.2.gs.png}}\fi
+\caption{Example that uses {\ttfamily cartaxes}, {\ttfamily angline} and {\ttfamily getangle}.}
+\end{figure}
+\label{figcartaxes2}
+
+
+\subsubsection{Intersections}
+
+The most advanced feature of {\ttfamily FEATPOST} is the
+ability to calculate the intersections of planar and
+convex polygons\footnote{Unfortunately, this is also the
+most "bugged" feature.}. It can draw the visible
+part of arbitrary sets of polygons as in
+the following program:
+\begin{tscreen}
+\begin{verbatim}
+numeric phi;
+phi = 0.5*(1+sqrt(5));
+V1 := ( 1, phi,0);V2 := (-1, phi,0);
+V3 := (-1,-phi,0);V4 := ( 1,-phi,0);
+V5 := (0, 1, phi);V6 := (0,-1, phi);
+V7 := (0,-1,-phi);V8 := (0, 1,-phi);
+V9 := ( phi,0, 1);V10:= ( phi,0,-1);
+V11:= (-phi,0,-1);V12:= (-phi,0, 1);
+makeface1(1,2,3,4);makeface2(5,6,7,8);
+makeface3(9,10,11,12);
+beginfig(1);
+ sharpraytrace;
+endfig;
+end
+\end{verbatim}
+\end{tscreen}
+
+
+\begin{figure}[tbp]
+\ifpdf
+
+\else
+\centerline{\epsfig{file=../allps/sharpraytrace.1,height=5cm,angle=0}}\fi
+\ifpdf
+\centerline{\epsfig{file=../allpng/sharpraytrace.1.gs.png}}\fi
+\caption{Example that uses {\ttfamily sharpraytrace}.}
+\end{figure}
+\label{figsharpraytrace}
+
+
+\subsubsection{Coming back to 3D from 2D}
+
+It is now possible to do an "automatic perspective tuning"
+with the aid of macro {\ttfamily photoreverse} which is under
+development. Please, refer to example
+{\ttfamily photoreverse.mp} and to
+{\em FeatPost Deeper Technicalities} {\tt \aajurl}
+.
+
+\begin{figure}[tbp]
+\ifpdf
+
+\else
+\centerline{\epsfig{file=../alleps/photoreverse.1.eps,height=5cm,angle=0}}\fi
+\ifpdf
+\centerline{\epsfig{file=../allpng/photoreverse.1.gs.png}}\fi
+\caption{Example that uses {\ttfamily photoreverse}. It may
+ not work when vertical lines are not vertical in
+ average on the photo.}
+\end{figure}
+\label{figphotoreverse}
+
+
+\paragraph{Coming back to 3D from 1D}
+
+Using the same algorithm of {\ttfamily photoreverse}, the
+macro {\ttfamily improvertex} allows one to approximate a
+point in 3D-space with given distances from three other
+points (an initial guess is required).
+
+
+\section{Reference Manual}
+
+Some words about notation.
+The meaning of macro, function, procedure and routine is the same.
+Global variables are presented like this:
+\begin{tscreen}
+\begin{verbatim}
+vartype var, anothervar
+anothervartype yetanothervar
+\end{verbatim}
+\end{tscreen}
+Explanation of var, anothervar and
+yetanothervar. vartype can be any one of
+MetaPost types but the meaning
+of {\ttfamily color} is a three-dimensional point or vector, not an
+actual color like yellow, black or white. If the meaning is
+an actual color then the type will be {\ttfamily colour}.
+All global variables have default values.
+
+Functions are presented like this:
+\begin{itemize}
+\item returntype {\bfseries function()}
+Explanation of function. returntype can be any one of MetaPost
+types plus global, draw or drawlabel.
+global means that the function
+changes some of the global variables. draw means that
+the function
+changes the currentpicture. drawlabel means that the
+function changes
+the currentpicture and adds text to it.
+\begin{enumerate}
+\item {\ttfamily type1}
+Explanation of the first argument. The type of
+one argument can be any one
+of MetaPost types plus {\ttfamily suffix} or
+{\ttfamily text}.
+\item {\ttfamily type2}
+Explanation of the second argument.
+There is the possibility that the
+function has no arguments. In that case the
+function is presented like
+"returntype {\bfseries function}".
+\item Etc.
+\end{enumerate}
+\end{itemize}
+
+
+
+\subsection{Global variables}
+
+\begin{tscreen}
+\begin{verbatim}
+boolean ParallelProj
+boolean SphericalDistortion
+\end{verbatim}
+\end{tscreen}
+Kind of projection calculated by {\ttfamily rp}.
+By default projections
+are rigorous but if {\ttfamily ParallelProj} is set
+{\ttfamily true} then
+parallel lines remain parallel in the projection.
+It is the same as
+placing the point of view infinitely far without loosing
+sight.
+If {\ttfamily SphericalDistortion} is set {\ttfamily true}
+there will be a
+distortion coming from: (i) the projection being done
+on a sphere of
+center {\ttfamily f} and (ii) this sphere being plaited
+onto the paper page.
+
+
+\begin{figure}[tbp]
+\ifpdf
+
+\else
+\centerline{\epsfig{file=../allps/rigorousdiscSD.1,height=5cm,angle=0}}\fi
+\ifpdf
+\centerline{\epsfig{file=../nontextualpng/rigorousdiscSD.1.png}}\fi
+\caption{Figure that uses {\ttfamily SphericalDistortion:=true} and {\ttfamily rigorousdisc}.}
+\end{figure}
+\label{sphericaldisc}
+
+\begin{tscreen}
+\begin{verbatim}
+color f, viewcentr
+\end{verbatim}
+\end{tscreen}
+The point of view is {\ttfamily f}. The plane or sphere
+of projection contains
+the center of view {\ttfamily viewcentr}.
+The axis parallel to zz that contains the
+{\ttfamily viewcentr} is projected on a vertical line.
+\begin{tscreen}
+\begin{verbatim}
+numeric Spread
+pair ShiftV, OriginProjPagePos
+numeric PageWidth
+numeric PageHeight
+\end{verbatim}
+\end{tscreen}
+These variables control
+the placement of the projection on the
+paper. {\ttfamily Spread} is the magnification
+and {\ttfamily ShiftV} is the position of the
+{\ttfamily viewcentr} projection on the
+paper. But, if at some point in your program you introduce
+{\ttfamily produce\_auto\_scale} then the
+{\ttfamily currentpicture} will be
+centered at {\ttfamily OriginProjPagePos}
+and scaled to fit inside a rectangle of
+{\ttfamily PageWidth} by {\ttfamily PageHeight}.
+\begin{tscreen}
+\begin{verbatim}
+color V[]
+color L[]p[]
+color F[]p[]
+\end{verbatim}
+\end{tscreen}
+Vertexes, lines and faces.
+The idea here is to draw
+polygons and/or arbitrary lines in 3D space.
+Defining the polygons and
+the lines can be a bit tedious as {\ttfamily FEATPOST} is not
+interactive. First, one defines a list of the
+vertexes ({\ttfamily V[]}) that define the
+polygons and/or the lines.
+There is a list of polygons and a list of
+lines. Each polygon ({\ttfamily F[]p[]}) or
+line ({\ttfamily L[]p[]}) is itself a list of vertexes.
+All vertexes of the same poligon should belong
+to the same plane.
+\begin{tscreen}
+\begin{verbatim}
+numeric NL
+numeric npl[]
+numeric NF
+numeric npf[]
+\end{verbatim}
+\end{tscreen}
+Number of lines, number of vertexes of each line,
+number of faces, number of vertexes of each face.
+\begin{tscreen}
+\begin{verbatim}
+numeric PrintStep
+\end{verbatim}
+\end{tscreen}
+
+{\ttfamily Printstep} is the size of iterative jumps
+along lines. Used by
+{\ttfamily lineraytrace}, {\ttfamily faceraytrace} and
+{\ttfamily pathofstraightline}.
+Big {\ttfamily Printstep}s make fast raytracings.
+\begin{tscreen}
+\begin{verbatim}
+boolean FCD[]
+colour TableC[]
+numeric TableColors
+numeric FC[]
+colour HigColor
+colour SubColor
+color LightSource
+\end{verbatim}
+\end{tscreen}
+{\ttfamily FCD} means "face color defined". The
+{\ttfamily draw\_invisible} macro draws
+polygons in colour, if it is defined. The colour must be
+selected from the table of colours {\ttfamily TableC} that has
+as many as {\ttfamily TableColors}. The colour {\ttfamily FC}
+of each polygon will depend on its position relatively to
+{\ttfamily LightSource} where we suppose there is a lamp that
+emits light coloured {\ttfamily HigColor}. Furthermore the
+colour of each polygon may be modified if it belongs to a
+functional or parametric surface. In this case, if we are
+looking at the polygon from below than {\ttfamily SubColor} is
+subtracted from its colour.
+\begin{tscreen}
+\begin{verbatim}
+numeric RopeColorSeq[]
+numeric RopeColors
+\end{verbatim}
+\end{tscreen}
+
+These are used by {\ttfamily ropepattern}.
+\begin{tscreen}
+\begin{verbatim}
+numeric TDAtiplen
+numeric TDAhalftipbase
+numeric TDAhalfthick
+\end{verbatim}
+\end{tscreen}
+
+These control the shape of Three-Dimensional Arrows.
+\begin{tscreen}
+\begin{verbatim}
+boolean ShadowOn
+numeric HoriZon
+\end{verbatim}
+\end{tscreen}
+
+When {\ttfamily ShadowOn} is set {\ttfamily true}, some objects can
+cast a black shadow on a horizontal plane of {\ttfamily Z}
+coordinate equal to {\ttfamily HoriZon} (an area from
+this plane may be drawn with {\ttfamily setthestage}) as if
+there is a punctual source of light at
+{\ttfamily LightSource}.
+The macros that can produce shadows, in addition to their
+specific production, are
+\begin{itemize}
+\item {\ttfamily emptyline}
+\item {\ttfamily rigorousdisc}
+\item {\ttfamily verygoodcone}
+\item {\ttfamily tropicalglobe}
+\item {\ttfamily whatisthis}
+\item {\ttfamily kindofcube}
+\item {\ttfamily draw\_all\_test}
+\item {\ttfamily fill\_faces}
+\item {\ttfamily positivecharge}
+\end{itemize}
+
+All macros that contain {\bfseries shadow} in their name
+calculate the location of shadows (using {\ttfamily cb}).
+\begin{tscreen}
+\begin{verbatim}
+path VGAborder
+\end{verbatim}
+\end{tscreen}
+
+This path and the macro {\ttfamily produce\_vga\_border} are
+meant to help you clip the {\ttfamily currentpicture} to a 4:3
+rectangle as in a movie frame.
+\begin{tscreen}
+\begin{verbatim}
+pair PhotoPair[]
+color PhotoPoint[]
+numeric PhotoMarks
+\end{verbatim}
+\end{tscreen}
+
+These are used by {\ttfamily photoreverse}.
+\begin{tscreen}
+\begin{verbatim}
+pen ForePen, BackPen
+path CLPath
+numeric NCL
+\end{verbatim}
+\end{tscreen}
+
+These are used by {\ttfamily closedline}.
+
+
+\subsection{Definitions}
+
+\begin{itemize}
+\item global makeline@\#( text1)
+\item global makeface@\#( text1)
+\end{itemize}
+
+Both of these functions ease the task of
+defining lines and polygons. Just
+provide a list of vertexes in the right
+sequence for each polygon and/or
+line. Suppose a tetrahedron
+\begin{tscreen}
+\begin{verbatim}
+V3:=(+1,-1,-1);V2:=(-1,+1,-1);
+V4:=(+1,+1,+1);V1:=(-1,-1,+1);
+makeface2(1,2,3);makeface3(1,2,4);
+makeface1(3,4,1);makeface4(3,4,2);
+\end{verbatim}
+\end{tscreen}
+The
+number in the last makeface or last
+makeline procedure name must be the
+number of polygons or lines. All polygons and lines from 1 upto this
+number must be defined but the sorting may be any of your liking.
+
+
+\subsection{Macros}
+
+
+\subsubsection{Very Basic Macros}
+
+\begin{itemize}
+\item numeric {\bfseries X()}
+Returns the first coordinate of a point or vector (of
+color type). Replaces {\ttfamily redpart}.
+\item numeric {\bfseries Y()}
+Returns the second coordinate of a point or vector.
+Replaces {\ttfamily greenpart}.
+\item numeric {\bfseries Z()}
+Returns the second coordinate of a point or vector.
+Replaces {\ttfamily bluepart}.
+\item draw {\bfseries produce\_auto\_scale}
+The currentpicture is centered in, and adjusted
+to the size of, an A4
+paper page. This avoids the control of {\ttfamily Spread} and
+{\ttfamily ShiftV}.
+\item string {\bfseries cstr()} Converts a color into its
+string. Usefull in combination with {\ttfamily getready}.
+\item string {\bfseries bstr()} Converts a boolean expression into its
+string. Usefull in combination with {\ttfamily getready}.
+\end{itemize}
+
+
+
+\subsubsection{Vector Calculus}
+
+\begin{itemize}
+\item color {\bfseries N()} Unit vector. Returns
+{\ttfamily black} (the null vector) when the argument has
+null norm. The "N" means "normalized".
+\item numeric {\bfseries cdotprod()} Dot product of two
+vectors.
+\item color {\bfseries ccrossprod()} Cross product of two
+vectors.
+\item numeric {\bfseries ndotprod()} Cossine of the angle
+beetween two vectors.
+\item color {\bfseries ncrossprod()} Normalized cross product
+of twovectors.
+\item numeric {\bfseries conorm()} Euclidean norm of a
+vector.
+\item numeric {\bfseries getangle()} Angle beetween two
+vectors.
+\item pair {\bfseries getanglepair()} Orientation angles
+of a vector. The first angle ({\ttfamily xpart}) is
+measured beetween the vector projection on the {\ttfamily XY}
+plane and the {\ttfamily X} axis. The second angle
+({\ttfamily ypart})is measured
+beetween the vector and its projection on the {\ttfamily XY}
+plane. This may be usefull to find the arguments of
+{\ttfamily kindofcube}
+\item color {\bfseries eulerrotation()} Three-dimensional
+rotation of a vector.
+\begin{enumerate}
+\item {\ttfamily numeric} Angle of rotation around the
+{\ttfamily Z} component.
+\item {\ttfamily numeric} Angle of rotation around the
+rotated {\ttfamily Y} component.
+\item {\ttfamily numeric} Angle of rotation around the
+two times rotated {\ttfamily X} component.
+\item {\ttfamily color} Vector to be rotated.
+\end{enumerate}
+\item color {\bfseries randomfear} Generates a randomly
+oriented unit vector.
+\end{itemize}
+
+
+
+\subsubsection{Projection Macros}
+
+\begin{itemize}
+\item pair {\bfseries rp()} Converts spatial positions into
+planar positions on the paper page. The conversion
+considers the values of the following global
+variables: {\ttfamily viewcentr},
+{\ttfamily ParallelProj}, {\ttfamily SphericalDistortion},
+{\ttfamily Spread} and {\ttfamily ShiftV}. When both
+{\ttfamily ParallelProj} and {\ttfamily SphericalDistortion}
+are {\ttfamily false} it won't work if either (i) the
+vectors {\ttfamily f-viewcentr} and {\ttfamily f-R} are
+perpendicular ({\ttfamily R} is the argument) or (ii)
+{\ttfamily f} and {\ttfamily viewcentr} share the same
+{\ttfamily X} and {\ttfamily Y} coordinates.
+\begin{enumerate}
+\item {\ttfamily color} Spatial position.
+\end{enumerate}
+\item color {\bfseries cb()} Calculates the position of the
+shadow of a point. Uses {\ttfamily HoriZon} and
+{\ttfamily LightSource}.
+\begin{enumerate}
+\item {\ttfamily color} Point position.
+\end{enumerate}
+\item color {\bfseries projectpoint()} Calculates the
+intersection beetween a plane and a straight
+line. The plane contains a given point and is
+perpendicular to the line connecting the
+{\ttfamily LightSource} and this same point.
+The line is defined by another given point and the
+{\ttfamily LightSource}. Summary: {\ttfamily projectpoint}
+returns the projection of the second argument on a
+plane that contains the first argument. Can be used to
+draw shadows cast on generic planes.
+\begin{enumerate}
+\item {\ttfamily color} Origin of the projection plane.
+\item {\ttfamily color} Point to be projected.
+\end{enumerate}
+\end{itemize}
+
+
+
+\subsubsection{Plain Basic Macros}
+
+\begin{itemize}
+\item draw {\bfseries signalvertex()} Draws a dot
+sized inversely proportional to its distance from
+the viewpoint {\ttfamily f}.
+\begin{enumerate}
+\item {\ttfamily color} Location.
+\item {\ttfamily numeric} Factor of proportionality
+("size of the dot").
+\item {\ttfamily colour} Colour of the dot.
+\end{enumerate}
+
+\begin{figure}[tbp]
+\ifpdf
+
+\else
+\centerline{\epsfig{file=../allps/torus.1,height=5cm,angle=0}}\fi
+\ifpdf
+\centerline{\epsfig{file=../nontextualpng/torus.1.png}}\fi
+\caption{Figure that uses {\ttfamily signalvertex}.}
+\end{figure}
+\item path {\bfseries pathofstraightline()} When using
+{\ttfamily SphericalDistortion:=true}, straight lines
+look like curves. This macro returns the curved path
+of a straight line beetween two points. This path will
+have a greater {\ttfamily length} ("time") when
+{\ttfamily PrintStep} is made smaller.
+\item drawlabel {\bfseries cartaxes()}
+Cartesean axes with prescribed lenghtes and apropriate labels.
+\begin{enumerate}
+\item {\ttfamily numeric} Length of the {\ttfamily X} axe.
+\item {\ttfamily numeric} Length of the {\ttfamily Y} axe.
+\item {\ttfamily numeric} Length of the {\ttfamily Z} axe.
+\end{enumerate}
+\item draw {\bfseries emptyline()} This procedure produces
+a sort of a tube that can cross over itself. It
+facilitates the drawing of, for instance, thick
+helical curves but it won't
+look right if the curves are drawn getting apart from
+the point of view. Please, accept this inconveniance.
+As like many other {\ttfamily FEATPOST} macros this one
+can produce visually correct diagrams only in limited
+conditions. Can cast a shadow.
+\begin{enumerate}
+\item {\ttfamily boolean} Choose {\ttfamily true} to join
+this line with a previously drawn line.
+\item {\ttfamily numeric} Factor of proportionality
+("diameter of the tube"). The tubes are just
+sequences of dots drawn by {\ttfamily signalvertex}.
+\item {\ttfamily colour} Colour of the tube border.
+\item {\ttfamily colour} Colour of the tube.
+\item {\ttfamily numeric} Total number of dots on the
+tube line.
+\item {\ttfamily numeric} Fraction of the tube diameter
+that is drawn with the tube colour.
+\item {\ttfamily numeric} This is the number of dots
+that are redrawn with the colour of the tube for
+each drawn dot with the color of the tube
+border. Usually 1 or 2 are enough.
+\item {\ttfamily text} This is the name a function
+that returns a 3D point of the line for each value
+of a parameter in beetween 0 and 1.
+\end{enumerate}
+
+\begin{figure}[tbp]
+\ifpdf
+
+\else
+\centerline{\epsfig{file=../allps/joinedemptylines.1,height=5cm,angle=0}}\fi
+\ifpdf
+\centerline{\epsfig{file=../nontextualpng/joinedemptylines.1.png}}\fi
+\caption{Figure that uses {\ttfamily emptyline}.
+ The junction point of two different lines is indicated
+ by an arrow. Note the unperfection on the top
+ right, inside the upper turn. }
+\end{figure}
+\label{joinedemptylines}
+\item draw {\bfseries closedline()} This procedure produces
+a tube that can cross over itself. It
+facilitates the drawing of, for instance, thick
+helical curves but it won't
+look right as its thickness does not change with the
+distance from the point of view. The drawing is
+entirely done in two dimensions, so the tube diameter
+depends on the global variables {\ttfamily ForePen} and
+{\ttfamily BackPen}. There can be more than one closed
+line in a figure but all get the same diameter.
+\begin{enumerate}
+\item {\ttfamily numeric} Total number of path segments
+on the tube line.
+\item {\ttfamily numeric} Use 0.5 or more.
+\item {\ttfamily numeric} Use 0.75 or more.
+\item {\ttfamily text} This is the name a function
+that returns a 3D point of the closed line for each value
+of a parameter in beetween 0 and 1.
+\end{enumerate}
+\item drawlabel {\bfseries angline()}
+Draws an arch beetween two straight lines with a
+common point and places a label
+near the middle of the arch (marks an
+angle).
+\begin{enumerate}
+\item {\ttfamily color} Point of one line.
+\item {\ttfamily color} Point ot the other line.
+\item {\ttfamily color} Common point.
+\item {\ttfamily numeric} Distance beetween the arch and
+the common point.
+\item {\ttfamily picture} Label.
+\item {\ttfamily suffix} Position of the label relatively
+to the middle of the arch. May
+be one of {\ttfamily lft, rt, top, bot, ulft, urt,
+llft} and {\ttfamily lrt}.
+\end{enumerate}
+\item drawlabel {\bfseries anglinen()}
+The same as the previous function but the
+sixth argument is numeric:
+0={\ttfamily rt};
+1={\ttfamily urt};
+2={\ttfamily top};
+3={\ttfamily ulft};
+4={\ttfamily lft};
+5={\ttfamily llft};
+6={\ttfamily bot};
+7={\ttfamily lrt};
+any other number places the label
+on the middle of the arch.
+\item draw {\bfseries squareangline()}
+This is supposed to mark 90 degree angles
+but works for any angle value.
+\begin{enumerate}
+\item {\ttfamily color} Point of one line.
+\item {\ttfamily color} Point ot the other line.
+\item {\ttfamily color} Common point.
+\item {\ttfamily numeric} Distance beetween the "arch"
+and the common point.
+\end{enumerate}
+\item path {\bfseries rigorouscircle()}
+3D circle. The total "time" of this path is 8. This
+small number makes it easy to select parts of the
+path. The circle is drawn using the
+"left-hand-rule". If you put your left-hand thumb
+parallel the circle axe then the other left-hand
+fingers curl in the same sense as the circle
+path. This path allways starts, approching the view
+point, from a point on a diameter of the
+circle that projects orthogonaly to its axe, and
+rotating around the axe in the way of the left-hand-rule.
+\begin{enumerate}
+\item {\ttfamily color} Center of the circle.
+\item {\ttfamily color} Direction orthogonal to the
+circle (circle axe).
+\item {\ttfamily numeric} Radius of the circle.
+\end{enumerate}
+
+\begin{figure}[tbp]
+\ifpdf
+
+\else
+\centerline{\epsfig{file=../allps/anglinerigorouscircle.1,height=5cm,angle=0}}\fi
+\ifpdf
+\centerline{\epsfig{file=../allpng/anglinerigorouscircle.1.gs.png}}\fi
+\caption{Figure that uses {\ttfamily anglinen} and {\ttfamily rigorouscircle}.}
+\end{figure}
+\item draw {\bfseries tdarrow()} Draws a flat arrow that
+begins at the first argument and ends at the second.
+The shape of the arrow is controled by the global
+variables {\ttfamily TDAtiplen, TDAhalftipbase, TDAhalfthick}.
+\item path {\bfseries twocyclestogether()} This macro
+allows you to draw any solid that has no vertexes
+and that has two, exactly two, planar cyclic edges.
+In fact, it doesn't need to be a solid. Just
+provide the pathes of both cyclic edges as arguments
+but note that the returned path is polygonal.
+In order to complete
+the drawing of this solid you have to choose one of
+the edges to be drawn immediatly afterwards. This is
+done automatically by the {\ttfamily whatisthis} macro
+for the case of two parallel and concentric ellipses.
+\item path {\bfseries ellipticpath()} Produces an elliptic
+path in 3D space.
+\begin{enumerate}
+\item {\ttfamily color} Position of the center.
+\item {\ttfamily color} Major or minor axe.
+\item {\ttfamily color} The other axe.
+\end{enumerate}
+\item drawlabel {\bfseries labelinspace()} Draw some 2D
+{\ttfamily picture} on some 3D plane (only when
+{\ttfamily ParallelProj:=true}).
+\begin{enumerate}
+\item {\ttfamily color} Position for the lower-left
+corner.
+\item {\ttfamily color} Orientation of the picture's
+bottom edge.
+\item {\ttfamily color} Orientation of the picture's
+letf edge.
+\item {\ttfamily text} 2D picture's name.
+\end{enumerate}
+
+\begin{figure}[tbp]
+\ifpdf
+
+\else
+\centerline{\epsfig{file=../allps/labelinspace.1,height=5cm,angle=0}}\fi
+\ifpdf
+\centerline{\epsfig{file=../allpng/labelinspace.1.gs.png}}\fi
+\caption{Example that uses {\ttfamily labelinspace}.}
+\end{figure}
+\end{itemize}
+
+
+
+\subsubsection{Standard Objects}
+
+\begin{itemize}
+\item path {\bfseries goodcirclepath()}
+Another 3D circle macro. More rigorous
+than {\ttfamily rigorouscircle} but when
+the direction ortogonal to the circle is almost
+orthogonal to the line {\ttfamily viewpoint--center}
+it doesn't work correctly.
+The total "time" of this path is 36.
+\begin{enumerate}
+\item {\ttfamily color} Center of the circle.
+\item {\ttfamily color} Direction ortogonal to
+the circle.
+\item {\ttfamily numeric} Radius of the
+circle.
+\end{enumerate}
+\item draw {\bfseries spatialhalfsfear()} An
+hemisphere. Doesn't work with {\ttfamily f} inside it.
+\begin{enumerate}
+\item {\ttfamily color} Center.
+\item {\ttfamily color} Vector ortogonal to
+the frontier circle and pointing
+out of the concavity.
+\item {\ttfamily numeric} Radius of the
+(hemi)sphere.
+\end{enumerate}
+\item path {\bfseries spatialhalfcircle()}
+And yet another 3D circle macro. Only the visible or the hidden
+part. This is usefull to mark sections of
+cylinders or spherical major circles.
+\begin{enumerate}
+\item {\ttfamily color} Center of the circle.
+\item {\ttfamily color} Direction ortogonal to the
+circle.
+\item {\ttfamily numeric} Radius of the circle.
+\item {\ttfamily boolean} The visible part is selected with
+{\ttfamily true} and the hidden
+with {\ttfamily false}.
+\end{enumerate}
+\item draw {\bfseries rigorousdisc()}
+3D opaque cylinder with/without a hole. Can cast a
+shadow (without the hole).
+\begin{enumerate}
+\item {\ttfamily numeric} Ray of an axial hole.
+\item {\ttfamily boolean} Option for completly opaque cylinder
+({\ttfamily true}) or partial
+pipe ({\ttfamily false}) when there is no hole. When
+the cylinder has an hole this option should be
+{\ttfamily true}.
+\item {\ttfamily color} Center of one circular base.
+\item {\ttfamily numeric} Radius of both circular bases.
+\item {\ttfamily color} Vector that defines the length and
+orientation of the
+cylinder. The addition the third and fifth
+arguments should give the
+position of the center of the other circular base.
+\end{enumerate}
+\item draw {\bfseries verygodcone()} 3D cone. Can cast a shadow.
+\begin{enumerate}
+\item {\ttfamily bolean} Option to draw dashed evenly
+the invisible edge ({\ttfamily true}) or not
+({\ttfamily false}).
+\item {\ttfamily color} Center of the circular base.
+\item {\ttfamily color} Direction ortogonal to the
+circular base.
+\item {\ttfamily numeric} Radius of the circular base.
+\item {\ttfamily color} Position of the vertex
+\end{enumerate}
+\item path {\bfseries rigorousfearpath()}
+3D sphere. Simple but hard.
+\begin{enumerate}
+\item {\ttfamily color} Center position.
+\item {\ttfamily numeric} Radius.
+\end{enumerate}
+\item draw {\bfseries tropicalglobe()} Globe with
+minor circles. Can cast a shadow.
+\begin{enumerate}
+\item {\ttfamily numeric} Number of marked latitudes.
+\item {\ttfamily color} Center position.
+\item {\ttfamily numeric} Radius
+\item {\ttfamily color} Axe orientation.
+\end{enumerate}
+
+\begin{figure}[tbp]
+\ifpdf
+
+\else
+\centerline{\epsfig{file=../allps/tropicalglobe.1,height=5cm,angle=0}}\fi
+\ifpdf
+\centerline{\epsfig{file=../nontextualpng/tropicalglobe.1.png}}\fi
+\caption{Figure that uses {\ttfamily tropicalglobe}.
+ }
+\end{figure}
+\item draw {\bfseries whatisthis()} An elliptic
+frustum. Both edges are elliptic an have the same
+orientation but one may be greater than the other.
+Can cast a shadow.
+\begin{enumerate}
+\item {\ttfamily color} Reference edge center.
+\item {\ttfamily color} Major or minor axe.
+\item {\ttfamily color} The other axe.
+\item {\ttfamily numeric} Length of the original
+cylinder.
+\item {\ttfamily numeric} Edges axes length ratio.
+\end{enumerate}
+\item draw {\bfseries kindofcube()} Polyhedron with six
+orthogonal faces (cuboid).
+\begin{enumerate}
+\item {\ttfamily boolean} Also draw the invisible edges
+{\ttfamily dashed evenly} ({\ttfamily true}) or do not.
+\item {\ttfamily boolean} The reference point may be a
+vertex ({\ttfamily true}) or the center({\ttfamily false}).
+\item {\ttfamily color} Reference point.
+\item {\ttfamily numeric} Alpha1.
+\item {\ttfamily numeric} Alpha2.
+\item {\ttfamily numeric} Alpha3.
+\item {\ttfamily numeric} L1. Length of the first side.
+\item {\ttfamily numeric} L2. Length of the second side.
+\item {\ttfamily numeric} L3. Length of the third side.
+\end{enumerate}
+
+These arguments are represented in the next figure.
+\begin{figure}[tbp]
+\ifpdf
+
+\else
+\centerline{\epsfig{file=../allps/kindofcube.2,height=5cm,angle=0}}\fi
+\ifpdf
+\centerline{\epsfig{file=../allpng/kindofcube.2.gs.png}}\fi
+\caption{Figure that uses and explains {\ttfamily kindofcube}. Note that the three indicated
+ angles may be used as arguments of {\ttfamily eulerrotation}.}
+\end{figure}
+\label{kindofcube2}
+\item draw {\bfseries setthestage()} Produces an horizontal
+square made of squares. Its {\ttfamily Z} coordinate is defined by
+{\ttfamily HoriZon}.
+\begin{enumerate}
+\item {\ttfamily numeric} Number of squares in each side.
+\item {\ttfamily numeric} Size of each side.
+\end{enumerate}
+\item draw {\bfseries setthearena()} Produces an horizontal
+circle made of circles. Its {\ttfamily Z} coordinate is defined by
+{\ttfamily HoriZon}. Due to the fact that the center of a
+circle is not on the center of its central perspective
+projection, this may look a bit strange.
+\begin{enumerate}
+\item {\ttfamily numeric} Number of circles on a
+diameter.
+\item {\ttfamily numeric} Diameter.
+\end{enumerate}
+\item draw {\bfseries smoothtorus()} Toxic donut (not to be
+eaten). Produces an error message when {\ttfamily f} is
+close to the table.
+\begin{enumerate}
+\item {\ttfamily color} Center.
+\item {\ttfamily color} Direction orthogonal to the
+torus plane.
+\item {\ttfamily numeric} Big ray.
+\item {\ttfamily numeric} Small ray.
+\end{enumerate}
+\end{itemize}
+
+
+
+\subsubsection{Composed Objects}
+
+\begin{itemize}
+\item draw {\bfseries positivecharge()} Draws a sphere with a
+plus or minus sign on the surface. The horizontal
+segment of the sign is drawn on the horizontal plane
+that contains the sphere center. The middle point of
+this segment is on a vertical plane containing the
+viewpoint.
+\begin{enumerate}
+\item {\ttfamily boolean} Selects the sign ({\ttfamily true}
+means positive).
+\item {\ttfamily color} Position of the center.
+\item {\ttfamily numeric} Sphere ray.
+\end{enumerate}
+
+\begin{figure}[tbp]
+\ifpdf
+
+\else
+\centerline{\epsfig{file=../allps/positivecharge.1,height=5cm,angle=0}}\fi
+\ifpdf
+\centerline{\epsfig{file=../nontextualpng/positivecharge.1.png}}\fi
+\caption{Figure that uses {\ttfamily positivecharge},
+ {\ttfamily getready} and {\ttfamily doitnow}.
+ }
+\end{figure}
+\item draw {\bfseries simplecar()} Draws a cuboid and four
+discs in a configuration ressembling an automobile. The
+first three arguments of {\ttfamily simplecar} are the same
+as the the last seven arguments of {\ttfamily kindofcube}
+but grouped in colors.
+\begin{enumerate}
+\item {\ttfamily color} Center of the cuboid that
+constitutes the body of the car..
+\item {\ttfamily color} Angles defining the orientation
+of the car (see {\ttfamily kindofcube}).
+\item {\ttfamily color} Dimensions of the car.
+\item {\ttfamily color} Characteristics of the front
+wheels. {\ttfamily redpart}-distance from the
+front. {\ttfamily greenpart}-width of the front wheels (length
+of the cylinders). {\ttfamily bluepart}-wheel ray.
+\item {\ttfamily color} Same as above for the rear wheels
+\end{enumerate}
+
+\begin{figure}[tbp]
+\ifpdf
+
+\else
+\centerline{\epsfig{file=../allps/simplecar.1,height=5cm,angle=0}}\fi
+\ifpdf
+\centerline{\epsfig{file=../nontextualpng/simplecar.1.png}}\fi
+\caption{Figure that uses {\ttfamily setthearena} and
+ {\ttfamily simplecar}. }
+\end{figure}
+\end{itemize}
+
+
+
+\subsubsection{Shadow Pathes}
+
+\begin{itemize}
+\item draw {\bfseries signalshadowvertex()} Draws the
+shadow of a {\ttfamily signalvertex} dot.
+\begin{enumerate}
+\item {\ttfamily color} Location of the light-blocking dot.
+\item {\ttfamily numeric} Factor of proportionality
+("size of the dot").
+\item {\ttfamily colour} Colour of the dot.
+\end{enumerate}
+\item path {\bfseries ellipticshadowpath()} Produces the
+shadow of an elliptic path.
+\begin{enumerate}
+\item {\ttfamily color} Position of the center.
+\item {\ttfamily color} Major or minor axe.
+\item {\ttfamily color} The other axe.
+\end{enumerate}
+\item path {\bfseries circleshadowpath()} Produces the
+shadow of a circle.
+\begin{enumerate}
+\item {\ttfamily color} Center of the circle.
+\item {\ttfamily color} Direction ortogonal to
+the circle.
+\item {\ttfamily numeric} Radius of the
+circle.
+\end{enumerate}
+\item path {\bfseries rigorousfearshadowpath()}
+3D sphere shadow.
+\begin{enumerate}
+\item {\ttfamily color} Center position.
+\item {\ttfamily numeric} Radius.
+\end{enumerate}
+\end{itemize}
+
+
+
+\subsubsection{Differential Equations}
+
+Before we proceed, be aware that solving differential
+equations (DE) is mainly an experimental activity. The most
+probable result of a procedure that atempts to solve a DE
+is garbage. The procedure may be unstable, the solution
+may be littered with singularities or something may go
+wrong. If you don't have a basic understanding of
+differential equations then skip this section, please.
+
+\begin{itemize}
+\item path {\bfseries fieldlinepath()} A vectorial field line is
+everywhere tangent to the field vectors.
+Two different parallel fields
+have the same field lines. So the field only
+constrains the direction of the field lines, not any kind
+of "speed" and, therefore, it is recommended to
+normalize the field before using this macro that
+contains a second-order Runge-Kutta method
+implementation.
+\begin{enumerate}
+\item {\ttfamily numeric} Total number of steps.
+\item {\ttfamily color} Initial position.
+\item {\ttfamily numeric} Step (arc)length.
+\item {\ttfamily text} Name of the function that
+returns a field vector for each 3D position.
+\end{enumerate}
+\item path {\bfseries trajectorypath()} The acceleration of a
+particle in a conservative force field is equal to the
+ratio (conservative force)/(particle mass). The
+acceleration is also equal to the second order time
+derivative of the particle position. This produces a
+second order differential equation that we solve using a
+second-order Runge-Kutta method implementation.
+\begin{enumerate}
+\item {\ttfamily numeric} Total number of steps.
+\item {\ttfamily color} Initial position.
+\item {\ttfamily color} Initial velocity.
+\item {\ttfamily numeric} Time step.
+\item {\ttfamily text} Name of the function that
+returns a (force/mass) vector for each 3D position.
+\end{enumerate}
+\item path {\bfseries magnetictrajectorypath()} The
+acceleration of a
+charged particle in a magnetic field is equal to the
+ratio (magnetic force)/(particle mass) but the magnetic
+force depends on both the velocity and the magnetic field. The
+acceleration is also equal to the second order time
+derivative of the particle position. This produces a
+second order differential equation that we solve using a
+fourth-order Runge-Kutta method implementation.
+\begin{enumerate}
+\item {\ttfamily numeric} Total number of steps.
+\item {\ttfamily color} Initial position.
+\item {\ttfamily color} Initial velocity.
+\item {\ttfamily numeric} Time step.
+\item {\ttfamily text} Name of the function that
+returns a (charge)*(magnetic field)/(partcle mass)
+vector for each 3D position.
+\end{enumerate}
+\end{itemize}
+
+
+
+\subsubsection{Renderers}
+
+\begin{itemize}
+\item draw {\bfseries sharpraytrace} Heavy procedure that
+draws only the visible part of all edges of all defined
+faces. There's no point in using this procedure when
+there are no intersections beetween faces. Any how
+this will not work for non-convex faces nor when
+{\ttfamily SphericalDistortion:=true}.
+\item draw {\bfseries lineraytrace()} Draws only the
+visible part of all defined lines using sequences of dots
+({\ttfamily signalvertex} and {\ttfamily PrintStep}).
+\begin{enumerate}
+\item {\ttfamily numeric} Dot size.
+\item {\ttfamily colour} Dot colour.
+\end{enumerate}
+\item draw {\bfseries faceraytrace()} Draws only the
+visible part of all edges of all defined faces
+using sequences of dots
+({\ttfamily signalvertex} and {\ttfamily PrintStep}).
+\begin{enumerate}
+\item {\ttfamily numeric} Dot size.
+\item {\ttfamily colour} Dot colour.
+\end{enumerate}
+\item draw {\bfseries draw\_all\_test()} Draws all defined
+edges (and lines) in a correct way independently of
+the kind of projection used. Can cast a shadow (but
+the shadow is not correct when
+{\ttfamily SphericalDistortion:=true}).
+\begin{enumerate}
+\item {\ttfamily colour} Colour of the segments.
+\item {\ttfamily boolean} If {\ttfamily true} the lines
+are also drawn.
+\end{enumerate}
+\item draw {\bfseries fill\_faces()} Unfills and draws all
+faces in the order they were defined (without
+sorting). Can cast a shadow.
+\begin{enumerate}
+\item {\ttfamily text} Like the argument of
+{\ttfamily drawoptions} but used only inside this
+macro and only for the edges.
+\end{enumerate}
+\item draw {\bfseries draw\_invisible()} This is a fast way
+of removing hidden lines that doesn't
+allow for intersecting polygons nor
+polygons of very different area. It works by
+sorting all polygons by
+distance to {\ttfamily f} and then by "filling" the
+polygons. This routine may be used to draw graphs
+of 3D surfaces.
+\begin{enumerate}
+\item {\ttfamily boolean} If {\ttfamily true} polygons are
+sorted relatively to
+nearest vertex and, if {\ttfamily false}, relatively to their
+mass center. Choose {\ttfamily false} for surface
+plots.
+\item {\ttfamily boolean} If {\ttfamily false} then the
+polygons are painted with their {\ttfamily FC} colour
+modified by {\ttfamily LightSource}. If {\ttfamily true}
+then the next two arguments are used and the
+polygons are darkened proportionaly to their
+distance from {\ttfamily f}.
+\item {\ttfamily colour} Colour of faces.
+\item {\ttfamily colour} Colour of the edges.
+\end{enumerate}
+\item global {\bfseries getready()} When you don't want to
+edit the source of the MetaPost program, to resort the
+objects so they'll be drawn correctly, use this macro
+and the next.
+\begin{enumerate}
+\item {\ttfamily string} Command line that would draw
+some object. For instance:
+{\ttfamily "rigorousfearpath(black,1);"}.
+\item {\ttfamily color} Reference position of that
+object.
+\end{enumerate}
+\item draw {\bfseries doitnow} The reference positions
+given as arguments of previous {\ttfamily getready} calls
+are used to sort and draw the objects also given as
+string arguments to previous {\ttfamily getready}
+calls. Remember to initialize {\ttfamily Nobjects:=0;}
+before a second figure.
+\end{itemize}
+
+
+
+\subsubsection{Nematics (Direction Fields)}
+
+Nematics are the least ordered liquid crystals. Their
+configurations can be described by direction fields
+(vector fields without arrows). The two following routines
+ease the task of representing their configurations.
+
+\begin{itemize}
+\item global {\bfseries generatedirline()} Defines a single
+straight line segment in a given position and with a
+given orientation.
+\begin{enumerate}
+\item {\ttfamily numeric} Line index number.
+\item {\ttfamily numeric} Angle beetween the {\ttfamily X}
+axe and the projection of the line on the
+{\ttfamily XY} plane.
+\item {\ttfamily numeric} Angle beetween the line
+and the {\ttfamily XY} plane.
+\item {\ttfamily numeric} Line (arc)length.
+\item {\ttfamily color} Position of the line middle
+point.
+\end{enumerate}
+\item draw {\bfseries director\_invisible()} This is a
+direction field renderer that can sort direction
+lines. This routine
+draws straight lines of given "thickness" beetween the
+first all the points
+of all the {\ttfamily L[]p[]} lines. It is supposed to
+help you draw vector fields
+without arrows but taking care of invisibility.
+The lines may be
+generated by {\ttfamily generatedirline} or by other macros.
+\begin{enumerate}
+\item {\ttfamily boolean} When there is no need to sort
+lines you may use {\ttfamily false} here.
+\item {\ttfamily numeric} "Thickness" of the
+direction lines
+\item {\ttfamily boolean} Use {\ttfamily true} for cyclic
+"direction" lines.
+\end{enumerate}
+\end{itemize}
+
+\begin{figure}[tbp]
+\ifpdf
+
+\else
+\centerline{\epsfig{file=../allps/twistflat.1,height=5cm,angle=0}}\fi
+\ifpdf
+\centerline{\epsfig{file=../nontextualpng/twistflat.1.png}}\fi
+\caption{Figure that uses {\ttfamily director\_invisible} and {\ttfamily generatedirline}.}
+\end{figure}
+
+
+
+\subsubsection{Surface Plots}
+
+Many powerfull plotting packages like
+{\ttfamily
+{\em gnuplot} {\tt \aakurl}
+} and
+{\ttfamily
+{\em gri} {\tt \aalurl}
+}
+are freely available. Because of this, {\ttfamily FEATPOST}
+surface plots are geared towards unusual features like
+equilateral triangular grid, hexagonal domain and merging
+together functional and parametric surface descriptions.
+
+\begin{itemize}
+\item draw {\bfseries hexagonaltrimesh()} Plots a
+functional surface on a triangular or hexagonal
+domain. Uses the {\ttfamily LightSource}.
+\begin{enumerate}
+\item {\ttfamily boolean} Select the kind of
+domain. {\ttfamily true} for hexagonal and
+{\ttfamily false} for triangular. The domain is
+centered on the origin ({\ttfamily black}). When the
+domain is hexagonal two of its corners are on the
+{\ttfamily -YY} axe. When the
+domain is triangular one of its corners is on the
+{\ttfamily X} axe.
+\item {\ttfamily numeric} Number of small triangles on
+each side of the triangular domain or three times
+the number of small triangles on
+each side of the hexagonal domain.
+\item {\ttfamily numeric} Length of the triangular
+domain side or three times the hexagonal domain
+side.
+\item {\ttfamily text} Name of the function that
+returns the {\ttfamily Z} coordinate of a surface
+point of coordinates {\ttfamily X} and {\ttfamily Y}.
+\end{enumerate}
+
+\begin{figure}[tbp]
+\ifpdf
+
+\else
+\centerline{\epsfig{file=../allps/hexagonaltrimesh.1,height=5cm,angle=0}}\fi
+\ifpdf
+\centerline{\epsfig{file=../nontextualpng/hexagonaltrimesh.1.png}}\fi
+\caption{Figure that uses {\ttfamily hexagonaltrimesh}.
+ }
+\end{figure}
+\item global {\bfseries partrimesh()} Defines a parametric
+surface that can be drawn with
+{\ttfamily draw\_invisible}. In the following descriptions
+{\ttfamily S} and {\ttfamily T} are the parameters. Remember
+to initialize {\ttfamily NF}. The surface is defined so
+that quadrangles are used whenever possible. If
+impossible, two triangles are used but their
+orientation is selected to maximize the surface
+smoothness. Also note that, unlike
+{\ttfamily hexagonaltrimesh()}, the spatial range you
+require to be visible is always first reshaped into a
+cube and second compressed or extended vertically. How
+much the cube is compressed or extended depends on the
+last {\ttfamily numeric} argument, the compression factor
+for {\ttfamily Z}, meaning that the final height of the
+cube is 2/(compression factor). Thanks to Sebastian
+Sturm for pointing the need to explain this.
+\begin{enumerate}
+\item {\ttfamily numeric} Number of {\ttfamily T} steps.
+\item {\ttfamily numeric} Number of {\ttfamily S} steps.
+\item {\ttfamily numeric} Minimal {\ttfamily T} value.
+\item {\ttfamily numeric} Maximal {\ttfamily T} value.
+\item {\ttfamily numeric} Minimal {\ttfamily S} value.
+\item {\ttfamily numeric} Maximal {\ttfamily S} value.
+\item {\ttfamily numeric} Minimal {\ttfamily X} value.
+\item {\ttfamily numeric} Maximal {\ttfamily X} value.
+\item {\ttfamily numeric} Minimal {\ttfamily Y} value.
+\item {\ttfamily numeric} Maximal {\ttfamily Y} value.
+\item {\ttfamily numeric} Minimal {\ttfamily Z} value.
+\item {\ttfamily numeric} Maximal {\ttfamily Z} value.
+\item {\ttfamily numeric} Compression factor for {\ttfamily Z}
+values.
+\item {\ttfamily text} Name of the function that
+returns a surface point (of {\ttfamily color} type)
+for each pair ({\ttfamily S},{\ttfamily T}).
+\end{enumerate}
+\end{itemize}
+
+
+\end{document}
diff --git a/Master/texmf-dist/doc/metapost/featpost/latex/mflogohack.sty b/Master/texmf-dist/doc/metapost/featpost/latex/mflogohack.sty
new file mode 100644
index 00000000000..7bf5f31aac8
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/featpost/latex/mflogohack.sty
@@ -0,0 +1,31 @@
+%%
+%% This is file `mflogohack.sty',
+%%
+%% Copyright (C) 1994--1999 Ulrik Vieth
+%% Hacked without right 2004 L. Nobre G.
+%%
+%% This file is part of the `featpost' package.
+%%
+%% This program is free software; you can redistribute it and/or
+%% modify it under the terms of the LaTeX Project Public License
+%% as described in lppl.txt in the base LaTeX distribution; either
+%% version 1 of the License, or (at your option) any later version.
+%%
+%% This program is distributed in the hope that it will be useful,
+%% but WITHOUT ANY WARRANTY; without even the implied warranty of
+%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+%%
+\NeedsTeXFormat{LaTeX2e}[1994/06/01]
+\ProvidesPackage{mflogohack}
+[2004/01/29 LaTeX package for Metafont, MetaPost, FeatPost and ANEEMATE logos]
+\DeclareRobustCommand\logofamily{%
+ \not@math@alphabet\logofamily\relax
+ \fontencoding{U}\fontfamily{logo}\selectfont}
+\DeclareTextFontCommand{\textlogo}{\logofamily}
+\def\MF{\textlogo{META}\@dischyph\textlogo{FONT}\@}
+\def\MP{\textlogo{META}\@dischyph\textlogo{POST}\@}
+\def\FP{\textlogo{FEAT}\@dischyph\textlogo{POST}\@}
+\def\AM{\textlogo{ANEE}\@dischyph\textlogo{MATE}\@}
+\endinput
+%%
+%% End of file `mflogohack.sty'.
diff --git a/Master/texmf-dist/doc/metapost/featpost/latex/null.sty b/Master/texmf-dist/doc/metapost/featpost/latex/null.sty
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/featpost/latex/null.sty
diff --git a/Master/texmf-dist/doc/metapost/featpost/latex/qwertz.sty b/Master/texmf-dist/doc/metapost/featpost/latex/qwertz.sty
new file mode 100644
index 00000000000..aeade62b172
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/featpost/latex/qwertz.sty
@@ -0,0 +1,19 @@
+
+% qwertz TeX macros
+
+\catcode`\"=12
+\sloppy
+\newtheorem{definition}{Definition}
+\newtheorem{proposition}{Proposition}
+\newtheorem{lemma}{Lemma}
+\newtheorem{corollary}{Corollary}
+\newtheorem{theorem}{Theorem}
+\newcommand{\mch}[1]{{\ifmmode#1 \else\(#1\)\fi}}
+\newcommand{\lt}{{\ifmmode{<}\else{\verb+<+}\fi}}
+\newcommand{\gt}{{\ifmmode{>}\else{\verb+>+}\fi}}
+\newcommand{\verbar}{{\ifmmode{|}\else{\tt|}\fi}}
+\newcommand{\idx}[1]{#1\index{#1}}
+\newcommand{\cdx}[1]{#1\index{#1@{\tt #1}}}
+\newcommand{\nidx}[1]{\index{#1}}
+\newcommand{\ncdx}[1]{\index{#1@{\tt #1}}}
+