%% %% This is file `databar.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% datatool.dtx (with options: `databar.sty,package') %% %% datatool.dtx %% Copyright 2016 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 %% of this license of (at your option) any later version. %% The latest version of this license is in %% http://www.latex-project.org/lppl.txt %% and version 1.3 or later is part of all distributions of LaTeX %% version 2005/12/01 or later. %% %% This work has the LPPL maintenance status `maintained'. %% %% The Current Maintainer of this work is Nicola Talbot. %% %% This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-fp.sty, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst. %% %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{databar}[2016/07/28 v2.27 (NLCT)] \RequirePackage{xkeyval} \RequirePackage{dataplot} \newif\ifDTLcolorbarchart \DTLcolorbarcharttrue \DeclareOption{color}{\DTLcolorbarcharttrue} \DeclareOption{gray}{\DTLcolorbarchartfalse} \newcommand*{\DTLbarXlabelalign}{left,rotate=-90} \newcommand*{\DTLbarYticklabelalign}{right} \define@boolkey{databar}[DTL]{verticalbars}[true]{% \ifDTLverticalbars \def\DTLbarXlabelalign{left,rotate=-90}% \def\DTLbarYticklabelalign{right} \else \def\DTLbarXlabelalign{right}% \def\DTLbarYticklabelalign{center} \fi} \DTLverticalbarstrue \DeclareOption{vertical}{\DTLverticalbarstrue \def\DTLbarXlabelalign{left,rotate=-90}% \def\DTLbarYticklabelalign{right} } \DeclareOption{horizontal}{\DTLverticalbarsfalse \def\DTLbarXlabelalign{right}% \def\DTLbarYticklabelalign{center} } \ProcessOptions \RequirePackage{datatool} \RequirePackage{tikz} \newlength\DTLbarchartlength \DTLbarchartlength=3in \newlength\DTLbarwidth \DTLbarwidth=1cm \newlength\DTLbarlabeloffset \setlength\DTLbarlabeloffset{10pt} \newcommand*{\DTLBarXAxisStyle}{-} \newcommand*{\DTLBarYAxisStyle}{-} \newcounter{DTLbarroundvar} \setcounter{DTLbarroundvar}{1} \newcommand*{\DTLbardisplayYticklabel}[1]{#1} \newcommand*{\DTLdisplaylowerbarlabel}[1]{#1} \newcommand*{\DTLdisplaylowermultibarlabel}[1]{#1} \newcommand*{\DTLdisplayupperbarlabel}[1]{#1} \newcommand*{\DTLdisplayuppermultibarlabel}[1]{#1} \newcommand*{\DTLbaratbegintikz}{} \newcommand*{\DTLbaratendtikz}{} \newif\ifDTLbarxaxis \newif\ifDTLbaryaxis \newif\ifDTLbarytics \newcount\@dtl@barcount \newcommand*{\DTLsetbarcolor}[2]{% \expandafter\def\csname dtlbar@segcol\romannumeral#1\endcsname{#2}% } \newcommand*{\DTLgetbarcolor}[1]{% \csname dtlbar@segcol\romannumeral#1\endcsname} \newcommand*{\DTLdobarcolor}[1]{% \expandafter\color\expandafter {\csname dtlbar@segcol\romannumeral#1\endcsname}} \newcommand*{\DTLdocurrentbarcolor}{% \ifnum\dtlforeachlevel=0\relax \PackageError{databar}{Can't use \string\DTLdocurrentbarcolor\space outside \string\DTLbarchart}{}% \else \expandafter\DTLdobarcolor\expandafter{% \csname c@DTLrow\romannumeral\dtlforeachlevel\endcsname}% \fi} \newcommand*{\DTLbaroutlinecolor}{black} \newlength\DTLbaroutlinewidth \DTLbaroutlinewidth=0pt \ifDTLcolorbarchart \DTLsetbarcolor{1}{red} \DTLsetbarcolor{2}{green} \DTLsetbarcolor{3}{blue} \DTLsetbarcolor{4}{yellow} \DTLsetbarcolor{5}{magenta} \DTLsetbarcolor{6}{cyan} \DTLsetbarcolor{7}{orange} \DTLsetbarcolor{8}{white} \else \DTLsetbarcolor{1}{black!15} \DTLsetbarcolor{2}{black!25} \DTLsetbarcolor{3}{black!35} \DTLsetbarcolor{4}{black!45} \DTLsetbarcolor{5}{black!55} \DTLsetbarcolor{6}{black!65} \DTLsetbarcolor{7}{black!75} \DTLsetbarcolor{8}{black!85} \fi \newcommand*{\DTLeverybarhook}{} \define@key{databar}{max}{\def\DTLbarmax{#1}} \define@key{databar}{length}{\DTLbarchartlength=#1\relax } \define@key{databar}{maxdepth}{% \ifnum#1>0\relax \PackageError{databar}{depth must be zero or negative}{}% \else \def\DTLnegextent{#1}% \fi} \define@choicekey{databar}{axes}[\var\nr]{both,x,y,none}{% \ifcase\nr\relax % both \DTLbarxaxistrue \DTLbaryaxistrue \DTLbaryticstrue \or % x only \DTLbarxaxistrue \DTLbaryaxisfalse \DTLbaryticsfalse \or % y only \DTLbarxaxisfalse \DTLbaryaxistrue \DTLbaryticstrue \or % neither \DTLbarxaxisfalse \DTLbaryaxisfalse \DTLbaryticsfalse \fi } \define@key{databar}{variable}{% \def\DTLbarvariable{#1}% } \define@key{databar}{variables}{% \def\dtlbar@variables{#1}% } \define@key{databar}{barwidth}{\setlength{\DTLbarwidth}{#1}} \define@key{databar}{barlabel}{% \def\dtl@barlabel{#1}} \def\dtl@barlabel{} \define@key{databar}{multibarlabels}{% \def\dtl@multibarlabels{#1}} \def\dtl@multibarlabels{} \define@key{databar}{groupgap}{\def\dtlbar@groupgap{#1}} \def\dtlbar@groupgap{1} \define@key{databar}{upperbarlabel}{% \def\dtl@upperbarlabel{#1}} \def\dtl@upperbarlabel{} \define@key{databar}{uppermultibarlabels}{% \def\dtl@uppermultibarlabels{#1}} \def\dtl@uppermultibarlabels{} \define@key{databar}{yticpoints}{% \def\dtlbar@yticlist{#1}\DTLbaryticstrue\DTLbaryaxistrue} \let\dtlbar@yticlist=\relax \define@key{databar}{yticgap}{% \def\dtlbar@yticgap{#1}\DTLbaryticstrue\DTLbaryaxistrue} \let\dtlbar@yticgap=\relax \define@key{databar}{yticlabels}{% \def\dtlbar@yticlabels{#1}\DTLbaryticstrue\DTLbaryaxistrue} \let\dtlbar@yticlabels=\relax \define@key{databar}{ylabel}{% \def\dtlbar@ylabel{#1}} \let\dtlbar@ylabel=\relax \newcommand*{\DTLbarchart}[4][\boolean{true}]{% {% \undef\DTLbarvariable \undef\DTLbarmax \undef\DTLnegextent \disable@keys{databar}{variables,multibarlabels,% uppermultibarlabels,groupgap}% \setkeys{databar}{#2}% \ifundef{\DTLbarvariable}% {% \PackageError{databar}% {\string\DTLbarchart\space missing variable}% {You haven't use the "variable" key}% }% {% \ifundef{\DTLbarmax}% {% \@sDTLforeach[#1]{#3}{#4}{% \expandafter\DTLconverttodecimal\expandafter {\DTLbarvariable}{\dtl@barvar}% \ifundef{\DTLbarmax}% {% \let\DTLbarmax=\dtl@barvar }% {% \let\dtl@old=\DTLbarmax \dtlmax{\DTLbarmax}{\dtl@old}{\dtl@barvar}% }% }% \ifx\dtlbar@yticgap\relax \else \let\dtl@thistick=\dtlbar@yticgap \whiledo{\DTLisFPopenbetween{\dtl@thistick}{0}{\DTLbarmax}}% {% \dtladd{\dtl@thistick}{\dtl@thistick}{\dtlbar@yticgap}% }% \let\DTLbarmax=\dtl@thistick \fi }% {}% \ifundef{\DTLnegextent}% {% \def\DTLnegextent{0}% \@sDTLforeach[#1]{#3}{#4}{% \expandafter\DTLconverttodecimal\expandafter {\DTLbarvariable}{\dtl@barvar}% \let\dtl@old=\DTLnegextent \DTLmin{\DTLnegextent}{\dtl@old}{\dtl@barvar}% }% \ifx\dtlbar@yticgap\relax \else \ifthenelse{\DTLisFPlt{\DTLnegextent}{0}}% {% \edef\dtl@thistick{0}% \whiledo{\DTLisFPclosedbetween{\dtl@thistick}{\DTLnegextent}{0}}{% \dtlsub{\dtl@thistick}{\dtl@thistick}{\dtlbar@yticgap}% }% \let\DTLnegextent=\dtl@thistick }{}% \fi }% {}% \@dtl@tmpcount=\DTLbarchartlength \dtlsub{\dtl@extent}{\DTLbarmax}{\DTLnegextent}% \dtldiv{\dtl@unit}{\number\@dtl@tmpcount}{\dtl@extent}% \setlength{\dtl@yticlabelwidth}{0pt}% \ifDTLbarytics \ifx\dtlbar@yticlist\relax \ifx\dtlbar@yticgap\relax \@dtl@tmpcount=\DTLmintickgap \divide\@dtl@tmpcount by 65536\relax \dtldiv{\dtl@mingap}{\number\@dtl@tmpcount}{\dtl@unit}% \dtl@constructticklist\DTLnegextent\DTLbarmax \dtl@mingap\dtlbar@yticlist \else \dtl@constructticklistwithgapz \DTLnegextent\DTLbarmax\dtlbar@yticlist\dtlbar@yticgap \fi \fi \ifx\dtlbar@ylabel\relax \else \ifx\dtlbar@yticlabels\relax \@for\dtl@thislabel:=\dtlbar@yticlist\do{% \dtlround{\dtl@thislabel}{\dtl@thislabel} {\c@DTLbarroundvar}% \ifDTLverticalbars \settowidth{\dtl@tmplength}{% \DTLbardisplayYticklabel{\dtl@thislabel}}% \else \settoheight{\dtl@tmplength}{% \DTLbardisplayYticklabel{\dtl@thislabel}}% \edef\@dtl@h{\the\dtl@tmplength}% \settodepth{\dtl@tmplength}{% \DTLbardisplayYticklabel{\dtl@thislabel}}% \addtolength{\dtl@tmplength}{\@dtl@h}% \addtolength{\dtl@tmplength}{\baselineskip}% \fi \ifdim\dtl@tmplength>\dtl@yticlabelwidth \setlength{\dtl@yticlabelwidth}{\dtl@tmplength}% \fi }% \else \@for\dtl@thislabel:=\dtlbar@yticlabels\do{% \ifDTLverticalbars \settowidth{\dtl@tmplength}{% \DTLbardisplayYticklabel{\dtl@thislabel}}% \else \settoheight{\dtl@tmplength}{% \DTLbardisplayYticklabel{\dtl@thislabel}}% \edef\@dtl@h{\the\dtl@tmplength}% \settodepth{\dtl@tmplength}{% \DTLbardisplayYticklabel{\dtl@thislabel}}% \addtolength{\dtl@tmplength}{\@dtl@h}% \addtolength{\dtl@tmplength}{\baselineskip}% \fi \ifdim\dtl@tmplength>\dtl@yticlabelwidth \setlength{\dtl@yticlabelwidth}{\dtl@tmplength}% \fi }% \fi \fi \fi \edef\DTLbarchartwidth{\expandafter\number\csname dtlrows@#3\endcsname} \begin{tikzpicture} \ifDTLverticalbars \pgfsetyvec{\pgfpoint{0pt}{\dtl@unit sp}}% \pgfsetxvec{\pgfpoint{\DTLbarwidth}{0pt}}% \else \pgfsetxvec{\pgfpoint{\dtl@unit sp}{0pt}}% \pgfsetyvec{\pgfpoint{0pt}{\DTLbarwidth}}% \fi \DTLbaratbegintikz \def\@dtl@start{0}% \@sDTLforeach[#1]{#3}{#4}{% \expandafter\let\expandafter\@dtl@bar \csname c@DTLrow\romannumeral\dtlforeachlevel\endcsname% \expandafter\DTLconverttodecimal\expandafter {\DTLbarvariable}{\dtl@variable}% \begin{scope} \DTLdocurrentbarcolor \ifDTLverticalbars \fill (\@dtl@start,0) -- (\@dtl@start,\dtl@variable) -- (\@dtl@bar,\dtl@variable) -- (\@dtl@bar,0) -- cycle; \else \fill (0,\@dtl@start) -- (\dtl@variable,\@dtl@start) -- (\dtl@variable,\@dtl@bar) -- (0,\@dtl@bar) -- cycle; \fi \end{scope} \begin{scope} \ifdim\DTLbaroutlinewidth>0pt \expandafter\color\expandafter{\DTLbaroutlinecolor} \ifDTLverticalbars \draw (\@dtl@start,0) -- (\@dtl@start,\dtl@variable) -- (\@dtl@bar,\dtl@variable) -- (\@dtl@bar,0) -- cycle; \else \draw (0,\@dtl@start) -- (\dtl@variable,\@dtl@start) -- (\dtl@variable,\@dtl@bar) -- (0,\@dtl@bar) -- cycle; \fi \fi \end{scope} \ifDTLverticalbars \edef\dtl@textopt{% at={\noexpand\pgfpointadd {\noexpand\pgfpointxy{\@dtl@start.5}{0}} {\noexpand\pgfpoint{0pt}{-\noexpand\DTLbarlabeloffset}}}, \DTLbarXlabelalign }% \edef\DTLstartpt{\noexpand\pgfpointxy{\@dtl@start.5}{0}}% \else \edef\dtl@textopt{% at={\noexpand\pgfpointadd {\noexpand\pgfpointxy{0}{\@dtl@start.5}} {\noexpand\pgfpoint{-\noexpand\DTLbarlabeloffset}{0pt}}}, \DTLbarXlabelalign }% \edef\DTLstartpt{\noexpand\pgfpointxy{0}{\@dtl@start.5}}% \fi \expandafter\pgftext\expandafter[\dtl@textopt]{% \DTLdisplaylowerbarlabel{\dtl@barlabel}} \ifDTLverticalbars \expandafter\DTLifnumlt\expandafter{\DTLbarvariable}{0}% { \edef\dtl@textopt{% at={\noexpand\pgfpointadd {\noexpand\pgfpointxy{\@dtl@start.5}{\dtl@variable}} {\noexpand\pgfpoint{0pt}{-\noexpand\DTLbarlabeloffset}}} }% }{% \edef\dtl@textopt{% at={\noexpand\pgfpointadd {\noexpand\pgfpointxy{\@dtl@start.5}{\dtl@variable}} {\noexpand\pgfpoint{0pt}{\noexpand\DTLbarlabeloffset}}} }% } \edef\DTLendpt{\noexpand\pgfpointxy{\@dtl@start.5}{\dtl@variable}}% \else \expandafter\DTLifnumlt\expandafter{\DTLbarvariable}{0}% { \edef\dtl@textopt{right, at={\noexpand\pgfpointadd {\noexpand\pgfpointxy{\dtl@variable}{\@dtl@start.5}} {\noexpand\pgfpoint{-\noexpand\DTLbarlabeloffset}{0pt}}} }% }{% \edef\dtl@textopt{left, at={\noexpand\pgfpointadd {\noexpand\pgfpointxy{\dtl@variable}{\@dtl@start.5}} {\noexpand\pgfpoint{\noexpand\DTLbarlabeloffset}{0pt}}} }% } \edef\DTLendpt{\noexpand\pgfpointxy{\dtl@variable}{\@dtl@start.5}}% \fi \expandafter\pgftext\expandafter[\dtl@textopt]{% \DTLdisplayupperbarlabel{\dtl@upperbarlabel}} \def\DTLmidpt{\pgfpointlineattime{0.5}{\DTLstartpt}{\DTLendpt}}% \DTLeverybarhook \edef\@dtl@start{\number\@dtl@bar}% }% \ifDTLbarxaxis \ifDTLverticalbars \expandafter\draw\expandafter[\DTLBarXAxisStyle] (0,0) -- (\DTLbarchartwidth,0); \else \expandafter\draw\expandafter[\DTLBarXAxisStyle] (0,0) -- (0,\DTLbarchartwidth); \fi \fi \ifDTLbaryaxis \ifDTLverticalbars \expandafter\draw\expandafter[\DTLBarYAxisStyle] (0,\DTLnegextent) -- (0,\DTLbarmax); \else \expandafter\draw\expandafter[\DTLBarYAxisStyle] (\DTLnegextent,0) -- (\DTLbarmax,0); \fi \fi \ifx\dtlbar@yticlist\relax \else \@for\dtl@thistick:=\dtlbar@yticlist\do{% \ifDTLverticalbars \pgfpathmoveto{\pgfpointxy{0}{\dtl@thistick}} \pgfpathlineto{ \pgfpointadd{\pgfpointxy{0}{\dtl@thistick}} {\pgfpoint{-\DTLticklength}{0pt}}} \else \pgfpathmoveto{\pgfpointxy{\dtl@thistick}{0}} \pgfpathlineto{ \pgfpointadd{\pgfpointxy{\dtl@thistick}{0}} {\pgfpoint{0pt}{-\DTLticklength}}} \fi \pgfusepath{stroke} \ifx\dtlbar@yticlabels\relax \dtlround{\dtl@thislabel}{\dtl@thistick} {\c@DTLbarroundvar}% \else \dtl@chopfirst\dtlbar@yticlabels\dtl@thislabel\dtl@rest \let\dtlbar@yticlabels=\dtl@rest \fi \ifDTLverticalbars \edef\dtl@textopt{\DTLbarYticklabelalign,% at={\noexpand\pgfpointadd {\noexpand\pgfpointxy{0}{\dtl@thistick}} {\noexpand\pgfpoint{-\noexpand\DTLticklabeloffset}{0pt}}, }}% \else \edef\dtl@textopt{\DTLbarYticklabelalign, at={\noexpand\pgfpointadd {\noexpand\pgfpointxy{\dtl@thistick}{0}} {\noexpand\pgfpoint{0pt}{-\noexpand\DTLticklabeloffset}} }}% \fi \expandafter\pgftext\expandafter[\dtl@textopt]{% \DTLbardisplayYticklabel{\dtl@thislabel}} }% \fi \ifx\dtlbar@ylabel\relax \else \addtolength{\dtl@yticlabelwidth}{\baselineskip}% \setlength{\dtl@tmplength}{0.5\DTLbarchartlength} \ifDTLverticalbars \pgftext[bottom,center,at={\pgfpointadd {\pgfpointxy{0}{\DTLnegextent}}% {\pgfpoint{-\dtl@yticlabelwidth}{\dtl@tmplength}}}, rotate=90]{% \dtlbar@ylabel} \else \pgftext[bottom,center,at={\pgfpointadd {\pgfpointxy{\DTLnegextent}{0}}% {\pgfpoint{\dtl@tmplength}{-\dtl@yticlabelwidth}}}]{% \dtlbar@ylabel} \fi \fi \DTLbaratendtikz \end{tikzpicture} }% }% } \newcommand*{\DTLmultibarchart}[4][\boolean{true}]{% {\let\dtlbar@variables=\relax \let\DTLbarmax=\relax \let\DTLnegextent=\relax \disable@keys{databar}{variable,upperbarlabel}% \setkeys{databar}{#2}% \ifx\dtlbar@variables\relax \PackageError{databar}{\string\DTLmultibarchart\space missing variables setting}{}% \else \ifx\DTLbarmax\relax \@sDTLforeach[#1]{#3}{#4}{% \@for\DTLbarvariable:=\dtlbar@variables\do{% \expandafter\DTLconverttodecimal\expandafter {\DTLbarvariable}{\dtl@barvar}% \ifx\DTLbarmax\relax \let\DTLbarmax=\dtl@barvar \else \let\dtl@old=\DTLbarmax \dtlmax{\DTLbarmax}{\dtl@old}{\dtl@barvar}% \fi }% }% \ifx\dtlbar@yticgap\relax \else \let\dtl@thistick=\dtlbar@yticgap% \whiledo{\DTLisFPopenbetween{\dtl@thistick}{0}{\DTLbarmax}}{% \dtladd{\dtl@thistick}{\dtl@thistick}{\dtlbar@yticgap}% }% \let\DTLbarmax=\dtl@thistick \fi \fi \ifx\DTLnegextent\relax \def\DTLnegextent{0}% \@sDTLforeach[#1]{#3}{#4}{% \@for\DTLbarvariable:=\dtlbar@variables\do{% \expandafter\DTLconverttodecimal\expandafter {\DTLbarvariable}{\dtl@barvar}% \let\dtl@old=\DTLnegextent \DTLmin{\DTLnegextent}{\dtl@old}{\dtl@barvar}% }% }% \ifx\dtlbar@yticgap\relax \else \ifthenelse{\DTLisFPlt{\DTLnegextent}{0}}{% \edef\dtl@thistick{0}% \whiledo{\DTLisFPclosedbetween{\dtl@thistick}{\DTLnegextent}{0}}{% \dtlsub{\dtl@thistick}{\dtl@thistick}{\dtlbar@yticgap}% }% \let\DTLnegextent=\dtl@thistick }{}% \fi \fi \@dtl@tmpcount=\DTLbarchartlength \dtlsub{\dtl@extent}{\DTLbarmax}{\DTLnegextent}% \dtldiv{\dtl@unit}{\number\@dtl@tmpcount}{\dtl@extent}% \setlength{\dtl@yticlabelwidth}{0pt}% \ifDTLbarytics \ifx\dtlbar@yticlist\relax \ifx\dtlbar@yticgap\relax \@dtl@tmpcount=\DTLmintickgap \divide\@dtl@tmpcount by 65536\relax \dtldiv{\dtl@mingap}{\number\@dtl@tmpcount}{\dtl@unit}% \dtl@constructticklist\DTLnegextent\DTLbarmax \dtl@mingap\dtlbar@yticlist \else \dtl@constructticklistwithgapz \DTLnegextent\DTLbarmax\dtlbar@yticlist\dtlbar@yticgap \fi \fi \ifx\dtlbar@ylabel\relax \else \ifx\dtlbar@yticlabels\relax \@for\dtl@thislabel:=\dtlbar@yticlist\do{% \dtlround{\dtl@thislabel}{\dtl@thislabel} {\c@DTLbarroundvar}% \ifDTLverticalbars \settowidth{\dtl@tmplength}{% \DTLbardisplayYticklabel{\dtl@thislabel}}% \else \settoheight{\dtl@tmplength}{% \DTLbardisplayYticklabel{\dtl@thislabel}}% \edef\@dtl@h{\the\dtl@tmplength}% \settodepth{\dtl@tmplength}{% \DTLbardisplayYticklabel{\dtl@thislabel}}% \addtolength{\dtl@tmplength}{\@dtl@h}% \addtolength{\dtl@tmplength}{\baselineskip}% \fi \ifdim\dtl@tmplength>\dtl@yticlabelwidth \setlength{\dtl@yticlabelwidth}{\dtl@tmplength}% \fi }% \else \@for\dtl@thislabel:=\dtlbar@yticlabels\do{% \ifDTLverticalbars \settowidth{\dtl@tmplength}{% \DTLbardisplayYticklabel{\dtl@thislabel}}% \else \settoheight{\dtl@tmplength}{% \DTLbardisplayYticklabel{\dtl@thislabel}}% \edef\@dtl@h{\the\dtl@tmplength}% \settodepth{\dtl@tmplength}{% \DTLbardisplayYticklabel{\dtl@thislabel}}% \addtolength{\dtl@tmplength}{\@dtl@h}% \addtolength{\dtl@tmplength}{\baselineskip}% \fi \ifdim\dtl@tmplength>\dtl@yticlabelwidth \setlength{\dtl@yticlabelwidth}{\dtl@tmplength}% \fi }% \fi \fi \fi \dtl@xticlabelheight=0pt\relax \@dtl@tmpcount=0\relax \@for\dtl@thislabel:=\dtl@multibarlabels\do{% \advance\@dtl@tmpcount by 1\relax \settoheight{\dtl@tmplength}{\tikz\expandafter\pgftext\expandafter [\DTLbarXlabelalign]{\DTLdisplaylowerbarlabel{\dtl@thislabel}};}% \edef\@dtl@h{\the\dtl@tmplength}% \settodepth{\dtl@tmplength}{\tikz\expandafter\pgftext\expandafter [\DTLbarXlabelalign]{\DTLdisplaylowerbarlabel{\dtl@thislabel}};}% \addtolength{\dtl@tmplength}{\@dtl@h}% \addtolength{\dtl@tmplength}{\baselineskip}% \ifdim\dtl@tmplength>\dtl@xticlabelheight \setlength{\dtl@xticlabelheight}{\dtl@tmplength}% \fi } \@dtl@tmpcount=0\relax \@for\dtl@this:=\dtlbar@variables\do{% \advance\@dtl@tmpcount by 1\relax }% \edef\DTLbargroupwidth{\number\@dtl@tmpcount}% \edef\dtl@n{\expandafter\number\csname dtlrows@#3\endcsname} \dtlmul{\dtl@tmpi}{\dtl@n}{\DTLbargroupwidth} \dtlsub{\dtl@tmpii}{\dtl@n}{1}% \dtlmul{\dtl@tmpii}{\dtl@tmpii}{\dtlbar@groupgap}% \dtladd{\DTLbarchartwidth}{\dtl@tmpi}{\dtl@tmpii} \begin{tikzpicture} \ifDTLverticalbars \pgfsetyvec{\pgfpoint{0pt}{\dtl@unit sp}}% \pgfsetxvec{\pgfpoint{\DTLbarwidth}{0pt}}% \else \pgfsetxvec{\pgfpoint{\dtl@unit sp}{0pt}}% \pgfsetyvec{\pgfpoint{0pt}{\DTLbarwidth}}% \fi \DTLbaratbegintikz \def\@dtl@start{0}% \@sDTLforeach[#1]{#3}{#4}{% \@dtl@barcount = 1\relax \let\dtl@multibar@labels=\dtl@multibarlabels \let\dtl@uppermultibar@labels=\dtl@uppermultibarlabels \dtlmul{\dtl@multimidpt}{\DTLbargroupwidth}{0.5}% \dtladd{\dtl@multimidpt}{\dtl@multimidpt}{\@dtl@start}% \@for\DTLbarvariable:=\dtlbar@variables\do{% \dtladd{\@dtl@endpt}{\@dtl@start}{1}% \expandafter\DTLconverttodecimal\expandafter {\DTLbarvariable}{\dtl@variable}% \dtl@chopfirst\dtl@multibar@labels\dtl@thisbarlabel\dtl@rest \let\dtl@multibar@labels=\dtl@rest \dtl@chopfirst\dtl@uppermultibar@labels\dtl@thisupperbarlabel\dtl@rest \let\dtl@uppermultibar@labels=\dtl@rest \begin{scope} \expandafter\color\expandafter{\DTLgetbarcolor{\@dtl@barcount}}% \ifDTLverticalbars \fill (\@dtl@start,0) -- (\@dtl@start,\dtl@variable) -- (\@dtl@endpt,\dtl@variable) -- (\@dtl@endpt,0) -- cycle; \else \fill (0,\@dtl@start) -- (\dtl@variable,\@dtl@start) -- (\dtl@variable,\@dtl@endpt) -- (0,\@dtl@endpt) -- cycle; \fi \end{scope} \begin{scope} \ifdim\DTLbaroutlinewidth>0pt \expandafter\color\expandafter{\DTLbaroutlinecolor} \ifDTLverticalbars \draw (\@dtl@start,0) -- (\@dtl@start,\dtl@variable) -- (\@dtl@endpt,\dtl@variable) -- (\@dtl@endpt,0) -- cycle; \else \draw (0,\@dtl@start) -- (\dtl@variable,\@dtl@start) -- (\dtl@variable,\@dtl@endpt) -- (0,\@dtl@endpt) -- cycle; \fi \fi \end{scope} \dtladd{\@dtl@midpt}{\@dtl@start}{0.5}% \ifDTLverticalbars \edef\dtl@textopt{% at={\noexpand\pgfpointadd {\noexpand\pgfpointxy{\@dtl@midpt}{0}} {\noexpand\pgfpoint{0pt}{-\noexpand\DTLbarlabeloffset}}}, \DTLbarXlabelalign }% \edef\DTLstartpt{\noexpand\pgfpointxy{\@dtl@midpt}{0}}% \else \edef\dtl@textopt{% at={\noexpand\pgfpointadd {\noexpand\pgfpointxy{0}{\@dtl@midpt}} {\noexpand\pgfpoint{-\noexpand\DTLbarlabeloffset}{0pt}}}, \DTLbarXlabelalign }% \edef\DTLstartpt{\noexpand\pgfpointxy{0}{\@dtl@midpt}}% \fi \expandafter\pgftext\expandafter[\dtl@textopt]{% \DTLdisplaylowermultibarlabel{\dtl@thisbarlabel}} \ifDTLverticalbars \expandafter\DTLifnumlt\expandafter{\DTLbarvariable}{0} { \edef\dtl@textopt{% at={\noexpand\pgfpointadd {\noexpand\pgfpointxy{\@dtl@midpt}{\dtl@variable}} {\noexpand\pgfpoint{0pt}{-\noexpand\DTLbarlabeloffset}}} }% }{% \edef\dtl@textopt{% at={\noexpand\pgfpointadd {\noexpand\pgfpointxy{\@dtl@midpt}{\dtl@variable}} {\noexpand\pgfpoint{0pt}{\noexpand\DTLbarlabeloffset}}} }% } \edef\DTLendpt{\noexpand\pgfpointxy{\@dtl@midpt}{\dtl@variable}}% \else \expandafter\DTLifnumlt\expandafter{\DTLbarvariable}{0} { \edef\dtl@textopt{right, at={\noexpand\pgfpointadd {\noexpand\pgfpointxy{\dtl@variable}{\@dtl@midpt}} {\noexpand\pgfpoint{-\noexpand\DTLbarlabeloffset}{0pt}}} }% }{% \edef\dtl@textopt{left, at={\noexpand\pgfpointadd {\noexpand\pgfpointxy{\dtl@variable}{\@dtl@midpt}} {\noexpand\pgfpoint{\noexpand\DTLbarlabeloffset}{0pt}}} }% } \edef\DTLendpt{\noexpand\pgfpointxy{\dtl@variable}{\@dtl@midpt}}% \fi \expandafter\pgftext\expandafter[\dtl@textopt]{% \DTLdisplayuppermultibarlabel{\dtl@thisupperbarlabel}} \def\DTLmidpt{\pgfpointlineattime{0.5}{\DTLstartpt}{\DTLendpt}}% \DTLeverybarhook \dtladd{\@dtl@start}{\@dtl@start}{1}% \advance\@dtl@barcount by 1\relax }% \setlength{\dtl@tmplength}{\DTLbarlabeloffset}% \addtolength{\dtl@tmplength}{\dtl@xticlabelheight}% \ifDTLverticalbars \edef\dtl@textopt{% at={\noexpand\pgfpointadd {\noexpand\pgfpointxy{\dtl@multimidpt}{0}} {\noexpand\pgfpoint{0pt}{-\noexpand\dtl@tmplength}}}, \DTLbarXlabelalign }% \else \edef\dtl@textopt{% at={\noexpand\pgfpointadd {\noexpand\pgfpointxy{0}{\dtl@multimidpt}} {\noexpand\pgfpoint{-\noexpand\dtl@tmplength}{0pt}}}, \DTLbarXlabelalign }% \fi \expandafter\pgftext\expandafter[\dtl@textopt]{% \DTLdisplaylowerbarlabel{\dtl@barlabel}} \dtladd{\@dtl@start}{\@dtl@start}{\dtlbar@groupgap}% } \ifDTLbarxaxis \ifDTLverticalbars \expandafter\draw\expandafter[\DTLBarXAxisStyle] (0,0) -- (\DTLbarchartwidth,0); \else \expandafter\draw\expandafter[\DTLBarXAxisStyle] (0,0) -- (0,\DTLbarchartwidth); \fi \fi \ifDTLbaryaxis \ifDTLverticalbars \expandafter\draw\expandafter[\DTLBarYAxisStyle] (0,\DTLnegextent) -- (0,\DTLbarmax); \else \expandafter\draw\expandafter[\DTLBarYAxisStyle] (\DTLnegextent,0) -- (\DTLbarmax,0); \fi \fi \ifx\dtlbar@yticlist\relax \else \@for\dtl@thistick:=\dtlbar@yticlist\do{% \ifDTLverticalbars \pgfpathmoveto{\pgfpointxy{0}{\dtl@thistick}} \pgfpathlineto{ \pgfpointadd{\pgfpointxy{0}{\dtl@thistick}} {\pgfpoint{-\DTLticklength}{0pt}}} \else \pgfpathmoveto{\pgfpointxy{\dtl@thistick}{0}} \pgfpathlineto{ \pgfpointadd{\pgfpointxy{\dtl@thistick}{0}} {\pgfpoint{0pt}{-\DTLticklength}}} \fi \pgfusepath{stroke} \ifx\dtlbar@yticlabels\relax \dtlround{\dtl@thislabel}{\dtl@thistick} {\c@DTLbarroundvar}% \else \dtl@chopfirst\dtlbar@yticlabels\dtl@thislabel\dtl@rest \let\dtlbar@yticlabels=\dtl@rest \fi \ifDTLverticalbars \edef\dtl@textopt{\DTLbarYticklabelalign,% at={\noexpand\pgfpointadd {\noexpand\pgfpointxy{0}{\dtl@thistick}} {\noexpand\pgfpoint{-\noexpand\DTLticklabeloffset}{0pt}}, }}% \else \edef\dtl@textopt{\DTLbarYticklabelalign, at={\noexpand\pgfpointadd {\noexpand\pgfpointxy{\dtl@thistick}{0}} {\noexpand\pgfpoint{0pt}{-\noexpand\DTLticklabeloffset}} }}% \fi \expandafter\pgftext\expandafter[\dtl@textopt]{% \DTLbardisplayYticklabel{\dtl@thislabel}} }% \fi \ifx\dtlbar@ylabel\relax \else \addtolength{\dtl@yticlabelwidth}{\baselineskip}% \setlength{\dtl@tmplength}{0.5\DTLbarchartlength} \ifDTLverticalbars \pgftext[bottom,center,at={\pgfpointadd {\pgfpointxy{0}{\DTLnegextent}}% {\pgfpoint{-\dtl@yticlabelwidth}{\dtl@tmplength}}}, rotate=90]{% \dtlbar@ylabel} \else \pgftext[bottom,center,at={\pgfpointadd {\pgfpointxy{\DTLnegextent}{0}}% {\pgfpoint{\dtl@tmplength}{-\dtl@yticlabelwidth}}}]{% \dtlbar@ylabel} \fi \fi \DTLbaratendtikz \end{tikzpicture} \fi }} \endinput %% %% End of file `databar.sty'.