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 | |
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')
-rw-r--r-- | Master/texmf-dist/doc/latex/polyhedra/README.md | 19 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/polyhedra/polyhedra-doc.pdf | bin | 0 -> 183790 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/polyhedra/polyhedra-doc.tex | 418 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/polyhedra/polyhedra.sty | 577 |
4 files changed, 1014 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/polyhedra/README.md b/Master/texmf-dist/doc/latex/polyhedra/README.md new file mode 100644 index 00000000000..6a64479e057 --- /dev/null +++ b/Master/texmf-dist/doc/latex/polyhedra/README.md @@ -0,0 +1,19 @@ +# polyhedra.sty +A tikz package for drawing polyhedra + +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.
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/polyhedra/polyhedra-doc.pdf b/Master/texmf-dist/doc/latex/polyhedra/polyhedra-doc.pdf Binary files differnew file mode 100644 index 00000000000..1b956e586d3 --- /dev/null +++ b/Master/texmf-dist/doc/latex/polyhedra/polyhedra-doc.pdf diff --git a/Master/texmf-dist/doc/latex/polyhedra/polyhedra-doc.tex b/Master/texmf-dist/doc/latex/polyhedra/polyhedra-doc.tex new file mode 100644 index 00000000000..c37a67a0c82 --- /dev/null +++ b/Master/texmf-dist/doc/latex/polyhedra/polyhedra-doc.tex @@ -0,0 +1,418 @@ +\documentclass[a4paper]{article} +\usepackage{listings} + +\usepackage{polyhedra} + +\begin{document} + +\lstset{language=[LaTeX]{TeX}} + +\lstset{ +basicstyle=\small\sffamily, +backgroundcolor=\color{gray!20}, +%numbers=left, +numberstyle=\tiny, +breaklines=true, +%frame=l, +xleftmargin=\parindent, +columns=fullflexible, +showstringspaces=false, +keywordstyle=\bfseries\color{solarized-green}, +commentstyle=\color{black!50}, +identifierstyle=\color{solarized-blue}, +stringstyle=, +escapeinside={(*}{*)} +} + + +\title{Polyhedra \LaTeX\ package - v. 0.3} +\author{Zafeirakis zafeirakopoulos} +\maketitle +\begin{abstract} +This package provides macros for creating polyhedral objects in 2D and 3D. +It requires tikz and tikz-3dplot. +The macros provided can be used for drawing vertices, edges, rays, polygons and +cones. +\end{abstract} + +\section{Introduction} + + +All the drawing commands work with keyword arguments and are the same in +2d and 3D. + + + +\section{Functionality} + +\subsection{The \emph{polyhedron} environment} + +The \emph{polyhedron} environment is essentially a wrapper for a tikzpicture +environment. +It accepts as extra arguments the dimension of the picture (either $2$ or $3$) +and if the dimension is $3$, then the arguments for the three angles defining +the rotated coordinate system are given. +For the 3D coordinate system, we use tikz-plot3d. + +\begin{center} + \begin{minipage}{0.6\textwidth} + \begin{lstlisting} +\begin{polyhedron}{dim=2} + \axes{x={1,3},y={1,3}} +\end{polyhedron} + \end{lstlisting} + \end{minipage} + \qquad\qquad + \begin{minipage}{0.2\textwidth} + \begin{polyhedron}{dim=2} + \axes{x={1,3},y={1,3}} + \end{polyhedron} + \end{minipage} +\end{center} + + +The dimension argument defaults to $2$. + + +\begin{center} + \begin{minipage}{0.6\textwidth} + \begin{lstlisting} + \begin{polyhedron}{} + \axes{x={1,3},y={1,3}} + \end{polyhedron} + \end{lstlisting} + \end{minipage} + \qquad\qquad + \begin{minipage}{0.2\textwidth} + \begin{polyhedron}{} + \axes{x={1,3},y={1,3}} + \end{polyhedron} + \end{minipage} +\end{center} + + +Let us define a 3D polyhedron. + +\begin{center} + \begin{minipage}{0.6\textwidth} + \begin{lstlisting} +\begin{polyhedron}{dim=3} + \axes{x={1,3},y={1,3},z={1,3}} +\end{polyhedron} + \end{lstlisting} + \end{minipage} + \qquad\qquad + \begin{minipage}{0.2\textwidth} + \begin{polyhedron}{dim=3} + \axes{x={1,3},y={1,3},z={1,3}} + \end{polyhedron} + \end{minipage} +\end{center} + +Since we did not give the angles for the main coordinate system, we get the +default tikz $xy$-plane. + +Now lets rotate the coordinate system by 60 degrees around the $x$-axis and +120 degrees around the $z$-axis. + +\begin{center} + \begin{minipage}{0.6\textwidth} + \begin{lstlisting} +\begin{polyhedron}{dim=3,phi=60,theta=120} + \axes{x={1,3},y={1,3},z={1,3}} +\end{polyhedron} + \end{lstlisting} + \end{minipage} + \qquad\qquad + \begin{minipage}{0.2\textwidth} + \begin{polyhedron}{dim=3,phi=60,theta=120} + \axes{x={1,3},y={1,3},z={1,3}} + \end{polyhedron} + \end{minipage} +\end{center} + + +\subsection{Input} + +The following macros work within the \texttt{polyhedron} environment. + +\subsubsection{Point.} To let A be a point (x,y) or (x,y,z) +\begin{lstlisting} +\point{(x,y,z)}{A} +\end{lstlisting} +After defining a point, we can use the handle (variable name) A, instead of +writing down the coordinates in the macros that follow. + + +\subsubsection{Axes.} + +We saw already some examples using the \emph{axes} command. + +\begin{center} + \begin{minipage}{0.6\textwidth} + \begin{lstlisting} +\begin{polyhedron}{dim=3,phi=60,theta=120} + \axes{x={1,3},y={1,3},z={1,3}} +\end{polyhedron} + \end{lstlisting} + \end{minipage} + \qquad\qquad + \begin{minipage}{0.2\textwidth} + \begin{polyhedron}{dim=3,phi=60,theta=120} + \axes{x={1,3},y={1,3},z={1,3}} + \end{polyhedron} + \end{minipage} +\end{center} + +The command takes the following (self-explanatory) arguments. +All arguments are optional, defaulting to the ones shown here. + +\begin{lstlisting} +x={0,1},y={0,1},z={},xlabel={x},ylabel={y},zlabel={z},labels={true} +\end{lstlisting} + + + +\begin{center} + \begin{minipage}{0.6\textwidth} + \begin{lstlisting} +\begin{polyhedron}{dim=3,phi=60,theta=120} + \axes{x={1,3},z={1,3},zlabel={not z}} +\end{polyhedron} + \end{lstlisting} + \end{minipage} + \qquad\qquad + \begin{minipage}{0.2\textwidth} + \begin{polyhedron}{dim=3,phi=60,theta=120} + \axes{x={1,3},z={1,3},zlabel={not z}} + \end{polyhedron} + \end{minipage} +\end{center} + + + +\subsection{Drawing commands} + +All drawing commands accept the following options: +\begin{description} + \item[color] The color of the polyhedral object to draw. + \item[status] The status of the object. The possible values are: + \begin{itemize} + \item normal + \item focus + \item alert + \item open + \end{itemize} + \item[opacity] The opacity of the object. + \item[thickness] The width of the lines + \item[pattern] The draw pattern +\end{description} + +\subsubsection{Vertex} + +The \emph{vertex} command is used to draw a vertex at a point (x,y,z) or A. +The standard options of color, status, opacity, thickness and pattern apply. +The extra options for vertex are: +\begin{description} + \item[point] sets the coordinates of the vertex and it can be either a tikz + coordinate tuple or a point already defined. + \item[text] The text of the vertex label. + \item[textcolor] The color of the label's text. + \item[anchora] The label anchor relative to the vertex: north, south, east, + west + \item[anchorb] The text's anchor relative to the label: above, below, right, + left +\end{description} + + +\begin{center} + \begin{minipage}{0.7\textwidth} + \begin{lstlisting} +\begin{polyhedron}{} + \vertex{point={0,0},status=normal} + \vertex{point={1,0},status=alert} + \vertex{point={2,0},status=open} + \vertex{point={3,0},color=red,pattern={north west lines}} + \vertex{point={4,0},color=orange,text={A}} +\end{polyhedron} + \end{lstlisting} + \end{minipage} + \hskip 2em + \begin{minipage}{0.2\textwidth} + \begin{polyhedron}{} + \vertex{point={0,0},status=normal} + \vertex{point={1,0},status=alert} + \vertex{point={2,0},status=open} + \vertex{point={3,0},color=red,pattern={north west lines}} + \vertex{point={4,0},color=orange,text={A}} + \end{polyhedron} + \end{minipage} +\end{center} + + + +\subsubsection{Edges and Rays} The command \emph{edge} is used to draw an +edge from point A to point B. +The extra arguments are: +\begin{description} + \item[points] sets the coordinates of the vertices of the edge. It is a list +of (two) points in \{\}. +\end{description} + + +\begin{center} + \begin{minipage}{0.7\textwidth} + \begin{lstlisting} +\begin{polyhedron}{} + \edge{points={(0,0),(2,2)},status=alert} + \edge{points={(0,0),(2,3)},status=focus} + \edge{points={(0,0),(2,4)},status=open} + \edge{points={(0,0),(2,5)},color=orange} + \edge{points={(0,0),(2,6)},status=normal} + \edge{points={(2,1),(3,3)},thickness=3} + \edge{points={(4,1),(3,3)},pattern={dotted}} +\end{polyhedron} + \end{lstlisting} + \end{minipage} + \hskip 2em + \begin{minipage}{0.2\textwidth} + \begin{polyhedron}{} + \edge{points={(0,0),(2,2)},status=alert} + \edge{points={(0,0),(2,3)},status=focus} + \edge{points={(0,0),(2,4)},status=open} + \edge{points={(0,0),(2,5)},color=orange} + \edge{points={(0,0),(2,6)},status=normal} + \edge{points={(2,1),(3,3)},thickness=3} + \edge{points={(4,1),(3,3)},pattern={dotted}} + \end{polyhedron} + \end{minipage} +\end{center} + +Similarly, the command \emph{ray} draw a ray. +The options are exactly the same as for edge. +Note that the sequence in which the points are given matters. +\begin{center} + \begin{minipage}{0.7\textwidth} + \begin{lstlisting} +\begin{polyhedron}{} + \ray{points={(0,0),(2,2)},status=alert} + \ray{points={(0,0),(2,3)},status=focus} + \ray{points={(0,0),(2,4)},status=open} + \ray{points={(0,0),(2,5)},color=orange} + \ray{points={(0,0),(2,6)},status=normal} + \ray{points={(2,1),(3,3)},thickness=3} + \ray{points={(4,1),(3,3)},pattern={dotted}} +\end{polyhedron} + \end{lstlisting} + \end{minipage} + \hskip 2em + \begin{minipage}{0.2\textwidth} + \begin{polyhedron}{} + \ray{points={(0,0),(2,2)},status=alert} + \ray{points={(0,0),(2,3)},status=focus} + \ray{points={(0,0),(2,4)},status=open} + \ray{points={(0,0),(2,5)},color=orange} + \ray{points={(0,0),(2,6)},status=normal} + \ray{points={(2,1),(3,3)},thickness=3} + \ray{points={(4,1),(3,3)},pattern={dotted}} + \end{polyhedron} + \end{minipage} +\end{center} + +\subsubsection{Cone} + +The command \emph{cone} is used to draw a polyhedral cone. +The extra arguments are: +\begin{description} + \item[vertex] Sets the apex of the cone. + \item[generators] A list of points + \item[openeness] A list of boolean values declaring the openness of a + simplicial cone. +\end{description} + + +\begin{center} + \begin{minipage}{0.7\textwidth} + \begin{lstlisting} +\begin{polyhedron}{} + \cone{vertex={(0,0)}, generators={(0,2),(2,2)}, + status=alert} + \cone{vertex={(0,0)}, generators={(2,0),(2,-2)}, + status=focus} +\end{polyhedron} + \end{lstlisting} + \end{minipage} + \hskip 2em + \begin{minipage}{0.2\textwidth} + \begin{polyhedron}{} + \cone{vertex={(0,0)}, generators={(0,2),(2,2)},status=alert} + \cone{vertex={(0,0)}, generators={(2,0),(2,-2)},status=focus} + \end{polyhedron} + \end{minipage} +\end{center} + + +\begin{center} + \begin{minipage}{0.7\textwidth} + \begin{lstlisting} +\begin{polyhedron}{} + \cone{vertex={(0,0)}, generators={(2,0),(2,-2)}, + status=focus} + \cone{vertex={(3,2)},generators={(0,0),(2,-1)}, + pattern={north east lines}} +\end{polyhedron} +\end{lstlisting} + \end{minipage} + \hskip 2em + \begin{minipage}{0.2\textwidth} + \begin{polyhedron}{} + \cone{vertex={(0,0)}, generators={(2,0),(2,-2)},status=focus} + \cone{vertex={(3,2)},generators={(0,0),(2,-1)},pattern={north east lines}} + \end{polyhedron} + \end{minipage} +\end{center} + + + +\subsubsection{Polygon} + +The command \emph{polygon} is used to draw a 2-dimensional polytope in 2D or 3D. +Attention must be paid in the sequence of the points given. +The command does not take the convex hull, but rather draws the polygonal +line defined by the sequence of points. + +The extra arguments are: +\begin{description} + \item[points] The vertices of the cone. + \item[boundary] True or False, for drawing or not the boundary of the polygon. +\end{description} + + +\begin{center} + \begin{minipage}{0.7\textwidth} + \begin{lstlisting} +\begin{polyhedron}{} + \polygon{points={(0,2),(2,2),(2,0)},status=alert} + \polygon{points={(0,-2),(-2,-2),(-2,0)},status=open} + \polygon{points={(0,1),(0,0),(1,0),(1,1)},status=open, + boundary=false,color=orange} +\end{polyhedron} + \end{lstlisting} + \end{minipage} + \hskip 2em + \begin{minipage}{0.2\textwidth} + \begin{polyhedron}{} + \polygon{points={(0,2),(2,2),(2,0)},status=alert} + \polygon{points={(0,-2),(-2,-2),(-2,0)},status=open} +\polygon{points={(0,1),(0,0),(1,0),(1,1)},status=open,boundary=false, +color=orange} + \end{polyhedron} + \end{minipage} +\end{center} + + + +\section{Known limitations and errors} + + +\end{document} 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 |