diff options
author | Karl Berry <karl@freefriends.org> | 2023-11-09 22:14:52 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2023-11-09 22:14:52 +0000 |
commit | 567785d00520b3303a43b994084dcb02a532902f (patch) | |
tree | 9394a4a563c9cd6a8499d9e9ac3fb3599c9c6896 /Master/texmf-dist/tex | |
parent | e8dcef4eb9e70ed986b683df23cb2b278a121ae2 (diff) |
polyhedra (6nov23)
git-svn-id: svn://tug.org/texlive/trunk@68770 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/polyhedra/polyhedra.sty | 577 |
1 files changed, 577 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/polyhedra/polyhedra.sty b/Master/texmf-dist/tex/latex/polyhedra/polyhedra.sty new file mode 100644 index 00000000000..2f2ea0f9b8b --- /dev/null +++ b/Master/texmf-dist/tex/latex/polyhedra/polyhedra.sty @@ -0,0 +1,577 @@ +% % polyhedra.sty +% % polyhedra LaTeX package +% % Copyright 2015-2023 Zafeirakis Zafeirakopoulos +% % zafeirakopoulos@gmail.com + +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% https://www.latex-project.org/lppl.txt +% and version 1.3c or later is part of all distributions of LaTeX +% version 2008 or later. + +% This work has the LPPL maintenance status `maintained'. + +% The Current Maintainer of this work is Zafeirakis Zafeirakopoulos. + +% This work consists of the files polyhedra.sty and polyhedra-doc.tex. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Identification %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{polyhedra}[2023/10/31 v.0.3 Polyhedra LaTeX package] + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%% Required Packages %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\RequirePackage{xcolor,xcolor-solarized} +\RequirePackage{tikz,tikz-3dplot} +\RequirePackage{xparse,xstring} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Tikz setup %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\usetikzlibrary{shapes} +\usetikzlibrary{patterns} +\usetikzlibrary{arrows} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%% Package Options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\DeclareOption*{\PackageWarning{Polyhedra}{Unknown ‘\CurrentOption’}} +\ProcessOptions\relax + +% \PackageWarningNoLine{Polyhedra}{Solarized Color Scheme used} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%% Default Options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%% Default Sizes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\PolyhedraDefaultHeight}{0.5\textheight} +\newcommand{\PolyhedraDefaultWidth}{0.5\textwidth} +\newcommand{\PolyhedraDefaultScale}{0.6} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%% Default Colors %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcommand{\VertexColor}{solarized-blue} +\newcommand{\VertexTextColor}{black} + +\newcommand{\EdgeColor}{solarized-blue} +\newcommand{\RayColor}{solarized-cyan} +\newcommand{\PolygonColor}{solarized-blue} +\newcommand{\HalfspaceColor}{gray} + +\newcommand{\AlertColor}{solarized-red} +\newcommand{\FocusColor}{solarized-green} +\newcommand{\intersectionColor}{solarized-base2} +\newcommand{\OpenColor}{solarized-base2} + +\newcommand{\ShadeColor}{gray} + +\newcommand{\OpenPolygonPattern}{north east lines} +\newcommand{\OpenHyperplanePattern}{north west lines} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%% Default Thickness %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcommand{\VertexThickness}{2} +\newcommand{\RayThickness}{1} +\newcommand{\EdgeThickness}{1} + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%% Graphics Commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%% Environments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\makeatletter +\define@key{polyhedron}{dim}{\def\mm@dim{#1}} +\define@key{polyhedron}{phi}{\def\mm@phi{#1}} +\define@key{polyhedron}{theta}{\def\mm@theta{#1}} +\DeclareDocumentEnvironment{polyhedron}{m} +{ + \setkeys{polyhedron}{ +dim={2}, +phi={0}, +theta={0}, +,#1 } % + \ifthenelse{\equal{\mm@dim}{3}} + { + \tdplotsetmaincoords{\mm@phi}{\mm@theta} + \begin{tikzpicture}[scale=\PolyhedraDefaultScale,tdplot_main_coords] + }{ + \begin{tikzpicture}[scale=\PolyhedraDefaultScale] + } +} +{ + \end{tikzpicture} +} +\makeatother + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%% Macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + + +\def\splicelist#1{ +\StrCount{#1}{,}[\numofelem] +\ifnum\numofelem>0\relax + \StrBefore[1]{#1}{,}[\myhead]% + \StrBehind[\numofelem]{#1}{,}[\mylast]% +\else + \let\myhead#1% + \let\mylast#1% +\fi +} + + +\newcommand{\point}[2]{ + \coordinate (#2) at #1; +} + + + +\makeatletter + + +\define@key{vertex}{color}{\def\mm@color{#1}} +\define@key{vertex}{status}{\def\mm@status{#1}} +\define@key{vertex}{opacity}{\def\mm@opacity{#1}} +\define@key{vertex}{thickness}{\def\mm@thickness{#1}} +\define@key{vertex}{pattern}{\def\mm@pattern{#1}} + +\define@key{vertex}{point}{\def\mm@point{#1}} + +\define@key{vertex}{text}{\def\mm@text{#1}} +\define@key{vertex}{textcolor}{\def\mm@textcolor{#1}} +\define@key{vertex}{anchora}{\def\mm@anchora{#1}} +\define@key{vertex}{anchorb}{\def\mm@anchorb{#1}} +\DeclareDocumentCommand{\vertex}{m}{% +\begingroup% +\setkeys{vertex}{ +color=\VertexColor, +opacity={1}, +thickness=\VertexThickness, +point={(0,0)}, +status={normal}, +pattern={}, +text={}, +anchora={north}, +anchorb={above} +,#1 } % +\ifthenelse{\equal{\mm@status}{normal}}{\def\fillcolor{\mm@color}}{ +\ifthenelse{\equal{\mm@status}{intesection}}{\def\fillcolor{\IntersectionColor}} +{ +\ifthenelse{\equal{\mm@status}{alert}}{\def\fillcolor{\AlertColor}}{ +\ifthenelse{\equal{\mm@status}{focus}}{\def\fillcolor{\FocusColor}}{ +\ifthenelse{\equal{\mm@status}{open}}{\def\fillcolor{\OpenColor}}{ + \def\fillcolor{\mm@color} +}}}}} + +\StrLeft{\mm@point}{1}[\firstletter] +\ifthenelse{\equal{\firstletter}{(}}{\def\thepoint{\mm@point}}{\def\thepoint{( +\mm@point)}} +\ifthenelse{\equal{\mm@text}{}}{\def\thelabel{}} +{\def\thelabel{label={[anchor=\mm@anchora]\mm@anchorb: \mm@text}}} + \xdef\drawcom{ + node[draw,circle, + color=\mm@color, + inner sep=\mm@thickness pt, + fill=\fillcolor, + pattern=\mm@pattern, + pattern color=\mm@color, + opacity=\mm@opacity, + \thelabel + ] + at \thepoint {} ; + } + \draw \drawcom + \endgroup% +} + +\define@key{ray}{color}{\def\mm@color{#1}} +\define@key{ray}{opacity}{\def\mm@opacity{#1}} +\define@key{ray}{thickness}{\def\mm@thickness{#1}} +\define@key{ray}{status}{\def\mm@status{#1}} +\define@key{ray}{pattern}{\def\mm@pattern{#1}} + +\define@key{ray}{points}{\def\mm@points{#1}} + \DeclareDocumentCommand{\ray}{m}{% +\begingroup% +\setkeys{ray}{ +color=\RayColor, +opacity={1}, +thickness=\RayThickness, +points={(0,0)}, +status={normal}, +pattern={}, + ,#1 } % + \xdef\raypattern{\mm@pattern} + +\ifthenelse{\equal{\mm@status}{normal}}{\xdef\rcolor{\mm@color}}{ +\ifthenelse{\equal{\mm@status}{intesection}}{\xdef\rcolor{\IntersectionColor} +} +{ + \ifthenelse{\equal{\mm@status}{alert}}{\xdef\rcolor{\AlertColor}}{ + \ifthenelse{\equal{\mm@status}{open}}{\xdef\raypattern{dashed}\xdef\rcolor{ +\mm@color}}{ + + \ifthenelse{\equal{\mm@status}{focus}}{\xdef\rcolor{\FocusColor}}{ + \xdef\rcolor{\mm@color} +}}}}} + + \gdef\drawcom{ + [->, color=\rcolor, + line width=\mm@thickness, + opacity=\mm@opacity, + \raypattern] + } + \foreach \point [count=\xi] in \mm@points{ + \StrLeft{\point}{1}[\firstletter] +\ifthenelse{\equal{\firstletter}{(}}{\def\thepoint{\point}}{\def\thepoint{( +\point)}} + \ifnum\xi=1 + \xdef\drawcom{\drawcom \thepoint} + \else + \xdef\drawcom{\drawcom -- \thepoint} + \fi + } + \xdef\drawcom{\drawcom ;} + \draw \drawcom + \endgroup% +} + + +\define@key{edge}{color}{\def\mm@color{#1}} +\define@key{edge}{opacity}{\def\mm@opacity{#1}} +\define@key{edge}{thickness}{\def\mm@thickness{#1}} +\define@key{edge}{status}{\def\mm@status{#1}} +\define@key{edge}{pattern}{\def\mm@pattern{#1}} +\define@key{edge}{points}{\def\mm@points{#1}} +\DeclareDocumentCommand{\edge}{m}{% +\begingroup% +\setkeys{edge}{ +color=\EdgeColor, +opacity={1}, +thickness=\EdgeThickness, +points={(0,0)}, +status={normal}, +pattern={}, +,#1 } % +\xdef\edgepattern{\mm@pattern} +\ifthenelse{\equal{\mm@status}{normal}}{\xdef\rcolor{\mm@color}}{ +\ifthenelse{\equal{\mm@status}{intesection}}{\xdef\rcolor{\IntersectionColor} +} +{ + \ifthenelse{\equal{\mm@status}{alert}}{\xdef\rcolor{\AlertColor}}{ + +\ifthenelse{\equal{\mm@status}{open}}{\xdef\edgepattern{dashed}\xdef\rcolor{ +\mm@color}}{ + + \ifthenelse{\equal{\mm@status}{focus}}{\xdef\rcolor{\FocusColor}}{ + \xdef\rcolor{\mm@color} +}}}}} + + \gdef\drawcom{ + [color=\rcolor, + line width=\mm@thickness, + opacity=\mm@opacity, + \edgepattern] + } + \foreach \point [count=\xi] in \mm@points{ + \StrLeft{\point}{1}[\firstletter] +\ifthenelse{\equal{\firstletter}{(}}{\def\thepoint{\point}}{\def\thepoint{( +\point)}} + \ifnum\xi=1 + \xdef\drawcom{\drawcom \thepoint} + \else + \xdef\drawcom{\drawcom -- \thepoint} + \fi + } + \xdef\drawcom{\drawcom ;} + \draw \drawcom + \endgroup% +} + + +\define@key{polygon}{color}{\def\mm@color{#1}} +\define@key{polygon}{status}{\def\mm@status{#1}} +\define@key{polygon}{pattern}{\def\mm@pattern{#1}} +\define@key{polygon}{opacity}{\def\mm@opacity{#1}} +\define@key{polygon}{thickness}{\def\mm@thickness{#1}} + +\define@key{polygon}{points}{\def\mm@points{#1}} +\define@key{polygon}{boundary}{\def\mm@boundary{#1}} +\DeclareDocumentCommand{\polygon}{m}{% +\begingroup% + \setkeys{polygon}{color=\PolygonColor,opacity={1},thickness={1}, +points={(0,0)},status={normal},pattern={},boundary={true},#1 } % + +\xdef\polygonpattern{\mm@pattern} +\ifthenelse{\equal{\mm@status}{normal}}{\xdef\rcolor{\mm@color}}{ +\ifthenelse{\equal{\mm@status}{intesection}}{\xdef\rcolor{\IntersectionColor} +} +{ + \ifthenelse{\equal{\mm@status}{alert}}{\xdef\rcolor{\AlertColor}}{ + +\ifthenelse{\equal{\mm@status}{open}}{\xdef\polygonpattern{\OpenPolygonPattern} +\xdef\rcolor { +\mm@color}}{ + + \ifthenelse{\equal{\mm@status}{focus}}{\xdef\rcolor{\FocusColor}}{ + \xdef\rcolor{\mm@color} +}}}}} + +\ifthenelse{\equal{\mm@boundary}{true}} +{\def\bounddraw{draw=\rcolor}} +{\def\bounddraw{draw=none}} + + \gdef\drawcom{ + [\bounddraw, + line width=\mm@thickness, + fill=\rcolor, + opacity=\mm@opacity, + pattern=\polygonpattern, + pattern color=\rcolor + ] + } + \foreach \point [count=\xi] in \mm@points{ + \StrLeft{\point}{1}[\firstletter] +\ifthenelse{\equal{\firstletter}{(}}{\def\thepoint{\point}}{\def\thepoint{( +\point)}} + \ifnum\xi=1 + \xdef\drawcom{\drawcom \thepoint} + \else + \xdef\drawcom{\drawcom -- \thepoint} + \fi + } + \xdef\drawcom{\drawcom -- cycle ;} + \draw \drawcom + \endgroup% +} + + +\define@key{halfspace}{color}{\def\mm@color{#1}} +\define@key{halfspace}{opacity}{\def\mm@opacity{#1}} +\define@key{halfspace}{thickness}{\def\mm@thickness{#1}} +\define@key{halfspace}{points}{\def\mm@points{#1}} +\define@key{halfspace}{status}{\def\mm@status{#1}} +\define@key{halfspace}{pattern}{\def\mm@pattern{#1}} +\define@key{halfspace}{patterncolor}{\def\mm@patterncolor{#1}} +\DeclareDocumentCommand{\halfspace}{m}{% +\begingroup% + \setkeys{halfspace}{color=blue,opacity={0.7},thickness={1}, +points={(0,0)},status={normal},pattern={north west +lines},patterncolor={\HalfspaceColor} +,#1 } % + \gdef\drawcom{ + [draw=none,color=\mm@color, + line width=\mm@thickness, + fill=\mm@color, + opacity=\mm@opacity, + pattern=\mm@pattern, + pattern color=\mm@patterncolor + ] + } + \foreach \point [count=\xi] in \mm@points{ + \StrLeft{\point}{1}[\firstletter] +\ifthenelse{\equal{\firstletter}{(}}{\def\thepoint{\point}}{\def\thepoint{( +\point)}} + \ifnum\xi=1 + \xdef\drawcom{\drawcom \thepoint} + \else + \xdef\drawcom{\drawcom -- \thepoint} + \fi + } + \xdef\drawcom{\drawcom -- cycle ;} + \draw \drawcom + \endgroup% +} + + + +\define@key{cone}{color}{\def\mm@color{#1}} +\define@key{cone}{opacity}{\def\mm@opacity{#1}} +\define@key{cone}{thickness}{\def\mm@thickness{#1}} +\define@key{cone}{status}{\def\mm@status{#1}} +\define@key{cone}{pattern}{\def\mm@pattern{#1}} + +\define@key{cone}{generators}{\def\mm@generators{#1}} +\define@key{cone}{vertex}{\def\mm@vertex{#1}} +\DeclareDocumentCommand{\cone}{m}{% +\begingroup% + \setkeys{cone}{color=solarized-blue,opacity={1},thickness={1}, + vertex={(0,0)},generators={(0,0)},status={normal},pattern={north west +lines},#1 } % + +\ifthenelse{\equal{\mm@status}{normal}}{\xdef\rcolor{\mm@color}}{ +\ifthenelse{\equal{\mm@status}{intesection}}{\xdef\rcolor{\IntersectionColor} +} +{ + \ifthenelse{\equal{\mm@status}{alert}}{\xdef\rcolor{\AlertColor}}{ + \ifthenelse{\equal{\mm@status}{focus}}{\xdef\rcolor{\FocusColor}}{ + \xdef\rcolor{\mm@color} +}}}} + + \gdef\drawcom{ + [->,color=\rcolor, + line width=\mm@thickness, + fill=\rcolor, + opacity=\mm@opacity] + } + + \StrLeft{\mm@vertex}{1}[\firstletter] + \ifthenelse{\equal{\firstletter}{(}} + {\def\thevertex{\mm@vertex}} + {\def\thevertex{(\mm@vertex)}} + + \gdef\previouspoint{\thevertex} + + \foreach \point in \mm@generators{ + \StrLeft{\point}{1}[\firstletter] +\ifthenelse{\equal{\firstletter}{(}}{\def\thepoint{\point}}{\def\thepoint{( +\point)}} + + \node (xxxxO) at \thevertex {}; % Possible to add generator labels + \node (xxxxA) at \thepoint {}; % Possible to add generator labels + \coordinate (xxxxB) at ($(xxxxO)!1.5!(xxxxA)$); + \draw [dashed,color=\rcolor] \thevertex -- (xxxxB) ; + \draw \drawcom \thevertex -- (xxxxA) ; + \ifthenelse{\equal{\previouspoint}{\thevertex}}{} + { + \node (xxxxC) at \previouspoint {}; % Possible to add generator labels + \draw [draw=none,pattern color=\rcolor,pattern=\mm@pattern,opacity=0.6] + \thevertex -- ($(xxxxO)!1.3!(xxxxC)$) -- +($(xxxxO)!1.3!(xxxxA)$) ; } + \xdef\previouspoint{\thepoint} + +} +\endgroup% +} + + + + +\define@key{axes}{x}{\def\mm@x{#1}} +\define@key{axes}{y}{\def\mm@y{#1}} +\define@key{axes}{z}{\def\mm@z{#1}} +\define@key{axes}{xlabel}{\def\mm@xlabel{#1}} +\define@key{axes}{ylabel}{\def\mm@ylabel{#1}} +\define@key{axes}{zlabel}{\def\mm@zlabel{#1}} +\define@key{axes}{labels}{\def\mm@labels{#1}} +\DeclareDocumentCommand{\axes}{m}{% +\begingroup% + +\setkeys{axes}{x={0,1},y={0,1},z={},xlabel={x},ylabel={y},zlabel={z},labels={ +true} , #1 } % + + \splicelist{\mm@x} + \ifthenelse{\equal{\mm@z}{}}{ + \coordinate (Origin) at (0,0); + \splicelist{\mm@x} + \coordinate (XAxisMin) at (-\myhead,0); + \coordinate (XAxisMax) at (\mylast,0); + \coordinate (XLabel) at (\mylast +0.3,0,0); + + \splicelist{\mm@y} + \coordinate (YAxisMin) at (0,-\myhead); + \coordinate (YAxisMax) at (0,\mylast); + \coordinate (YLabel) at (0,\mylast +0.3,0); + + \draw [thin, gray,-latex] (XAxisMin) -- (XAxisMax) ;% Draw x axis + \draw [thin, gray,-latex] (YAxisMin) -- (YAxisMax);% Draw y axis + \ifthenelse{\equal{\mm@labels}{no}}{}{ + \node at (XLabel) {\mm@xlabel}; + \node at (YLabel) {\mm@ylabel}; + } + + }{ + \coordinate (Origin) at (0,0); + \splicelist{\mm@x} + \coordinate (XAxisMin) at (-\myhead,0); + \coordinate (XAxisMax) at (\mylast,0); + \coordinate (XLabel) at (\mylast +0.3,0,0); + + \splicelist{\mm@y} + \coordinate (YAxisMin) at (0,-\myhead); + \coordinate (YAxisMax) at (0,\mylast); + \coordinate (YLabel) at (0,\mylast +0.3,0); + + \splicelist{\mm@z} + \coordinate (ZAxisMin) at (0,0,-\myhead); + \coordinate (ZAxisMax) at (0,0,\mylast); + \coordinate (ZLabel) at (0,0,\mylast +0.3); + + \draw [thin, gray,-latex] (XAxisMin) -- (XAxisMax) ;% Draw x axis + \draw [thin, gray,-latex] (YAxisMin) -- (YAxisMax);% Draw y axis + \draw [thin, gray,-latex] (ZAxisMin) -- (ZAxisMax);% Draw z axis + \ifthenelse{\equal{\mm@labels}{no}}{}{ + \node at (XLabel) {\mm@xlabel}; + \node at (YLabel) {\mm@ylabel}; + \node at (ZLabel) {\mm@zlabel}; + } + + } + + + +\endgroup% +} + + + + + +\define@key{hyperplane}{color}{\def\mm@color{#1}} +\define@key{hyperplane}{fill}{\def\mm@fill{#1}} +\define@key{hyperplane}{opacity}{\def\mm@opacity{#1}} +\define@key{hyperplane}{thickness}{\def\mm@thickness{#1}} +\define@key{hyperplane}{points}{\def\mm@points{#1}} +\define@key{hyperplane}{status}{\def\mm@status{#1}} +\define@key{hyperplane}{pattern}{\def\mm@pattern{#1}} +\define@key{hyperplane}{patterncolor}{\def\mm@patterncolor{#1}} +\DeclareDocumentCommand{\hyperplane}{m}{% +\begingroup% + \setkeys{hyperplane}{color=blue,fill=orange,opacity={0.7},thickness={1}, +points={(0,0)},status={normal},pattern={north west +lines},patterncolor={\HalfspaceColor} +,#1 } % + \gdef\drawcom{ + [draw=none,color=\mm@color, + line width=\mm@thickness, + fill=\mm@fill, + opacity=\mm@opacity, + pattern=\mm@pattern, + pattern color=\mm@patterncolor + ] + } + \foreach \point [count=\xi] in \mm@points{ + \StrLeft{\point}{1}[\firstletter] +\ifthenelse{\equal{\firstletter}{(}}{\def\thepoint{\point}}{\def\thepoint{( +\point)}} + \ifnum\xi=1 + \xdef\drawcom{\drawcom \thepoint} + \else + \xdef\drawcom{\drawcom -- \thepoint} + \fi + } + \xdef\drawcom{\drawcom -- cycle ;} + \draw \drawcom + \endgroup% +} + + +\makeatother |