Wie optionalen Parameter zur Steuerung nutzen?

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Wie optionalen Parameter zur Steuerung nutzen?

von hezo » Mi 16. Okt 2013, 12:14

Vielen Dank, das funktioniert ganz prima. Ich werde dann mal versuchen was es mit dem \exandafter und dem keyval auf sich hat.

von u_fischer » Mi 16. Okt 2013, 11:37

Hm. Also den \color-Befehl umzudefinieren, führt bestimmt in die Hölle.

Setze die Farben besser so:
\newcommand{\mytodo}[2][]% works fine
    {\ifthenelse%
       {\equal{#1}{done}}%
       {\colorlet{mycolor}{green!10}}%
       {\colorlet{mycolor}{green!70}}%
       \todo[color=mycolor]{#2}%
    }
Du kannst keine Befehle mit Unterstrichen definieren (außer du änderst vorher den \catcode. Ändere die Namen zu \mynolist oder ähnliches.

Und verstecke die Kommas (und auch Gleichheitszeichen) nicht in Befehlen. Das bringt das keyval-System durcheinander.
D.h. weder \def\mysetcolor{color=green} noch \def\mynolist{, nolist} wird funktionien.

Falls du planst ganze Listen in Befehlen zu speichern, müsste sowas gehen:

\def\mykeylist{color=green, nolist, ...}
\expandafter\todo\expandafter[\mylist]{#2}

Wie optionalen Parameter zur Steuerung nutzen?

von hezo » Mi 16. Okt 2013, 11:24

Hallo,

ich versuche einen Befehl zu schreiben, der im Wesentlichen nur den todo Befehl aus dem Paket todonotes mit unterschiedlichen Parametern aufruft. Zur Steuerung möchte ich einen optionalen Parameter benutzen, und in Abhängigkeit von diesem den optionalen Parameter für den todo Befehl setzen. Mein Befehl soll wie folgt funktionieren:

\mytodo{irgendwas} erzeugt normalen \todo{irgendwas}
\mytodo[done]{irgendwas} soll (z.B.) \todo[color=green!10, nolist]{irgendwas} erzeugen

Ich verstehe nicht warum der erste Block im folgenden Code funktioniert, und die beiden auskommentierten nicht. Mir geht es bei diesem Post nicht darum die gewünschte Funktion mit einer ganz anderen Herangehensweise hinzubekommen, sondern darum zu verstehen warum mein Ansatz nicht funktioniert, um für die Zukunft dazuzulernen.

Vielen Dank schonmal für jede Hilfe.
\documentclass{article}

\usepackage{todonotes}
\usepackage{ifthen}

\newcommand{\mytodo}[2][]% works fine
	{\ifthenelse%
		{\equal{#1}{done}}%
		{\def\color{green!10}}%
		{\def\color{green!70}}%
		\todo[color=\color]{#2}%
	}

%\newcommand{\mytodo}[2][]% does not work
%	{\ifthenelse%
%		{\equal{#1}{done}}%
%		{\def\color{green!10}\def\in_list{, nolist}}%
%		{\def\color{green!70}\def\in_list{ }}%
%		\todo[color=\color \in_list]{#2}%
%	}

%\newcommand{\mytodo}[2][]% does not work
%	{\ifthenelse%
%		{\equal{#1}{done}}%
%		{\def\set_color{color=green!10}}%
%		{\def\set_color{color=green!70}}%
%		\todo[\set_color]{#2}%
%	}

\begin{document}

	Just some useless \todo[color=green!70]{this is in todolist} text,\newline and some more \todo[color=green!10, nolist]{this is not in todolist} text.

	Just some useless \mytodo{this is in todolist} text,\newline and some more \mytodo[done]{should not be in todolist} text.
	
	\listoftodos

\end{document}

Nach oben