summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/koma-script/doc/scrguide.cls
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/koma-script/doc/scrguide.cls')
-rw-r--r--Master/texmf-dist/source/latex/koma-script/doc/scrguide.cls1440
1 files changed, 1440 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/koma-script/doc/scrguide.cls b/Master/texmf-dist/source/latex/koma-script/doc/scrguide.cls
new file mode 100644
index 00000000000..29ffc81aded
--- /dev/null
+++ b/Master/texmf-dist/source/latex/koma-script/doc/scrguide.cls
@@ -0,0 +1,1440 @@
+% ======================================================================
+% scrguide.cls
+% Copyright (C) 2005-2006 Markus Kohm
+%
+% This file is part of the LaTeX2e KOMA-Script bundle.
+%
+% This work may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, version 1.3b of the license.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3b or later is part of all distributions of LaTeX
+% version 2005/12/01 or later and of this work.
+%
+% This work has the LPPL maintenance status "author-maintained".
+%
+% The Current Maintainer and author of this work is Markus Kohm.
+%
+% This work consists of all files listed in manifest.txt.
+% ----------------------------------------------------------------------
+% scrguide.cls
+% Copyright (C) 2005-2006 Markus Kohm
+%
+% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz,
+% Version 1.3b, verteilt und/oder veraendert werden.
+% Die neuste Version dieser Lizenz ist
+% http://www.latex-project.org/lppl.txt
+% und Version 1.3b ist Teil aller Verteilungen von LaTeX
+% Version 2005/12/01 oder spaeter und dieses Werks.
+%
+% Dieses Werk hat den LPPL-Verwaltungs-Status "author-maintained"
+% (allein durch den Autor verwaltet).
+%
+% Der Aktuelle Verwalter und Autor dieses Werkes ist Markus Kohm.
+%
+% Dieses Werk besteht aus den in manifest.txt aufgefuehrten Dateien.
+% ======================================================================
+%
+% \section{Identification}
+%
+% \begin{macrocode}
+\ProvidesClass{scrguide}[2006/07/01 v0.9a internal KOMA-Script guide class]
+% \end{macrocode}
+%
+%
+% \section{Options on my own}
+%
+% This class also has options.
+%
+% \begin{option}{pagereftolabel}
+% |\autopageref| should reference the label not the page.
+% \begin{option}{pagereftopage}
+% |\autopageref| should reference the page not the label.
+% \begin{macro}{\if@pagereftolabel}
+% \begin{macrocode}
+\newif\if@pagereftolabel\@pagereftolabeltrue
+\DeclareOption{pagereftolabel}{\@pagereftolabeltrue}
+\DeclareOption{pagereftopage}{\@pagereftolabelfalse}
+% \end{macrocode}
+% \end{macro}
+% \end{option}
+% \end{option}
+%
+% \begin{option}{moreindexnotes}
+% Show more notes at the index.
+% \begin{option}{lessindexnotes}
+% Show less notes at the index.
+% \begin{macro}{\if@moreindexnotes}
+% \begin{macrocode}
+\newif\if@moreindexnotes\@moreindexnotesfalse
+\DeclareOption{moreindexnotes}{\@moreindexnotestrue}
+\DeclareOption{lessindexnotes}{\@moreindexnotesfalse}
+% \end{macrocode}
+% \end{macro}
+% \end{option}
+% \end{option}
+%
+% Note: You have to pass options to class \textsf{scrguide}, because only
+% these options will be processed by |\LoadClassWithOptions| below.
+% \begin{macrocode}
+\ExecuteOptions{pagereftolabel,lessindexnotes}
+\PassOptionsToClass{bibtotoc,idxtotoc,tablecaptionabove}{scrguide}
+\ProcessOptions\relax
+% \end{macrocode}
+%
+%
+% \section{Load the Base Class and Packages}
+%
+% NOTE: I use \texttt{latin1} instead of the prefered \texttt{utf8} because of
+% problems of package \textsf{listings}.
+% \begin{macrocode}
+\LoadClassWithOptions{scrbook}
+\RequirePackage[latin1]{inputenc}
+\RequirePackage[TS1,T1]{fontenc}
+\RequirePackage{babel}
+\RequirePackage[fixlanguage]{babelbib}
+\RequirePackage{makeidx}
+\RequirePackage{scrdate}
+\RequirePackage{scrtime}
+\RequirePackage{graphicx}
+\RequirePackage{booktabs}
+\RequirePackage{longtable}
+\RequirePackage{amsmath}
+\RequirePackage{listings}
+\RequirePackage{multicol}
+\RequirePackage{hyperref}
+% \end{macrocode}
+%
+%
+% \section{Free or Non-Free Version}
+%
+% \begin{macrocode}
+\AtEndOfClass{%
+ \InputIfFileExists{scrnonfree.tex}{}{%
+ \typeout{^^J
+ ----------------------------------------------------------------------^^J
+ FREE VERSION OF THE KOMA-SCRIPT GUIDE.^^J
+ NOTE THAT THIS VERSION MAY BE FULL OF UGLY PARAGRAPH AND PAGE BREAKS.^^J
+ THIS IS BECAUSE THIS VERSION OF THE KOMA-SCRIPT GUIDE IS UNDER^^J
+ CONSTRUCTION FOREVER.^^J
+ ----------------------------------------------------------------------^^J
+ ^^J%
+ }%
+ \newcommand*{\iffree}{\@firstoftwo}%
+ \usepackage{lmodern}%
+ \@twosidefalse\@openrightfalse
+ \RequirePackage{geometry}%
+ \geometry{papersize={140mm,210mm},%
+ includehead,includemp,reversemp,marginparwidth=2em,%
+ vmargin={2mm,4mm},hmargin=2mm}%
+ \RequirePackage{xcolor}%
+ \RequirePackage{scrpage2}%
+ \clearscrheadfoot
+ \ohead{\rule[-\dp\strutbox]{0pt}{\headheight}\headmark\hspace{2mm}}%
+ \ihead[{\colorbox{yellow!50}{\makebox[\linewidth][l]{%
+ \rule[-\dp\strutbox]{0pt}{\headheight}%
+ \makebox[2em][r]\pagemark}}}]%
+ {\colorbox{yellow!50}{\makebox[\linewidth][l]{%
+ \rule[-\dp\strutbox]{0pt}{\headheight}%
+ \makebox[2em][r]\pagemark}}}%
+ \renewcommand*{\headfont}{\normalfont\sffamily}%
+ \setkomafont{pagenumber}{}%
+ \renewcommand*{\chaptermark}[1]{%
+ \markboth\chaptermarkformat\chaptermarkformat}%
+ \renewcommand*{\chaptermarkformat}{\chapapp~\thechapter\autodot}%
+ \renewcommand*{\chapterformat}{}%
+ \renewcommand*{\chapterpagestyle}{scrheadings}%
+ \setlength{\@tempdimc}{\oddsidemargin}%
+ \addtolength{\@tempdimc}{1in}%
+ \setheadwidth[-\@tempdimc]{paper}%
+ \pagestyle{scrheadings}%
+ \hypersetup{colorlinks}%
+ \let\orig@maketitle\maketitle
+ \def\maketitle{%
+ \begingroup
+ \@twosidetrue
+ \let\cleardoublepage\clearpage
+ \addtolength{\oddsidemargin}{\evensidemargin}%
+ \setlength{\evensidemargin}{.5\oddsidemargin}%
+ \setlength{\oddsidemargin}{\evensidemargin}%
+ \orig@maketitle\relax
+ \endgroup
+ }%
+ \renewcommand*{\chapterheadstartvskip}{}%
+ \raggedbottom
+ \sloppy
+ \lstset{breaklines,prebreak=\mbox{$\hookleftarrow$}}%
+ }%
+}
+% \end{macrocode}
+%
+% Now loading the last package (better do it late than never):
+% \begin{macrocode}
+\RequirePackage{textcomp}
+% \end{macrocode}
+%
+%
+% \section{Language Dependencies}
+%
+% We load the language dependency file at |\begin{document}| and add some
+% of the extensions to the language.
+% \begin{macrocode}
+\AtBeginDocument{%
+ \InputIfFileExists{\jobname-\languagename.tex}{%
+ \ClassInfo{scrguide}{Loading language dependencies for \languagename}%
+ }{%
+ \ClassError{scrguide}{\languagename\space not supported}{%
+ You've tried to generate a guide for language `\languagename' but
+ language\MessageBreak
+ dependency file `\jobname-\language.tex' was not found.\MessageBreak
+ This may result in a lot of errors and warnings, if you'll continue}%
+ }%
+ \expandafter\addto\csname extras\languagename\endcsname
+ \GuideLanguageExtensions\GuideLanguageExtensions
+}
+% \end{macrocode}
+%
+%
+% \section{Breaking of Paragraphs and Pages}
+%
+% There are several parameters to configure the breaking. I've tried to find
+% good values. First of all the placement of floats and text.
+% \begin{macrocode}
+\renewcommand*{\floatpagefraction}{.75}% was .6
+\renewcommand*{\textfraction}{.2}% original
+\renewcommand*{\topfraction}{.75}% was .7
+\renewcommand*{\bottomfraction}{.33}% was .3
+\setcounter{topnumber}{1}% was 2
+\setcounter{bottomnumber}{1}% original
+\setcounter{totalnumber}{3}% original
+% \end{macrocode}
+%
+%
+% \section{Find the Date of the Newest Documentation File}
+%
+% \begin{macro}{\newestfiledate}
+% The latex date of the newest used file.
+% \begin{macrocode}
+\newcommand*{\newestfiledate}{0001-01-01}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@notonlypreamble}
+% Remove commands from to be \@onlypreamble commands.
+% \begin{macrocode}
+\newcommand*{\@notonlypreamble}[1]{%
+ \begingroup
+ \let\new@preamblecmds\@empty%
+ \def\do##1{\ifx ##1#1\else
+ \expandafter\def\expandafter\new@preamblecmds\expandafter{%
+ \new@preamblecmds\do##1}\fi}%
+ \@preamblecmds
+ \global\let\@preamblecmds\new@preamblecmds
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@ifl@t@r}
+% Not longer a |\@onlypreamble| command.
+% \begin{macrocode}
+\@notonlypreamble\@ifl@t@r
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@parse@version}
+% Not longer a |\@onlypreamble| command.
+% \begin{macrocode}
+\@notonlypreamble\@parse@version
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@latex@version}
+% Like |\@parse@version| but returns a \LaTeX{} date.
+% \begin{macrocode}
+\newcommand*{\@latex@version}{}
+\def\@latex@version#1/#2/#3#4#5\@nil{#1/#2/#3#4}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@iso@version}
+% Like |\@parse@version| but returns an iso date.
+% \begin{macrocode}
+\newcommand*{\@iso@version}{}
+\def\@iso@version#1/#2/#3#4#5\@nil{#1-#2-#3#4}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\IsoDate}
+% Converts \LaTeX{} date #1 into an iso date.
+% \begin{macrocode}
+\newcommand*{\IsoDate}[1]{\expandafter\@iso@version#1//00\@nil}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@CheckDate}
+% Check if the provided date of file #1.tex is newer than
+% \@newestfiledate. If so, write the new date to the aux file.
+% \begin{macrocode}
+\newcommand*{\@CheckDate}[1]{%
+ \begingroup
+ \expandafter\ifx\csname ver@#1.tex\endcsname\relax\else
+ \typeout{\csname ver@#1.tex\endcsname}%
+ \expandafter\@ifl@t@r\csname ver@#1.tex\endcsname\newestfiledate{%
+ \xdef\newestfiledate{%
+ \expandafter\expandafter\expandafter\@latex@version
+ \csname ver@#1.tex\endcsname//00\@nil%
+ }%
+ \write\@auxout{\noexpand\gdef\noexpand\newestfiledate{%
+ \newestfiledate}\@percentchar\space #1.tex}%
+ }{}%
+ \fi
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Check the date of the jobfile:
+% \begin{macrocode}
+\@CheckDate\jobname
+% \end{macrocode}
+%
+% \begin{macro}{\@providesfile}
+% \begin{macro}{\SCR@providesfile}
+% Redefine |\ProvidesFile| to also check the date.
+% \begin{macrocode}
+\newcommand*{\SCR@providesfile}{}
+\AtBeginDocument{%
+ \let\SCR@providesfile\@providesfile
+ \def\@providesfile#1[#2]{%
+ \SCR@providesfile#1[#2]%
+ \expandafter\@CheckDate\expandafter{\expandafter\@BaseFileName#1.\@nil}%
+ }%
+}
+% \end{macrocode}
+% \begin{macro}{\@BaseFileName}
+% Split of extension of the file name.
+% \begin{macrocode}
+\newcommand*{\@BaseFileName}{}
+\def\@BaseFileName#1.#2\@nil{#1}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% Predefine current date:
+% \begin{macrocode}
+\AtBeginDocument{\date{\IsoDate\newestfiledate}}
+% \end{macrocode}
+%
+%
+% \section{Emphasization and Fonts}
+%
+% The \KOMAScript{} guide uses a lot of emphasizations. Most of them are
+% declared robustly to avoid problems at index, change log etc.
+%
+% \begin{macro}{\textsfrm}
+% Something like |\emph| using |\textsf| and |\textrm| instead of |\textit|
+% and |\textup|.
+% \begin{macrocode}
+\newcommand*{\textsfrm}[1]{%
+ \begingroup
+ \edef\@tempa{\sfdefault}%
+ \ifx\@tempa\f@family\textrm{#1}\else\textsf{#1}\fi
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\File}
+% \begin{macro}{\Class}
+% \begin{macro}{\Package}
+% Some markup macros for files with special meanings.
+\DeclareRobustCommand*{\File}[1]{\texttt{#1}}
+\DeclareRobustCommand*{\Class}[1]{\textsfrm{#1}}
+\DeclareRobustCommand*{\Package}[1]{\textsfrm{#1}}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Macro}
+% \begin{macro}{\Option}
+% \begin{macro}{\Environment}
+% \begin{macro}{\Counter}
+% \begin{macro}{\Length}
+% \begin{macro}{\PLength}
+% \begin{macro}{\FloatStyle}
+% \begin{macro}{\Pagestyle}
+% \begin{macro}{\Variable}
+% \begin{macro}{\FontElement}
+% \begin{macro}{\PName}
+% \begin{macro}{\PValue}
+% \begin{macro}{\Parameter}
+% \begin{macro}{\OParameter}
+% \begin{macro}{\AParameter}
+% \begin{macro}{\PParameter}
+% \begin{description}
+% \item[\cs{Macro}] \LaTeX{} or \TeX{} macro
+% \item[\cs{Option}] class or package option
+% \item[\cs{Environment}] \LaTeX{} environment
+% \item[\cs{Counter}] \LaTeX{} counter
+% \item[\cs{Length}] \LaTeX{} length
+% \item[\cs{PLength}] \KOMAScript{} pseudo length
+% \item[\cs{Variable}] \KOMAScript{} variable
+% \item[\cs{FontElement}] \KOMAScript{} element that has its own font
+% selection
+% \item[\cs{PName}] name of a parameter of a macro or environment
+% \item[\cs{PValue}] value of a parameter of a macro or environment
+% \item[\cs{Parameter}] the mandatory parameter of a macro or environment
+% \item[\cs{OParameter}] the optional parameter of a macro or environment
+% \item[\cs{AParameter}] the alternativ parameter of a macro or environment
+% \item[\cs{PParameter}] the part-of-command parameter of a macro or
+% environment
+% \end{description}
+% \begin{macrocode}
+\DeclareRobustCommand*{\Macro}[1]{\mbox{\texttt{\char`\\#1}}}
+\DeclareRobustCommand*{\Option}[1]{\mbox{\texttt{#1}}}
+\DeclareRobustCommand*{\FloatStyle}[1]{\mbox{\texttt{#1}}}
+\DeclareRobustCommand*{\Pagestyle}[1]{\mbox{\texttt{#1}}}
+\DeclareRobustCommand*{\Environment}[1]{\mbox{\texttt{#1}}}
+\DeclareRobustCommand*{\Counter}[1]{\mbox{\texttt{#1}}}
+\DeclareRobustCommand*{\Length}[1]{\mbox{\texttt{\char`\\#1}}}
+\DeclareRobustCommand*{\PLength}[1]{\mbox{\PValue{#1}}}
+\DeclareRobustCommand*{\Variable}[1]{\mbox{\PValue{#1}}}
+\DeclareRobustCommand*{\FontElement}[1]{\PValue{#1}}
+\DeclareRobustCommand*{\PName}[1]{\texttt{\textit{#1}}}
+\DeclareRobustCommand*{\PValue}[1]{\texttt{#1}}
+\DeclareRobustCommand*{\Parameter}[1]{\texttt{\{}\PName{#1}\texttt{\}}}
+\DeclareRobustCommand*{\OParameter}[1]{%
+ \texttt{[%]
+ }\PName{#1}\texttt{%[
+ ]}}
+\DeclareRobustCommand*{\AParameter}[1]{%
+ \texttt{(%)
+ }\PName{#1}\texttt{%(
+ )}}
+\DeclareRobustCommand*{\PParameter}[1]{\texttt{\{#1\}}}
+% \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}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\EMail}
+% An email adress.
+% \begin{macrocode}
+\DeclareRobustCommand*{\EMail}[1]{\textless #1\textgreater}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TextEMail}
+% EMail address at the text.
+% \begin{macrocode}
+\DeclareRobustCommand*{\TextEMail}[1]{{\small\EMail{#1}}}
+% \end{macrocode}
+% \end{macro}
+%
+% Setup fonts for table and figure captions:
+% \begin{macrocode}
+\setkomafont{caption}{\normalcolor\small}
+% \end{macrocode}
+%
+%
+% \section{Math}
+%
+% I will not use real math. But there will be some »pseudo math code«. So I
+% need some macros for this.
+%
+% \begin{macro}{\Var}
+% Variables (in real math simply |$a$| will be |\Var{a}| in my math:
+% \begin{macrocode}
+\newcommand*{\Var}[1]{\ensuremath{\textit{#1}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Unit}
+% The unit of a length.
+% \begin{macrocode}
+\newcommand*{\Unit}[1]{\,\ifmmode \textrm{#1}\else #1\fi}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{Acronyms}
+%
+% \begin{macro}{\Script}
+% \begin{macro}{\ScriptII}
+% \begin{macrocode}
+\DeclareRobustCommand{\Script}{\Package{Script}}
+\DeclareRobustCommand{\ScriptII}{\Package{Script-2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\eTeX}
+% This may already be defined.
+% \begin{macrocode}
+\providecommand*{\eTeX}{\ensuremath{\varepsilon}-\TeX}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{Identification}
+%
+% \begin{macro}{\labelbase}
+% \begin{macrocode}
+\newcommand*{\labelbase}[1]{%
+ \renewcommand*{\label@base}{#1}%
+ \label{cha:#1}%
+}
+% \end{macrocode}
+% \begin{macro}{\label@base}
+% \begin{macrocode}
+\newcommand*{\label@base}{unknown}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \section{Special Environments}
+%
+% \begin{environment}{Declaration}
+% Declaration of macros, environments, options, lengths, counters, pseudo
+% length, variables etc.\footnote{TODO: Redefining most declaration commands
+% to also write labels.}
+% \begin{macrocode}
+\newenvironment{Declaration}{%
+% \end{macrocode}
+% \begin{macro}{\new@element}
+% Help macro to define new Declaration elements.
+% \begin{macrocode}
+ \newcommand*{\new@element}[1]{%
+ \expandafter\newcommand\expandafter*\csname X##1\endcsname{}%
+ \expandafter\let\csname X##1\expandafter\endcsname
+ \csname ##1\endcsname
+ \expandafter\newcommand\expandafter*\csname new##1\endcsname[1]{%
+ \begingroup
+ \let\ensuremath\@firstofone
+ \let\textit\@firstofone
+ \lowercase{\def\@tempa{##1}}%
+ \pdfstringdef\@tempb{\label@base.\@tempa.####1}%
+ \xdef\@currentHref{\@tempb}%
+ \Hy@raisedlink{\hyper@anchorstart{\@currentHref}\hyper@anchorend}%
+ \label{desc:\label@base.\@tempa.####1}%
+ \endgroup
+ \csname X##1\endcsname{####1}\ignorespaces
+ }%
+ \expandafter\let\csname ##1\expandafter\endcsname\csname new##1\endcsname
+ }%
+% \end{macrocode}
+% \begin{macro}{\newOption}
+% \begin{macro}{\newMacro}
+% \begin{macrocode}
+ \new@element{Option}%
+ \new@element{Macro}%
+ \new@element{Environment}%
+ \new@element{Counter}%
+ \new@element{FloatStyle}%
+ \new@element{PLength}%
+ \new@element{Variable}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macrocode}
+ \par\small\addvspace{2\baselineskip plus .5\baselineskip}%
+ \vspace{-\baselineskip}%
+ \noindent\hspace{-1em}%
+ \tabular{|l|}\hline\ignorespaces
+}{%
+ \\\hline\endtabular\nobreak\par\nobreak
+ \vspace{1.5\baselineskip}\vspace{-\baselineskip}%
+ \vspace{0pt minus .5\baselineskip}%
+ \noindent\ignorespacesafterend
+}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{Example}
+% This environment is used for all examples at the \KOMAScript{} guide.
+% \begin{macrocode}
+\newenvironment{Example}{%
+ \labeling{{\usekomafont{sectioning}\GuideExample:\ }}
+ \item[{\usekomafont{sectioning}\GuideExample:\ }]%
+}{%
+ \endlabeling
+}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{ShowOutput}
+% This environment is used for the output of examples. It shows the middle
+% part of a page\footnote{TODO: optional arguments for printing a top or
+% bottom part of a page}. It uses |\scalebox| so you should never use a
+% DVI preview or a raw DVI printing.
+% \begin{macrocode}
+\newsavebox\ShowOutputBox
+\newenvironment{ShowOutput}[1][0pt]{\par
+ \begin{lrbox}{\ShowOutputBox}%
+ \minipage{.9\linewidth}%
+ \vspace*{\baselineskip}\vspace{-#1}%
+}{%
+ \endminipage
+ \end{lrbox}%
+ \setlength{\unitlength}{1pt}%
+ \setlength{\@tempdima}{\ht\ShowOutputBox}%
+ \addtolength{\@tempdima}{\dp\ShowOutputBox}%
+ \setlength{\@tempdima}{.75\@tempdima}%
+ \edef\MidY{\strip@pt\@tempdima}%
+ \addtolength{\@tempdima}{5pt}%
+ \edef\HighY{\strip@pt\@tempdima}%
+ \addtolength{\@tempdima}{-10pt}%
+ \edef\LowY{\strip@pt\@tempdima}%
+ \addtolength{\@tempdima}{5pt}%
+ \setlength{\@tempdima}{.9\linewidth}\edef\QuadIV{\strip@pt\@tempdima}%
+ \setlength{\@tempdima}{.675\linewidth}\edef\QuadIII{\strip@pt\@tempdima}%
+ \setlength{\@tempdima}{.45\linewidth}\edef\QuadII{\strip@pt\@tempdima}%
+ \setlength{\@tempdima}{.225\linewidth}\edef\QuadI{\strip@pt\@tempdima}%
+ \centering
+ \begin{picture}(\QuadIV,\MidY)
+ \qbezier(0,\MidY)(\QuadI,\HighY)(\QuadII,\MidY)%
+ \qbezier(\QuadII,\MidY)(\QuadIII,\LowY)(\QuadIV,\MidY)
+ \put(0,0){\makebox(\QuadIV,\MidY)[c]{%
+ \scalebox{.75}{\usebox{\ShowOutputBox}}%
+ }%
+ }%
+ \put(0,-5){\line(0,1){\HighY}}%
+ \put(\QuadIV,-5){\line(0,1){\HighY}}%
+ \qbezier(0,-5)(\QuadI,0)(\QuadII,-5)%
+ \qbezier(\QuadII,-5)(\QuadIII,-10)(\QuadIV,-5)
+ \end{picture}\par
+ \vspace{1ex plus 1ex minus .5ex}%
+}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{Explain}
+% Some parts of the documentation are importing for understanding
+% \KOMAScript{} but not important for using \KOMAScript.
+% \begin{macrocode}
+\newenvironment{Explain}{%
+ \par\sffamily
+}{%
+ \normalcolor\par
+}
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsection{Used by Jens-Uwe only}
+%
+% There are some example visualizations used only by Jens-Uwe.\footnote{TODO:
+% All these should be merged with \texttt{ShowOutputBox}.}
+%
+% \begin{environment}{XmpTopPage}
+% Output of the top of a page.
+% \begin{macrocode}
+\newenvironment{XmpTopPage}
+ {\begin{center}\setlength{\unitlength}{1mm}\begin{picture}(100,39)%
+ \thinlines
+ \qbezier(0,5)(25,7)(50,5)\qbezier(50,5)(75,3)(100,5)
+ \put(0,5){\line(0,1){34}}
+ \thicklines
+ \put(100,5){\line(0,1){34}}\put(0,39){\line(1,0){100}}
+ \small}{\end{picture}\end{center}\vspace{-1.5\baselineskip}}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{XmpBotPage}
+% Output of the bottom of a page.
+% \begin{macrocode}
+\newenvironment{XmpBotPage}
+ {\begin{center}\setlength{\unitlength}{1mm}\begin{picture}(100,40)%
+ \thinlines
+ \qbezier(0,38)(25,40)(50,38)\qbezier(50,38)(75,36)(100,38)
+ \put(0,5){\line(0,1){33}}
+ \thicklines
+ \put(100,5){\line(0,1){33}}\put(0,5){\line(1,0){100}}
+ \small}{\end{picture}\end{center}\vspace{-1.5\baselineskip}}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\XmpSetText}
+% Output some text at \texttt{XmpTopPage} or \texttt{XmpBotPage}.
+% \begin{macrocode}
+\newcommand{\XmpSetText}[2][\XmpText]{%
+ \put(#2){\makebox(0,0)[tl]{\parbox{70mm}{#1}}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\XmpMarginNote}
+% Output a margin note at \texttt{XmpTopPage} or \texttt{XmpBotPage}.
+% \begin{macrocode}
+\newcommand{\XmpMarginNote}[1]{%
+ \put(#1){\makebox(0,5)[tl]{\scriptsize\XmpMarginTextA}}
+ \put(#1){\makebox(0,5)[bl]{\scriptsize\XmpMarginTextB}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\XmpRule}
+% Output a horizonal rule at a \texttt{XmpTopPage} or \texttt{XmpBotPage}.
+% \begin{macrocode}
+\newcommand{\XmpRule}[2]{\put(#1){\line(1,0){#2}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\XmpHeading}
+% Output a head line at a \texttt{XmpTopPage} or \texttt{XmpBotPage}.
+% \begin{macrocode}
+\newcommand{\XmpHeading}[3][\KOMAScript\hfill 3]{%
+ \put(#2){\makebox(#3,0)[l]{#1}}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{Margin Notes}
+%
+% \begin{macro}{\OnlyAt}
+% Some things are not available at every \KOMAScript{} class. To show the
+% differences we'll put a margin note. If more than one class or package
+% should be noted, |\and| will be used to separate them.
+% \begin{macrocode}
+\newcommand*{\OnlyAt}[1]{%
+ \marginline{\def\and{,\\}\footnotesize #1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{Change Log}
+%
+% Not all features are part of every old \KOMAScript{} release. New features
+% will be marked and these marks are referenced at a kind of index.
+%
+% \begin{macro}{\ChangedAt}
+% Set the margin note and write an entry to the change log.\footnote{TODO:
+% Don't use the glossary, use a file by my own.}
+% \begin{macrocode}
+\providecommand*{\ChangedAt}[2]{%
+ \marginline{\footnotesize\fbox{\strut#1}}%
+ \glossary{#2>#1|indexrm}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% While I currently use the glossary, we have to make it:
+% \begin{macrocode}
+\makeglossary
+% \end{macrocode}
+%
+% \begin{macro}{\printchangelog}
+% We don't want to generate the change log only. We also have to print it.
+% \begin{macrocode}
+\newcommand*{\printchangelog}{\@input@{\jobname.chn}}
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{thechangelog}
+% And this will be used at the \texttt{chn} file. The change log index will
+% always generate an entry to the table of contents.
+% \begin{macrocode}
+\newenvironment{thechangelog}{%
+ \setchapterpreamble{\GuideChangeLogPreamble\par\bigskip}%
+ \addchap{\changelogname}%
+ \markboth{\changelogname}{\changelogname}%
+ \setlength{\parindent}{0pt}%
+ \setlength{\parskip}{0pt plus .3pt}%
+ \setlength{\parfillskip}{0pt plus 1fil}%
+ \def\and{,\ }%
+ \let\item\@idxitem
+}{%
+ \clearpage
+}
+% \end{macrocode}
+% The macros |\GuideChangeLogPreamble| and |\changelogname| have to be
+% defined at the language file.
+% \end{environment}
+%
+%
+% \section{Special Tabulars and Tables}
+%
+% I need some special tabulars and tables. These are used for describing
+% single topics.
+%
+% \begin{environment}{desctabular}
+% This kind of tabluar has primary one column but uses two columns in
+% declaration. It's something like a \texttt{description} environment with
+% line break after the item. I've used a \texttt{tabular} at the definition
+% because of full compatibitlity with \texttt{desctable}.
+% \begin{length}{\descwidth}
+% I need a length of local usage. I could have used |\@tempdima| or
+% another local length from kernel. But I've decided not to try to find a
+% unused length at \texttt{tabular} environment.
+% \begin{macrocode}
+\newlength{\descwidth}
+% \end{macrocode}
+% \end{length}
+% The definition of \texttt{desctabular} is very simple, because the main
+% work will be done by a \emph{worker} macro that will be defined later.
+% \begin{macrocode}
+\newenvironment{desctabular}[1][2em]{%
+ \start@desctab{#1}%
+ \tabular{lp{\descwidth}}
+ \toprule
+}{
+ \addlinespace[-.5\normalbaselineskip]\bottomrule
+ \endtabular
+}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{desctable}
+% This is almost the same like \texttt{desctabular} but it uses a longtable
+% to allow page breaks.
+% \begin{macrocode}
+\newenvironment{desctable}[1][2em]{%
+ \onelinecaptionsfalse
+ \start@desctab{#1}%
+ \newcommand{\Endfirsthead}{\toprule\endfirsthead}%
+ \newcommand{\Endhead}{\midrule\endhead}%
+ \newcommand*{\standardfoot}{%
+ \addlinespace[-.5\normalbaselineskip]\midrule
+ \multicolumn{2}{r@{}}{\dots}\\
+ \endfoot
+ \addlinespace[-.5\normalbaselineskip]\bottomrule
+ \endlastfoot
+ }%
+ \longtable{lp{\descwidth}}%
+}{%
+ \endlongtable
+}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\start@desctab}
+% This is the \emph{worker} macro of \texttt{desctable} and
+% \texttt{desctabular}. It does the complete calculations and definition of
+% the entry (something like |\item|) commands.
+% \begin{macrocode}
+\newcommand*{\start@desctab}[1]{%
+ \setlength{\descwidth}{\linewidth}%
+ \addtolength{\descwidth}{-4\tabcolsep}%
+ \addtolength{\descwidth}{-#1}%
+ \setlength{\labelwidth}{\linewidth}%
+ \addtolength{\labelwidth}{-2\tabcolsep}%
+ \newcommand{\nentry}[2]{%
+ \multicolumn{2}{p{\labelwidth}}{\raggedright##1}\\*%
+ \hspace*{#1} & ##2\tabularnewline%
+ }%
+ \newcommand{\entry}[2]{\nentry{##1}{##2}[.5\baselineskip]}%
+ \newcommand*{\pentry}[1]{%
+ \entry{\PLength{##1}\IndexPLength[indexmain]{##1}}}%
+ \newcommand*{\pventry}[1]{\entry{\PValue{##1}}}%
+ \newcommand*{\mentry}[1]{\entry{\Macro{##1}}}%
+ \newcommand*{\ventry}[1]{%
+ \entry{\Variable{##1}\IndexVariable[indexmain]{##1}}%
+ }%
+ \newcommand*{\feentry}[1]{%
+ \entry{\FontElement{##1}\IndexFontElement[indexmain]{##1}}%
+ }%
+}
+% \end{macro}
+%
+%
+% \section{Listings}
+%
+% Setup listings:
+% \begin{macrocode}
+\lstset{basicstyle=\ttfamily,%
+ aboveskip=.5\baselineskip,%
+ belowskip=.5\baselineskip,%
+ columns=fullflexible% fix for buggy version of LM fonts
+}
+% \end{macrocode}
+%
+%
+% \section{hyperref Addons}
+%
+% \begin{macro}{\KOMAScript}
+% \begin{macro}{\Guide@KOMAScript}
+% We need some additions to \textsf{hyperref}.
+% \begin{macrocode}
+\newcommand*{\Guide@KOMAScript}{}
+\expandafter\let\csname Guide@KOMAScript\expandafter\endcsname\csname
+KOMAScript \endcsname
+\DeclareRobustCommand*{\KOMAScript}{%
+ \texorpdfstring{\Guide@KOMAScript}{KOMA-Script}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\url@}
+% Redefine to make \texttt{CTAN://} be an alias for
+% \texttt{ftp://|\GuideCTANserver|/tex-archive/}.
+% \begin{macrocode}
+\def\url@#1{\expandafter\url@@#1\@nil}
+\def\url@@#1://#2\@nil{%
+ \def\@tempa{#1}\def\@tempb{CTAN}\ifx\@tempa\@tempb
+ \hyper@linkurl{\Hurl{#1://#2}}{ftp://\GuideCTANserver/tex-archive/#2}%
+ \else
+ \hyper@linkurl{\Hurl{#1://#2}}{#1://#2}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% We have to setup \textsf{hyperref}:
+% \begin{macrocode}
+\AtBeginDocument{%
+ \hypersetup{%
+ plainpages=false,
+ pdftitle={\GuideTitle},
+ pdfauthor={Markus Kohm, Jens-Uwe Morawski},
+ pdfsubject={\GuideSubject},
+ pdfkeywords={\KOMAScript, scrbook, scrreprt, scrartcl,
+ typearea, scrlfile,
+ scrpage, scrpage2, scrlettr, scrlttr2, scraddr, scrtime, scrdate},
+ pdfcreator={\KOMAScript, hyperref}
+ }%
+}
+% \end{macrocode}
+%
+% \begin{macro}{\autopageref}
+% This is something like |\autoref| but with page reference. A simple
+% definition would use |\hyperref| and |\pageref*|. But I want to allow to
+% decide if the reference is the page or the label. So this definition is
+% more like |\autoref|.
+% \begin{macrocode}
+\DeclareRobustCommand{\autopageref}[1]{%
+ \expandafter\auto@setpageref\csname r@#1\endcsname
+ \@secondoffive
+ {#1}%
+}
+% \end{macrocode}
+% \begin{macro}{\auto@setpageref}
+% This is the \emph{worker} macro. It checks for the label and trys to set
+% either a reference to the page or a reference to the label.
+% \begin{macrocode}
+\newcommand*{\auto@setpageref}[3]{%
+ \@safe@activestrue
+ \ifx#1\relax
+ \protect\G@refundefinedtrue
+ \nfss@text{\reset@font\bfseries ??}%
+ \@latex@warning{%
+ Reference `#3' on page \thepage \space undefined%
+ }%
+ \else
+ \def\@currentHtag{\pageautorefname~}%
+ \if@pagereftolabel
+ \hyper@@link
+ {\expandafter\@fifthoffive#1}%
+ {\expandafter\@fourthoffive#1\@empty\@empty}%
+ {\@currentHtag\expandafter#2#1\@empty\@empty\null}%
+ \else
+ \hyper@@link
+ {\expandafter\@fifthoffive#1}%
+ {page.\expandafter\@secondoffive#1\@empty\@empty}%
+ {\@currentHtag\expandafter#2#1\@empty\@empty\null}%
+ \fi
+ \fi
+ \@safe@activesfalse
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \section{Entries to \contentsname, \figurelistname, etc.}
+%
+% We have large page numbers, so better setup the needed width. And we like
+% other dot seperation.
+% \begin{macrocode}
+\renewcommand*{\@pnumwidth}{1.67em}
+\renewcommand*\@dotsep{2.5}
+% \end{macrocode}
+%
+%
+% \section{Bibliography}
+%
+% \begin{macro}{\BibTeX}
+% I use the same hack like the \LaTeX{} team uses at \texttt{ltlogos.dtx}
+% for |\LaTeX|:
+% \begin{macrocode}
+\DeclareRobustCommand{\BibTeX}{B\kern-.05em%
+ \hbox{$\m@th$%
+ \csname S@\f@size\endcsname \fontsize\sf@size\z@
+ \math@fontsfalse\selectfont
+ I\kern-.025emB}%
+ \kern-.08em%
+ \-\TeX%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Use of a preamble and sime other usefull changes.
+% \begin{macrocode}
+\AtBeginDocument{%
+ \setbibpreamble{\GuideBibPreamble\bigskip}%
+ \selectbiblanguage{\languagename}%
+ \bibliographystyle{babalpha-fl}%
+ \renewcommand*{\@openbib@code}{%
+ \setlength{\parsep}{0pt}%
+ \renewcommand*{\btxauthorcolon}[1]{:\par}%
+ \renewcommand*{\btxurlfont}{\par\url}%
+ \raggedright
+ }%
+}
+% \end{macrocode}
+%
+%
+% \section{Index}
+%
+% This is realy tricky. The index depends on an external perl script, which
+% splits the one index into several indexes. But first of all, we need to make
+% the raw index.
+% \begin{macrocode}
+\makeindex
+% \end{macrocode}
+%
+% Use of a preamble:
+% \begin{macrocode}
+\AtBeginDocument{\setindexpreamble{\GuideIndexPreamble\bigskip}}
+% \end{macrocode}
+%
+% \begin{macro}{\ifusemultiindex}
+% Now let's decide wether to use one index or to use a multi part index.
+% \begin{macrocode}
+\newif\ifusemultiindex
+\IfFileExists{\jobname-gen.ind}{\usemultiindextrue}{\usemultiindexfalse}
+\ifusemultiindex
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\printmultiindex}
+% Print one part of the multi part index.
+% \begin{macrocode}
+ \newcommand*{\printmultiindex}[3][]{%
+ \begingroup
+ \def\indexname{#2}%
+% \end{macrocode}
+% \begin{macro}{\CrossIndex}
+% Produce a reference from one index to another. The macro |\UseIndex| tells
+% the external splitt processor the index to be used for that entry. The
+% first argument is the entry to the index. The second is the shortcut of
+% the source index and the third is the shortcut of the index with the main
+% entry for the entry from first argument. This macro should be used at the
+% preamble of one part of the multi part index only. Because of this, it's
+% defined here only.
+% \begin{macrocode}
+ \newcommand*{\CrossIndex}[3]{%
+ \Index{##1=\UseIndex{##2}\protect##1>##3=\UseIndex{##2}\SeeSign
+ \protect##3}%
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+ \ifx\relax#1\relax\let\index@preamble=\relax
+ \else\def\index@preamble{#1}%
+ \fi
+ \label{idx:#3}%
+ \@input@{\jobname-#3.ind}%
+ \endgroup
+ }
+% \end{macrocode}
+% \begin{environment}{theindex}
+% I don't want every part of the index starting a new page. So I'll use the
+% \textsf{multicol} package to generate the two columns instead of
+% |\twocolumn|.
+% \begin{macrocode}
+ \renewenvironment{theindex}{%
+ \setchapterpreamble{\index@preamble}
+ \begin{multicols}{2}[\idx@heading\vspace{-1\baselineskip}]%
+ \parindent\z@
+ \setlength{\parskip}{\z@ \@plus .3\p@}%
+ \setlength{\parfillskip}{\z@ \@plus 1fil}%
+ \let\item\@idxitem
+ \small
+ }{%
+ \end{multicols}%
+ }
+% \end{macrocode}
+% \end{environment}
+% \end{macro}
+%
+% \begin{macro}{\printindex}
+% Print the full index.
+% \begin{macrocode}
+ \renewcommand*{\printindex}{%
+ \setchapterpreamble{\index@preamble}%
+ \addchap{\indexname}%
+ \let\index@preamble=\relax
+ \renewcommand*\idx@heading{%
+ \addsec{\indexname}%
+ \markright{\indexname}%
+ \ifx\index@preamble\relax
+ \else\index@preamble\let\index@preamble=\relax\fi
+ }%
+ \printmultiindex{\GuidegenIndex}{gen}%
+ \printmultiindex[%
+ \CrossIndex{\GuideMacro}{gen}{\GuidecmdIndexShort}%
+ \CrossIndex{\GuideEnvironment}{gen}{\GuidecmdIndexShort}%
+ \CrossIndex{\GuideCounter}{gen}{\GuidecmdIndexShort}%
+ \CrossIndex{\GuideLength}{gen}{\GuidecmdIndexShort}%
+ ]{\GuidecmdIndex}{cmd}%
+ \printmultiindex[%
+ \CrossIndex{\GuideLength}{gen}{\GuidelenIndexShort}%
+ \CrossIndex{\GuidePLength}{gen}{\GuidelenIndexShort}%
+ \CrossIndex{\GuideCounter}{gen}{\GuidelenIndexShort}%
+ ]{\GuidelenIndex}{len}%
+ \printmultiindex[%
+ \CrossIndex{\GuideFontElement}{gen}{\GuideelmIndexShort}%
+ ]{\GuideelmIndex}{elm}%
+ \printmultiindex[%
+ \CrossIndex{\GuideFile}{gen}{\GuidefilIndexShort}%
+ \CrossIndex{\GuidePackage}{gen}{\GuidefilIndexShort}%
+ \CrossIndex{\GuideClass}{gen}{\GuidefilIndexShort}%
+ ]{\GuidefilIndex}{fil}%
+ \printmultiindex[%
+ \CrossIndex{\GuideOption}{gen}{\GuideoptIndexShort}%
+ ]{\GuideoptIndex}{opt}%
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\indexsection}
+% Heading of the next section (e.g. the next character) at an index.
+% \begin{macrocode}
+\newcommand*{\indexsection}[1]{%
+ \ifx\empty#1\empty\else
+ \hspace{0pt plus 2fil}{{\usekomafont{sectioning} #1}}\hspace{0pt plus
+ 1fil}\nopagebreak
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\indexdelim}
+% \begin{macro}{\indexdelimi}
+% \begin{macro}{\indexdelimii}
+% The delimiter after the index topic but before the page number. There are
+% three index levels, so there are three delimiters too.
+% \begin{macrocode}
+\newcommand*{\indexdelim}{\ \hspace{0pt plus 1fil}\penalty0\null\nobreak
+ \dotfill~}
+\newcommand*{\indexdelimi}{~\dotfill\penalty0\ }
+\newcommand*{\indexdelimii}{~\dotfill\penalty0\ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\UseIndex}
+% This macro does nothing but shows the external index split processor the
+% destination index.
+% \begin{macrocode}
+\DeclareRobustCommand*{\UseIndex}[1]{\ignorespaces}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SeeSign}
+% The symbol used to sign a reference at an index.
+% \begin{macrocode}
+\DeclareRobustCommand*{\SeeSign}{\ensuremath{\protect\rightarrow}~}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\AddSeeIndex}
+% Add »\emph{see another index}« entry to an index. First argument is an
+% index entry to the index with shortcut of second argument. The third
+% argument is the name of another index given also by the shortcut at the
+% fourth argument.
+% \begin{macrocode}
+\newcommand*{\AddSeeIndex}[4]{%
+ \ifusemultiindex
+ \Index[seeindex{#4}]{#1=\UseIndex{#2}#1>#3=\UseIndex{#2}\SeeSign#3}%
+ \fi
+}
+% \end{macrocode}
+% \begin{macro}{\seeindex}
+% Page number style of references to another index. This eats the page
+% number of the index entry and set's a page number reference to the label
+% of the other index. Don't use this on your own. This is need by
+% |\AddSeeIndex|.
+% \begin{macrocode}
+\newcommand*{\seeindex}[2]{\pageref{idx:#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\IndexSeeAt}
+% A more general version of |\AddSeeIndex|. First (optional) argument is a
+% entry note (e.g. |\GuidePagestyle|). This is only used if option
+% \texttt{moreindexnotes} was set. Second argument is the entry. Third is
+% the shortcut of the source index, the index the entry should be set.
+% Fourth is the shortcut of the destination index, the index the entry
+% should reference. Fifth is the name of that index. Sixth is the output
+% command (e.g. |\Macro|) for the entry.
+% \begin{macrocode}
+\newcommand*{\IndexSeeAt}[6][\relax]{%
+ \ifusemultiindex
+ \if@moreindexnotes
+ \edef\@tempa{idx@f@\string#1.\string#2.#3.#4}%
+ \else
+ \edef\@tempa{idx@f@\string#2.#3.#4}%
+ \fi
+ \expandafter\ifx\csname \@tempa\endcsname\relax
+ \expandafter\gdef\csname \@tempa\endcsname{}%
+ \begingroup
+ \@tempswatrue
+ \if@moreindexnotes
+ \ifx\relax#1\relax\else\@tempswafalse
+ \Index[seeindex{#4}]{%
+ #2 (#1)=\UseIndex{#3}#6{#2} (\protect#1)>%
+ #5=\UseIndex{#3}\SeeSign\protect#5}%
+ \fi
+ \fi
+ \if@tempswa
+ \Index[seeindex{#4}]{%
+ #2=\UseIndex{#3}#6{#2}>#5=\UseIndex{#3}\SeeSign\protect#5}%
+ \fi
+ \endgroup
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Index}
+% Primary index command. First (optional) argument is the page number style
+% of the entry. Second argument is the entry. The page number style should
+% be either \texttt{indexother} or \texttt{indexmain}. Default is
+% \texttt{indexother}.
+% \begin{macrocode}
+\newcommand*{\Index}[2][indexother]{\index{#2|#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\BeginIndex}
+% \begin{macro}{\EndIndex}
+% Its also usefull to define index range entries. These have three
+% arguments. First (optiona) argument is the page number style. Default of
+% this parameter is \texttt{indexmain}. See |\Index| for more information
+% about this parameter. The second parameter is the kind of index
+% entry. This is not the same like the name or shortcut of an index! See
+% |\Define|\dots|Index| for more information about the kind of an index
+% entry. The third argument is the index entry.
+% \begin{macrocode}
+\newcommand*{\BeginIndex}[3][indexmain]{%
+ \expandafter\ifx\csname Index#2\endcsname\relax
+ \GenericError{(scrguide)\@spaces\@spaces\@spaces\@spaces}{%
+ Document scrguide Error: \string\BeginIndex\space with unknown
+ index%
+ }{Check the \string\BeginIndex-command or add a new index type
+ ``#2''.}{%
+ See scrguide2.tex for more information.}%
+ \else
+ \csname Index#2\endcsname[(%)
+ #1]{#3}%
+ \fi
+ \ignorespaces
+}
+\newcommand*{\EndIndex}[3][indexmain]{%
+ \@tempdima\lastskip
+ \ifdim \lastskip>\z@
+ \vskip -\lastskip
+ \fi
+ \expandafter\ifx\csname Index#2\endcsname\relax
+ \GenericError{(scrguide)\@spaces\@spaces\@spaces\@spaces}{%
+ Document scrguide Error: \string\EndIndex\space with unknown
+ index%
+ }{Check the \string\BeginIndex-command or add a new index type
+ ``#2''.}{%
+ See scrguide2.tex for more information.}%
+ \else
+ \csname Index#2\endcsname[%(
+ )#1]{#3}%
+ \fi
+ \ifdim\@tempdima >\z@
+ \vskip\@tempdima
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Now we have to define different kinds of index entries. We have entries that
+% will be added to only one index. We have entries that will be added to one
+% index with reference to that index at another index. And there are even
+% entries that will be added to one index with reference to to that index from
+% another index and from the main index.
+% \begin{macro}{\DefineSingeIndex}
+% This defines a single index entry, e.g. of commands. A macro will be
+% defined that addes the entry only to one index. First (optional)
+% agrument is a not, which shows the kind of entry (e.g. |\GuideMacro|). The
+% second is the macro postfix (e.g. \texttt{Cmd} would define |\IndexCmd|).
+% The third is the shortcut of the index to bee used
+% (e.g. \texttt{cmd}). The fourth argument is the command to be used to
+% output (format) the index entries (e.g. |\Macro|).
+% \begin{macrocode}
+\newcommand*{\DefineSingleIndex}[4][\relax]{%
+ \ifx\relax#1\relax
+ \expandafter\newcommand\expandafter*%
+ \csname Index#2\endcsname[2][indexother]{%
+ \Index[##1]{##2=\UseIndex{#3}#4{##2}}%
+ }%
+ \else
+ \expandafter\newcommand\expandafter*%
+ \csname Index#2\endcsname[2][indexother]{%
+ \Index[##1]{##2 (#1)=\UseIndex{#3}#4{##2} (\protect #1)}%
+ }%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\DefineDoubleIndex}
+% This defines a double index entry, e.g. of page styles. A macro will be
+% defined that adds the entry to an index and also adds a reference entry to
+% the main index. See |\DefineSingleIndex| for informations about the
+% parameters. If a note was given (first optional argument) it will be used
+% to make a top level entry to the main index with the corresponding
+% subentry.
+% \begin{macrocode}
+\newcommand*{\DefineDoubleIndex}[4][\relax]{%
+ % #1 = optional entry note (\GuidePagestyle)
+ % #2 = index macro postfix (Pagestyle)
+ % #3 = see-from-index to be used (cmd)
+ % #4 = output command (\Macro)
+ \ifx\relax#1\relax
+ \expandafter\newcommand\expandafter*%
+ \csname Index#2\endcsname[2][indexother]{%
+ \Index[##1]{##2=\UseIndex{gen}#4{##2}}%
+ \IndexSeeAt{##2}{#3}{gen}{\GuidegenIndex}{#4}%
+ }%
+ \else
+ \expandafter\newcommand\expandafter*%
+ \csname Index#2\endcsname[2][indexother]{%
+ \Index[##1]{##2 (#1)=\UseIndex{gen}#4{##2} (\protect #1)}%
+ \Index[##1]{#2=\UseIndex{gen}\protect#1>##2=\UseIndex{gen}#4{##2}}%
+ \IndexSeeAt[#1]{##2}{#3}{gen}{\GuidegenIndex}{#4}%
+ }%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\DefineTripleIndex}
+% This defines a triple index entry, e.g. of lengths. A macro will be
+% defined that adds the entry to an index and also adds a reference entry to
+% another index and the main index. The first (optional) argument is a note
+% (e.g. (|\GuideLength|) that will be used to generate a top level index
+% entry to the main index. The second argument is the macro postfix
+% (e.g. \texttt{Length} to define |\IndexLength|). The third argument is the
+% shortcut of the primary index (e.g. \texttt{len}). The fourth argument is
+% the short name of that index (e.g. |\GuidelenIndexShort|). The fifth
+% argument is the shortcut of the index to put the reference into
+% (e.g. \texttt{cmd}). The sixth argument is the output command of the index
+% entry (e.g. |\Length|).
+% \begin{macrocode}
+\newcommand*{\DefineTripleIndex}[6][\relax]{%
+ % #1 = optional entry note (\GuideLength)
+ % #2 = index macro postfix (Length)
+ % #3 = index to be used (len)
+ % #4 = index name (\GuidelenIndexShort)
+ % #5 = also-from-index to be used (cmd)
+ % #6 = output command (\Macro)
+ \ifx\relax#1\relax
+ \expandafter\newcommand\expandafter*%
+ \csname Index#2\endcsname[2][indexother]{%
+ \IndexSeeAt{##2}{gen}{#3}{#4}{#6}%
+ \IndexSeeAt{##2}{#5}{#3}{#4}{#6}%
+ \Index[##1]{##2=\UseIndex{#3}#6{##2}}%
+ \IndexSeeAt{##2}{#3}{gen}{\GuidegenIndex}{#4}%
+ }%
+ \else
+ \expandafter\newcommand\expandafter*%
+ \csname Index#2\endcsname[2][indexother]{%
+ \IndexSeeAt[#1]{##2}{gen}{#3}{#4}{#6}%
+ \Index[##1]{#1=\UseIndex{gen}\protect#1>##2=\UseIndex{gen}#6{##2}}%
+ \IndexSeeAt[#1]{##2}{#5}{#3}{#4}{#6}%
+ \Index[##1]{##2 (#1)=\UseIndex{#3}#6{##2} (\protect #1)}%
+ }%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% After this, let's define all used kinds of index entries:
+% \begin{macrocode}
+\DefineSingleIndex{Cmd}{cmd}{\Macro}
+\DefineDoubleIndex[\GuidePagestyle]{Pagestyle}{cmd}{\PValue}
+\DefineDoubleIndex[\GuideFloatstyle]{Floatstyle}{cmd}{\PValue}
+\DefineTripleIndex[\GuideCounter]{Counter}
+ {len}{\GuidelenIndexShort}{cmd}{\Counter}
+\DefineTripleIndex[\GuideLength]{Length}
+ {len}{\GuidelenIndexShort}{cmd}{\Length}
+\ifusemultiindex
+ \DefineSingleIndex[\GuideEnvironment]{Env}{cmd}{\Environment}
+ \DefineSingleIndex{Option}{opt}{\Option}
+ \DefineSingleIndex[\GuidePackage]{Package}{fil}{\Package}
+ \DefineSingleIndex[\GuideClass]{Class}{fil}{\Class}
+ \DefineSingleIndex{File}{fil}{\File}
+ \DefineSingleIndex[\GuideVariable]{Variable}{cmd}{\Variable}
+ \DefineSingleIndex{FontElement}{elm}{\FontElement}
+ \DefineSingleIndex{PLength}{len}{\PLength}
+\else
+ \DefineDoubleIndex[\GuideEnvironment]{Env}{cmd}{\Environment}
+ \DefineDoubleIndex{Option}{opt}{\Option}
+ \DefineDoubleIndex[\GuidePackage]{Package}{fil}{\Package}
+ \DefineDoubleIndex[\GuideClass]{Class}{fil}{\Class}
+ \DefineDoubleIndex{File}{fil}{\File}
+ \DefineDoubleIndex[\GuideVariable]{Variable}{cmd}{\Variable}
+ \DefineDoubleIndex{FontElement}{elm}{\FontElement}
+ \DefineDoubleIndex{PLength}{len}{\PLength}
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{\indexrm}
+% \begin{macro}{\indexother}
+% \begin{macro}{\indexit}
+% \begin{macro}{\indexbf}
+% \begin{macro}{\indexmain}
+% \begin{macro}{\indexsl}
+% \begin{macro}{\indexsf}
+% \begin{macro}{\indexsc}
+% Some helpers to get page numbers with different fontification but hyper
+% links.
+% \begin{macrocode}
+\newcommand*{\indexrm}[1]{\textrm{\hyperpage{#1}}}
+\newcommand*{\indexother}{}\let\indexother\indexrm
+\newcommand*{\indexit}[1]{\textit{\hyperpage{#1}}}
+\newcommand*{\indexbf}[1]{\textbf{\hyperpage{#1}}}
+\newcommand*{\indexmain}{}\let\indexmain\indexbf
+\newcommand*{\indexsl}[1]{\textsl{\hyperpage{#1}}}
+\newcommand*{\indexsf}[1]{\textsf{\hyperpage{#1}}}
+\newcommand*{\indexsc}[1]{\textsc{\hyperpage{#1}}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+\endinput
+%
+%%% Local Variables:
+%%% mode: doctex
+%%% TeX-master: "test.tex"
+%%% End: