diff options
author | Norbert Preining <preining@logic.at> | 2011-11-22 23:48:45 +0000 |
---|---|---|
committer | Norbert Preining <preining@logic.at> | 2011-11-22 23:48:45 +0000 |
commit | b39338a5f1024304ab706fb8d4d59cfc24ba4b8a (patch) | |
tree | a648f6302e967241a673add34e3452a76aec8f5f /Master/texmf-dist/tex/latex/bchart | |
parent | 9ee660a19b64751c9ae8fbd81340f4b99ae9dd15 (diff) |
new package bchart (2011-11-22)
git-svn-id: svn://tug.org/texlive/trunk@24637 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/bchart')
-rw-r--r-- | Master/texmf-dist/tex/latex/bchart/bchart.sty | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/bchart/bchart.sty b/Master/texmf-dist/tex/latex/bchart/bchart.sty new file mode 100644 index 00000000000..36851c4763f --- /dev/null +++ b/Master/texmf-dist/tex/latex/bchart/bchart.sty @@ -0,0 +1,171 @@ +%------------------------------------------------------------------------------- +% bchart (LaTeX package) +%------------------------------------------------------------------------------- +% Version: 0.1.0 +% Date: 22 November 2011 +% Author: Tobias Kuhn +%------------------------------------------------------------------------------- + +\ProvidesPackage{bchart} + +\usepackage{ifthen} +\usepackage{tikz} +\usetikzlibrary{calc} + + +% Lengths + +\newlength{\bcpos} +\newlength{\bcwidth} + + +% Chart Arguments + +\newcommand{\bcunit}{} +\newcommand{\bcmin}{} +\newcommand{\bcmax}{} +\newcommand{\bcstep}{} +\newcommand{\bcsteps}{} +\newcommand{\bcscale}{} +\newcommand{\bcplainchart}{} +\makeatletter +\define@key{bchart}{unit}{\renewcommand{\bcunit}{#1}} +\define@key{bchart}{width}{\setlength{\bcwidth}{#1}} +\define@key{bchart}{min}{\renewcommand{\bcmin}{#1}} +\define@key{bchart}{max}{\renewcommand{\bcmax}{#1}} +\define@key{bchart}{step}{\renewcommand{\bcstep}{#1}} +\define@key{bchart}{steps}{\renewcommand{\bcsteps}{#1}} +\define@key{bchart}{scale}{\renewcommand{\bcscale}{#1}} +\define@key{bchart}{plain}[false]{\renewcommand{\bcplainchart}{true}} +\makeatother + + +% Bar Arguments + +\newcommand{\bcbarcolor}{} +\newcommand{\bcbartext}{} +\newcommand{\bcbarlabel}{} +\newcommand{\bcplainbar}{} +\makeatletter +\define@key{bcbar}{color}{\renewcommand{\bcbarcolor}{#1}} +\define@key{bcbar}{text}{\renewcommand{\bcbartext}{#1}} +\define@key{bcbar}{label}{\renewcommand{\bcbarlabel}{#1}} +\define@key{bcbar}{plain}[false]{\renewcommand{\bcplainbar}{true}} +\makeatother + + +% Skip Arguments + +\newcommand{\bcskiplabel}{} +\makeatletter +\define@key{bcskip}{label}{\renewcommand{\bcskiplabel}{#1}} +\makeatother + + +% Bar Charts + +\newenvironment{bchart}[1][]{% + % Bars: + \newcommand{\bcbar}[2][]{ + % Set defaults: + \renewcommand{\bcbarcolor}{blue!20} + \renewcommand{\bcbartext}{} + \renewcommand{\bcbarlabel}{} + \renewcommand{\bcplainbar}{false} + % Read parameters: + \setkeys{bcbar}{##1} + % Draw bar: + \fill[color=\bcbarcolor,fill,draw] (0,\bcpos) rectangle ($##2-\bcmin*(\bcwidth/\bcrange,0) + (0,\bcpos-5mm)$); + \draw (0,\bcpos) rectangle ($##2-\bcmin*(\bcwidth/\bcrange,0) + (0,\bcpos-5mm)$); + \ifthenelse{\equal{\bcplainbar}{true}}{}{ + % Write value: + \node[anchor=west] at ($##2-\bcmin*(\bcwidth/\bcrange,0) + (0,\bcpos-2.5mm)$) {\sf ##2\bcunit}; + } + % Write text: + \node[anchor=west] at (0,\bcpos-2.5mm) {\sf \bcbartext}; + % Write label: + \node[anchor=east] at (0,\bcpos-2.5mm) {\sf \bcbarlabel}; + % Move vertical position downward: + \addtolength{\bcpos}{-5mm} + }% + % Labels: + \newcommand{\bclabel}[1]{ + % Write label: + \node[anchor=east] at (0,\bcpos) {\sf ##1}; + }% + % General skips: + \newcommand{\bcskip}[2][]{ + % Set defaults: + \renewcommand{\bcskiplabel}{} + % Read parameters: + \setkeys{bcskip}{##1} + % Write label: + \node[anchor=east] at ($(0,\bcpos) - 0.5*(0,##2)$) {\sf \bcskiplabel}; + % Move vertical position downward: + \addtolength{\bcpos}{-##2} + }% + % Small skips: + \renewcommand{\smallskip}[1][]{\bcskip[##1]{2.5mm}}% + % Medium skips: + \renewcommand{\medskip}[1][]{\bcskip[##1]{5.0mm}}% + % Large skips: + \renewcommand{\bigskip}[1][]{\bcskip[##1]{7.5mm}}% + % X-axis label: + \newcommand{\getbcxlabel}{}% + \newcommand{\bcxlabel}[1]{ + \renewcommand{\getbcxlabel}{##1} + }% + \newcommand{\bcrange}{\bcstripunit{\dimexpr\bcmax pt-\bcmin pt\relax}} + % Set defaults: + \renewcommand{\bcunit}{}% + \renewcommand{\bcmin}{0}% + \renewcommand{\bcmax}{100}% + \renewcommand{\bcstep}{\bcrange}% + \renewcommand{\bcsteps}{0,\bcstep,...,\bcrange}% + \renewcommand{\bcscale}{1}% + \renewcommand{\bcplainchart}{false}% + \setlength{\bcpos}{-2.5mm}% + \setlength{\bcwidth}{8cm}% + % Read parameters: + \setkeys{bchart}{#1}% + % Draw chart: + \begin{tikzpicture}[scale=\bcscale] +}{ + % Draw axes: + \addtolength{\bcpos}{-2.5mm} + \draw (0,\bcpos) -- (\bcwidth,\bcpos); + \draw (0,0) -- (0,\bcpos); + % Draw scale: + \ifthenelse{\equal{\bcplainchart}{true}} + { % Scale off + % Set position for x-axis label: + \coordinate (labelpos) at (0,\bcpos-2mm); + }{ % Scale on + % Draw start value and set position for x-axis label: + \draw (0,\bcpos) -- (0,\bcpos-1mm); + \node[anchor=north] (n) at (0,\bcpos-1mm) + {\sf \bcstripunit{\dimexpr\bcmin pt\relax}\bcunit}; + \coordinate (labelpos) at (n.south); + % Draw other values: + \foreach \x in \bcsteps { + \ifthenelse{\equal{\x}{0}}{}{ + \draw ($\x*(\bcwidth/\bcrange,0) + (0,\bcpos)$) -- ($\x*(\bcwidth/\bcrange,0) + (0,\bcpos-1mm)$); + \node[anchor=north] at ($\x*(\bcwidth/\bcrange,0) + (0,\bcpos-1mm)$) + {\sf \bcstripunit{\dimexpr\bcmin pt+\x pt\relax}\bcunit}; + } + } + } + % Write x-axis label: + \ifthenelse{\equal{\getbcxlabel}{}}{}{ + \node[anchor=north,inner sep=0.5mm] at ($0.5*(\bcwidth,0) + (labelpos)$) {\sf \getbcxlabel}; + } + \end{tikzpicture}% +} + + +% Auxiliary commands: + +\makeatletter +\newcommand*{\bcstripunit}[1]{\strip@pt#1} +\makeatother + |