DissOnlineLatex

Code:
%--- Diese Datei darf nicht verändert werden, alle benötigten Anpassungen nehmen Sie in einer der anderen mitgelieferten Dateien vor.---------


\NeedsTeXFormat{LaTeX2e}

\ProvidesClass{DissOnlineLatex}

\SetupKeyvalOptions{
    family=DOT,
        prefix=DOT@
}

\DeclareStringOption{inputenc}
\DeclareStringOption{fontenc}
\DeclareStringOption{babel}
\DeclareStringOption{geometry}
\DeclareStringOption{report}
%\DeclareStringOption{scrreprt}
%\DeclareStringOption{scrbook}

\ProcessKeyvalOptions*

\ifx\DOT@report\@empty
  \LoadClass[a4paper,12pt, openright, twoside]{report}
\else
  \expandafter\LoadClass\expandafter[\DOT@report]{report}
\fi

\ifx\DOT@inputenc\@empty
  \RequirePackage[latin1]{inputenc}
\else
  \expandafter\RequirePackage\expandafter[\DOT@inputenc]{inputenc}
\fi

\ifx\DOT@fontenc\@empty
  \RequirePackage[T1]{fontenc}
\else
  \expandafter\RequirePackage\expandafter[\DOT@fontenc]{fontenc}
\fi

\ifx\DOT@babel\@empty
  \RequirePackage[english,ngerman]{babel}
\else
  \expandafter\RequirePackage\expandafter[\DOT@babel]{babel}
\fi

\ifx\DOT@geometry\@empty
  \RequirePackage[left=4cm,top=3cm,right=3cm,bottom=4cm]{geometry}
\else
  \expandafter\RequirePackage\expandafter[\DOT@geometry]{geometry}
\fi

\listfiles

%-------Absatzformatierung----------------------------------------------------------

\setlength{\parindent}{5mm}
\renewcommand{\baselinestretch}{1.3}

%-------Neudefinition der Abstract-Umgebung-----------------------------------------
 
\def\sprachtestE{Abstract}

\if@titlepage
  \renewenvironment{abstract}{%
      \titlepage
      \null\vfil
      \@beginparpenalty\@lowpenalty
      \begin{flushleft}%
      	\vspace*{-55\p@}
        \LARGE \bfseries \abstractname
        \@endparpenalty\@M
      \end{flushleft}}%
      {\ifx\abstractname\sprachtestE
      \par\vfil\@Keywords
      \else
      \par\vfil\@Schlagwoerter
      \fi 
      \endtitlepage}
\else
  \renewenvironment{abstract}{%
      \if@twocolumn
        \chapter*{\abstractname}%
      \else
        \small
        \begin{flushleft}%
          {\LARGE\bfseries \abstractname\vspace{-.5em}\vspace{\z@}}%
        \end{flushleft}%
        \quotation
      \fi}
      {\if@twocolumn\else\endquotation\fi}
\fi 


%-------Makros zum Einlesen der Metadaten-------------------------------------------

\newcommand*{\Anrede}[1]{\gdef\@Anrede{#1}}
\newcommand*{\Nachname}[1]{\gdef\@Nachname{#1}}
\newcommand*{\NachnameohneUmlaute}[1]{\gdef\@NachnameohneUmlaute{#1}}
\newcommand*{\Vorname}[1]{\gdef\@Vorname{#1}}
\newcommand*{\Geburtsdatum}[1]{\gdef\@Geburtsdatum{#1}}
\newcommand*{\Geburtsort}[1]{\gdef\@Geburtsort{#1}}

\newcommand*{\Typ}[1]{\gdef\@Typ{#1}}
\newcommand*{\Titel}[1]{\gdef\@Titel{#1}}
\newcommand*{\TitelohneUmlaute}[1]{\gdef\@TitelohneUmlaute{#1}}
\newcommand*{\Untertitel}[1]{\gdef\@Untertitel{#1}}

\newcommand*{\GutachterA}[1]{\gdef\@GutachterA{#1}}
\newcommand*{\GutachterB}[1]{\gdef\@GutachterB{#1}}
\newcommand*{\GutachterC}[1]{\gdef\@GutachterC{#1}}

\newcommand*{\Grad}[1]{\gdef\@Grad{#1}}
\newcommand*{\Fach}[1]{\gdef\@Fach{#1}}
\newcommand*{\Fakultaet}[1]{\gdef\@Fakultaet{#1}}
\newcommand*{\Universitaet}[1]{\gdef\@Universitaet{#1}}
\newcommand*{\Dekan}[1]{\gdef\@Dekan{#1}}
\newcommand*{\Rektor}[1]{\gdef\@Rektor{#1}}

\newcommand*{\Abgabedatum}[1]{\gdef\@Abgabedatum{#1}}
\newcommand*{\Pruefungsdatum}[1]{\gdef\@Pruefungsdatum{#1}}

\newcommand*{\Schlagwoerter}[1]{\gdef\@Schlagwoerter{#1}}
\newcommand*{\Keywords}[1]{\gdef\@Keywords{#1}}

\include{metadata}

%--Gewährleistung der Kompatibilität mit hyperref.sty-------------------------------------

\RequirePackage{ifpdf}

\ifpdf
\RequirePackage[%
	pdftitle={\@TitelohneUmlaute},
	pdfauthor={\@NachnameohneUmlaute},
	pdfsubject={\@Typ},
	pdfkeywords={\@Keywords},
	pdfpagemode=UseOutlines,
  colorlinks=true,					% bitte nicht ändern!
	linkcolor=black,					% bitte nicht ändern!
	filecolor=black,					% bitte nicht ändern!
	urlcolor=black,						% bitte nicht ändern!
	hyperfootnotes=false,
	citecolor=black,					% bitte nicht ändern!
	pdftex=true,              % bitte nicht ändern!
	plainpages=false,         % bitte nicht ändern!
	hypertexnames=false,      % bitte nicht ändern!
	pdfpagelabels=true,       % bitte nicht ändern!
	hyperindex=true]{hyperref}% bitte nicht ändern!
\else
  % hier können Sie gegebenenfalls Befehle umdefinieren,
  % die nur für pdfLaTeX vorgesehen sind
	\newcommand{\texorpdfstring}[2]{#2}
\fi

%---GENERIERUNG VON FEHLERMELDUNGEN-------------------------------------------------------

%---Auschluss der verbotenen Optionen aus report------------------------------------------

\if@twocolumn
	\PackageError{DissOnlineLatex}{Die Option twocolumn ist nicht zugelassen}
\fi

%---GENERIERUNG VON WARNUNGEN	------------------------------------------------------------

%---Erzeugung von Warnungen, falls verbotene oder veraltete Pakete verwendet wurden-------

\AtBeginDocument{
		\@ifpackageloaded{pstricks}
				{\ClassWarning{DissOnlineLatex}
					{Das Paket pstricks darf nicht verwendet werden. Grafiken dürfen nur als eps- oder pdf-File importiert werden.}}
				{}
		\@ifpackageloaded{bbm}
				{\ClassWarning{DissOnlineLatex}
					{Das Paket bbm ist nicht zugelassen. Verwenden Sie stattdessen z.B. amsfonts oder amssymb.}}
				{}
		\@ifpackageloaded{curves}
				{\ClassWarning{DissOnlineLatex}
					{Das Paket curves ist nicht zugelassen. Grafiken dürfen nur als eps- oder pdf-File importiert werden.}}
				{}
		\@ifpackageloaded{epic}
				{\ClassWarning{DissOnlineLatex}
					{Das Paket epic ist nicht zugelassen. Grafiken dürfen nur als eps- oder pdf-File importiert werden.}}
				{}	
		\@ifpackageloaded{eepic}
				{\ClassWarning{DissOnlineLatex}
					{Das Paket eepic ist nicht zugelassen. Grafiken dürfen nur als eps- oder pdf-File importiert werden.}}
				{}
		\@ifpackageloaded{epsf}
				{\ClassWarning{DissOnlineLatex}
					{Das Paket epsf ist nicht zugelassen. Wenn Sie das Paket graphicx verwenden, werden eps-Grafiken direkt unterstützt.}}
				{}
		\@ifpackageloaded{epsfig}
				{\ClassWarning{DissOnlineLatex}{Das Paket epsfig ist nicht zugelassen. Wenn Sie das Paket graphicx verwenden, werden eps-Grafiken direkt unterstützt.}}
				{}
		\@ifpackageloaded{epstopdf}
				{\ClassWarning{DissOnlineLatex}
					{Das Paket epstopdf ist nicht zugelassen. Wenn Sie das Paket graphicx verwenden, werden eps-Grafiken direkt unterstützt.}}
				{}
		\@ifpackageloaded{xypic}
				{\ClassWarning{DissOnlineLatex}
					{Das Paket xypic ist nicht zugelassen. Grafiken dürfen nur als eps- oder pdf-File importiert werden.}}
				{}
		\@ifpackageloaded{a4}
				{\ClassWarning{DissOnlineLatex}
					{Vorsicht, das Paket a4 ist veraltet und die Verwendung kann Fehler verursachen, verwenden Sie stattdessen die report-Option a4paper.}}
				{}
		\@ifpackageloaded{a4wide}
				{\ClassWarning{DissOnlineLatex}
					{Vorsicht, das Paket a4wide ist veraltet und die Verwendung kann Fehler verursachen, verwenden Sie stattdessen die report-Option a4paper.}}
				{}
		\@ifpackageloaded{doublespace}
				{\ClassWarning{DissOnlineLatex}
					{Vorsicht, das Paket doublespace ist veraltet und die Verwendung kann Fehler verursachen. Verwenden sie stattdessen das Paket setspace.}}
				{}
		\@ifpackageloaded{euler}
				{\ClassWarning{DissOnlineLatex}
					{Vorsicht, das Paket euler ist veraltet und die Verwendung kann Fehler verursachen. Verwenden Sie stattdessen das Paket eulervm.}}
				{}
		\@ifpackageloaded{fancyheadings}
				{\ClassWarning{DissOnlineLatex}
					{Vorsicht, das Paket fancyheadings ist veraltet und die Verwendung kann Fehler verursachen. Verwenden Sie stattdessen das Paket fancyhdr.}}
				{}
		\@ifpackageloaded{isolatin}
				{\ClassWarning{DissOnlineLatex}
					{Vorsicht, das Paket isolatin ist veraltet und die Verwendung kann Fehler verursachen. Verwenden Sie stattdessen das Paket inputenc, dieses ist bereits als Pflichpaket eingebunden.}}
				{}
		\@ifpackageloaded{isolatin1}
				{\ClassWarning{DissOnlineLatex}
					{Vorsicht, das Paket isolatin1 ist veraltet und die Verwendung kann Fehlerverursachen. Verwenden Sie stattdessen das Paket inputenc, dieses ist bereits als Pflichpaket eingebunden.}}
				{}
		\@ifpackageloaded{mathpple}
				{\ClassWarning{DissOnlineLatex}
					{Vorsicht, das Paket mathpple ist veraltet und die Verwendung kann Fehler verursachen. Verwenden Sie stattdessen das Paket mathpazo.}}
				{}
		\@ifpackageloaded{mathptm}
				{\ClassWarning{DissOnlineLatex}
					{Vorsicht, das Paket mathptm ist veraltet und die Verwendung kann Fehler verursachen. Verwenden Sie stattdessen das Paket mathptmx.}}
				{}
		\@ifpackageloaded{pslatex}
				{\ClassWarning{DissOnlineLatex}
					{Vorsicht, das Paket pslatex ist veraltet und die Verwendung kann Fehler verursachen. Verwenden Sie stattdessen eines der Pakete mathptmx, helvet mit Option scaled=.95 oder courier.}}
				{}
		\@ifpackageloaded{palatino}
				{\ClassWarning{DissOnlineLatex}
					{Vorsicht, das Paket palatino ist veraltet und die Verwendung kann Fehler verursachen. Verwenden Sie stattdessen eines der Pakete mathpazo, helvet mit Option scaled=.95 oder courier.}}
				{}
		\@ifpackageloaded{t1enc}
				{\ClassWarning{DissOnlineLatex}
					{Vorsicht, das Paket t1enc ist veraltet und die Verwendung kann Fehler verursachen. Verwenden Sie stattdessen das Paket fontenc mit Option T1, dies ist bereits über die Pflichtpakete voreingestellt.}}
				{}
		\@ifpackageloaded{times}
				{\ClassWarning{DissOnlineLatex}
					{Vorsicht, das Paket times ist veraltet und die Verwendung kann Fehler verursachen. Verwenden Sie stattdessen eines der Pakete mathpazo, helvet mit Option scaled=.90 oder courier.}}
				{}
		\@ifpackageloaded{umlaut}
				{\ClassWarning{DissOnlineLatex}
					{Vorsicht, das Paket umlaut ist veraltet und die Verwendung kann Fehler verursachen. Verwenden Sie stattdessen das Paket inputenc, dieses ist bereits als Pflichpaket eingebunden.}}
				{}
		\@ifpackageloaded{umlaute}
				{\ClassWarning{DissOnlineLatex}
					{Vorsicht, das Paket umlaute ist veraltet und die Verwendung kann Fehler verursachen. Verwenden Sie stattdessen das Paket inputenc, dieses ist bereits als Pflichpaket eingebunden.}}
				{}
	}


\RequirePackage{substr}

%---Hier wird überprüft, ob \newcommand, \newenvironment, \let oder \def verwendet wurde.------

%---Im Fall, dass abstract.tex abgegeben wurde, wird überprüft, ob die abstract-Umgebung verwendet wurde. Auch die Hauptdatei wird dahingehend überprüft.-------------------------------------------------------------------------------------

\newif\ifende

\def\kommando{\newcommand}
\def\umgebung{\newenvironment}
\def\rekommando{\renewcommand}
\def\reumgebung{\renewenvironment}
\def\altlet{\let}
\def\altdef{\def}
\def\abstractum{\abstract}
\@onelevel@sanitize\kommando
\@onelevel@sanitize\umgebung
\@onelevel@sanitize\rekommando
\@onelevel@sanitize\reumgebung
\@onelevel@sanitize\altdef
\@onelevel@sanitize\altlet
\@onelevel@sanitize\abstractum

\AtEndDocument{%
\newread\eingabe
\openin\eingabe = abstract
\endetrue
\loop%
\read\eingabe to \text
\makeatletter 
\@onelevel@sanitize\text
\makeatother
\IfSubStringInString{\kommando}{\text}{\ClassWarningNoLine{DissOnlineLatex}{Eigene Kommandos duerfen nur in der Datei command.tex definiert werden}}{}
\IfSubStringInString{\umgebung}{\text}{\ClassWarningNoLine{DissOnlineLatex}{Eigene Umgebungen duerfen nur in der Datei command.tex definiert werden}}{}
\IfSubStringInString{\altdef}{\text}{\ClassWarningNoLine{DissOnlineLatex}{Der def-Befehl darf nicht verwendet werden}}{}
\IfSubStringInString{\altlet}{\text}{\ClassWarningNoLine{DissOnlineLatex}{Der let-Befehl darf nicht verwendet werden}}{}
\IfSubStringInString{\abstractum}{\text}{\ClassWarningNoLine{DissOnlineLatex}{Bitte verwenden Sie die abstract-Umgebung um Ihre Zusammenfassung zu erstellen.}}{}
\ifeof\eingabe\endefalse\else\endetrue\fi
\ifende
\repeat
\closein\eingabe
\openin\eingabe = \@NachnameohneUmlaute
\endetrue
\loop%
\read\eingabe to \text
\makeatletter 
\@onelevel@sanitize\text
\makeatother
\IfSubStringInString{\kommando}{\text}{\ClassWarningNoLine{DissOnlineLatex}{Eigene Kommandos duerfen nur in der Datei command.tex definiert werden}}{}
\IfSubStringInString{\umgebung}{\text}{\ClassWarningNoLine{DissOnlineLatex}{Eigene Umgebungen duerfen nur in der Datei command.tex definiert werden}}{}
\IfSubStringInString{\rekommando}{\text}{\ClassWarningNoLine{DissOnlineLatex}{Kommandos duerfen nur in der Datei command.tex neu definiert werden}}{}
\IfSubStringInString{\reumgebung}{\text}{\ClassWarningNoLine{DissOnlineLatex}{Umgebungen duerfen nur in der Datei command.tex neu definiert werden}}{}
\IfSubStringInString{\altdef}{\text}{\ClassWarningNoLine{DissOnlineLatex}{Der def-Befehl darf nicht verwendet werden}}{}
\IfSubStringInString{\altlet}{\text}{\ClassWarningNoLine{DissOnlineLatex}{Der let-Befehl darf nicht verwendet werden}}{}
\IfSubStringInString{\abstractum}{\text}{\ClassWarningNoLine{DissOnlineLatex}{Bitte verwenden Sie die abstract-Umgebung um Ihre Zusammenfassung zu erstellen.}}{}
\ifeof\eingabe\endefalse\else\endetrue\fi
\ifende
\repeat
\closein\eingabe
}



%--Hier wird überprüft, ob in der Hauptdatei \include mind. einmal verwendet wird und eine Warnung ausgegeben, falls include gar nicht auftaucht, außerdem wird überprüft ob input zum Einbinden einer Datei verwendet wurde.
%---Überprüfung ob bibtex verwendet wurde.

\newif\ifinclude
\includetrue

\newif\ifbibtex
\bibtextrue

\def\literatur{\begin{thebibliography}}
\def\litbibtex{\bibliographystyle}
\def\einbinden{\include}
\def\falscheinbinden{\input}
\@onelevel@sanitize\einbinden
\@onelevel@sanitize\falscheinbinden
\@onelevel@sanitize\literatur
\@onelevel@sanitize\litbibtex

\AtEndDocument{%
\openin\eingabe = \@NachnameohneUmlaute
\endetrue
\loop%
\read\eingabe to \text
\makeatletter 
\@onelevel@sanitize\text
\makeatother
\IfSubStringInString{\einbinden}{\text}{\includefalse}{}
\IfSubStringInString{\falscheinbinden}{\text}{\ClassWarningNoLine{DissOnlineLatex}{Bitte verwenden Sie Sie nicht den input-, sondern nur den include-Befehl zum Einbinden von Dateien}}{}
\IfSubStringInString{\literatur}{\text}{\ClassWarningNoLine{DissOnlineLatex}{Bitte verwenden Sie BibTex zur Erstellung Ihres Literaturverzeichnisses}}{}
\IfSubStringInString{\litbibtex}{\text}{\bibtexfalse}{}
\ifeof\eingabe\endefalse\else\endetrue\fi
\ifende
\repeat
\closein\eingabe
\ifinclude{\ClassWarningNoLine{DissOnlineLatex}{Bitte verwenden Sie zum Einbinden von Dateien den include-Befehl}}\fi
\ifbibtex{\ClassWarningNoLine{DissOnlineLatex}{Bitte verwenden Sie BibTex zur Erstellung Ihres Literaturverzeichnisses}}\fi
}