Anzeige:
Ergebnis 1 bis 3 von 3

Thema: befehle und keys innerhalb von makros erzeugen

  1. #1
    Registrierter Benutzer
    Registriert seit
    26.07.2008
    Ort
    Dresden
    Beiträge
    136

    befehle und keys innerhalb von makros erzeugen

    Ich würde gern ein Makro erzeugen, dass für eine Zeichenkette eine Anzahl von Befehlen und keys erzeugt. Dabei soll zum Beispiel die Ausdrücke
    Code:
    %	\makeatletter
    %	\define@key{mytype}{methode}{%
    %	\def\mytypemethode{#1}}
    %	\presetkeys{mytype}{methode={Voreinstellung}}{}
    %	\makeatother
    nicht nur für "methode", sondern auch andere Ausdrücke definiert werden.
    MB:
    Code:
    \documentclass{scrartcl}
    \usepackage{xkeyval}
    
    %%%%%%%diese Makros automatisieren
    %	\makeatletter
    %	\define@key{mytype}{methode}{%
    %	\def\mytypemethode{#1}}
    %	\presetkeys{mytype}{methode={Voreinstellung}}{}
    %	\makeatother
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    \makeatletter
    \newcommand{\makenewtype}[1]{%1. keydef und Makro \mytype#1 erzeugen
    	\define@key{mytype}{#1}{%
    		\expandafter\def\expandafter*\expandafter{\csname mytype#1\endcsname}{##1}
    	}
    	\presetkeys{mytype}{#1={Voreinstellung}}{}
    }
    \makeatother
    \makenewtype{methode}
    
    \newcommand{\printtype}[1]{%Ausgabe
    	\setkeys{mytype}{#1}
    	\mytypemethode
    }
    
    \begin{document}
    
    \printtype{}%Voreinstellung
    \printtype{methode={\\lokal einstellung}}
    
    \end{document}
    Ich bekomme es leider nicht hin, die Befehle zu erzeugen. Wer kann mir helfen?
    Danke

  2. #2
    Registrierter Benutzer Avatar von sommerfee
    Registriert seit
    02.07.2006
    Beiträge
    1.603
    Zitat Zitat von rafael Beitrag anzeigen
    \expandafter\def\expandafter*\expandafter{\csname mytype#1\endcsname}{##1}
    Der * (Wozu ist der gedacht) und die Klammern um \csname...\endcsname stören (bei \newcommand sind die erlaubt, bei \def aber nicht), es muß also heißen:

    Code:
    \expandafter\def\csname mytype#1\endcsname{##1}
    oder

    Code:
    \@namedef{mytype#1}{##1}
    (\@namedef ist im LaTeX-Kernel als Abkürzung zu obrigem Code definiert)

    Außerdem sind in deinen Makrodefinitionen einige Leerzeichen enthalten, die später bei der Benutzung Ärger machen könnten. Ich habe sie mal hier mittels % entfernt:

    Code:
    \documentclass{scrartcl}
    \usepackage{xkeyval}
    
    %%%%%%%diese Makros automatisieren
    %	\makeatletter
    %	\define@key{mytype}{methode}{%
    %	\def\mytypemethode{#1}}
    %	\presetkeys{mytype}{methode={Voreinstellung}}{}
    %	\makeatother
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    \makeatletter
    \newcommand{\makenewtype}[1]{%1. keydef und Makro \mytype#1 erzeugen
    	\define@key{mytype}{#1}{%
    		\@namedef{mytype#1}{##1}%
    	}%
    	\presetkeys{mytype}{#1={Voreinstellung}}{}%
    }
    \makeatother
    \makenewtype{methode}
    
    \newcommand{\printtype}[1]{%Ausgabe
    	\setkeys{mytype}{#1}%
    	\mytypemethode
    }
    
    \begin{document}
    
    \printtype{}%Voreinstellung
    \printtype{methode={\\lokal einstellung}}
    
    \end{document}
    Siehe auch: http://www.komascript.de/signifikanteLeerzeichen
    Geändert von sommerfee (09-08-2011 um 10:05 Uhr)

  3. #3
    Registrierter Benutzer
    Registriert seit
    26.07.2008
    Ort
    Dresden
    Beiträge
    136
    Zitat Zitat von sommerfee Beitrag anzeigen
    Der * (Wozu ist der gedacht) und die Klammern um \csname...\endcsname stören (bei \newcommand sind die erlaubt, bei \def aber nicht), es muß also heißen:

    Code:
    \expandafter\def\csname mytype#1\endcsname{##1}
    oder

    Code:
    \@namedef{mytype#1}{##1}
    (\@namedef ist im LaTeX-Kernel als Abkürzung zu obrigem Code definiert)
    Danke, ich hatte mal einen Codeschnipsel von Herbert Voss aus einem Forum gezogen und mit \newcommand gearbeitet hat. Ich hatte dann die Sache einfach geändert, und es gab bis heute keine Probleme. Aber durch deine Ausführung verstehe ich die Sache schon besser.

    Die Sache mit den Leerzeichen... ja da hast du recht.
    Also danke noch mal

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •