Anzeige:
Ergebnis 1 bis 3 von 3

Thema: keyval mit 2 Argumenten

  1. #1
    Registrierter Benutzer Avatar von AureusPhoenix
    Registriert seit
    20.02.2010
    Beiträge
    91

    keyval mit 2 Argumenten

    Hi Leute,
    ich bin grad dabei zum ersten mal mit keyval's bzw. dem xkeyval Paket zu arbeiten. Zu meiner Fragen:
    Ist es möglich einen key zu definieren, der 2 Argumente enthält?

    Also etwas in derart:

    In der Definition
    Code:
    \define@key{Gin}{replace}{\write18{#1}\write18{#2}}
    Im tex-code
    Code:
    \includegraphics[width=0.5\textwidth, replace={Text1}{Text2}]{bild}
    Besten Dank schonmal im Voraus!
    Grüße

  2. #2
    Registrierter Benutzer
    Registriert seit
    09.12.2005
    Beiträge
    1.327
    Zunächst solltest Du Gin nicht verwenden. Das wird schon von einem bekannten Paket verwendet. Sonst bekommst Du möglicherweise irgendwann Probleme. Desweiteren solltest Du immer ein vollständiges Minimalbeispiel (siehe VM-Anleitung) erstellen, damit man was zum Testen hat.

    Jetzt zu Deiner Frage: Direkt geht das nicht. Man kann aber Umwege definieren, mit denen es doch geht. Primitive Lösung:
    Code:
    \documentclass{article}
    \usepackage{keyval}
    \makeatletter
    \define@key{AreusPhoenix}{replace}{\process@AreusPhoenix@replace#1\@empty\@empty}
    \newcommand*{\process@AreusPhoenix@replace}[2]{%
      \begin{tabular}{ll}
        1: & #1\\
        2: & #2\\
      \end{tabular}
    }
    \makeatother
    \begin{document}
    \setkeys{AreusPhoenix}{replace={das sind}{zwei Argument}}
    \bigskip
    
    Allerdings funktionieren so zwei Argumente nicht:
    \setkeys{AreusPhoenix}{replace=das ist nicht nur ein Argument}
    
    \end{document}
    Soll es sowohl mit ein, als auch mit zwei Argumenten funktionieren, muss man schon deutlich mehr investieren, beispielsweise und ansatzweise:
    Code:
    \documentclass{article}
    \usepackage{keyval}
    \makeatletter
    \define@key{AreusPhoenix}{replace}{\process@AreusPhoenix@replace#1\@empty\@empty\@empty\@nil}
    \newcommand*{\process@AreusPhoenix@replace}{}%
    \def\process@AreusPhoenix@replace#1#2#3\@nil{%
      \def\reserved@a{\@empty\@empty\@empty}%
      \def\reserved@b{#3}%
      \ifx\reserved@a\reserved@b
        Zwei Argument:
        \begin{tabular}{ll}
          1 & #1.\\
          2 & #2.\\
        \end{tabular}
      \else
        Ein Argument: #1#2#3.
      \fi
    }
    \makeatother
    \begin{document}
    \ttfamily
    \setkeys{AreusPhoenix}{replace={das sind}{zwei Argument}}
    \bigskip
    
    \setkeys{AreusPhoenix}{replace=das ist ein Argument}
    \end{document}
    Geändert von klops (29-11-2013 um 14:01 Uhr)

  3. #3
    Registrierter Benutzer Avatar von AureusPhoenix
    Registriert seit
    20.02.2010
    Beiträge
    91
    Hi, erstmal sorry für das "fehlende" Minimalbeispiel. Ich habe die Frage für zu Allgemein gehalten als das ein Minimalbeispiel Sinn machen würde. Bei anderen fragen sende ich meistens eins mit.

    Ich werd deinen Code sobald wie möglich ausprobieren!
    VIELEN DANK!

Lesezeichen

Berechtigungen

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