Probleme bei neuem command mit Parametern

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


hansmeia
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Mi 7. Apr 2010, 09:56

Probleme bei neuem command mit Parametern

Beitrag 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.

Xenara
Forum-Meister
Forum-Meister
Beiträge: 682
Registriert: Mi 25. Nov 2009, 09:41

Beitrag 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?

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag 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.
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


hansmeia
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Mi 7. Apr 2010, 09:56

Beitrag 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.
Dateianhänge
beispiel.zip
(6.19 KiB) 651-mal heruntergeladen

hansmeia
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Mi 7. Apr 2010, 09:56

Beitrag 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)

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag 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.

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag 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.
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Bei der Gelegenheit sei auch noch einmal auf das Projekt titlepage hingewiesen.

hansmeia
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Mi 7. Apr 2010, 09:56

Beitrag 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.

Antworten