%% %% @ is a letter %% \catcode`\@=11 %% %% Grab the initex file list %% %% If this file is called via %% latex "\input{latexbug}" or some %% similar command sequence rather than %% latex latexbug %% then the debugging info in \reserved@a will already have been lost. %% This might not matter, but if it does we may ask the user to resubmit %% the report. \ifx\reserved@b\@undefined \ifx\reserved@a\@gobble \def\@inputfiles{NONE} \else \let\@inputfiles\reserved@a \fi \else \def\@inputfiles{LOST} \fi %% %% Output stream to produce the bug report template. %% \newwrite\msg \immediate\openout\msg=\jobname.msg %% %% Check that LaTeX2e is being used. %% \ifx\undefined\newcommand \newlinechar`\^^J% \immediate\write17{^^J% You must use LaTeX2e to generate the bug report!^^J^^J% Sie muessen LaTeX2e verwenden, um die Fehlermeldung zu erzeugen!}% \let\relax\end \else \def\@tempa{LaTeX2e}\ifx\@tempa\fmtname\else \immediate\write17{^^J% You must use LaTeX2e to generate the bug report!^^J^^J% Aeltere Versionen von LaTeX werden nicht unterstuetzt.^^J% Sie muessen LaTeX2e verwenden, um de Fehlermeldung zu erzeugen!}% \let\relax\@@end \fi\fi %% %% \wmsg writes to the terminal, and the .msg file %% \wmsg* just writes to the .msg file %% \typeout just writes to the terminal %% \def\wmsg{\bgroup\@ifstar{\interactivefalse\@wmsg}\@wmsg} \relax \endlinechar=-1 \def\@wmsg#1{% \ifinteractive\immediate\write17{#1}\fi \immediate\write\msg{#1}% \egroup} %% %% if \interactivefalse just make a blank template. %% \newif\ifinteractive \interactivetrue %% %% Prompt for an answer from the user, if the answer is not %% provided by the cfg file. %% \def\readifnotknown#1{% \@ifundefined{#1}% {{\message{#1> }% \catcode`\^^I=12 \let\do\@makeother\dospecials \global\read\m@ne t\expandafter o\csname#1\endcsname}}% {\message{\csname#1\endcsname}}} %% %% Pause so messages do not scroll off screen. %% \def\pause{% \ifinteractive \message{Mit der -Taste geht es weiter. }% \read\m@ne to \@tempa \fi} %% %% Try to get Version %% \def\GetVersion#1{ \def\ProvidesFile##1{\@ifnextchar [{\@P@F}{\@P@F[1996/10/31 ]}} \def\@P@F[##1 ##2]{\xdef\komaversion{##1}\csname endinput\endcsname} \InputIfFileExists{#1} {} {\def\noscrclass{% ! Die Datei `#1' konnte nicht gefunden werden!^^J% ! Zur Bestimmung der aktuellen Version ist es unbedingt^^J% ! erforderlich, dass diese Datei sich im selben Verzeichnis^^J% ! wie `komabug.tex' befindet!} \errmessage{\noscrclass} \errhelp{Beenden Sie TeX mit `x' und starten Sie komabug neu}}} %% %% Opening Banner. %% \typeout{^^J% ============================================================^^J% ^^J% KOMA-Script Fehlermeldungsgenerator^^J% ===================================^^J% Die Bearbeitung dieser Datei mit LaTeX erzeugt das Formular \jobname.msg,^^J um Fehlermeldungen zum KOMA-Script-Paket zu melden.^^J^^J% * Schreiben Sie Ihre Meldung nach Moeglichkeit in Deutsch.^^J \space Notfalls ist auch Englisch moeglich.^^J% * Bitte fassen Sie sich kurz.^^J% * Bitte halten Sie keine Information zurueck, die moeglicherweise^^J \space wichtig sein koennte.^^J} \InputIfFileExists{komabug.cfg} {\typeout{** komabug.cfg wird verwendet **}} {} \count@=0 \typeout{% Verschiedene Bereiche werden von diesem Generator unterstuetzt, die^^J% sich auf verschiedene Dateien im KOMA-Script-Paket beziehen:^^J^^J 0) komascr:\space\@spaces Auspacken und Installieren von KOMA-Script.^^J 1) scrguide:\@spaces Die KOMA-Script-Anleitung.^^J 2) scrclass:\@spaces Die KOMA-Script-Standard-Klassen.^^J 3) scrlettr:\@spaces Die KOMA-Script-Brief-Klasse und die zugehoerigen Pakete.^^J 4) typearea:\@spaces Automatische und individuelle Satzspiegelberechnung.^^J 5) scrpage:\space\@spaces Individuelle Kopf- und Fusszeilendefinition.^^J 6) scrtime:\space\@spaces Kleine Zugaben fuer Datums- und Zeitinformationen.^^J% } \message{Bitte waehlen Sie einen der Bereiche von 0--6 aus: } \read\m@ne to \answer \count@=\answer\relax \ifcase\count@ \def\category{komascr}\GetVersion{scrclass.dtx} \let\categoryversion\komaversion \or \def\category{scrguide}\GetVersion{scrguide.tex} \let\categoryversion\komaversion\GetVersion{scrclass.dtx} \or \def\category{scrclass}\GetVersion{scrclass.dtx} \let\categoryversion\komaversion \or \def\category{scrlettr}\GetVersion{scrlettr.dtx} \let\categoryversion\komaversion\GetVersion{scrclass.dtx} \or \def\category{typearea}\GetVersion{scrclass.dtx} \let\categoryversion\komaversion \or \def\category{scrpage}\GetVersion{scrpage.dtx} \let\categoryversion\komaversion\GetVersion{scrclass.dtx} \or \def\category{scrtime}\GetVersion{scrtime.dtx} \let\categoryversion\komaversion\GetVersion{scrclass.dtx} \else \errhelp{Beenden Sie TeX mit `x' und starten Sie komabug neu} \def\badcategory{Nur die Bereiche 0,...,6 werden derzeit unterstuetzt} \errmessage{\badcategory} \fi \typeout{^^J% ============================================================^^J% ^^J% Bitte eine einzeilige (< 50 Zeichen) Beschreibung des Problems.% ^^J^^J% Wenn Sie fuer die Meldung eMail verwenden, setzen Sie diese Beschreibung^^J bitte auch als Betreff (`Subject') der eMail ein:% ^^J \@spaces\@spaces\space |<------------------------------------------------>|} \loop \let\synopsis\relax \readifnotknown{synopsis} \ifx\synopsis\@empty \repeat \typeout{% ^^J% Dieser Generator kann auf zwei Arten verwendet werden.^^J% Im interaktiven Betrieb, werden Ihnen Fragen zur direkten Beantwortung^^J% gestellt. Ansonsten wird ein leeres Formular erzeugt, das Sie dann mit^^J% einem Editor ausfuellen muessen.^^J% } \typeout{Interaktive Sitzung (j/n)? } \readifnotknown{interactive} \ifx\interactive\@empty \def\interactive{n} \fi %% %% Allow anything begining with `j' or `J' for yes. %% \edef\interactive{\uccode`\expandafter\@car\interactive\@nil} \ifnum \interactive=`J \else\interactivefalse\fi %% %% Header in the msg file. %% \wmsg*{^^J% KOMA-Fehlermeldung.^^J% \ifnum \interactive=`Y Interaktiv \else Formular \fi erzeugt mit komabug.tex am \space\number\year-\two@digits\month-\two@digits\day^^J% ^^J% Meldungen bis 32 KByte koennen per eMail im MausNet an^^J% Markus Kohm @ KA2 verschickt werden.^^J% Die Meldung kann auch per eMail an unlf@rz.uni-karlsruhe.de^^J% verschickt werden.^^J% Bitte verwenden Sie dann als Betreff:^^J% \space KOMA-BUG:\space\synopsis^^J% ============================================================^^J} %% %% Category of bug, obtained earlier but put out now, after the header. %% \wmsg{>Bereich: \category} \wmsg{>Version: \categoryversion} %% %% synopsis of bug, obtained earlier but put out now, after the header. %% \wmsg{>Betreff: \synopsis} \begingroup \global\let\format\@empty \gdef\hyphenation{standard} \def\immediate#1#{\xdef\hyphenation} \def\typeout#1{\xdef\format{\format#1}} \the\everyjob \endgroup \wmsg{>Format: \format} \wmsg{>KOMA-Script: \komaversion} \ifinteractive %% %% if interactive, \wread reads a line (verbatim) and write it to the %% .msg file, until a blank line is entered. %% \def\wread{{\catcode`\^^I=12 \let\do\@makeother\dospecials \let\lastanswer\answer \message{=> }\read\m@ne to \answer \ifx\lastanswer\@empty \let\lastanswer\answer \fi \ifx\lastanswer\@empty \else \immediate\write\msg{\answer} \expandafter\wread \fi}} \else %% %% If non-interactive, \wread just writes a blank line to the .msg file, %% and \wmsg does not write to the terminal. %% \def\wread{\wmsg{}} \fi %% %% \copytomsg copies the contents of a file into the .msg file. %% (at least it does it as well as TeX can, so there may be %% transcription problems with 8-bit characters). %% %% It does a line count, and complains if the test file is %% too large. \chardef\inputfile=15 \newcount\linecount \def\copytomsg#1{{% \def\do##1{\catcode`##1=11}% \dospecials \global\linecount\z@ \openin\inputfile#1\relax \def\thefile{#1}% \@copytomsg \closein\inputfile}} \def\@copytomsg{% \ifeof\inputfile \typeout{*** \thefile\space Zeilen = \the\linecount} \else \global\advance\linecount\@ne \read\inputfile to \inputline \ifx\inputline\@empty \wmsg*{} \else \wmsg*{\inputline} \fi \expandafter\@copytomsg \fi} %% %% Test the age of the current format. %% \def\getage#1/#2/#3\@nil{% \count@\year \advance\count@-#1\relax \multiply\count@ by 12\relax \advance\count@\month \advance\count@-#2\relax} % \expandafter\getage\fmtversion\@nil %% %% \count@ should now be the age of the format in months. %% \ifnum\count@>12 \def\oldformat{^^J% ! Ihre LaTeX-Installation ist ueber ein Jahr alt.^^J% ! Bitte denken Sie ueber ein Update nach, ehe Sie diese Meldung^^J% ! abschicken.^^J% ! Vergleichen Sie wenigstens das Datum des Paketes mit dem Datum^^J% ! der LaTeX-Version. LaTeX sollte nicht mehr als 6 Monate aelter^^J% ! als KOMA-Script sein. Ansonsten koennte der Fehler in einer^^J% ! Unverstraeglichkeit zwischen Format- und Paketversion liegen.} %% %% Put the message in a macro to improve the look of the error mesage. %% % \errhelp{Wenn Sie dennoch fortfahren wollen, druecken Sie einfach .} \errmessage{\oldformat} \fi % \expandafter\getage\komaversion\@nil \ifnum\count@>12 \def\oldversion{^^J% ! Ihre KOMA-Script-Version ist ueber ein Jahr alt.^^J% ! Bitte denken Sie ueber ein Update nach, ehe Sie diese Meldung^^J% ! abschicken.^^J% ! Vergleichen Sie wenigstens das Datum des Paketes mit dem Datum^^J% ! der LaTeX-Version. LaTeX sollte nicht mehr als 6 Monate aelter^^J% ! oder juenger als KOMA-Script sein. Ansonsten koennte der Fehler^^J% ! in einer Unverstraeglichkeit zwischen Format- und Paketversion^^J% ! liegen.} \errhelp{Wenn Sie dennoch fortfahren wollen, druecken Sie einfach .} \errmessage{\oldversion} \fi %% %% Now use \wmsg and \wread for each of the multi-line fields %% in the form. Currently one-line fields use \read directly. %% \ifinteractive \typeout{^^JIhr Name:} \readifnotknown{name} \else \ifx\name\undefined \def\name{ < GEBEN SIE IHREN NAMEN EIN > } \fi \fi \ifinteractive \typeout{^^JIhre Addresse (eMail bevorzugt):} \readifnotknown{address} \else \ifx\address\undefined \def\address{ < GEBEN SIE IHRE (EMAIL-)ADRESSE EIN > } \fi \fi \ifinteractive \typeout{^^JDas verwendete Computersystem (z. B. Atari, Linux, Mac):} \readifnotknown{computersystem} \else \ifx\computersystem\undefined \def\computersystem{ < GEBEN SIE IHR VERWENDETES COMPUTERSYSTEM EIN > } \fi \fi \wmsg*{>Adresse: \name\space<\address>} %% %% >Organisation: is really a GNATS multiline filed %% but we treat it as a one-line field. %% \wmsg*{>Organisation: \ifx\organisation\undefined \ifx\organization\undefined\else \organization \fi \else \organisation \fi} %% %% Test which format is being used. These fields are completed %% automatically even if the blank template is being produced. %% \wmsg*{>Voraussetzungen:} \wmsg*{ \string\@TeXversion: \meaning\@TeXversion \ifx\@TeXversion\@@undefined \space (Standardeinstellung fuer TeX3.141 und spaeter)\fi} \wmsg*{ \string\@currdir: \meaning\@currdir} \wmsg*{ \string\input@path: \meaning\input@path \ifx\input@path\@@undefined \space (Standardeinstellung)\fi} \wmsg*{ System: \computersystem} \wmsg*{>Beschreibung:} \ifinteractive \typeout{% Beschreibung des Problems:^^J^^J% \@spaces Die Beantwortung dieser Frage kann mehrere Zeilen^^J% \@spaces einnehmen (jede wird durch die Eingabeaufforderung^^J% \@spaces => eingeleitet).^^J% \@spaces Durch zwei aufeinanderfolgende Leerzeilen wird die^^J% \@spaces Antwort beenden.} \else \wmsg{ < GEBEN SIE HIER IHRE PROBLEMBESCHREIBUNG EIN >} \fi \wread %% %% insertion of the test file %% \ifinteractive \typeout{^^J% Name einer KURZEN, SELBSTERKLAERENDEN Datei, bei der das Problem^^J% auftritt (die Datei sollte wirklich so kurz wie moeglich sein,^^J% nicht mehr als 60 Zeilen):^^J^^J% Damit LaTeX diese Datei einlesen kann, geben Sie bitte den kompletten^^J% Namen einschliesslich des Verzeichnisses an, falls die Datei nicht im^^J% aktuellen Verzeichnis zu finden ist.^^J^^J% Falls Sie keinen Fehler in einer der Klassen oder Pakete melden und^^J% daher keine Testdatei existiert, druecken Sie einfach } \message{filename> }\read\m@ne to \filename \else \def\filename{} \fi %% %% Try to find the .tex file and .log file %% \ifx\filename\@empty \ifinteractive \typeout{^^J^^JKeine Testdatei.^^J^^J% Drei Arten von Meldungen werden unterstuetzt:^^J^^J% 0) SW-Fehler:^^J\@spaces Software-Fehler, unbedingt eine Testdatei beilegen!^^J 1) DOC-Fehler:^^J\@spaces Fehler in oder unverstaendliche Anleitung.^^J 2) Aenderungswunsch:^^J\@spaces Kein Fehler sondern eine Frage nach Aenderund oder Hilfe.^^J} \message{Bitte waehlen Sie eine Art von 0--2: } \read\m@ne to \answer \ifx\answer\@empty \def\answer{-1} \fi \count@=\answer\relax \else \count@=\z@ \fi \ifcase\count@ \ifinteractive\wmsg{>Unterbereich: SW-Fehler}\fi \typeout{^^J! Bitte ergaenzen Sie Beispiel- und LOG-Datei in der Meldung!} \pause \wmsg*{% Beispieldatei, die das Problem verdeutlicht:^^J% ============================================^^J% \space< HIER TESTDATEI EINFUEGEN >^^J% ^^J% LOG-Datei vom LaTeX-Lauf der Beispieldatei:^^J% ===========================================^^J% \space< HIER LOG ZUR TESTDATEI EINFUEGEN >} \or \wmsg{>Unterbereich: DOC-Fehler} \or \wmsg{>Unterbereich: Aenderungswunsch} \else \errhelp{Beenden Sie TeX mit `x' und starten Sie komabug neu} \def\badcategory{Nur die Bereiche 0, 1, 2 werden derzeit unterstuetzt} \errmessage{\badcategory} \fi \else \filename@parse\filename \IfFileExists{\filename}{\edef\samplefile{\filename}}{} \IfFileExists{\filename@area\filename@base.log} {\edef\logfile{\filename@area\filename@base.log}} {\IfFileExists{\filename@area\filename@base.lis} {\edef\logfile{\filename@area\filename@base.lis}} {}} %% %% The example file goes here: %% \wmsg*{^^J% Beispieldatei, die das Problem verdeutlicht:^^J% ============================================} \ifx\samplefile\undefinedcommand \typeout{^^J% Beispieldatei \filename\space nicht gefunden.^^J% Bitte ergaenzen Sie das Beispiel in \jobname.msg.} \wmsg*{ < HIER TESTDATEI EINFUEGEN >} \pause \else \copytomsg{\samplefile} \ifnum\linecount>60 \typeout{% ^^J% !!! Ihre Testdatei ist \the\linecount\space Zeilen lang.^^J% !!! So grosse Testdateien erschweren die Ursachenfindun.:^^J% !!! ^^J% !!! Bitte verkleinern Sie Ihre Testdatei, soweit das ueberhaupt^^J% !!! moeglich ist, so dass das Problem gerade noch auftritt.^^J} \pause \fi \fi %% %% The log file goes here: %% \wmsg*{^^J% LOG-Datei vom LaTeX-Lauf der Beispieldatei:^^J% ===========================================} \ifx\logfile\undefinedcommand \typeout{^^J% LOG-Datei \filename@area\filename@base.log nicht gefunden.^^J% Bitte ergaenzen Sie die LOG-Datei in \jobname.msg.} \wmsg*{ < HIER LOG ZUR TESTDATEI EINFUEGEN >} \pause \else \copytomsg{\logfile} \fi \fi %% %% Closing Banner. %% \typeout{^^J% ============================================================} \ifinteractive \typeout{^^J% Weiteren Aenderungen koennen sie direkt in der Datei^^J% `\jobname.msg' mit Hilfe eines Editors vornehmen.} \else \typeout{^^J% Das Formular fuer die Erstellung der Meldung wurde in die^^J% Datei `\jobname.msg' geschrieben, die Sie bitte mit Hilfe^^J% eines Editors ergaenzen, bevor Sie sie abschicken.} \fi \let\ifinteractivetrue\iftrue \typeout{^^J% Wenn Sie ueber eMail verfuegen, so senden Sie `\jobname.msg'^^J% bitte an eine der folgenden Adressen:^^J% MausNet: \space Markus Kohm @ KA2 (maximal 48 KByte/Tag!)^^J% InterNet:\space unlf@rz.uni-karlsruhe.de^^J% Verwenden Sie dabei bitte als Betreff (Subject):^^J% \@spaces `KOMA-BUG:\space\synopsis'^^J% ^^J% Danke, dass Sie sich die Zeit genommen haben.} \wmsg*{^^J% ============================================================^^J Ende der KOMA-Fehlermeldung.^^J% ============================================================} %% %% Close the .msg output stream. %% \immediate\closeout\msg %% %% This is the TeX primitive \end command. %% \@@end