From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/struktex/struktex.dtx | 7836 ++++++++++++++++++++++++++++ 1 file changed, 7836 insertions(+) create mode 100644 macros/latex/contrib/struktex/struktex.dtx (limited to 'macros/latex/contrib/struktex/struktex.dtx') diff --git a/macros/latex/contrib/struktex/struktex.dtx b/macros/latex/contrib/struktex/struktex.dtx new file mode 100644 index 0000000000..d124d8ecca --- /dev/null +++ b/macros/latex/contrib/struktex/struktex.dtx @@ -0,0 +1,7836 @@ +% \iffalse meta-comment +% +% Copyright (C) 1995 - 2018 Jobst Hoffmann, FH Aachen, Campus 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 +% +% \changes{v2.3a}{18/03/07}{updated Copyright to 2018} +% \changes{v2.2b}{17/07/09}{better layout of the source code} +% \changes{v2.2a}{17/06/30}{added notes about versioning scheme} +% \changes{v2.2}{17/06/18}{rewrote LIESMICH.md and README.md} +% \changes{v2.1a}{17/06/11}{made the versioning git aware} +% \changes{v2.0}{17/06/01}{changed version control system to git} +% \changes{v2.0}{17/06/01}{updated copyright} +% \changes{v141}{12/04/10}{updated copyright} +% \changes{v131}{10/09/21}{some more layout changes} +% \changes{v130}{10/09/21}{some changes in the layout of the source, +% removed typos} +% \changes{v121}{10/08/31}{scrumbled the email a little bit} +% \changes{v121}{10/08/31}{moved opening brace to end of line in several cases} +% \changes{v084}{10/06/24}{small layout changes} +% \changes{v084}{10/06/24}{corrected revision macro---added missing command} +% \changes{v062}{10/05/31}{moved the docstrip guards into the corresponding macrocode environments} +% \changes{v061}{10/05/31}{corrected some more typos} +% \changes{v057}{10/01/21}{added some missing closing braces at the end of `ProvidesPackage} +% \iffalse% +%\NeedsTeXFormat{LaTeX2e}[1999/12/01]{% +% \def\@git@ $#1Date: #2-#3-#4 #5$$#6Revision: #7$ {% +% \ProvidesPackage{struktex}[#2/#3/#4 v#7 Nassi Shneiderman Diagrams (Jobst Hoffmann)]} +% \ProvidesPackage{struktxf}[#2/#3/#4 v#7 Fonts for Nassi Shneiderman Diagrams (Jobst Hoffmann)]} +% \ProvidesPackage{struktxp}[#2/#3/#4 v#7 Keywords for Nassi Shneiderman Diagrams (Jobst Hoffmann)]} +% \ProvidesPackage{strukdoc}[#2/#3/#4 v#7 support for reading and writing files verbatim (Jobst Hoffmann)]} +% %% git revision information +%}% +% \fi +% +% +% \CheckSum{2634} ^^A set to 0 to inactivate the CheckSum +% \def\docdate {2018/06/04} ^^A not style'able!! +% +% \iffalse meta-comment +% 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-2018 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, Campus 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{v056}{10/01/21}{changed revision entries "vN.NNx" $\rightarrow$ "v-N.NNx"} +% \changes{v056}{10/01/21}{removed trailing blanks} +% \changes{v054}{10/01/18}{changed revisioning tool from cvs to subversion} +% \changes{v-9.1}{10/01/17}{changed the position of `label commands} +% \changes{v-8.3b}{06/08/20}{Erweiterung im Makefile: f"ur dist wird automatisch +% eine Datei THIS\_IS\_VERSION\_... erzeugt.} +% \changes{v-8.3a}{06/08/19}{struktex.el erweitert: es wird die korrekte Anzahl +% von `switch{} generiert und mit Inhalt gef"ullt} +% \changes{v-8.3}{06/08/18}{Weitere Optionen "`draft"' und "`final"' eingef"uhrt} +% \changes{v-8.2a}{06/01/17}{struktex.el korrigiert und erweitert} +% \changes{v-8.1a}{05/09/01}{Erste (fehlerhafte) Version einer struktex.el Stil +% Datei zur Unterst"utzung von AUC\TeX{} hinzugef"ugt} +% \changes{v-8.0f}{05/06/11}{Dokumentation von `case verbessert} +% \changes{v-8.0d}{04/12/29}{`switch zeigt bei geeigneten Beispielen das +% rechtsb"undige Setzen von Bedingungen} +% \changes{v-8.0c}{04/07/15}{Zweisprachigkeit verbessert, Bezeichner statt +% Nummern eingef"uhrt} +% \changes{v-8.0b}{04/07/14}{`fileversion und `filedate zur einfacheren +% zentralen Verwaltung von Entwicklungsdaten eingef"uhrt} +% \changes{v-7.0b}{04/03/09}{Anzahl der Z"ahler reduziert} +% \changes{v-7.0a}{03/04/21}{Code teilweise umgestellt} +% \changes{v-7.0a}{03/04/21}{Dateinamen ge"andert} +% \changes{v-7.0a}{03/04/21}{Tippfehler korrigiert} +% \changes{v-7.0a}{03/04/21}{Marker f"ur interne Beispiele umbenannt} +% \changes{v-7.0a}{03/04/21}{Testrahmen ge"andert} +% \changes{v-7.0a}{03/04/21}{Beispiele f"ur unterschiedlichen +% Programmierspracheneinsatz erweitert} +% \changes{v-7.0a}{03/04/21}{Makefile integriert} +% \changes{v-7.0a}{03/04/21}{`pLanguage ge"andert: `pLanguage@nss +% zus"atzlich eingef"uhrt} +% \changes{v-7.0a}{03/04/21}{Sprachbezeichnungen ge"andert: Suffix @nss} +% \changes{v-7.0}{03/04/21}{Wechsel von der RWTH Aachen zur FH Aachen, +% Abt. J"ulich} +% \changes{v-6.0a}{01/04/22}{Dokumentation von `case verbessert} +% \changes{v-6.0a}{00/12/08}{Makros `cs, `marg, `oarg, `pparg sowie `envb +% und `enve zur besseren Dokumentation eingesetzt} +% \changes{v-6.0a}{00/11/24}{Englische "Ubersetzung der Dokumentation +% hinzugef"ugt } +% \changes{v-6.0a}{00/11/24}{Code umgestaltet, z.B. `def $\rightarrow$ +% `newcommand, \$\ldots\$ $\rightarrow$ `(\ldots`) } +% \changes{v-6.0a}{00/11/24}{Zus"atzliche Paketoption "`curves"' zur +% Gestaltung beliebiger Steigungen eingef"uhrt} +% \changes{v-5.4b}{00/12/08}{Umgebungen zur einfacheren Notation der +% Dokumentation eingef"uhrt} +% \changes{v-5.4b}{00/12/08}{Erster Versuch einer gemischtsprachigen +% Dokumentation} +% \changes{v-5.4a}{99/11/16}{\textsf{stuktxp.sty} "uberarbeitet zur +% besseren Darstellung von Programmen} +% \changes{v-5.3a}{98/11/27}{Die Form des Textes in Bedingungen ist nun an +% beliebige Steigungen angepasst} +% \changes{v-5.2b}{98/05/28}{Tippfehlerkorrektur: Umlaut "`ue"' durch +% "`"u"' ersetzt} +% \changes{v-5.2a}{97/12/03}{Umstellung der Dokumentation, dadurch Verzicht +% auf eigene Treiberdatei m"oglich} +% \changes{v-5.2a}{97/12/03}{kleinere Korrekturen} +% \changes{v-5.1b}{97/11/02}{Umstellung der Dokumentation mittels Umgebung +% \texttt{example}, `verbatiminput und verbatimwrite} +% \changes{v-5.1a}{97/04/29}{kleinere stilistische "Anderungen nach W. Hanrath} +% \changes{v-5.0}{97/04/28}{Dateinamen zwecks Kompatibilit"at auf +% Kleinschreibung umgesetzt} +% \changes{v-5.0}{97/04/28}{kleinere textuelle "Anderungen, Fontauswahl +% teilweise ge"andert} +% \changes{v-5.0}{97/04/28}{Abh"angigkeiten der Dokumentation von +% zus"atzlichen Paketen beseitigt} +% \changes{v-4.5e}{97/04/25}{Verzicht auf Gro"s- und Kleinschreibung im +% Namen von .sty-Dateien} +% \changes{v-4.5a}{96/03/14}{Umgebung \texttt{description} auf +% \texttt{list}-Umgebung zur"uckgef"uhrt} +% \changes{v-4.5a}{96/03/14}{Eigenes Paket zur Formatierung von +% Programminhalten integriert} +% \changes{v-4.1c}{95/07/24}{Dokumentation verbessert} +% \changes{v-4.1b}{95/07/19}{H"ohe des Bedingungsrechteckes bei `ifthenelse +% vorgebbar} +% \changes{v-4.1a}{95/07/17}{Geraden mit beliebiger Steigung durch `emline +% m"oglich} +% \changes{v-4.0a}{95/04/12}{Anpassung an LaTeX2e} +% \changes{v-3.5a}{94/11/22}{Entwicklunglinien J. Dietel, J. Hoffmann vereinigt} +% \changes{v-3.3a}{94/09/14}{Schnittstellenbeschreibung verallgemeinert} +% \changes{v-3.2a}{94/09/14}{Dokumentation verbessert} +% \changes{v-3.1a}{94/09/09}{Verschiedene Erweiterungen} +% \changes{v-3.0a}{94/06/06}{Urversion mit integrierter Dokumentation} +% \changes{v-2.5}{93/09/09}{Jobst Hoffmann, Rechenzentrum RWTH Aachen} +% \changes{v-2.0}{92/01/17}{Dorothea Rieger, Rechenzentrum RWTH Aachen} +% \changes{v-1.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} +% \DoNotIndex{\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 +% +% \changes{v-9.2}{10/01/18}{changed some textual layout} +% \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 version number \fileversion, last revised on +% \filedate{}, documentation dated \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-Shneiderman. +% \end{abstract} +% \else% +% \begin{abstract} +% This article describes the use and implementation of +% \LaTeX-\foreign{package} \StrukTeXSty{} for structured box charts +% (Nassi-Shneiderman diagrams). +% \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 +% } +% +% +% +% \changes{v074}{10/06/08}{little corrections concerning the license} +% \section{\ifnum\language=\languageNGerman Lizenzvereinbarung\else +% License\fi} +% +% This package is copyright \copyright{} 1995 -- 2018 by: +% \begin{quote} +% Jobst Hoffmann, c/o University of Applied Sciences Aachen \\ +% Aachen, Germany \\ +% E-Mail: j.hoffmann\_(at)\_fh-aachen.de +% \end{quote} +% This program can be redistributed and/or modified under the terms of the LaTeX +% Project Public License, distributed from the CTAN archives as file +% |macros/latex/base/lppl.txt|; either version 1 of the License, or (at +% your option) any later version. +% +% +% \section{\ifnum\language=\languageNGerman Vorwort\else Preface\fi} +%\label{sec:vorwort} +% +% \begin{quote} +% \sffamily\small% +% \ifnum\language=\languageNGerman% +% \StrukTeX{} hat eine lange Entwicklung hinter sich. Bei der +% Entwicklung wurden verschiedene Programme zur Versionsverwaltung -- +% cvs, subversion und aktuell git -- eingesetzt, die alle +% unterschiedliche M"oglichkeiten bieten, Versionsnummern zu +% definieren. Um diese unterschiedlichen Versionsnummern zeitlich +% zuordnen zu k"onnen, wird folgendes Schema verwendet: Versionnummern +% der Form "`v-\meta{d}.\meta{d}[\meta{a}]"' mit \meta{d} als +% Dezimalzahl und \meta{a} als Buchstabe, etwa v-4.1a bezeichnen die +% erste Entwicklungslinie (rcs). Die folgenden Versionnummern haben die +% Form "`v\meta{n}\meta{n}\meta{n}"' mit \meta{n} als Dezimalziffer, +% \zB{} v122 (subversion). Die aktuelle Entwicklung erfolgt unter git +% und benutzt Versionnummern der Form +% "`v\meta{d}.\meta{d}[\meta{a}][-\meta{d}]-g\meta{x}"', beispielsweise +% v2.1-13-gd28a927; \meta{x} ist dabei eine Hexadezimalzahl. Allgemein +% gilt f"ur das Alter und somit die Reihenfolge der Versionen% +% \else% +% \StrukTeX{} has a long history. In development several different +% programs for version management were used---rcs, subversion and +% currently git---, all of which offer different possibilities to +% define version numbers. To correlate these different version numbers +% correctly in time, the following schema will be used: Version numbers +% of the form ``v-\meta{d}.\meta{d}[\meta{a}]'' with \meta{d} as a decimal +% digit and \meta{a} as a character, say v-4.1a denote the first +% development line (rcs). The following version numbers have the form +% ``v\meta{n}\meta{n}\meta{n}'' with \meta{n} as a decimal number, +% e.\,g. v122 (subversion). The current development is under git and +% uses version numbers of the form +% \meta{d}.\meta{d}[\meta{a}][\meta{d}]-g\meta{x}, for example, +% v2.1-13-gd28a927; \meta{x} stands for a hexadecimal number. In +% general, the age and therefore the sequence of the versions is% +% \fi +% \[ +% \mbox{v-\meta{d}.\meta{d}[\meta{a}]} < +% \mbox{v\meta{n}\meta{n}\meta{n}} < +% \mbox{v\meta{d}.\meta{d}[\meta{a}][-\meta{d}]-g\meta{x}} +% \] +% \end{quote} +% +% \changes{v100}{10/06/25}{added remark about Struktorizer} +% \changes{v-8.0b}{04/07/14}{Hinweis auf \textsf{pict2e.sty}} +% \changes{v-8.0b}{04/07/14}{Entwicklungsgeschichte korrigiert und +% erweitert} +% \ifnum\language=\languageNGerman +% 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.\footnote{% +% Wer es scheut, Struktogramme mittels \LaTeX{} direkt zu schreiben, kann +% beispielsweise unter \url{http://structorizer.fisch.lu/} ein Programm +% (Struktorizer) finden, mit dem man seine Struktogramme mittels Maus +% entwickeln und abschlie"send als \LaTeX-Code exportieren kann.} % +% \else% +% 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.\footnote{% +% Those who don't like to code the diagrams by hand, can use for example +% the program Struktorizer (\url{http://structorizer.fisch.lu/}). By using +% this program one can draw the diagrams by mouse and export the result +% into a \LaTeX-file.} % +% \fi% +% +% \ifnum\language=\languageNGerman% +% Ab Version v-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 v-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 integer and the real numbers) possible. +% Especially the symbol for the empty set +% ($\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 v-4.1a und v-4.1b, f"ur das \cs{switch} mit der Version v-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 v-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 v-4.1a and v-4.1b and for \cs{switch} in the version v-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 v-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 v-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 v-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 v-4.2a).% +% \else% +% An \cs{otherwise}-branch at \cs{switch} (done in version v-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:Companion} (abgeschlossen +% mit der Version v-4.5a).% +% \else% +% The reimplementation of the |declaration|-environment through the +% |list|-environment by +% \cite[Abs. 3.3.4]{GoossensMittelbachSamarin:Companion} (done in +% version v-4.5a).% +% \fi% +% +% \item \ifnum\language=\languageNGerman% +% Die Anpassung an \LaTeXe\ im Sinne eines Packages (abgeschlossen +% durch die Version v-4.0a).% +% \else% +% The adaption to \LaTeXe\ in the sense of packages (done in version +% v-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 v-4.5a).% +% \else% +% The independence of \StrukTeXSty{} of other \textsf{.sty}-files like +% e.g. \textsf{JHfMakro.sty} (done in version v-4.5a).% +% \fi% +% +% \item \ifnum\language=\languageNGerman% +% \changes{v-4.5a}{96/03/14}{Umbenennungen: `sVar $\rightarrow$ `pVar, \ldots}% +% \changes{v-4.3a}{96/01/26}{Variable `sBoolValue ersetzt `sLVal} +% Die vollst"andige Implementation der Makros \cs{pVar}, \cs{pKey}, +% \cs{pFonts}, \cs{pTrue}, \cs{pFalse} und \cs{pBoolValue} (erledigt +% vor Version v-7.0).% +% \else% +% \changes{v-4.5a}{96/03/14}{redesignation: `sVar $\rightarrow$ `pVar, +% \ldots} +% \changes{v-4.3a}{96/01/26}{variable `sBoolValue replaces `sLVal}% +% The complete implementation of the macros \cs{pVar}, \cs{pKey}, +% \cs{pFonts}, \cs{pTrue}, \cs{pFalse} and \cs{pBoolValue} (done before +% version v-7.0).% +% \fi% +% +% \item \ifnum\language=\languageNGerman% +% \changes{v-4.4a}{96/02/29}{Kommando `ifthenelse internalisiert}% +% 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 v-4.4a. +% \else% +% \changes{v-4.4a}{96/02/29}{command `ifthenelse internalisated}% +% 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 v-4.4a. +% \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 v-5.0).% +% \else% +% The independence of the documentation of other \textsf{.sty}-files +% like \textsf{JHfMakro.sty} (done in version v-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{v-4.5e}{97/04/26}{Neue .sty-Datei strukdoc.sty eingef"uhrt} +% \changes{v-1.5}{92/01/07}{StrukTeX Makros nun als .sty-Datei, J. Hoffmann} +% \changes{v-2.0}{92/01/17}{Erweitert um `exit, `forever und `foreverend, D. Rieger} +% \changes{v-2.1}{92/01/07}{`exit modifiziert, J. Hoffmann} +% \changes{v-2.2}{93/09/08}{Beschreibung von Variablen eingef"uhrt, J. Hoffmann} +% \changes{v-2.2a}{93/09/09}{Beschreibung von Variablen verbessert, J. Hoffmann} +% \else% +% \changes{v-4.5e}{97/04/26}{new .sty-File strukdoc.sty introduced} +% \changes{v-1.5}{92/01/07}{StrukTeX macros now as .sty-File, J. Hoffmann} +% \changes{v-2.0}{92/01/17}{extended by `exit, `forever and `foreverend, D. Rieger} +% \changes{v-2.1}{92/01/07}{`exit modified, J. Hoffmann} +% \changes{v-2.2}{93/09/08}{description of variables introduced, J. Hoffmann} +% \changes{v-2.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 +% tex 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 +% pdflatex struktex.dtx \\ +% pdflatex struktex.dtx \\ +% makeindex -s gind.ist struktex.idx \\ +% pdflatex 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{.pdf}-Datei, die in gewohnter Weise +% weiterbearbeitet werden kann. Weitere Informationen zum Arbeiten mit der +% integrierten Dokumentation findet man in +% \cite{FM:TheDocAndShortvrbPackages-V-2.0} und +% \cite{MittelbachDuchierBraams:DocStrip-V-2.5b}.% +% \else% +% First the file \textsf{struktex.ins} will be formatted e.g.\ with +% \begin{quote}\tt +% tex 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\footnote{Generating the +% documentation is much easier with the \texttt{make} utility, see +% section~\ref{sec:Makefile}.} +% \begin{quote}\tt +% pdflatex struktex.dtx \\ +% pdflatex struktex.dtx \\ +% makeindex -s gind.ist struktex.idx \\ +% pdflatex struktex.dtx +% \end{quote} +% The result of this formatting run is the documentation in form of a +% \textsf{.pdf}-file, that can be manipulated the normal way. Further +% informations about the work with the integrated documentation one can +% find in \cite{FM:TheDocAndShortvrbPackages-V-2.0} and +% \cite{MittelbachDuchierBraams:DocStrip-V-2.5b}.% +% \fi +% +% \changes{v100}{10/06/25}{corrected some inconsistencies in the +% description of the installation process} +% \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 entsprechend.} % +% \else% +% To finish the installation, the file \texttt{struktex.sty} should be +% moved to a directory, where \TeX{} can find it, in a TDS conforming +% 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 +% follow that rule. % +% \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% +% +% \changes{v2.1b}{17/06/17}{better wording: leftright $\rightarrow$ outer} +% \changes{v-8.0b}{04/07/14}{Umstellung der Sprachverwaltung auf babel} +% \ifnum\language=\languageNGerman% +% 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% +% \changes{v130}{10/09/21}{set additional option for (internally loaded) +% package url to obey spaces} +% \changes{v-9.2}{10/01/18}{changed the selection of languages} +% \begin{macrocode} +%<*driver> + % select the formatting language: +\expandafter\ifx\csname primarylanguage\endcsname\relax% +\def\primarylanguage{ngerman}% +\def\secondarylanguage{english}% +\else% +\def\secondarylanguage{ngerman}% +\fi + +\documentclass[a4paper, \secondarylanguage, % select the language + \primarylanguage]{ltxdoc} + +\PassOptionsToPackage{obeyspaces}{url} % must be done before any package is + % loaded + +\usepackage{babel} % for switching the documentation language +\usepackage{strukdoc} % the style-file for formatting this + % documentation + +\usepackage[pict2e, % <---------- to produce finer results + % visible under xdvi, alternatives are + % curves or emlines2 (visible only under + % ghostscript), leave out if not + % available + verification, + outer, % <------------------- to set the position of the \ifthenelse + % flags to the outer edges + debug, + ] + {struktex} +\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 + +\typeout{\string\primarylanguage: \primarylanguage, \string\language: \the\language} + +\def\languageNGerman{10} % depends on language.dat, put + % \the\language here + +\begin{document} +\makeatletter +\@ifundefined{selectlanguageEnglish}{}{\selectlanguage{english}} +\makeatother +\DocInput{struktex.dtx} +\end{document} +% +% \end{macrocode} +% +% \section{\ifnum\language=\languageNGerman Die Benutzungsschnittstelle +% \else The User interface +% \fi} +% \label{Schnittstelle} +% \label{interface} +% \changes{v-4.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: +% \begin{quote} +% |\usepackage[|\meta{Optionen}|]{struktex}| +% \end{quote} +% \else% +% The \StrukTeXSty{} will be included in a \LaTeX-document like every other +% |.sty|-file by \foreign{package}: +% \begin{quote} +% |\usepackage[|\meta{options}|]{struktex}| +% \end{quote}% +% \fi% +% +% \changes{v2.0c}{17/06/06}{added description of debug and leftright option} +% \changes{v141}{12/04/10}{added description of default values} +% \changes{v141}{12/04/10}{added description of language option} +% \ifnum\language=\languageNGerman% +% Die folgenden Optionen stehen zur Verf"ugung: +% \begin{enumerate} +% \item |english|, |ngerman| oder |german|: +% +% Die jeweilige Option legt die Sprache f"ur definierte Werte wie +% |\sTrue| fest, Standardwert ist |english|. +% \item |emlines|, |curves| oder |pict2e|: +% +% Durch Angabe einer der drei Optionen ist es m"oglich, beliebige +% Steigungen in Struktogrammen zu zeichnen. Erstere Option 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, Standardwert ist |pict2e|. +% \item |verification|: +% +% Nur wenn diese Option gesetzt ist, steht \cs{assert} als Kommando zur +% Verf"ugung. +% \item |nofiller|: +% +% Setzen dieser Option l"asst jeden Freiraum leer. Ansonsten wird +% Freiraum in Alternativen als \(\emptyset\) markiert. +% \item |draft|, |final|: +% +% Diese Optionen dienen in "ublicher Weise dazu, den Entwurf +% beziehungsweise die endg"ultige Fassung zu kennzeichnen (vgl. +% |\sProofOn|/|\sProofOff|). Im Entwurfsmodus werden die vier Eckpunkte +% eines Struktogramms in der vom Benutzer vorgegebenen Gr"o"se +% ausgegeben, diese Markierung f"allt in der endg"ultigen Fassung +% weg. Der Standardwert ist |final|. +% \item |debug|: +% +% Mit dem Setzen dieser Option werden Zeilen der Form +% \begin{quote} +% |===> dbg |\meta{Text} +% \end{quote} +% in die .log-Datei geschrieben. +% \item |outer|: +% +% Das Setzen dieser Option f"uhrt dazu, die ja/nein Flaggen statt auf +% der Mitte der Grundlinie jeweils links bzw. rechts au"sen erscheinen +% zu lassen. +% \end{enumerate} +% Nach dem Laden der |.sty|-Datei stehen verschiedene Kommandos und Umgebungen +% zur Verf"ugung, die das Zeichnen der Struktogramme erm"oglichen.% +% \else% +% The following options are available: +% \begin{enumerate} +% \item |english|, |ngerman| oder |german|: +% +% This option defines the language of defined values as |\sTrue|, +% default: |english|. +% \item |emlines|, |curves|, or |pict2e|: +% +% If you set one of these options, 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 |pict2e|; |curves| is included just for compatibility. In all +% cases the required packages (\textsf{emline2.sty}, +% \textsf{curves.sty}, or \textsf{pict2e} resp.) will be loaded +% automatically; the default value is |pict2e|. +% \item |verification|: +% +% Only if this option is set, the command \cs{assert} is available. +% \item |nofiller|: +% +% Setting this option prohibits setting of \(\emptyset\) in alternatives. +% \item |draft|, |final|: +% +% These options serve as usual to diffentiate between the draft and the +% final version of a structured box chart (see |\sProofOn|). While in +% the draft mode the user given size of the chart is denoted by the +% four bullets, the final version leaves out these markers; the default +% value is |final|. +% \item |debug|: +% +% Setting this option produces lines of the form % +% |===> dbg |\meta{text} in the .log-file. +% \item |outer|: +% +% Setting this option changes the position of flags in the +% |ifthenelse|-triangles from the mid to the left and right of the +% baselines of the triangles. +% \end{enumerate} +% 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 representing variables, keywords and other +% specific details of programming% +% \fi% +% } +% +% \DescribeMacro{\pVariable} +% \DescribeMacro{\pVar} +% \ifnum\language=\languageNGerman% +% \changes{v-2.0n}{94/03/31}{Dokumentation "uberarbeitet} +% \else% +% \changes{v-2.0n}{94/03/31}{documentation changed}% +% \fi% +% \DescribeMacro{\pKeyword} +% \DescribeMacro{\pKey} +% \DescribeMacro{\pComment} +% \changes{v131}{10/09/21}{changed location of documentation of new use of +% struktxp.sty} +% \changes{v130}{10/09/21}{enhanced the description of using source code} +% \ifnum\language=\languageNGerman% +% Struktogramme enthalten manchmal direkt zu programmierenden Code. +% Um hier ein einheitliches Aussehen zu erreichen, sind die hier +% aufgef"uhrten 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. Dabei +% wird ab Version 122 zur Darstellung von Code auf das Paket +% "`\textsf{url.sty}"' von Donald Arsenau zur"uckgegriffen, das es +% erm"oglicht, verbatim gesetzte Texte als Parameter an ein anderes Makro zu +% "ubergeben. Wenn diese Texte ein Leerzeichen enthalten, das erhalten +% bleiben soll, muss der Benutzer vor dem Laden von \textsf{url.sty}, +% typischerweise also vor der Anweisung +% \begin{quote} +% |\usepackage{struktex}| +% \end{quote} +% die Anweisung +% \begin{quote} +% |\PassOptionsToPackage{obeyspaces}{url}| +% \end{quote} +% setzen. +% \else% +% Structured box charts sometimes include code, that has to be programmed +% directly. For achieving a homogenous appearance the mentioned macros have +% been defined. They have been collected in a separate package +% \textsf{struktxp.sty} to be able to use them in another context. From +% version 122 on \textsf{struktxp.sty} is based on "\textsf{url.sty}" of +% Donald Arsenau. This package makes allows to pass verbatim texts as +% parameters to other macros. If this verbatim stuff contains blank spaces, +% which should be preserved, the user has to execute the command +% \begin{quote} +% |\PassOptionsToPackage{obeyspaces}{url}| +% \end{quote} +% before \textsf{url.sty} is loaded, that is in most of the cases before +% the command +% \begin{quote} +% |\usepackage{struktex}| +% \end{quote}% +% \fi% +% +% \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} +% +% \changes{v130}{10/09/21}{removed unnecessary math mode} +% \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 linksb"undig in den +% Kasten gesetzt; ist er daf"ur zu lang, so wird ein Paragraph (im +% Blocksatz) gesetzt. +% \else% +% The \textit{text} is normally set centered in the box. If the text is too +% long for that, then a (justified) 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,12)[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 Memory 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{v-8.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 Klammern 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 variables 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} +% +% \changes{v121}{10/08/31}{removed catcoding from example code} +% \ifnum\language=\languageNGerman% +% Zuletzt die globale Vereinbarung eines Titels: +% \begin{verbatimwrite}{struktex.tmp} +% \def\declarationtitle{globale Variablen:} +% \begin{struktogramm}(95,13) +% \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) +% \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{\forallin} +%\DescribeMacro{\forallinend} +%\DescribeMacro{\forever} +%\DescribeMacro{\foreverend} +% \changes{v2.1}{17/06/06}{`forallin, `forallinend: added english documentation} +% \changes{v2.0c}{17/06/06}{`forallin, `forallinend: added german documentation} +% \changes{v2.0b}{17/06/02}{`forallin, `forallinend: renamed from +% `foreach, `foreach to avoid conflict with tikz} +% \changes{v2.0a}{17/06/02}{`foreach, `foreachend: renamed from `forall, `forallend} +% \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. +% +% Ein Kontrollkonstrukt, das heute in vielen Programmiersprachen verf"ugbar +% ist, ist eine Schleife, die abh"angig von der jeweiligen Sprache als +% |forall|-, |for| \ldots{} |in| oder |foreach|-Schleife bezeichnet +% wird. Diese Schleifenart kann prinzipiell als kopfgesteuerte Schleife +% angesehen werden, manche ziehen aber eine Schreibweise vor, die von der +% Endlosschleife abgeleitet wird. F"ur diesen Fall gibt es das Konstrukt +% \begin{quote} +% \cs{forallin}\oarg{Breite}\marg{Text}\meta{Unterstruktogramm}\cs{forallinend} +% \end{quote} +% \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 +% a pre test). +% The until loop checks the condition at the end of the loop (loop with a +% post test). +% 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. +% +% A control structure which nowadays is provided by many programming +% languages is a loop known as |forall|-, |for| \ldots |in|-, or +% |foreach|-loop. This kind of loop can be seen as tail first loop but some +% people prefer the form of the endless loop with included text. For this +% case there is the control structure +% \begin{quote} +% \cs{forallin}\oarg{width}\marg{text}\meta{structured subbox chart}\cs{forallinend} +% \end{quote}% +% \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% +% \changes{v2.0}{17/06/01}{corrected typos} +% 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 +% \cs{forever} and \cs{foreverend}.% +% \fi% +% +% \ifnum\language=\languageNGerman% +% Die beiden folgenden Beispiele zeigen den Einsatz der \cs{while}- und +% \cs{until}-Makros sowie der \cs{forallin}-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 two 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% +% \begin{verbatimwrite}{struktex.tmp} +% \begin{struktogramm}(95, 25) +% \sub{berechne Liste \(L\) der ersten 100 Primzahlen} +% \forallin{\(\forall l\in L\)} +% \assign{gib \(l\) aus} +% \forallinend +% \end{struktogramm} +% \end{verbatimwrite} +% \else% +% \begin{verbatimwrite}{struktex.tmp} +% \begin{struktogramm}(95, 25) +% \sub{compute the list \(L\) of the first 100 primes} +% \forallin{\(\forall l\in L\)} +% \assign{print \(l\)} +% \forallinend +% \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 vorgestellt. +% \else% +% The \cs{exit} instruction only makes sense in connection with simple or +% multiple branches. Therefore it will be presented 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 klassischen +% |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 the representation of alternatives \StrukTeX\ provides mapping +% conventions for an If-Then-Else-block and a Case-construction for +% multiple alternatives. Since in the traditional |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{v2.0}{17/06/01}{mention pict2e.sty} +% \changes{v-6.0}{00/11/24}{Einsatz von curves.sty zum Zeichnen beliebiger +% Steigungen implementiert} +% \ifnum\language=\languageNGerman% +% Wenn hingegen der \textsf{curves.sty}, der \textsf{emlines2.sty} oder der +% \textsf{pict2e.sty} eingesetzt wird, ist die Darstellung von Geraden mit +% beliebiger Steigung m"oglich. +% \else% +% If however the \textsf{curves.sty}, the \textsf{emlines2.sty} or the +% \textsf{pict2e.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 v-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 v-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} +% +% \changes{v-9.2}{10/01/18}{changed the selection of languages} +% \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{quote} +% \verbatiminput{struktex.tmp} +% \end{quote} +% Diese Anweisungen f"uhren zu folgendem Struktogramm: +% \else% +% \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} +% +% \changes{v-9.2}{10/01/18}{corrected some typos} +% \changes{v-9.1}{10/01/17}{added first draft of of `inparallel, `task, and `inparallelend documentation} +% \DescribeMacro{\inparallel} +% \DescribeMacro{\task} +% \DescribeMacro{\inparallelend} +% \changes{v065}{10/06/07}{added some german translations} +% \ifnum\language=\languageNGerman% +% Heutzutage sind Prozessoren mit mehreren Kernen oder auch massive +% Parallelrechner ein "ubliches Werkzeug zur Ausf"uhrung von Programmen. Um +% die F"ahigkeiten dieser Prozessoren auszunutzen, sollten entsprechende +% parallele Algorithmen entwickelt und implementiert werden. Der Makro +% \cs{inparallel} und die zugeh"origen Makros \cs{task} und +% \cs{inparallelend} erm"oglichen die Darstellung paralleler Verarbeitung in +% einem Programm. Die Syntax lautet: +% \begin{quote}\obeylines +% \cs{inparallel}\oarg{H"ohe der 1. Task}\marg{Anzahl paralleler +% Tasks}\marg{Beschreibung der 1. Task}|}| +% \cs{task}\oarg{position}\marg{Beschreibung der 2. Task} +% \dots +% \cs{task}\oarg{position}\marg{Beschreibung der n. Task} +% \cs{inparallelend} +% \end{quote} +% +% Das Layout eines mit diesen Kommandos erzeugten Kastens ist der folgenden +% Abbildung zu entnehmen (die Makroparameter \texttt{\#1} +% und \texttt{\#2} beziehen sich auf die Parameter von \cs{inparallel}): +% \else% +% Nowadays multicore processors or even better massive parallel processors +% are a common tool for executing programs. To use the features of these +% processors parallel algorithms should be developed and implemented. The +% \cs{inparallel} command enables the representation of parallel processing +% in a program. The syntax is as follows: +% \begin{quote}\obeylines +% \cs{inparallel}\oarg{height of 1\(^{\mbox{st}}\) task}\marg{number of +% parallel tasks}\marg{description of 1\(^{\mbox{st}}\) task}|}| +% \cs{task}\oarg{position}\marg{description of 2\(^{\mbox{nd}}\) task} +% \dots +% \cs{task}\oarg{position}\marg{description of n\(^{\mbox{th}}\) task} +% \cs{inparallelend} +% \end{quote} +% +% The layout of the box is as follows (the macro parameters \texttt{\#1} +% and \texttt{\#2} refer to the parameters of \cs{inparallel}):% +% \fi% +% +% \changes{v065}{10/06/07}{changed figure which shows `inparallel layout} +% \begin{center} +% \label{case2} +% \unitlength 1.00mm +% \linethickness{0.4pt} +% \begin{picture}(90.00,40.00) +% \put(9.00,5.00){\framebox(75.00,30.00)[cc]{}} +% \put(9.00,36.00){\line(0,1){4.00}} +% \put(9.00,38.00){\line(1,0){27.50}} +% \put(46.50,38.00){\makebox(0,0)[cc]{\cs{xsize@nss}}} +% \put(55.00,38.00){\line(1,0){27.50}} +% \put(84.00,36.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]{% +% \shortstack{% +% \ifnum\language=\languageNGerman\meta{H"ohe}\else\meta{height}\fi\\\texttt{\#1}}}} +% \put(21.00,20.00){\makebox(0,0)[cc]{% +% \shortstack{% +% \ifnum\language=\languageNGerman\meta{Beschreibung\(_1\)}% +% \else\meta{desc\(_1\)}\fi\\\texttt{\#2}}}} +% \put(46.50,20.00){\makebox(0,0)[cc]{% +% \ifnum\language=\languageNGerman\meta{Beschreibung\(_{\ldots}\)}\else\meta{desc\(_{\ldots}\)}\fi}} +% \put(71.50,20.00){\makebox(0,0)[cc]{% +% \ifnum\language=\languageNGerman\meta{Beschreibung\(_n\)}\else\meta{desc\(_n\)}\fi}} +% \put(34.00,11.67){\line(0,1){16.66}} ^^A vertical bars between descriptions +% \put(59.00,11.67){\line(0,1){16.66}} +% \put(9.00,0.00){\line(0,1){4.00}} +% \put(9.00,2.00){\line(1,0){2.00}} +% \put(34.00,0.00){\line(0,1){4.00}} +% \put(34.00,2.00){\line(-1,0){2.00}} +% \put(21.00,2.00){\makebox(0,0)[cc]{$\frac{\mbox{\cs{xsize@nss}}}{\mbox{\tt\#1}}$}} +% \multiput(10.00,28.33)(3.00, 0.0){25}{\line(1,0){1.5}} +% \multiput(10.00,31.66)(3.00, 0.0){25}{\line(1,0){1.5}} +% \multiput(10.00,11.67)(3.00, 0.0){25}{\line(1,0){1.5}} +% \multiput(10.00,8.34)(3.00, 0.0){25}{\line(1,0){1.5}} +% \put(86.00,35.00){\line(1,0){4.00}} ^^A measuring at the right side +% \put(86.00,28.33){\line(1,0){4.00}} +% \put(88.00,34.00){\line(0,-1){1.00}} +% \put(88.00,28.33){\line(0,1){1.00}} +% \put(88.00,31.66){\makebox(0,0)[cc]{4\,mm}} +% \end{picture} +% \end{center} +% +% \ifnum\language=\languageNGerman% +% Zu beachten ist, dass die verschiedenen Tasks nicht weiter gegliedert +% werden d"urfen. +% \else% +% Note: the tasks are not allowed to get divided by \cs{assign} or so. If +% one needs some finer description of a task, this should be made outside +% of the current structured box chart.% +% \fi% +% +% \changes{v-9.2}{10/01/18}{added example for `inparallel} +% \begin{tExample}[\ifnum\language=\languageNGerman% +% Anwendung von \cs{inparallel}\else Application of \cs{inparallel}\fi] +% \ifnum\language=\languageNGerman% +% \begin{verbatimwrite}{struktex.tmp} +% \begin{struktogramm}(95,40) +% \inparallel[20]{3}{Motor starten} +% \task{Wasser einf"ullen} +% \task{Wasser erhitzen} +% \inparallelend +% \end{struktogramm} +% \end{verbatimwrite} +% \begin{quote} +% \verbatiminput{struktex.tmp} +% \end{quote} +% Diese Anweisungen ergeben das folgende Struktogramm: +% \else% +% \begin{verbatimwrite}{struktex.tmp} +% \begin{struktogramm}(95,40) +% \inparallel[20]{3}{start motor} +% \task{fill in water} +% \task{heat water} +% \inparallelend +% \end{struktogramm} +% \end{verbatimwrite} +% \begin{quote} +% \verbatiminput{struktex.tmp} +% \end{quote} +% These instructions produce 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} +% +% +% \DescribeMacro{\assert}% +% \ifnum\language=\languageNGerman% +% Der Makro \cs{assert} wurde eingef"uhrt, um die Verifikation von +% Algorithmen zu unterst"utzen, er ist aber nur aktiv, wenn die Stil-Option +% |verification| gesetzt wurde. Er dient dazu, an ausgew"ahlten Stellen +% Zusicherungen "uber den Zustand von Variablen zu markieren, die Syntax +% entspricht dem \cs{assign}: +% \begin{quote} +% \cs{assert}\oarg{H"ohe}\marg{Zusicherung}, +% \end{quote} +% Sein Einsatz ergibt sich aus dem folgenden: +% \begin{verbatimwrite}{struktex.tmp} +% \begin{struktogramm}(70,20)[Zusicherungen in Struktogrammen] +% \assign{\(a\gets a^2\)} +% \assert{\(a\ge0\)} +% \end{struktogramm} +% \end{verbatimwrite} +% \begin{quote} +% \verbatiminput{struktex.tmp} +% \end{quote} +% Das dazugeh"orige Struktogramm sieht folgenderma"sen aus: +% \begin{quote} +% \input{struktex.tmp} +% \end{quote}% +% \else% +% The macro \cs{assert} was introduced to support the verification of +% algorithms. It is active only if the option |verification| is set. It +% serves the purpose to assert the value of a variable at one point of the +% algorithm. The syntax corresponds to the syntax of \cs{assign}: +% \begin{quote} +% \cs{assert}\oarg{height}\marg{assertion}, +% \end{quote} +% It's usage can be seen from the following: +% \begin{verbatimwrite}{struktex.tmp} +% \begin{struktogramm}(70,20)[Assertions in structured box charts] +% \assign{\(a\gets a^2\)} +% \assert{\(a\ge0\)} +% \end{struktogramm} +% \sProofOff +% \end{verbatimwrite} +% \begin{quote} +% \verbatiminput{struktex.tmp} +% \end{quote} +% The resulting structured box chart looks like +% \begin{quote} +% \input{struktex.tmp} +% \end{quote}% +% \fi +% +% +% \section{\ifnum\language=\languageNGerman Beipieldatei zum Einbinden in die Dokumentation +% \else Example file for including into the documentation +% \fi} +% \label{Beispiel} +% \label{example} +% +% \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% +% \begin{macrocode} +%<*example1> +\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} +% +% \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{v-4.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% +% \begin{macrocode} +%<*example2> +\documentclass[draft]{article} +\usepackage{struktex} + +\begin{document} + +\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} +% +% +% \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{v-4.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% +% \begin{macrocode} +%<*example3> +\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 +% \end{macrocode} +% +% \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 sample 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% +% \changes{v121}{10/08/31}{added babel package to the test of struktxp} +% \begin{macrocode} +%<*example4> +\documentclass[english]{article} + +\usepackage{babel} +\usepackage{struktex} + +\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} +% +% +% \subsection[\ifnum\language=\languageNGerman Beispieldatei Nr. 4\else Example +% file no 4\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 werden in einem anderen Zusammenhang benutzt, +% Java-Methoden zu dokumentieren. An dieser Stelle wird ein eigener Weg +% gew"ahlt, da das sonst "ubliche Arbeiten mit |lstinline| zu Fehlern f"uhrt. +% \else% +% \fi +% \begin{macrocode} +%<*example5> +\documentclass{article} + +\usepackage{struktxp,struktxf} + +\makeatletter +\newlength{\fdesc@len} +\newcommand{\fdesc@label}[1]% +{% + \settowidth{\fdesc@len}{{\fdesc@font #1}}% + \advance\hsize by -2em + \ifdim\fdesc@len>\hsize% % term > labelwidth + \parbox[b]{\hsize}% + {% + \fdesc@font #1% + }\\% + \else% % term < labelwidth + \ifdim\fdesc@len>\labelwidth% % term > labelwidth + \parbox[b]{\labelwidth}% + {% + \makebox[0pt][l]{{\fdesc@font #1}}\\% + }% + \else% % term < labelwidth + {\fdesc@font #1}% + \fi\fi% + \hfil\relax% +} +\newenvironment{fdescription}[1][\tt]% +{% + \def\fdesc@font{#1} + \begin{quote}% + \begin{list}{}% + {% + \renewcommand{\makelabel}{\fdesc@label}% + \setlength{\labelwidth}{120pt}% + \setlength{\leftmargin}{\labelwidth}% + \addtolength{\leftmargin}{\labelsep}% + }% +}% +{% + \end{list}% + \end{quote}% +} +\makeatother + +\pLanguage{Java} + +\begin{document} + +\begin{fdescription} + \item[\index{Methoden>drawImage(Image img, + int dx1, + int dy1, + int dx2, + int dy2, + int sx1, + int sy1, + int sx2, + int sy2, + ImageObserver observer)=% + \Expr{\pKey{public} \pKey{abstract} \pKey{boolean} drawImage(Image img, + \pKey{int} dx1, + \pKey{int} dy1, + \pKey{int} dx2, + \pKey{int} dy2, + \pKey{int} sx1, + \pKey{int} sy1, + \pKey{int} sx2, + \pKey{int} sy2, + ImageObserver observer)}}% + \pExp{public abstract boolean drawImage(Image img, int dx1, int + dy1, int dx1, int dy2, int sx1, int sy1, int sx2, int sy2, + ImageObserver observer)}]% + \ldots +\end{fdescription} +\end{document} +%% +%% End of file `struktex-test-5.tex'. +% +% \end{macrocode} +% +% \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% +% To simplify the formatting of the 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 "|lshort2e.tex| -- +% The not so short introduction to LaTeX2e".% +% \fi% +% \changes{v-8.0e}{05/05/17}{nun wird die .pdf-Ausgabe sauber abgefangen} +% \begin{macrocode} +%<*strukdoc> +\RequirePackage{ifpdf} +\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} +% +% +% \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{v2.1b}{17/06/17}{added tds-zip as new target} +% \changes{v2.1b}{17/06/17}{changed basic formatting engine to pdflatex} +% \changes{v2.1a}{17/06/11}{Makefile now reflects git git aware} +% \changes{v101}{10/06/25}{changed Makefile according to subversion +% revision numbers} +% \changes{v061}{10/05/31}{corrected some more typos} +% \changes{v056}{10/01/21}{corrected Makefile once more} +% \changes{v-9.2}{10/01/18}{corrected the Makefile} +% \changes{v-8.0e}{05/05/17}{Tippfehler korrigiert: \$\$\$f $\rightarrow$ \$\$f} +% \changes{v-8.0e}{05/05/17}{\& mit Fluchtzeichen versehen} +% \changes{v-8.0b}{04/07/14}{.pdf-Ausgabe eingef"uhrt} +% \changes{v-8.2a}{06/01/19}{HOMETEXMF $\rightarrow$ TEXMFHOME} +% +% \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 +% +% \begin{macrocode} +%<*makefile> +#----------------------------------------------------------------------- +# 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, Standort Juelich +# Date: 2017/06/06 +#----------------------------------------------------------------------- + +# 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 '$$TEXMFHOME'` +# 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/$(PACKAGE) + +# The directory, where to install documentation +DOCDIR=$(INSTALLTEXMF)/doc/latex/$(PACKAGE) + +# The directory, where to install the sources +SRCDIR=$(INSTALLTEXMF)/source/latex/$(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 +######################################################################## + +LATEX = latex +PDFLATEX = pdflatex +TEX = TEX + +COMMON_OPTIONS = # \OnlyDescription\CodelineNumbered\PageIndex +HISTORY_OPTIONS = \RecordChanges +DEVELOPER_OPTIONS = \EnableCrossrefs\RecordChanges\AlsoImplementation\CodelineIndex + +# tarring options +EXgit = --exclude .git --exclude .gitignore --exclude auto --exclude tests \ + --exclude *.tgz --exclude *.bib + +# The name of the game +PACKAGE = struktex + +DISTRIBUTION_FILES = ../$(PACKAGE)/$(PACKAGE).de.pdf \ +../$(PACKAGE)/$(PACKAGE).en.pdf \ + ../$(PACKAGE)/$(PACKAGE).dtx \ + ../$(PACKAGE)/$(PACKAGE).ins \ + ../$(PACKAGE)/LIESMICH.md \ + ../$(PACKAGE)/README.md +PACKAGE_FILES_A = $(subst ../$(PACKAGE)/,,$(DISTRIBUTION_FILES)) +PACKAGE_FILES_B = $(subst $(PACKAGE).dtx ,,$(PACKAGE_FILES_A)) +PACKAGE_FILES_C = $(subst $(PACKAGE).ins ,,$(PACKAGE_FILES_B)) +PACKAGE_FILES_D = $(subst LIESMICH.md,,$(PACKAGE_FILES_C)) +PACKAGE_FILES = $(subst README.md,,$(PACKAGE_FILES_D)) + +# To generate the version number of the distribution from the source +VERSION_L := git describe --long | xargs git --no-pager show -s \ + --date=short --format=format:"$(PACKAGE) version ???? of %ad%n" |\ + sed -e "s/????/`git describe --long`/" +VERSION_S := `git describe --long | \ + sed 's+-g.*++'` + +# to create the correct tar-file +define TAR_COMMANDS +echo $$@ +OUT_DIR=$$(mktemp -d) +mkdir $${OUT_DIR}/struktex +cp $$@ $${OUT_DIR}/struktex +pushd $${OUT_DIR} +tar cfvz struktex.tgz struktex +popd +cp $${OUT_DIR}/struktex.tgz . +endef + +export TAR_COMMANDS + +## Main Targets + +# strip off the comments from the package +$(PACKAGE).sty $(PACKAGE)-test-*.tex: $(PACKAGE).ins $(PACKAGE).dtx $(PACKAGE).sed + +$(TEX) $<; \ + source $(PACKAGE).makemake; \ + make revision_no; \ + source $(PACKAGE).sed # set version number + +all-de: $(PACKAGE).de.pdf + +all-en: $(PACKAGE).en.pdf + +# prepare the file with git revision information +.PHONY: revision_no +revision_no: $(PACKAGE).sed + +$(PACKAGE).sed: $(PACKAGE).dtx + printf "%b\n" "set_git_info() {" \ + > $(PACKAGE).sed; \ + printf "%b\n" "sed -i -e 's/^[ \\\\t]*%% git revision information$$/\\" \ + >> $(PACKAGE).sed; \ + git describe --long | \ + xargs git --no-pager show -s --format=format:\ + " \\\\@git@ \$$Date: %ci $$%%\%n" >> $(PACKAGE).sed; \ + git describe --long | cut -c 2- |\ + sed -e "s/^/ \$$Revision: /" -e "s/$$/ $$\\\\/" \ + >> $(PACKAGE).sed; \ + git describe --long | \ + xargs git --no-pager show -s --format=format:" %%%% \$$Author: %an $$\\%n" \ + >> $(PACKAGE).sed; \ + printf "%b\n" "/' \$$1" \ + >> $(PACKAGE).sed; \ + printf "%b\n" "};" \ + >> $(PACKAGE).sed; \ + printf "%b\n" "for f in \\\\" \ + >> $(PACKAGE).sed; \ + printf "%b\n" "$(PACKAGE).sty \\\\" \ + >> $(PACKAGE).sed; \ + printf "%b\n" "struktxf.sty \\\\" \ + >> $(PACKAGE).sed; \ + printf "%b\n" "struktxp.sty \\\\" \ + >> $(PACKAGE).sed; \ + printf "%b\n" "strukdoc.sty \\\\" \ + >> $(PACKAGE).sed; \ + printf "%b\n" "; do \\\\" \ + >> $(PACKAGE).sed; \ + printf "%b\n" " set_git_info \$$f; done" \ + >> $(PACKAGE).sed; \ + +# generate the documentation +$(PACKAGE).de.pdf: $(PACKAGE).dtx $(PACKAGE).sty struktex.sed + +$(PDFLATEX) "\AtBeginDocument{$(COMMON_OPTIONS)}\input{$<}" + +$(PDFLATEX) "\AtBeginDocument{$(COMMON_OPTIONS)}\input{$<}" + +mv $(<:.dtx=.pdf) $(<:.dtx=.de.pdf) + +$(PACKAGE).en.pdf: $(PACKAGE).dtx $(PACKAGE).sty + +$(PDFLATEX) "\AtBeginDocument{$(COMMON_OPTIONS)}\def\primarylanguage{english}\input{$<}" + +$(PDFLATEX) "\AtBeginDocument{$(COMMON_OPTIONS)}\def\primarylanguage{english}\input{$<}" + +mv $(<:.dtx=.pdf) $(<:.dtx=.en.pdf) + +# generate the documentation with revision history (only german) +history: $(PACKAGE).dtx $(PACKAGE).sty + +$(PDFLATEX) "\AtBeginDocument{$(COMMON_OPTIONS)$(HISTORY_OPTIONS)}\input{$<}" + +$(PDFLATEX) "\AtBeginDocument{$(COMMON_OPTIONS)$(HISTORY_OPTIONS)}\input{$<}" + +makeindex -s gind.ist $(PACKAGE).idx + +makeindex -s gglo.ist -o $(PACKAGE).gls -t $(PACKAGE).glg $(PACKAGE).glo + +$(PDFLATEX) "\AtBeginDocument{$(COMMON_OPTIONS)$(HISTORY_OPTIONS)}\input{$<}" + +# generate the documentation for the developer (revision history always +# in german) +develop-de: $(PACKAGE).dtx $(PACKAGE).sty + +$(PDFLATEX) "\AtBeginDocument{$(HISTORY_OPTIONS)$(DEVELOPER_OPTIONS)}\input{$<}" + +$(PDFLATEX) "\AtBeginDocument{$(HISTORY_OPTIONS)$(DEVELOPER_OPTIONS)}\input{$<}" + +makeindex -s gind.ist $(PACKAGE).idx + +makeindex -s gglo.ist -o $(PACKAGE).gls -t $(PACKAGE).glg $(PACKAGE).glo + +$(PDFLATEX) "\AtBeginDocument{$(HISTORY_OPTIONS)$(DEVELOPER_OPTIONS)}\input{$<}" + +mv $(<:.dtx=.pdf) $(<:.dtx=.de.pdf) + +develop-en: $(PACKAGE).dtx $(PACKAGE).sty + +$(PDFLATEX) "\AtBeginDocument{$(COMMON_OPTIONS)$(DEVELOPER_OPTIONS)}\def\primarylanguage{english}\input{$<}" + +$(PDFLATEX) "\AtBeginDocument{$(COMMON_OPTIONS)$(DEVELOPER_OPTIONS)}\def\primarylanguage{english}\input{$<}" + +makeindex -s gind.ist $(PACKAGE).idx + +makeindex -s gglo.ist -o $(PACKAGE).gls -t $(PACKAGE).glg $(PACKAGE).glo + +$(PDFLATEX) "\AtBeginDocument{$(COMMON_OPTIONS)$(DEVELOPER_OPTIONS)}\def\primarylanguage{english}\input{$<}" + +mv $(<:.dtx=.pdf) $(<:.dtx=.en.pdf) + +# format the example/test files +test: + for i in `seq 1 3`; do \ + f=$(PACKAGE)-test-$$i; \ + echo file: $$f; \ + $(PDFLATEX) $$f; \ + 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) + +dist: $(PACKAGE).de.pdf $(PACKAGE).en.pdf $(PACKAGE).dtx $(PACKAGE).ins \ +LIESMICH.md README.md + + echo "$$TAR_COMMANDS" > ./tar_commands; \ + rm -f THIS_IS_VERSION_*; \ + $(VERSION_L) > THIS_IS_VERSION_$(VERSION_S); \ + sh ./tar_commands $^; \ + mv ./struktex.tgz ./struktex-$(VERSION_S).tgz + rm ./tar_commands + +tds-zip: $(PACKAGE_FILES) + + rm -f THIS_IS_VERSION_* *.zip; \ + $(VERSION_L) | sed -e "s/??????????/$(VERSION_S)/" > THIS_IS_VERSION_$(VERSION_S); \ + DOC_FILES="LIESMICH.md README.md THIS_IS_* $(PACKAGE).??.pdf"; \ + MAKE_FILES="$(PACKAGE).m*"; \ + SRC_FILES="$(PACKAGE).dtx $(PACKAGE).ins"; \ + STY_FILES="struk*.sty"; \ + TEST_FILES="./$(PACKAGE)-test*"; \ + SUPPORT_FILES="./$(PACKAGE).el"; \ + if [[ -d /tmp/texmf ]]; then \ + rm -rf /tmp/texmf; \ + fi; \ + if [[ -f $(PACKAGE)-TDS.zip ]]; then \ + rm $(PACKAGE)-TDS.zip; \ + fi; \ + mkdir -p /tmp/texmf/doc/latex/$(PACKAGE); \ + mkdir -p /tmp/texmf/source/latex/$(PACKAGE); \ + mkdir -p /tmp/texmf/tex/latex/$(PACKAGE); \ + cp -a $${DOC_FILES} /tmp/texmf/doc/latex/$(PACKAGE); \ + cp -a $${MAKE_FILES} /tmp/texmf/doc/latex/$(PACKAGE); \ + cp -a $${SRC_FILES} /tmp/texmf/source/latex/$(PACKAGE); \ + cp -a $${STY_FILES} /tmp/texmf/tex/latex/$(PACKAGE); \ + cp -a $${TEST_FILES} /tmp/texmf/doc/latex/$(PACKAGE); \ + cp -a $${SUPPORT_FILES} /tmp/texmf/doc/latex/$(PACKAGE); \ + VERSION_SHORT="xxx"; \ + pushd /tmp/texmf; \ + zip -r /tmp/$(PACKAGE)-TDS.zip .; \ + popd; \ + mv /tmp/$(PACKAGE)-TDS.zip ./$(PACKAGE)-TDS-$(VERSION_S).zip + + +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 *.pdf + -rm -f *-test-* Makefile + +clean-test: + rm $(PACKAGE)-test-*.* # this $-sign is needed for font-locking in XEmacs only +% +% \end{macrocode} ^^A$ +% +% \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% +% \begin{macrocode} +%<*setup> +sed -e "`echo \"s/^ /@/g\" | tr '@' '\011'`" struktex.mk > Makefile +% +% \end{macrocode} +% +% +% \changes{v2.3a}{18/03/07}{struktex.el: added package option fixedindent} +% \changes{v055}{10/01/21}{added "declaration" to LaTeX-item-list again +% (previously removed unintentionally)} +% \changes{v055}{10/01/21}{corrected "task" entry} +% \changes{v055}{10/01/21}{corrected lisp comments "\texttt{\char92}" +% $\rightarrow$ "\texttt{\char92}\texttt{\char92}"} +% \changes{v055}{10/01/21}{corrected format entry} +% \changes{v-9.2}{10/01/18}{extended .el-file: `inparallel, `task, `inparallelend} +% \changes{v-8.3}{06/08/18}{struktex.el erweitert, so dass die Parameter +% alle Kommandos automatisch abgefragt werden.} +% \section{\ifnum\language=\languageNGerman% +% Stil Datei zur einfachen +% Eingabe von Struktogrammen beim Arbeiten mit dem (X)emacs und AUC\TeX +% \else% +% Style File for easier input while working with (X)emacs +% and AUC\TeX% +% \fi% +% } +% \label{AUCTeX} +% +% \ifnum\language=\languageNGerman% +% Der (X)emacs und das Paket AUC\TeX{} +% (\url{http://www.gnu.org/software/auctex/}) bilden ein m"achtiges Werkzeug +% beim Erstellen von \TeX/\LaTeX-Dateien. Wenn es eine passende Stildatei +% f"ur ein \LaTeX-Paket wie das hier vorliegende \StrukTeX{} gibt, +% wird die Eingabe von Quelltext durch automatisiertes Vervollst"andigen +% und viele andere Hilfsmittel sehr erleichtert. Im folgenden wird eine +% derartige Stildatei bereitgestellt; sie muss nach ihrer Erzeugung noch an +% eine entsprechende Stelle kopiert werden. +% +% Diese Datei ist zum jetzigen Zeitpunkt noch in der Entwicklungsphase, +% d.\,h. man kann mit ihr arbeiten, aber es fehlen noch ein paar Dinge wie +% das \textit{font locking}, die Anzahl der automatisch eingef"ugten \cs{switch} +% Kommandos sollte nicht fest gleich eins sein, sondern von der Anzahl der +% eingegebenen F"alle abh"angig sein. +% \else% +% The (X)emacs and the package AUC\TeX{} +% (\url{http://www.gnu.org/software/auctex/}) form a powerful tool for +% creating and editing of \TeX/\LaTeX{} files. If there is a suitable +% AUCTeX style file for a \LaTeX{} package like the hereby provided +% \StrukTeX{} package, then there is support for many common operations +% like creating environments and so on. The following part provides such a +% style file; it must be copied to a place, where (X)emacs can find it +% after its creation.% +% +% This file is still in a development phase, i.\,e. one can work with it, +% but there is a couple of missing things as for example font locking or +% the automatic insertion of \cs{switch} commands according to the user's +% input.% +% \fi% +% \begin{macrocode} +%<*auctex> +;;; struktex.el --- AUCTeX style for `struktex.sty' + +;; Copyright (C) 2006 - 2018 Free Software Foundation, Inc. + +;; Author: J. Hoffmann +;; Maintainer: j.hoffmann_(at)_fh-aachen.de +;; Created: 2017/06/06 +;; Keywords: tex + +;;; Commentary: +;; This file adds support for `struktex.sty' + +;;; Code: + +(TeX-add-style-hook + "struktex" + (lambda () + ;; Add declaration to the list of environments which have + ;; an optional argument for each item. + (add-to-list 'LaTeX-item-list + '("declaration" . LaTeX-item-argument)) + (LaTeX-add-environments + "centernss" + '("struktogramm" LaTeX-env-struktogramm) + '("declaration" LaTeX-env-declaration)) + (TeX-add-symbols + '("PositionNSS" 1) + '("assert" [ "Height" ] "Assertion") + '("assign" [ "Height" ] "Statement") + "StrukTeX" + '("case" TeX-mac-case) + "switch" "Condition" + "caseend" + '("declarationtitle" "Title") + '("description" "Name" "Meaning") + "emptyset" + '("exit" [ "Height" ] "What" ) + '("forever" TeX-mac-forever) + "foreverend" + '("forallin" TeX-mac-forallin) + "forallin" + '("ifthenelse" TeX-mac-ifthenelse) + "change" + "ifend" + '("inparallel" TeX-mac-inparallel) + '("task" "Description") + "inparallelend" + "sProofOn" + "sProofOff" + '("until" TeX-mac-until) + "untilend" + '("while" TeX-mac-while) + "whileend" + '("return" [ "Height" ] "Return value") + '("sub" [ "Height" ] "Task") + '("CenterNssFile" TeX-arg-file) + '("centernssfile" TeX-arg-file)) + (TeX-run-style-hooks + "pict2e" + "emlines2" + "curves" + "struktxp" + "struktxf" + "ifthen") + ;; Filling + ;; Fontification + )) + +(defun LaTeX-env-struktogramm (environment) + "Insert ENVIRONMENT with width, height specifications and +optional title." + (let ((width (read-string "Width: ")) + (height (read-string "Height: ")) + (title (read-string "Title (optional): "))) + (LaTeX-insert-environment environment + (concat + (format "(%s,%s)" width height) + (if (not (zerop (length title))) + (format "[%s]" title)))))) + +(defun LaTeX-env-declaration (environment) + "Insert ENVIRONMENT with an optional title." + (let ((title (read-string "Title (optional): "))) + (LaTeX-insert-environment environment + (if (not (zerop (length title))) + (format "[%s]" title))))) + +(defun TeX-mac-case (macro) + "Insert \\case with all arguments, the needed \\switch(es) and +the final \\caseend. These are optional height and the required +arguments slope, number of cases, condition, and the texts for +the different cases" + (let ((height (read-string "Height (optional): ")) + (slope (read-string "Slope: ")) + (number (read-string "Number of cases: ")) + (condition (read-string "Condition: ")) + (text (read-string "Case no. 1: ")) + (count 1) + ) + (setq number-int (string-to-number number)) + (insert (concat (if (not (zerop (length height))) + (format "[%s]" height)) + (format "{%s}{%s}{%s}{%s}" + slope number condition text))) + (while (< count number-int) + (end-of-line) + (newline-and-indent) + (newline-and-indent) + (setq prompt (format "Case no. %d: " (+ 1 count))) + (insert (format "\\switch{%s}" (read-string prompt))) + (setq count (1+ count))) + (end-of-line) + (newline-and-indent) + (newline-and-indent) + (insert "\\caseend"))) + +(defun TeX-mac-forallin (macro) + "Insert \\forallin-block with all arguments. +This is the optional height and the description of the loop" + (let ((height (read-string "Height (optional): ")) + (loop-description (read-string "Description of loop: "))) + (insert (concat (if (not (zerop (length height))) + (format "[%s]" height)) + (format "{%s}" + loop-description))) + (end-of-line) + (newline-and-indent) + (newline-and-indent) + (insert "\\forallinend"))) + +(defun TeX-mac-forever (macro) + "Insert \\forever-block with all arguments. +This is only the optional height" + (let ((height (read-string "Height (optional): "))) + (insert (if (not (zerop (length height))) + (format "[%s]" height))) + (end-of-line) + (newline-and-indent) + (newline-and-indent) + (insert "\\foreverend"))) + +(defun TeX-mac-ifthenelse (macro) + "Insert \\ifthenelse with all arguments. +These are optional height and the required arguments +left slope, right slope, condition, and the possible +values of the condition" + (let ((height (read-string "Height (optional): ")) + (lslope (read-string "Left slope: ")) + (rslope (read-string "Right slope: ")) + (condition (read-string "Condition: ")) + (conditionvl (read-string "Condition value left: ")) + (conditionvr (read-string "Condition value right: "))) + (insert (concat (if (not (zerop (length height))) + (format "[%s]" height)) + (format "{%s}{%s}{%s}{%s}{%s}" + lslope rslope condition conditionvl + conditionvr))) + (end-of-line) + (newline-and-indent) + (newline-and-indent) + (insert "\\change") + (end-of-line) + (newline-and-indent) + (newline-and-indent) + (insert "\\ifend"))) + +(defun TeX-mac-inparallel (macro) + "Insert \\inparallel with all arguments, the needed \\task(s) +and the final \\inparallelend. These are optional height and the +required arguments number of tasks and the descriptions for the +parallel tasks" + (let ((height (read-string "Height (optional): ")) + (number (read-string "Number of parallel tasks: ")) + (text (read-string "Task no. 1: ")) + (count 1) + ) + (setq number-int (string-to-number number)) + (insert (concat (if (not (zerop (length height))) + (format "[%s]" height)) + (format "{%s}{%s}" number text))) + (while (< count number-int) + (end-of-line) + (newline-and-indent) + (newline-and-indent) + (setq prompt (format "Task no. %d: " (+ 1 count))) + (insert (format "\\task{%s}" (read-string prompt))) + (setq count (1+ count))) + (end-of-line) + (newline-and-indent) + (newline-and-indent) + (insert "\\inparallelend"))) + +(defun TeX-mac-until (macro) + "Insert \\until with all arguments. +These are the optional height and the required argument condition" + (let ((height (read-string "Height (optional): ")) + (condition (read-string "Condition: "))) + (insert (concat (if (not (zerop (length height))) + (format "[%s]" height)) + (format "{%s}" condition))) + (end-of-line) + (newline-and-indent) + (newline-and-indent) + (insert "\\untilend"))) + +(defun TeX-mac-while (macro) + "Insert \\while with all arguments. +These are the optional height and the required argument condition" + (let ((height (read-string "Height (optional): ")) + (condition (read-string "Condition: "))) + (insert (concat (if (not (zerop (length height))) + (format "[%s]" height)) + (format "{-%s-}" condition))) + (end-of-line) + (newline-and-indent) + (newline-and-indent) + (insert "\\whileend"))) + +(defvar LaTeX-struktex-package-options '("anygradient" "curves" "debug" + "draft" "emlines" "final" + "fixedindent" "nofiller" + "outer" "pict2e" "verification") + "Package options for the struktex package.") + +;;; struktex.el ends here. +% +% \end{macrocode} +% +% +% \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-V-2.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-V-2.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} +% +% \changes{v084}{10/06/24}{removed flag preventing double load of the package} +% \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 +% print an adequate error message, if another format is used, which should +% not lead to any errors. In addition the package \textsf{ifthen.sty} will +% be loaded, if not already done.% +% \fi% +% \changes{v-4.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 loading of the macro package with the actual version number will +% be messaged.% +% \fi% +% \begin{macrocode} +%<*struktex> +% \end{macrocode} +% +% \begin{macrocode} +\RequirePackage{ifthen} +% \end{macrocode} +% \ifnum\language=\languageNGerman% +% Der |\ifthenelse|-Makro muss unter einem anderen Namen verf"ugbar bleiben, +% da \StrukTeX{} einen gleichnamigen Makro mit einer anderen Bedeutung +% bereitstellt.% +% \else% +% The |\ifthenelse| must be mapped to |\@ifthenelse| to prevent overloading it by +% the command from the current package with the same name.% +% \fi% +% \begin{macrocode} +\let\@ifthenelse\ifthenelse +% \end{macrocode} +% \ifnum\language=\languageNGerman% +% \StrukTeX{} ben"otigt zwei weitere Pakete, die zum Lieferumfang geh"oren. +% Diese werden hier geladen.% +% \else% +% \StrukTeX{} uses two additional packages which are included in the +% package,these are loaded here.% +% \fi +% \begin{macrocode} +\RequirePackage{struktxf} +\RequirePackage{struktxp} +% \end{macrocode} +% +% \changes{v075}{10/06/23}{added markers to make debug code removeable} +% \ifnum\language=\languageNGerman% +% Zu Entwicklungszwecken werden hier ein paar Makros definiert, die +% Hilfsausgaben erzeugen (Option: |debug|, f"ur die Ver"offentlichung +% sollte diese Option nicht gesetzt werden).% +% \else% +% For developing purposes there are some debugging macros (option: |debug|, +% for the release +% version this option shouldn't be set at all); .% +% \fi% +% \changes{v061}{10/05/31}{added some debugging macros} +% \begin{macrocode} +\newcommand{\dbgArgs@nss}[1]{\typeout{===> dbg Args:\space\space\space#1}} +\newcommand{\dbgCond@nss}[1]{% + \@ifthenelse{\boolean{#1}}{ + \typeout{===> dbg Cond:\space #1 = true} + }{ + \typeout{===> dbg Cond:\space #1 = false} + } +} +\newcommand{\dbgCount@nss}[2][]{% + \def\argI{#1}% ^^A dbg + \typeout{===> dbg Count:\space\space\ifx\argI\empty\else(#1)\space\fi% + \string#2 = \the#2}} +\newcommand{\dbgCoord@nss}[3][]{% + \def\argI{#1}% ^^A dbg + \typeout{===> dbg Coord:\space\space\ifx\argI\empty\else(#1)\space\fi% + (\string#2, \string#3) = (\the#2, \the#3)}}% ^^A dbg +\newcommand{\dbgMark@nss}[3][]{% + \def\argI{#1}% ^^A dbg + \put(#2,#3){\makebox(0,0)[cc]{\ifx\argI\empty$\bullet$\else#1\fi% + }}}% ^^A dbg +\newcommand{\dbgString@nss}[1]{\typeout{===> dbg String:\space#1}} +% \end{macrocode} +% \changes{v075}{10/06/23}{added some more documentation about options} +% \changes{v-5.3a}{98/11/27}{Option \texttt{emlines} eingef"uhrt} +% \ifnum\language=\languageNGerman% +% Ab der Version v-5.3a kennt \StrukTeX{} eine Option "`|emlines|"', die es +% erm"oglicht, Geraden beliebiger Steigung zu zeichnen; sp"ater kann auch +% das Paket \textsf{curves} (Option "`|curves|"') zum Zeichnen beliebiger +% Steigungen eingesetzt werden, ab der Version v-8.0a wird auch das Paket +% \textsf{pict2e} (Option "`|pict2e|"') unterst"utzt, das dazugeh"orige +% Paket wird hier geladen.% +% \else% +% From version v-5.3a on there is the option "|emlines|" which makes it +% possible to draw lines with any slope; later on one can use the package +% \textsf{curves} (Option "|curves|") and from version v-8.0a on +% \textsf{pict2e} (option "|pict2e|") is supported, these packages are +% loaded here.% +% \fi +% \changes{v104}{10/08/15}{some editorial changes} +% \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} +% +% \ifnum\language=\languageNGerman% +% Zur Unterst"utzung der Internationalisierung werden feste Texte in der +% jeweilig benutzten Sprache (beispielsweise als |babel|-Option definiert) +% hier vorbereitet. +% \else% +% To support i18n as provided by |babel| here are some common fixed texts:% +% \fi% +% \changes{v121}{10/08/31}{added some more translations} +% \changes{v104}{10/08/15}{first steps to babel support} +% \begin{macrocode} +\DeclareOption{english}{% + \def\declarationtitlename@nss{providing memory space:}% + \def\pTruename@nss{true}% + \def\pFalsename@nss{false}% +} +\DeclareOption{german}{% + \def\declarationtitlename@nss{Speicherplatz bereitstellen:} + \def\pTruename@nss{WAHR}% + \def\pFalsename@nss{FALSCH}% +} +\DeclareOption{ngerman}{% + \def\declarationtitlename@nss{Speicherplatz bereitstellen:} + \def\pTruename@nss{WAHR}% + \def\pFalsename@nss{FALSCH}% +} +% \end{macrocode} +% +% \changes{v-7.0a}{04/01/05}{Option \texttt{verification} eingef"uhrt} +% \ifnum\language=\languageNGerman% +% Ab der Version v-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 v-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} +% +% \changes{v-8.2a}{06/01/17}{Option \texttt{nofiller} eingef"uhrt} +% \ifnum\language=\languageNGerman% +% Ab der Version v-8.2a kennt \StrukTeX{} eine Option "`|nofiller|"', die +% die Darstellung von Leerraum beeinflusst: ohne diese Option wird in +% Alternativen ein \(\emptyset\)-Zeichen ausgegeben, wenn der Platz +% ausreichend ist. Dies f"uhrt zu einer uneinheitlichen Darstellung im +% Vergleich mit dem Leerraum, der von einem \cs{case}-Block erzeugt wird, +% da hier der Leerraum nicht in entsprechende Weise angezeigt wird -- dies +% w"are nur mit einer aufwendigen Listenverwaltung m"oglich. Angabe der +% Option f"uhrt dazu, dass das \(\emptyset\)-Zeichen einheitlich weggelassen +% wird. +% \else% +% From version v-8.2a on \StrukTeX{} knows the option "`|nofiller|"', which +% makes the \(\emptyset\)-character vanishing in alternatives.% +% \fi% +% \begin{macrocode} +\newboolean{filler} +\setboolean{filler}{true} +\DeclareOption{nofiller}% +{% + \setboolean{filler}{false} +} +% \end{macrocode} +% +% \changes{v-8.3}{06/08/17}{Optionen \texttt{draft} und \texttt{final} eingef"uhrt} +% \ifnum\language=\languageNGerman% +% Ab der Version v-8.3 kennt \StrukTeX{} die Optionen "`|draft|"' und +% "`|final|"', die zwischen dem Entwurf und der endg"ultigen Version des +% Struktogramms umschalten. Entwurfsmodus ist |\sProofOn| gesetzt, f"ur die +% endg"ultige Version wird |\sProofOff| gesetzt.% +% \else% +% From version v-8.3 on \StrukTeX{} knows the options "`|draft|"' and +% "`|final|"', which differentiate between the draft (|\sProofOn|) and the +% final (|\sProofOff|) version of the structured box chart makes the +% \(\emptyset\)-character vanishing in alternatives.% +% \fi +% \begin{macrocode} +\let\ifdraft@nss\iffalse +\let\iffinal@nss\iftrue +\DeclareOption{draft}% +{% + \let\ifdraft@nss\iftrue + \let\iffinal@nss\iffalse +} +\DeclareOption{final}% +{% + \let\ifdraft@nss\iffalse + \let\iffinal@nss\iftrue +} +% \end{macrocode} +% +% \begin{macrocode} +\newboolean{debug} +\DeclareOption{debug}% +{% + \setboolean{debug}{true} +} +\DeclareOption{nodebug}% +{% + \setboolean{debug}{false} +} +% \end{macrocode} +% +% \begin{macrocode} +\newboolean{outer} +\DeclareOption{outer}% +{% + \setboolean{outer}{true} +} +% \end{macrocode} +% +% \changes{v2.3}{17/11/17}{introduced option \texttt{fixedindent}} +% \ifnum\language=\languageNGerman% +% Ab der Version v2.3 kennt \StrukTeX{} eine Option "`|fixedindent|"', die +% den Einzug von Bl"ocken in |while|- und |until|-Schleifen +% beeinflusst. Standardm"a"sig ist dieser Einzug gleich dem vertikalen +% Abstand zum umgebenden Block, was bei mehrzeiligen Bedingungen zu einem +% gro"sen, unsch"onen Einzug f"uhrt. Wenn |fixedindent| gesetzt ist, entspricht +% der Einzug (ungef"ahr) dem Zeilenabstand, was einer einzeiligen Bedingung +% entspricht. Der Makrobefehl |\dimtomm| stammt aus +% \url{https://tex.stackexchange.com/questions/223740/convert-dimension-to-integer-number-of-mm}.% +% \else% +% From version v2.3 on \StrukTeX{} has an option "`|fixedindent|"', which affects +% the indentation of blocks in |while| and |until| loops. By default, this +% indentation is the same as the vertical distance to the surrounding +% block, which leads in multi-line conditions to a large, ugly +% indentation. If |fixedindent| is set, the indentation (approximately) +% corresponds to the line spacing, which is equivalent to a one-line +% condition. The macro |\dimtomm| comes from +% \url|https://tex.stackexchange.com/questions/223740/convert-dimension-to-integer-number-of-mm|.% +% \fi% +% \begin{macrocode} +\def\dimtomm #1{\the\numexpr \dimexpr #1\relax*635000/118407168\relax } +% \end{macrocode} +% \begin{macrocode} +\newboolean{fixedindent@nss} +\DeclareOption{fixedindent}% +{% + \setboolean{fixedindent@nss}{true} + \gdef\xindent@nss{\dimtomm{\baselineskip}} +} +% \end{macrocode} +% +%% \ifnum\language=\languageNGerman% +% Nun werden andere Pakete geladen und die Optionen verarbeitet.% +% \else% +% Now load additional packages and process the options.% +% \fi +% \changes{v141}{12/04/10}{added `ExecuteOptions call for settings default +% values} +% \changes{v104}{10/08/15}{corrected `ProcessOptions call} +% \begin{macrocode} +\ExecuteOptions{pict2e,english,final} +\ProcessOptions*\relax +\ifcurves% + \RequirePackage{curves} +\else\ifemlines + \RequirePackage{emlines2} +\else\ifpictIIe + \RequirePackage{pict2e} +\fi\fi\fi +\ifthenelse{\boolean{debug}}{ + \typeout{debug active}}{ + \typeout{debug inactive} + \renewcommand{\dbgCond@nss}[1]{} + \renewcommand{\dbgCount@nss}[2][]{} + \renewcommand{\dbgCoord@nss}[3][]{} + \renewcommand{\dbgMark@nss}[3][]{} + \renewcommand{\dbgString@nss}[1]{} +} +% \end{macrocode} +% +% \begin{macro}{\StrukTeX} +% \ifnum\language=\languageNGerman% +% Das Logo des Paketes:% +% \else% +% The logo of package:% +% \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} +% +% \begin{macrocode} +% +% \end{macrocode} +% +% +% \subsection{\ifnum\language=\languageNGerman Diverse Makros zur Vorbereitung +% \else Various macros for preparation +% \fi} +% +% \changes{v-4.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> +% \end{macrocode} +% +% \begin{macrocode} +\@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{v-4.1b}{95/07/23}{`complex eingef"uhrt} +% \changes{v-4.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{v-4.1a}{95/07/17}{`btt auf NFSS umgestellt} +% \changes{v-8.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{v-4.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 +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +% +% \end{macrocode} +% +% \subsection[\ifnum\language=\languageNGerman Darstellung von Variablen +% etc.\else Representation of variables etc.\fi]{% +% \ifnum\language=\languageNGerman% +% Makros zur Darstellung von Variablen, Schl"usselw"ortern und anderen +% programmierspezifischen Details% +% \else% +% Macros for representing of variables, keywords and other specific details +% of programming% +% \fi% +% } +% +% \changes{v121}{10/08/31}{removed unnecessary test to prevent double +% loading of package} +% \changes{v121}{10/08/31}{added package url as an requirement} +% \begin{macrocode} +%<*struktxp> +% \end{macrocode} +% +% \begin{macrocode} +\RequirePackage{url} +% \end{macrocode} +% +% \begin{macro}{\pExpFont@nss} +% \changes{v-5.4a}{99/11/16}{neu eingef"uhrt, ersetzt `pVarFont@nss} +% \begin{macro}{\pKeyFont@nss} +% \changes{v-4.5a}{96/03/15}{neu eingef"uhrt} +% \begin{macro}{\pCommentFont@nss} +% \changes{v-4.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{v-4.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{v-5.4a}{99/11/16}{neu eingef"uhrt, ersetzt `pVariable} +% \begin{macro}{\pExp} +% \changes{v-5.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 Ampersand `|&|'. +% \end{enumerate}% +% \fi% +% +% \begin{macrocode} + \catcode`\_=13 \let\_\textunderscore% + \catcode`\^=12 \catcode`\&=12 % + \pUseExpFont@nss% +} +\let\pExp=\pExpression +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\pVariable} +% \changes{v-5.4a}{99/11/16}{neu definiert} +% \changes{v-2.0n}{94/03/31}{Neuimplementation gem"a"s `TeXnischer Kom"odie'} +% \begin{macro}{\pVar} +% \changes{v-2.0c}{93/12/09}{`pVar als Abk"urzung definiert} +% \begin{macro}{\pKeyword} +% \changes{v-5.4a}{99/11/16}{auf `pVariable zur"uckgef"uhrt} +% \changes{v-2.0n}{94/03/31}{Neuimplementation gem"a"s `TeXnischer Kom"odie'} +% \changes{v-2.0c}{93/12/09}{`pKeyword und `pKey definiert} +% \begin{macro}{\pKey} +% \changes{v-5.4a}{99/11/16}{auf `pVariable zur"uckgef"uhrt} +% \changes{v-2.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}{% + \begingroup% + \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{v-5.4a}{99/11/16}{neu definiert} +% \changes{v-8.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% + \url{#1} + \endgroup% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\pLanguage} +% \changes{v-5.4a}{99/11/16}{neu definiert} +% \begin{macro}{\Cee@nss} +% \changes{v-5.4a}{99/11/16}{neu definiert} +% \begin{macro}{\Java@nss} +% \changes{v-5.4a}{99/11/16}{neu definiert} +% \begin{macro}{\Pascal@nss} +% \changes{v-5.4a}{99/11/16}{neu definiert} +% \begin{macro}{\LaTeX@nss} +% \changes{v-5.4a}{99/11/16}{neu definiert} +% \begin{macro}{\Python@nss} +% \changes{v-8.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{v130}{10/09/21}{selection of the font is now done by a macro +% from url.sty} +% \changes{v-5.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% + \def\UrlFont{\exec} + \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{v-5.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{v-4.5a}{96/03/15}{neu definiert} +% \begin{macro}{\pFalse@nss} +% \changes{v-4.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{\pTruename@nss}} +\newcommand{\pFalse@nss}{\texttt{\pFalsename@nss}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\pTrue} +% \changes{v-4.5a}{96/03/15}{neu definiert "uber `pTrue@nss} +% \changes{v-3.5b}{94/01/19}{umbenannt von `true zur Vermeidung von Interferenzen} +% \changes{v-3.3c}{94/09/14}{Beschreibung eingef"uhrt} +% \begin{macro}{\pFalse} +% \changes{v-4.5a}{96/03/15}{neu definiert "uber `pTrue@nss} +% \changes{v-3.5b}{94/01/19}{umbenannt von `false zur Vermeidung von Interferenzen} +% \changes{v-3.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{v-4.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{v-3.5b}{94/01/19}{umbenannt von `Var zur Vermeidung von Interferenzen} +% \changes{v-2.5}{93/09/09}{eingef"uhrt durch Jhf} +% \begin{macro}{\sKey} +% \changes{v-4.1a}{95/07/17}{`btt bereits anderweitig definiert} +% \changes{v-3.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 +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +% +% \end{macrocode} +% +% +% \subsection{\ifnum\language=\languageNGerman Belegung von Registern \else Reservation of registers \fi} +% +% \begin{macrocode} +%<*struktex> +% \end{macrocode} +% +% \begin{macro}{\savelength@nss} +% \changes{v-4.0b}{95/05/02}{umbenannt von `s@velength} +% \changes{v-2.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{v061}{10/05/31}{enhanced the documentation} +% \changes{v-4.0b}{95/05/02}{umbenannt von `gx} +% \changes{v-3.2a}{94/09/14}{Beschreibung eingef"uhrt} +% \changes{v-3.2a}{94/09/14}{Beschreibung eingef"uhrt} +% \begin{macro}{\gy@nss} +% \changes{v-4.0b}{95/05/02}{umbenannt von `gy} +% \begin{macro}{\gsize@nss} +% \changes{v-4.0b}{95/05/02}{umbenannt von `gsize} +% \changes{v-3.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. Um eine hinreichend feine Aufl"osung zu +% erzielen, wird intern mit der \cs{unitlength} von 0.001\,mm gearbeitet. +% +% Die linke untere Koordinate eines Struktogramms ist (0, 0), die rechte +% obere Koordinate (\cs{gxsize@nss}, \cs{gy@nss}). +% \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. To +% have an adequate resolution the \cs{unitlength} for a structured box +% chart is set to 0.001\,mm. +% +% The lower left corner of a structured box chart has the coordinate (0, 0), +% the upper right corner the coordinate (\cs{gxsize@nss}, \cs{gy@nss}).% +% \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{v-4.0b}{95/05/02}{umbenannt von `param} +% \changes{v-3.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{v-4.0b}{95/05/02}{umbenannt von `x} +% \changes{v-3.3c}{94/09/14}{Beschreibung eingef"uhrt} +% \begin{macro}{\y@nss} +% \changes{v-4.0b}{95/05/02}{umbenannt von `y} +% \changes{v-3.3c}{94/09/14}{Beschreibung eingef"uhrt} +% \begin{macro}{\xsize@nss} +% \changes{v-4.0b}{95/05/02}{umbenannt von `xsize} +% \changes{v-3.3c}{94/09/14}{Beschreibung eingef"uhrt} +% \begin{macro}{\xx@nss} +% \changes{v-4.0b}{95/05/02}{umbenannt von `xx} +% \begin{macro}{\yy@nss} +% \changes{v-4.0b}{95/05/02}{umbenannt von `yy} +% \begin{macro}{\tempx@nss} +% \changes{v-4.0b}{95/05/02}{umbenannt von `tempx} +% \begin{macro}{\tempxx@nss} +% \changes{v-4.0b}{95/05/02}{umbenannt von `tempxx } +% \begin{macro}{\tempxxx@nss} +% \changes{v-7.2}{04/07/13}{eingef"uhrt f"ur die Unterst"utzung von pict2e} +% \begin{macro}{\tempy@nss} +% \changes{v-4.0b}{95/05/02}{umbenannt von `tempy} +% \begin{macro}{\tempyy@nss} +% \changes{v-7.2}{04/07/13}{umbenannt von `tempyy} +% \begin{macro}{\tempyyy@nss} +% \changes{v-7.2}{04/07/04}{eingef"uhrt f"ur die Unterst"utzung von pict2e} +% \begin{macro}{\ydepth@nss} +% \changes{v-4.0b}{95/05/02}{umbenannt von `ydepth} +% \changes{v-3.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{v-4.1a}{95/07/18}{umbenannt von `nss@Box} +% \begin{macro}{\TextBoxHt@nss} +% \changes{v-4.1a}{95/07/18}{umbenannt von `nss@BoxHt} +% \changes{v-3.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 which 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{v-8.2a}{06/01/17}{`ifmmode $\rightarrow$ `ensuremath} +% \changes{v-4.1a}{95/07/18}{umbenannt von `filler} +% \changes{v-4.1a}{95/07/17}{`emptyset wird als AMS-Schrift geladen} +% \changes{v-2.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. Der Leerraum wird allerdings nicht gef"ullt, wenn die Option +% |nofiller| gesetzt wird. Will man die globale Einstellung lokal umgehen, +% so kann man einfach die boolesche Variable |filler| auf |true| setzen: +% \cs{fillertrue}. +% \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|"'. "'$\emptyset$"' will not be set, if the option +% |nofiller| is set.% +% \fi% +% \begin{macrocode} +\DeclareMathSymbol\varnothing{\mathord}{AMSb}{"3F} +\let\emptyset\varnothing +\def\filler@nss{% + \iffiller\ensuremath{\emptyset}\fi% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@nter@nss} +% \changes{v-4.0b}{95/05/02}{umbenannt von `c@nter} +% \changes{v-3.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{v-4.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{v061}{10/05/31}{added missing translations} +% \changes{v-4.4b}{96/03/13}{Optionaler Parameter "uber `empty statt `relax getestet} +% \changes{v-4.4a}{96/02/29}{`ifthenelse als internes Kommando definiert} +% \changes{v-3.1a}{94/09/09}{optionaler Parameter eingef"uhrt} +% \ifnum\language=\languageNGerman% +% \cs{struktogramm} beginnt ein Struktogramm +% \else% +% \cs{struktogramm} starts a structured box chart% +% \fi% +% \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% +% Falls die Option |draft| gesetzt wurde, wird f"ur jedes Struktogramm +% grunds"atzlich auf den Entwurfsmodus umgeschaltet. +% \else% +% If the option |draft| is set we switch to the draft mode for every single +% structured box chart.% +% \fi% +% \begin{macrocode} + \ifdraft@nss\let\struktogramm@nss=\struktogramm@Proof\fi% +% \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 treat 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{v061}{10/05/31}{enhanced the documentation} +% \changes{v-4.5b}{96/03/26}{Positionierung des Struktogramms "uber [t] bei der minipage} +% \changes{v-4.4b}{96/03/13}{Optionaler Parameter "uber `empty statt `relax getestet} +% \changes{v-4.2b}{95/10/15}{umbenannt von `struktogramm@nss} +% \changes{v-4.0c}{95/05/09}{umbenannt von `nss@struktogramm} +% \changes{v-3.1a}{94/09/09}{als internes Makro zur Behandlung optionaler Parameter neu} +% \changes{v-3.3a}{94/09/21}{`baselineskip=0pt innerhalb von Struktogrammen korrigiert} +% \ifnum\language=\languageNGerman% +% |\struktogramm@NoProof| leitet ein Struktogramm ein. Die drei Parameter +% sind: +% \begin{itemize} +% \item |#1|: die Breite des Struktogramms, +% \item |#2|: seine (voraussichtliche) H"ohe und +% \item |#3|: sein Titel. +% \end{itemize} +% \else% +% |\struktogramm@NoProof| opens a structured box chart. The three +% parameters are: +% \begin{itemize} +% \item |#1|: the width of the structured box chart, +% \item |#2|: its (estimated) height and, +% \item |#3|: its title. +% \end{itemize}% +% \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{v-4.5b}{96/03/26}{Positionierung des Struktogramms "uber [t] bei der minipage} +% \changes{v-4.4b}{96/03/13}{Optionaler Parameter "uber `empty statt `relax getestet} +% \changes{v-4.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{v-4.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{v-4.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} +% \ifnum\language=\languageNGerman% +% Die aktuelle \cs{unitlength} wird zwischengespeichert, da mit einer eigenen +% Gr"o"se gearbeitet wird.% +% \else% +% The current \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} +% \changes{v2.3}{17/12/04}{enhanced documentation} +% \changes{v061}{10/05/31}{added some debug code} +% \ifnum\language=\languageNGerman% +% |\str@kt| setzt globale Werte: |\gx@nss| als x-Koordinate (|#1|), +% |\gy@nss| als y-Koordinate (|#2|) der linken oberen Ecke und +% |\gsize@nss| als Breite des aktuellen Struktogramms (|#3|). Das +% Struktogramm selbst wird dann in ein Rechteck mit der unteren linken +% Ecke (0,0) und der oberen Ecke (|\gx@nss|, |\gy@nss|) gezeichnet. +% +% Gleichzeitig wird eine Gruppe ge"offnet, in der mit lokalen Kopien +% dieser Werte (|\x@nss|, |\y@nss| und |\xsize@nss|) gearbeitet werden +% kann. Diese Gruppe kann dann Unterstruktogramme enthalten (Sequenzen, +% Schleifen und Entscheidungen).% +% \else% +% |\str@kt| sets global values: |\gx@nss| as x-coordinate (|#1|), +% |\gy@nss| as y-coordinate (|#2|) of the upper left corner and +% |\gsize@nss| as width of the actual structured box chart (|#3|). The +% actual structured box chart will be drawn in a recangular region with +% lower left corner (0, 0) and upper right corner at (|\gx@nss|, +% |\gy@nss|). +% +% 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|). This group may contain further (sub) structured box +% charts (e.\,g. for loops or selections).% +% \fi% +% \begin{macrocode} +\def\str@kt#1#2#3{% + \dbgString@nss{Beginn \string\str@kt} + \dbgArgs@nss{#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% + \dbgString@nss{rectangle size} + \dbgCoord@nss[Ursprung]{\x@nss}{\y@nss} + \dbgCount@nss[Breite]{\xsize@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 above opened group. 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% +% \changes{v061}{10/05/31}{added some debug code} +% \begin{macrocode} +\def\endstr@kt{% + \global\gy@nss=\y@nss% + \endgroup% + \ydepth@nss=\gy@nss% + \dbgString@nss{Ende \string\str@kt} +} +% \end{macrocode} +% \end{macro} +% +% \changes{v-7.0b}{2004/03/09}{ersetzt durch `tempxx@nss} +% \changes{v-4.0b}{95/05/08}{umbenannt von `xin} +% \changes{v-3.2a}{94/09/14}{Beschreibung eingef"uhrt} +% \begin{macro}{\set@nss} +% \changes{v2.3}{17/12/04}{corrected documentation} +% \changes{v061}{10/05/31}{enhanced the documentation and added some +% debug code}% +% \changes{v-4.0b}{95/05/08}{umbenannt von `set}% +% \ifnum\language=\languageNGerman% +% |\set@nss| setzt den als ersten Parameter |#1| "ubergebenen Text in +% eine horizontale Box |\TextBox@nss|. Die Breite der Box ist die +% aktuelle Breite \cs{xsize@nss} vermindert um die Gr"o"se des +% Parameters |#2|. Ist die Breite dieser Box gr"o"ser als die genannte +% Breite, wird der Text in eine vertikale Box gesetzt.% +% \else% +% |\set@nss| sets the text, which is given as parameter |#1|, into a +% horizontal box |\TextBox@nss|. The width of this box is the current +% width \cs{xsize@nss} decremented by |#2|. If this value is less than +% the natural width of the first parameter the text will be set into a +% vertical box.% +% \fi% +% \changes{v104}{10/08/15}{corrected position of texts in `set@nss} +% \begin{macrocode} +\def\set@nss#1#2{% + \dbgString@nss{Beginn \string\set@nss} + \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}% + \else + \setbox\TextBox@nss=\hbox to \tempxx@nss\unitlength{#1\hss}% + \fi% + \dbgString@nss{Ende \string\set@nss} +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\block@nss} +% \changes{v061}{10/05/31}{enhanced the documentation and added some +% debug code}% +% \changes{v-7.0a}{04/01/04}{umbenannt von `bl@ck}% +% \ifnum\language=\languageNGerman% +% |\block@nss| setzt die Box |\TextBox@nss| entsprechend dem zweiten +% Parameter. Ist dieser 2, wird ..., f"ur den Wert 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. der erste Parameter |#1| gibt die +% (optionale) H"ohe des Kastens an.% +% \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. Parameter |#1| gives the (optional) height of the box.% +% \fi% +% \begin{macrocode} +\def\block@nss#1#2{% + \dbgString@nss{Beginn \string\block@nss} + \tempy@nss=#1% +% \end{macrocode} +% At first we compute the height of the text (in pt): +% \begin{macrocode} + \dbgCount@nss{\ydepth@nss} + \TextBoxHt@nss=\ht\TextBox@nss% + \advance\TextBoxHt@nss by\dp\TextBox@nss% + \advance\TextBoxHt@nss by 2mm% + \dbgCount@nss[original]{\TextBoxHt@nss} + \ifdim\TextBoxHt@nss<\tempy@nss\unitlength% + \TextBoxHt@nss=\tempy@nss\unitlength% + \fi% + \dbgCount@nss[korrigiert]{\TextBoxHt@nss} +% \end{macrocode} +% \ifnum\language=\languageNGerman% +% \else% +% Because of we have to convert a box's height into mm, we have to multiply +% the height by 0.00536 (\(1\;mm=186467\;bp\equiv0.00536\;mm=\;bp\), +% dimensions are internally stored as bp).% +% \fi% +% \begin{macrocode} + \TextBoxHt@nss=0.00536\TextBoxHt@nss% + \dbgCount@nss[skaliert]{\TextBoxHt@nss} +% \end{macrocode} +% \ifnum\language=\languageNGerman% +% Wegen der Orientierung des Koordinatensystems wird der Ursprung des zu +% zeichnenden Objektes um \cs{ydepth@nss} nach unten verschoben, danach +% wird das Objekt mit der H"ohe \cs{ydepth@nss} gezeichnet. +% \else% +% Because of the orientation of the coordinate system, we go down by +% \cs{ydepth@nss} and draw from that point the box of height +% \cs{ydepth@nss}.% +% \fi% +% \begin{macrocode} + \ydepth@nss=\TextBoxHt@nss\advance\y@nss by-\ydepth@nss% + \dbgCoord@nss[Ursprung]{\x@nss}{\y@nss} + \dbgCoord@nss[Breite, Hoehe]{\xsize@nss}{\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% + \dbgString@nss{Ende \string\block@nss} +} +% \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{\declarationtitlename@nss} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\descriptionindent} +% \changes{v-4.5a}{96/03/14}{an \LaTeX2e angepasst} +% \changes{v-3.3a}{94/09/16}{neu eingef"uhrt} +% \begin{macro}{\descriptionwidth} +% \changes{v-4.5a}{96/03/14}{an \LaTeX2e angepasst} +% \changes{v-3.3a}{94/09/16}{neu eingef"uhrt} +% \begin{macro}{\descriptionwidth@nss} +% \changes{v-4.5a}{96/03/14}{neu eingef"uhrt} +% \begin{macro}{\descriptionsep} +% \changes{v-4.5a}{96/03/14}{an \LaTeX2e angepasst} +% \changes{v-3.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{v-5.2a}{97/12/03}{Vorbesetzung des Fonts entf"allt} +% \changes{v-4.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:Companion} +% \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{v-4.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{v-4.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{v061}{10/05/31}{enhanced the documentation and added some debug code} +% \changes{v-3.2a}{94/09/14}{Beschreibung eingef"uhrt} +% \ifnum\language=\languageNGerman% +% Einfache Anweisungen werden "uber \cs{assign} geschrieben. \cs{assign} +% kennt einen zwei Parameter: die H"ohe des Kastens (optional) und den Text, +% der die Aktion angibt. Die H"ohe des Kastens wird in \cs{param@nss} gespeichert. +% \else% +% Simple commands are written by \cs{assign}. \cs{assign} knows two +% parameters: the height of the box (optional) and the text, whichs +% describes the action. The height of the box gets stored in \cs{param@nss}.% +% \fi% +% \begin{macrocode} +\def\assign{\let\next=\@assign\getoption}% +\def\@assign#1{% + \dbgString@nss{Beginn \string\@assign} + \dbgCoord@nss[Ursprung]{\x@nss}{\y@nss} + \dbgCount@nss[Breite]{\xsize@nss} +% \end{macrocode} +% \ifnum\language=\languageNGerman% +% Das Setzen einer Zuweisung enth"alt Schritte, die immer wieder +% auftreten. Deshalb werden diese Schritte an dieser Stelle genauer +% beschrieben. +% +% Der aktuelle Kasten wird mit einer Breite von \cs{xsize@nss} gesetzt, und +% der Text soll mit einer vern"unftigen Breite dahinein gesetzt werden. Nach +% Augenschein sehen R"ander von \(\frac{1}{12}\) der Gesamtbreite gut aus, somit +% nimmt der Text \(\frac{5}{6}\) der Gesamtbreite ein. +% \else% +% The following is repeated many times, so it is good to describe it one +% time. \cs{xsize@nss} ist the width of the box to be constructed now. The +% text of the action must be placed into the box with left and right +% margins. The width of one margin is \(\frac{1}{12}\) of the current width, +% so the text covers \(\frac{5}{6}\) of the width.% +% \fi% +% \begin{macrocode} + \tempx@nss=\xsize@nss\divide\tempx@nss by 6% +% \end{macrocode} +% \ifnum\language=\languageNGerman% +% Zuerst wird der Text behandelt, \ldots +% \else% +% At first the text ist formatted, \ldots{}% +% \fi% +% \begin{macrocode} + \set@nss{#1}{\tempx@nss}% +% \end{macrocode} +% \ifnum\language=\languageNGerman% +% dann wird die H"ohe der Box in \cs{tempy@nss} zwischengespeichert \ldots{} +% \else% +% the the height of the box gets intermediately stored in \cs{tempy@nss}, \ldots{}% +% \fi% +% \begin{macrocode} + \tempy@nss=\number\param@nss000% +% \end{macrocode} +% \ifnum\language=\languageNGerman% +% und als letztes wird der Kasten mit dem vorbereiteten Text gesetzt: +% \else% +% and at last the box with the previous prepared text gets set:% +% \fi% +% \begin{macrocode} + \block@nss{\tempy@nss}{1}% + \dbgString@nss{Ende \string\@assign} + \dbgCoord@nss[Ursprung]{\x@nss}{\y@nss} +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\sub} +% \changes{v-4.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{v061}{10/05/31}{added missing translation} +% \changes{v-3.3c}{94/09/27}{Fehler mit der Breite korrigiert} +% \changes{v-2.5}{93/09/09}{"Anderungen an der Darstellung} +% \changes{v-2.0}{92/01/17}{Eingef"uhrt durch D. Rieger} +% \ifnum\language=\languageNGerman% +% Verlassen einer Schleife an einer bestimmten Stelle. +% \else% +% Leaving the loop at a certain point.% +% \fi% +% \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{v-4.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{v-4.1b}{95/07/19}{umbenannt von `w@rt@nss} +% \changes{v-4.0b}{95/05/08}{umbenannt von `w@rt} +% \begin{macro}{\index@nss} +% \changes{v-4.1b}{95/07/19}{umbenannt von `zaehler@nss} +% \changes{v-4.0b}{95/05/08}{umbenannt von `zaehler} +% \begin{macro}{\anzzeilen@nss} +% \changes{v-4.1b}{95/07/19}{umbenannt von `zeilen@nss} +% \changes{v-4.0b}{95/05/08}{umbenannt von `zeilen} +% \changes{v-3.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{v-7.0ba}{04/03/09}{umbenannt von `indhelp@nss} +% \begin{macro}{\indentmeasure@nss} +% \changes{v-5.3a}{98/11/27}{neu eingef"uhrt} +% \begin{macro}{\indentmeasureleft@nss} +% \changes{v-5.3a}{98/11/27}{neu eingef"uhrt} +% \begin{macro}{\thisindent@nss} +% \changes{v-5.3a}{98/11/27}{neu eingef"uhrt} +% \begin{macro}{\thisindentleft@nss} +% \changes{v-5.3a}{98/11/27}{neu eingef"uhrt} +% \begin{macro}{\thislength@nss} +% \changes{v-5.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{v-8.0a}{04/07/13}{Paket \textsf{pict2e.sty} wird unterst"utzt} +% \changes{v-4.4a}{96/02/29}{Kommando intern gemacht, um benannt von `ifthenelse} +% \changes{v-4.1d}{95/10/04}{Tippfehler korrigiert} +% \changes{v-4.0d}{95/04/12}{Tippfehler korrigiert} +% \changes{v-3.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{% + \dbgString@nss{Beginn \string\@ifthenelse@nss} +% \end{macrocode} +% \ifnum\language=\languageNGerman% +% Die 5 Parameter sind: +% \else% +% The 5 parameters are:% +% \fi% +% \ifnum\language=\languageNGerman% +% \begin{enumerate} +% \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"'). +% \end{enumerate} +% \else% +% \begin{enumerate} +% \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"'). +% \end{enumerate}% +% \fi% +% \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} + \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 beliebige 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{v-8.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 %\ifanygradient + \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 %\ifanygradient + \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% + \ifouter% + \put(\x@nss,\y@nss){\makebox(\tempx@nss,\tempyy@nss)[l]{\hspace{1em}#4}}% + \else%\outer + \put(\x@nss,\y@nss){\makebox(\tempx@nss,\tempyy@nss){#4}}% + \fi %\outer + \xx@nss=\x@nss\advance\xx@nss by \tempx@nss% + \ifouter% + \put(\xx@nss,\y@nss){\makebox(\tempxx@nss,\tempyy@nss)[r]{#5\hspace{1em}}}% + \else%\outer + \put(\xx@nss,\y@nss){\makebox(\tempxx@nss,\tempyy@nss){#5}}% + \fi %\outer + \str@kt{\x@nss}{\y@nss}{\tempx@nss}% + \dbgString@nss{Ende \string\@ifthenelse@nss} +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\change} +% \changes{v-4.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% +% \changes{v061}{10/05/31}{added debug code} +% \begin{macrocode} +\def\change{% + \dbgString@nss{\string\change} + \endstr@kt\str@kt{\xx@nss}{\y@nss}{\tempxx@nss}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifend@nss} +% \changes{v-4.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% +% \changes{v061}{10/05/31}{added debug code} +% \begin{macrocode} +\def\ifend@nss{% + \dbgString@nss{Beginn \string\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% + \dbgString@nss{Ende \string\ifend@nss} +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\forloop@nss} +% \changes{v2.0a}{17/06/02}{introduced a generic name} +% \changes{v2.0}{17/06/02}{`forall: introduced loop over a set} +% \begin{macro}{\forloopend@nss} +% \changes{v2.0a}{17/06/02}{introduced a generic name} +% \changes{v2.0}{17/06/02}{`forallend: introduced loop over a set} +% \ifnum\language=\languageNGerman% +% Beginn und Ende einer Schleife, die "uber alle Elemente einer Menge +% l"auft. Die Beschreibung der Schleife wird als Parameter "ubergeben. +% \else% +% Begin and end of a loop which traverses all elements of a set. The +% description of the loop is passed as parameter.% +% \fi% +% \begin{macrocode} +\def\forloop@nss{\let\next=\@forloop@nss\getoption} +\def\@forloop@nss#1{ + \def\argi{#1} + \dbgString@nss{Beginn \string\@forloop} + \tempx@nss=\xsize@nss + \divide\tempx@nss by 6 + \ifx\argi\empty% + \set@nss{\mbox{\rule{0mm}{2ex}}}{\tempx@nss}% + \else% + \set@nss{#1\hskip\xsize@nss\unitlength}{\tempx@nss}% + \fi% + \tempy@nss=\number\param@nss000 + \block@nss{\tempy@nss}{0} + \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\forloopend@nss{ + \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){}} + \dbgString@nss{Ende \string\@forloop@nss} +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\forallin} +% \changes{v2.0b}{17/06/02}{renamed from `foreach: conflict with tikz} +% \changes{v2.0a}{17/06/02}{mapped the generic name onto the name for the user's interface} +% \begin{macro}{\forallinend} +% \changes{v2.0b}{17/06/02}{renamed from `foreach: conflict with tikz} +% \changes{v2.0a}{17/06/02}{mapped the generic name the name for onto the user's interface} +% \changes{v2.0a}{17/06/02}{introduced a generic name} +% \begin{macrocode} +\let\forallin=\forloop@nss +\let\forallinend=\forloopend@nss +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\forever} +% \changes{v2.0a}{17/06/02}{mapped the generic name onto the name for the user's interface} +% \changes{v-3.5a}{94/11/22}{"ubernommen von J. Dietel} +% \changes{v-2.0}{92/01/17}{Eingef"uhrt durch D. Rieger} +% \begin{macro}{\foreverend} +% \changes{v2.0a}{17/06/02}{mapped the generic name onto the name for the user's interface} +% \changes{v-3.5a}{94/11/22}{"ubernommen von J. Dietel} +% \changes{v-2.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{% + \@forloop@nss{}% +} +\let\foreverend=\forloopend@nss +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\dfr} +% \changes{v-4.5b}{96/03/28}{Beschreibung eingef"uhrt} +% \begin{macro}{\dfrend} +% \changes{v-4.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} +% \changes{v061}{10/05/31}{added missing translation and added debug code} +% \ifnum\language=\languageNGerman% +% Beginn und Ende einer kopfgesteuerten Schleife. +% \else% +% Begin and end of a loop with a pre test.% +% \fi% +% \begin{macrocode} +\def\while{\let\next=\@while\getoption} +\def\@while#1{% + \dbgString@nss{Beginn \string\@while} + \dbgCond@nss{fixedindent@nss} + \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 + \@ifthenelse{\boolean{fixedindent@nss}}{% + \tempx@nss=\x@nss\advance\tempx@nss by \xindent@nss + \tempxx@nss=\xsize@nss\advance\tempxx@nss by -\xindent@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){}}% + \dbgString@nss{Ende \string\whileend} +} +% \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 a post test.% +% \fi% +% \begin{macrocode} +\def\until{\let\next=\@until\getoption} +\def\@until#1{\tempx@nss=\xsize@nss\divide\tempx@nss by 6 + \dbgString@nss{Beginn \string\@until} + \dbgCoord@nss[Ursprung]{\x@nss}{\y@nss} + \dbgCount@nss[Breite]{\xsize@nss} + \set@nss{#1\hskip\xsize@nss\unitlength}{\tempx@nss} + \tempy@nss=\number\param@nss000 \block@nss{\tempy@nss}{2} + \@ifthenelse{\boolean{fixedindent@nss}}{% + \advance\x@nss by \xindent@nss\tempxx@nss=\xsize@nss + \advance\tempxx@nss by -\xindent@nss \tempy@nss=\ydepth@nss + % \advance\x@nss by \xindent@nss\tempxx@nss=\xsize@nss + % \advance\tempxx@nss by -\xindent@nss \tempy@nss=\ydepth@nss + }{ + \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\ydepth@nss by -\tempy@nss + \tempyy@nss=\ydepth@nss\ydepth@nss=-\ydepth@nss% + \advance\ydepth@nss by \y@nss + \y@nss=\tempyy@nss + \@ifthenelse{\boolean{fixedindent@nss}}{% + \advance\x@nss by -\xindent@nss + \put(\x@nss,\y@nss){\framebox(\xsize@nss,\ydepth@nss){}} + \put(\x@nss,\y@nss){\makebox(\xsize@nss,\tempy@nss) + {\box\TextBox@nss}} + }{% + \advance\x@nss by-\tempy@nss + \put(\x@nss,\y@nss){\framebox(\xsize@nss,\ydepth@nss){}} + \put(\x@nss,\y@nss){\makebox(\xsize@nss,\tempy@nss) + {\box\TextBox@nss}} + }% + \dbgString@nss{Ende \string\untilend}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\cases@nss} +% \changes{v-7.0b}{2004/03/09}{ersetzt durch `tempxx@nss} +% \changes{v-4.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{v-8.2a}{05/01/17}{Fehlerkorrektur: schr"age Linie endet nun an +% der richtigen Stelle (pict2e)} +% \changes{v-8.0d}{04/12/29}{Fehlerkorrektur: senkrechte Trennlinien haben +% nun die richtige L"ange} +% \changes{v-8.0a}{04/07/13}{Paket \textsf{pict2e.sty} wird unterst"utzt} +% \changes{v-4.2a}{95/10/04}{um \foreign{default}-Zweig erweitert} +% \changes{v-4.1d}{95/10/04}{Dokumentation verbessert} +% \changes{v-3.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% +% \changes{v061}{10/05/31}{added debug code} +% \begin{macrocode} +\def\case{\let\next=\@case\getoption} +\def\@case#1#2#3#4{% + \dbgString@nss{Beginn \string\@case} +% \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 (maybe 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 +% \end{macrocode} +% \ifnum\language=\languageNGerman% +% Die Argumente von \cs{line} f"ur die Steigung m"ussen im Intervall +% \([-1000, 1000]\) liegen, daher +% wird hier der Faktor 1000 wieder wegdividiert. Abschlie"send wird die +% L"ange der Strecke berechnet. +% \else% +% The arguments of \cs{line} for the slope must be in the interval +% \([-1000, 1000]\), so divide by +% the previous introduced factor of 1000. Finally we're computing the +% length of the line.% +% \fi% +% \begin{macrocode} + \advance\tempxxx@nss by -\x@nss + \divide\tempxxx@nss by 1000 + \tempyyy@nss=\tempy@nss + \advance\tempyyy@nss by -\y@nss + \divide\tempyyy@nss by 1000 + \advance\xx@nss by -\x@nss + \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% +% \end{macrocode} +% \ifnum\language=\languageNGerman% +% Die Berechnung der L"ange muss lokal sein, darum wird hier eine eigene +% Gruppe eingef"uhrt anstatt die letzte Subtraktion r"uckg"angig zu machen. +% \else% +% The calculation of the length of the line must be local, so we're using a +% group here---instead of undoing the \cs{advance} operation.% +% \fi% +% \begin{macrocode} + \begingroup + \tempxxx@nss=\xx@nss + \advance\tempxxx@nss by -\x@nss + \divide\tempxxx@nss by 1000 + \tempyyy@nss=\tempy@nss + \advance\tempyyy@nss by -\y@nss + \divide\tempyyy@nss by 1000 + \advance\xx@nss by -\x@nss + \put(\x@nss,\y@nss){\line(\tempxxx@nss, + \tempyyy@nss){\xx@nss}} + \endgroup + \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{v-8.0e}{05/05/17}{`tempxxx@nss umbenannt in `tempxx@nss (wir +% befinden uns nicht im Fall pictIIe)} +% \changes{v-8.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 divided 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% +% \changes{v061}{10/05/31}{enhanced the documentation} +% \begin{macrocode} + \advance\y@nss by -\tempy@nss + \put(\x@nss,\y@nss)% + {% + \makebox(\tempx@nss,\tempy@nss)[lb]{\raise3pt\hbox{~#4}}% + }% +% \ifnum\language=\languageNGerman% +% Links oben im linken Zweig den Text des Falles eintragen +% \else% +% To find out the full height of the different cases, we start with a large +% value \cs{ydepth@nss}, which gets smaller by the settings of each +% case. Then the overall group gets opened, this group is closed in \cs{?}% +% \fi% + \ydepth@nss=1000000% + \str@kt{\x@nss}{\y@nss}{\tempx@nss}% + \dbgString@nss{Ende: \string\@case} + \dbgCoord@nss[Ursprung]{\x@nss}{\y@nss} + \dbgCount@nss[Breite]{\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% +% \changes{v061}{10/05/31}{added debug code and enhanced the documentation} +% \begin{macrocode} +\def\switch{% + \@ifnextchar [{\@switch}{\@switch[l]}% +} +\def\@switch[#1]#2{% + \dbgString@nss{Beginn \string\@switch} + \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{% + \dbgString@nss{Ende: \string\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. Die erste Trennlinie steht nach dem ersten Block. +% \else% +% The following loop is to draw the partitioning lines between the texts of +% cases. The first partitioning line occurs after the first block.% +% \fi% +% \begin{macrocode} + \dbgCount@nss[width?]{\xsize@nss} + \loop + \dbgString@nss{draw vertical line} + \dbgCoord@nss[Ursprung]{\tempxx@nss}{\y@nss} + \dbgCount@nss[Laenge]{\tempyy@nss} + \advance\tempyy@nss by -\condindent@nss + \advance\tempxx@nss by \tempx@nss + \put(\tempxx@nss,\y@nss){\line(0,1){\tempyy@nss}} +% \end{macrocode} +% \ifnum\language=\languageNGerman% +% Die Schleife endet vor dem letzten Block, deshalb wird der Z"ahler um die +% Blockbreite vor dem Test erh"oht. Zus"atzlich wird ein kleiner Wert (100) +% addiert, um Rundungsfehler der Integer-Arithmetik auszugleichen. +% \else% +% The loop ends just before the last block, so we advance the counter by +% the width of a block before the test. Also a small value is added to +% compensate rounding errors of the integer arithmetic.% +% \fi% +% \begin{macrocode} + \xx@nss=\tempxx@nss + \advance\xx@nss by -\x@nss + \advance\xx@nss by \tempx@nss + \advance\xx@nss by 100 + \dbgCount@nss[loop control]{\xx@nss} + \dbgCount@nss[compare to]{\xsize@nss} + \ifnum \xx@nss<\xsize@nss + \repeat +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \changes{v-9.1}{10/01/17}{added stubs for the implementation of `inparallel, `task, and `inparallelend} +% \begin{macro}{\inparallel} +% \changes{v065}{10/06/07}{added some german translations} +% \changes{v061}{10/05/31}{enhanced the documentation and added debug code} +% \changes{v-9.1}{10/01/17}{added} +% \begin{macro}{\inparallelend} +% \changes{v-9.1}{10/01/17}{added} \ifnum\language=\languageNGerman% +% \cs{inparallel} und \cs{inparallelend} stellen Start und Ende +% paralleler Tasks dar. +% +% Der Makro \cs{inparallel} hat drei Parameter: +% \begin{enumerate} +% \item die optionale H"ohe des Blocks (diese H"ohe dient als gemeinsame +% H"ohe der parallelen Tasks) +% \item die Anzahl der parallelen Tasks +% \item die Beschreibung der ersten Task +% \end{enumerate} +% Die Implementation folgt den "ublichen Regeln: zuerst wird die +% optionale H"ohe verarbeitet, so wird sie in \cs{param@nss} gespeichert +% (wenn der optional Parameter fehlt, wird \cs{param@nss} zu 0 +% gesetzt). % +% \else% +% \cs{inparallel} and \cs{inparallelend} represent start and end of +% parallel tasks. +% +% The macro \cs{inparallel} has three parameters: +% \begin{enumerate} +% \item the optional height of the block (this height is used as a +% base for the height of the parallel tasks) +% \item the number of parallel tasks +% \item the description of the first task +% \end{enumerate} +% The implementation follows the common rules: first we process the +% optional height, in this way it is stored in \cs{param@nss} (if the +% optional parameter is missing, \cs{param@nss} has a value of 0). % +% \fi +% \begin{macrocode} +\def\inparallel{\let\next=\@inparallel\getoption} +% \end{macrocode} +% \ifnum\language=\languageNGerman% +% Damit braucht \cs{@inparallel} nur zwei Parameter zu verwalten: % +% \else% +% So \cs{@inparallel} needs to manage only two parameters: % +% \fi +% \begin{macrocode} +\def\@inparallel#1#2{% + \dbgString@nss{Beginn \string\@inparallel} +% \end{macrocode} +% \ifnum\language=\languageNGerman% +% Die Schritte zum Zeichnens des Kastens sind: +% \begin{enumerate} +% \item Berechnen der H"ohe der einzelnen Tasks: % +% \else% +% The steps to draw the box are as follows: +% \begin{enumerate} +% \item Calculate the intended height of the tasks: +% \fi% +% \begin{macrocode} +\tempyy@nss=\number\param@nss000% +% \end{macrocode} +% \item % +% \ifnum\language=\languageNGerman% +% Zeichnen der gestrichelten Linien zu Beginn des Blocks; das muss in +% einer eigenen Gruppe geschehen, da der aktuelle Wert von \cs{y@nss} +% sp"ater noch gebraucht wird. +% +% Die aktuelle Startposition des Blocks is |(\x@nss, \y@nss)|, die Breite +% ist \cs{xsize@nss}, um die Anzahl \cs{tempxx@css} der Striche in der +% gestrichelten Linie zu bestimmen, wird die Breite durch 3000 geteilt +% (zweimal die L"ange eines Striches). % +% \else % +% Draw the two dashed lines at the top; this must happen in a group of +% its own, because we need the current \cs{y@nss} later on. +% +% The current starting position is |(\x@nss, \y@nss)|, the width is +% \cs{xsize@nss}, first divide the width by 3000 (two times the length of +% a dash) to get the number \cs{tempxx@css} of dashes for the dashed +% line. % +% \fi% +% \begin{macrocode} +\dbgCoord@nss[Ursprung inparallel]{\x@nss}{\y@nss} +\dbgMark@nss{\x@nss}{\y@nss} +\tempxx@nss=\xsize@nss +\advance\tempxx@nss by 1500% prevent rounding errors +\divide\tempxx@nss by 3000% +\dbgCount@nss[Number of dashes]{\tempxx@nss} +\yy@nss=\y@nss\advance\yy@nss by -2000% +\dbgCoord@nss[draw top dashed line, origin]{\x@nss}{\yy@nss} +\dbgCount@nss[length based on]{\xsize@nss} +\multiput(\x@nss,\yy@nss)(3000, 0){\tempxx@nss}{\line(1,0){1500}}% +\advance\yy@nss by -2000% +\multiput(\x@nss,\yy@nss)(3000, 0){\tempxx@nss}{\line(1,0){1500}}% +% \end{macrocode} +% \item % +% \ifnum\language=\languageNGerman% +% Berechnen der (gemeinsamen) Breite aller parallelen Tasks (Gesamtbreite +% geteilt durch die Anzahl der Tasks). Zus"atzlich wird die Breite der +% beschreibenden Texte f"ur alle Tasks berechnet; sie betr"agt +% \(\frac{5}{6}\) der Breite einer Task. % +% \else% +% Calculate the (common) width of all parallel tasks (total width +% divided by number of tasks). Additionally we calculate the text width +% for all tasks, which is \(\frac{5}{6}\) of the task. % +% \fi% +% \begin{macrocode} +\xx@nss=\x@nss% +\advance\xx@nss by \xsize@nss% +\divide\xsize@nss by #1% +\tempx@nss=\xsize@nss\divide\tempx@nss by 6% +% \end{macrocode} +% \item % +% \ifnum\language=\languageNGerman% +% Zeichnen der verschiedenen parallelen Tasts (z.\,Zt. besteht eine Task +% nur aus einer Aktion, wenn sie aus mehreren Aktionen best"ande, +% m"ussten diese durch horizontale Linien getrennt werden, dies k"onnte +% zu einem sp"ateren Zeitpunkt implementiert werden). Die erste Task wird +% hier gezeichnet, weitere Tasks werden mit dem Makro \cs{task} +% gezeichnet. % +% \else% +% \item Draw the several parallel tasks (the tasks may consist of several +% actions each, if that's the case, they must be divided by horizontal +% lines, but that isn't implemented for now). The first task is drawn +% here, further tasks are drawn by the command \cs{task}. % +% \fi% +% \begin{macrocode} +\begingroup +\y@nss=\yy@nss% +\dbgCoord@nss[Ursprung Task 1]{\x@nss}{\y@nss} +\set@nss{#2}{\tempx@nss}% +\dbgCount@nss[optionale Hoehe der Task]{\tempyy@nss} +\block@nss{\tempyy@nss}{0}% +\tempyy@nss=\TextBoxHt@nss% +\dbgCount@nss[Hoehe der Task]{\tempyy@nss} +% \end{macrocode} +% \end{enumerate} +% \begin{macrocode} +} +% \end{macrocode} +% \end{macro} +% \ifnum\language=\languageNGerman% +% Und nun zur Implementation von \cs{inparallelend}: nach ein paar +% Initialisierungsschritten \ldots{} % +% \else% +% And now for the implementation of \cs{inparallelend}: after some +% initialization steps \ldots{} % +% \fi% +% \changes{v074}{10/06/08}{corrected the calculation of the surrounding box} +% \changes{v061}{10/05/31}{added some documentation} +% \begin{macrocode} +\def\inparallelend{% + \dbgString@nss{Beginn \string\@inparallelend} + \dbgCoord@nss[Endkoordinate]{\x@nss}{\y@nss} + \global\tempy@nss=\y@nss% + \global\tempyy@nss=\tempyy@nss% + \endgroup +% \end{macrocode} +% \ifnum\language=\languageNGerman% +% \ldots{} m"ussen +% \begin{enumerate} +% \item die senkrechten Linien gezeichnet werden, um die einzelnen Tasks +% sichtbar abzugrenzen (die Linien m"ussen so lang wie die "`l"angste"' Task +% sein): die linke x-Koordinate des Kastens ist \cs{x@nss}, die rechte +% \cs{xx@nss}, die Gesamtbreite wird auf \#4 -- in +% \cs{inparallel} gesetzt --Tasks aufgeteilt, somit ist die Breite +% zwischen zwei Linien \cs{xsize@nss}. +% Es gibt \(\#4-1\) Linien, damit beginnt die Schleife zum Zeichnen der +% Linien an der Position +% \(\cs{x@nss}+\cs{xsize@nss}\) und sie endet an der Position +% \(\cs{xx@nss}-\frac{\cs{xsize@nss}}{2}\) um Rundungsfehler zu vermeiden. % +% \else% +% \ldots{} we have to +% \begin{enumerate} +% \item draw the vertical lines to divide the several tasks visual (the +% lines must be as long as the "longest"{} sequence of actions): the +% block's left side is given by \cs{x@nss}, it's right side by +% \cs{xx@nss}, it is divided into \#4 parts---used in +% \cs{inparallel}---so the width between the lines is \cs{xsize@nss}. +% There must be \(\#4-1\) lines, so the loop starts at +% \(\cs{x@nss}+\cs{xsize@nss}\) and it ends at +% \(\cs{xx@nss}-\frac{\cs{xsize@nss}}{2}\) to avoid rounding errors. % +% \fi% +% \begin{macrocode} +\begingroup% +\dbgCoord@nss[left and right limits]{\x@nss}{\xx@nss} +\dbgCount@nss[step size]{\xsize@nss} +\tempx@nss=\xsize@nss% +\divide\tempx@nss by 2% +\advance\xx@nss by -\tempx@nss% +\tempx@nss=\x@nss% +\loop% +\dbgString@nss{draw vertical line} +\advance\tempx@nss by \xsize@nss% +\dbgCoord@nss[Ursprung]{\tempx@nss}{\tempy@nss} +\dbgCount@nss[Laenge]{\tempyy@nss} +\put(\tempx@nss,\tempy@nss){\line(0,1){\tempyy@nss}}% +\tempxx@nss=\tempx@nss% +\advance\tempxx@nss by \xsize@nss% +\dbgCount@nss[loop control]{\tempxx@nss} +\dbgCount@nss[compare to]{\xx@nss} +\ifnum \tempxx@nss<\xx@nss% +\repeat +\endgroup +% \end{macrocode} +% \item % +% \ifnum\language=\languageNGerman% +% Zeichnen der gestrichelten Linien am Ende des Kastens, \else% +% draw the two dashed lines at the bottom, % +% \fi % +% \begin{macrocode} +\dbgCoord@nss[draw bottom, origin]{\x@nss}{\tempy@nss} +\multiput(\x@nss,\tempy@nss)(3000, 0){\tempxx@nss}{\line(1,0){1500}}% +\advance\tempy@nss by -2000% +\multiput(\x@nss,\tempy@nss)(3000, 0){\tempxx@nss}{\line(1,0){1500}}% +% \end{macrocode} +% \item % +% \ifnum\language=\languageNGerman% +% Zeichnen eines Kastens um alle zuvor gezeichneten Elemente. % +% \else % +% draw a box around all the previous drawn elements. \fi % +% \end{enumerate} +% \begin{macrocode} +\advance\tempy@nss by -2000% +\dbgCount@nss{\tempyy@nss} +\advance\tempyy@nss by 8000% +\advance\xx@nss by -\x@nss% +\dbgCoord@nss[Breite, Hoehe]{\xx@nss}{\tempyy@nss} +\put(\x@nss,\tempy@nss){\framebox(\xx@nss,\tempyy@nss){}}% +% \end{macrocode} +% \ifnum\language=\languageNGerman% +% In einem letzten Schritt werden \cs{y@nss} und \cs{xsize@nss} in den +% global genutzten Registern abgelegt: % +% \else% +% In a last step \cs{y@nss} and \cs{xsize@nss} are stored into the +% registers which are used globally: % +% \fi% +% \begin{macrocode} +\xsize@nss=\xx@nss% +\y@nss=\tempy@nss% +\dbgCoord@nss[Endkoordinate inparallel]{\x@nss}{\y@nss} +\dbgCount@nss[Breite]{\xsize@nss} +\dbgString@nss{Ende \string\@inparallelend} +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\task} +% \changes{v061}{10/05/31}{implemented the macro} +% \changes{v-9.1}{10/01/17}{added} +% \ifnum\language=\languageNGerman% +% Der Makro \cs{task} definiert die parallelen +% Tasks, er hat zwei Parameter: +% \begin{enumerate} +% \item die optionale H"ohe der Task (dies kann die optionale H"ohe des +% umgebenden Blocks "uberschreiben) +% \item die Beschreibung der Task +% \end{enumerate} +% \else% +% \cs{task} defines the parallel tasks, it has two parameters: +% \begin{enumerate} +% \item the optional height of the task (this may overwrite the +% optional height of the surrounding block) +% \item the description of the task +% \end{enumerate} +% \fi% +% \begin{macrocode} +\def\task{\let\next=\@task\getoption} +\def\@task#1{% + \dbgString@nss{Beginn \string\@task} + \advance\x@nss by \xsize@nss% + \y@nss=\yy@nss% + \dbgCoord@nss[Ursprung parallele Task]{\x@nss}{\y@nss} + \set@nss{#1}{\tempx@nss}% + \ifnum\number\param@nss000>\tempyy@nss% + \tempyy@nss=\number\param@nss000% + \fi% + \dbgCount@nss[Hoehe parallele Task]{\tempyy@nss} + \block@nss{\tempyy@nss}{0}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\centerNss} +% \begin{macro}{\endcenterNss} +% \changes{v-4.5d}{97/03/19}{`CenterBox@nss global gemacht} +% \changes{v-3.3e}{94/09/09}{`centerline durch `strut`hfill ... ersetzt} +% \changes{v-3.3e}{94/09/09}{`TmpBox umbenannt in `nss@CenterBox} +% \changes{v-3.1a}{94/09/09}{aus \textsf{JHfMakro.STY} "ubernommen} +% \changes{v-3.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{v-4.5d}{97/03/19}{Belegen von `CenterBox@nss in das `item verlegt} +% \changes{v-3.3e}{94/09/09}{`centerline durch `strut`hfill ... ersetzt} +% \changes{v-3.3e}{94/09/09}{Auf zus"atzliche Gruppe um `trivlist verzichtet} +% \changes{v-3.3e}{94/09/09}{`TmpBox umbenannt in `nss@CenterBox} +% \changes{v-3.1a}{94/09/09}{aus \textsf{JHfMakro.STY} "ubernommen} +% \changes{v-3.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} +% +% \begin{macro}{\assert} +% \changes{v-7.0a}{04/01/04}{neu eingef"uhrt} +% \begin{macro}{\assert@nss} +% \changes{v-7.0a}{04/01/04}{neu eingef"uhrt} +% \ifnum\language=\languageNGerman% +% \cs{assert} wird wie \cs{assign} definiert, f"uhrt ohne die Option +% |verification| aber nicht zu sichtbaren Ergebnissen: +% \else% +% \cs{assert} is defined just like \cs{assign}:% +% \fi% +% \begin{macrocode} + \newcommand\assert{\let\next=\assert@nss\getoption}% + \newcommand\assert@nss[1]{}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \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{v-7.0a}{04/01/05}{neu eingef"uhrt} +% \begin{macro}{\ydeptho@nss} +% \changes{v-7.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} +% +% \ifnum\language=\languageNGerman% +% F"ur den Fall, dass die Option |verification| gesetzt wurde, wird der +% intern genutzte Makro \cs{assert@nss} neu definiert. +% \else% +% \fi +% \begin{macrocode} + \renewcommand{\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} +%% +% \begin{macro}{\assertblock@nss} +% \changes{v-7.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 +% {\selectlanguage{ngerman}\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: docTeX +% ^^A TeX-PDF-mode: t +% ^^A TeX-master: t +% ^^A mode: flyspell +% ^^A ispell-local-dictionary: "deutsch8" +% ^^A End: -- cgit v1.2.3