% \iffalse meta-comment % % Copyright (C) 1995 - 2005 Jobst Hoffmann, FH Aachen, Abt. J"ulich % % ------------------------------------------------------------------------------------------- % % This file may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.2 % of this license or (at your option) any later version. % The latest version of this license is in: % % http://www.latex-project.org/lppl.txt % % and version 1.2 or later is part of all distributions of LaTeX % version 1999/12/01 or later. % % \fi % % \iffalse %\NeedsTeXFormat{LaTeX2e}[1999/12/01] %\def\filedate{2005/05/17} %\def\fileversion{v8.0f} %\ProvidesPackage{struktex} % [\filedate\space\fileversion\space Nassi Shneidermann Charts (Jobst Hoffmann)] %\ProvidesPackage{struktxf} % [\filedate\space\fileversion\space Fonts for Nassi Shneidermann Charts (Jobst Hoffmann)] %\ProvidesPackage{struktxp} % [\filedate\space\fileversion\space Keywords for Nassi Shneidermann Charts (Jobst Hoffmann)] % \fi % \CheckSum{2030} % \def\docdate {2005/05/17} ^^A not style'able!! % % \iffalse meta-comment % struktex.dtx $Revision: 7.8 $ % $Date: 2005/06/13 13:22:25 $ % $RCSfile: struktex.dtx,v $ % $Log: struktex.dtx,v $ % Revision 7.8 2005/06/13 13:22:25 ax006ho % - Dokumentation von `case verbessert % - Code bereinigt % - fehlerhafte Umbenennung von `tempx@nss korrigiert % - Tippfehler korrigiert % % Revision 7.7 2005/06/13 13:02:28 ax006ho % - ein paar Tippfehler korrigiert % - Test auf das Arbeiten mit pdfTeX umgestellt (nun unter Benutzung von % ifpdf.sty % % Revision 7.6 2005/01/12 11:16:08 ax006ho % - updated copyright % - some small changes in the documentation (case) % - changed the license remark in the english version % - corrected error with case (height of the separating lines) % - added key words for Python % - added file variables for XEmacs % % Revision 7.5 2004/07/16 10:55:25 ax006ho % - Texte verbessert % - Umschaltung der Sprache nun durch ein Literal % - Ueberschriften fuer die Inhaltsangabe teilweise verkuerzt % - Beispieldatei zum Testen der Fontauswahl verbessert: \obeylines % ist nun gruppenweise gesetzt % - Makefile korrigiert % - Literaturangaben aktualisiert % % Revision 7.4 2004/07/14 12:47:57 ax006ho % - \fileversion und \filedate zur einfacheren zentralen Verwaltung von % Entwicklungsdaten eingefuehrt % - Im Vorwort Hinweis auf pict2e.sty gegeben % - Entwicklungsgeschichte korrigiert und erweitert % - Umstellung der Sprachverwaltung auf babel % - Zeichnung zum Layout der Deklarationen verbessert (\multiput statt n-mal % \put, Korrektur von Bezeichnungen) % - .pdf-Ausgabe eingefuehrt % - Hinweis auf Luxi Mono als Ersatz fuer cmbtt % % Revision 7.3 2004/07/13 10:01:51 ax006ho % - explizites Laden von pict2e % - kleine Korrektur am Makefile % - in der zweiten Beispieldatei wird nun statt curves.sty pict2e.sty geladen % % Revision 7.2 2004/07/13 08:46:04 ax006ho % - an pict2e.sty angepasst % - kleinere Korrekturen an der Dokumentation % % Revision 7.1 2004/07/12 15:32:42 ax006ho % - Anzahl der Z"ahler reduziert % - einige kleinere Korrekturen angebracht % % Revision 7.0.1.1 2004/03/09 10:09:16 ax006ho % - Adresse ge"andert % - Code teilweise umgestellt % - Dateinamen ge"andert % - Tippfehler korrigiert % - Marker f"ur interne Beispiel % - Testrahmen ge"andert % - Beispiele f"ur unterschiedlichen Programmierspracheneinsatz erweitert % - Makefile integriert % - `pLanguage ge"andert: `pLanguage@nss zus"atzlich eingef"uhrt % - Sprachbezeichnungen ge"andert: Suffix @nss % - Erweiterung f"ur die Verifikation von Algorithmen eingef"uhrt % % Revision 7.0 2004/01/04 11:07:13 ax006ho % - Adresse ge"andert % - Code teilweise umgestellt % - Dateinamen ge"andert % - Tippfehler korrigiert % - Marker f"ur interne Beispiel % - Testrahmen ge"andert % - Beispiele f"ur unterschiedlichen Programmierspracheneinsatz erweitert % - Makefile integriert % - `pLanguage ge"andert: `pLanguage@nss zus"atzlich eingef"uhrt % - Sprachbezeichnungen ge"andert: Suffix @nss % % Revision 6.0 2001/05/25 09:33:44 ax006ho % - Dokumentation von `case verbessert % - Makros `cs, `marg, `oarg, `pparg sowie `envb und `enve zur besseren % Dokumentation eingesetzt % - Englische "Ubersetzung der Dokumentation hinzugef"ugt % - Code umgestaltet, z.B. `def \(\rightarrow\) `newcommand, % \$\ldots\$ \(\rightarrow\) `(\ldots`) % - Zus"atzliche Paketoption "`curves"' zur Gestaltung beliebiger Steigungen % eingef"uhrt % % Revision 5.0.4.2 2001/04/22 17:18:25 ax006ho % - Umgebungen zur einfacheren Notation der Dokumentation eingef"uhrt % - Erster Versuch einer gemischtsprachigen Dokumentation % % Revision 5.0.4.1 1999/11/16 20:06:20 Hoffmann % - Neuimplementierung des Setzens von Ausdr"ucken und % (Schluessel-)woertern % % Revision 5.0.3.1 1999/11/16 10:29:27 Hoffmann % - Text in Entscheidungsbloecken wird der Steigung der Linien % entsprechend gesetzt % % Revision 5.0.2.2 1998/05/28 11:59:22 Hoffmann % - Tippfehlerkorrektur: Umlaut "`ue"' durch "`"u"' ersetzt % % Revision 5.0.2.1 1997/12/03 13:03:33 Hoffmann % - Umstellung der Dokumentation, dadurch Verzicht auf eigene Treiberdatei % m"oglich % - kleinere Korrekturen % % Revision 5.0.1.2 1997/11/02 20:11:39 Hoffmann % - Dokumentation umgestellt mittels der Umgebung example sowie der Makros % verbatiminput und verbatimwrite % - Zugehoerige Makros neu, aber noch nicht dokumentiert % % Revision 5.0.1.1 1997/05/13 06:29:22 Hoffmann % kleinere stilistische "Anderungen nach W. Hanrath % % Revision 5.0 1997/04/28 09:46:41 Hoffmann % - Dateinamen zwecks Kompatibilit"at auf Kleinschreibung umgesetzt % - kleinere textuelle "Anderungen, Fontauswahl teilweise ge"andert % - Abh"angigkeiten der Dokumentation von zus"atzlichen Paketen beseitigt % % Revision 4.5 1997/04/28 08:29:29 Hoffmann % Umstellung auf Versionskontrolle mit rcs % %---------------------------------------------------------------------------- % \fi %\iffalse Dies ist ein META-KOMMENTAR % Alles bis zum n"achsten `\ fi' (ohne Leerzeichen) wird % ignoriert. Das ist notwendig, da `%' nicht weiter % Kommentar einleitet, wenn diese Datei eingelesen wird. % % Stil-Option `struktex' zum Gebrauch mit LaTeX2e % Copyright (C) 1995-2004 Jobst Hoffmann, alle Rechte vorbehalten. % % % Das Kopieren dieser Datei ist nur zul"assig, wenn % (1) keinerlei "Anderungen an dieser Datei durchgef"uhrt werden, oder % (2) wenn diese Datei ge"andert wird, sie einen anderen Namen als % struktex.DTX erh"alt. % Diese Einschr"ankung dient dazu, dass alle Stiloptionen identisch bleiben. % % Fehlermeldungen werden erbeten an: Dr. Jobst Hoffmann % Fachhochschule Aachen, Abt. J"ulich % Ginsterweg 1 % 52428 J"ulich % Bundesrepublik Deutschland % Email: % % Achtung: um korrekte Bearbeitung zu erzielen, muss die Umgebung % \begin{macrocode} % ... % \end{macrocode} % immer (mindestens) f"unf Zeichen einger"uckt sein, also in Spalte % sechs beginnen! % % \fi % % \def\StrukTeXSty{\textsf{struktex.sty}} % % \changes{v8.0f}{05/06/11}{Dokumentation von `case verbessert} % \changes{v8.0d}{04/12/29}{`switch zeigt bei geeigneten Beispielen das % rechtsb"undige Setzen von Bedingungen} % \changes{v8.0c}{04/07/15}{Zweisprachigkeit verbessert, Bezeichner statt % Nummern eingef"uhrt} % \changes{v8.0b}{04/07/14}{`fileversion und `filedate zur einfacheren % zentralen Verwaltung von Entwicklungsdaten eingef"uhrt} % \changes{v7.0b}{04/03/09}{Anzahl der Z"ahler reduziert} % \changes{v7.0a}{03/04/21}{Code teilweise umgestellt} % \changes{v7.0a}{03/04/21}{Dateinamen ge"andert} % \changes{v7.0a}{03/04/21}{Tippfehler korrigiert} % \changes{v7.0a}{03/04/21}{Marker f"ur interne Beispiele umbenannt} % \changes{v7.0a}{03/04/21}{Testrahmen ge"andert} % \changes{v7.0a}{03/04/21}{Beispiele f"ur unterschiedlichen Programmierspracheneinsatz erweitert} % \changes{v7.0a}{03/04/21}{Makefile integriert} % \changes{v7.0a}{03/04/21}{`pLanguage ge"andert: `pLanguage@nss zus"atzlich eingef"uhrt} % \changes{v7.0a}{03/04/21}{Sprachbezeichnungen ge"andert: Suffix @nss} % \changes{v7.0}{03/04/21}{Wechsel von der RWTH Aachen zur FH Aachen, Abt. J"ulich} % \changes{v6.0a}{01/04/22}{Dokumentation von `case verbessert} % \changes{v6.0a}{00/12/08}{Makros `cs, `marg, `oarg, `pparg sowie % `envb und `enve zur besseren Dokumentation % eingesetzt} % \changes{v6.0a}{00/11/24}{Englische "Ubersetzung der Dokumentation % hinzugef"ugt} % \changes{v6.0a}{00/11/24}{Code umgestaltet, z.B. `def $\rightarrow$ % `newcommand, \$\ldots\$ $\rightarrow$ `(\ldots`)} % \changes{v6.0a}{00/11/24}{Zus"atzliche Paketoption "`curves"' zur Gestaltung % beliebiger Steigungen eingef"uhrt} % \changes{v5.4b}{00/12/08}{Umgebungen zur einfacheren Notation der % Dokumentation eingef"uhrt} % \changes{v5.4b}{00/12/08}{Erster Versuch einer gemischtsprachigen % Dokumentation} % \changes{v5.4a}{99/11/16}{\textsf{stuktxp.sty} "uberarbeitet zur besseren % Darstellung von Programmen} % \changes{v5.3a}{98/11/27}{Die Form des Textes in Bedingungen ist nun an % beliebige Steigungen angepasst} % \changes{v5.2b}{98/05/28}{Tippfehlerkorrektur: Umlaut "`ue"' durch % "`"u"' ersetzt} % \changes{v5.2a}{97/12/03}{Umstellung der Dokumentation, dadurch Verzicht % auf eigene Treiberdatei m"oglich} % \changes{v5.2a}{97/12/03}{kleinere Korrekturen} % \changes{v5.1b}{97/11/02}{Umstellung der Dokumentation mittels Umgebung % \texttt{example}, `verbatiminput und verbatimwrite} % \changes{v5.1a}{97/04/29}{kleinere stilistische "Anderungen nach W. Hanrath} % \changes{v5.0}{97/04/28}{Dateinamen zwecks Kompatibilit"at auf Kleinschreibung umgesetzt} % \changes{v5.0}{97/04/28}{kleinere textuelle "Anderungen, Fontauswahl teilweise ge"andert} % \changes{v5.0}{97/04/28}{Abh"angigkeiten der Dokumentation von zus"atzlichen Paketen beseitigt} % \changes{v4.5e}{97/04/25}{Verzicht auf Gro"s- und Kleinschreibung im Namen von .sty-Dateien} % \changes{v4.5a}{96/03/14}{Umgebung \texttt{description} auf \texttt{list}-Umgebung zur"uckgef"uhrt} % \changes{v4.5a}{96/03/14}{Eigenes Paket zur Formatierung von Programminhalten integriert} % \changes{v4.1c}{95/07/24}{Dokumentation verbessert} % \changes{v4.1b}{95/07/19}{H"ohe des Bedingungsrechteckes bei `ifthenelse vorgebbar} % \changes{v4.1a}{95/07/17}{Geraden mit beliebiger Steigung durch `emline m"oglich} % \changes{v4.0a}{95/04/12}{Anpassung an LaTeX2e} % \changes{v3.5a}{94/11/22}{Entwicklunglinien J. Dietel, J. Hoffmann vereinigt} % \changes{v3.3a}{94/09/14}{Schnittstellenbeschreibung verallgemeinert} % \changes{v3.2a}{94/09/14}{Dokumentation verbessert} % \changes{v3.1a}{94/09/09}{Verschiedene Erweiterungen} % \changes{v3.0a}{94/06/06}{Urversion mit integrierter Dokumentation} % \changes{v2.5}{93/09/09}{Jobst Hoffmann, Rechenzentrum RWTH Aachen} % \changes{v2.0}{92/01/17}{Dorothea Rieger, Rechenzentrum RWTH Aachen} % \changes{v1.41}{88/06/20}{Andreas Wagener, Proze"srechner CYBER 815} % % \DoNotIndex{\ ,\!,\C,\[,\\,\],\^,\`,\{,\},\~,\<,\=} % \DoNotIndex{\@ifundefined,\@ne,\catcode,\def,\docdate} % \DoNotIndex{\else,\endinput,\expandafter,\fi,\filedate,\fileversion} % \DoNotIndex{\gdef,\global,\ifnum,\ifx,\let,\long} % \DoNotIndex{\newcount,\newdimen,\newif,\next,\space,\string} % \DoNotIndex{\the,\xdef,\z@} % \DoNotIndex{\@@par, \@empty, \@hangfrom, \@reffalse, \@reftrue,} % \DoNotIndex{\advance, \Alph, \alph, \arabic, \baselineskip, \begin} % \DoNotIndex{\bgroup, \box, \bullet, \cdot, \centering} % \DoNotIndex{\columnwidth, \day, \divide} % \DoNotIndex{\egroup, \end, \font, \footins, \foo} % \DoNotIndex{\frenchspacing, \hbadness, \hbox, \hfil, \hfill} % \DoNotIndex{\hrule, \hsize, \hskip, \hspace, \hss, \ifcase \ifdim, \ifodd} % \DoNotIndex{\ifvmode, \ignorespaces, \input, \interlinepenalty, \item} % \DoNotIndex{\itemindent, \kern, \L, \list, \listparindent, \magstep} % \DoNotIndex{\magstephalf, \makelabel, \MakeShortVerb, \marginpar} % \DoNotIndex{\mark, \month, \newpage, \nobreak, \noindent, \normalsize, \null} % \DoNotIndex{\number, \onecolumn, \or, \overfullrule} % \DoNotIndex{\pagebreak, \parbox, \penalty, \phantom, \raggedbottom, \raggedleft} % \DoNotIndex{\relax, \renewcommand, \reversemarginpar} % \DoNotIndex{\rightmargin, \rule, \setbox, \setcounter} % \DoNotIndex{\setlength, \settowidth, \strut, \svtnsfb} % \DoNotIndex{\thepage, \thispagestyle, \triangleright} % \DoNotIndex{\underline, \vadjust, \vbadness, \vbox, \verb, \vfil} % \DoNotIndex{\vspace, \wd, \year} % \DoNotIndex{\arg} % \DoNotIndex{\begingroup, \bottomfraction} % \DoNotIndex{\CodelineIndex, \columnsep, \csname} % \DoNotIndex{\DisableCrossrefs, \DocInput, \documentstyle, \dp} % \DoNotIndex{\empty, \EnableCrossrefs, \endcsname, \endgroup} % \DoNotIndex{\evensidemargin, \exhyphenpenalty} % \DoNotIndex{\framebox} % \DoNotIndex{\headsep, \ht, \hyphenpenalty} % \DoNotIndex{\ifmmode, \ifundefined, \it} % \DoNotIndex{\leftarrow, \leftskip} % \DoNotIndex{\makeatletter, \makeatother, \makebox, \marginparwidth} % \DoNotIndex{\newbox} % \DoNotIndex{\oddsidemargin, \OnlyDescription} % \DoNotIndex{\parfillskip, \parindent, \parshape, \parskip, \pretolerance} % \DoNotIndex{\raise, \RecordChanges} % \DoNotIndex{\textheight, \textwidth, \tolerance, \topmargin, \typeout} % \DoNotIndex{\vrule, \vtop}% \DoNotIndex{\bf, \tt, \par, \smallskip, \stepcounter} % % \pFonts{\itshape}{}{} ^^A Variablen werden als italics ausgegeben % % \IndexPrologue{\section*{Index} \ifnum\language=\languageNGerman % Die kursiven Zahlen bezeichnen die Seite, % auf der der jeweilige Eintrag beschrieben ist, unterstrichene Zahlen % verweisen auf seine Definition; alle anderen Zahlen geben Stellen an, % an denen der Eintrag auftritt. % \else % The italic numbers mark the page certain entries are described on. % Underlined numbers refer to its definition. All other numbers declare % positions, where the entry occurs. % \fi} % ^^A \setlength{\IndexMin}{0.3\textheight} % % ^^A \iflanguage{}{} ist f"ur gro"se Textbl"ocke nicht nutzbar (stack % ^^A overflow), daher durchgehend die Konstruktion % ^^A \ifnum\language=\languageNGerman % ^^A % ^^A \else % ^^A % ^^A \fi % % \GlossaryPrologue{\section*{\ifnum\language=\languageNGerman % Revisionsgeschichte % \else % History\fi}} % % \title{\StrukTeXSty\thanks{\ifnum\language=\languageNGerman% % Diese Datei hat die Versionsnummer \fileversion, wurde zuletzt % bearbeitet am \filedate, und die Dokumentation datiert vom % \docdate. % \else % This file has the version number \fileversion. It has been worked % at at last on \filedate{} and the documentation has been dated % on \docdate. % \fi} % } % \author{\ifnum\language=\languageNGerman % Jobst Hoffmann\\ % Fachhochschule Aachen, Abt. J"ulich\\ % Ginsterweg 1\\ % 52428 J"ulich\\ % Bundesrepublik Deutschland % \else Jobst Hoffmann\\ % University of Applied Sciences Aachen, Abt. J\"ulich\\ % Ginsterweg 1\\ % 52428 J\"ulich\\ % Federal Republic of Germany % \fi} % \date{\ifnum\language=\languageNGerman gedruckt am \else printed on \fi \today} % % ^^A\markboth{\ifnum\language=\languageNGerman \LaTeX\ Stil-Option struktex, % ^^A Version \fileversion\ vom \filedate % ^^A \else \LaTeX\ styleoption struktex, % ^^A version \fileversion\ from \filedate % ^^A \fi} % ^^A {\ifnum\language=\languageNGerman \LaTeX\ Stil-Option struktex, % ^^A Version \fileversion\ vom \filedate % ^^A \else \LaTeX\ styleoption struktex, % ^^A version \fileversion\ from \filedate % ^^A \fi} % % \maketitle % % \ifnum\language=\languageNGerman% % \begin{abstract} % Dieser Artikel beschreibt den Einsatz und die Implementation der % \LaTeX-\foreign{package} \StrukTeXSty\ zum Setzen von Struktogrammen nach % Nassi-Shneidermann. % \end{abstract} % \else % \begin{abstract} % This article describes the use and implementation of % \LaTeX-\foreign{package} \StrukTeXSty\ for structured box charts % (Nassi-Shneidermann charts). % \end{abstract} % \fi % % \newif\ifmulticols % \IfFileExists{multicol.sty}{\multicolstrue}{} % % \ifmulticols % \addtocontents{toc}{\protect\begin{multicols}{2}} % \fi % % {\parskip 0pt ^^A We have to reset \parskip % ^^A (bug in \LaTeX) % \tableofcontents % } % % \ifnum\language=\languageNGerman % \else % % \section{License} % This package is copyright c 1995 -- 2004 by: % Jobst Hoffmann, c/o University of Applied Sciences Aachen % Aaachen, Germany % E-Mail: j.hoffmann \_at\_ fh-aachen.de % This program can be redistributed and/or modified under the terms of the LaTeX % Project Public License, distributed from CTAN archives as macros/latex/base/lppl.txt; % either version 1 of the License, or (at your option) any later version. % \fi % % \ifnum\language=\languageNGerman % \section{Vorwort} % \changes{v8.0b}{04/07/14}{Hinweis auf \textsf{pict2e.sty}} % \changes{v8.0b}{04/07/14}{Entwicklungsgeschichte korrigiert und erweitert} % Mit dem hier beschriebenen Makropaket ist es m"oglich, Struktogramme % mit \LaTeX\ zu zeichnen. Das Makropaket wird im folgenden immer \StrukTeX\ % genannt. Es ist in der Lage, die wichtigsten Elemente eines Struktogrammes % wie \zB\ Verarbeitungsbl"ocke, Schleifenkonstrukte, Sinnbilder f"ur % Alternativen usw.\ zu generieren. Die Struktogramme werden mit Hilfe der % Picture-Umgebung von \LaTeX\ erzeugt. % \else % \section{Preface} % It is possible to draw structured box charts by this package of macros % which is described herewith. Through this article the package will be % always called \StrukTeX\. It can generate the most important elements of a % structured box chart like processing blocks, loops, mapping conventions for % alternatives etc. % \fi % % \ifnum\language=\languageNGerman % Ab Version 4.1a werden die mathematischen Symbole von \AmSTeX\ geladen, % die den % mathematischen Zeichensatz erweitern und andere Darstellungen von % Mengensymbolen (etwa $\nat$, $\integer$ und $\real$ f"ur die nat"urlichen, % ganzen und reellen Zahlen) erm"oglichen. % Insbesondere das Zeichen f"ur die leere Menge ($\emptyset$) ist in der % Darstellung auff"alliger als das standardm"a"sige Zeichen % ("`$\mathchar"023B$"') % und somit besser f"ur die Darstellung von Struktogrammen geeignet. % \else % Since version 4.1a the mathematical symbols are loaded by \AmSTeX\. % They extend the mathematical character set and make other representations % of symbols sets (like $\nat$, $\integer$ and $\real$ for the natural, the whole % and the real numbers) possible. % Especially the symbol for the emptyset ($\emptyset$) has a more outstanding % representation than the standard symbol ("`$\mathchar"023B$"'). Therefore it % is the better representation in structured box charts. % \fi % % \ifnum\language=\languageNGerman % Weiterhin ist aus dem \textsf{oz.sty} die Idee "ubernommen, % Variablennamen in \foreign{italics} zu setzen, ohne dass die teilweise % unsch"onen Zwischenr"aume erzeugt werden. % \else % Furthermore the idea to set names of variables in \foreign{italics} % without generating the partly unpleasant distances is taken over from % \textsf{oz.sty}. % \fi % % \ifnum\language=\languageNGerman % Die Entwicklung dieses Makropaketes ist noch nicht abgeschlossen. % Es war geplant, die Struktogramme unter dem Einsatz des Makros aus % \textsf{emlines2.sty} zu zeichnen, um die durch \LaTeX\ gegebenen % Einschr"ankungen -- es gibt nur vordefinierte Steigungen -- % aufzuheben. Dies ist -- f"ur das \cs{ifthenelse} mit den % Versionen 4.1a und 4.1b, f"ur das \cs{switch} mit der Version 4.2a -- % erledigt, nicht jedoch f"ur Systeme, die die % entsprechenden |\special{|\dots|}|-Befehle nicht unterst"utzen. % Erreicht werden kann dies jedoch durch Einsatz entsprechender Makros % aus dem \textsf{curves.sty}. Seit der Version 8.0a wird das Paket % \textsf{pict2e.sty} unterst"utzt, das mittels der "ublichen Treiber die von % der |picture|-Umgebung bekannten Beschr"ankungen auf nur wenige Steigungen % im wesentlichen aufhebt, so dass sich die Benutzung der entsprechenden % Option (s.u.) dauerhaft empfiehlt. % \else % The development of this macro package is still not finished. % It was planned to draw the structured box charts by using the macros of % \textsf{emlines2.sty} for eliminating the constraints given by \LaTeX\. % -- There are only predefined gradients. -- This is done for the \cs{ifthenelse} % in the versions 4.1a and 4.1b and for \cs{switch} in the version 4.2a, % but not for the systems, which do not support the corresponding % |\special{|\dots|}|-commands. Nevertheless it can be attained by using the % corresponding macros of \textsf{curves.sty}. Since version 8.0a the % package \textsf{pict2e} is supported. This package eliminates the above % mentioned constraints by using the common drivers, so it is recommended % to use the respective (see below) option permanently. % \fi % % \ifnum\language=\languageNGerman % Ebenso ist es geplant, Struktogramme um Kommentarbl"ocke zu erweitern, % wie sie in dem Buch von Futschek (\cite{Futschek:Programmentwicklung}) % eingesetzt werden. Dieses ist ebenfalls mit der Version 8.0a realisiert % worden. % \else % Just so it is planned to extend structured box charts by comments % as they are used in the book of Futschek % (\cite{Futschek:Programmentwicklung}). This is also implemented in % version 8.0a % \fi % % \ifnum\language=\languageNGerman % Weitere Zukunftspl"ane sind: % \else % Further plans for future are: % \fi % % \begin{enumerate} % % \item \ifnum\language=\languageNGerman % Ein \cs{otherwise}-Zweig beim \cs{switch} (abgeschlossen durch die % Version 4.2a). % \else % An \cs{otherwise}-branch at \cs{switch} (done in version 4.2a). % \fi % % \item \ifnum\language=\languageNGerman % Die Neuimplementation der |declaration|-Umgebung mittels der % |list|-Umgebung gem"a"s % \cite[Abs. 3.3.4]{GoossensMittelbachSamarin:Companion2} (abgeschlossen mit % der Version 4.5a). % \else % The reimplementation of the |declaration|-environment through the % |list|-environment by % \cite[Abs. 3.3.4]{GoossensMittelbachSamarin:Companion2} (done in version 4.5a). % \fi % % \item \ifnum\language=\languageNGerman % Die Anpassung an \LaTeXe\ im Sinne eines Packages % (abgeschlossen durch die Version 4.0a). % \else % The adaption to \LaTeXe\ in the sense of packages % (done in version 4.0a) % \fi % % \item \ifnum\language=\languageNGerman % Die Verbesserung der Dokumentation, um Teile des Algorithmus % verst"andlicher zu machen. % \else % The improvement of documentation in order to make parts of the % algorithm more understandable. % \fi % % \item \ifnum\language=\languageNGerman % Die Unabh"angigkeit des \StrukTeXSty\ von anderen % \textsf{.sty}-Dateien wie etwa dem % \textsf{JHfMakro.sty} (abgeschlossen mit der Version 4.5a). % \else % The independence of \StrukTeXSty\ of other \textsf{.sty}-files % like e.g. \textsf{JHfMakro.sty} (done in version 4.5a). % \fi % % \item \ifnum\language=\languageNGerman % die vollst"andige Implementation der Makros \cs{pVar}, % \cs{pKey}, \cs{pFonts}, \cs{pTrue}, \cs{pFalse} und \cs{pBoolValue} % (erledigt vor Version 7.0), % \changes{v4.5a}{96/03/14}{Umbenenneungen: `sVar $\rightarrow$ `pVar, \ldots} % \changes{v4.3a}{96/01/26}{Variable `sBoolValue ersetzt `sLVal} % \else % The complete implementation of the macros \cs{pVar}, \cs{pKey}, \cs{pFonts}, % \cs{pTrue}, \cs{pFalse} and \cs{pBoolValue} (done before version 7.0), % \changes{v4.5a}{96/03/14}{redesignation: `sVar $\rightarrow$ `pVar, \ldots} % \changes{v4.3a}{96/01/26}{variable `sBoolValue replaces `sLVal} % \fi % % \item \ifnum\language=\languageNGerman % die vollst"andige Internalisierung von Kommandos, die nur in der % Umgebung |struktogramm| Sinn machen. Internalisierung bedeutet, dass % diese Kommandos nur innerhalb der Umgebung definiert sind. Dies hat den % Zweck, das Paket mit anderen Paketen vertr"aglicher zu gestalten, etwa % mit dem \textsf{ifthenelse.sty}. Begonnen % wurde die Internalisierung mit der Version 4.4a. % \changes{v4.4a}{96/02/29}{Kommando `ifthenelse internalisiert} % \else % The complete internalization of commands, which only make sense % in the environment |struktogramm|. Internalization means, that these % commands are only defined in this environment. This is for compatibility % of this package with other packages, e.g. with \textsf{ifthenelse.sty}. % The internalization has been started in version 4.4a. % \changes{v4.4a}{96/02/29}{command `ifthenelse internalisated} % \fi % % \item \ifnum\language=\languageNGerman % Die Unabh"angigkeit der Dokumentation von anderen % \textsf{.sty}-Dateien wie etwa dem % \textsf{JHfMakro.sty} (abgeschlossen mit der Version 5.0). % \else % The independence of the documentation of other \textsf{.sty}-files like % \textsf{JHfMakro.sty} (done in version 5.0). % \fi % % \item \ifnum\language=\languageNGerman % Eine alternative Darstellung der Deklarationen, wie sie von % Rico Bolz vorgeschlagen wurde % \else % an alternative representation of declarations as proposed by Rico Bolz % \fi % % \item \ifnum\language=\languageNGerman % Wiedereinf"uhrung der |make|-Ziele |dist-src| |dist-tar| und |dist-zip|. % \else % Reintroduction of the |make|-targets |dist-src| |dist-tar| and % |dist-zip|. % \fi % % \end{enumerate} % % \ifnum\language=\languageNGerman % Der derzeitige Stand der Implementierung ist an entsprechender Stelle % vermerkt. % \else % The current state of the implementation is noted at suitable points. % \fi % % % % \section{\ifnum\language=\languageNGerman Hinweise zur Pflege und Installation sowie die Treiberdatei zur % Erzeugung dieser Dokumentation % \else Hints for maintenance and installation as well as driver file creating % of this documentation % \fi} % % \ifnum\language=\languageNGerman % \changes{v4.5e}{97/04/26}{Neue .sty-Datei strukdoc.sty eingef"uhrt} % \changes{v1.5}{92/01/07}{StrukTeX Makros nun als .sty-Datei, J. Hoffmann} % \changes{v2.0}{92/01/17}{Erweitert um `exit, `forever und `foreverend, D. Rieger} % \changes{v2.1}{92/01/07}{`exit modifiziert, J. Hoffmann} % \changes{v2.2}{93/09/08}{Beschreibung von Variablen eingef"uhrt, J. Hoffmann} % \changes{v2.2a}{93/09/09}{Beschreibung von Variablen verbessert, J. Hoffmann} % \else % \changes{v4.5e}{97/04/26}{new .sty-File strukdoc.sty introduced} % \changes{v1.5}{92/01/07}{StrukTeX macros now as .sty-File, J. Hoffmann} % \changes{v2.0}{92/01/17}{extended by `exit, `forever and `foreverend, D. Rieger} % \changes{v2.1}{92/01/07}{`exit modified, J. Hoffmann} % \changes{v2.2}{93/09/08}{description of variables introduced, J. Hoffmann} % \changes{v2.2a}{93/09/09}{description of variables improved, J. Hoffmann} % \fi % % \ifnum\language=\languageNGerman % Das Paket, zu dem der \StrukTeXSty\ geh"ort, besteht aus % insgesamt sechs Dateien: % \begin{quote} % \texttt{LIESMICH}, \\ % \texttt{README}, \\ % \texttt{struktex.ins}, \\ % \texttt{struktex.dtx}, \\ % \texttt{struktex.de.pdf} und \\ % \texttt{struktex.en.pdf}. % \end{quote} % Um daraus einerseits die Dokumentation, andererseits die \textsf{.sty}-Datei % zu erzeugen, muss folgenderma"sen vorgegangen werden: % \else % The package \StrukTeXSty\ is belonging to consists of altogether two files: % \begin{quote} % \texttt{LIESMICH}, \\ % \texttt{README}, \\ % \texttt{struktex.ins}, \\ % \texttt{struktex.dtx}, \\ % \texttt{struktex.de.pdf} und \\ % \texttt{struktex.en.pdf}. % \end{quote} % In order to generate on the one hand the documentation and on the other hand the % \textsf{.sty}-file one has to proceed as follows: % \fi % % \ifnum\language=\languageNGerman % Zun"achst wird mit \zB\ % \begin{quote}\tt % latex struktex.ins % \end{quote} % die Datei \textsf{struktex.ins} formatiert. % Dieser Formatierungslauf erzeugt elf weitere Dateien. Dies sind zun"achst % die drei \textsf{.sty}-Dateien \textsf{struktex.sty}, % \textsf{struktxf.sty} und % \textsf{struktxp.sty}, die beim Einsatz des \StrukTeXSty\ ben"otigt werden; % weiterhin sind es die beiden Dateien \textsf{struktex\_test\_0.nss} % und \textsf{strukdoc.sty}, die zur % Erzeugung der hier vorliegenden Dokumentation ben"otigt werden. Dazu kommen % drei Testdateien \textsf{struktex\_test\_\textit{i}.nss}, % \(i=1(2)3\), sowie die beiden Dateien \textsf{struktex.makemake} und % \textsf{struktex.mk} (vgl. Abschnitt~\ref{sec:Makefile}). % % Die Dokumentation wird wie "ublich durch % \begin{quote}\tt % latex struktex.dtx \\ % latex struktex.dtx \\ % makeindex -s gind.ist struktex.idx \\ % latex struktex.dtx % \end{quote} % erzeugt.\footnote{Die Erzeugung der Dokumentation kann durch den Einsatz % einer \texttt{make}-Datei vereinfacht werden, vgl. % Abschnitt~\ref{sec:Makefile}} Das Ergebnis dieses Formatierlaufes ist die % Dokumentation % in Form einer \textsf{.dvi}-Datei, die in gewohnter Weise weiterbearbeitet % werden kann. Weitere Informationen zum Arbeiten mit der integrierten % Dokumentation findet man in \cite{FM:TheDocAndShortvrbPackages-V2.0} und % \cite{MittelbachDuchierBraams:DocStrip-V2.5b}. % Die Dateien \textsf{tst\_strf.tex}, \textsf{tst\_strp.tex} schlie"slich % sind Dateien zum Austesten % der hier beschriebenen Makros. % \else % First the file \textsf{struktex.ins} will be formatted e.g.\ with % \begin{quote}\tt % tex \&latexg struktex.ins % \end{quote}. % This formatting run generates eleven further files. These are first of all the % three \textsf{.sty}-files \textsf{struktex.sty}, \textsf{struktxf.sty} and % \textsf{struktxp.sty}, that are used for \StrukTeXSty\. % Furthermore these are the two files \textsf{struktex\_test\_0.nss} and % \textsf{strukdoc.sty}, % which are used for the generation of the hereby presented documentation. % Then there are three test files \textsf{struktex\_test\_\textit{i}.nss}, % \(i=1(2)3\) as well as the files \textsf{struktex.makemake} and % \textsf{struktex.mk} (see section~\ref{sec:Makefile}). % % The common procedure to produce the documentation is % \begin{quote}\tt % latex struktex.dtx \\ % latex struktex.dtx \\ % makeindex -s gind.ist struktex.idx \\ % latex struktex.dtx % \end{quote} % The result of this formatting run is the documentation in form of a % \textsf{.dvi}-file, that can be manipulated the normal way. Further % informations % about the work with the integrated documentation one can find in % \cite{FM:TheDocAndShortvrbPackages-V2.0} and % \cite{MittelbachDuchierBraams:DocStrip-V2.5b}.\footnote{Generating the % documentation is much easier with the \texttt{make} utility, see % section~\ref{sec:Makefile}.} % Finally there are the files \textsf{tst\_strf.tex}, % \textsf{tst\_strp.tex} for testing % purposes of the macros described herewith. % \fi % % \ifnum\language=\languageNGerman % Die Installation wird abgeschlossen, indem die Datei % \texttt{struktex.sty} in ein Verzeichnis verschoben wird, das von \TeX{} % gefunden werden kann, das ist in einer % TDS-konformen Installation typischerweise % \texttt{.../tex/latex/struktex/}, die Dokumentation wird analog in das % Verzeichnis \texttt{.../doc/latex/struktex/} verschoben.\footnote{Wenn % die automatische Installation (vgl. Abschnitt \ref{sec:Makefile}) % vorgenommen wird, erfolgt diese in die % Verzeichnisse \texttt{.../doc/latex/jhf/struktex/}, % \texttt{.../tex/latex/jhf/struktex/} und % \texttt{.../source/latex/jhf/struktex/}.} % \else % To finish the installation, the file \texttt{struktex.sty} should be % moved to a directory, where \TeX{} can find it, in a TDS conform % installation this is \texttt{.../tex/latex/struktex/} typical, % analogously the documentation has to be moved to % \texttt{.../doc/latex/struktex/}. If the installation process is done % automatically (see section \ref{sec:Makefile}), the target directories are % \texttt{.../doc/latex/jhf/struktex/}, % \texttt{.../tex/latex/jhf/struktex/} and % \texttt{.../source/latex/jhf/struktex/} resp. % \fi % % \ifnum\language=\languageNGerman % Sollen "Anderungen durchgef"uhrt werden, so sollten neben diesen % die Werte von \cs{fileversion}, \cs{filedate} und \cs{docdate} bei Bedarf % entsprechend ge"andert werden. Weiterhin sollte darauf geachtet werden, % dass die Revisionsgeschichte durch Eintr"age von % \begin{quote} % |\changes{|\meta{Version}|}{|\meta{Datum}|}{|\meta{Kommentar}|}| % \end{quote} % weitergeschrieben wird. % \meta{Version} gibt die Versionsnummer an, unter der die jeweilige % "Anderung durchgef"uhrt wurde, % \meta{Datum} gibt das Datum in der Form |yy/mm/dd| an und % \meta{Kommentar} erl"autert die jeweilige "Anderung. % \meta{Kommentar} darf nicht mehr als 64 Zeichen enthalten. % Daher sollten Kommandos nicht mit dem "`$\backslash$"' % (\foreign{backslash}) eingeleitet werden, sondern mit dem "``"' % (\foreign{accent}). % \else % If one wants to carry out changes, the values of \cs{fileversion}, \cs{filedate} % and \cs{docdate} should be also changed if needed. Furthermore one should % take care that the audit report will be carried on by items in the form of % \begin{quote} % |\changes{|\meta{version}|}{|\meta{date}|}{|\meta{comment}|}| % \end{quote} % The version number of the particular change is given by \meta{version}. % The date is given by \meta{date} and has the form |yy/mm/dd|. % \meta{comment} describes the particular change. It need not contain % more than 64 characters. % Therefore commands should'nt begin with "`$\backslash$"' (\foreign{backslash}), % but with the "``"' (\foreign{accent}). % \fi % % \ifnum\language=\languageNGerman % \changes{v8.0b}{04/07/14}{Umstellung der Sprachverwaltung auf babel} % Die n"achsten Anweisungen bilden den Treiber f"ur die hier vorliegende % Dokumentation. % \else % The following commands make up the driver of the documentation lieing before. % \fi % \iffalse %<*driver> % \fi % \begin{macrocode} \documentclass[a4paper, english, ngerman]{ltxdoc} \usepackage{babel} % for switching the documentation language \usepackage{strukdoc} % the style-file for formatting this % documentation \usepackage[pict2e]% <-------------- to produce finer results {struktex} % visible under xdvi, alternative % curves or emlines2 (visible only under % ghostscript), leave out if not % available \GetFileInfo{struktex.sty} \EnableCrossrefs %\DisableCrossrefs % say \DisableCrossrefs if index is ready %\RecordChanges % say \RecordChanges to gather update information %\CodelineIndex % say \CodelineIndex to index entry code by line number \OnlyDescription % say \OnlyDescription to omit the implementation details \MakeShortVerb{\|} % |\foo| acts like \verb+\foo+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % to avoid underfull ... messages while formatting two/three columns \hbadness=10000 \vbadness=10000 \def\languageNGerman{3} \begin{document} \makeatletter \@ifundefined{selectlanguageEnglish}{}{\selectlanguage{english}} \makeatother \DocInput{struktex.dtx} \end{document} % \end{macrocode} % \iffalse % % \fi % % \section{\ifnum\language=\languageNGerman Die Benutzungsschnittstelle % \else The User Interface\label{interface} % \fi} % \label{Schnittstelle} % % \changes{v4.3a}{96/01/26}{Dokumentation verbessert und korrigiert} % \ifnum\language=\languageNGerman % Der \StrukTeXSty\ wird wie jede andere |.sty|-Datei als \foreign{package} in % ein \LaTeX-Dokument eingebunden: % \else % The \StrukTeXSty\ will be included in a LaTeX-document like every other % |.sty|-file by \foreign{package}: % \fi % \begin{quote} % |\usepackage{struktex}| % \end{quote} % % \ifnum\language=\languageNGerman % Das Laden des Paketes kann unter Angabe einer zus"atzlichen Option % geschehen, um beliebige Steigungen in Struktogrammen zeichnen zu k"onnen. % Diese Option kann |emlines|, |curves|, oder |pict2e| lauten; ersteres ist % sinnvoll, wenn mit dem em\TeX-Paket von Eberhard Mattes gearbeitet wird (DOS % oder OS/2), ansonsten wird der Einsatz von |pict2e| empfohlen. Der % Einsatz des Paketes \textsf{curves.sty} (Ian Maclaine-cross), das das % Zeichnen von Geraden beliebiger Steigungen durch das Setzen vieler % einzelner Punkte erm"oglicht, ist durch das Erscheinen des Paketes % \textsf{pict2e.sty} (Hubert G"a"slein und Rolf Niepraschk) im Prinzip % obsolet, aus Kompatibilit"atsgr"unden wird er weiter unterst"utzt. Durch die % Angabe einer der genannten Option wird das jeweilige Paket % (\textsf{emlines2.sty}, \textsf{curves.sty} bzw. % \textsf{pict2e.sty}) automatisch geladen. % % Nach dem Laden der |.sty|-Datei stehen verschiedene Kommandos und Umgebungen % zur Verf"ugung, die das Zeichnen der Struktogramme erm"oglichen. % \else % Loading the package can be modified by giving the option |curves| or % |emlines|, resp. If this is done, any ascent can be drawn in the % structured box chart. You should use |emlines|, if you are working % with the em\TeX-package for DOS or OS/2 by E. Mattes, else you should use % |curves|. In both cases the required packages (\textsf{emline2.sty} or % \textsf{curves.sty} resp.) will be loaded automatically. % % After loading the |.sty|-file there are different commands and environments, % which enable the draw of structured box charts. % \fi % % \DescribeMacro{\StrukTeX} % \ifnum\language=\languageNGerman % Zun"achst sei der Befehl erw"ahnt, der das Logo \StrukTeX\ erzeugt: % \else % First of all the logo \StrukTeX\ producing command should be mentioned: % \fi % \begin{quote} % \verb-\StrukTeX- % \end{quote} % % \ifnum\language=\languageNGerman % Damit kann in Dokumentationen auf die hier vorliegende Stil-Option % verwiesen werden. % \else % So in documentations one can refer to the style option given hereby. % \fi % % \subsection{\ifnum\language=\languageNGerman Spezielle Zeichen und Textdarstellung % \else Specific Characters and Text Representation % \fi} % % \DescribeMacro{\nat} % \DescribeMacro{\integer} % \DescribeMacro{\real} % \DescribeMacro{\complex} % \DescribeMacro{\emptyset} % \ifnum\language=\languageNGerman % Wegen ihres h"aufigen Auftretens sind die Mengen der nat"urlichen, ganzen, % reellen und komplexen Zahlen ($\nat$, $\integer$, $\real$ und $\complex$) % im Mathematik-Modus "uber % die folgenden Makros erreichbar: \cs{nat}, \cs{integer}, \cs{real} und \cs{complex}. % Ebenso ist das mit \cs{emptyset} erzeugte % "`$\emptyset$"' als Zeichen f"ur die leere Anweisung auff"alliger als % das standardm"a"sige Zeichen "`$\mathchar"023B$"' % Andere Mengensymbole wie $\mathbb L$ (f"ur L"osungsmenge) sind "uber % |$\mathbb L$| zu % erzeugen. % \else % Since sets of natural, whole, real and complex numbers ($\nat$, $\integer$, % $\real$ and $\complex$) occur often in the Mathematics Mode they can be % reached by the macros \cs{nat}, \cs{integer}, \cs{real} and \cs{complex}. % Similarly "`$\emptyset$"', which is generated by \cs{emptyset}, is the more % remarkable symbol for the empty statement than the standard symbol % "`$\mathchar"023B$"'. % Other set symbols like $\mathbb L$ (for solution space) have to be % generated by |$\mathbb L$|. % \fi % % \DescribeMacro{\MathItalics} % \DescribeMacro{\MathNormal} % \ifnum\language=\languageNGerman % Mit diesen beiden Makros kann die Darstellung von Variablennamen beeinflusst % werden: % \else % One can influence the descriptions of variable names by these macros. % \fi % \ifnum\language=\languageNGerman % \begin{example} % \MathNormal % \[ % NeuerWert = AlterWert + Korrektur % \] % \end{example} % \ifnum\language=\languageNGerman und\else and\fi % \begin{example} % \MathItalics % \[ % NeuerWert = AlterWert + Korrektur % \] % \end{example} % \else % \begin{example} % \MathNormal % \[ % NewValue = OldValue + Correction % \] % \end{example} % und % \begin{example} % \MathItalics % \[ % NewValue = OldValue + Correction % \] % \end{example} % \fi % % \subsection{\ifnum\language=\languageNGerman Makros zur Darstellung von Variablen, Schl"usselw"ortern % und anderen programmierspezifischen Details % \else Macros for Representation of Variables, Keywords and other % Specific Details of Programming % \fi} % % \DescribeMacro{\pVariable} % \DescribeMacro{\pVar} % \ifnum\language=\languageNGerman % \changes{v2.0n}{94/03/31}{Dokumentation "uberarbeitet} % \else % \changes{v2.0n}{94/03/31}{documentation changed} % \fi % \DescribeMacro{\pKeyword} % \DescribeMacro{\pKey} % \DescribeMacro{\pComment} % \ifnum\language=\languageNGerman % Mit |\pVariable{|\meta{Variablenname}|}| wird ein Variablenname gesetzt. % \meta{Variablenname} ist dabei ein Bezeichner eine Variable, wobei der % Unterstrich "`|_|"', das kaufm"annische Und "`|&|"' und das Dach "`|^|"' % als Teile des Variablennamens erlaubt sind: % \else % Variable names are set by |\pVariable{|\meta{VariableName}|}|. % There \meta{VariableName} is an identifier of a variable, whereby the underline % "`|_|"', the commercial and "`|&|"' and the hat "`|^|"' are allowed to be parts % of variables: % \fi % \ifnum\language=\languageNGerman % \pFonts{\ttfamily}{\ttfamily\bfseries}{\ttfamily\slshape} % \begin{example}\obeylines % \renewcommand{\pLanguage}{C} % \pVariable{cEineNormaleVariable} % \pVariable{c_eine_normale_Variable} % \pVariable{&iAdresseEinerVariablen} % \renewcommand{\pLanguage}{Pascal} % \pVariable{zZeigerAufEineVariable^.sInhalt} % \end{example} % \else % \pFonts{\ttfamily}{\ttfamily\bfseries}{\ttfamily\slshape} % \begin{example}\obeylines % \pVariable{cANormalVariable} % \pVariable{c_a_normal_variable} % \pVariable{&iAddressOfAVariable} % \pVariable{pPointerToAVariable^.sContent} % \end{example} % \fi % \ifnum\language=\languageNGerman % Leerzeichen werden beachtet, so dass ganze Anweisungen geschrieben werden % k"onnen. % Es darf als Abk"urzung \cs{pVar} benutzt werden. % \else % Blanks are considered such, that whole statements can be written. % For abbreviation it is allowed to use \cs{pVar}. % \fi % % \ifnum\language=\languageNGerman % Entsprechend wird mit |\pKeyword{|\meta{Schl"usselwort}|}| ein Schl"usselwort % gesetzt. % Dabei ist \meta{Schl"usselwort} ein Schl"usselwort in einer % Programmiersprache, wobei der Unterstrich "`|_|"' und das % \foreign{hash}-Zeichen "`|#|"' als Teil des Schl"usselwortes % erlaubt ist. Damit l"asst sich setzen: % \else % A keyword is set by |\pKeyword{|\meta{keyword}|}| respectively. % There \meta{keyword} is a keyword in a programming language, whereby % the underline "`|_|"' and the \foreign{hash} symbol "`|#|"' are allowed to be % parts of keywords. Therewith the following can be set: % \fi % \begin{example}\obeylines % \pKeyword{begin} % \renewcommand{\pLanguage}{Pascal} % \pKeyword{program} % \renewcommand{\pLanguage}{C} % \pKeyword{#include} % \end{example} % \ifnum\language=\languageNGerman % Auch \cs{pKeyword} darf % abgek"urzt werden: \cs{pKey}. Damit erzeugt dann der Quelltext % \else % \cs{pKeyword} is also allowed to be abbreviated by \cs{pKey}. With that the % source code % \fi % \begin{verbatimwrite}{struktex.tmp} % \renewcommand{\pLanguage}{Pascal} % \pKey{begin} \pExp{iVar := iVar + 1;} \pKey{end} % \end{verbatimwrite} % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % \ifnum\language=\languageNGerman % als Ausgabe dieses Ergebnis: % \else % generates the following result as output: % \fi % \begin{quote} % \input{struktex.tmp} % \end{quote} % % \ifnum\language=\languageNGerman % In "ahnlicher Weise dient \cs{pComment} zur Darstellung von Kommentar. % Das Argument darf nur Zeichen der \TeX-Kategorie \foreign{letter} % haben, Zeichen, die einen Kommentar einleiten, m"ussen geschrieben % werden. \cs{pComment} kann nicht abgek"urzt werden. % Beispielsweise ergibt % \else % In a similar way \cs{pComment} is of representation purposes of comments. % The argument is only allowed to consist of characters of the % category \foreign{letter}. Characters, that start a comment, have to be written. % \cs{pComment} can't be abbreviated. For instance % \fi % \begin{verbatimwrite}{struktex.tmp} % \pExp{a = sqrt(a);} \pComment{// Iteration} % \end{verbatimwrite} % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % \ifnum\language=\languageNGerman % die Zeile % \else % results in the line % \fi % \begin{quote} % \input{struktex.tmp} % \end{quote} % % \DescribeMacro{\pTrue} % \DescribeMacro{\pFalse} % \ifnum\language=\languageNGerman % Logische Werte spielen in der Programmierung eine wesentliche Rolle. % Mit \cs{pTrue} und \cs{pFalse} sind entsprechende Werte vorgegeben: % \pTrue\ und \pFalse. % \else % Boolean values play an importand role in programming. There are given % adequate values by \cs{pTrue} and \cs{pFalse}: \pTrue\ and \pFalse. % \fi % % \DescribeMacro{\pFonts} % \DescribeMacro{\pBoolValue} % \ifnum\language=\languageNGerman % Der Makro \cs{pFonts} dient der Auswahl von Fonts zur Darstellung von % Variablen, Schl"usselw"ortern und Kommentar: % \begin{quote} % |\pFonts{|\meta{Variablenfont}|}{|\meta{Schl"usselwortfont}|}|% % |{|\meta{Kommentarfont}|}| % \end{quote} % \else % The macro \cs{pFonts} is used for the choice of fonts for representation of % variables, keywords and comments: % \begin{quote} % |\pFonts{|\meta{variablefont}|}{|\meta{keywordfont}|}|% % |{|\meta{commentfont}|}| % \end{quote} % \fi % \ifnum\language=\languageNGerman % Vorbesetzt sind die einzelnen Fonts mit % \begin{itemize} % \item \meta{Variablenfont} als |\small\sffamily|, % % \item \meta{Schl"usselwortfont} als |\small\sffamily\bfseries| und % % \item \meta{Kommentarfont} als |\small\sffamily\slshape|. % % \end{itemize} % \else % The default values for the certain fonts are % \begin{itemize} % \item \meta{variablefont} as |\small\sffamily|, % % \item \meta{keywordfont} as |\small\sffamily\bfseries| and % % \item \meta{commentfont} as |\small\sffamily\slshape|. % % \end{itemize} % \fi % \ifnum\language=\languageNGerman % Damit wird die obige Zeile nach % \else % With that the above line % \fi % \ifnum\language=\languageNGerman % \begin{verbatimwrite}{struktex.tmp} % \pFonts{\itshape}{\sffamily\bfseries}{\scshape} % \pVar{a = }\pKey{sqrt}\pVar{(a);} \pComment{// Iteration} % \end{verbatimwrite} % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % zu % \else % becomes % \fi % \begin{quote} % \input{struktex.tmp} % \end{quote} % \ifnum\language=\languageNGerman % \else % \fi % \ifnum\language=\languageNGerman % Entsprechend k"onnen durch den Makro % \begin{quote} % |\sBoolValue{|\meta{Ja-Wert}|}{|\meta{Nein-Wert}|}| % \end{quote} % die Werte von \cs{pTrue} und \cs{pFalse} umdefiniert werden. Somit liefern die % Zeilen % \begin{verbatimwrite}{struktex.tmp} % \renewcommand{\pLanguage}{Pascal} % \sBoolValue{\textit{ja}}{\textit{nein}} % \(\pFalse = \pKey{not}\ \pTrue\) % \end{verbatimwrite} % \else % Similarly the values of \cs{pTrue} and \cs{pFalse} can be redefined by the macro % \begin{quote} % |\sBoolValue{|\meta{Yes-Value}|}{|\meta{No-Value}|}| % \end{quote} % So the lines % \begin{verbatimwrite}{struktex.tmp} % \renewcommand{\pLanguage}{Pascal} % \sBoolValue{\textit{yes}}{\textit{no}} % \(\pFalse = \pKey{not} \pTrue\) % \end{verbatimwrite} % \fi % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % \ifnum\language=\languageNGerman % das folgende Ergebnis: % \else % result in the following: % \fi % \begin{quote} % \input{struktex.tmp} % \end{quote} % % \DescribeMacro{\sVar} % \DescribeMacro{\sKey} % \DescribeMacro{\sTrue} % \DescribeMacro{\sFalse} % \ifnum\language=\languageNGerman % Die Makros \cs{sVar} und \cs{sKey} sind mit den Makros \cs{pVar} und \cs{pKey} % identisch, sie werden hier nur definiert, um Kompatibilit"at mit % fr"uheren Versionen des \StrukTeXSty\ zu gew"ahrleisten. % Dasselbe gilt auch f"ur die Makros \cs{sTrue} und \cs{sFalse}. % \else % The macros \cs{sVar} and \cs{sKey} are the same as the macros |pVar| and |pKey|. % Here they are just described for compatibility reasons with former versions % of \StrukTeXSty. The same rule shall apply to the macros \cs{sTrue} and % \cs{sFalse}. % \fi % % \subsection{\ifnum\language=\languageNGerman Die Makros zur Erzeugung von Struktogrammen % \else The Macros for Generating Structured Box Charts % \fi} % % \DescribeEnv{struktogramm} % \DescribeMacro{\sProofOn} % \DescribeMacro{\sProofOff} % \DescribeMacro{\PositionNSS} % \ifnum\language=\languageNGerman % Die Umgebung % \begin{quote}\obeylines % \envb{struktogramm}\pparg{Breite}{H"ohe}\oarg{"Uberschrift} % \dots % \enve{struktogramm} % \end{quote} % erzeugt Raum f"ur ein % neues Struktogramm. Die beiden Parameter % legen die Breite und die H"ohe des Platzes fest, der f"ur das Struktogramm % reserviert wird. Die Angaben werden in Millimetern gemacht, wobei der % aktuelle Wert von \cs{unitlength} keine Rolle spielt. % Dabei entspricht die Breite der tats"achlichen Breite, % die tats"achliche H"ohe wird den Erfordernissen angepasst. Stimmt die % angegebene H"ohe nicht mit den tats"achlichen Erfordernissen "uberein, % l"auft das Struktogramm in den umgebenden Text hinein oder es bleibt % Raum frei. Es gibt einen Schalter \cs{sProofOn}, mit dem die angegebene % Gr"o"se des Struktogramms durch vier Punkte gezeigt wird, um Korrekturen % einfacher durchf"uhren zu k"onnen. \cs{sProofOff} schaltet diese Hilfe % entsprechend wieder ab. % Die "Uberschrift dient zur Identifizierung des Struktogramms, % wenn man sich von anderer Stelle, etwa aus einem anderen Struktogramm % heraus auf dieses hier beziehen will. % \else % The environment % \begin{quote}\obeylines % |\begin{struktogramm}(|\meta{width}|,|\meta{height}|)|\oarg{titel} % \dots % |\end{struktogramm}| % \end{quote} % generates space for a new box chart. Both the parameters provide the width % and the height of the place, which is reservated for the structured box chart. % Lengths etc. are described in millimeters. In doing so the actual % value of \cs{unitlength} is unimportand. % At the same time the width corresponds with the real width and the % real height will be adjusted to the demands. If the given height does'nt match % with the real demands, the structured box chart reaches into the surrounding % text or there is empty space respectively. There is a switch \cs{sProofOn}, % with which the stated dimensions of the structured box charts is given by % four points to make corrections easier. \cs{sProofOff} similarly switches this help % off. % The title is for identification of structured box charts, if one wants to refer % to this from another part, e.g. from a second box chart. % \fi % % \ifnum\language=\languageNGerman % Die Struktogramm-Umgebung basiert auf der |picture|-Umgebung von % \LaTeX. % Die in der |picture|-Umgebung % gebr"auchliche L"angeneinheit \cs{unitlength} wird bei den Struktogrammen % nicht benutzt; die L"angeneinheit ist aus technischen Gr"unden auf $1\, mm$ % festgelegt. Weiterhin m"ussen alle L"angenangaben ganzzahlige Werte sein. % \cs{unitlength} hat zwar nach dem Zeichnen eines Struktogrammes mit % \StrukTeX\ den gleichen Wert wie vorher, ist aber innerhalb eines % Struktogrammes umdefiniert und darf dort auch nicht ge"andert werden. % \else % The structured box chart environment is based on the |picture| environment of % \LaTeX. % The unit of length \cs{unitlength}, which is often used in the |picture| environment, % is not used in structured box charts. The unit of length is fixed by % $1\, mm$ for technical reasons. Furthermore all of length specifications have to % be whole numbers. After drawing a structured box chart by \StrukTeX\ % \cs{unitlength} is of the same quantity as before. But it is redefined within a % structured box chart and need not be changed there. % \fi % % \DescribeMacro{\assign} % \ifnum\language=\languageNGerman % Das Hauptelement eines Struktogramms ist ein Kasten, in dem eine Operation % beschrieben wird. Ein solcher Kasten wird mit \cs{assign} erzeugt. Die % Syntax ist % \begin{quote} % \cs{assign}\oarg{H"ohe}\marg{Inhalt}, % \end{quote} % wobei die eckigen Klammern wie "ublich ein optionales Argument bezeichnen. % Die Breite % und die H"ohe des Kastens werden den Erfordernissen gem"a"s automatisch % angepasst, man kann aber mittels des optionalen Argumentes die H"ohe des % Kastens vorgeben. % \else % The main element of a structured box chart is a box, in which an operation is % described. Such a box will be assigned by \cs{assign}. The syntax is the following: % \begin{quote} % \cs{assign}\oarg{height}\marg{content}, % \end{quote} % where the square brackets name an optional element as usual. The width and the % height of the box will be adjusted automatically according to demands. But % one can predefine the height of the box by the optional argument. % \fi % % \ifnum\language=\languageNGerman % Der \textit{Text} wird normalerweise zentriert in den % Kasten gesetzt; ist er daf"ur zu lang, so wird ein Paragraph gesetzt. % \else % The \textit{text} is normally set centered in the box. If the text is too long for % that, then a paragraph is set. % \fi % % \ifnum\language=\languageNGerman % \begin{tExample} % Ein einfaches Struktogramm wird mit den folgenden Anweisungen erzeugt: % \begin{verbatimwrite}{struktex.tmp} % \sProofOn % \begin{struktogramm}(70,20)[1.\ Versuch] % \assign{Quadratwurzel von $\pi$ berechnen und ausgeben} % \end{struktogramm} % \sProofOff % \end{verbatimwrite} % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % Diese Anweisungen f"uhren zu folgendem Struktogramm, wobei der Anwender % wie auch bei der zugrundeliegenden |picture|-Umgebung f"ur eine geeignete % Positionierung zu sorgen hat. Die Positionierung erfolgt in dieser % Dokumentation im Regelfall mit der |quote|-Umgebung, man kann ein % Struktogramm aber auch mit der |center|-Umgebung zentrieren. % Die Breite des Struktogramms ist mit 70mm vorgegeben, die H"ohe mit 12mm. % Eine Alternative ist durch die |centernss|-Umgebung gegeben, % die auf Seite \pageref{centernss} beschrieben wird. % \else % \begin{tExample} % A simple structured box chart will be generated by the following instructions: % \begin{verbatimwrite}{struktex.tmp} % \sProofOn % \begin{struktogramm}(70,20)[1.\ trial] % \assign{Root of $\pi$, calculation and output} % \end{struktogramm} % \sProofOff % \end{verbatimwrite} % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % These instructions lead to the following box chart, at which the user has to % provide an appropriate positioning like in the basing \cs{picture} environment. % Herewith the positioning is normally done by the |quote| environment. But one can % also center the structured box chart by the |center| environment. % The width of the box chart is given by 70mm, the height by 12mm. An alternative % is given by the |centernss| environment, that is described on page % \pageref{centernss} % \fi % % \ifnum\language=\languageNGerman % Gleichzeitig wird die Wirkung von \cs{sProofOn} und \cs{sProffOff} gezeigt, % wobei die zu gro"se vorgegebene Gr"o"se des Struktogrammes zu beachten ist. % \else % At the same time the effect of \cs{sProofOn} and \cs{sProofOff} is shown, % at which the too large size of structured box chart has to be taken notice of. % \fi % \begin{quote} % \input{struktex.tmp} % \end{quote} % \end{tExample} % % \ifnum\language=\languageNGerman % Die Bedeutung des optionalen Argumentes macht das folgende Beispiel deutlich. % \begin{tExample} % Die H"ohe des Kastens wird vorgegeben: % \begin{verbatimwrite}{struktex.tmp} % \begin{center} % \begin{struktogramm}(70,20) % \assign[20]{Quadratwurzel von $\pi$ berechnen und ausgeben} % \end{struktogramm} % \end{center} % \end{verbatimwrite} % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % Diese Anweisungen f"uhren zu folgendem Struktogramm, wobei zu beachten % ist, dass die |struktogramm|-Umgebung mittels einer |center|-Umgebung % zentriert wurde, wobei die Breite des Struktogramms wiederum mit 70mm % vorgegeben ist, die H"ohe diesmal aber mit 20mm. % \else % The meaning of the optional argument will be made clear by the following % example: % \begin{tExample} % The height of the box is given by: % \begin{verbatimwrite}{struktex.tmp} % \begin{center} % \begin{struktogramm}(70,20) % \assign[20]{Root of $\pi$, calculation and output} % \end{struktogramm} % \end{center} % \end{verbatimwrite} % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % These instructions lead to the following structured box chart. In doing so it is to % pay attention on the |struktogramm| environment, which has been centered % by the |center| environment, at which the width of the structured box chart is again % given by 70mm, but the height by 20mm this time. % \fi % \begin{quote} % \input{struktex.tmp} % \end{quote} % \end{tExample} % % \DescribeEnv{declaration} % \ifnum\language=\languageNGerman % Die |declaration|-Umgebung dient der Beschreibung von Variablen bzw. % der Beschreibung der Schnittstelle. Ihre % Syntax ist % \begin{quote}\obeylines % \envb{declaration}\oarg{"Uberschrift} % \dots % \enve{declaration} % \end{quote} % \else % The |declaration| environment is used for the description of variables or interfaces % respectively. Its syntax is given by % \begin{quote}\obeylines % \envb{declaration}\oarg{titel} % \dots % \enve{declaration} % \end{quote} % \fi % % \DescribeMacro{\declarationtitle} % \ifnum\language=\languageNGerman % Die "Uberschriftsangabe ist optional. L"asst man die Angabe weg, so wird % standardm"a"sig die "Uberschrift: "`Speicher bereitstellen:"' erzeugt. % Will man einen anderen Text haben, wird dieser mit % \cs{declarationtitle}\marg{"Uberschrift} global festgelegt. Will man f"ur % ein einzelnes Struktogramm einen speziellen Titel erzeugen, so gibt man % diesen in den eckigen Klammern an. % \else % The declaration of the title is optional. If the declaration is omitted, the standard % title: "'Providing Storage Space:"' will be generated. % If one wants to have another text, it will be provided globally by % \cs{declarationtitle}\marg{title}. If one wants to generate a special title for a % certain structured box chart, one has to declare it within square brackets. % \fi % % \DescribeMacro{\description} % \DescribeMacro{\descriptionindent} % \DescribeMacro{\descriptionwidth} % \DescribeMacro{\descriptionsep} % \changes{v8.0b}{04/07/14}{Zeichnung zum Layout der Deklarationen % verbessert (`multiput statt n-mal `put, Korrektur von Bezeichnungen)} % \ifnum\language=\languageNGerman % Innerhalb der |declaration|-Umgebung werden die Beschreibungen der einzelnen % Variablen mit % \begin{quote} % \cs{description}\marg{Variablenname}\marg{Variablenbeschreibung} % \end{quote} % erzeugt. Dabei ist zu beachten, dass \meta{Variablenname} keine % schlie"sende eckige Klammer "`]"' beinhalten darf, da dieser Makro % mittels des \cs{item}-Makros definiert worden ist. Eckige Klammer sind in % diesem Fall als \cs{lbracket} und \cs{rbracket} einzugeben. % \else % Within the |declaration| environment the descriptions of the variables can be % generated by % \begin{quote} % \cs{description}\marg{variableName}\marg{variableDescription} % \end{quote} % In doing so one has to pay attention on the \meta{variableName}, that is not % allowed to content a right square bracket "']"', because this macro has been % defined by the \cs{item} macros. Square brackets have to be entered as % \cs{lbracket} or \cs{rbracket} respectively. % \fi % % \ifnum\language=\languageNGerman % Das Aussehen einer Beschreibung l"asst sich mit drei Parametern % steuern: \cs{descriptionindent}, \cs{descriptionwidth} und \cs{descriptionsep}; % die Bedeutung der Parameter ist der \Abb{description} zu entnehmen % (\cs{xsize@nss} und \cs{xin@nss} sind interne Gr"o"sen, die von \StrukTeX\ % vorgegeben werden). % Die Vorbesetzung dieser Werte ist folgenderma"sen: % \begin{quote}\begin{verbatim} % \descriptionindent=1.5em % \descriptionwidth=40pt % \descriptionsep=\tabcolsep % \end{verbatim}\end{quote} % Die Bedeutung von \cs{descriptionwidth} ist darin zu sehen, dass ein % Variablenname, der k"urzer als \cs{descriptionwidth} ist, eine Beschreibung % erh"alt, die auf der gleichen H"ohe liegt; ansonsten wird die Beschreibung % eine Zeile tiefer begonnen. % \else % The shape of a description can be controled by three parameters: % \cs{descriptionindent}, \cs{descriptionwidth} and \cs{descriptionsep}. % The meaning of the parameters can be taken from \ref{description} % (\cs{xsize@nss} and \cs{xin@nss} are internal sizes, that are given by % \StrukTeX). % The default values are the following: % \begin{quote}\begin{verbatim} % \descriptionindent=1.5em % \descriptionwidth=40pt % \descriptionsep=\tabcolsep % \end{verbatim}\end{quote} % The significance of \cs{descriptionwidth} is, that a variable name, which % is shorter than \cs{descriptionwidth}, gets a description of the same % height. Otherwise the description will be commenced in the next line. % \fi % \begin{figure}[tb] % \unitlength 1.00mm % \linethickness{0.4pt} % \begin{picture}(125.00,100.00) % \put(0.00,0.00){\framebox(125.00,100.00)[cc]{}} % \put(62.50,95.00){\makebox(0,0)[cc]{{\cs{xsize@nss}}}} % \put(62.50,85.00){\makebox(0,0)[cc]{{\cs{tempxx@nss}}}} % \put(10.00,70.00){\framebox(105.00,5.00)[cc]{}} % \put(15.00,71.00){\makebox(0,0)[lb]{\ifnum\language=\languageNGerman% % \meta{"Uberschrift}% % \else% % \meta{title}% % \fi}} % \put(72.50,95.00){\vector(1,0){52.50}} % \put(52.50,95.00){\vector(-1,0){52.50}} % \put(73.50,85.00){\vector(1,0){41.50}} % \put(51.50,85.00){\vector(-1,0){41.50}} % \put(30.00,56.00){\makebox(0,0)[lb]{\ifnum\language=\languageNGerman% % \meta{Variablenname}% % \else% % \meta{variable name}% % \fi}} % \put(40.00,52.00){\vector(1,0){17.00}} % \put(19.00,57.00){\vector(-1,0){9.00}} % \put(67.00,5.00){\framebox(48.00,5.00)[cc]{}} % \put(67.00,25.00){\framebox(48.00,35.00)[cc]{}} % \put(72.00,56.00){\makebox(0,0)[lb]{\ifnum\language=\languageNGerman% % \meta{Variablenbeschreibung}% % \else% % \meta{variable description}% % \fi}} % \put(72.00,6.00){\makebox(0,0)[lb]{\ifnum\language=\languageNGerman% % \meta{Variablenbeschreibung}% % \else% % \meta{variable description}% % \fi}} % \put(30.00,16.00){\makebox(0,0)[lb]{\ifnum\language=\languageNGerman% % \meta{Variablenname}% % \else% % \meta{variable name}% % \fi}} % \put(25.00,15.00){\framebox(90.00,5.00)[cc]{}} % \put(19.00,57.00){\vector(1,0){6.00}} % \put(40.00,52.00){\vector(-1,0){15.00}} % \put(25.00,50.00){\framebox(32.00,10.00)[cc]{}} % \put(62.00,54.00){\vector(-1,0){5.00}} % \put(62.00,54.00){\vector(1,0){5.00}} % \put(15.00,17.00){\vector(1,0){10.00}} % \put(15.00,17.00){\vector(-1,0){5.00}} % \put(40.00,42.00){\makebox(0,0)[cc]{{\cs{descriptionwidth}}}} % \put(66.00,32.00){\makebox(0,0)[rc]{{\cs{descriptionsep}}}} % \put(12.00,36.00){\makebox(0,0)[lc]{{\cs{descriptionindent}}}} % \multiput(10.00,100.00)(0.00,-3.00){33}{\line(0,-1){2.00}} % \put(10.00,1.00){\line(0,-1){1.00}} % \multiput(115.00,100.00)(0.00,-3.00){33}{\line(0,-1){2.00}} % \put(115.00,1.00){\line(0,-1){1.00}} % \put(60.00,35.00){\line(0,-1){2.00}} % \put(17.00,33.00){\line(0,1){1.00}} % \put(17.00,39.00){\line(0,-1){1.00}} % \put(60.00,35.00){\line(0,1){19.00}} % \put(40.00,43.00){\line(0,1){9.00}} % \put(17.00,57.00){\line(0,-1){18.00}} % \put(17.00,33.00){\line(0,-1){16.00}} % \put(17.00,17.00){\circle*{1.00}} % \put(17.00,57.00){\circle*{1.00}} % \put(40.00,52.00){\circle*{1.00}} % \put(60.00,54.00){\circle*{1.00}} % \end{picture} % \caption{\label{description}\ifnum\language=\languageNGerman Aufbau einer % Variablenbeschreibung % \else Construction of a Variable Description % \fi} % \end{figure} % % \begin{tExample} % \ifnum\language=\languageNGerman % Zun"achst wird nur eine einzelne Variable beschrieben. % \begin{verbatimwrite}{struktex.tmp} % \begin{struktogramm}(95,20) % \assign% % {% % \begin{declaration} % \description{\pVar{iVar}}{eine \pKey{int}-Variable, % deren Beschreibung hier allein dem % Zweck dient, den Makro vorzuf"uhren} % \end{declaration} % } % \end{struktogramm} % \end{verbatimwrite} % \else % First there will be described only one variable. % \begin{verbatimwrite}{struktex.tmp} % \begin{struktogramm}(95,20) % \assign% % {% % \begin{declaration} % \description{\pVar{iVar}}{an \pKey{int} variable, which is % described here just for presentation of the % macro} % \end{declaration} % } % \end{struktogramm} % \end{verbatimwrite} % \fi % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % \ifnum\language=\languageNGerman % Das zugeh"orige Struktogramm, wobei zu beachten ist, dass durch die % leeren eckigen Klammern keine "Uberschrift erzeugt wird. % \else % The corresponding structured box chart is the following, at which one has to % pay attention, that there are no titels generated by the empty square % brackets. % \fi % \begin{quote} % \input{struktex.tmp} % \end{quote} % \ifnum\language=\languageNGerman % Nun werden Variablen genauer spezifiziert: % \begin{verbatimwrite}{struktex.tmp} % \begin{struktogramm}(95,50) % \assign{% % \begin{declaration}[Parameter:] % \description{\pVar{iPar}}{ein \pKey{int}-Parameter, % dessen Bedeutung hier beschrieben wird} % \end{declaration} % \begin{declaration}[lokale Variablen:] % \description{\pVar{iVar}}{eine \pKey{int}-Variable, % deren Bedeutung hier beschrieben wird} % \description{\pVar{dVar}}{eine \pKey{double}-Variable, % deren Bedeutung hier beschrieben wird} % \end{declaration} % } % \end{struktogramm} % \end{verbatimwrite} % \else % Now varibles will be specified more precisely: % \begin{verbatimwrite}{struktex.tmp} % \begin{struktogramm}(95,50) % \assign{% % \begin{declaration}[Parameter:] % \description{\pVar{iPar}}{an \pKey{int} parameter with the % meaning described here} % \end{declaration} % \begin{declaration}[local Variables:] % \description{\pVar{iVar}}{an \pKey{int} variable with the meaning % described here} % \description{\pVar{dVar}}{a \pKey{double} variable with the % meaning described here} % \end{declaration} % } % \end{struktogramm} % \end{verbatimwrite} % \fi % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % \ifnum\language=\languageNGerman % Das ergibt: % \else % This results in: % \fi % \begin{quote} % \input{struktex.tmp} % \end{quote} % % \ifnum\language=\languageNGerman % Zuletzt die globale Vereinbarung eines Titels: % \begin{verbatimwrite}{struktex.tmp} % \def\declarationtitle{globale Variablen:} % \begin{struktogramm}(95,13) % {\catcode`\_=12% % \assign{% % \begin{declaration} % \description{\pVar{iVar_g}}{eine \pKey{int}-Variable} % \end{declaration} % } % } % \end{struktogramm} % \end{verbatimwrite} % \else % Finally the global declaration of a titel: % \begin{verbatimwrite}{struktex.tmp} % \def\declarationtitle{global variables} % \begin{struktogramm}(95,13) % {\catcode`\_=12% % \assign{% % \begin{declaration} % \description{\pVar{iVar_g}}{an \pKey{int} variable} % \end{declaration} % } % } % \end{struktogramm} % \end{verbatimwrite} % \fi % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % \ifnum\language=\languageNGerman % Dies ergibt das folgende Aussehen: % \else % This results in the following shape: % \fi % \begin{quote} % \input{struktex.tmp} % \end{quote} % \ifnum\language=\languageNGerman % Hier ist die lokale Umsetzung des \cs{catcode}s des Unterstrichs zu % beachten, die erforderlich ist, wenn man einen Unterstrich in einem % Makroargument einsetzen m"ochte. Diese lokale Umsetzung wird zwar auch % schon bei \cs{pVar} gemacht, reicht aber bei der Makroexpansionstechnik % von \TeX\ nicht aus. % \else % Here one has to notice the local realisation of the \cs{catcode} of the % underline, which is necessary, if one wants to place an underline into % an argument of macro. Although this local transfer is already realized % at \cs{pVar} it doesn't suffice with the technique of macro expanding % of \TeX. % \fi % \end{tExample} % % \DescribeMacro{\sub} % \DescribeMacro{\return} % \ifnum\language=\languageNGerman % Die Sinnbilder f"ur einen Unterprogrammsprung und einen Aussprung aus dem % Programm sehen "ahnlich aus und werden mit folgenden Befehlen gezeichnet: % \begin{quote}\obeylines % \cs{sub}\oarg{H"ohe}\marg{Text} % \cs{return}\oarg{H"ohe}\marg{Text} % \end{quote} % \else % The mapping conventions for jumps of subprograms and for exits of program % look similar and are drawn by the following instructions: % \begin{quote}\obeylines % \cs{sub}\oarg{height}\marg{text} % \cs{return}\oarg{height}\marg{text} % \end{quote} % \fi % \ifnum\language=\languageNGerman % Die Parameter haben dieselbe Bedeutung wie bei \cs{assign}. % Das n"achste Beispiel zeigt, wie diese Sinnbilder gezeichnet werden.\par % \begin{verbatimwrite}{struktex.tmp} % \begin{struktogramm}(95,20) % \sub{Liste sortieren} % \return{Listenkopf zur"uckgeben} % \end{struktogramm} % \end{verbatimwrite} % \else % The parameters mean the same as at \cs{assign}. The next example % shows how the mapping conventions are drawn.\par % \begin{verbatimwrite}{struktex.tmp} % \begin{struktogramm}(95,20) % \sub{sorting the list} % \return{return of list header} % \end{struktogramm} % \end{verbatimwrite} % \fi % \begin{tExample} % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % \ifnum\language=\languageNGerman % Diese Anweisungen f"uhren zu folgendem Struktogramm: % \else % These instructions lead to the following structured box chart: % \fi % \begin{quote} % \input{struktex.tmp} % \end{quote} % \end{tExample} % %\DescribeMacro{\while} %\DescribeMacro{\whileend} %\DescribeMacro{\until} %\DescribeMacro{\untilend} %\DescribeMacro{\forever} %\DescribeMacro{\foreverend} % \ifnum\language=\languageNGerman % Zum Darstellen von Schleifenkonstrukten stehen die drei Befehle % \cs{while}, \cs{until} und \cs{forever} zur Verf"ugung. % Die While-Schleife stellt % eine Wiederholung mit vorausgehender Bedingungspr"ufung (kopfgesteuerte % Schleife) dar, die % Until-Schleife testet die Bedingung am Schleifenende (fu"sgesteuerte % Schleife) und die % Forever-Schleife ist eine Endlosschleife, aus der man mit dem Befehl % \cs{exit} herausspringen kann. % \begin{quote}\obeylines % \cs{while}\oarg{Breite}\marg{Text}\meta{Unterstruktogramm}\cs{whileend} % \cs{until}\oarg{Breite}\marg{Text}\meta{Unterstruktogramm}\cs{untilend} % \cs{forever}\oarg{Breite}\meta{Unterstruktogramm}\cs{foreverend} % \cs{exit}\oarg{H"ohe}\marg{Text} % \end{quote} % \meta{Breite} ist die Dicke des Rahmens des Sinnbildes, % \meta{Text} ist % der Bedingungstext, der in diesen Rahmen geschrieben wird. Wird die % Breite nicht angegeben, richtet sich die Rahmendicke nach der H"ohe des % Textes. Der Text wird linksb"undig in den Rahmen geschrieben. % Ist der Text leer, so wird ein d"unner Rahmen gezeichnet % \else % For representation of loop constructions there are three instructions % available: % \cs{while}, \cs{until} and \cs{forever}. % The while loop is a repetition with preceding condition check (loop with % test before). % The until loop checks the condition at the end of the loop (loop with % test after). % And the forever loop is a neverending loop, that can be left by \cs{exit}. % \begin{quote}\obeylines % \cs{while}\oarg{width}\marg{text}\meta{structured subbox chart}% % \cs{whileend} % \cs{until}\oarg{width}\marg{text}\meta{structured subbox chart}% % \cs{untilend} % \cs{forever}\oarg{width}\meta{structured subbox chart}\cs{foreverend} % \cs{exit}\oarg{height}\meta{text} % \end{quote} % \meta{width} is the width of frame of the mapping convention and \meta{text} % is the conditioning text, that is written inside this frame. If the width % is not given, the thickness of frame depends on the height of text. The % text will be written left adjusted inside the frame. If there is'nt given % any text, there will be a thin frame. % \fi % % \ifnum\language=\languageNGerman % An Stelle % von \meta{Unterstruktogramm} k"onnen beliebige Befehle von \StrukTeX\ % stehen (mit Ausnahme von \cs{openstrukt} und \cs{closestrukt}), die % das Struktogramm innerhalb der \cs{while}-, der \cs{until}- oder der % \cs{forever}-Schleife % bilden. % \else % Instead of \meta{structured subbox chart} there might be written any % instructions of \StrukTeX\ (except \cs{openstrukt} and \cs{closestrukt}), which % build up the box chart within the \cs{while} loop, the \cs{until} loop or the % \cs{forever} loop. % \fi % % \ifnum\language=\languageNGerman % Um Kompatiblit"at mit der Weiterentwicklung des \StrukTeXSty\ von J.~Dietel % zu erreichen, gibt es die Makros \cs{dfr} und \cs{dfrend} mit derselben % Bedeutung wie \cs{forever} und \cs{foreverend}. % \else % For compatibility with further development of the \StrukTeXSty\ of J.~Dietel % there are the macros \cs{dfr} and \cs{dfrend} with the same meaning as |forever| % and |foreverend|. % \fi % % \ifnum\language=\languageNGerman % Die folgenden Beispiele zeigen den Einsatz der \cs{while}- und \cs{until}-Makros, % \cs{forever} wird weiter unten gezeigt. % \begin{verbatimwrite}{struktex.tmp} % \begin{struktogramm}(95,40) % \assign{\(I \gets 1\)} % \while[8]{\(I < 99\)} % \assign{\(J \gets I+1\)} % \until{\(J < 100\)} % \sub{Vertausche, falls gilt: \(FELD(I) > FELD(J)\)} % \assign{\(J \gets J+1\)} % \untilend % \assign{\(I \gets I+1\)} % \whileend % \end{struktogramm} % \end{verbatimwrite} % \else % The following examples show use of \cs{while} and \cs{until} macros. \cs{forever} % will be shown later. % \begin{verbatimwrite}{struktex.tmp} % \begin{struktogramm}(95,40) % \assign{\(I \gets 1\)} % \while[8]{\(I < 99\)} % \assign{\(J \gets I+1\)} % \until{\(J < 100\)} % \sub{Swap, if valid: \( ARRAY(I) > ARRAY(J) \)} % \assign{\(J \gets J+1\)} % \untilend % \assign{\(I \gets I+1\)} % \whileend % \end{struktogramm} % \end{verbatimwrite} % \fi % \begin{tExample} % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % \ifnum\language=\languageNGerman % Diese Anweisungen f"uhren zu folgendem Struktogramm: % \else % These instructions lead to the following structured box chart: % \fi % \begin{quote} % \input{struktex.tmp} % \end{quote} % \end{tExample} % % \ifnum\language=\languageNGerman % Die \cs{exit}-Anweisung gibt nur im Zusammenhang mit einfachen oder mehrfachen % Verzweigungen Sinn, daher wird sie im Anschluss an die Diskussion der % Verzweigungen diskutiert. % \else % The \cs{exit} instruction makes only sense in connection with simple or % multiple branches. Therefore it will be discussed after the discussion % of branches. % \fi % % \DescribeMacro{\ifthenelse} % \DescribeMacro{\change} % \DescribeMacro{\ifend} % \ifnum\language=\languageNGerman % Zur Darstellung von Alternativen stellt \StrukTeX\ die Sinnbilder f"ur % einen If-Then-Else-Block und f"ur mehrfache Alternativen eine % Case-Konstruktion zur Verf"ugung. Da in der Picture-Umgebung von \LaTeX\ % nur Linien mit bestimmten Steigungen gezeichnet werden k"onnen, muss der % Benutzer bei beiden Befehlen selbst den Winkel bestimmen, mit dem % die notwendigen schr"agen Linien gezeichnet werden sollen (hier ist also % etwas mehr \glq Handarbeit\grq\ n"otig). % \else % For representation of alternatives \StrukTeX\ provides mapping conventions % for an If-Then-Else-block and a Case-construction for multiple alternatives. % Since in the picture environment of \LaTeX\ only lines of certain gradients % can be drawn, in both cases the user has to specify himself the angle, with % which the necessary slanted lines shall be drawn. (Here is a little bit more % \grq handy work\grq\ required.) % \fi % % \changes{6.0}{00/11/24}{Einsatz von curves.sty zum Zeichnen beliebiger Steigungen implementiert} % \ifnum\language=\languageNGerman % Wenn hingegen der der \textsf{curves.sty} bzw. der \textsf{emlines2.sty} % eingesetzt wird, ist die Darstellung von Geraden mit beliebiger Steigung % m"oglich. % \else % If however the \textsf{curves.sty} or the \textsf{emlines2.sty} is used, % then the representation of lines with any gradient can be drawn. % \fi % % \ifnum\language=\languageNGerman % Der If-Then-Else-Befehl sieht so aus: % \begin{quote}\obeylines % \cs{ifthenelse}\oarg{H"ohe}\marg{Linker Winkel}\marg{Rechter Winkel} % ~~~~~~~~\marg{Bedingung}\marg{Linker Text}\marg{Rechter Text} % ~~~~\meta{Unterstruktogramm} % \cs{change} % ~~~~\meta{Unterstruktogramm} % \cs{ifend} % \end{quote} % \else % The If-Then-Else-command looks like: % \begin{quote}\obeylines % \cs{ifthenelse}\oarg{height}\marg{left angle}\marg{right angle} % ~~~~~~~~\marg{condition}\marg{left text}\marg{right text} % ~~~~\meta{structured subbox chart} % \cs{change} % ~~~~\meta{structured subbox chart} % \cs{ifend} % \end{quote} % \fi % \ifnum\language=\languageNGerman % F"ur den Fall, dass das optionale Argument \meta{H"ohe} nicht angegeben % ist, sind \meta{Linker Winkel} (\texttt{\#1}) und \meta{Rechter Winkel} % (\texttt{\#2}) Ziffern % zwischen 1 und 6; diese bestimmen die Steigung der beiden Unterteilungslinien % des If-Then-Else-Blocks (gro"ser Wert = kleine Steigung). Gr"o"sere Werte % werden auf 6 gesetzt, kleinere auf 1. Das genaue % Verhalten der Steigungen ist dem folgenden Bild zu entnehmen; % \cs{xsize@nss} ist % dabei die Breite des aktuellen Unterstruktogrammes. Wird die \meta{H"ohe} % vorgegeben, so bestimmt dieser Wert statt des Ausdruckes % \(\frac{\mbox{\cs{xsize@nss}}}{\mbox{\tt \#1 + \#2}}\) die H"ohe des % Bedingungsrechteckes. % \else % In the case of omitting the optional argument \meta{height} \meta{left % angle} and \meta{right angle} are numbers from 1 to 6. % They specify the gradient of both the partitioning lines of % the If-Then-Else-block (large number = small gradient). Larger values are % put on 6, smaller values on 1. The precise characteristics of the gradients % can be taken from the following picture. Thereby \cs{xsize@nss} is the width % of the actual structured subbox chart. % If the \meta{height} is given, then this value determines the height of the % conditioning rectangle instead of the expression \(\frac{\mbox{\cs{xsize@nss}}} % {\mbox{\tt \#1 + \#2}}\). % \fi % \begin{quote} % \unitlength 1.00mm % \linethickness{0.4pt} % \begin{picture}(100.00,20.00) % \put(10.00,5.00){\framebox(90.00,10.00)[cc]{}} % \put(50.00,18.00){\makebox(0,0)[cc]{\cs{xsize@nss}}} % \put(2.00,10.00){\makebox(0,0)[cc] % {$\frac{\mbox{\tt\char92 xsize@nss}}{\mbox{\tt \#1 + \#2}}$}} % \put(0.00,15.00){\line(1,0){4.00}} % \put(2.00,15.00){\line(0,-1){2.00}} % \put(0.00,5.00){\line(1,0){4.00}} % \put(2.00,5.00){\line(0,1){2.00}} % \put(10.00,4.00){\line(0,-1){4.00}} % \put(40.00,4.00){\line(0,-1){4.00}} % \put(100.00,0.00){\line(0,1){4.00}} % \put(70.00,2.00){\makebox(0,0)[cc] % {\tt \#2 $\cdot\frac{\mbox{\cs{xsize@nss}}}{\mbox{\tt \#1 + \#2}}$}} % \put(25.00,2.00){\makebox(0,0)[cc] % {\tt \#1 $\cdot\frac{\mbox{\cs{xsize@nss}}}{\mbox{\tt \#1 + \#2}}$}} % \put(10.00,2.00){\line(1,0){5.00}} % \put(35.00,2.00){\line(1,0){25.00}} % \put(80.00,2.00){\line(1,0){20.00}} % \put(10.00,16.00){\line(0,1){4.00}} % \put(100.00,16.00){\line(0,1){4.00}} % \put(10.00,18.00){\line(1,0){30.00}} % \put(60.00,18.00){\line(1,0){40.00}} % \put(10.00,15.00){\line(3,-1){30.00}} % \put(40.00,5.00){\line(6,1){60.00}} % \end{picture} % \end{quote} % \ifnum\language=\languageNGerman % \meta{Bedingung} % wird in das so gebildete obere mittlere Dreieck gesetzt; die Parameter % \meta{Linker Text} und \meta{Rechter Text} werden in das % linke bzw.\ rechte % untere Dreieck gesetzt. Der Bedingungs-Text kann in seinem Dreiecks-Feld % umgebrochen werden. Ab Version 5.3 wird der Bedingungstext durch % geeigneten Umbruch beliebigen Steigungen angepasst.\footnote{Diese % Erweiterung stammt von Daniel Hagedorn, dem ich hiermit herzlich danken % m"ochte} Die beiden anderen Texte sollten kurz sein (\zB\ % ja/nein oder true/false), da sie nicht umgebrochen werden k"onnen und % sonst "uber ihr Dreiecks-Feld hinausragen. Um an dieser Stelle % Einheitlichkeit zu erzielen, sollten die Makros \cs{pTrue} und \cs{pFalse} % benutzt werden. Hinter \cs{ifthenelse} % werden die Befehle f"ur das linke, hinter \cs{change} die f"ur das % rechte "`Unterstruktogramm"' geschrieben. Falls diese beiden % Struktogramme nicht gleich lang sind, wird ein Kasten mit einem $\emptyset$ % erg"anzt.\footnote{Eventuell ist ein \cs{strut} hilfreich, um % unterschiedliche H"ohen von Texten auszugleichen.} Mit \cs{ifend} wird das % If-Then-Else-Element beendet. % Es folgen zwei Beispiele f"ur die Anwendung. % \begin{verbatimwrite}{struktex.tmp} % \begin{struktogramm}(95,32) % \ifthenelse[12]{1}{2} % {Flag f"ur Drucker-Ausgabe gesetzt ?}{\sTrue}{\sFalse} % \assign[15]{Ausgabe auf Drucker umleiten} % \change % \assign{Ausgabe auf den Bildschirm} % \ifend % \end{struktogramm} % \end{verbatimwrite} % \else % \meta{condition} is set in the upper triangle built in the above way. The % parameters \meta{left text} and \meta{right text} are set in the left or % right lower triangle respectively. The conditioning text can be made up % in its triangle box. From version 5.3 on the conditioning text \ldots % \footnote{This extension is due to Daniel Hagedorn, whom I have to thank % for his work.} Both the other texts should be short (e.g. yes/no or % true/false), since they can't be made up and otherwise they stand out from % their triangle box. For obtaining uniformity here the macros \cs{pTrue} and % \cs{pFalse} should be used. Behind \cs{ifthenelse} the instructions for the % left "'structured subbox chart"' % are written and behind \cs{change} the instructions for the right % "'structured subbox chart"' are written. If these two box charts have not % the same length, then a box with $\emptyset$ will be completioned. % The If-Then-Else-element is finished by \cs{ifend}. In the following there % are two examples for application. % \begin{verbatimwrite}{struktex.tmp} % \begin{struktogramm}(95,32) % \ifthenelse[12]{1}{2} % {Flag for Output on Printer set ?}{\sTrue}{\sFalse} % \assign[15]{Output directed to Printer} % \change % \assign{Output on Screen} % \ifend % \end{struktogramm} % \end{verbatimwrite} % \fi % \begin{tExample} % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % \ifnum\language=\languageNGerman % Diese Anweisungen f"uhren zu folgendem Struktogramm: % \else % These instructions lead to the following structured box chart: % \fi % \begin{quote} % \input{struktex.tmp} % \end{quote} % \end{tExample} % \ifnum\language=\languageNGerman % \begin{verbatimwrite}{struktex.tmp} % \begin{struktogramm}(90,30) % \ifthenelse{3}{4} % {Flag f"ur Drucker-Ausgabe gesetzt ?}{\sTrue}{\sFalse} % \assign[15]{Ausgabe auf Drucker umleiten} % \change % \assign{Ausgabe auf den Bildschirm} % \ifend % \end{struktogramm} % \end{verbatimwrite} % \else % \begin{verbatimwrite}{struktex.tmp} % \begin{struktogramm}(90,30) % \ifthenelse{3}{4} % {Output on Printer set ?}{\sTrue}{\sFalse} % \assign[15]{Output on Printer diverted} % \change % \assign{Output on Screen} % \ifend % \end{struktogramm} % \end{verbatimwrite} % \fi % \begin{tExample} % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % \ifnum\language=\languageNGerman % Diese Anweisungen f"uhren zu folgendem Struktogramm: % \else % These instructions lead to the following structured box chart: % \fi % \begin{quote} % \input{struktex.tmp} % \end{quote} % \end{tExample} % % \DescribeMacro{\case} % \DescribeMacro{\switch} % \DescribeMacro{\caseend} % \ifnum\language=\languageNGerman % Das Case-Konstrukt hat folgende Syntax: % \begin{quote}\obeylines % \cs{case}\oarg{H"ohe}\marg{Winkel}\marg{Anzahl der F"alle}\marg{Bedingung}\marg{Text des 1. Falles} % ~~~~\meta{Unterstruktogramm} % \cs{switch}\oarg{Position}\marg{Text des 2. Falles} % ~~~~\meta{Unterstruktogramm} % \dots % \cs{switch}\oarg{Position}\marg{Text des n.\ Falles} % ~~~~\meta{Unterstruktogramm} % \cs{caseend} % \end{quote} % \else % The Case-Construct has the following syntax: % \begin{quote}\obeylines % \cs{case}\oarg{height}\marg{angle}\marg{number of cases}\marg{condition}\marg{text of 1. case}|}| % ~~~~\meta{structured subbox chart} % \cs{switch}\oarg{position}\marg{text of 2. case} % ~~~~\meta{structured subbox chart} % \dots % \cs{switch}\oarg{position}\marg{text of n.\ case} % ~~~~\meta{structured subbox chart} % \cs{caseend} % \end{quote} % \fi % \ifnum\language=\languageNGerman % Ist die \meta{H"ohe} nicht angegeben, so erh"alt die Unterteilungslinie % des Case-Sinnbildes die durch \meta{Winkel} angegebene Steigung (die bei % \cs{ifthenelse} erw"ahnten Winkelwerte). In das obere der durch diese % Linie entstandenen beiden Dreieck wird der Text \meta{Bedingung} % gesetzt. Die Gr"o"senverh"altnisse ergeben sich aus der folgenden Skizze % (\cs{xsize@nss} ist die aktuelle Breite des (Unter-)Struktogramms): % \else % If the \meta{height} is not given, then the partitioning line of the % mapping convention of case gets the gradient given by \meta{angle} (those % values mentioned at \cs{ifthenelse}). The text \meta{condition} is set % into the upper of the both triangles built by this line. The proportions % are sketched below: % \fi % \begin{center} % \label{case1} % \unitlength 1.00mm % \linethickness{0.4pt} % \begin{picture}(64.00,40.00) % \put(9.00,5.00){\framebox(50.00,30.00)[cc]{}} % \put(9.00,36.00){\line(0,1){4.00}} % \put(9.00,38.00){\line(1,0){15.00}} % \put(34.00,38.00){\makebox(0,0)[cc]{\cs{xsize@nss}}} % \put(44.00,38.00){\line(1,0){15.00}} % \put(59.00,40.00){\line(0,-1){4.00}} % \put(0.00,35.00){\line(1,0){4.00}} % \put(2.00,35.00){\line(0,-1){10.00}} % \put(2.00,15.00){\line(0,-1){10.00}} % \put(0.00,5.00){\line(1,0){4.00}} % \put(2.00,20.00){\makebox(0,0)[cc]{% % $\frac{\mbox{\cs{xsize@nss}}}{\mbox{\tt\#1}}$}} % \put(9.00,35.00){\line(5,-3){50.00}} % \put(29.00,5.00){\line(0,1){18.00}}% % \put(9.00,0.00){\line(0,1){4.00}} % \put(29.00,0.00){\line(0,1){4.00}} % \put(19.00,2.00){\makebox(0,0)[cc]{% % $\frac{\mbox{\cs{xsize@nss}}}{\mbox{\tt\#2}}$}} % \put(60.00,35.00){\line(1,0){4.00}} % \put(60.00,23.00){\line(1,0){4.00}} % \put(62.00,35.00){\line(0,-1){2.00}} % \put(62.00,23.00){\line(0,1){2.00}} % \put(62.00,29.00){\makebox(0,0)[cc]{% % $\frac{\mbox{\tt\#2}\cdot\mbox{\cs{xsize@nss}}} % {\mbox{\tt\#1}}$}} % \end{picture} % \end{center} % \ifnum\language=\languageNGerman % Der zweite Parameter \meta{Anzahl der F"alle} gibt die Anzahl der zu % zeichnenden F"alle an; alle Unterstruktogramme der einzelnen F"alle % erhalten die gleiche Breite. Der \meta{Text des 1. Falles} muss als % Parameter des \cs{case}-Befehls angegeben werden, alle weiteren F"alle % werden "uber den \cs{switch}-Befehl eingeleitet. Hinter dem Text folgen % dann die Befehle f"ur das eigentliche Unterstruktogramm des jeweiligen % Falles. Der letzte Fall wird mit \cs{caseend} abgeschlossen. Ein % Case-Sinnbild mit drei F"allen zeigt das folgende Beispiel. % \else % The second parameter \meta{number of cases} specifies the number of % cases, that have to be drawn. All structured subbox charts of the % certain cases get the same width. The \meta{text of 1. case} has to be % given as a parameter of the \cs{case} instruction. All other cases are % introduced by the \cs{switch} instruction. Behind the text the % instructions for the proper structured subbox chart of certain case % follow. The last case is finished by \cs{caseend}. A mapping convention % of case with three cases is shown in the following example. % \fi % % \ifnum\language=\languageNGerman % \begin{tExample} % \begin{verbatimwrite}{struktex.tmp} % \begin{struktogramm}(95,30) % \case{4}{3}{Signum(x)}{-1} % \assign{$z \gets - \frac{1}{x}$} % \switch{0} % \assign{Ausgabe: Division durch 0} % \switch{1} % \assign{$z \gets \frac{1}{x}$} % \caseend % \end{struktogramm} % \end{verbatimwrite} % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % Diese Anweisungen f"uhren zu folgendem Struktogramm: % \else % \begin{tExample} % \begin{verbatimwrite}{struktex.tmp} % \begin{struktogramm}(95,30) % \case{4}{3}{Signum(x)}{-1} % \assign{$z \gets - \frac{1}{x}$} % \switch{0} % \assign{Output: Division by 0} % \switch{1} % \assign{$z \gets \frac{1}{x}$} % \caseend % \end{struktogramm} % \end{verbatimwrite} % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % These instructions lead to the following structured box chart: % \fi % \begin{quote} % \input{struktex.tmp} % \end{quote} % \end{tExample} % % \ifnum\language=\languageNGerman % Der optionale Parameter \oarg{H"ohe} ist nur einzusetzen, wenn die Option % "`|curves|"', "`|emlines2|"' oder "`|pict2e|"' gesetzt ist; ist das nicht % der Fall, k"onnen die Struktogramme durcheinander kommen. Die % Erweiterung des \cs{switch}-Kommandos mit \oarg{H"ohe} f"uhrt zu einer % anderen Bedeutung von \meta{Winkel}. Ist der Wert gerade, wird wie zuvor % eine gerade Linie zur Aufteilung des zugrundeliegenden Rechtecks % gezeichnet; ist der Wert hingegegen ungerade, wird der letzte Fall wie im % folgenden gezeigt als Sonderfall gezeichnet. % \else % The optional parameter \oarg{height} can be used if and only if one of % the options ``curves'', ``emlines2'' or ``pict2e'', resp. is set; if this % is not the case, the structured chart box may be scrumbled up. The % extension of the \cs{switch} instruction by \oarg{height} results in the % following shape with a different gradient of a slanted line, which now is % fixed by the height given by the optional parameter. If the value of the % parameter \meta{angle} is even, a straight line is drawn as before. If % the value is odd, the last case is drawn as a special case as showed % below. %\fi % \begin{center} % \label{case2} % \unitlength 1.00mm % \linethickness{0.4pt} % \begin{picture}(69.00,30.00) % \put(9.00,5.00){\framebox(60.00,20.00)[cc]{}} % \put(9.00,26.00){\line(0,1){4.00}} % \put(9.00,28.00){\line(1,0){20.00}} % \put(39.00,28.00){\makebox(0,0)[cc]{\cs{xsize@nss}}} % \put(49.00,28.00){\line(1,0){20.00}} % \put(69.00,30.00){\line(0,-1){4.00}} % \put(0.00,25.00){\line(1,0){4.00}} % \put(2.00,25.00){\line(0,-1){5.00}} % \put(2.00,10.00){\line(0,-1){5.00}} % \put(0.00,5.00){\line(1,0){4.00}} % \put(2.00,15.00){\makebox(0,0)[cc]{% % \ifnum\language=\languageNGerman\meta{H"ohe}\else\meta{height}\fi}} % \put(29.00,5.00){\line(0,1){13.33}} % \put(9.00,25.00){\line(6,-2){60.00}} % \put(9.00,0.00){\line(0,1){4.00}} % \put(29.00,0.00){\line(0,1){4.00}} % \put(19.00,2.00){\makebox(0,0)[cc]{$\frac{\mbox{\cs{xsize@nss}}}{\mbox{\tt\#2}}$}} % \put(70.00,25.00){\line(1,0){4.00}} % \put(70.00,18.33){\line(1,0){4.00}} % \put(72.00,25.00){\line(0,-1){1.00}} % \put(72.00,18.33){\line(0,1){1.00}} % \put(72.00,21.66){\makebox(0,0)[cc]{% % $\frac{\mbox{\ifnum\language=\languageNGerman\meta{H"ohe}\else % \meta{height}\fi}}{\mbox{\tt\#2}}$}} % \end{picture} % \vspace{5mm} % \begin{picture}(69.00,30.00) % \put(9.00,5.00){\framebox(60.00,20.00)[cc]{}} % \put(9.00,26.00){\line(0,1){4.00}} % \put(9.00,28.00){\line(1,0){20.00}} % \put(39.00,28.00){\makebox(0,0)[cc]{\cs{xsize@nss}}} % \put(49.00,28.00){\line(1,0){20.00}} % \put(69.00,30.00){\line(0,-1){4.00}} % \put(0.00,25.00){\line(1,0){4.00}} % \put(2.00,25.00){\line(0,-1){5.00}} % \put(2.00,10.00){\line(0,-1){5.00}} % \put(0.00,5.00){\line(1,0){4.00}} % \put(2.00,15.00){\makebox(0,0)[cc]{% % \ifnum\language=\languageNGerman\meta{H"ohe}\else\meta{height}\fi}} % \put(29.00,5.00){\line(0,1){10.00}} % \put(9.00,25.00){\line(4,-2){40.00}} % \put(49.00,5.00){\line(2,2){20.00}} % \put(9.00,0.00){\line(0,1){4.00}} % \put(29.00,0.00){\line(0,1){4.00}} % \put(19.00,2.00){\makebox(0,0)[cc]{% % $\frac{\mbox{\cs{xsize@nss}}}{\mbox{\tt\#2}}$}} % \put(70.00,25.00){\line(1,0){4.00}} % \put(70.00,15.00){\line(1,0){4.00}} % \put(72.00,25.00){\line(0,-1){2.00}} % \put(72.00,15.00){\line(0,1){2.00}} % \put(72.00,20.00){\makebox(0,0)[cc]{% % $\displaystyle\frac{\mbox{\ifnum\language=\languageNGerman % \meta{H"ohe}\else\meta{height}\fi}}{\mbox{\tt\#2}-1}$}} % \end{picture} % \end{center} % % \ifnum\language=\languageNGerman % \begin{tExample}{} % \begin{verbatimwrite}{struktex.tmp} % \begin{struktogramm}(95,30) % \case[10]{4}{3}{Signum(x)}{-1} % \assign{$z \gets - \frac{1}{x}$} % \switch{0} % \assign{Ausgabe: Division durch 0} % \switch{1} % \assign{$z \gets \frac{1}{x}$} % \caseend % \end{struktogramm} % \end{verbatimwrite} % \else % \begin{tExample}{} % \begin{verbatimwrite}{struktex.tmp} % \begin{struktogramm}(95,30) % \case[10]{4}{3}{Signum(x)}{-1} % \assign{$z \gets - \frac{1}{x}$} % \switch{0} % \assign{Output: Division by 0} % \switch{1} % \assign{$z \gets \frac{1}{x}$} % \caseend % \end{struktogramm} % \end{verbatimwrite} % \fi % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % \ifnum\language=\languageNGerman % Diese Anweisungen f"uhren zu folgendem Struktogramm: % \else % These instructions lead to the following structured box chart: % \fi % \begin{quote} % \input{struktex.tmp} % \end{quote} % \end{tExample} % % \ifnum\language=\languageNGerman % Ist der erste Parameter hingegen ungerade, wird ein Standardzweig % gezeichnet; der Wert f"ur den Standardfall sollte dann rechtsb"undig % ausgerichtet werden. % \begin{tExample} % \begin{verbatimwrite}{struktex.tmp} % \begin{struktogramm}(95,30) % \case[10]{5}{3}{Signum(x)}{-1} % \assign{$z \gets - \frac{1}{x}$} % \switch{1} % \assign{$z \gets \frac{1}{x}$} % \switch[r]{0} % \assign{Ausgabe: Division durch 0} % \caseend % \end{struktogramm} % \end{verbatimwrite} % \else % But if the first parameter is odd, then a default branch is drawn; the % value for the default branch should be set flushed right. % \begin{tExample} % \begin{verbatimwrite}{struktex.tmp} % \begin{struktogramm}(95,30) % \case[10]{5}{3}{Signum(x)}{-1} % \assign{$z \gets - \frac{1}{x}$} % \switch{1} % \assign{$z \gets \frac{1}{x}$} % \switch{0} % \assign{Output: Division by 0} % \caseend % \end{struktogramm} % \end{verbatimwrite} % \fi % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % \ifnum\language=\languageNGerman % Diese Anweisungen f"uhren zu folgendem Struktogramm: % \else % These instructions lead to the following structured box chart: % \fi % \begin{quote} % \input{struktex.tmp} % \end{quote} % \end{tExample} % % \ifnum\language=\languageNGerman % Das folgende Beispiel zeigt, wie mittels einfacher Verzweigung aus einer % Endlosschleife gesprungen werden kann. Das Beispiel l"asst sich ohne % weiteres auf eine mehrfache Verzweigung "ubertragen. % \begin{verbatimwrite}{struktex.tmp} % \begin{struktogramm}(95,40) % \forever % \assign{lies Zeichen} % \ifthenelse{3}{3}{Zeichen = 'E'?} % {j}{n} % \exit{Sprung hinter Schleife} % \change % \ifend % \assign{Gib Zeichen aus} % \foreverend % \end{struktogramm} % \end{verbatimwrite} % \else % The following example shows, how one can exit a neverending loop by a simple % branch. The example is transferable to a multiple branch without much effort. % \begin{verbatimwrite}{struktex.tmp} % \begin{struktogramm}(95,40) % \forever % \assign{read character} % \ifthenelse{3}{3}{character = 'E'} % {y}{n} % \exit{Jump behind the Loop} % \change % \ifend % \assign{Put out Character} % \foreverend % \end{struktogramm} % \end{verbatimwrite} % \fi % \begin{tExample} % \ifnum\language=\languageNGerman % \begin{verbatimwrite}{struktex.tmp} % \begin{struktogramm}(95,40) % \forever % \assign{lies Zeichen} % \ifthenelse{3}{3}{Zeichen = 'E'?} % {j}{n} % \exit{Sprung hinter Schleife} % \change % \ifend % \assign{Gib Zeichen aus} % \foreverend % \end{struktogramm} % \end{verbatimwrite} % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % Diese Anweisungen f"uhren zu folgendem Struktogramm: % \else % \begin{verbatimwrite}{struktex.tmp} % \begin{struktogramm}(95,40) % \forever % \assign{read character} % \ifthenelse{3}{3}{character = 'E'} % {y}{n} % \exit{Jump behind the Loop} % \change % \ifend % \assign{Put out character} % \foreverend % \end{struktogramm} % \end{verbatimwrite} % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % These instructions lead to the following structured box chart: % \fi % \begin{quote} % \input{struktex.tmp} % \end{quote} % \end{tExample} % % \DescribeEnv{centernss} % \label{centernss} % \ifnum\language=\languageNGerman % Soll ein Struktogramm zentriert dargestellt werden, so wird dazu die % Umgebung % \else % If a structured box chart shall be represented centered, then the environment % \fi % \begin{quote}\obeylines % \envb{centernss} % ~~~~\meta{Struktogramm} % \enve{centernss} % \end{quote} % \ifnum\language=\languageNGerman % benutzt: % \begin{verbatimwrite}{struktex.tmp} % \begin{centernss} % \begin{struktogramm}(90,35) % \ifthenelse{2}{4} % {Flag f"ur Drucker-Ausgabe gesetzt?}{\sTrue}{\sFalse}% % \assign[20]{Ausgabe auf Drucker umleiten} % \change % \assign{Ausgabe auf den Bildschirm} % \ifend % \end{struktogramm} % \end{centernss} % \end{verbatimwrite} % \else % is used: % \begin{verbatimwrite}{struktex.tmp} % \begin{centernss} % \begin{struktogramm}(90,35) % \ifthenelse{2}{4} % {Is Flag for Output on Printer set?}{\sTrue}{\sFalse}% % \assign[20]{Output on Printer diverted} % \change % \assign{Output on Screen} % \ifend % \end{struktogramm} % \end{centernss} % \end{verbatimwrite} % \fi % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % \ifnum\language=\languageNGerman % Das f"uhrt zu folgendem: % \else % This leads to the following: % \fi % \begin{quote} % \input{struktex.tmp} % \end{quote} % % \DescribeMacro{\CenterNssFile} % \ifnum\language=\languageNGerman % H"aufig gibt es den Fall, dass Struktogramme in eigenen Dateien abgelegt % werden, damit sie f"ur sich allein auf Korrektheit getestet werden % k"onnen oder in anderen Zusammenh"angen genutzt werden k"onnen. % Sollen sie zentriert eingebunden werden, kann nicht mit der folgenden % Konstruktion gearbeitet werden: % \else % In many cases structured box charts are recorded in particular files such, that % they can be tested seperately, if they are correct, or that they can be used % in other connections. If they should be included centeredly, then one can not % use the following construction: % \fi % \begin{verbatimwrite}{struktex.tmp} % \begin{center} % \input{...} % \end{center} % \end{verbatimwrite} % \begin{quote} % \verbatiminput{struktex.tmp} % \end{quote} % \ifnum\language=\languageNGerman % da auf diese Weise der gesamte Text innerhalb des Struktogramms zentriert % w"urde. Um diesen Fall einfach und korrekt abhandeln zu k"onnen, kann das % Makro \cs{CenterNssFile} eingesetzt werden, das auch in der Schreibweise % |centernssfile| definert ist. Voraussetzung ist, dass die Datei, % die die Anweisungen f"ur das Struktogramm enth"alt, die % Dateinamenserweiterung |.nss| hat, der Name der einzubindenden Datei % \emph{muss} demzufolge ohne Erweiterung angegeben werden. Wenn die Datei % |struktex-test-0.nss| das in Abschnitt~\ref{Beispiel}, Zeile 2--10 gezeigte % Aussehen hat, so f"uhrt die Anweisung % \else % since this way the whole text in structured box chart would be centered. % To deal with this case in a simple and correct way the macro \cs{CenterNssFile} % can be used. It is also defined in the style |centernssfile|. This requires, that the % file containing the instructions for the structured box chart has the file name % extension |.nss|. That is why the name of the file, that has to be tied in, % \emph{must} be stated without extension. If the file |struktex-test-0.nss| has the shape % shown in paragraph~\ref{example}, line 2--10 the instruction % \fi % \begin{quote} % |\centernssfile{struktex-test-0}| % \end{quote} % \ifnum\language=\languageNGerman % zu folgendem Aussehen des formatierten Textes: % \else % leads to the following shape of the formatted text: % \fi % \bgroup\catcode`\%=14\centernssfile{struktex-test-0}\egroup % % \DescribeMacro{\openstrukt} % \DescribeMacro{\closestrukt} % \ifnum\language=\languageNGerman % Diese beiden Makros sind nur der Kompatibilit"at zu vorherigen Versionen % von \StrukTeX\ willen noch erhalten. Von der Bedeutung her entsprechen sie % \cs{struktogramm} und \cs{endstruktogramm}. Die Syntax ist % \else % These two macros are only preserved because of compatibility reasons with % previous versions of \StrukTeX\. Their meaning is the same as \cs{struktogramm} % and \cs{endstruktogramm}. The syntax is % \fi % \begin{quote} % \cs{openstrukt}\marg{\ifnum\language=\languageNGerman Breite \else width \fi}\marg{\ifnum\language=\languageNGerman H"ohe \else height \fi} % \end{quote} % \ifnum\language=\languageNGerman % und % \else % and % \fi % \begin{quote} % \cs{closestrukt}. % \end{quote} % % \section{\ifnum\language=\languageNGerman Beipieldatei zum Einbinden in die Dokumentation\label{Beispiel} % \else Example File for tieing in the Documentation\label{Example} % \fi} % % \ifnum\language=\languageNGerman % Die folgenden Zeilen bilden eine Beispieldatei, die bei der Erstellung % dieser Dokumentation ben"otigt wird. % \else % The following lines build up an example file, which is needed for the % preparation of this documentation; there is only an german version. % \fi % \iffalse %<*example1> % \fi % \begin{macrocode} \begin{struktogramm}(95,40)[Text] \case[10]{3}{3}{Signum(x)}{-1} \assign{\(z \gets - \frac{1}{x}\)} \switch{0} \assign{Ausgabe: Division durch 0} \switch[r]{1} \assign{\(z \gets \frac{1}{x}\)} \caseend \end{struktogramm} % \end{macrocode} % \iffalse % % \fi % % \section{\ifnum\language=\languageNGerman % Verschiedene Beispieldateien % \else % Some Example Files % \fi} % % \subsection[\ifnum\language=\languageNGerman Beispieldatei Nr. 1\else Example % File No 1\fi]{\ifnum\language=\languageNGerman % Beispieldatei zum Austesten der Makros des \StrukTeXSty{} ohne die % Benutzung optionaler Pakete % \else % Example File for Testing Purposes of the Macros of \StrukTeXSty{} % without any Optional Packages % \fi} % % \changes{v4.1c}{95/07/24}{Eigene Datei zum Austesten der Makros integriert} % \ifnum\language=\languageNGerman % Die folgenden Zeilen bilden eine Musterdatei, die zum Austesten % der Makros benutzt werden kann. Der Inhalt ist nur in Englisch % vorhanden. % \else % The following lines build up a model file, that can be used for testing % the macros. % \fi % \iffalse %<*example2> % \fi % \begin{macrocode} \documentclass{article} \usepackage{struktex} \begin{document} %\sProofOn{} \begin{struktogramm}(90,137) \assign% { \begin{declaration}[] \description{\(a, b, c\)}{three variables which are to be sorted} \description{\(tmp\)}{temporary variable for the circular swap} \end{declaration} } \ifthenelse{1}{2}{\(a\le c\)}{j}{n} \change \assign{\(tmp\gets a\)} \assign{\(a\gets c\)} \assign{\(c\gets tmp\)} \ifend \ifthenelse{2}{1}{\(a\le b\)}{j}{n} \ifthenelse{1}{1}{\(b\le c\)}{j}{n} \change \assign{\(tmp\gets c\)} \assign{\(c\gets b\)} \assign{\(b\gets tmp\)} \ifend \change \assign{\(tmp\gets a\)} \assign{\(a\gets b\)} \assign{\(b\gets tmp\)} \ifend \end{struktogramm} \end{document} % \end{macrocode} % \iffalse % % \fi % % % \subsection[\ifnum\language=\languageNGerman Beispieldatei Nr. 2\else Example % File No 2\fi]{\ifnum\language=\languageNGerman % Beispieldatei zum Austesten der Makros des \StrukTeXSty{} mit dem Paket % \textsf{pict2e.sty} % \else % Example File for Testing Purposes of the Macros of \StrukTeXSty{} % with the package \textsf{pict2e.sty} % \fi} %% % \changes{v4.1c}{95/07/24}{Eigene Datei zum Austesten der Makros integriert} % \ifnum\language=\languageNGerman % Die folgenden Zeilen bilden eine Musterdatei, die zum Austesten % der Makros benutzt werden kann. Der Inhalt ist nur in Englisch % vorhanden. % \else % The following lines build up a template file, that can be used for testing % the macros. % \fi % \iffalse %<*example3> % \fi % \begin{macrocode} \documentclass{article} \usepackage[pict2e, verification]{struktex} \begin{document} \def\StruktBoxHeight{7} %\sProofOn{} \begin{struktogramm}(90,137) \assign% { \begin{declaration}[] \description{\(a, b, c\)}{three variables which are to be sorted} \description{\(tmp\)}{temporary variable for the circular swap} \end{declaration} } \assert[\StruktBoxHeight]{\sTrue} \ifthenelse[\StruktBoxHeight]{1}{2}{\(a\le c\)}{j}{n} \assert[\StruktBoxHeight]{\(a\le c\)} \change \assert[\StruktBoxHeight]{\(a>c\)} \assign[\StruktBoxHeight]{\(tmp\gets a\)} \assign[\StruktBoxHeight]{\(a\gets c\)} \assign[\StruktBoxHeight]{\(c\gets tmp\)} \assert[\StruktBoxHeight]{\(a %\fi % % \subsection[\ifnum\language=\languageNGerman Beispieldatei Nr. 3\else Example % File No 3\fi]{\ifnum\language=\languageNGerman % Beispieldatei zum Austesten der Makros des \textsf{struktxp.sty} % \else % Example File for Testing the Macros of \textsf{struktxp.sty} % \fi} % % \ifnum\language=\languageNGerman % Die folgenden Zeilen bilden eine Musterdatei, die zum Austesten % der Makros des \textsf{struktxp.sty} benutzt werden kann. Zum Testen % sollten auch die Kommentarzeichen vor der Zeile % |\usepackage[T1]{fontenc}| gel"oscht werden. Der Text ist nur in Englisch % vorgegeben. % \else % The following lines build a model file, which can be used for testing the macros % of \textsf{struktxp.sty}. For testing one should delete the comment characters % before the line |\usepackage[T1]{fontenc}|. % \fi % \iffalse %<*example4> % \fi % \begin{macrocode} \documentclass{article} \usepackage{struktxp,struktxf} \nofiles \begin{document} \pLanguage{Pascal} \section*{Default values (Pascal):} {\obeylines Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i} Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__} in math mode: \(\pVar{a}+\pVar{iV_g}\) boolean values: \sTrue, \sFalse, \pTrue, \pFalse } \paragraph{After changing the boolean values with} \verb-\pBoolValue{yes}{no}-: {\obeylines \pBoolValue{yes}{no} boolean values: \sTrue, \sFalse, \pTrue, \pFalse } \paragraph{after changing the fonts with} \verb-\pFonts{\itshape}{\sffamily\bfseries}{}-: {\obeylines \pFonts{\itshape}{\sffamily\bfseries}{} Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i} Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__} in math mode: \(\pVar{a}+\pVar{iV_g}\) boolean values: \sTrue, \sFalse, \pTrue, \pFalse } \paragraph{after changing the fonts with} \verb-\pFonts{\ttfamily}{\ttfamily\bfseries}{\ttfamily\slshape}-: {\obeylines \pFonts{\ttfamily}{\ttfamily\bfseries}{\ttfamily\slshape} Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i} Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__} in math mode: \(\pVar{a}+\pVar{iV_g}\) boolean values: \sTrue, \sFalse, \pTrue, \pFalse } \paragraph{after changing the fonts with} \verb-\pFonts{\itshape}{\bfseries\itshape}{}-: {\obeylines \pFonts{\itshape}{\bfseries\itshape}{} Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i} Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__} in math mode: \(\pVar{a}+\pVar{iV_g}\) boolean values: \sTrue, \sFalse, \pTrue, \pFalse \vspace{15pt} Without \textit{italic correction}: M \pVar{M} M \pKey{M} M. \pVar{M}. M. \pKey{M}. M. } \pLanguage{C} \pBoolValue{\texttt{WAHR}}{\texttt{FALSCH}} \section*{Default values (C):} {\obeylines Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i} Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__} in math mode: \(\pVar{a}+\pVar{iV_g}\) boolean values: \sTrue, \sFalse, \pTrue, \pFalse } \paragraph{After changing the boolean values with} \verb-\pBoolValue{\texttt{yes}}{\texttt{no}}-: {\obeylines \pBoolValue{\texttt{yes}}{\texttt{no}} boolean values: \sTrue, \sFalse, \pTrue, \pFalse } \paragraph{after changing the fonts with} \verb-\pFonts{\itshape}{\sffamily\bfseries}{}-: {\obeylines \pFonts{\itshape}{\sffamily\bfseries}{} Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i} Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__} in math mode: \(\pVar{a}+\pVar{iV_g}\) boolean values: \sTrue, \sFalse, \pTrue, \pFalse } \paragraph{after changing the fonts with} \verb-\pFonts{\ttfamily}{\ttfamily\bfseries}{\ttfamily\slshape}-: {\obeylines \pFonts{\ttfamily}{\ttfamily\bfseries}{\ttfamily\slshape} Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i} Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__} in math mode: \(\pVar{a}+\pVar{iV_g}\) boolean values: \sTrue, \sFalse, \pTrue, \pFalse } \paragraph{after changing the fonts with} \verb-\pFonts{\itshape}{\bfseries\itshape}{}-: {\obeylines \pFonts{\itshape}{\bfseries\itshape}{} Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i} Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__} in math mode: \(\pVar{a}+\pVar{iV_g}\) boolean values: \sTrue, \sFalse, \pTrue, \pFalse \vspace{15pt} Without \textit{italic correction}: M \pVar{M} M \pKey{M} M. \pVar{M}. M. \pKey{M}. M. } \pLanguage{Java} \pBoolValue{\texttt{WAHR}}{\texttt{FALSCH}} \section*{Default values (Java):} {\obeylines Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i} Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__} in math mode: \(\pVar{a}+\pVar{iV_g}\) boolean values: \sTrue, \sFalse, \pTrue, \pFalse } \paragraph{After changing the boolean values with} \verb-\pBoolValue{\texttt{yes}}{\texttt{no}}-: {\obeylines \pBoolValue{\texttt{yes}}{\texttt{no}} boolean values: \sTrue, \sFalse, \pTrue, \pFalse } \paragraph{after changing the fonts with} \verb-\pFonts{\itshape}{\sffamily\bfseries}{}-: {\obeylines \pFonts{\itshape}{\sffamily\bfseries}{} Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i} Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__} in math mode: \(\pVar{a}+\pVar{iV_g}\) boolean values: \sTrue, \sFalse, \pTrue, \pFalse } \paragraph{after changing the fonts with} \verb-\pFonts{\ttfamily}{\ttfamily\bfseries}{\ttfamily\slshape}-: {\obeylines \pFonts{\ttfamily}{\ttfamily\bfseries}{\ttfamily\slshape} Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i} Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__} in math mode: \(\pVar{a}+\pVar{iV_g}\) boolean values: \sTrue, \sFalse, \pTrue, \pFalse } \paragraph{after changing the fonts with} \verb-\pFonts{\itshape}{\bfseries\itshape}{}-: {\obeylines \pFonts{\itshape}{\bfseries\itshape}{} Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i} Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__} in math mode: \(\pVar{a}+\pVar{iV_g}\) boolean values: \sTrue, \sFalse, \pTrue, \pFalse \vspace{15pt} Without \textit{italic correction}: M \pVar{M} M \pKey{M} M. \pVar{M}. M. \pKey{M}. M. } \pLanguage{Python} \pBoolValue{\texttt{WAHR}}{\texttt{FALSCH}} \section*{Default values (Python):} {\obeylines Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i} Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__} in math mode: \(\pVar{a}+\pVar{iV_g}\) boolean values: \sTrue, \sFalse, \pTrue, \pFalse } \paragraph{After changing the boolean values with} \verb-\pBoolValue{\texttt{yes}}{\texttt{no}}-: {\obeylines \pBoolValue{\texttt{yes}}{\texttt{no}} boolean values: \sTrue, \sFalse, \pTrue, \pFalse } \paragraph{after changing the fonts with} \verb-\pFonts{\itshape}{\sffamily\bfseries}{}-: {\obeylines \pFonts{\itshape}{\sffamily\bfseries}{} Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i} Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__} in math mode: \(\pVar{a}+\pVar{iV_g}\) boolean values: \sTrue, \sFalse, \pTrue, \pFalse } \paragraph{after changing the fonts with} \verb-\pFonts{\ttfamily}{\ttfamily\bfseries}{\ttfamily\slshape}-: {\obeylines \pFonts{\ttfamily}{\ttfamily\bfseries}{\ttfamily\slshape} Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i} Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__} in math mode: \(\pVar{a}+\pVar{iV_g}\) boolean values: \sTrue, \sFalse, \pTrue, \pFalse } \paragraph{after changing the fonts with} \verb-\pFonts{\itshape}{\bfseries\itshape}{}-: {\obeylines \pFonts{\itshape}{\bfseries\itshape}{} Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i} Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__} in math mode: \(\pVar{a}+\pVar{iV_g}\) boolean values: \sTrue, \sFalse, \pTrue, \pFalse \vspace{15pt} Without \textit{italic correction}: M \pVar{M} M \pKey{M} M. \pVar{M}. M. \pKey{M}. M. } \end{document} %% %% End of file `struktex-test-2.tex'. % \end{macrocode} % \iffalse % % \fi % % \section{\ifnum\language=\languageNGerman % Makros zur Erstellung der Dokumentation des \StrukTeXSty % \else % Macros for Generating the Documentation of the \StrukTeXSty % \fi} % % \ifnum\language=\languageNGerman % Um die Formatierung der Dokumentation ein wenig zu erleichtern, werden ein % paar Makros benutzt, die in einer eigenen \textsf{.sty}-Datei % zusammengefasst wurden. Ein wesentlicher Teil beruht auf einer % Modifikation der \texttt{newtheorem}-Umgebung aus \textsf{latex.sty} zur % Auszeichnung der Beispiele, die Implementation der Abk"urzungen wurde in % \cite{Neubauer:MikrotypographieI} vorgeschlagen. % \else % For easier formatting of documentation some macros are used, % which are collected in a particular \textsf{.sty} file. An essential part % is based on % a modification of the \texttt{newtheorem} environment out of \textsf{latex.sty} % for distinguishing examples. The implementation of abbreviations has been % proposed in \cite{Neubauer:MikrotypographieI}. % \fi % % \ifnum\language=\languageNGerman % Dazu wurden aus dem \textsf{verbatim.sty} einige Kommandos "ubernommen % und modifiziert, damit das Schreiben und Lesen von Dateien im % |verbatim|-Modus auch im Zusammenhang mit dem |docstrip|-Paket % funktioniert. Schlie"slich wurde auch noch eine Idee von Tobias Oetiker % aus seinem \textsf{layout.sty}, der im Zusammenhang mit % \foreign{lshort2e.tex - The not so short introduction to LaTeX2e} % entstand, zum parallelen Setzen von Quelle und formatiertem Text genutzt. % \else % Therefore some instructions of \textsf{verbatim.sty} have been adopted and % modified, so that writing and reading by the |docstrip| package works. % Finally an idea of Tobias Oetiker out of \textsf{layout.sty} also has been used, % which has been developed in connection with \foreign{lshort2e.tex - The not % so short introduction to LaTeX2e}. % \fi % \changes{v8.0e}{05/05/17}{nun wird die .pdf-Ausgabe sauber abgefangen} % \begin{macrocode} %<*strukdoc> \RequirePackage{ifpdf} \ProvidesPackage{strukdoc} [\filedate\space\fileversion\space (Jobst Hoffmann)] \newif\ifcolor \IfFileExists{color.sty}{\colortrue}{} \ifpdf \RequirePackage[colorlinks]{hyperref}\else \def\href#1{\texttt}\fi \ifcolor \RequirePackage{color}\fi \RequirePackage{nameref} \RequirePackage{url} \renewcommand\ref{\protect\T@ref} \renewcommand\pageref{\protect\T@pageref} \@ifundefined{zB}{}{\endinput} \providecommand\pparg[2]{% {\ttfamily(}\meta{#1},\meta{#2}{\ttfamily)}} \providecommand\envb[1]{% {\ttfamily\char`\\begin\char`\{#1\char`\}}} \providecommand\enve[1]{% {\ttfamily\char`\\end\char`\{#1\char`\}}} \newcommand{\zBspace}{z.\,B.} \let\zB=\zBspace \newcommand{\dhspace}{d.\,h.} \let\dh=\dhspace \let\foreign=\textit \newcommand\Abb[1]{Abbildung~\ref{#1}} \def\newexample#1{% \@ifnextchar[{\@oexmpl{#1}}{\@nexmpl{#1}}} \def\@nexmpl#1#2{% \@ifnextchar[{\@xnexmpl{#1}{#2}}{\@ynexmpl{#1}{#2}}} \def\@xnexmpl#1#2[#3]{% \expandafter\@ifdefinable\csname #1\endcsname {\@definecounter{#1}\@newctr{#1}[#3]% \expandafter\xdef\csname the#1\endcsname{% \expandafter\noexpand\csname the#3\endcsname \@exmplcountersep \@exmplcounter{#1}}% \global\@namedef{#1}{\@exmpl{#1}{#2}}% \global\@namedef{end#1}{\@endexample}}} \def\@ynexmpl#1#2{% \expandafter\@ifdefinable\csname #1\endcsname {\@definecounter{#1}% \expandafter\xdef\csname the#1\endcsname{\@exmplcounter{#1}}% \global\@namedef{#1}{\@exmpl{#1}{#2}}% \global\@namedef{end#1}{\@endexample}}} \def\@oexmpl#1[#2]#3{% \@ifundefined{c@#2}{\@nocounterr{#2}}% {\expandafter\@ifdefinable\csname #1\endcsname {\global\@namedef{the#1}{\@nameuse{the#2}}% \global\@namedef{#1}{\@exmpl{#2}{#3}}% \global\@namedef{end#1}{\@endexample}}}} \def\@exmpl#1#2{% \refstepcounter{#1}% \@ifnextchar[{\@yexmpl{#1}{#2}}{\@xexmpl{#1}{#2}}} \def\@xexmpl#1#2{% \@beginexample{#2}{\csname the#1\endcsname}\ignorespaces} \def\@yexmpl#1#2[#3]{% \@opargbeginexample{#2}{\csname the#1\endcsname}{#3}\ignorespaces} \def\@exmplcounter#1{\noexpand\arabic{#1}} \def\@exmplcountersep{.} \def\@beginexample#1#2{% \@nobreaktrue\list{}{\setlength{\rightmargin}{\leftmargin}}% \item[{\bfseries #1\ #2}]\mbox{}\\\sf} \def\@opargbeginexample#1#2#3{% \@nobreaktrue\list{}{\setlength{\rightmargin}{\leftmargin}}% \item[{\bfseries #1\ #2}\ (#3)]\mbox{}\\\sf} \def\@endexample{\endlist} \newexample{tExample}{\ifnum\language=\languageNGerman Beispiel\else Example\fi} \newwrite\struktex@out \newenvironment{example}% {\begingroup% Lets keep the changes local \@bsphack \immediate\openout \struktex@out \jobname.tmp \let\do\@makeother\dospecials\catcode`\^^M\active \def\verbatim@processline{% \immediate\write\struktex@out{\the\verbatim@line}}% \verbatim@start}% {\immediate\closeout\struktex@out\@esphack\endgroup% % % And here comes the part of Tobias Oetiker % \par\small\addvspace{3ex plus 1ex}\vskip -\parskip \noindent \makebox[0.45\linewidth][l]{% \begin{minipage}[t]{0.45\linewidth} \vspace*{-2ex} \setlength{\parindent}{0pt} \setlength{\parskip}{1ex plus 0.4ex minus 0.2ex} \begin{trivlist} \item\input{\jobname.tmp} \end{trivlist} \end{minipage}}% \hfill% \makebox[0.5\linewidth][l]{% \begin{minipage}[t]{0.50\linewidth} \vspace*{-1ex} \verbatiminput{\jobname.tmp} \end{minipage}} \par\addvspace{3ex plus 1ex}\vskip -\parskip } \newtoks\verbatim@line \def\verbatim@startline{\verbatim@line{}} \def\verbatim@addtoline#1{% \verbatim@line\expandafter{\the\verbatim@line#1}} \def\verbatim@processline{\the\verbatim@line\par} \def\verbatim@finish{\ifcat$\the\verbatim@line$\else \verbatim@processline\fi} \def\verbatimwrite#1{% \@bsphack \immediate\openout \struktex@out #1 \let\do\@makeother\dospecials \catcode`\^^M\active \catcode`\^^I=12 \def\verbatim@processline{% \immediate\write\struktex@out {\the\verbatim@line}}% \verbatim@start} \def\endverbatimwrite{% \immediate\closeout\struktex@out \@esphack} \@ifundefined{vrb@catcodes}% {\def\vrb@catcodes{% \catcode`\!12\catcode`\[12\catcode`\]12}}{} \begingroup \vrb@catcodes \lccode`\!=`\\ \lccode`\[=`\{ \lccode`\]=`\} \catcode`\~=\active \lccode`\~=`\^^M \lccode`\C=`\C \lowercase{\endgroup \def\verbatim@start#1{% \verbatim@startline \if\noexpand#1\noexpand~% \let\next\verbatim@ \else \def\next{\verbatim@#1}\fi \next}% \def\verbatim@#1~{\verbatim@@#1!end\@nil}% \def\verbatim@@#1!end{% \verbatim@addtoline{#1}% \futurelet\next\verbatim@@@}% \def\verbatim@@@#1\@nil{% \ifx\next\@nil \verbatim@processline \verbatim@startline \let\next\verbatim@ \else \def\@tempa##1!end\@nil{##1}% \@temptokena{!end}% \def\next{\expandafter\verbatim@test\@tempa#1\@nil~}% \fi \next}% \def\verbatim@test#1{% \let\next\verbatim@test \if\noexpand#1\noexpand~% \expandafter\verbatim@addtoline \expandafter{\the\@temptokena}% \verbatim@processline \verbatim@startline \let\next\verbatim@ \else \if\noexpand#1 \@temptokena\expandafter{\the\@temptokena#1}% \else \if\noexpand#1\noexpand[% \let\@tempc\@empty \let\next\verbatim@testend \else \expandafter\verbatim@addtoline \expandafter{\the\@temptokena}% \def\next{\verbatim@#1}% \fi\fi\fi \next}% \def\verbatim@testend#1{% \if\noexpand#1\noexpand~% \expandafter\verbatim@addtoline \expandafter{\the\@temptokena[}% \expandafter\verbatim@addtoline \expandafter{\@tempc}% \verbatim@processline \verbatim@startline \let\next\verbatim@ \else\if\noexpand#1\noexpand]% \let\next\verbatim@@testend \else\if\noexpand#1\noexpand!% \expandafter\verbatim@addtoline \expandafter{\the\@temptokena[}% \expandafter\verbatim@addtoline \expandafter{\@tempc}% \def\next{\verbatim@!}% \else \expandafter\def\expandafter\@tempc\expandafter {\@tempc#1}\fi\fi\fi \next}% \def\verbatim@@testend{% \ifx\@tempc\@currenvir \verbatim@finish \edef\next{\noexpand\end{\@currenvir}% \noexpand\verbatim@rescan{\@currenvir}}% \else \expandafter\verbatim@addtoline \expandafter{\the\@temptokena[}% \expandafter\verbatim@addtoline \expandafter{\@tempc]}% \let\next\verbatim@ \fi \next}% \def\verbatim@rescan#1#2~{\if\noexpand~\noexpand#2~\else \@warning{Characters dropped after `\string\end{#1}'}\fi}} \newread\verbatim@in@stream \def\verbatim@readfile#1{% \verbatim@startline \openin\verbatim@in@stream #1\relax \ifeof\verbatim@in@stream \typeout{No file #1.}% \else \@addtofilelist{#1}% \ProvidesFile{#1}[(verbatim)]% \expandafter\endlinechar\expandafter\m@ne \expandafter\verbatim@read@file \expandafter\endlinechar\the\endlinechar\relax \closein\verbatim@in@stream \fi \verbatim@finish } \def\verbatim@read@file{% \read\verbatim@in@stream to\next \ifeof\verbatim@in@stream \else \expandafter\verbatim@addtoline\expandafter{\expandafter\check@percent\next}% \verbatim@processline \verbatim@startline \expandafter\verbatim@read@file \fi } \def\verbatiminput{\begingroup\MacroFont \@ifstar{\verbatim@input\relax}% {\verbatim@input{\frenchspacing\@vobeyspaces}}} \def\verbatim@input#1#2{% \IfFileExists {#2}{\@verbatim #1\relax \verbatim@readfile{\@filef@und}\endtrivlist\endgroup\@doendpe}% {\typeout {No file #2.}\endgroup}} % \end{macrocode} % \iffalse % % \fi % % % \section[Makefile]{\ifnum\language=\languageNGerman % Makefile zur automatisierten Erstellung der Dokumentation und der Tests % des \StrukTeXSty % \else % Makefile for the automized generation of the documentation and the tests % of the \StrukTeXSty % \fi} % \label{sec:Makefile} % \changes{v8.0b}{04/07/14}{.pdf-Ausgabe eingef"uhrt} % % \ifnum\language=\languageNGerman % Der Umgang mit \textsf{.dtx}-Paketen ist wesentlich einfacher, wenn ein % Werkzeug f"ur die Automatisierung der wesentlichen Schritte vorliegt. F"ur % Unix/Linux basierte Systeme ist das mit |make| und einem geeigneten % |Makefile| einfach zu realisieren. Hier wird der |Makefile| in die % Dokumentation integriert, die spezielle Syntax mit Tabulatorzeichen wird % durch ein Hilfsprogramm erzeugt, das weiter unten angegeben ist. Auf die % Benutzung des |Makefile| wird hier nicht weiter eingegangen, da der % erfahrene Benutzer des Werkzeugs diese aus der Datei selbst entnehmen kann. % \else % \fi % % \changes{v8.0e}{05/05/17}{Tippfehler korrigiert: \$\$\$f $\rightarrow$ \$\$f} % \changes{v8.0e}{05/05/17}{\& mit Fluchtzeichen versehen} % \iffalse %<*makefile> % \fi % \begin{macrocode} #----------------------------------------------------------------------- # Purpose: generation of the documentation of the struktex package # Notice: this file can be used only with dmake and the option "-B"; # this option lets dmake interpret the leading spaces as # distinguishing characters for commands in the make rules. # # Rules: # - all-de: generate all the files and the (basic) german # documentation # - all-en: generate all the files and the (basic) english # documentation # - test: format the examples # - history: generate the documentation with revision # history # - develop-de: generate the german documentation with revision # history and source code # - develop-en: generate the english documentation with # revision history and source code # - realclean # - clean # - clean-example # # Author: Jobst Hoffmann, Fachhochschule Aachen, Abt. Juelich # Date: 2003/04/18 #----------------------------------------------------------------------- # The texmf-directory, where to install new stuff (see texmf.cnf) # If you don't know what to do, search for directory texmf at /usr. # With teTeX and linux often one of following is used: #INSTALLTEXMF=/usr/TeX/texmf #INSTALLTEXMF=/usr/local/TeX/texmf #INSTALLTEXMF=/usr/share/texmf #INSTALLTEXMF=/usr/local/share/texmf # user tree: #INSTALLTEXMF=$(HOME)/texmf # Try to use user's tree known by kpsewhich: INSTALLTEXMF=`kpsewhich --expand-var '$$HOMETEXMF'` # Try to use the local tree known by kpsewhich: #INSTALLTEXMF=`kpsewhich --expand-var '$$TEXMFLOCAL'` # But you may set INSTALLTEXMF to every directory you want. # Use following, if you only want to test the installation: #INSTALLTEXMF=/tmp/texmf # If texhash must run after installation, you can invoke this: TEXHASH=texhash ######### Edit following only, if you want to change defaults! # The directory, where to install *.cls and *.sty CLSDIR=$(INSTALLTEXMF)/tex/latex/jhf/$(PACKAGE) # The directory, where to install documentation DOCDIR=$(INSTALLTEXMF)/doc/latex/jhf/$(PACKAGE) # The directory, where to install the sources SRCDIR=$(INSTALLTEXMF)/source/latex/jhf/$(PACKAGE) # The directory, where to install demo-files # If we have some, we have to add following 2 lines to install rule: # $(MKDIR) $(DEMODIR); \ # $(INSTALL) $(DEMO_FILES) $(DEMODIR); \ DEMODIR=$(DOCDIR)/demo # We need this, because the documentation needs the classes and packages # It's not really a good solution, but it's a working solution. TEXINPUTS := $(PWD):$(TEXINPUTS) ######################################################################## # End of customization section ######################################################################## DVIPS = dvips LATEX = latex PDFLATEX = pdflatex # postscript viewer GV = gv COMMON_OPTIONS = \OnlyDescription\CodelineNumbered HISTORY_OPTIONS = \RecordChanges DEVELOPER_OPTIONS = \EnableCrossrefs\RecordChanges\AlsoImplementation\CodelineIndex PACKAGE = struktex all-de: $(PACKAGE).de.pdf all-en: $(PACKAGE).en.pdf # strip off the comments from the package $(PACKAGE).sty $(PACKAGE)-test-*.tex: $(PACKAGE).dtx $(PACKAGE).sty $(PACKAGE)-test-*.tex: $(PACKAGE).ins +$(LATEX) $< # generate the documentation $(PACKAGE).dvi: $(PACKAGE).sty $(PACKAGE).de.dvi: $(PACKAGE).dtx +$(LATEX) "\AtBeginDocument{$(COMMON_OPTIONS)}\input{$<}" +$(LATEX) "\AtBeginDocument{$(COMMON_OPTIONS)}\input{$<}" +mv $(<:.dtx=.dvi) $(<:.dtx=.de.dvi) $(PACKAGE).de.pdf: $(PACKAGE).dtx +$(PDFLATEX) "\AtBeginDocument{$(COMMON_OPTIONS)}\input{$<}" +$(PDFLATEX) "\AtBeginDocument{$(COMMON_OPTIONS)}\input{$<}" +mv $(<:.dtx=.pdf) $(<:.dtx=.de.pdf) $(PACKAGE).en.dvi: $(PACKAGE).dtx +$(LATEX) "\AtBeginDocument{$(COMMON_OPTIONS)}\def\selectlanguageEnglish{}\input{$<}" +$(LATEX) "\AtBeginDocument{$(COMMON_OPTIONS)}\def\selectlanguageEnglish{}\input{$<}" +mv $(<:.dtx=.dvi) $(<:.dtx=.en.dvi) $(PACKAGE).en.pdf: $(PACKAGE).dtx +$(PDFLATEX) "\AtBeginDocument{$(COMMON_OPTIONS)}\def\selectlanguageEnglish{}\input{$<}" +$(PDFLATEX) "\AtBeginDocument{$(COMMON_OPTIONS)}\def\selectlanguageEnglish{}\input{$<}" +mv $(<:.dtx=.pdf) $(<:.dtx=.en.pdf) # generate the documentation with revision history (only german) history: $(PACKAGE).dtx +$(LATEX) "\AtBeginDocument{$(COMMON_OPTIONS)$(HISTORY_OPTIONS)}\input{$<}" +$(LATEX) "\AtBeginDocument{$(COMMON_OPTIONS)$(HISTORY_OPTIONS)}\input{$<}" +makeindex -s gind.ist $(PACKAGE).idx +makeindex -s gglo.ist -o $(PACKAGE).gls -t $(PACKAGE).glg $(PACKAGE).glo +$(LATEX) "\AtBeginDocument{$(COMMON_OPTIONS)$(HISTORY_OPTIONS)}\input{$<}" # generate the documentation for the developer (revision history always # in german) develop-de: $(PACKAGE).dtx +$(LATEX) "\AtBeginDocument{$(HISTORY_OPTIONS)$(DEVELOPER_OPTIONS)}\input{$<}" +$(LATEX) "\AtBeginDocument{$(HISTORY_OPTIONS)$(DEVELOPER_OPTIONS)}\input{$<}" +makeindex -s gind.ist $(PACKAGE).idx +makeindex -s gglo.ist -o $(PACKAGE).gls -t $(PACKAGE).glg $(PACKAGE).glo +$(LATEX) "\AtBeginDocument{$(HISTORY_OPTIONS)$(DEVELOPER_OPTIONS)}\input{$<}" ifneq (,$(findstring pdf,$(LATEX))) +mv $(<:.dtx=.pdf) $(<:.dtx=.de.pdf) else +mv $(<:.dtx=.dvi) $(<:.dtx=.de.dvi) endif develop-en: $(PACKAGE).dtx +$(LATEX) "\AtBeginDocument{$(COMMON_OPTIONS)$(DEVELOPER_OPTIONS)}\def\selectlanguageEnglish{}\input{$<}" +$(LATEX) "\AtBeginDocument{$(COMMON_OPTIONS)$(DEVELOPER_OPTIONS)}\def\selectlanguageEnglish{}\input{$<}" +makeindex -s gind.ist $(PACKAGE).idx +makeindex -s gglo.ist -o $(PACKAGE).gls -t $(PACKAGE).glg $(PACKAGE).glo +$(LATEX) "\AtBeginDocument{$(COMMON_OPTIONS)$(DEVELOPER_OPTIONS)}\def\selectlanguageEnglish{}\input{$<}" ifneq (,$(findstring pdf,$(LATEX))) +mv $(<:.dtx=.pdf) $(<:.dtx=.en.pdf) else +mv $(<:.dtx=.dvi) $(<:.dtx=.en.dvi) endif # format the example/test files test: for i in `seq 1 3`; do \ f=$(PACKAGE)-test-$$i; \ echo file: $$f; \ $(LATEX) $$f; \ $(DVIPS) -o $$f.ps $$f.dvi; \ $(GV) $$f.ps \&; \ done install: $(PACKAGE).dtx $(PACKAGE).dvi [ -d $(CLSDIR) ] || mkdir -p $(CLSDIR) [ -d $(DOCDIR) ] || mkdir -p $(DOCDIR) [ -d $(SRCDIR) ] || mkdir -p $(SRCDIR) cp $(PACKAGE).sty $(CLSDIR) cp $(PACKAGE).dvi $(DOCDIR) cp $(PACKAGE).ins $(SRCDIR) cp $(PACKAGE).dtx $(SRCDIR) cp $(PACKAGE)-test-*.tex $(SRCDIR) cp LIESMICH $(SRCDIR) cp README $(SRCDIR) cp THIS-IS-VERSION-$(VERSION) $(SRCDIR) uninstall: rm -f $(CLSDIR)/$(PACKAGE).sty rm -fr $(DOCDIR) rm -fr $(SRCDIR) pack: $(PACKAGE).de.pdf $(PACKAGE).en.pdf $(PACKAGE).dtx $(PACKAGE).ins \ LIESMICH README + tar cfvz $(PACKAGE).tgz $^ clean: -rm -f *.log *.aux *.brf *.idx *.ilg *.ind -rm -f *.glg *.glo *.gls *.lof *.lot *.out *.toc *.tmp *~ -rm *.mk *.makemake realclean: clean -rm -f *.sty *.cls *.ps *.dvi *.pdf -rm -f *test* getversion.* Makefile clean-test: rm $(PACKAGE)-test-*.* # this $-sign is needed for font-locking in XEmacs only % \end{macrocode} % \iffalse % % \fi % % \ifnum\language=\languageNGerman % Die folgende Zeile, die nach |latex struktex.ins| als Datei % |struktex.makemake| vorliegt, kann mit dem Kommando % \begin{verbatim} % sh struktex.makemake % \end{verbatim} % dazu benutzt werden, die obige Datei in ein Format umzusetzen, das von % "ublichen make-Programmen wie dem GNU |make| verarbeitet werden kann. % \else % The following line -- stripped off as |struktex.makemake| -- can % be used with the command % \begin{verbatim} % sh struktex.makemake % \end{verbatim} % to generate the file |Makefile|, which can be further used to % generate the documentation with a common |make| like the GNU |make|. % \fi % \iffalse %<*setup> % \fi % \begin{macrocode} sed -e "`echo \"s/^ /@/g\" | tr '@' '\011'`" struktex.mk > Makefile % \end{macrocode} % \iffalse % % \fi % \ifnum\language=\languageNGerman % Die folgende Datei dient allein dazu, die Version des Paketes zu % ermitteln. % \else % The following file only serves to get the version of the package. % \fi % \iffalse %<*getversion> % \fi % \begin{macrocode} \documentclass[english]{ltxdoc} \nofiles \usepackage{struktex} \GetFileInfo{struktex.sty} \typeout{VERSION \fileversion} \begin{document} \end{document} % \end{macrocode} % \iffalse % % \fi % % % \StopEventually{ % \begin{thebibliography}{MDB01} % % \bibitem[Fut89]{Futschek:Programmentwicklung} % Gerald Futschek. % \newblock {\em Programmentwicklung und Verifikation}. % \newblock Springer Verlag, Wien -- New York, 1989. % % \bibitem[GMS94]{GoossensMittelbachSamarin:Companion} % Michel Goossens, Frank Mittelbach and Alexander Samarin. % \newblock {\em The \LaTeX-Companion}. % \newblock Addison-Wesley Publishing Company, Reading, Massachusetts, 1994. % % \bibitem[GMS04]{MittelbachGoossens:Companion2} % Frank Mittelbach and Michel Goossens. % \newblock {\em The \LaTeX-Companion}. % \newblock Addison-Wesley Publishing Company, Reading, % Massachusetts, second edition, 2004. % % \bibitem[Knu86]{Knuth:TeXBook} % D.~E. Knuth. % \newblock {\em {The \TeX-Book}}. % \newblock Addison-Wesley, Reading, Massachusetts, 1986. % % \bibitem[MDB94]{MittelbachDuchierBraams:DocStrip} % Frank Mittelbach, Denys Duchier and Johannes Braams. % \newblock {\em {The {\sf DocStrip} program}}, Dezember 1994. % % \bibitem[MDB01]{MittelbachDuchierBraams:DocStrip-V2.5b} % Frank Mittelbach, Denys Duchier, Johannes Braams, % Marcin Woli\'nski and Mark Wooding % \newblock {\em {The {\sf DocStrip} program}}, September 2001. % % \bibitem[Mit94]{FM:TheDocAndShortvrbPackages} % Frank Mittelbach. % \newblock {\em {The {\sf doc} and {\sf shortvrb} Packages}}, Oktober 1994. % % \bibitem[Mit01]{FM:TheDocAndShortvrbPackages-V2.0} % Frank Mittelbach. % \newblock {\em {The {\sf doc} and {\sf shortvrb} Packages}}, September 2001. % % \bibitem[Neu96]{Neubauer:MikrotypographieI} % Marion Neubauer. % \newblock {Feinheiten bei wissenschaftlichen Publikationen -- % Mikrotypographie-Regeln, Teil I}. % \newblock {\em Die \TeX{}nische Kom"odie}, 8(4):23--40, Februar 1996. % % \bibitem[Rah92]{Rahtz:OZ.STY} % Sebastian Rahtz. % \newblock {\em The {\sf oz} package}, 1992. % % \end{thebibliography} % % \ifmulticols % \addtocontents{toc}{\protect\end{multicols}} % \fi % } ^^A end of \StopEventually % % \clearpage % % \section{\ifnum\language=\languageNGerman Die Implementation \else The Implementation \fi} % % \ifnum\language=\languageNGerman % Der \StrukTeXSty\ stellt eine einfache Implementation der beschriebenen % Makros dar; er sollte prinzipiell mit anderen Makropaketen vertr"aglich sein. % Die G"ultigkeit von Makros wurde im Regelfall auf einen % m"oglichst kleinen Bereich beschr"ankt. Um Seiteneffekte mit anderen % \foreign{packages} so weit wie m"oglich zu vermeiden, werden alle % intern genutzten Makros mit dem Suffix |@nss| versehen. % \else % The \StrukTeXSty\ shows a simple implementation of the described macros. % On principal it should be compatible with other macro packages. % The validity of macros has been normally reduced to a range as small as possible. % All internally used macros are supplied by the suffix |@nss| for avoiding % sideeffects with other \foreign{packages} as far as possible. % \fi % % \subsection{\ifnum\language=\languageNGerman Allgemeines \else General \fi} % % \ifnum\language=\languageNGerman % Als erstes wird getestet, ob das Paket \StrukTeXSty\ noch nicht % geladen wurde. Wenn das der Fall ist, wird weitergearbeitet, ansonsten % wird das Lesen sofort abgebrochen. % \else % First it is tested, if the package \StrukTeX\ has been loaded. In case it has been, % it will be proceded. Otherwise reading will be interrupted. % \fi % \begin{macrocode} %<*struktex> \@ifundefined{StrukTeX}{}{\endinput} % \end{macrocode} % \ifnum\language=\languageNGerman % Dies ist ein Paket, das f"ur \LaTeX2e entwickelt wurde, es wird daher % eine entsprechende Fehlermeldung ausgegeben, wenn ein anderes Format % benutzt wird, % was nicht zu Fehlern f"uhren sollte; zus"atzlich wird das Paket % \textsf{ifthen.sty} geladen, falls es noch nicht anderweitig angefordert % wurde. % \else % This is a package, that has been developed for \LaTeX2e. Hence it will be put out % an adequate error message, if another format is used, which should not lead to % errors. In addition the package \textsf{ifthen.sty} will be loaded, if not already % done. % \fi % \changes{v4.4b}{96/03/13}{`RequirePackage umgestellt wg. korrekter Versionsmeldung} % \ifnum\language=\languageNGerman % Nun wird das Einlesen des Makropakets mit der aktuellen % Versionsnummer gemeldet. % \else % Now reading in of macro package with the actual number of version will % be messaged. % \fi % \begin{macrocode} \RequirePackage{ifthen} % \end{macrocode} % \ifnum\language=\languageNGerman % StrukTeX ben"otigt zwei weitere Pakete, die zum Lieferumfang geh"oren. % Diese werden hier geladen. % \else % \fi % \begin{macrocode} \RequirePackage{struktxf} \RequirePackage{struktxp} % \end{macrocode} % % \changes{v5.3a}{98/11/27}{Option \texttt{emlines} eingef"uhrt} % \ifnum\language=\languageNGerman % Ab der Version 5.3a kennt StrukTeX eine Option "`|emlines|"', die es % erm"oglicht, Geraden beliebiger Steigung zu zeichnen; sp"ater kann auch % das Paket \textsf{curves} zum Zeichnen beliebiger Steigungen eingesetzt % werden, ab der Version 8.0a wird auch das Paket % \textsf{pict2e} unterst"utzt, das dazugeh"orige % Paket wird hier geladen. % \else % \fi % \begin{macrocode} \newboolean{curves} \newboolean{emlines} \newboolean{pictIIe} \newboolean{anygradient} \DeclareOption{curves}% {% \setboolean{anygradient}{true} \setboolean{curves}{true} \setboolean{emlines}{false} \setboolean{pictIIe}{false} } \DeclareOption{emlines}% {% \setboolean{anygradient}{true} \setboolean{curves}{false} \setboolean{emlines}{true} \setboolean{pictIIe}{false} } \DeclareOption{pict2e}% {% \setboolean{anygradient}{true} \setboolean{curves}{false} \setboolean{emlines}{false} \setboolean{pictIIe}{true} } % \end{macrocode} % % \changes{v7.0a}{04/01/05}{Option \texttt{verification} eingef"uhrt} % \ifnum\language=\languageNGerman % Ab der Version 7.0a kennt \StrukTeX{} eine Option "`|verification|"', die % ein zus"atzliches Element definiert: die \cs{assert}-Box, die in % \cite{Futschek:Programmentwicklung} eingef"uhrt wird. % \else % From version 7.0a on \StrukTeX{} knows the option "`|verification|"', which % defines an additional element: the \cs{assert}-box, which is introduced % in \cite{Futschek:Programmentwicklung}. % \fi % \begin{macrocode} \newboolean{verification} \DeclareOption{verification}% {% \setboolean{verification}{true} } % \end{macrocode} % % \ifnum\language=\languageNGerman % Nun werden andere Pakete geladen und die Optionen verarbeitet % \else % \fi % \begin{macrocode} \ProcessOptions \ifcurves% \RequirePackage{curves} \else\ifemlines \RequirePackage{emlines2} \else\ifpictIIe \RequirePackage{pict2e} \fi\fi\fi % \end{macrocode} % % \begin{macro}{\StrukTeX} % \ifnum\language=\languageNGerman % Das Logo des Paketes, anhand dessen sp"ateres erneutes Einlesen % unterbunden wird: % \else % The logo of package, with which a later second reading in will be % forestalled: % \fi % \begin{macrocode} \def\StrukTeX{S\kern-.05emt\kern-.05em\raise.5ex\hbox{r}% \kern-.1667emu\kern-.05em\lower.5ex\hbox{k}% \kern-.2emT\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX} % \end{macrocode} % \end{macro} % % \subsection{\ifnum\language=\languageNGerman Diverse Makros zur Vorbereitung % \else Various Macros for Preparation % \fi} % % \changes{v4.1c}{95/07/24}{Eigene Datei f"ur spezielle Fonts anlegen} % \ifnum\language=\languageNGerman % Zun"achst werden die zus"atzlich ben"otigten Fonts bereitgestellt. Da diese % Fonts auch in anderem Zusammenhang ben"otigt werden, wird hierf"ur ein % eigenes Paket definiert. % \else % First the additionally needed fonts are provided. Since these fonts are also used % in another connection, therefore an own package is defined. % \fi % \begin{macrocode} % %<*struktxf> \@ifundefined{nat}{}{\endinput} \DeclareSymbolFont{italics}{\encodingdefault}{\rmdefault}{m}{it}% \DeclareSymbolFont{AMSb}{U}{msb}{m}{n} \DeclareSymbolFontAlphabet{\mathbb}{AMSb} % \end{macrocode} % % \begin{macro}{\nat} % \begin{macro}{\integer} % \begin{macro}{\real} % \begin{macro}{\complex} % \changes{v4.1b}{95/07/23}{`complex eingef"uhrt} % \changes{v4.1a}{95/07/17}{`nat, `integer und `real eingef"uhrt} % \ifnum\language=\languageNGerman % Die folgenden Makros dienen dem vereinfachten Schreiben von Mengen: % \else % The following macros contribute to easier writing of sets: % \fi % \begin{macrocode} \def\nat{{\mathbb N}} \def\integer{{\mathbb Z}} \def\real{{\mathbb R}} \def\complex{{\mathbb C}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\btt} % \changes{v4.1a}{95/07/17}{`btt auf NFSS umgestellt} % \changes{v8.0b}{04/07/14}{Hinweis auf Luxi Mono als Ersatz fuer cmbtt} % \ifnum\language=\languageNGerman % Um fetten Schreibmaschinensatz erzeugen zu k"onnen, gibt es den Font \cs{btt}, % der als Erweiterung der \textsf{cmtt}-Font-Familie definiert ist. Um % auf diesen Font auch ohne zus"atzliches Einbinden dieses \foreign{packages} % zugreifen zu k"onnen, kann man die entsprechenden Deklarationen in den % Dateien |ot1cmtt.fd| bzw.\ |t1cmtt.fd| durch die folgende % ersetzen.\footnote{Eine Alternative ist die Benutzung des Luxi Mono Fonts.} % \else % For generating bold face typescript there's the font \cs{btt}, that is defined as % an extension of the \textsf{cmtt} font family. For access to these % \foreign{packages} without supplementary tieing up one can exchange the % adequate declaration in the files |ot1cmtt.fd| or |t1cmtt.fd| % respectively by the following:\footnote{An alternative is using the font % Luxi Mono.} % \fi % \begin{macrocode} \DeclareFontFamily{OT1}{cmbtt}{} \DeclareFontShape{OT1}{cmtt}{bx}{n}{ <-8> cmbtt8 <9> cmbtt9 <10-> cmbtt10 }{} \def\btt% {% \fontencoding{\encodingdefault}\fontfamily{cmbtt}\fontseries{bx}% \fontshape{n}\selectfont% } % \end{macrocode} % \end{macro} % % \begin{macro}{\MathItalics} % \begin{macro}{\MathNormal} % \changes{v4.1a}{95/07/17}{`MathItalics und `MathNormal eingef"uhrt} % \ifnum\language=\languageNGerman % Die folgenden Makros dienen dem Umschalten zwischen verschiedenen Formen % der \foreign{italics} im Mathematik-Modus. Sie wurden aus % \cite{Rahtz:OZ.STY} "ubernommen. Als Standard wird \cs{MathItalics} % genommen, um eine sch"onere Darstellung von langen Variablennamen zu % erzielen. % \else % The following macros contribute to the switch of the different forms of % \foreign{italics} in math mode. They have been taken over from % \cite{Rahtz:OZ.STY}. As a standard there will be taken \cs{MathItalics} to % generate a nicer representation of long variable names. % \fi % \begin{macrocode} \def\@setmcodes#1#2#3{{\count0=#1 \count1=#3 \loop \global\mathcode\count0=\count1 \ifnum \count0<#2 \advance\count0 by1 \advance\count1 by1 \repeat}} \def\MathItalics% {% \@setmcodes{`A}{`Z}{"7\hexnumber@\symitalics41} \@setmcodes{`a}{`z}{"7\hexnumber@\symitalics61} } \def\MathNormal% {% \@setmcodes{`A}{`Z}{"7141} \@setmcodes{`a}{`z}{"7161} } \MathItalics % %<*struktex> % \end{macrocode} % \end{macro} % \end{macro} % % \subsection[\ifnum\language=\languageNGerman Darstellung von Variablen % etc.\else Representation of Varibles etc.\fi]{\ifnum\language=\languageNGerman % Makros zur Darstellung von Variablen, % Schl"usselw"ortern und anderen programmierspezifischen % Details % \else Macros for Representation of Variables, Keywords and % other specific Details of Programming % \fi} % % \ifnum\language=\languageNGerman % Struktogramme enthalten manchmal direkt zu programmierenden Code. % Um hier ein einheitliches Aussehen zu erreichen, sind die folgenden % Makros definiert worden. Um diese Makros auch in anderem Zusammenhang % nutzen zu k"onnen, sind sie zu einem eigenen \foreign{package} % \textsf{struktxp.sty} zusammengefasst worden. % \else % Structured box charts sometimes include code, that has to be programmed % directly. For achieving a homogenous appearance the following macros have % been defined. They have been collected in a seperate \foreign{package} % \textsf{struktxp.sty} to be able to use them in another connection. % \fi % \begin{macrocode} % %<*struktxp> \@ifundefined{pVariable}{}{\endinput} % \end{macrocode} % % \begin{macro}{\pExpFont@nss} % \changes{v5.4a}{99/11/16}{neu eingef"uhrt, ersetzt `pVarFont@nss} % \begin{macro}{\pKeyFont@nss} % \changes{v4.5a}{96/03/15}{neu eingef"uhrt} % \begin{macro}{\pCommentFont@nss} % \changes{v4.5a}{96/03/15}{neu eingef"uhrt} % \ifnum\language=\languageNGerman % Die drei Makros |\pExpFont@nss|, |\pKeyFonts@nss| und |\pCommentFont@nss| % dienen der Vorbesetzung der Fonts zur Formatierung von Variablen, % Schl"usselw"ortern und Kommentar. Diese kann mit dem Kommando \cs{pFonts} % umdefiniert werden. % \else % The three macros |\pExpFont@nss|, |\pKeyFonts@nss| and |\pCommentFonr@nss| % contribute to the default of fonts which serve to formatting variables, % keywords and comments. These can be redefined by the command \cs{pFonts}. % \fi % \begin{macrocode} \newcommand{\pExpFont@nss}{\small\sffamily} \newcommand{\pKeyFont@nss}{\small\sffamily\bfseries} \newcommand{\pCommentFont@nss}{\small\sffamily\slshape} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\pFonts} % \changes{v4.5a}{96/03/15}{neu eingef"uhrt} % \ifnum\language=\languageNGerman % Der Makro \cs{pFonts} dient dem Umsetzen der Vorbesetzungen der Fonts % zum Setzen von Variablennamen, Schl"usselw"ortern und Kommentar: % \else % The macro \cs{pFonts} serves to the change of default of fonts for % setting variable names, keywords and comments: % \fi % \begin{macrocode} \newcommand{\pFonts}[3]% {% \def\argi@nss{#1} \def\argii@nss{#2} \def\argiii@nss{#3} \ifx\argi@nss\empty\else% \renewcommand{\pExpFont@nss}{#1}% \fi% \ifx\argii@nss\empty\else% \renewcommand{\pKeyFont@nss}{#2}% \fi% \ifx\argiii@nss\empty\else% \renewcommand{\pCommentFont@nss}{#3}% \fi% } % \end{macrocode} % \end{macro} % % Zum Setzen von Programmtexten innerhalb von Struktogrammen wird % unterschieden zwischen Ausdr"ucken und (Schl"ussel-)W"ortern. Ein Ausdruck % (zu verstehen im Sinne eines Ausdrucks einer Programmiersprache) wird in % einem festen Font gesetzt, der durch |\pExpFont@nss| aktuell % bestimmt wird. Dieses gilt in gleicher Weise f"ur (Schl"ussel-)W"orter, % dabei werden aber die Schl"usselw"orter, die in einer entsprechenden % Liste definiert sind, fett gedruckt. Sowohl Ausdr"ucke als auch % (Schl"ussel-)w"orter d"urfen Sonderzeichen enthalten: % \begin{enumerate} % \item der Unterstrich "`|_|"', % \item das Dach "`|^|"', % \item das kaufm"annische Und "`|&|"' und % \item das Doppelkreuz "`|#|"'. % \end{enumerate} % \begin{macro}{\pExpression} % \changes{v5.4a}{99/11/16}{neu eingef"uhrt, ersetzt `pVariable} % \begin{macro}{\pExp} % \changes{v5.4a}{99/11/16}{`pExp als Abk"urzung definiert} % \ifnum\language=\languageNGerman % Leerzeichen werden beachtet, so dass ganze Anweisungen geschrieben werden % k"onnen. Das Argument kann erst nach der Umdefinition der \foreign{catcodes} % von einem internen Makro ausgewertet werden. % \else % Blank characters are considered, such that whole statements can be written. % \fi % % \ifnum\language=\languageNGerman % Zur Erleichterung des Schreibens wird mit \cs{let} ein alternativer Zugriff % auf \cs{pVariable} geschaffen. % \else % For easier writing there is brought about an alternative access by % \cs{pVariable}. % \fi % \begin{macrocode} \newcommand{\pExpression}% {% \bgroup% % \end{macrocode} % \ifnum\language=\languageNGerman % Zun"achst werden die ben"otigten \foreign{catcodes} auf Sonstige -- % \foreign{other} -- umgesetzt, zur Erinnerung: % \else % First the needed \foreign{catcodes} will be changed to \foreign{other}. % Recall: % \fi % % \ifnum\language=\languageNGerman % \DeleteShortVerb{\|} % \begin{tabular}{r|l} % \foreign{catcode} & Bedeutung \\\hline % 1 & Gruppenanfang \\ % 2 & Gruppenende \\ % 4 & Tabulatorzeichen \\ % 8 & Index \\ % 12& Sonstige \\ % \end{tabular} % \MakeShortVerb{\|} % \else % \DeleteShortVerb{\|} % \begin{tabular}{r|l} % \foreign{catcode} &Meaning \\\hline % 1 & Group Begin \\ % 2 & Group End \\ % 4 & Tabulator Character \\ % 8 & Index \\ % 12& Other \\ % \end{tabular} % \MakeShortVerb{\|} % \fi % % \ifnum\language=\languageNGerman % In einer Variablen sind die folgenden Sonderzeichen erlaubt: % \begin{enumerate} % \item der Unterstrich "`|_|"', % \item das Dach "`|^|"' und % \item das kaufm"annische Und "`|&|"'. % \end{enumerate} % \else % In a variable the following special characters are allowed: % \begin{enumerate} % \item the Underline "'|_|"', % \item the Hat "'|^|"' and % \item the Commercial And "'|&|"'. % \end{enumerate} % \fi % % \begin{macrocode} \catcode`\_=12 \catcode`\^=12 \catcode`\&=12 % \pUseExpFont@nss% } \let\pExp=\pExpression % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\pVariable} % \changes{v5.4a}{99/11/16}{neu definiert} % \changes{v2.0n}{94/03/31}{Neuimplementation gem"a"s `TeXnischer Kom"odie'} % \begin{macro}{\pVar} % \changes{v2.0c}{93/12/09}{`pVar als Abk"urzung definiert} % \begin{macro}{\pKeyword} % \changes{v5.4a}{99/11/16}{auf `pVariable zur"uckgef"uhrt} % \changes{v2.0n}{94/03/31}{Neuimplementation gem"a"s `TeXnischer Kom"odie'} % \changes{v2.0c}{93/12/09}{`pKeyword und `pKey definiert} % \begin{macro}{\pKey} % \changes{v5.4a}{99/11/16}{auf `pVariable zur"uckgef"uhrt} % \changes{v2.0c}{93/12/09}{neu definiert} % \ifnum\language=\languageNGerman % Die Implementation von \cs{pKeyword} entspricht der von \cs{pVariable}. % Die hier neu benutzten Fonts (cmbtt..) werden durch den % \textsf{struktxf.sty} bereitgestellt. % Ansonsten wird wie bei \cs{pVariable} verfahren: % \else % The implementation of \cs{pKeyword} coincides with the one of \cs{pVariable}. % The hereby newly used fonts (cmbtt..) are provided by |textsf{struktxf.sty}|. % Apart from that it will be proceded as with \cs{pVariable}: % \fi % Zus"atzlich werden Makros \cs{pVar} sowie \cs{pKeyword} und \cs{pKey} mit % der gleichen Bedeutung definiert. Diese dienen allein der % R"uckw"artskompatibilit"at. % \begin{macrocode} \newcommand{\pVariable}% {% \bgroup% \catcode`\_=13 \let\_\textunderscore \catcode`\#=12 \catcode`\^=12 \catcode`\&=12 % \pVariabl@% } \let\pVar=\pVariable \let\pKeyword=\pVariable \let\pKey=\pVariable % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\pVariabl@} % \changes{v5.4a}{99/11/16}{neu definiert} % \changes{v8.0d}{04/12/27}{Python-Schl"usselw"orter neu eingef"uhrt} % Die Liste der Schl"usselw"orter wird nach den verschiedenen % Anwendungsgebieten unterschieden.\footnote{Die Python-Erweiterung % erfolgte nach einem Hinweis von Ludger Humbert, Universit"at Dortmund, von % dem auch die Liste der Schl"usselw"orter stammt, vielen Dank!} % \begin{macrocode} \newcommand{\pVariabl@}[1] {% \def\arg{#1}% \ifx\pLanguage@nss\Cee@nss% \CheckForKeyword@nss{auto,break,case,char,const,continue,default,do,double,% else,enum,extern,float,for,goto,if,int,long,register,return,% short,signed,sizeof,static,struct,switch,typedef,union,unsigned,% void,volatile,while}% \else\ifx\pLanguage@nss\Java@nss% \CheckForKeyword@nss{abstract,boolean,break,byte,case,catch,char,class,const,% continue,default,do,double,else,extends,final,finally,float,for,% goto,if,implements,import,instanceof,int,interface,long,native,% new,null,package,private,protected,public,return,short,static,% super,switch,synchronized,this,throw,throws,transient,try,void,% volatile,while,true,false}% \else\ifx\pLanguage@nss\Pascal@nss% \CheckForKeyword@nss{alfa,and,array,begin,boolean,byte,case,char,const,div,do,% downto,else,end,false,file,for,function,get,goto,if,in,integer,% label,maxint,mod,new,not,of,or,pack,packed,page,program,put,% procedure,read,readln,real,record,repeat,reset,rewrite,set,text,% then,to,true,type,unpack,until,var,while,with,write,writeln}% \else\ifx\pLanguage@nss\Python@nss% \CheckForKeyword@nss{and,assert,break,class,continue,def,del,elif,else,% except,exec,finally,for,from,global,if,import,in,is,lambda,not,or,% pass,print,raise,return,try,while,yield}% \else\ifx\pLanguage@nss\LaTeX@nss% \CheckForKeyword@nss{center,description,enumerate,figure,itemize, list,quote,tabbing,tabular,table,}% \else% \CheckForKeyword@nss{}% \fi\fi\fi\fi\fi% \egroup% } % \end{macrocode} % \end{macro} % % \begin{macro}{\pLanguage} % \changes{v5.4a}{99/11/16}{neu definiert} % \begin{macro}{\Cee@nss} % \changes{v5.4a}{99/11/16}{neu definiert} % \begin{macro}{\Java@nss} % \changes{v5.4a}{99/11/16}{neu definiert} % \begin{macro}{\Pascal@nss} % \changes{v5.4a}{99/11/16}{neu definiert} % \begin{macro}{\LaTeX@nss} % \changes{v5.4a}{99/11/16}{neu definiert} % \begin{macro}{\Python@nss} % \changes{v8.0d}{04/12/27}{Python als zul"assige Sprache neu definiert} % Die Liste der Schl"usselw"orter wird nach den verschiedenen % Anwendungsgebieten unterschieden. % \begin{macrocode} \newcommand{\pLanguage}[1]{\gdef\pLanguage@nss{#1}} \def\Cee@nss{C} \def\Java@nss{Java} \def\Pascal@nss{Pascal} \def\LaTeX@nss{LaTeX} \def\Python@nss{Python} \def\OSII@nss{OS/2} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\CheckForKeyword@nss} % \changes{v5.4a}{99/11/16}{neu definiert} % Die Liste der Schl"usselw"orter wird der Reihe nach durchlaufen und mit % dem aktuellen Argument \cs{arg} verglichen. % \begin{macrocode} \def\CheckForKeyword@nss#1% {% \let\exec\pExpFont@nss% \def\endList{!}% \def\yyI##1,% {% \def\token{##1}% \ifx\token\endList% \ifmmode\else\let\mbox=\relax\fi% \mbox{\exec\selectfont\arg}% \else% \ifx\token\arg% \let\exec\pKeyFont@nss% \fi% \expandafter\yyI% \fi% }% \yyI#1,!,% } % \end{macrocode} % \end{macro} % % \begin{macro}{\pComment} % \ifnum\language=\languageNGerman % Zur Auszeichnung von Kommentar. % \else % For marking up comments. % \fi % \begin{macrocode} \def\pComment% {% \bgroup% \pCommentFont@nss% \let\next=% } % \end{macrocode} % \end{macro} % % \begin{macro}{\pUseKeyFont@nss} % \begin{macro}{\pUseExpFont@nss} % \changes{v5.4a}{99/11/16}{neu eingef"uhrt, ersetzt `pUseVarFont@nss} % \ifnum\language=\languageNGerman % Damit Unterstriche und "ahnliche Sonderzeichen korrekt dargestellt werden % k"onnen, ist vor der Benutzung eines bestimmten Fonts zu "uberpr"ufen, % ob die gew"unschten Zeichen in dem betreffenden Font "uberhaupt zur % Verf"ugung stehen. % \else % In order to represent underlines and similar special characters it has to be % checked, if the wanted characters are provided in a certain font, before % using that font. % \fi % % \ifnum\language=\languageNGerman % Es wird stets auf den Textmodus umgeschaltet, was unter Einsatz des % \textsf{amstex}-Paketes noch besser durch das Kommando \cs{text} % geschehen k"onnte. Es k"onnen Probleme mit dem Zeichen % \texttt{\char94\char94 T}\footnote{Dies funktioniert auf einem % Linux-System} auftreten, in diesem Fall ist das Zeichen durch % \texttt{\char94\char94 Y}\footnote{getestet unter OS/2}. % zu ersetzen % \else % It will be always switched to the text mode, what could be done even better % by the command \cs{text} of the \textsf{amstex} package. There may be some % problems using the character \texttt{\char94\char94 T}\footnote{This one % works under Linux}, in this case it should be replaced by % \texttt{\char94\char94 Y}\footnote{tested under OS/2}. % \fi % \errorstopmode % \begin{macrocode} { \catcode`\#=6% \gdef\pUseKeyFont@nss#1% {% \ifmmode\else\let\mbox=\relax\fi% \mbox{\pKeyFont@nss{#1}}\egroup% } \gdef\pUseExpFont@nss#1% {% \ifmmode\else\let\mbox=\relax\fi% \mbox{\pExpFont@nss{#1}}\egroup% } } % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\pTrue@nss} % \changes{v4.5a}{96/03/15}{neu definiert} % \begin{macro}{\pFalse@nss} % \changes{v4.5a}{96/03/15}{neu definiert} % \ifnum\language=\languageNGerman % Die Vorbesetzungen der logischen Werte \cs{pTrue} und \cs{pFalse}: % \else % The default of the boolean values \cs{pTrue} and \cs{pFalse}: % \fi % \begin{macrocode} \newcommand{\pTrue@nss}{\texttt{WAHR}} \newcommand{\pFalse@nss}{\texttt{FALSCH}} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\pTrue} % \changes{v4.5a}{96/03/15}{neu definiert "uber `pTrue@nss} % \changes{v3.5b}{94/01/19}{umbenannt von `true zur Vermeidung von Interferenzen} % \changes{v3.3c}{94/09/14}{Beschreibung eingef"uhrt} % \begin{macro}{\pFalse} % \changes{v4.5a}{96/03/15}{neu definiert "uber `pTrue@nss} % \changes{v3.5b}{94/01/19}{umbenannt von `false zur Vermeidung von Interferenzen} % \changes{v3.3c}{94/09/14}{Beschreibung eingef"uhrt} % \ifnum\language=\languageNGerman % Um einheitliches Aussehen logischer Werte zu erzielen, werden entsprechende % Makros mit den obigen Vorbesetzungen definiert. % \else % For achieving homogenous appearance of boolean values adequate macros % with the above defaults are defined. % \fi % \begin{macrocode} \newcommand{\pTrue}{\pTrue@nss} \newcommand{\pFalse}{\pFalse@nss} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\pBoolValue} % \changes{v4.5a}{96/03/15}{neu definiert} % \ifnum\language=\languageNGerman % Mit \cs{pBoolValue} k"onnen die voreingestellten Werte von \cs{pTrue} und % \cs{pFalse} ver"andert werden; \cs{sBoolValue} ist der alternative Aufruf % zwecks Kompatibilit"at mit alten Struktogrammen. % \else % The default values of \cs{pTrue} and \cs{pFalse} can be changed by \cs{pBoolValue}. % |sBoolValue| is the alternative command for compatibility reasons with old % structured box charts. % \fi % \begin{macrocode} \newcommand{\pBoolValue}[2]% {% \renewcommand{\pTrue@nss}{#1}% \renewcommand{\pFalse@nss}{#2}% } \let\sBoolValue=\pBoolValue % \end{macrocode} % \end{macro} % % \begin{macro}{\sVar} % \changes{v3.5b}{94/01/19}{umbenannt von `Var zur Vermeidung von Interferenzen} % \changes{v2.5}{93/09/09}{eingef"uhrt durch Jhf} % \begin{macro}{\sKey} % \changes{v4.1a}{95/07/17}{`btt bereits anderweitig definiert} % \changes{v3.5b}{94/01/19}{neu eingef"uhrt} % \begin{macro}{\sTrue} % \begin{macro}{\sFalse} % \ifnum\language=\languageNGerman % Zur Darstellung von Variablen. Hier nur noch zwecks Kompatibilit"at zu % fr"uheren Versionen des \StrukTeXSty aufgef"uhrt. % \else % For representation of variables. Here only mentioned for compatibility % reasons with former versions of \StrukTeXSty. % \fi % \begin{macrocode} \let\sVar=\pVariable \let\sKey=\pKeyword \let\sTrue=\pTrue \let\sFalse=\pFalse % %<*struktex> % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \subsection{\ifnum\language=\languageNGerman Belegung von Registern \else Reservation of Registers \fi} % % \begin{macro}{\savelength@nss} % \changes{v4.0b}{95/05/02}{umbenannt von `s@velength} % \changes{v2.5}{93/09/09}{`VarDeclWd eingef"uhrt} % \ifnum\language=\languageNGerman % |\savelength@nss| % dient dazu, die vor dem Struktogramm g"ultige L"angeneinheit % zwischenzuspeichern, um nach dem Struktogramm den alten Wert % wiederherstellen zu k"onnen. % \else % |\savelength@nss| contributes to intermediate storing of the unit of length, % which was valid before the structured box chart, for recovering the old value % after the box chart. % \fi % \begin{macrocode} \newdimen\savelength@nss % \end{macrocode} % \end{macro} % % \begin{macro}{\gx@nss} % \changes{v4.0b}{95/05/02}{umbenannt von `gx} % \changes{v3.2a}{94/09/14}{Beschreibung eingef"uhrt} % \changes{v3.2a}{94/09/14}{Beschreibung eingef"uhrt} % \begin{macro}{\gy@nss} % \changes{v4.0b}{95/05/02}{umbenannt von `gy} % \begin{macro}{\gsize@nss} % \changes{v4.0b}{95/05/02}{umbenannt von `gsize} % \changes{v3.2a}{94/09/14}{Beschreibung eingef"uhrt} % \ifnum\language=\languageNGerman % |\gx@nss|, |\gy@nss| und |\gsize@nss| enthalten die \emph{globalen} Werte f"ur die % x- und y-Koordinate und die Breite des Struktogramms; % zur Vereinfachung der Anwendung wird in allen F"allen % mit Z"ahlregistern gearbeitet. % \else % |\gx@nss|, |gy@nss| and |\gsize@nss| contain the \emph{global} values for the % x- and y-coordinate and the width of the structured box chart. For simplification % of the application in all cases it is worked with counter registers. % \fi % \begin{macrocode} \newcount\gx@nss \newcount\gy@nss \newcount\gsize@nss % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\param@nss} % \changes{v4.0b}{95/05/02}{umbenannt von `param} % \changes{v3.2a}{94/09/14}{Beschreibung eingef"uhrt} % \ifnum\language=\languageNGerman % |\param@nss| enth"alt den Wert, der als optionales Argument f"ur die Breite % oder H"ohe eines Struktogramms angegeben wird. % \else % |\param@nss| contains the value, which is given as an optional argument for % the width or the height of the structured box chart. % \fi % \begin{macrocode} \countdef\param@nss=199 % \end{macrocode} % \end{macro} % % \begin{macro}{\x@nss} % \changes{v4.0b}{95/05/02}{umbenannt von `x} % \changes{v3.3c}{94/09/14}{Beschreibung eingef"uhrt} % \begin{macro}{\y@nss} % \changes{v4.0b}{95/05/02}{umbenannt von `y} % \changes{v3.3c}{94/09/14}{Beschreibung eingef"uhrt} % \begin{macro}{\xsize@nss} % \changes{v4.0b}{95/05/02}{umbenannt von `xsize} % \changes{v3.3c}{94/09/14}{Beschreibung eingef"uhrt} % \begin{macro}{\xx@nss} % \changes{v4.0b}{95/05/02}{umbenannt von `xx} % \begin{macro}{\yy@nss} % \changes{v4.0b}{95/05/02}{umbenannt von `yy} % \begin{macro}{\tempx@nss} % \changes{v4.0b}{95/05/02}{umbenannt von `tempx} % \begin{macro}{\tempxx@nss} % \changes{v4.0b}{95/05/02}{umbenannt von `tempxx } % \begin{macro}{\tempxxx@nss} % \changes{v7.2}{04/07/13}{eingef"uhrt f"ur die Unterst"utzung von pict2e} % \begin{macro}{\tempy@nss} % \changes{v4.0b}{95/05/02}{umbenannt von `tempy} % \begin{macro}{\tempyy@nss} % \changes{v7.2}{04/07/13}{umbenannt von `tempyy} % \begin{macro}{\tempyyy@nss} % \changes{v7.2}{04/07/04}{eingef"uhrt f"ur die Unterst"utzung von pict2e} % \begin{macro}{\ydepth@nss} % \changes{v4.0b}{95/05/02}{umbenannt von `ydepth} % \changes{v3.2a}{94/09/14}{Beschreibung fehlt noch} % \ifnum\language=\languageNGerman % Es werden einige weitere Variablen ben"otigt, die alle zentral an dieser % Stelle definiert werden: |\x@nss|, |\y@nss| und |\xsize@nss| als lokale % Werte f"ur die $x$- und $y$-Koordinate und die Breite eines % (Unter-)Struktogramms; |\ydepth@nss| gibt die "`Tiefe"' eines % Struktogrammelementes an. Die Variablen |\xx@nss|, |\yy@nss|, % |\tempx@nss|, |\tempxx@nss|, |\tempxxx@nss|, |\tempy@nss|, |\tempyy@nss| % und |\tempyyy@nss| haben unterschiedliche tempor"are Bedeutungen, im % Regelfall deutet ein |x| im Namen auf horizontalen und ein |y| auf % vertikalen Zusammenhang hin. % \else % There are needed some more variables. All those will be defined here: % |\x@nss|, |\y@nss| and |\xsize@nss| as local values for the $x$- and % $y$-coordinate and for the width of a structured subbox chart. % |\ydepth@nss| represents the "'depth"' of an element of a structured box % chart. The variables |\xx@nss|, |\yy@nss|, |\tempx@nss|, |\tempxx@nss|, % |\tempy@nss|, |\tempyy@nss| have different temporary meanings. Normally % an |x| in the name points at a horizontal connection and a |y| in the % name at a vertical connection. % \fi % \begin{macrocode} \countdef\x@nss=220 \countdef\y@nss=221 \countdef\xsize@nss=222 \countdef\ydepth@nss=223 \countdef\xx@nss=224 \countdef\yy@nss=225 \countdef\tempx@nss=226 \countdef\tempxx@nss=227 \countdef\tempy@nss=229 \countdef\tempyy@nss=230 \ifpictIIe% \countdef\tempxxx@nss=228 \countdef\tempyyy@nss=231 \fi % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\TextBox@nss} % \changes{v4.1a}{95/07/18}{umbenannt von `nss@Box} % \begin{macro}{\TextBoxHt@nss} % \changes{v4.1a}{95/07/18}{umbenannt von `nss@BoxHt} % \changes{v3.2a}{94/09/09}{Beschreibung eingef"uhrt} % \ifnum\language=\languageNGerman % |\TextBox@nss| ist die Box, die den Text in einem Struktogrammblock enth"alt, % ihre tats"achliche H"ohe, "Uberl"ange und Unterl"ange wird in |\TextBoxHt@nss| % abgelegt. % \else % |\TextBox@nss| is the box, that contains the text in a structured box chart. % Its real height, ascender and descender are distributed in |\TextBoxHt@nss|. % \fi % \begin{macrocode} \newbox\TextBox@nss \newdimen\TextBoxHt@nss % \end{macrocode} % \end{macro} % \end{macro} % % \subsection{\ifnum\language=\languageNGerman Die einzelnen Makros \else The single Macros \fi} % % \begin{macro}{\filler@nss} % \changes{v4.1a}{95/07/18}{umbenannt von `filler} % \changes{v4.1a}{95/07/17}{`emptyset wird als AMS-Schrift geladen} % \changes{v2.5}{93/09/09}{Leerraum von `% auf `emptyset umgestellt} % \ifnum\language=\languageNGerman % Beim Setzen eines Struktogrammes entsteht teilweise Leerraum, % der mit |\filler@nss| aufgef"ullt wird: "`$\emptyset$"'. Eine % Alternative w"are "`$\mathchar"023B$"', was mit "`|\mathchar"023B|"' % erzeugt wird. % \else % While setting a structured box chart there arises partly empty space, that % will be filled up with |\filler@nss|: "'$\emptyset$"'. An alternative would be % "'$\mathchar"023B$"', which is generated by "'|\mathchar"023B|"'. % \fi % \begin{macrocode} \DeclareMathSymbol\varnothing{\mathord}{AMSb}{"3F} \let\emptyset\varnothing \def\filler@nss% { \ifmmode% \emptyset% \else $\emptyset$% \fi% } % \end{macrocode} % \end{macro} % % \begin{macro}{\c@nter@nss} % \changes{v4.0b}{95/05/02}{umbenannt von `c@nter} % \changes{v3.1}{94/09/09}{Beschreibung eingef"uhrt} % \ifnum\language=\languageNGerman % Der folgende Makro setzt verschiedene Parameter, die zum Zentrieren eines % Textes gebraucht werden. % \else % The following macro sets different parameters, which are used for centering % a text. % \fi % \begin{macrocode} \def\c@nter@nss% {% \leftskip=0pt plus 2em \rightskip=\leftskip \parfillskip=0pt \spaceskip=.333em \xspaceskip=.5em \pretolerance=9999 \tolerance=9999 \hyphenpenalty=9999 \exhyphenpenalty=9999% } % \end{macrocode} % \end{macro} % % \begin{macro}{\PositionNSS} % \changes{v4.5c}{96/05/01}{neu eingef"uhrt zur Positionierung der Struktogramme} % \ifnum\language=\languageNGerman % Struktogramme werden intern als |minipage| verwaltet. Das Kommando % \cs{PositionNSS} erm"oglicht die Positionierung, es erwartet die Werte, % die die |minipage|-Umgebung akzeptiert: |t|, |b| und keine Parameterangabe. % Die Parameter werden nicht "uberpr"uft und gelten global ab Aufruf des % Kommandos. % \else % Structured box charts are internally managed as |minipage|. The instruction % \cs{PositionNSS} enables the positioning. It expects the values, that the |minipage| % environment accepts: |t|, |b| and no parameter option. The parameters % are not checked and are valid globally from the call of instruction on. % \fi % \begin{macrocode} \def\Position@nss{}% \newcommand{\PositionNSS}[1]% {% \def\Position@nss{#1}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\struktogramm} % \changes{v4.4b}{96/03/13}{Optionaler Parameter "uber `empty statt `relax getestet} % \changes{v4.4a}{96/02/29}{`ifthenelse als internes Kommando definiert} % \changes{v3.1a}{94/09/09}{optionaler Parameter eingef"uhrt} % \cs{struktogramm} beginnt ein Struktogramm % \begin{macrocode} \def\struktogramm(#1,#2)% {% % \end{macrocode} % \ifnum\language=\languageNGerman % Zun"achst werden die internen Kommandos aktiviert: % \else % First the internal instructions are activated: % \fi % \begin{macrocode} \let\ifthenelse=\ifthenelse@nss% \let\ifend=\ifend@nss% % \end{macrocode} % \ifnum\language=\languageNGerman % Um den optionalen Parameter zu behandeln, wird in Abh"angigkeit vom % n"achsten Zeichen ein internes Makro aufgerufen. % \else % An internal macro depending on the next character will be called to tread the % optional parameter. % \fi % \begin{macrocode} \@ifnextchar [{\struktogramm@nss(#1,#2)}{\struktogramm@nss(#1,#2)[]}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\endstruktogramm} % \ifnum\language=\languageNGerman % \cs{endstruktogramm} beendet das Struktogramm. Offene Gruppen und Umgebungen % werden geschlossen, lokale Definitionen globaler Werte werden r"uckg"angig % gemacht. % \else % \cs{endstruktogramm} finishes the structured box chart. Open groups and % environments will be closed, local definitions of global values will be returned. % \fi % \begin{macrocode} \def\endstruktogramm% {% \endstr@kt% \end{picture}% \end{minipage}% \setlength{\unitlength}{\savelength@nss}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\struktogramm@NoProof} % \changes{v4.5b}{96/03/26}{Positionierung des Struktogramms "uber [t] bei der minipage} % \changes{v4.4b}{96/03/13}{Optionaler Parameter "uber `empty statt `relax getestet} % \changes{v4.2b}{95/10/15}{umbenannt von `struktogramm@nss} % \changes{v4.0c}{95/05/09}{umbenannt von `nss@struktogramm} % \changes{v3.1a}{94/09/09}{als internes Makro zur Behandlung optionaler Parameter neu} % \changes{v3.3a}{94/09/21}{`baselineskip=0pt innerhalb von Struktogrammen korrigiert} % \ifnum\language=\languageNGerman % |\struktogramm@NoProof| "offnet ein Struktogramm % \else % |\struktogramm@NoProof| opens a structured box chart. % \fi % \begin{macrocode} \def\struktogramm@NoProof(#1,#2)[#3]% {% % \end{macrocode} % \ifnum\language=\languageNGerman % Zun"achst wird die aktuelle \cs{unitlength} zwischengespeichert, da mit einer % eigenen Gr"o"se gearbeitet wird. % \else % First the actual \cs{unitlength} will be stored intermediately, since it is worked % with an own entity. % \fi % \begin{macrocode} \def\next{#3} \setlength{\savelength@nss}{\unitlength} \setlength{\unitlength}{0.001mm} % \end{macrocode} % \ifnum\language=\languageNGerman % Wenn der dritte Parameter nicht \cs{relax} ist, wird die Bezeichnung % geschrieben und es muss ein bisschen zus"atzlicher Platz geschaffen werden. % \else % If the third parameter is not \cs{relax}, then the name will be written and it has to % be created some new space in addition. % \fi % \begin{macrocode} \begin{minipage}[\Position@nss]{#1mm} \ifx\next\empty\else #3\\[\smallskipamount]\fi% % \end{macrocode} % \ifnum\language=\languageNGerman % Um die Verwaltung des ben"otigten Raumes m"oglichst einfach zu machen, % wird eine \cs{picture}-Umgebung ge"offnet, in der eine weitere % Gruppe durch den Aufruf von |\str@kt| ge"offnet wird. % \else % For easier management of the needed space the \cs{picture} environment will be % opened, in which an own other group will be opened by call of |str@kt|. % \fi % \begin{macrocode} \begin{picture}(#1000,#2000)% \str@kt{0}{#2000}{#1000}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\struktogramm@Proof} % \changes{v4.5b}{96/03/26}{Positionierung des Struktogramms "uber [t] bei der minipage} % \changes{v4.4b}{96/03/13}{Optionaler Parameter "uber `empty statt `relax getestet} % \changes{v4.2b}{95/10/15}{neu eingef"uhrt} % \ifnum\language=\languageNGerman % |\struktogramm@proof| "offnet ein Struktogramm im \foreign{proof}-Modus. % Der Ablauf entspricht im wesentlichen |\struktogramm@NoProof|. % \else % |\struktogramm@proof| opens a structured box chart in the \foreign{proof} mode. % Progress is essentially equivalent to |\struktogramm@NoProof|. % \fi % \begin{macrocode} \def\struktogramm@Proof(#1,#2)[#3]% {% \def\next{#3}% \setlength{\savelength@nss}{\unitlength}% \setlength{\unitlength}{0.001mm}% \begin{minipage}[\Position@nss]{#1mm}% \ifx\next\empty\else #3\\[\smallskipamount]\fi% \begin{picture}(#1000,#2000)% \put(0,0){\makebox(0,0)[cc]{$\bullet$}}% \put(0,#2000){\makebox(0,0)[cc]{$\bullet$}}% \put(#1000,0){\makebox(0,0)[cc]{$\bullet$}}% \put(#1000,#2000){\makebox(0,0)[cc]{$\bullet$}}% \str@kt{0}{#2000}{#1000}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\sProofOn} % \begin{macro}{\sProofOff} % \changes{v4.2b}{95/10/15}{neu eingef"uhrt} % \ifnum\language=\languageNGerman % Die Schalter zum Umschalten zwischen \foreign{proof}- und % \foreign{non proof}-Modus. Abschlie"send wird in den \foreign{non proof}-Modus % umgeschaltet. % \else % The switches for changing from \foreign{proof} to \foreign{non proof} mode and % back. Finally it will be switched to \foreign{non proof} mode. % \fi % \begin{macrocode} \def\sProofOn% {% \let\struktogramm@nss=\struktogramm@Proof% } \def\sProofOff% {% \let\struktogramm@nss=\struktogramm@NoProof% } \let\struktogramm@nss=\struktogramm@NoProof% % \end{macrocode} % \end{macro} % \end{macro} % % \changes{v4.3a}{96/01/26}{Dokumentation verbessert und korrigiert} % \ifnum\language=\languageNGerman % Um Kompatibilit"at mit "alteren Versionen von Struktogrammen zu erhalten, % sind die Makros \cs{openstrukt} und \cs{closestrukt} weiterhin in diesem % \foreign{package} erhalten. Diese sollten aber nicht weiter benutzt werden. % \else % To achieve compatibility with older versions of structured box charts the % macros \cs{openstrukt} and \cs{closestrukt} are still included in this package. % But they should'nt be used any longer. % \fi % \begin{macro}{\openstrukt} % \ifnum\language=\languageNGerman % \cs{openstrukt} beginnt ein Struktogramm % \else % \cs{openstrukt} begins a structured box chart. % \fi % \begin{macrocode} \def\openstrukt#1#2% {% % \end{macrocode} % \if % Die aktuelle \cs{unitlength} wird zwischengespeichert, da mit einer eigenen % Gr"o"se gearbeitet wird. % \else % The actual \cs{unitlength} will be stored intermediately, since it is worked with % an own entity. % \fi % \begin{macrocode} \setlength{\savelength@nss}{\unitlength} \setlength{\unitlength}{0.001mm} % \end{macrocode} % \ifnum\language=\languageNGerman % Um die Verwaltung des ben"otigten Raumes m"oglichst einfach zu machen, % wird eine \cs{picture}-Umgebung ge"offnet, in der eine eigene weitere % Gruppe durch den Aufruf von |\str@kt| ge"offnet wird. % \else % For easier management of the needed space the \cs{picture} environment will be % opened, in which an own other group will be opened by the call of |\str@kt|. % \fi % \begin{macrocode} \begin{picture}(#1000,#2000) \str@kt{0}{#2000}{#1000}% } % \end{macrocode} % \end{macro} % \ifnum\language=\languageNGerman % Es ist zu beachten, dass es kein optionales Argument gibt. % \else % One has to pay attention that there's no optional argument. % \fi % % \begin{macro}{\closestrukt} % \ifnum\language=\languageNGerman % \cs{closestrukt} beendet das Struktogramm. Offene Gruppen und Umgebungen % werden geschlossen, lokale Definitionen globaler Werte werden r"uckg"angig % gemacht. % \else % \cs{closestrukt} finishes the structured box chart. Open groups and environments % will be closed. Local definitions of global values will be reversed. % \fi % \begin{macrocode} \def\closestrukt% {% \endstr@kt \end{picture} \setlength{\unitlength}{\savelength@nss}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\getoption} % \ifnum\language=\languageNGerman % \cs{getoption} "uberpr"uft, ob ein optionales Argument angegeben wurde. Dies % geschieht, indem das n"achste Zeichen getestet wird. % \else % \cs{getoption} checks, if an optional argument is given. This happens by % testing the next character. % \fi % \begin{macrocode} \def\getoption{\@ifnextchar [{\getnum}{\param@nss=0\next}} % \end{macrocode} % \end{macro} % % \begin{macro}{\getnum} % \ifnum\language=\languageNGerman % \cs{getnum} weist den Parameter dem globalen Z"ahler |\param@nss| zu und ruft % den auf \cs{next} gesetzten Makro auf. % \else % \cs{getnum} assigns the parameter to the global counter |\param@nss| and calls % the macro set on \cs{next}. % \fi % \begin{macrocode} \def\getnum[#1]{\param@nss=#1\next} % \end{macrocode} % \end{macro} % % \begin{macro}{\str@kt} % \ifnum\language=\languageNGerman % |\str@kt| setzt globale Werte: |\gx@nss| als x-Koordinate (|#1|), |\gy@nss| als % y-Koordinate (|#2|) und |\gsize@nss| als Breite des aktuellen Struktogramms % (|#3|). % Gleichzeitig wird eine Gruppe ge"offnet, in der mit lokalen Kopien dieser % Werte (|\x@nss|, |\y@nss| und |\xsize@nss|) gearbeitet werden kann. % \else % |\str@kt| sets global values: |\gx@nss| as x-coordinate (|#1|), |\gy@nss| as % y-coordinate (|#2|) and |\gsize@nss| as width of the actual structured box chart % (|#3|). % At the same time a group will be opened, in which one can work with local % copies of these values (|\x@nss|, |\y@nss| and |\xsize@nss|). % \fi % \begin{macrocode} \def\str@kt#1#2#3% {% \global\gx@nss=#1\global\gy@nss=#2\global\gsize@nss=#3% \begingroup% \x@nss=\gx@nss\y@nss=\gy@nss\xsize@nss=\gsize@nss% } % \end{macrocode} % \end{macro} % % \begin{macro}{\endstr@kt} % \ifnum\language=\languageNGerman % schlie"st die oben ge"offnete Gruppe, die aktuelle $y$-Koordinate wird global % umgesetzt, um den (weiter unten liegenden) Ansatzpunkt f"ur das n"achste % Element des Struktogramms zu erhalten. % \else % closes the group above opened. The actual $y$-coordinate will be globally % changed to get the point of attachment (which lies further down) for the next % element of the structured box chart. % \fi % \begin{macrocode} \def\endstr@kt% {% \global\gy@nss=\y@nss% \endgroup% \ydepth@nss=\gy@nss% } % \end{macrocode} % \end{macro} % % \changes{v7.0b}{2004/03/09}{ersetzt durch `tempxx@nss} % \changes{v4.0b}{95/05/08}{umbenannt von `xin} % \changes{v3.2a}{94/09/14}{Beschreibung eingef"uhrt} % \begin{macro}{\set@nss} %\changes{v4.0b}{95/05/08}{umbenannt von `set} % \ifnum\language=\languageNGerman % |\set@nss| setzt den als ersten Parameter "ubergebenen Text in eine horizontale % Box |\TextBox@nss|. Ist die Breite dieser Box gr"o"ser als die im ersten Parameter % "ubergebene Breite, wird der Text in eine vertikale Box % gesetzt. % \else % |\set@nss| sets the text, which is given as first parameter, into a horizontal % box |\TextBox@nss|. If the width of this box is bigger than the width % handed over in the first parameter the text will be set into a vertical box. % \fi % \begin{macrocode} \def\set@nss#1#2% {% \setbox\TextBox@nss=\hbox{#1}% \tempxx@nss=\xsize@nss\advance\tempxx@nss by-#2% \ifdim\wd\TextBox@nss>\tempxx@nss\unitlength% \setbox\TextBox@nss=\vbox{\hsize=\tempxx@nss\unitlength\noindent#1}% \fi% } % \end{macrocode} % \end{macro} % % \begin{macro}{\block@nss} % \changes{v7.0a}{04/01/04}{umbenannt von `bl@ck} % \ifnum\language=\languageNGerman % |\block@nss| setzt die Box |\TextBox@nss| entsprechend dem zweiten Parameter. Ist dieser % 1, wird eine Box mit Rahmen gesetzt, ist dieser 0, wird eine Box ohne Rahmen % gesetzt. Bei allen anderen Werten wird nur die Gr"o"se des Struktogramms, % gegeben durch |\y@nss|, vergr"o"sert. % \else % |\block@nss| sets the box |\TextBox@nss| corresponding to the second parameter. % If this parameter is 1, the box will be set in a frame, and if it is 0, a box without % frame will be set. In all other cases only the size of the structured box chart % given by |\y@nss| will be changed. % \fi % \begin{macrocode} \def\block@nss#1#2% {% \tempy@nss=#1\TextBoxHt@nss=\ht\TextBox@nss% \advance\TextBoxHt@nss by\dp\TextBox@nss% \advance\TextBoxHt@nss by 2mm% \ifdim\TextBoxHt@nss<\tempy@nss\unitlength% \TextBoxHt@nss=\tempy@nss\unitlength% \fi% \TextBoxHt@nss=0.00536\TextBoxHt@nss% \ydepth@nss=\TextBoxHt@nss\advance\y@nss by-\ydepth@nss% \ifx#21% \put(\x@nss,\y@nss)% {% \framebox(\xsize@nss,\ydepth@nss){\box\TextBox@nss}% }% \else% \ifx#20% \put(\x@nss,\y@nss)% {% \makebox(\xsize@nss,\ydepth@nss){\box\TextBox@nss}% }% \else% \advance\y@nss by \ydepth@nss% \fi% \fi% } % \end{macrocode} % \end{macro} % % \begin{macro}{\declarationtitle} % \ifnum\language=\languageNGerman % Der Makro \cs{declarationtitle} legt den Inhalt der optionalen "Uberschrift % bei Deklarationen fest. Er kann global vorgegeben werden, um eine % einheitliche Darstellung zu erhalten. % \else % The macro \cs{declarationtitle} determines the content of the optional titel of % declarations. It can be globally given in order to receive a homogeneous % representation. % \fi % \begin{macrocode} \def\declarationtitle{\ifnum\language=\languageNGerman Speicherplatz bereitstellen: \else providing memory space\fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\descriptionindent} % \changes{v4.5a}{96/03/14}{an \LaTeX2e angepasst} % \changes{v3.3a}{94/09/16}{neu eingef"uhrt} % \begin{macro}{\descriptionwidth} % \changes{v4.5a}{96/03/14}{an \LaTeX2e angepasst} % \changes{v3.3a}{94/09/16}{neu eingef"uhrt} % \begin{macro}{\descriptionwidth@nss} % \changes{v4.5a}{96/03/14}{neu eingef"uhrt} % \begin{macro}{\descriptionsep} % \changes{v4.5a}{96/03/14}{an \LaTeX2e angepasst} % \changes{v3.3a}{94/09/16}{neu eingef"uhrt} % \ifnum\language=\languageNGerman % Die folgenden Variablen (\foreign{dimen-register}) wurden eingef"uhrt, % um das Layout der Variablenbeschreibung frei gestalten zu k"onnen. % \else % The following variables (\foreign{dimen-register}) have been introduced to % be able to freely arrange the layout of variable description. % \fi % \begin{macrocode} \newlength{\descriptionindent} \setlength{\descriptionindent}{1.5em} \newlength{\descriptionwidth} \setlength{\descriptionwidth}{40pt} \newlength{\descriptionsep} \setlength{\descriptionsep}{\tabcolsep} \newlength{\descriptionwidth@nss} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\descriptionlabel@nss} % \changes{v5.2a}{97/12/03}{Vorbesetzung des Fonts entf"allt} % \changes{v4.5a}{96/03/14}{neu eingef"uhrt} % \ifnum\language=\languageNGerman % Internes Kommando nach % \else % internal command according to % \fi % \cite[Abs. 3.3.5]{GoossensMittelbachSamarin:Companion2} % \ifnum\language=\languageNGerman zur Definition % der Marke bei der Liste der Variablenbeschreibungen % \else % for the definition of label on the list of variable definitions % \fi % \begin{macrocode} \newcommand{\descriptionlabel@nss}[1]% {% \settowidth{\descriptionwidth@nss}{#1}% \ifnum\descriptionwidth@nss>\descriptionwidth% % term > labelwidth \parbox[b]{\descriptionwidth}% {% \makebox[0pt][l]{#1}\\% }% \else% % term < labelwidth #1% \fi% \hfil\relax% } % \end{macrocode} % \end{macro} % % \begin{macro}{declaration} % \changes{v4.5a}{96/03/14}{neu eingef"uhrt} % \ifnum\language=\languageNGerman % Die Beschreibung von Variablen basiert nun auf der allgemeinen % |list|-Umgebung, die entsprechend modifiziert wurde. Insbesondere % wurden alle Abst"ande auf 0pt gesetzt. % \else % Now the description of variables is based on the common |list|-environment, % which has been modified correspondingly. Especially all distances have been set % on 0pt. % \fi % \begin{macrocode} \newenvironment{declaration}[1][\declarationtitle]% {% \def\next{#1}% \ifx\next\empty\else #1\\\fi \let\description=\description@nss \tempxx@nss=\xsize@nss\advance\tempxx@nss by -\tempx@nss% \begin{minipage}[t]{\tempxx@nss\unitlength} \begin{list}{}% {% \renewcommand{\makelabel}{\descriptionlabel@nss}% \setlength{\labelwidth}{\descriptionwidth}% \setlength{\itemsep}{0pt} \setlength{\topsep}{0pt}% \setlength{\parsep}{0pt} \setlength{\partopsep}{0pt} \setlength{\leftmargin}{\descriptionwidth}% \addtolength{\leftmargin}{\descriptionsep}% \addtolength{\leftmargin}{\descriptionindent}% }% }% {% \end{list}% \end{minipage} } % \end{macrocode} % \end{macro} % % \begin{macro}{\description@nss} % \changes{v4.5a}{96/03/14}{neu eingef"uhrt} % \ifnum\language=\languageNGerman % Um keine Schwierigkeiten mit der |description|-Umgebung zu haben, % wird das Kommando |\description@nss| mit der Erweiterung |@nss| % eingef"uhrt. Seine G"ultigkeit wird % mit einem \cs{let} auf die |declaration|-Umgebung beschr"ankt % \else % In order to avoid difficulties with the |description|-environment the command % |\description@nss| with the extension |@nss| will be introduced. Its validity will be % restricted to |declaration|-environment by a \cs{let}. % \fi % \begin{macrocode} \newcommand{\description@nss}[2]{\item[#1] \{#2\}} % \end{macrocode} % \end{macro} % % \begin{macro}{\assign} % \changes{v3.2a}{94/09/14}{Beschreibung eingef"uhrt} % \ifnum\language=\languageNGerman % Einfache Anweisungen werden "uber \cs{assign} geschrieben: % \else % Simple commands are written by \cs{assign}: % \fi % \begin{macrocode} \def\assign{\let\next=\@assign\getoption}% \def\@assign#1% {% \tempx@nss=\xsize@nss\divide\tempx@nss by 6% \set@nss{#1}{\tempx@nss}\tempy@nss=\number\param@nss000% \block@nss{\tempy@nss}{1}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\sub} % \changes{v4.5a}{96/03/14}{Beschreibung eingef"uhrt} % \ifnum\language=\languageNGerman % Der Aufruf eines Unterprogrammes wird mit \cs{sub} gekennzeichnet: % \else % The call of a subprogram is signed by \cs{sub}: % \fi % \begin{macrocode} \def\sub{\let\next=\@sub\getoption} \def\@sub#1% {% \@assign{#1}\tempx@nss=\xsize@nss\divide\tempx@nss by 20% \tempxx@nss=\x@nss\advance\tempxx@nss by \tempx@nss% \put(\tempxx@nss,\y@nss){\line(0,1){\ydepth@nss}}% \tempxx@nss=\x@nss\advance\tempxx@nss by \xsize@nss% \advance\tempxx@nss by -\tempx@nss% \put(\tempxx@nss,\y@nss){\line(0,1){\ydepth@nss}}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\exit} % \changes{v3.3c}{94/09/27}{Fehler mit der Breite korrigiert} % \changes{v2.5}{93/09/09}{"Anderungen an der Darstellung} % \changes{v2.0}{92/01/17}{Eingef"uhrt durch D. Rieger} % Verlassen einer Schleife an einer bestimmten Stelle. % \begin{macrocode} \def\exit{\let\next=\@exit\getoption} \def\@exit#1% {% \tempx@nss=\xsize@nss\divide\tempx@nss by 6% \set@nss{#1}{\tempx@nss}% \tempy@nss=\number\param@nss000% \block@nss{\tempy@nss}{1}% \divide\ydepth@nss by 2% \advance\y@nss by \ydepth@nss% \ifnum\ydepth@nss<3500% % \end{macrocode} % \ifnum\language=\languageNGerman % Eigene Gruppe bilden, um "Anderung an |\ydepth@nss| lokal zu halten % \else % Build of an own group to keep change of |\ydepth@nss| local % \fi % \begin{macrocode} {% \multiply\ydepth@nss by 2% \put(\x@nss,\y@nss){\line(2,1){\ydepth@nss}}% \put(\x@nss,\y@nss){\line(2,-1){\ydepth@nss}}% }% \else% \put(\x@nss,\y@nss){\line(1,1){\ydepth@nss}}% \put(\x@nss,\y@nss){\line(1,-1){\ydepth@nss}}% \fi% \advance\y@nss by-\ydepth@nss% } % \end{macrocode} % \end{macro} % % \begin{macro}{\return} % \changes{v4.5a}{96/03/14}{Beschreibung eingef"uhrt} % \ifnum\language=\languageNGerman % Die R"uckkkehr aus einem Unterprogramm wird mit \cs{return} gekennzeichnet: % \else % The return from a subprogram is signed by \cs{return}: % \fi % \begin{macrocode} \def\return{\let\next=\@return\getoption} \def\@return#1% {% \tempy@nss=\number\param@nss000% \ifnum\tempy@nss<7000 \tempy@nss=7000 \fi% \set@nss{#1}{\tempy@nss} \block@nss{\tempy@nss}{1}% \divide\ydepth@nss by 2% \advance\y@nss by \ydepth@nss% \put(\x@nss,\y@nss){\line(1,1){\ydepth@nss}}% \put(\x@nss,\y@nss){\line(1,-1){\ydepth@nss}}% \tempx@nss=\x@nss\advance\tempx@nss by \xsize@nss% \put(\tempx@nss,\y@nss){\line(-1,1){\ydepth@nss}}% \put(\tempx@nss,\y@nss){\line(-1,-1){\ydepth@nss}}% \advance\y@nss by-\ydepth@nss% } % \end{macrocode} % \end{macro} % % \begin{macro}{\condindent@nss} % \changes{v4.1b}{95/07/19}{umbenannt von `w@rt@nss} % \changes{v4.0b}{95/05/08}{umbenannt von `w@rt} % \begin{macro}{\index@nss} % \changes{v4.1b}{95/07/19}{umbenannt von `zaehler@nss} % \changes{v4.0b}{95/05/08}{umbenannt von `zaehler} % \begin{macro}{\anzzeilen@nss} % \changes{v4.1b}{95/07/19}{umbenannt von `zeilen@nss} % \changes{v4.0b}{95/05/08}{umbenannt von `zeilen} % \changes{v3.1}{94/09/09}{Beschreibung eingef"uhrt} % \ifnum\language=\languageNGerman % |\index@nss|, |\anzzeilen@nss| und |\condindent@nss| werden ben"otigt, um % den Umbruch der Bedingung in einer \cs{if}-Abfrage geeignet durchf"uhren % zu k"onnen: % \begin{quote} % \DeleteShortVerb{\|} % \begin{tabular}{|l|p{6cm}|}\hline % \verb-\index@nss- & ein Schleifenindex \\\hline % \verb-\anzzeilen@nss- & die Anzahl von % Zeilen, in die der Bedingungstext maximal zerlegt wird \\\hline % \verb-\condindent@nss- & enth"alt den jeweiligen Wert des Einzugs, um den % Bedingungstext an das Dreieck anzupassen \\\hline % \end{tabular} % \MakeShortVerb{\|} %\end{quote} % Die H"ohe der Zeilen wird bei der Berechnung mit 5mm angenommen. % \else % |\index@nss|, |\anzzeilen@nss| and |\condindent@nss| are used for suitable % making up of \cs{if}-conditions: % |\index@nss| is a loopindex, |\anzzeilen@nss| gives the number of lines the % conditioning text can be analyzed at most and |\condindent@nss| consists % the value of insertion to adapt the conditioning text to the triangle. % In this evaluation the height of lines is 5mm. % \fi % \begin{macrocode} \countdef\condindent@nss=232 \countdef\index@nss=233% % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\gindhelp@nss} % \changes{v7.0ba}{04/03/09}{umbenannt von `indhelp@nss} % \begin{macro}{\indentmeasure@nss} % \changes{v5.3a}{98/11/27}{neu eingef"uhrt} % \begin{macro}{\indentmeasureleft@nss} % \changes{v5.3a}{98/11/27}{neu eingef"uhrt} % \begin{macro}{\thisindent@nss} % \changes{v5.3a}{98/11/27}{neu eingef"uhrt} % \begin{macro}{\thisindentleft@nss} % \changes{v5.3a}{98/11/27}{neu eingef"uhrt} % \begin{macro}{\thislength@nss} % \changes{v5.3a}{98/11/27}{neu eingef"uhrt} % \ifnum\language=\languageNGerman % Um die Textform (\cs{parshape}) an beliebige Steigungen anpassen zu k"onnen, % sind einige Rechenoperationen mit Hilfsgr"o"sen erforderlich. % Die folgenden |dimen|-Variablen wurden eingef"uhrt, um die Textform % (\cs{parshape}) an beliebige Steigungen anpassen zu k"onnen, die Bedeutungen % sind im einzelnen: % \begin{quote} % \DeleteShortVerb{\|} % \begin{tabular}{|l|p{6cm}|}\hline % \verb-\indentmeasure@nss-: & Einheit des Einzugs (links)\\\hline % \verb-\indentmeasureright@nss-:& Einheit des Einzugs (rechts) \\\hline % \verb-\thisindent@nss-: & aktueller Einzug (links) \\\hline % \verb-\thisindentright@nss-: & aktueller Einzug (rechts) \\\hline % \verb-\thislength@nss-: & L"ange der aktuellen Zeile, ergibt % sich aus der Zeilenl"ange \verb-\xsize@nss- % vermindert um \verb-\thisindent@nss- % und \verb-\thisindentright@nss-\\\hline % \end{tabular} % \MakeShortVerb{\|} %\end{quote} % |\gindhelp@nss| ist eine einfache Hilfsvariable zur tempor"aren Speicherung % numerischer Werte. % \else % |\gindhelp@nss| is a simple helper variable for storing a numerical value % temporarily. % \fi % \begin{macrocode} \newdimen\indentmeasure@nss \newdimen\indentmeasureright@nss \newdimen\thisindent@nss \newdimen\thisindentright@nss \newdimen\thislength@nss \countdef\gindhelp@nss=234 % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\ifthenelse@nss} % \changes{v8.0a}{04/07/13}{Paket \textsf{pict2e.sty} wird unterst"utzt} % \changes{v4.4a}{96/02/29}{Kommando intern gemacht, um benannt von `ifthenelse} % \changes{v4.1d}{95/10/04}{Tippfehler korrigiert} % \changes{v4.0d}{95/04/12}{Tippfehler korrigiert} % \changes{v3.1}{94/09/09}{Beschreibung eingef"uhrt} % \ifnum\language=\languageNGerman % |\ifthenelse@nss| leitet eine einfache Verzweigung ein. Um Konflikte % mit anderen Makropaketen zu vermeiden, wird eine Schreibweise benutzt, % die auf Grund des Klammeraffens nicht direkt aufrufbar ist. Erst ein \cs{let} % in der Definition der Umgebung |struktogramm| macht dieses Kommando aktiv. % \else % |\ifthenelse@nss| introduces a simple branch. In order to avoid conflicts with % other macro packages a style is used, which can't be directly called because % of the at. Only a \cs{let} in the definition of environment |struktogramm| % activates the command. % \fi % \begin{macrocode} \def\ifthenelse@nss{\let\next=\@ifthenelse@nss\getoption} \def\@ifthenelse@nss#1#2#3#4#5% % \end{macrocode} % \ifnum\language=\languageNGerman % Die 5 Parameter sind: % \else % The 5 parameters are: % \fi % \begin{enumerate} % \ifnum\language=\languageNGerman % \item Die Steigung (negativ, invers) des linken Zweiges, % \item die Steigung (positiv, invers) des rechten Zweiges, % \item die Bedingung, die getestet wird, % \item Fall des linken Zweiges ("ublicherweise "`ja"') und % \item Fall des rechten Zweiges ("ublicherweise "`nein"'). % \else % \item the gradient (negative, inverse) of the left branch, % \item the gradient (positive, inverse) of the right branch, % \item the condition, that is tested, % \item case of the left branch (normally "`yes"') and % \item case of the right branch (normally "`no"'). % \fi % \end{enumerate} % \begin{macrocode} {% % \end{macrocode} % \ifnum\language=\languageNGerman % Als erstes werden die schr"agen Linien gezeichnet. |\tempx@nss| ist die % Breite des linken Zweiges, |\tempxx@nss| die des rechten Zweiges. % \else % First the slanting lines are drawn. |\tempx@nss| is the width of the left branch, % |\tempxx@nss| the width of the right branch. % \fi % \begin{macrocode} %\ifthenelse{\boolean{anygradient}}% %{% \ifanygradient % \end{macrocode} % \ifnum\language=\languageNGerman % Wenn \cs{anygradient} nicht wahr ist, werden schr"age Linien mit \cs{line} % erzeugt. \cs{xx@nss} ist die Anzahl von Einheiten, in die aktuelle Breite % zerlegt wird. % \else % If \cs{anygradient} isn't true, the slanting lines are generated by % \cs{line}. \cs{xx@nss} is the number of unit, into which the current % width is divided. % \fi % \begin{macrocode} \xx@nss=#1 \advance\xx@nss by #2% \ifnum\number\param@nss000>0% % \end{macrocode} % \ifnum\language=\languageNGerman % \cs{tempyy@nss} ist die H"ohe des "`Bedingungsvierecks"', \cs{tempx@nss} % die linke und \cs{tempxx@nss} die rechte Breite. % \else % \cs{tempyy@nss} is the height of the box including the condition, % \cs{tempx@nss} it's left and \cs{tempxx@nss} it's right width. % \fi % \begin{macrocode} \tempyy@nss=\number\param@nss000% \tempx@nss=\xsize@nss% \multiply\tempx@nss by #1 \divide\tempx@nss by \xx@nss% \tempxx@nss=\xsize@nss% \multiply\tempxx@nss by #2 \divide\tempxx@nss by \xx@nss% \else% \tempyy@nss=\xsize@nss \divide\tempyy@nss by \xx@nss% \tempx@nss=\tempyy@nss \multiply\tempx@nss by #1% \tempxx@nss=\tempyy@nss \multiply\tempxx@nss by #2% \fi% \xx@nss=\tempx@nss \advance\xx@nss by \x@nss% \tempy@nss=\y@nss \advance\tempy@nss by -\tempyy@nss% \ifemlines% \emline{\x@nss}{\y@nss}{}{\xx@nss}{\tempy@nss}{}% \else\ifcurves% \curve(\x@nss, \y@nss, \xx@nss, \tempy@nss)% \else\ifpictIIe% % \end{macrocode} % \ifnum\language=\languageNGerman % Die Steigungen d"urfen jetzt fast belibige Werte annehmen, Z"ahler und % Nenner m"ussen jedoch im Intervall \([-1000, 1000]\) liegen, die % Skalierung mit dem Faktor 1000 muss daher wieder r"uckg"angig gemacht werden. % \else % The slope arguments must lie in the intervall \([-1000, 1000]\), so scale % them appropriately. % \fi % \begin{macrocode} \tempyyy@nss=\tempyy@nss \divide\tempyyy@nss by 1000 \tempxxx@nss=\tempx@nss \divide\tempxxx@nss by 1000 \put(\x@nss,\y@nss){\line(\tempxxx@nss, -\tempyyy@nss){\tempx@nss}} \fi\fi\fi% \advance\x@nss by \xsize@nss% \ifemlines% \emline{\x@nss}{\y@nss}{}{\xx@nss}{\tempy@nss}{}% \else\ifcurves% \curve(\x@nss, \y@nss, \xx@nss, \tempy@nss) \else\ifpictIIe% \tempxxx@nss=\tempxx@nss \divide\tempxxx@nss by 1000 \put(\x@nss,\y@nss){\line(-\tempxxx@nss, -\tempyyy@nss){\tempxx@nss}} \fi\fi\fi% % \end{macrocode} % \ifnum\language=\languageNGerman % Die Koordinaten werden auf die linke untere Ecke des % "`Bedingungsrechteckes"' gesetzt: % \else % The coordinates are set on the left lower angle of the "`conditioning rectangle"': % \fi % \begin{macrocode} \advance\x@nss by -\xsize@nss \advance\y@nss by -\tempyy@nss% % \end{macrocode} % \ifnum\language=\languageNGerman % Nun wird die Form des Bedingungstextes berechnet (vgl. % \else % Now the form of the conditioning text will be calculated (cf. % \fi % \cite[Kap.~14, S.~101--102]{Knuth:TeXBook}): % \begin{macrocode} \tempy@nss=\tempyy@nss\divide\tempy@nss by 5000% % \end{macrocode} % \ifnum\language=\languageNGerman % Wenn die H"ohe des "`Bedingungsrechteckes"' zu gering ist, muss dennoch % eine Zeile hineingeschrieben werden, ansonsten f"uhrt \cs{parshape} zu einem % Fehler. % \else % If the height of the "`conditioning rectangle"' is too low, a line has to % be written though. Otherwise \cs{parshape} causes a mistake. % \fi % \changes{v8.0e}{05/05/17}{Fehlermeldung erweitert, nun auch Hinweis auf % curves und pict2e} % \begin{macrocode} \ifnum\tempy@nss<1 \tempy@nss=1\fi% \indentmeasure@nss=\xsize@nss\unitlength% \gindhelp@nss=#1\advance\gindhelp@nss by #2% \divide\indentmeasure@nss by \gindhelp@nss% \indentmeasureright@nss = \indentmeasure@nss% \multiply\indentmeasure@nss by #1% \multiply\indentmeasureright@nss by #2% \divide\indentmeasure@nss by \tempyy@nss% \divide\indentmeasureright@nss by \tempyy@nss% \phantom{\vbox{\hsize=0pt\global\gindhelp@nss=\the\baselineskip}}% \multiply\gindhelp@nss by 360% \multiply\indentmeasure@nss by \gindhelp@nss% \multiply\indentmeasureright@nss by \gindhelp@nss% \xdef\shape{}\index@nss=0% \loop% \advance\index@nss by 1% %Zahl der Zeile \thisindent@nss=\indentmeasure@nss% \multiply\thisindent@nss by \index@nss% \advance\thisindent@nss by 0.175cm% \xdef\shape{\shape\the\thisindent@nss}% \thisindentright@nss=\indentmeasureright@nss% \multiply\thisindentright@nss by \index@nss% \advance\thisindentright@nss by 0.175cm% \thislength@nss=\xsize@nss\unitlength% \advance\thislength@nss by -\thisindent@nss \advance\thislength@nss by -\thisindentright@nss \xdef\shape{\shape\the\thislength@nss}% \ifnum\index@nss<\tempy@nss% \repeat% %}% %{% \else \ifnum\number\param@nss000>0% \typeout{struktex warning:}% \typeout{[...] not supplied without curves, emlines2, or pict2e}% \fi% \tempx@nss=#1 \advance\tempx@nss by #2% \tempyy@nss=\xsize@nss \divide\tempyy@nss by \tempx@nss% \tempx@nss=\tempyy@nss \multiply\tempx@nss by #1% \put(\x@nss,\y@nss){\line(#1,-1){\tempx@nss}}% \tempxx@nss=\tempyy@nss \multiply\tempxx@nss by #2% \advance\x@nss by \xsize@nss% \put(\x@nss,\y@nss){\line(-#2,-1){\tempxx@nss}}% \advance\x@nss by -\xsize@nss \advance\y@nss by -\tempyy@nss% \tempy@nss=\tempyy@nss\divide\tempy@nss by 5000% \ifnum\tempy@nss<1 \tempy@nss=1\fi% \xdef\shape{}\index@nss=0% \loop% \advance\index@nss by 1% \condindent@nss=#1\multiply\condindent@nss by\index@nss% \multiply\condindent@nss by 5000% \xdef\shape{\shape\the\condindent@nss\unitlength}% \condindent@nss=#1\advance\condindent@nss by #2% \multiply\condindent@nss by\index@nss% \multiply\condindent@nss by -5000% \advance\condindent@nss by \xsize@nss% \xdef\shape{\shape\the\condindent@nss\unitlength}% \ifnum\index@nss<\tempy@nss% \repeat% %}% \fi \put(\x@nss,\y@nss)% {% \framebox(\xsize@nss,\tempyy@nss)[tl]% {% \vbox% {% \hsize=\xsize@nss\unitlength% \parshape=\tempy@nss \shape \c@nter@nss% %dies sorgt f"ur den Einzug \noindent\vrule width0pt height12pt \relax #3% %hier wird der Text ausgegeben }% }% }% \divide\tempyy@nss by 2% \xx@nss=\xsize@nss\advance\xx@nss by-\tempx@nss% \advance\xx@nss by-\tempxx@nss% \ifodd\xx@nss\advance\tempxx@nss by 1\fi% \divide\xx@nss by 2\advance\tempxx@nss by \xx@nss% \advance\tempx@nss by \xx@nss% \put(\x@nss,\y@nss){\makebox(\tempx@nss,\tempyy@nss){#4}}% \xx@nss=\x@nss\advance\xx@nss by \tempx@nss% \put(\xx@nss,\y@nss){\makebox(\tempxx@nss,\tempyy@nss){#5}}% \str@kt{\x@nss}{\y@nss}{\tempx@nss}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\change} % \changes{v4.5b}{96/03/28}{Beschreibung eingef"uhrt} % \ifnum\language=\languageNGerman % \cs{change} trennt die Zweige beim |\ifthenelse@nss| % \else % \cs{change} seperates the branches in |\ifthenelse@nss| % \fi % \begin{macrocode} \def\change% {% \endstr@kt\str@kt{\xx@nss}{\y@nss}{\tempxx@nss}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\ifend@nss} % \changes{v4.5b}{96/03/28}{Beschreibung eingef"uhrt} % \ifnum\language=\languageNGerman % |\ifend@nss| beendet |\ifthenelse@nss|, wird in |struktogramm| intern % gemacht. % \else % |\ifend@nss| terminates |\ifthenelse@nss|, which is internally done in % |struktogramm|. % \fi % \begin{macrocode} \def\ifend@nss% {% \global\gy@nss=\y@nss\endgroup\tempy@nss=\gy@nss% \ifnum\tempy@nss<\ydepth@nss% \y@nss=\tempy@nss\advance\ydepth@nss by-\tempy@nss% \put(\x@nss,\y@nss)% {% \framebox(\tempx@nss,\ydepth@nss)% {% \ifnum\ydepth@nss>5000\filler@nss\fi% }% }% \else% \ifnum\tempy@nss>\ydepth@nss% \y@nss=\ydepth@nss\advance\tempy@nss by-\ydepth@nss% \put(\xx@nss,\y@nss)% {% \framebox(\tempxx@nss,\tempy@nss)% {% \ifnum\tempy@nss>5000\filler@nss\fi% }% }% \else% \y@nss=\ydepth@nss% \fi% \fi% } % \end{macrocode} % \end{macro} % % \begin{macro}{\forever} % \changes{v3.5a}{94/11/22}{"ubernommen von J. Dietel} % \changes{v2.0}{92/01/17}{Eingef"uhrt durch D. Rieger} % \begin{macro}{\foreverend} % \changes{v3.5a}{94/11/22}{"ubernommen von J. Dietel} % \changes{v2.0}{92/01/17}{Eingef"uhrt durch D. Rieger} % \ifnum\language=\languageNGerman % Beginn und Ende einer Endlosschleife. % \else % Begin and end of an endless loop % \fi % \begin{macrocode} \def\forever{\let\next=\@forever\getoption} \def\@forever{ \tempx@nss=\xsize@nss \divide\tempx@nss by 6 \set@nss{\mbox{\rule{0mm}{3ex}}}{\tempx@nss} \tempy@nss=\number\param@nss000 \block@nss{\tempy@nss}{2} \advance\x@nss by \ydepth@nss \advance\y@nss by -\ydepth@nss \tempxx@nss=\xsize@nss \advance\tempxx@nss by -\ydepth@nss \tempy@nss=\ydepth@nss \str@kt{\x@nss}{\y@nss}{\tempxx@nss} } \def\foreverend{ \endstr@kt \advance\x@nss by-\tempy@nss \advance\ydepth@nss by -\tempy@nss \tempyy@nss=\ydepth@nss \ydepth@nss=-\ydepth@nss \advance\ydepth@nss by \y@nss \advance\ydepth@nss by \tempy@nss \y@nss=\tempyy@nss \put(\x@nss,\y@nss){\framebox(\xsize@nss,\ydepth@nss){}} \put(\x@nss,\y@nss){\makebox(\xsize@nss,\tempy@nss){\box\TextBox@nss}} } % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\dfr} % \changes{v4.5b}{96/03/28}{Beschreibung eingef"uhrt} % \begin{macro}{\dfrend} % \changes{v4.5b}{96/03/28}{Beschreibung eingef"uhrt} % \ifnum\language=\languageNGerman % Aus Kompatibilit"atsgr"unden werden f"ur \cs{forever} und \cs{foreverend} noch % die folgenden Abk"urzungen bereitgestellt. % \else % For reasons of compatibility the following abbreviations for \cs{forever} and % \cs{foreverend} are provided. % \fi % \begin{macrocode} \let\dfr\forever \let\dfrend\foreverend % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\while} % \begin{macro}{\whileend} % \ifnum\language=\languageNGerman % Beginn und Ende einer kopfgesteuerten Schleife. % \else % Begin and end of a loop withtest before. % \fi % \begin{macrocode} \def\while{\let\next=\@while\getoption} \def\@while#1{\tempx@nss=\xsize@nss\divide\tempx@nss by 6 \set@nss{#1\hskip\xsize@nss\unitlength}{\tempx@nss} \tempy@nss=\number\param@nss000 \block@nss{\tempy@nss}{0} \tempy@nss=\y@nss\advance\y@nss by \ydepth@nss \tempx@nss=\x@nss\advance\tempx@nss by \ydepth@nss \tempxx@nss=\xsize@nss\advance\tempxx@nss by -\ydepth@nss \str@kt{\tempx@nss}{\tempy@nss}{\tempxx@nss} } \def\whileend{\endstr@kt\tempy@nss=\y@nss\advance\tempy@nss by-\ydepth@nss \y@nss=\ydepth@nss \put(\x@nss,\y@nss){\framebox(\xsize@nss,\tempy@nss){}} } % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\until} % \begin{macro}{\untilend} % \ifnum\language=\languageNGerman % Beginn und Ende einer fu"sgesteuerten Schleife. % \else % Begin and end of a loop with test after. % \fi % \begin{macrocode} \def\until{\let\next=\@until\getoption} \def\@until#1{\tempx@nss=\xsize@nss\divide\tempx@nss by 6 \set@nss{#1\hskip\xsize@nss\unitlength}{\tempx@nss} \tempy@nss=\number\param@nss000 \block@nss{\tempy@nss}{2} \advance\x@nss by \ydepth@nss\tempxx@nss=\xsize@nss \advance\tempxx@nss by -\ydepth@nss \tempy@nss=\ydepth@nss \str@kt{\x@nss}{\y@nss}{\tempxx@nss} } \def\untilend{\endstr@kt\advance\x@nss by-\tempy@nss \advance\ydepth@nss by -\tempy@nss \tempyy@nss=\ydepth@nss\ydepth@nss=-\ydepth@nss% \advance\ydepth@nss by \y@nss \y@nss=\tempyy@nss \put(\x@nss,\y@nss){\framebox(\xsize@nss,\ydepth@nss){}} \put(\x@nss,\y@nss){\makebox(\xsize@nss,\tempy@nss) {\box\TextBox@nss}}} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\cases@nss} % \changes{v7.0b}{2004/03/09}{ersetzt durch `tempxx@nss} % \changes{v4.2a}{95/10/06}{neu eingef"uhrt} % \ifnum\language=\languageNGerman % |\cases@nss| wird ben"otigt, um die Anzahl der F"alle im linken Zweig % des \cs{case}-Konstruktes berechnen zu k"onnen. |\cases@nss| nimmt entweder % die Anzahl der F"alle oder die Anzahl der F"alle $-1$ an. % \else % |\cases@nss| is needed for calculating the number of cases in the left branch of % the \cs{case}-construct. |\cases@nss| assumes the value either the number of cases % or the number of cases $-1$. % \fi % \end{macro} % % \begin{macro}{\case} % \begin{macro}{\caseend} % \begin{macro}{\switch} % \changes{v8.0d}{04/12/29}{Fehlerkorrektur: senkrechte Trennlinien haben % nun die richtige L"ange} % \changes{v8.0a}{04/07/13}{Paket \textsf{pict2e.sty} wird unterst"utzt} % \changes{v4.2a}{95/10/04}{um \foreign{default}-Zweig erweitert} % \changes{v4.1d}{95/10/04}{Dokumentation verbessert} % \changes{v3.5a}{94/11/22}{"ubernommen von J. Dietel} % \ifnum\language=\languageNGerman % \cs{case}, \cs{caseend} und \cs{switch} stellen eine Mehrfachverzweigung dar. % Es sind derzeit noch die alten Versionen \cs{caseold}, \cs{caseoldend} und % \cs{switchold} zus"atzlich enthalten, diese sollten in einer sp"ateren % Version gestrichen werden. % \else % \cs{case}, \cs{caseend} and \cs{switch} represent a multiple branch. At the moment % the old versions \cs{caseold}, \cs{caseoldend} and \cs{switchold} are included in addition. % These should be cancelled in a later version. % \fi % % \ifnum\language=\languageNGerman % Der Makro hat vier Parameter: % \begin{enumerate} % \item Die Steigung (negativ, invers) der schr"agen Linie, % \item die Anzahl der F"alle, % \item den Text der Bedingung und % \item den des ersten Falles % \end{enumerate} % Zus"atzlich gibt es einen optionalen vorangestellten Parameter, der es im % Falle der Benutzung des \textsf{emlines2.sty} erm"oglicht, die schr"age % Linie mit einer beliebigen Steigung zu zeichnen. Wird dieser Parameter % genutzt, hat der erste Parameter eine ge"anderte Bedeutung: ist der % Parameter eine gerade Zahl, wird die Schr"age gerade durchgezogen (kein % \foreign{default}-Zweig), ansonsten wird der letzte Zweig als % Standardfall angesehen und somit werden die Schr"agen entsprechend % gezeichnet: die ersten $n-1$ F"alle werden im linken Zweig untergebracht, % der $n$-te Fall wird im rechten Zweig abgehandelt, vgl. dazu auch die % Abbildungen auf Seite~\pageref{case1} und \pageref{case2}. % \else % The macro has four parameters: % \begin{enumerate} % \item the gradient (negative, inverse) of a slanted line, % \item the number of cases, % \item the text of the condition and % \item the one of the first case % \end{enumerate} % Additionally there is an optional parameter placed in front. In the case % of using of one of the packages \textsf{curves.sty}, % \textsf{emlines2.sty} or\textsf{pict2e.sty} this parameter enables % drawing the slanted line with any gradient. If this parameter is used, % the first parameter has a different meaning: if the parameter is an even % number, the slanted line will be drawn upright (no \foreign{default} % branch), otherwise the last branch is regarded as standard case and so % the slanted lines are drawn accordingly: the first \(n-1\) cases are put % into the left branch, the \(n\)-th case is done in the right branch. For % a better understanding see the figures on page~\pageref{case1} and % \pageref{case2}. % \fi % \begin{macrocode} \def\case{\let\next=\@case\getoption} \def\@case#1#2#3#4% { % \end{macrocode} % \ifnum\language=\languageNGerman % Merken der Anzahl der F"alle % \else % memo of number of cases % \fi % \begin{macrocode} \tempxx@nss=\number#2 % \end{macrocode} % \ifnum\language=\languageNGerman % Zun"achst die schr"age Linie zeichnen % \else % first drawing the slanted lines % \fi % \begin{macrocode} \ifanygradient% %{% % \end{macrocode} % \ifnum\language=\languageNGerman % -- wenn \cs{anygradient} nicht wahr ist, werden schr"age Linien mit \cs{line} % erzeugt, % \else % -- if \cs{anygradient} isn't true, the slanted lines are generated by % \cs{line}, % \fi % \begin{macrocode} % \end{macrocode} % \ifnum\language=\languageNGerman % wobei die H"ohe des Rahmens f"ur die Fallunterscheidungen aus seiner % Breite und der vorgegebenen Steigung berechnet wird --, % \else % where the height of frame for the different cases is evaluated from % the width and the given gradient --, % \fi % \begin{macrocode} \ifnum\number\param@nss000>0 % \end{macrocode} % \ifnum\language=\languageNGerman % Wenn die H"ohe des Rahmens vorgegeben ist, nimm diese, ansonsten berechne % sie wie oben. % \else % If the height of the frame is given, take it, otherwise calculate it like above. % \fi % \begin{macrocode} \tempyy@nss=\number\param@nss000% \ifodd\number#1 \advance\tempxx@nss by -1 \fi \else \tempyy@nss=\xsize@nss \divide\tempyy@nss by #1 \fi \ifnum\number#2=\tempxx@nss % \end{macrocode} % \ifnum\language=\languageNGerman % \cs{tempxx@nss} ist unver"andert, es wird also die Diagonale (gerade % Linie) gezeichnet. Die Berechnung der Koordinaten basiert auf: % \begin{quote} % \begin{tabular}{r@{:~}l} % \cs{x@nss} & linke obere x-Koordinate des Kastens\\ % \cs{y@nss} & linke obere y-Koordinate des Kastens\\ % \cs{xsize@nss} & Breite des Kastens\\ % \cs{tempyy@nss} & H"ohe des Kastens\\ % \cs{tempxx@nss} & Anzahl der F"alle (evtl. reduziert um 1)\\ % \end{tabular} % \end{quote} % \else % \cs{tempxx@nss} is unchanged, therefore we draw a diagonal. The internal % computation bases on % \begin{quote} % \begin{tabular}{r@{:~}l} % \cs{x@nss} & left upper x-coordinate of the case box\\ % \cs{y@nss} & left upper y-coordinate of the case box\\ % \cs{xsize@nss} & width of the case box\\ % \cs{tempyy@nss} & height of the case box\\ % \cs{tempxx@nss} & number of cases (mayve reduced by 1)\\ % \end{tabular} % \end{quote} % \fi % \begin{macrocode} \xx@nss=\x@nss \advance\xx@nss by \xsize@nss \tempy@nss=\y@nss \advance\tempy@nss by -\tempyy@nss \ifemlines% \emline{\x@nss}{\y@nss}{}{\xx@nss}{\tempy@nss}{}% \else\ifcurves% \curve(\x@nss, \y@nss, \xx@nss, \tempy@nss)% \else\ifpictIIe% \tempxxx@nss=\xx@nss \divide\tempxxx@nss by 1000 \tempyyy@nss=\tempy@nss \advance\tempyyy@nss by -\y@nss \divide\tempyyy@nss by 1000 \put(\x@nss,\y@nss){\line(\tempxxx@nss, \tempyyy@nss){\xx@nss}} \fi\fi\fi% \else \tempx@nss=\xsize@nss \multiply\tempx@nss by \tempxx@nss \divide\tempx@nss by #2 \xx@nss=\x@nss \advance\xx@nss by \tempx@nss \tempy@nss=\y@nss \advance\tempy@nss by -\tempyy@nss \ifemlines% \emline{\x@nss}{\y@nss}{}{\xx@nss}{\tempy@nss}{}% \else\ifcurves% \curve(\x@nss, \y@nss, \xx@nss, \tempy@nss)% \else\ifpictIIe% \tempxxx@nss=\xx@nss \divide\tempxxx@nss by 1000 \tempyyy@nss=\tempy@nss \advance\tempyyy@nss by -\y@nss \divide\tempyyy@nss by 1000 \put(\x@nss,\y@nss){\line(\tempxxx@nss, \tempyyy@nss){\xx@nss}} \fi\fi\fi% \advance\x@nss by \xsize@nss \ifemlines% \emline{\x@nss}{\y@nss}{}{\xx@nss}{\tempy@nss}{}% \else\ifcurves% \curve(\x@nss, \y@nss, \xx@nss, \tempy@nss)% \else\ifpictIIe% \tempxxx@nss=\x@nss \advance\tempxxx@nss by -\xx@nss \divide\tempxxx@nss by 1000 \tempyyy@nss=\tempy@nss \advance\tempyyy@nss by -\y@nss \divide\tempyyy@nss by 1000 \xx@nss=-\xx@nss \advance\xx@nss by \x@nss \put(\x@nss,\y@nss){\line(-\tempxxx@nss, \tempyyy@nss){\xx@nss}} \fi\fi\fi% \advance\x@nss by -\xsize@nss \fi %}{ \else% \ifanygradient \ifnum\number\param@nss000>0 \typeout{struktex warning:}% \typeout{[...] not supplied without curves, emlines2, or pict2e}% \fi \put(\x@nss,\y@nss){\line(#1,-1){\xsize@nss}} \tempyy@nss=\xsize@nss \divide\tempyy@nss by #1 %} \fi% \ifanygradient % \end{macrocode} % \ifnum\language=\languageNGerman % dann den Bedingungstext in die Mitte des rechten oberen Viertels des % CASE-Rechtecks schreiben, % \else % then the conditioning text writing into the middle of the upper quarter of % CASE-rectangle % \fi % \changes{v8.0e}{05/05/17}{`tempxxx@nss umbenannt in `tempxx@nss (wir % befinden uns nicht im Fall pictIIe)} % \changes{v8.0f}{05/06/12}{`tempxx@nss umbenannt in `tempx@nss (die Anzahl % der F"alle wurde versehentlich ge"andert)} % \begin{macrocode} \tempx@nss=\xsize@nss \divide\tempx@nss by 2 \divide\tempyy@nss by 2 \advance\x@nss by \tempx@nss \advance\y@nss by -\tempyy@nss \put(\x@nss,\y@nss){\makebox(\tempx@nss,\tempyy@nss){#3}} % \end{macrocode} % \ifnum\language=\languageNGerman % schlie"slich |\x@nss| und |\y@nss| auf den alten Wert zuruecksetzen und % zur sp"ateren Verwendung merken. % \else % finally setting |\x@nss| and |\y@nss| on the old value and remembering for later % use % \fi % \begin{macrocode} \advance\x@nss by -\tempx@nss \advance\y@nss by \tempyy@nss \xx@nss=\x@nss \yy@nss=\y@nss % \end{macrocode} % \ifnum\language=\languageNGerman % |\tempx@nss| ist die Breite eines Zweiges, die f"ur alle Zweige gleich ist % -- Gesamtbreite geteilt durch Anzahl der F"alle --, % |\tempy@nss| die H"ohe des Falltextes, die von Zweig zu Zweig kleiner wird, % |\condindent@nss| ist die Schrittweite, um die sich die H"ohe des % Falltextes bei jedem \cs{switch} verringert. H"ohe und Schrittweite h"angen % davon ab, ob ein \foreign{default}-Zweig eingef"uhrt wurde oder nicht, sie % werden demzufolge durch |\tempxx@nss| gesteuert. % \else % |\tempx@nss| is the width of the branch, that is equal for all branches % -- total width devided by number of cases --, % |\tempy@nss| is the height of the text of case, that decreases from one case % to the other, |\condindent@nss| is the step size the height of the text of % case decreases with each \cs{switch}. Height and step size depend on wether % or not a \foreign{default}-branch is introduced. Accordingly they are controled by % |\tempxx@nss|. % \fi % \begin{macrocode} \tempx@nss=\xsize@nss \divide\tempx@nss by #2 \ifnum\number\param@nss000>0 \tempy@nss=\number\param@nss000% \else \tempy@nss=\xsize@nss \divide\tempy@nss by #1 \fi \condindent@nss=\tempy@nss \divide \condindent@nss by \tempxx@nss % \end{macrocode} % \ifnum\language=\languageNGerman % Links oben im linken Zweig den Text des Falles eintragen % \else % Entering the text of case into the left upper part of left branch % \fi % \begin{macrocode} \advance\y@nss by -\tempy@nss \put(\x@nss,\y@nss)% {% \makebox(\tempx@nss,\tempy@nss)[lb]{\raise3pt\hbox{~#4}}% }% \ydepth@nss=1000000 \str@kt{\x@nss}{\y@nss}{\tempx@nss} } % \end{macrocode} % % \ifnum\language=\languageNGerman % Der Makro \cs{switch} f"ur die einzelnen F"alle hat zwei Parameter: % \begin{enumerate} % \item einen optionalen Parameter, der angibt, wo der Text der Bedingung % gesetzt wird: |l| oder |r| -- der Standardwert ist |l| --, und % \item den Bedingungstext % \end{enumerate} % \else % The macro \cs{switch} for the single cases has two parameters: % \begin{enumerate} % \item an optional parameter, which specifies, where the text of condition is set: % |l| or |r| -- the default value is |l|, and % \item the text of condition % \end{enumerate} % \fi % \begin{macrocode} \def\switch% {% \@ifnextchar [{\@switch}{\@switch[l]}% } \def\@switch[#1]#2% { \global\gy@nss=\y@nss\endgroup \tempyy@nss=\gy@nss \ifnum\tempyy@nss<\ydepth@nss \ydepth@nss=\tempyy@nss \fi % \end{macrocode} % \ifnum\language=\languageNGerman % Nun in den n"achsten Zweig gehen und die Falltexth"ohe vermindern. % \else % Now continuing in the next branch and reducing the height of text of case. % \fi % \begin{macrocode} \advance\x@nss by \tempx@nss \advance\tempy@nss by -\condindent@nss \put(\x@nss,\y@nss)% {\makebox(\tempx@nss,\tempy@nss)[#1b]{\raise3pt\hbox{~#2~}}} \str@kt{\x@nss}{\y@nss}{\tempx@nss} } \def\caseend% { \global\gy@nss=\y@nss\endgroup \tempyy@nss=\gy@nss \ifnum\tempyy@nss<\ydepth@nss \ydepth@nss=\tempyy@nss \fi \x@nss=\xx@nss \y@nss=\ydepth@nss \tempyy@nss=\yy@nss \advance\tempyy@nss by -\ydepth@nss \put(\x@nss,\y@nss){\framebox(\xsize@nss,\tempyy@nss){}} \tempxx@nss=\x@nss % \end{macrocode} % \ifnum\language=\languageNGerman % Die folgende Schleife ist daf"ur zust"andig, die Trennlinien zwischen den % Falltexten zu ziehen. % \else % The following loop is to draw the partitioning lines between the texts of cases. % \fi % \begin{macrocode} \loop \put(\tempxx@nss,\y@nss){\line(0,1){\tempyy@nss}} \advance\tempyy@nss by -\condindent@nss \advance\tempxx@nss by \tempx@nss % \end{macrocode} % \ifnum\language=\languageNGerman % Die Bedeutung der folgenden Zeilen ist noch unklar, was soll die 100? % \else % So far the meaning of the following lines is unclear. What means the 100? % \fi % \begin{macrocode} \xx@nss=\tempxx@nss \advance\xx@nss by -\x@nss \advance\xx@nss by 100 \ifnum \xx@nss<\xsize@nss \repeat } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\centerNss} % \begin{macro}{\endcenterNss} % \changes{v4.5d}{97/03/19}{`CenterBox@nss global gemacht} % \changes{v3.3e}{94/09/09}{`centerline durch `strut`hfill ... ersetzt} % \changes{v3.3e}{94/09/09}{`TmpBox umbenannt in `nss@CenterBox} % \changes{v3.1a}{94/09/09}{aus \textsf{JHfMakro.STY} "ubernommen} % \changes{v3.1b}{94/09/09}{erheblich vereinfacht} % \ifnum\language=\languageNGerman % Makro zur Zentrierung von Struktogrammen: da einfaches Zentrieren mit % \cs{centering} nicht funktioniert, wird mit \cs{centerline} gearbeitet: % \else % Macro for centering the structured box chart: since simple centering with % \cs{centering} does'nt work, it is worked with \cs{centerline}: % \fi % \begin{macrocode} \newbox\CenterBox@nss% \def\centernss% {% \begin{trivlist}% \item[] \strut% \setbox\CenterBox@nss=\hbox% \bgroup% } \def\endcenternss% {% \egroup% \strut\hfill\box\CenterBox@nss\hfill\strut% \end{trivlist}% } % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\CenterNssFile} % \changes{v4.5d}{97/03/19}{Belegen von `CenterBox@nss in das `item verlegt} % \changes{v3.3e}{94/09/09}{`centerline durch `strut`hfill ... ersetzt} % \changes{v3.3e}{94/09/09}{Auf zus"atzliche Gruppe um `trivlist verzichtet} % \changes{v3.3e}{94/09/09}{`TmpBox umbenannt in `nss@CenterBox} % \changes{v3.1a}{94/09/09}{aus \textsf{JHfMakro.STY} "ubernommen} % \changes{v3.1b}{94/09/09}{erheblich vereinfacht} % \ifnum\language=\languageNGerman % Makro zur Zentrierung von Struktogrammen: da einfaches Zentrieren mit % \cs{centering} nicht funktioniert, wird mit \cs{centerline} gearbeitet: % \else % Macro for centering the structured box charts: since simple centering with % \cs{centering} does'nt work, it is worked with \cs{centerline}: % \fi % \begin{macrocode} \def\CenterNssFile#1% {% \begin{trivlist}% \item[] \setbox\CenterBox@nss=\hbox{\input{#1.nss}}% \strut\hfill\box\CenterBox@nss\hfill\strut% \end{trivlist}% } \let\centernssfile=\CenterNssFile % \end{macrocode} % \end{macro} % % \subsection{\ifnum\language=\languageNGerman Zus"atzliche Makros (Verifikation) \else Additional macros (verification)\fi} % % \ifnum\language=\languageNGerman % Der folgende Code ist nur g"ultig, wenn die Option |verification| gesetzt % wurde: % \else % The following code is valid only, if the option |verification| is set. % \fi % % \begin{macrocode} \ifthenelse{\boolean{verification}} { % \end{macrocode} % % \begin{macro}{\xsizeo@nss} % \changes{v7.0a}{04/01/05}{neu eingef"uhrt} % \begin{macro}{\ydeptho@nss} % \changes{v7.0a}{04/01/05}{neu eingef"uhrt} % \ifnum\language=\languageNGerman % Da \cs{oval} einen anderen Referenzpunkt als \cs{framebox} hat, brauchen % wir zus"atzliche Z"ahler, um den anderen Referenzpunkt ansprechen zu k"onnen. % \else % Since \cs{oval} has another reference point than \cs{framebox}, we need % additional counters for the positioning of the \cs{oval}. % \fi % \begin{macrocode} \countdef\xsizeo@nss=232% \countdef\ydeptho@nss=233% % \end{macrocode} % \end{macro} % \end{macro} % \begin{macro}{\assert} % \changes{v7.0a}{04/01/04}{neu eingef"uhrt} % \begin{macro}{\assert@nss} % \changes{v7.0a}{04/01/04}{neu eingef"uhrt} % \ifnum\language=\languageNGerman % \cs{assert} wird wie \cs{assign} definiert: % \else % \cs{assert} is defined just like \cs{assign}: % \fi % \begin{macrocode} \newcommand\assert{\let\next=\assert@nss\getoption}% \newcommand{\assert@nss}[1]% {% \tempx@nss=\xsize@nss\divide\tempx@nss by 6% \set@nss{#1}{\tempx@nss}\tempy@nss=\number\param@nss000% \assertblock@nss{\tempy@nss}{1}% } % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\assertblock@nss} % \changes{v7.0a}{04/01/04}{neu eingef"uhrt} % \ifnum\language=\languageNGerman % |\assertblock@nss| setzt die Box |\TextBox@nss| entsprechend dem zweiten Parameter. Ist dieser % 1, wird eine Box mit Rahmen gesetzt, ist dieser 0, wird eine Box ohne Rahmen % gesetzt. Bei allen anderen Werten wird nur die Gr"o"se des Struktogramms, % gegeben durch |\y@nss|, vergr"o"sert. % \else % |\assertblock@nss| sets the box |\TextBox@nss| corresponding to the second parameter. % If this parameter is 1, the box will be set in a frame, and if it is 0, a box without % frame will be set. In all other cases only the size of the structured box chart % given by |\y@nss| will be changed. % \fi % \begin{macrocode} \newcommand{\assertblock@nss}[2]% {% \tempy@nss=#1\TextBoxHt@nss=\ht\TextBox@nss% \advance\TextBoxHt@nss by\dp\TextBox@nss% \advance\TextBoxHt@nss by 2mm% \ifdim\TextBoxHt@nss<\tempy@nss\unitlength% \TextBoxHt@nss=\tempy@nss\unitlength% \fi% \TextBoxHt@nss=0.00536\TextBoxHt@nss% \ydepth@nss=\TextBoxHt@nss\advance\y@nss by-\ydepth@nss% \xsizeo@nss=\xsize@nss \tempx@nss=\x@nss \divide\xsizeo@nss by 2% \advance\tempx@nss by+\xsizeo@nss% \ydeptho@nss=\ydepth@nss \tempy@nss=\y@nss \divide\ydeptho@nss by 2% \advance\tempy@nss by+\ydeptho@nss% \ifx#21% \put(\x@nss,\y@nss)% {% \framebox(\xsize@nss,\ydepth@nss){\box\TextBox@nss}% }% \put(\tempx@nss,\tempy@nss){\oval(\xsize@nss,\ydepth@nss)}% \else% \ifx#20% \put(\x@nss,\y@nss)% {% \makebox(\xsize@nss,\ydepth@nss){\box\TextBox@nss}% }% \put(\tempx@nss,\tempy@nss){\oval(\xsize@nss,\ydeptho@nss)}% \else% \advance\y@nss by \ydepth@nss% \fi% \fi% } } {} % end of \ifthenelse{\boolean{verification}} % % \end{macrocode} % \end{macro} % % \Finale % % \clearpage % \PrintIndex % \PrintChanges % \endinput %% \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\67\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 \~} %% % % end of struktex.dtx % % ^^A Local Variables: % ^^A mode: latex % ^^A TeX-master: t % ^^A mode: flyspell % ^^A ispell-local-dictionary: "deutsch8" % ^^A End: