%%% sparklines.sty Version 1.7
%%%
%%% What Are Sparklines?
%%% Sparklines are intense, simple, wordlike graphics (so named by Edward Tufte).
%%% In lieu of a more detailed introduction, Professor Tufte's site has an early
%%% release of a chapter on sparklines, see www.edwardtufte.com. A PHP
%%% implementation can be found at http://sparkline.sourceforge.net/.
%%%
%%% Copyright 2009 Andreas Loeffler
%%% ========================================================================
%%% LICENCE:
%%% This file may be distributed under the terms of the LaTeX Project Public
%%% License, as described in lppl.txt in the base LaTeX distribution.
%%% Either version 1 or, at your option, any later version.
%%% ========================================================================
%%% [email protected]
%%%
%%% MODIFICATION HISTORY:
%%%
%%% Dec 26 2016:
%%% version 1.7: Boris Veytsman ([email protected]): Adding optional clipping,
%%% extensible bottom lines, some bug fixing.
%%%
%%% Oct 19, 2014
%%% version 1.6: Emiel van Miltenburg ([email protected]) -
%%% Adding a bottom line (the x-axis, this is useful to visually
%%% separate different bar charts that are next to each other) and
%%% changing the color of the bottom line.
%%%
%%% Nov 21, 2009
%%% version 1.5: Benno Puetz ([email protected]) made change of
%%% colors possible.
%%%
%%% Apr 20, 2009
%%% version 1.4: Alexander Kowalski
%%% ([email protected]) found an error concerning
%%% spark-rectangles
%%%
%%% Mar 21, 2007
%%% version 1.3: Dan Luecking ([email protected]) added user-changeable
%%% parameters, and expanded documentation
%%%
%%% Mar 19, 2007
%%% version 1.2: Harlan Harris ([email protected]) added
%%% positive-value-only bars
%%%
%%% Apr 21, 2005
%%% version 1.1: bug removed thanks to Mathias Hofmann
%%% <[email protected]>
%%%
%%% Dec 12, 2004
%%% version 1.0: first version of sparklines
%%%

\ProvidesPackage{sparklines}
   [2016/12/26 v1.7 Sparklines (see more about sparklines at www.EdwardTufte.com)]
   \typeout {Package: `sparklines' 1.7bp \space 2016/12/26}
\RequirePackage{pgf}

% We define the colors of two features: the background rectangle and
% the spikes in a bar graph
\definecolor{sparkrectanglecolor}{gray}{0.9}
\definecolor{sparkspikecolor}{named}{black}
\definecolor{sparklinecolor}{named}{black}
\definecolor{sparkbottomlinecolor}{named}{black}
% We define parameters for changing the sizes. These are
%   \sparklinethickness -- thickness of the line drawn by \spark,
%   \sparkdotwidth -- diameter of the dot drawn by \sparkdot,
%   \sparkspikewidth -- width of bar drawn in \sparkspike,
%   \sparklineheight -- macro, number of ex for the height of picture.
%   \sparkbottomlinewidth -- width of the bottom line
% Defaults equal old hard-coded values.
\newlength\sparklinethickness
\newlength\sparkdotwidth
\newlength\sparkspikewidth
\newlength\sparkbottomlinethickness
\newlength\sparklineclipsep
\setlength\sparklinethickness{0.2pt}
\setlength\sparkdotwidth{1.2pt}
\setlength\sparkspikewidth{2pt}
\setlength\sparkbottomlinethickness{2pt}
\setlength\sparklineclipsep{2pt}
\providecommand{\sparklineheight}{1.75}

% defines sparkline environment
% Replace hard coded line thickness and picture height with above
% defined parameters.
\newenvironment{sparkline}[1]{\pgfpicture{0ex}{0ex}{#1
   ex}{\sparklineheight ex}
 \pgfsetlinewidth{\sparklinethickness}
 \pgfsetxvec{\pgfpoint{#1 ex}{0pt}}
 \pgfsetyvec{\pgfpoint{0pt}{\sparklineheight ex}}
} {\pgfstroke \endpgfpicture}

\newenvironment{sparkline*}[1]{\pgfpicture{0ex}{0ex}{#1
   ex}{\sparklineheight ex}
 \pgfpathrectanglecorners%
       {\pgfpoint{-\sparklineclipsep}{-\sparklineclipsep}}%
       {\pgfpointadd{\pgfpoint{#1 ex}{\sparklineheight ex}}%
         {\pgfpoint{\sparklineclipsep}{\sparklineclipsep}}}
 \pgfusepath{clip}
 \pgfsetlinewidth{\sparklinethickness}
 \pgfsetxvec{\pgfpoint{#1 ex}{0pt}}
 \pgfsetyvec{\pgfpoint{0pt}{\sparklineheight ex}}
} {\pgfstroke \endpgfpicture}


% defines sparkdot with color
% Replace hard-coded diameter with previously defined parameter.
\def\sparkdot #1 #2 #3 {%
 {\pgfmoveto{\pgforigin}\color{#3}\pgfcircle[fill]{\pgfxy(#1,#2)}{\sparkdotwidth}}%
}

% defines sparkrectangle
% Replace hard-coded rgb value with with previously defined color value.
\def\sparkrectangle #1 #2 {%
  \ifdim #1pt > #2pt
       \errmessage{The upper corner #2 of rectangle cannot be lower than #1}%
  \fi
  {\pgfmoveto{\pgforigin}\color{sparkrectanglecolor}%
  \pgfrect[fill]{\pgfxy(0, #1)}{\pgfxy(1, #2-#1)}}}%

% defines sparkbottomline
\newcommand{\sparkbottomline}[1][1]{\pgfsetlinewidth{\sparkbottomlinethickness}%
 \color{sparkbottomlinecolor}%
 \pgfline{\pgfxy(0,0)}{\pgfxy(#1,0)}\color{sparklinecolor}}
% defines sparkbottomlinex
\def\sparkbottomlinex #1 #2 {\pgfsetlinewidth{\sparkbottomlinethickness}%
 \color{sparkbottomlinecolor}
 \pgfline{\pgfxy(#1,0)}{\pgfxy(#2,0)}\color{sparklinecolor}}

% defines sparkline-plot
% Replace \@shouldIstop hack with equivalent \@ifnextchar code.
\def\spark #1 #2 {%
 \pgfmoveto{\pgfxy(#1,#2)} %
 \@SPARK}
\def\@SPARK#1 #2 {%
 \pgfsetlinewidth{\sparklinethickness}%
 \pgfsetstrokecolor{sparklinecolor}%
 \pgflineto{\pgfxy(#1,#2)} %
 \@ifnextchar/{\pgfstroke\ignorespaces}{\@SPARK}}

% defines sparkspike
% Redefine \sparkspike with code that actually detects the color
% change. The old version had black hard-coded, but even changing that
% made no difference in the output. The combination of setting stroke
% color and \pgfusepath{stroke} made it work. In place of hard-coded
% width and are now previously defined parameters.
\def\sparkspike #1 #2 {%
 {%
   \pgfmoveto{\pgforigin}%
    \pgfsetlinewidth{\sparkspikewidth}%
    \pgfsetstrokecolor{sparkspikecolor}%
       \pgfmoveto{\pgfxy(#1, 0)}%
       \pgflineto{\pgfxy(#1, #2)}
    \pgfusepath{stroke}}%
}
\endinput