diff --git a/task/TU_Logo_SW.eps b/task/TU_Logo_SW.eps new file mode 100644 index 0000000000000000000000000000000000000000..e481ed69d67825def5b6ba445a9d89fd38749f7e --- /dev/null +++ b/task/TU_Logo_SW.eps @@ -0,0 +1,274 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: 279 576 535 651 +%%HiResBoundingBox: 279.324219 576.259766 534.520313 650.303516 +%................................................. +%%Creator: AFPL Ghostscript 814 (epswrite) +%%CreationDate: 2004/11/09 12:19:55 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%EndComments +%%BeginProlog +% This copyright applies to everything between here and the %%EndProlog: +% Copyright (C) 2004 artofcode LLC, Benicia, CA. All rights reserved. +%%BeginResource: procset GS_epswrite_2_0_1001 +/GS_epswrite_2_0_1001 80 dict dup begin +/PageSize 2 array def/setpagesize{ PageSize aload pop 3 index eq exch +4 index eq and{ pop pop pop}{ PageSize dup 1 +5 -1 roll put 0 4 -1 roll put dup null eq {false} {dup where} ifelse{ exch get exec} +{ pop/setpagedevice where +{ pop 1 dict dup /PageSize PageSize put setpagedevice} +{ /setpage where{ pop PageSize aload pop pageparams 3 {exch pop} repeat +setpage}if}ifelse}ifelse}ifelse} bind def +/!{bind def}bind def/#{load def}!/N/counttomark # +/rG{3{3 -1 roll 255 div}repeat setrgbcolor}!/G{255 div setgray}!/K{0 G}! +/r6{dup 3 -1 roll rG}!/r5{dup 3 1 roll rG}!/r3{dup rG}! +/w/setlinewidth #/J/setlinecap # +/j/setlinejoin #/M/setmiterlimit #/d/setdash #/i/setflat # +/m/moveto #/l/lineto #/c/rcurveto # +/p{N 2 idiv{N -2 roll rlineto}repeat}! +/P{N 0 gt{N -2 roll moveto p}if}! +/h{p closepath}!/H{P closepath}! +/lx{0 rlineto}!/ly{0 exch rlineto}!/v{0 0 6 2 roll c}!/y{2 copy c}! +/re{4 -2 roll m exch dup lx exch ly neg lx h}! +/^{3 index neg 3 index neg}! +/f{P fill}!/f*{P eofill}!/s{H stroke}!/S{P stroke}! +/q/gsave #/Q/grestore #/rf{re fill}! +/Y{P clip newpath}!/Y*{P eoclip newpath}!/rY{re Y}! +/|={pop exch 4 1 roll 1 array astore cvx 3 array astore cvx exch 1 index def exec}! +/|{exch string readstring |=}! +/+{dup type/nametype eq{2 index 7 add -3 bitshift 2 index mul}if}! +/@/currentfile #/${+ @ |}! +/B{{2 copy string{readstring pop}aload pop 4 array astore cvx +3 1 roll}repeat pop pop true}! +/Ix{[1 0 0 1 11 -2 roll exch neg exch neg]exch}! +/,{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}! +/Ic{exch Ix false 3 colorimage}! +/F{/Columns counttomark 3 add -2 roll/Rows exch/K -1/BlackIs1 true>> +/CCITTFaxDecode filter}!/FX{<</EndOfBlock false F}! +/X{/ASCII85Decode filter}!/@X{@ X}!/&2{2 index 2 index}! +/@F{@ &2<<F}!/@C{@X &2 FX}! +/$X{+ @X |}!/&4{4 index 4 index}!/$F{+ @ &4<<F |}!/$C{+ @X &4 FX |}! +/IC{3 1 roll 10 dict begin 1{/ImageType/Interpolate/Decode/DataSource +/ImageMatrix/BitsPerComponent/Height/Width}{exch def}forall +currentdict end image}! +/~{@ read {pop} if}! +end readonly def +%%EndResource +/pagesave null def +%%EndProlog +%%Page: 1 1 +%%BeginPageSetup +GS_epswrite_2_0_1001 begin +/pagesave save store 197 dict begin +0.1 0.1 scale +%%EndPageSetup +gsave mark +Q q +0 0 250000 250000 re +Y +K +5053.1 6233.98 34.5625 35.2812 re +f* +5147.42 6233.98 34.5625 35.2812 re +f* +4616.78 6031.66 -44.64 87.12 P +19.44 6.48 36 24.48 36 52.56 c +0 33.12 -23.76 61.2 -64.8 61.2 c +-78.48 0 0 -200.88 38.88 0 0 80.64 28.08 0 39.6 -80.64 45.36 0 h +4569.26 6171.34 m +0 -15.84 -11.52 -26.64 -28.08 -26.64 c +-37.44 0 0 53.28 ^ p +16.56 0 28.08 -11.52 28.08 -26.64 c +f* +5205.74 6031.66 -73.44 200.88 -30.24 0 -73.44 -200.88 41.04 0 12.24 36 71.28 0 11.52 -36 +41.04 0 H +5142.38 6100.78 -49.68 0 25.2 72.72 24.48 -72.72 f* +3793.82 6100.78 0 131.76 -38.88 0 0 -130.32 P +0 -23.04 -14.4 -36.72 -35.28 -36.72 c +-20.88 0 -34.56 13.68 -34.56 36.72 c +0 130.32 -38.88 0 0 -131.76 p +0 -42.48 32.4 -70.56 73.44 -70.56 c +41.04 0 74.16 28.08 74.16 70.56 c +f* +3993.26 6031.66 0 200.88 -39.6 0 0 -122.4 -79.2 122.4 -35.28 0 0 -200.88 39.6 0 +0 123.84 79.2 -123.84 35.28 0 f* +4040.06 6031.66 39.6016 200.879 re +f* +4267.58 6232.54 -41.04 0 -40.32 -130.32 -40.32 130.32 -40.32 0 66.24 -200.88 28.8 0 66.96 200.88 f* +4425.26 6032.38 0 34.56 -92.88 0 0 48.96 79.2 0 0 34.56 ^ 0 47.52 +92.88 0 0 34.56 -131.76 0 0 -200.16 ^ f* +4780.22 6091.42 m +0 17.28 -5.04 32.4 -15.84 42.48 c +-7.92 7.92 -19.44 12.96 -38.16 15.12 c +-23.76 3.6 p +-7.92 1.44 -14.4 4.32 -18.72 7.92 c +-3.6 3.6 -5.76 9.36 -5.76 14.4 c +0 13.68 10.08 25.2 30.96 25.2 c +13.68 0 28.8 -1.44 41.04 -13.68 c +25.2 24.48 p +-17.28 16.56 -37.44 23.76 -64.8 23.76 c +-43.2 0 -69.84 -25.2 -69.84 -61.2 c +0 -16.56 4.32 -29.52 14.4 -39.6 c +8.64 -8.64 21.6 -13.68 38.88 -16.56 c +23.76 -3.6 p +9.36 -1.44 14.4 -2.88 18 -6.48 c +4.32 -4.32 6.48 -10.08 6.48 -17.28 c +0 -15.84 -12.96 -24.48 -36 -24.48 c +-18 0 -35.28 4.32 -48.24 16.56 c +-25.2 -25.2 p +19.44 -20.16 42.48 -26.64 73.44 -26.64 c +41.76 0 74.16 22.32 74.16 61.2 c +f* +4818.38 6031.66 38.8789 200.879 re +f* +5035.1 6197.98 0 34.56 -144 0 ^ 52.56 0 0 -165.6 38.88 0 ^ +52.56 0 f* +5343.98 6197.98 0 34.56 -144 0 ^ 52.56 0 0 -166.32 38.88 0 ^ +52.56 0 f* +3791.66 5866.05 m +0 30.24 2.88 57.6 -20.16 79.92 c +-12.96 13.68 -31.68 19.44 -52.56 19.44 c +-72.72 0 0 -200.88 ^ p +20.88 0 39.6 5.76 52.56 19.44 c +23.04 22.32 20.16 51.84 20.16 82.08 c +h +3752.78 5866.05 m +0 -30.96 -1.44 -45.36 -8.64 -54 c +-6.48 -7.92 -15.84 -12.24 -28.8 -12.24 c +-29.52 0 0 130.32 ^ p +12.96 0 22.32 -4.32 28.8 -12.24 c +7.2 -8.64 8.64 -21.6 8.64 -51.84 c +f* +3985.34 5764.54 -44.64 86.4 P +19.44 7.2 36.72 24.48 36.72 52.56 c +0 33.84 -24.48 61.92 -65.52 61.92 c +-78.48 0 0 -200.88 38.88 0 0 79.92 28.8 0 38.88 -79.92 45.36 0 h +3937.82 5903.5 m +0 -15.12 -10.8 -25.92 -28.08 -25.92 c +-37.44 0 0 52.56 ^ p +17.28 0 28.08 -10.8 28.08 -26.64 c +f* +4151.66 5764.54 0 35.28 -93.6 0 0 48.24 79.2 0 0 35.28 ^ 0 46.8 +93.6 0 0 35.28 -132.48 0 0 -200.88 ^ f* +4320.86 5823.58 m +0 18 -5.04 32.4 -15.84 42.48 c +-8.64 7.92 -20.16 12.96 -38.16 15.84 c +-23.76 3.6 p +-7.92 0.72 -14.4 4.32 -18.72 7.92 c +-4.32 3.6 -5.76 9.36 -5.76 14.4 c +0 13.68 10.08 25.2 30.96 25.2 c +12.96 0 28.8 -2.16 41.04 -13.68 c +25.2 24.48 p +-17.28 16.56 -37.44 23.04 -64.8 23.04 c +-43.92 0 -69.84 -25.2 -69.84 -60.48 c +0 -17.28 4.32 -30.24 13.68 -39.6 c +9.36 -8.64 22.32 -14.4 39.6 -16.56 c +23.76 -3.6 p +9.36 -1.44 13.68 -3.6 18 -7.2 c +4.32 -3.6 5.76 -9.36 5.76 -16.56 c +0 -16.56 -12.24 -25.2 -35.28 -25.2 c +-18.72 0 -36 4.32 -48.24 17.28 c +-25.2 -25.2 p +19.44 -20.16 42.48 -26.64 72.72 -26.64 c +42.48 0 74.88 21.6 74.88 60.48 c +f* +4504.46 5866.05 m +0 30.24 2.16 57.6 -20.16 79.92 c +-12.96 13.68 -32.4 19.44 -53.28 19.44 c +-72 0 0 -200.88 ^ p +20.88 0 40.32 5.76 53.28 19.44 c +22.32 22.32 20.16 51.84 20.16 82.08 c +h +4465.58 5866.05 m +0 -30.96 -1.44 -45.36 -8.64 -54 c +-6.48 -7.92 -15.84 -12.24 -29.52 -12.24 c +-29.52 0 0 130.32 ^ p +13.68 0 23.04 -4.32 29.52 -12.24 c +7.2 -8.64 8.64 -21.6 8.64 -51.84 c +f* +4677.98 5764.54 0 35.28 -92.88 0 0 48.24 79.2 0 0 35.28 ^ 0 46.8 +92.88 0 0 35.28 -131.76 0 0 -200.88 ^ f* +4871.66 5764.54 0 200.88 -39.6 0 0 -123.12 -79.2 123.12 -35.28 0 0 -200.88 39.6 0 +0 123.12 79.2 -123.12 35.28 0 f* +3790.22 6465.82 0 34.56 -144 0 ^ 52.56 0 0 -165.6 38.88 0 ^ +52.56 0 f* +3958.7 6300.21 0 34.56 -93.6 0 0 48.96 79.2 0 0 34.56 ^ 0 47.52 +93.6 0 0 34.56 -132.48 0 0 -200.16 ^ f* +4140.86 6361.42 -39.6 0 P +-4.32 -15.84 -14.4 -28.08 -33.84 -28.08 c +-10.8 0 -19.44 3.6 -25.2 10.08 c +-7.92 8.64 -10.08 18 -10.08 56.88 c +0 38.88 2.16 48.24 10.08 56.88 c +5.76 6.48 14.4 10.08 25.2 10.08 c +19.44 0 29.52 -12.24 33.84 -28.08 c +39.6 0 p +-7.2 41.76 -36.72 63.36 -74.16 63.36 c +-21.6 0 -39.6 -7.92 -54 -22.32 c +-20.16 -20.16 -19.44 -45.36 -19.44 -79.92 c +0 -34.56 -0.72 -59.76 19.44 -79.92 c +14.4 -14.4 32.4 -22.32 54 -22.32 c +37.44 0 66.96 21.6 74.16 63.36 c +f* +4323.74 6300.21 0 200.16 -38.88 0 0 -82.08 -68.4 0 ^ -38.88 0 0 -200.16 +^ 0 83.52 68.4 0 ^ 38.88 0 f* +4527.5 6300.21 0 200.16 -38.88 0 0 -122.4 -79.92 122.4 -34.56 0 0 -200.16 38.88 0 +0 123.12 79.92 -123.12 34.56 0 f* +4577.9 6300.21 38.8789 200.16 re +f* +4796.78 6359.26 m +0 17.28 -5.04 32.4 -15.84 42.48 c +-7.92 7.92 -19.44 12.96 -38.16 15.12 c +-23.76 3.6 p +-7.92 1.44 -14.4 4.32 -18.72 7.92 c +-3.6 4.32 -5.76 9.36 -5.76 14.4 c +0 13.68 10.08 25.2 30.96 25.2 c +13.68 0 28.8 -1.44 41.04 -13.68 c +25.2 24.48 p +-17.28 16.56 -37.44 23.76 -64.8 23.76 c +-43.2 0 -69.84 -25.2 -69.84 -61.2 c +0 -16.56 4.32 -29.52 14.4 -39.6 c +8.64 -8.64 21.6 -13.68 38.88 -16.56 c +23.76 -3.6 p +9.36 -1.44 14.4 -2.88 18 -6.48 c +4.32 -4.32 6.48 -10.08 6.48 -17.28 c +0 -15.84 -12.96 -24.48 -36 -24.48 c +-18 0 -35.28 4.32 -48.24 16.56 c +-25.2 -25.2 p +19.44 -20.16 42.48 -26.64 73.44 -26.64 c +41.76 0 74.16 22.32 74.16 61.2 c +f* +4978.22 6361.42 -39.6 0 P +-3.6 -15.84 -14.4 -28.08 -33.84 -28.08 c +-10.8 0 -19.44 3.6 -25.2 10.08 c +-7.2 8.64 -9.36 18 -9.36 56.88 c +0 38.88 2.16 48.24 9.36 56.88 c +5.76 6.48 14.4 10.08 25.2 10.08 c +19.44 0 30.24 -12.24 33.84 -28.08 c +39.6 0 p +-7.2 41.76 -36 63.36 -73.44 63.36 c +-22.32 0 -40.32 -7.92 -54.72 -22.32 c +-20.16 -20.16 -19.44 -45.36 -19.44 -79.92 c +0 -34.56 -0.72 -59.76 19.44 -79.92 c +14.4 -14.4 32.4 -22.32 54.72 -22.32 c +36.72 0 66.24 21.6 73.44 63.36 c +f* +5161.1 6300.21 0 200.16 -38.88 0 0 -82.08 -67.68 0 ^ -39.6 0 0 -200.16 +^ 0 83.52 67.68 0 ^ 38.88 0 f* +5344.7 6300.21 0 34.56 -93.6 0 0 48.96 79.2 0 0 34.56 ^ 0 47.52 +93.6 0 0 34.56 -132.48 0 0 -200.16 ^ f* +2838.38 6210.21 200.88 0 0 -234 245.52 0 ^ 200.16 0 0 -205.2 -195.84 -195.84 +-254.88 0 -195.84 195.84 0 205.2 H +3463.34 6187.9 -156.24 0 0 -234 -290.16 0 ^ -156.24 0 0 -174.24 182.88 -182.16 +236.88 0 182.16 182.16 0.72 174.24 H +3459.02 6254.86 -178.56 178.56 -236.88 0 -178.56 -178.56 218.88 0 0 -234 156.24 0 ^ +218.88 0 H +3484.94 6232.54 -222.48 0 0 -234 -200.88 0 ^ -223.2 0 0 27.36 195.84 195.84 +254.88 0 195.84 -195.84 0 -27.36 H +2793.74 6277.18 0 -289.44 223.2 -223.2 290.16 0 222.48 223.2 0 289.44 -222.48 223.2 -290.16 0 +-223.2 -223.2 H +2816.06 6268.54 0 -272.16 209.52 -209.52 272.16 0 209.52 209.52 0 272.16 -209.52 209.52 -272.16 0 +-209.52 -209.52 f* +cleartomark end end pagesave restore showpage +%%PageTrailer +%%Trailer +%%Pages: 1 diff --git a/task/TU_Logo_SW.pdf b/task/TU_Logo_SW.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c86e48d5b49d87e36f43b59e2a49ef959bfc4c7a Binary files /dev/null and b/task/TU_Logo_SW.pdf differ diff --git a/task/dineros-task-1.pdf b/task/dineros-task-1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..439c710d60cbc01939347dce8cdc2c972c5e8517 Binary files /dev/null and b/task/dineros-task-1.pdf differ diff --git a/task/dineros-task-1.tex b/task/dineros-task-1.tex new file mode 100644 index 0000000000000000000000000000000000000000..ff1a4734875de5386684fed6da528aac30ae3d9e --- /dev/null +++ b/task/dineros-task-1.tex @@ -0,0 +1,81 @@ +\documentclass{tudform} + +\usepackage[utf8]{inputenc} +\usepackage[ngerman]{babel} +\usepackage[colorlinks,urlcolor=blue]{hyperref} +\usepackage{tudpre} +\usepackage{listings} +\usepackage{xcolor} + +\lstset{ + basicstyle=\ttfamily, + breaklines=true, + keywordstyle=\color{blue}, + commentstyle=\color{gray}, + stringstyle=\color{red}, + showstringspaces=false, +} + +\subject{Wintersemester 2024/25 - SE for Self-Adaptive Systems and Cobotics\newline\newline\textbf{Kursverantwortlicher: Dr. Sebastian Götz}\newline\textbf{Übungsleiter: Dipl.-Inf. Sebastian Ebert}\newline \newline \Large{\textit{Distributed Petri Nets to ROS I}} } + +\begin{document} + +\section{Installation} + +\begin{itemize} + \item Install Ubuntu 22.04 (virtual machine or directly on a computer). + \item Clone the repository containing models and tools for the exercise: \\ + \url{https://git-st.inf.tu-dresden.de/dineros/framework/sesac-exercise.git} + \item Clone the Petri net editors repository and follow the installation instruction of its readme \\ + \url{https://git-st.inf.tu-dresden.de/dineros/framework/pnml-petri-net-editor.git} +\end{itemize} + +\section{Modeling an Example} + +Sorting is a key application for industrial tasks. In the following we want to sort red, green and blue objects by two robots into three accordingly colored bins. +The \textit{LeftRobot} sorts red and blue objects, while the \textit{RightRobot} sorts green objects. +Design a DiNeROS model, where each of the following components is a ROS node. +The \textit{SELECTOR}-component represents handling of user input, which is about creating selection tasks for objects to be sorted and implicitly the robot executing the sorting operation. +The selections are sent to the \textit{CONTROLLER}-component containing one robot controller for each robot, assigned to colors of objects by the connected topic. +These robot controllers represent the central workflow that describes the steps to sort an +object and coordinates the other components. +The controller component is connected to the \textit{SYNCHRONIZER} component, which acts as a semaphore for the shared workspace of the two robots. +The \textit{FEEDBACK} component receives the results of a sorting operation based on the subscription to the feedback topic and displays the received information within a user interface. + +Finally, flatten and convert the model to \texttt{.net} format using DiNeROS. + +\section{Checking for Dead Transitions} + +In the following we use the example model from the \textit{models}-folder: + +\begin{enumerate} + \item Flatten the default model using DiNeROS tooling + \item Generate the statespace of the model. + \item Explore the generated statespace using the \textit{nd}-tool if \textit{TINA} + \item Flatten the signal model using DiNeROS tooling + \item Generate the statespace, check for dead transitions and explain their occurrence. +\end{enumerate} + +\section{Workflow Analysis} + +In the following we again use (1) the example model (default) and (2) the overflowing model to query some more advanced properties: + +\begin{enumerate} + \item Check if there is a state where all objects sorted + \item Get the paths to all states where all object are sorted and check if both robots acutally picked + \item Check if there are potentially overflowing topic channels using overflowing net model +\end{enumerate} + +\section{Optimization} + +Growing Petri nets cause even more growing statespaces. In the following we analyze potential optimizations. + +\begin{enumerate} + \item Compress the default model by using the \textit{reduce} tooling of TINA and generate the statespace of both models. + \item What model parts are removed by \textit{reduce}? + \item Why are especially signals removed and what does this mean for the analyzability of the statespace? +\end{enumerate} + +\vspace{1cm} +Stand: \today +\end{document} diff --git a/task/dineros-task-2.pdf b/task/dineros-task-2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2b3c14dc9c10fc08a602a4a60aa4777bd0c5cbb3 Binary files /dev/null and b/task/dineros-task-2.pdf differ diff --git a/task/dineros-task-2.tex b/task/dineros-task-2.tex new file mode 100644 index 0000000000000000000000000000000000000000..8babda96bf92e0ee50d9601e90e1624d34ebf328 --- /dev/null +++ b/task/dineros-task-2.tex @@ -0,0 +1,62 @@ +\documentclass{tudform} + +\usepackage[utf8]{inputenc} +\usepackage[ngerman]{babel} +\usepackage[colorlinks,urlcolor=blue]{hyperref} +\usepackage{tudpre} +\usepackage{listings} +\usepackage{xcolor} + +\lstset{ + basicstyle=\ttfamily, + breaklines=true, + keywordstyle=\color{blue}, + commentstyle=\color{gray}, + stringstyle=\color{red}, + showstringspaces=false, +} + +\subject{Wintersemester 2024/25 - SE for Self-Adaptive Systems and Cobotics\newline\newline\textbf{Kursverantwortlicher: Dr. Sebastian Götz}\newline\textbf{Übungsleiter: Dipl.-Inf. Sebastian Ebert}\newline \newline \Large{\textit{Distributed Petri Nets to ROS II}} } + +\begin{document} + + \section{Installation} + + \begin{itemize} + \item Install Ubuntu 22.04 (virtual machine or directly on a computer). + \item Install Java 11, Gradle 8 \& IntelliJ (Ultimate is for free for students) + \item Clone the repository containing the project and switch to the \texttt{sesac-exercise}-branch: \\ + \url{https://git-st.inf.tu-dresden.de/dineros/framework/robotic-sorting.git} + \item Install JupyterLab via \url{https://jupyter.org/install} + \end{itemize} + +\section{Running the Application} + +In the following DiNeROS application contained in the cloned project is executed and spectated. The selector webapp within the exercises repository allows you to manipulate signals and select objects. + +\begin{itemize} + \item Open the project in IntelliJ and execute the build task for all nodes + \item Run ROS 1 using the repository contained docker image. + \item Run the applications nodes, manipulate signals and sort at least one object +\end{itemize} + +\section{Extending the Application} + +In this task the tokens will be extended by additional features. The final part of this tasks requires a sensor mocking script. This script is contained in the exercises repository. + +\begin{itemize} + \item Extend the tokens with information about the robot which pick the object and write this information into feedback nodes log. Explain why this data is not always reflected on the end + \item Extend the tokens with information about the time needed to successfully pick an object (if so) and ensure that this data is always contained in the log + \item Extend the sensor component by extending its handlers and creating an MQTT binding reading a mock sensors data +\end{itemize} + +\section{Visualization} + +\begin{itemize} + \item Create a runtime trace using the tracing feature of the DiNeROS engine, by running the \textit{TracingNode} + \item Visualize the trace as timeline using the \textit{TraceVisualizer}. This tool is provided as a Jupyter file. +\end{itemize} + + \vspace{1cm} + Stand: \today +\end{document} diff --git a/task/tudform.cls b/task/tudform.cls new file mode 100644 index 0000000000000000000000000000000000000000..32277d00c92bd46bc987f3f995f67330b8a1ca15 --- /dev/null +++ b/task/tudform.cls @@ -0,0 +1,176 @@ +% +% Formular-Klasse fuer die TU Dresden +% Autor: Klaus Bergmann +% +\def\fileversion{1.0} +\def\filedate{2005/11/20 } +\def\filename{tudform} + +\NeedsTeXFormat{LaTeX2e} \ProvidesClass{\filename}[\filedate Formular-Klasse fuer die TU Dresden, (c) by Klaus Bergmann] +\typeout{Class: '\filename' Version \fileversion, Formularvorlage der Technischen Universitaet Dresden} + +\makeatletter + +\newif\if@logo +\DeclareOption{logo}{\@logotrue} + +% Papierformate <> A4 werden abgefangen, weil das Formular immer in A4 gedruckt wird +\DeclareOption{a5paper}{}\DeclareOption{b5paper}{}\DeclareOption{letterpaper}{}\DeclareOption{legalpaper}{}\DeclareOption{executivepaper}{} + +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} +\ProcessOptions\relax +\LoadClass[a4paper]{article} + +\RequirePackage{graphicx} +\RequirePackage{ifthen} + +% Schriftspezifische Definitionen +\DeclareFixedFont{\univLightIX}{OT1}{cmr}{l}{n}{9} +\DeclareFixedFont{\univBoldIX}{OT1}{cmr}{b}{n}{9} +\DeclareFixedFont{\univLightXI}{OT1}{cmr}{l}{n}{11} +\DeclareFixedFont{\univLightObliqueXI}{OT1}{cmr}{l}{sl}{11} +\DeclareFixedFont{\univBoldXI}{OT1}{cmr}{b}{n}{11} + +%\renewcommand*{\familydefault}{cmr} +%\renewcommand*{\seriesdefault}{l} +%\renewcommand*{\shapedefault}{n} +%\renewcommand*{\sfdefault}{cmr} +%\renewcommand*{\sffamily}{\fontfamily{cmr}\selectfont} +%\renewcommand*{\ttfamily}{\fontfamily{\ttdefault}\fontseries{\mddefault}\selectfont} + +% Vom Nutzer anzugebende / veraenderbare Namen und Bezeichnungen +\newcommand*{\@subject}{} +\newcommand*{\@einrichtung}{} +\newcommand*{\@fachrichtung}{} +\newcommand*{\@institut}{} +\newcommand*{\@professur}{} + +\newcommand*{\subject}[1]{\renewcommand*{\@subject}{#1}} +\newcommand*{\einrichtung}[1]{\renewcommand*{\@einrichtung}{#1}} +\newcommand*{\fachrichtung}[1]{\renewcommand*{\@fachrichtung}{#1}} +\newcommand*{\institut}[1]{\renewcommand*{\@institut}{#1}} +\newcommand*{\professur}[1]{\renewcommand*{\@professur}{#1}} + +% Dimensionen +\if@logo + \setlength{\textheight}{216mm} +\else + \setlength{\textheight}{238mm} +\fi +\setlength{\topmargin}{30mm} +\addtolength{\topmargin}{-1in} +\setlength{\headheight}{0mm} +\setlength{\headsep}{0mm} +\setlength{\topskip}{0mm} +\setlength{\footskip}{17mm} + +\setlength{\textwidth}{160mm} +\setlength{\oddsidemargin}{30mm} +\addtolength{\oddsidemargin}{-1in} +\setlength{\evensidemargin}{\oddsidemargin} + +\newcommand{\@br}[1][1]{\par\vspace{#1\baselineskip}} + +% erste Seite +\newcommand*{\@@dummyComma}{}% + +\newcommand{\ps@firstpage}{% + % Ränder + \setlength{\topmargin}{-1in} % <= keinen Rand nach oben + \setlength{\headheight}{40mm} % 40mm + \setlength{\headsep}{12mm} % 52mm + \setlength{\topskip}{0mm} % 52mm + \setlength{\textheight}{216mm} + %\setlength{\footskip}{-7mm} + % Logo und Querbalken + \renewcommand{\@oddhead}{% + \newif\if@@profnewline%\@@profnewlinefalse% + \newif\if@@instnewline%\@@instnewlinefalse% + \settowidth{\dimen255}{\univBoldIX\@einrichtung\ \univLightIX\@fachrichtung, \@institut, \@professur}% + \ifdim\dimen255 > 160mm\relax% + \@@profnewlinetrue% + \settowidth{\dimen255}{\univBoldIX\@einrichtung\ \univLightIX\@fachrichtung, \@institut}% + \ifdim\dimen255 > 160mm\relax% + \@@instnewlinetrue% + \@@profnewlinefalse% + \fi% + \fi% + \newif\if@@nonewline% + \if@@instnewline\else\if@@profnewline\else\@@nonewlinetrue\fi\fi% + \setlength{\tabcolsep}{0mm}% + \setlength{\arrayrulewidth}{0.5pt}% + \newsavebox{\@@professurComma}% + \sbox{\@@professurComma}{% + \renewcommand*{\@@dummyComma}{}% + \ifx\@fachrichtung\@empty\else\renewcommand*{\@@dummyComma}{, }\fi % Fachrichtung vorhanden -> Komma + \ifx\@institut\@empty\else\renewcommand*{\@@dummyComma}{, }\fi % Institut vorhanden -> Komma + \ifx\@professur\@empty\renewcommand*{\@@dummyComma}{}\fi % keine Professur vorhanden -> kein Komma + \if@@profnewline\renewcommand*{\@@dummyComma}{}\fi % Professur in neue Zeile -> kein Komma + \@@dummyComma% + }% + \begin{tabular*}{160mm}[b]{l@{\extracolsep\fill}} + % TUD-Logo + \hspace*{-19mm}\includegraphics[width=57mm]{TU_Logo_SW}\\[3.75mm]\hline% + % Einrichtungsname + \rule[-1.2mm]{0mm}{13pt}\univBoldIX\@einrichtung% + \ifx\@einrichtung\@empty\ClassWarningNoLine{\filename}{Es wurde keine Einrichtung angegeben}\fi% + % Fachrichtungsname + \ifx\@fachrichtung\@empty\else\ \univLightIX\@fachrichtung\fi% + % Komma vor Institutsname (bei Bedarf) + \renewcommand*{\@@dummyComma}{}% + \ifx\@institut\@empty\else\renewcommand*{\@@dummyComma}{, }\fi % Institut vorhanden -> Komma + \ifx\@fachrichtung\@empty\renewcommand*{\@@dummyComma}{ }\fi % keine Fachrichtung vorhanden -> kein Komma + \if@@instnewline\renewcommand*{\@@dummyComma}{}\fi % Institut in neue Zeile -> kein Komma + \@@dummyComma% + % Institut + \if@@instnewline\\\hline\fi% + \if@@instnewline\else\ifx\@institut\@empty\else\univLightIX\@institut\fi\fi% + % Komma vor Professur (bei Bedarf) + \if@@profnewline\else\if@@instnewline\else\usebox{\@@professurComma}\fi\fi% + % Professur + \if@@profnewline\\\hline\fi% + \if@@nonewline\ifx\@professur\empty\else\univLightIX\@professur\fi\fi% + \if@@instnewline\else\if@@profnewline\else\\\hline\fi\fi% + \end{tabular*}\hspace{-160mm}% + \parbox[t][0pt]{160mm}{\vspace{0.25\baselineskip}\mbox{% + \if@@instnewline\ifx\@institut\@empty\else\univLightIX\@institut\fi\usebox{\@@professurComma}\fi% + \if@@nonewline\else\ifx\@professur\empty\else\univLightIX\@professur\fi\fi% + }}% + }% + \if@logo\let\@evenhead=\@ddhead\else\renewcommand{\@evenhead}{}\fi% + \renewcommand*{\@oddfoot}{% + \if@logo% + \univLightIX\hfill\arabic{page}% + \else% + \parbox[b][22mm][b]{160mm}{\univLightIX\hfill\arabic{page}\\[22mm]}% + \fi% + }% + \let\@evenfoot=\@oddfoot% +} + +% restliche Seiten +\if@logo% + \let\ps@plain=\ps@firstpage% +\else% + \renewcommand{\ps@plain}{% + \renewcommand*{\@oddfoot}{\univLightIX\hfill\arabic{page}}% + \let\@evenfoot=\@oddfoot% + \renewcommand{\@oddhead}{}\renewcommand{\@evenhead}{}% + }% +\fi +\pagestyle{plain} + +\AtBeginDocument{% + \setlength{\parskip}{0mm}% + \setlength{\parindent}{0mm}% + \if@logo\else\enlargethispage{-22mm}\fi% + \thispagestyle{firstpage}% + % Lochmarke + \parbox[t][0pt][t]{0pt}{\vspace*{92.9mm}\hspace*{-19mm}\rule{5mm}{0.5pt}}% + % Betreff + %\raggedright + \setlength{\baselineskip}{14pt plus1pt minus1pt}% + \ifx\@subject\@empty\else\textbf{\@subject}\@br\fi% +} + +\makeatother diff --git a/task/tudpre.sty b/task/tudpre.sty new file mode 100644 index 0000000000000000000000000000000000000000..18e04f7e52a984d53db89f1f7dd6cb63f0e1ff00 --- /dev/null +++ b/task/tudpre.sty @@ -0,0 +1,70 @@ +\ProvidesPackage{tudpre.sty}[2005/11/20] % Beginn des Ergaenzungspakets + +% Querbalken +\ifx\einrichtung\undefined\else + + \einrichtung{Fakultät Informatik,} + \institut{Institut für Software- und Multimediatechnik} + \professur{Lehrstuhl für Softwaretechnologie} + +\fi + + +% Kopf +\ifx\bearbeiter\undefined + + \ifx\name\undefined\else + + \name{Florian Heidenreich} % Telefax, Hausmitteilung + + \fi + +\else + + \bearbeiter{Florian Heidenreich} % nur Brief + +\fi + +\ifx\email\undefined\else + + % Brief, Telefax, Hausmitteilung + \telefon{38311} + \telefax{38459} + \email{florian.heidenreich@inf.tu-dresden.de} + +\fi + +\ifx\leitername\undefined\else + + % nur Brief + \leitername{Uwe Aßmann} + \leitertitel{Prof. Dr. rer. nat. habil.} + \leiterfunktion{Vorsitzender} + +\fi + +\ifx\logo\undefined\else + + \logo{st-logo} % Brief, Telefax, Hausmitteilung + +\fi + +\ifx\internet\undefined\else + + \internet{http://st.inf.tu-dresden.de} % Brief, Telefax, Hausmitteilung + +\fi + + +% Fusszeile (fuer Briefe und Faxe) +\ifx\besucheradrA\undefined\else + \besucheradrA{Sekretariat Zi. 2086} + \besucheradrB{Nöthnitzer Straße 46} + \besucheradrC{01187 Dresden} + + \rollstuhladresse{Nöthnitzer Straße 46} + \rollstuhlanmerkungen{Aufzug} + +\fi + +\endinput % Ende des Ergaenzungspakets