PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : keyval mit 2 Argumenten



AureusPhoenix
29-11-2013, 12:34
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

\define@key{Gin}{replace}{\write18{#1}\write18{#2} }

Im tex-code

\includegraphics[width=0.5\textwidth, replace={Text1}{Text2}]{bild}

Besten Dank schonmal im Voraus!
Grüße

klops
29-11-2013, 13:52
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 (http://texwelt.de/wissen/fragen/569/was-ist-ein-vollstandiges-minimalbeispiel-oder-kurz-vm-und-wie-erstelle-ich-dieses)) 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:
\documentclass{article}
\usepackage{keyval}
\makeatletter
\define@key{AreusPhoenix}{replace}{\process@AreusP hoenix@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:
\documentclass{article}
\usepackage{keyval}
\makeatletter
\define@key{AreusPhoenix}{replace}{\process@AreusP hoenix@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}

AureusPhoenix
29-11-2013, 15:38
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!