PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : \ifthenelse in \newcommand -> runaway def?



Andrey
26-10-2008, 12:50
Schönen guten tag allerseits.
Ich benutze MikTeX mit Texnixcenter und versuche seit gut einer Stunde den \ifthenelse in der definition eines neuen befehls zu verwenden. Auf das Wesentliche reduziert sieht es so aus:


% der erste befehl x macht von dem zweiten befehl y gebrauch
\newcommand{\x}[1]{ irgendwas hinschreiben... zaehler aktualisieren... \y{#1}}

% der zweite befehl y soll entweder leicht abgewandelten inhalt des parameters darstellen (da soll ein klammerpaar gesetzt werden), oder einfach gar nichts tun.
\newcommand{\y}[1]{
\ifthenelse{\equals{#1}{}}{}{(#1)}
}

Problem: solange ich nur \y mitten im dokumentenrumpf aufrufe, funktioniert es.
Versuche ich dagegen, \y in der definition von \x zu verwenden, fliegen irgendwelche fehlermeldungen. Diese sind selbstverständlich völlig unverständlich, und netterweiße kann man die nicht mal aus dieser bescheuerten fehlerkonsole rauskopieren (großes Lob an TeXnicCenter-entwickler... :mad:) deswegen zitiere ich die nur auszugsweise:


(1)
Extra \or
<argument> \or
...stelle, wo der fehler herkommt (ohne zeilenangaben?)
Runaway definition?

(2)
Tex capacity exceeded, nicht genug memory blah blah...

(3)
Fatal error occured, nix geht...


Dabei bin ich mir ziemlich sicher, dass ich keine klammer vergessen habe o.ä.
Außerdem ist es anscheinend egal, in welcher reihenfolge die Befehle definiert werden (dazu frage: funktioniert \newcommand eher wie methoden definition in normalen programmiersprachen, oder eher wie ein textersetzungsmakro?)
Hab versucht bei www.ctan.org irgedwas zu ifthen-package zu finden, aber da ist so ziemlich alles "Not known" außer dem package-namen selbst, oder ich hab was übersehen... :confused:

Kann mir evtl jemand einen tipp geben, warum da irgendwas schief läuft? Oder irgendein link, wo etwas genauer steht, was man bei newcommand beachten soll?

Vielen Dank im Voraus.
greetz, Andrey.

Stefan_K
26-10-2008, 15:43
Hallo Andrey,

\equals wird nicht durch ifthen definiert. Wenn ich stattdessen \equal verwende, funktioniert obiger Code bei mir, auch mit \x. Das Problem ist für mich daher nicht nachvollziehbar. Besteht es für Dich dennoch (mit \equal) oder verwendest Du andere Pakete (die \equals definieren o.a.) dann poste am besten ein Minimalbeispiel (http://minimalbeispiel.de/mini.html) statt reduziert auf Codezeilen, die sich nicht direkt testen lassen.

Übrigens kannst Du, statt hier auf TeXnicCenter bzw. dessen Entwickler zu schimpfen, das Dir samt Quelltext kostenlos vom Entwickler zur Verfügung gestellt wird, den (jetzt mehreren) Entwicklern einen Verbesserungsvorschlag für die in Arbeit befindliche neue Version schicken, per email oder im LaTeX-Community-Forum (http://www.latex-community.org/), wo es direkten TeXnicCenter-Support gibt.
Die kompletten Fehlermeldungen findest Du übrigens in der .log-Datei.

Viele Grüße,

Stefan

voss
26-10-2008, 15:56
Dabei bin ich mir ziemlich sicher, dass ich keine klammer vergessen habe o.ä.
Außerdem ist es anscheinend egal, in welcher reihenfolge die Befehle definiert werden (dazu frage: funktioniert \newcommand eher wie methoden definition in normalen programmiersprachen, oder eher wie ein textersetzungsmakro?)
Hab versucht bei www.ctan.org irgedwas zu ifthen-package zu finden, aber da ist so ziemlich alles "Not known" außer dem package-namen selbst, oder ich hab was übersehen... :confused:


ein einfaches
texdoc ifthen hätte es auch getan ...

Herbert