Seite 1 von 1

Probleme bei neuem command mit Parametern

Verfasst: Mi 7. Apr 2010, 10:02
von hansmeia
Hallo Leute,

ich habe ein Problem mit einem neuen command. Ich poste erstmal den Code:
Folgendes habe ich in die Datei neues.sty ausgelagert.
\newcommand{\createCoverAndTitlePage}[6]{
	\createCover{#1}{#2}{#3}
	\createTitlePage{#1}{#2}{#3}{#4}{#5}{#6}
\newcommand{\createCover}[3]{
	\thispagestyle{empty}
	\begin{titlepage}

	\setlength{\TPHorizModule}{1mm}
	\setlength{\TPVertModule}{1mm}
	\textblockorigin{0mm}{0mm} % start everything near the top-left corner

	% Art der Arbeit
	\begin{textblock}{111}(83,115)
		\begin{minipage}[c][1,78cm][c]{11,09cm}		
  		\fontsize{22pt}{20pt}
  		\selectfont
  		\begin{center}
  		#1arbeit
  		\end{center}
		\end{minipage}
	\end{textblock}

	% Name & Titel
	\begin{textblock}{111}(83,131)
		\begin{minipage}[c][4,81cm][tt]{11,09cm}	
		\linespread{1.2}	
    \fontsize{16pt}{14pt}    
    \selectfont
    \begin{center}
    #2 \\ \medskip
    #3
    \end{center}
    \end{minipage}
	\end{textblock}
	% Infos zur Arbeit und zum Fachbereich
	\begin{textblock}{186}(22,264)
  	\begin{minipage}[t][5,72cm][l]{17,57cm}
    	\fontsize{12pt}{12pt}
    	\selectfont
			{\em Fakultät Technik und Informatik \hfill Faculty of Engineering and Computer Science}\\
			{\em Department Informatik \hfill Department of Computer Science}
  	\end{minipage}
	\end{textblock}
	\newpage
	\end{titlepage}
Natürlich habe ich dafür gesorgt, dass die Datei mit:
\input{einstellungen/neues.sty}
geladen wird und sich auch wirklich an dem Ort befindet.

In meiner Hauptdokumentdatei rufe ich nun dieses neue command folgendermaßen auf:
\createCoverAndTitlePage{Bachelor}, % Argument#1  		    				  % Art der Arbeit
													{Hans Meia}, % Argument#2							% Name
													{mein Super Titel}, % Argument#3 % Titel													
													{Angewandte Informatik},    % Argument#4 	% Studiengang
													{Prof.\ Dr.\ XXX}, %Argument#5		% Erstgutachter
													{Prof.\ Dr.\ XXX}

Leider erscheinen die Parameter abre in keinster Weise auf dem Deckblatt.

Kann mir jemand erläutern was ich hier falsch mache?


Danke schon mal im vorraus.

Verfasst: Mi 7. Apr 2010, 10:09
von Xenara
Ich hab grad keine Zeit, aus den Schnipseln ein lauffähiges Minimalbeispiel zu basteln !Wink-mit-dem-Zaunpfahl!
(Externe Dateien mit filecontents-Umgebung einbauen.)

Aber was du probieren könntest:

Die Datei als ganz normales .tex abspeichern und dann über input wie bisher einbinden (natürlich als \input{datei.tex}). Klappts dann?

Denn das, was du auslagerst, sind nur neue Befehle, das macht noch kein .sty-File.

Btw. ich gehe einfach mal davon aus, dass die Kommandos funktionieren, wenn du den Inhalt von neues.sty direkt in deine Präambel kopierst, oder?
Dass der Fehler also definitiv nur noch beim Einbinden über input liegen kann?

Verfasst: Mi 7. Apr 2010, 10:15
von bloodworks
Hallo ungeachtet dessen, dass sty als Package eingebunden werden... Du verwendest einen neuen Befehl BEVOR du ihn Deklarierst. Dass muss doch schief gehen. (Zumindest gibt das bei mir einen Haufen Fehlermeldungen.)
Zudem fehlen dir ein paar Klammern.

BTW warum die Mühe. Es gibt so tolle Pakete zum erstellen von Titelpages. Ausserdem könnest du die guten Alten Variablen (ja ok Makros) wie author oder titel verwenden bevor du deine User mit einem neuen Befehl quälst.

Verfasst: Mi 7. Apr 2010, 10:23
von hansmeia
Auch wenn ich die Dateiendung von sty in tex ändere bleibt das Problem bestehen...
Ich habe jetzt das kleine Beispiel angehängt.

Nochmals vielen Dank.

Verfasst: Mi 7. Apr 2010, 10:27
von hansmeia
Ich hab außerdem die sty Datei in ein neues Verzeichnis der LaTeX Pakete gelegt und ein Refresh in den Optionen von MikTeX durchgeführt.
Sollte also eingebunden sein.

Ich bin leider an diese Vorlage gebunden, weil es hier um die Erstellung einer Bachelorarbeit geht und ich diese Vorlage verwenden muss (wobei ich natürlich Änderungen selbst machen darf)

Verfasst: Mi 7. Apr 2010, 10:43
von KOMA
Als erstes könntest Du neben einem vollständigen Minimalbeispiel (← dies ist ein geprüfter Link mit relevanten Informationen!) mal die Fehlermeldung angeben, falls es eine gibt, was ich stark vermute, weil in Deinem Codeschnippsel bei der Definition von \createCoverAndTitlePage höchstwahrscheinlich eine schließende Klammer fehlt.

Bei der Gelegenheit sei auch noch darauf hingewiesen, dass Deine Definitionen Leerzeichen enthalten, sie im horizontalen Modus signifikant sind.
bloodworks hat geschrieben:Du verwendest einen neuen Befehl BEVOR du ihn Deklarierst. Dass muss doch schief gehen.
Das spielt (fast) keine Rolle. Entscheidend ist, wann expandiert wird:
\newcommand*{\BefehlA}{\BefehlB}
\newcommand*{\BefehlB}{Befehl B}
...
\BefehlA
funktioniert einwandfrei. Probleme gibt es, bei Befehlen, die TeX bereits im Tokenizer auswertet, also vor der Expansion. Im Augenblick fallen mir da nur \if..., die zu \iffalse expandieren ein. So dürfte folgendes schief gehen:
\documentclass{article}
\begin{document}
\newcommand*{\definiereifgehtdas}{\newif\ifgehtdas}
\iffalse
  \definiereifgehtdas
  \ifgehtdas
    ja
  \else
    nein
  \fi% BOING
\else
  noch ein nein
\fi
\end{document}
Der Grund ist schlicht, dass beim \iffalse alles bis zum mit BOING markierten \fi weggeworfen wird, weil TeX zu dem Zeitpunkt \ifgehtdas noch nicht als Fallunterscheidung erkennt. Zieht man \definiereifgehtdas vor das erste \iffalse, so funktioniert es. Paketautoren machen hier übrigens gerne Fehler. Deshalb hier ein Beispiel, wie man es nicht machen sollte:
\documentclass{article}
\newcommand*{\ifgleich}[2]{\ifnum #1=#2}
\begin{document}
\iffalse
  \ifgleich{1}{2}
    gleich
  \else
    ungleich
  \fi
\else
  noch ein nein
\fi
\end{document}
Stattdessen wäre folgendes zu empfehlen:
\documentclass{article}
\newcommand*{\ifgleich}[2]{\ifnum #1=#2 
  \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
\begin{document}
\iffalse
  \ifgleich{1}{2}{gleich}{ungleich}
\else
  noch ein nein
\fi
\end{document}
Die \expandafter braucht man in dem Beispiel übrigens, damit \@firstoftwo und \@secondoftwo ihre beiden Argumente erst lesen, wenn die Fallunterscheidung beendet ist.

Edit: Ich bleibe dabei, dass ein vollständiges Minimalbeispiel eine gute Idee wäre. Dein Beispiel ist nämlich weder minimal noch vollständig.

Verfasst: Mi 7. Apr 2010, 10:57
von bloodworks
Ich hatte nur das dumpfe Gefühl, dass die Definition von \createTitlePage fehlt. Mag sein dass ich blind bin aber ich finde sie nicht. (btw: Danke für die schöne Erklärung KOMA)

Aber abgesehen davon wird textpos verwendet (-> Minimalbeispiel ist was schönes) und wenn ich das richtig sehe lässt die Verwendung die Argumente aus dem Textbereich wandern (oder wie man das auch immer nennen mag). Jedenfalls ohne textpos tut das so halbwegs.

So was in der Art:
\documentclass{scrbook}
 
\usepackage[latin1]{inputenc} 


\begin{document} 

\newcommand{\createCoverAndTitlePage}[6]{ 
   \thispagestyle{empty} 
   \begin{titlepage} 
      \begin{minipage}[c][1,78cm][c]{11,09cm}       
        \fontsize{22pt}{20pt} 
        \selectfont 
        \begin{center} 
        #1
        \end{center} 
      \end{minipage} 
    \begin{minipage}[c][4,81cm][tt]{11,09cm}   
      \linespread{1.2}   
    \fontsize{16pt}{14pt}     
    \selectfont 
    \begin{center} 
    #2 \\ \medskip 
    #3 
    \end{center} 
    \end{minipage} 
     \begin{minipage}[t][5,72cm][l]{17,57cm} 
       \fontsize{12pt}{12pt} 
       \selectfont 
         {\em Fakultät Technik und Informatik \hfill Faculty of Engineering and Computer Science}\\ 
         {\em Department Informatik \hfill Department of Computer Science} 
     \end{minipage} 
      \end{titlepage}
   }
   
   
   \createCoverAndTitlePage{adsf}{adsf}{dasf}{df}{sdf}{2}

\end{document}
...tut zumindest was es soll, auch ohne schön auszusehen. Bevor man hier aber effizient weiter machen kann wäre es schön zu wissen welche Pakete der Threadsteller denn verwendet, wobei wir wieder beim Minimalbeispiel wären.

Verfasst: Mi 7. Apr 2010, 11:11
von KOMA
Bei der Gelegenheit sei auch noch einmal auf das Projekt titlepage hingewiesen.

Verfasst: Mi 7. Apr 2010, 12:03
von hansmeia
Ok, ich danke allen Beteiligten.

Ohne jetzt noch ein Minimalbeispiel zu erstellen ist mir (wie so häufig) allein durch das Erklären der Problematik mein Problem einigermaßen klar geworden:
Ich benutze das pdfpages Paket und verwende an einer Stelle den Befehl
\includepdf
Jetzt habe ich mal ein leeres pdf inkludiert und siehe da: der Titel kommt genauso raus wie er soll.

Jetzt werde ich es auch irgendwie schaffen die Parameter auf ein anderes (vorhandenes) pdf zu drucken.


Also, danke nochmal, auch für die Hinweise bezüglich des Titel Pakets.