PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : (Fortschrittsbalken) Package-Testversion



Spindoctor
08-09-2010, 00:40
Hallo!

Diesmal komme ich nicht (nur) mit einer Frage, sondern mit einer Bitte ans Forum.

Ich bin gerade dabei mein erstes LaTeX-Package zu schreiben, und bin jetzt an einem Punkt, wo es so halbwegs macht was es soll.

Sofern das Package (mittels \usepackage{...}) geladen wird, kann der Befehl \progressbar{Zahl zw. 0 und 1} ausgeführt werden. Es wird dann ein entsprechender Fortschrittsbalken im Dokument eingefügt.

Weiters kann man derzeit beim laden des Packages (also bei \usepackage) einen Haufen Optionen definieren, nämlich:


width (Länge des Balken)
heightp (Höhe des Balken (als Anteil der Schriftgröße))
heighta (Höhe des Balken (absolut))
barsubdivisions (Wie viele Ticks im Balken sein sollen (etwa 1 für keine Ticks, 2 für ein Tick bei 50 % usw.)
roundnessp (Radius der abgerundeten Ecke (als Anteil der Höhe))
roundnessa (Radius der abgerundeten Ecke (absolut))
linecolor (Farbe der Umrandung)
tickscolor (Farbe der Ticks)
emptycolor (Farbe für nicht ausgefüllten Bereich)
filledcolor (Farbe für ausgefüllten Bereich)
borderwidth (Breite der Umrandungslinie)
tickswidth (Breite der Ticks)
ticksheight (Höhe der Ticks (als Anteil der Gesamthöhe))

Die Optionen werden mit \usepackage[option1=wert1,option2=wert2]{...} definiert.

Wär schön, wenn der Eine oder die Andere mal Zeit hätte es anzutesten und mir dann die Meinung zu sagen.

Da es mein erstes Package ist, bin ich natürlich auch für Hinweise erfahrenerer Package-SchreiberInnen dankbar.

Hier der Code:

progressbar.sty


%
% ProgressBar
% by Marcel Jira
%

\NeedsTeXFormat{LaTeX2e}

\ProvidesPackage{progressbar}[2010/09/06 v0.1: progressbar]

\newcommand{\progressbarpackagename}{progressbar}
\newcommand{\progressbar@PackageWarning}[1]{\PackageWarning{\progressbarpackagename}{#1}}
\newcommand{\progressbar@LoadFile@IfExist}[1]{%
\IfFileExists{#1.sty}{%
\RequirePackage{#1}%
}{%
\progressbar@PackageWarning{The package #1 does not exist\MessageBreak
but it is required by \progressbarname}%
}
}

\progressbar@LoadFile@IfExist{fp}
\progressbar@LoadFile@IfExist{tikz}
\progressbar@LoadFile@IfExist{kvoptions}

% Get documents font height (in pt)
\newcommand{\BarLineHeightNU}{\f@size}

% KeyVal-Options
% BarWidth
\DeclareStringOption[6em]{width}
% BarHeight (in percent of the fontsize)
\DeclareStringOption[0.75]{heightp}
% BarHeight (absolute)
\FPmul{\BarHeightNU}{\progressbar@heightp}{\BarLin eHeightNU}
\DeclareStringOption[\BarHeightNU pt]{heighta}
% BarSubDivisions
\DeclareStringOption[10]{barsubdivisions}
% BarRoundness (in percent of the height)
\DeclareStringOption[0.15]{roundnessp}
% BarRoundness (absolute)
\FPmul{\BarRoundedCornersNU}{\progressbar@roundnes sp}{\BarHeightNU}
\DeclareStringOption[\BarRoundedCornersNU pt]{roundnessa}
% Style-Options
% BarLineColor
\DeclareStringOption[black]{linecolor}
% BarFillColor-empty
\DeclareStringOption[black!10]{emptycolor}
% BarFillColor-filled
\DeclareStringOption[black!60]{filledcolor}
% BarBorderWidth
\DeclareStringOption[0.8pt]{borderwidth}
% BarTicksWidth
\DeclareStringOption[0.4pt]{tickswidth}
% BarTicksHeight (percentage of the Barheight)
\DeclareStringOption[0.33]{ticksheight}
% BarTicksColor
\DeclareStringOption[black]{tickscolor}

\ProcessKeyvalOptions*

% Convert KeyVal-Options to lengths (if necessary)
\newlength{\BarWidth}
\setlength{\BarWidth}{\progressbar@width}
\newlength{\BarHeight}
\setlength{\BarHeight}{\progressbar@heighta}
\newlength{\BarRoundedCorners}
\setlength{\BarRoundedCorners}{\progressbar@roundn essa}

% Will be important later for calculations
\newcommand{\BarWidthNU}{\strip@pt \BarWidth}
% BarSubDivision
\FPdiv{\BarSubDivisionsWidthANU}{\BarWidthNU}{\pro gressbar@barsubdivisions}
\FPmul{\BarSubDivisionsWidthBNU}{\BarSubDivisionsW idthANU}{2}
\FPsub{\BarSubDivisionsWidthCNU}{\BarWidthNU}{\Bar SubDivisionsWidthANU}

% This length will be used for the realisation of the progressbars
\newlength{\BarPartWidth}

\newcommand{\progressbar}[1]{%
\FPmul{\BarPartWidthNU}{#1}{\BarWidthNU}%
\setlength{\BarPartWidth}{\BarPartWidthNU pt}%
%
\begin{tikzpicture}%
\coordinate (Begin) at (0,0);%
\coordinate (End) at (\BarWidth,\BarHeight);%
\coordinate (Part) at (\BarPartWidth,\BarHeight);%
%
% Rounded Corners
\draw[rounded corners=\BarRoundedCorners,line width=\progressbar@borderwidth,color=\progressbar@ linecolor] (Begin) rectangle (End);%
\clip[rounded corners=\BarRoundedCorners] (Begin) rectangle (End);%
%
% Fill the bar
\fill[fill=\progressbar@emptycolor] (Begin) rectangle (End);%
%
% the full part
\fill[fill=\progressbar@filledcolor] (Begin) rectangle (Part);%
%
% Ticks
\foreach \x in {\BarSubDivisionsWidthANU,\BarSubDivisionsWidthBNU ,...,\BarSubDivisionsWidthCNU}%
\draw[draw=\progressbar@tickscolor,line width=\progressbar@tickswidth] (\x pt,0) -- (\x pt,\BarHeight*\progressbar@ticksheight);%
%
% Rounded Corners again
\draw[rounded corners=\BarRoundedCorners,line width=\progressbar@borderwidth,color=\progressbar@ linecolor] (Begin) rectangle (End);%
\end{tikzpicture}%
}
Vielen Dank!