Überarbeitungsverlauf[Zurück]
Klicke auf Einblenden/Ausblenden von Überarbeitungen 3

20 Aug '14, 12:14

cgnieder's gravatar image

cgnieder
22.1k253463

Eine weitere Methode ist das Paket [`xkeyval`][1]. Das Paket ist eine Erweiterung von [`keyval`][2], einem Paket, das zum `required`-Teil einer TeX-Distribution gehört und z.B. von KOMA-Script oder `graphicx` verwendet wird. Der Standardbefehl zur Definition von Keys ist hier \define@key{<Familie>}{<Key>}[<Leerwert>]{<Code>} Und wird in dieser Form auch von `keyval` bereitgestellt. `xkeyval` erweitert den Befehl um ein weiteres optionales Argument <Präfix>, auf das ich aber nicht weiter eingehen will: \define@key[<Präfix>]{<Familie>}{<Key>}[<Leerwert>]{<Code>} Setzen kann man sie dann später mit \setkeys{<Familie>}{<Keys>} Das folgende Beispiel bastelt mein Beispiel aus der Antwort mit `pgfkeys` nach und verwendet `keyval`, der Output ist der gleiche. Auch hier werden die Keys in einer Gruppe gesetzt, damit die Werte nur für den aktuellen Gebrauch gesetzt werden. \documentclass{article} \usepackage{keyval} \makeatletter \newcommand*\name@anrede{Herr/Frau} \newcommand*\name@vorname{Vorname} \newcommand*\name@nachname{Nachname} \define@key{name}{anrede} {\renewcommand*\name@anrede{#1}} \define@key{name}{vorname} {\renewcommand*\name@vorname{#1}} \define@key{name}{nachname}{\renewcommand*\name@nachname{#1}} \newcommand*\name[1][]{% \begingroup \setkeys{name}{#1}% \name@anrede\ \name@vorname\ \name@nachname \endgroup } \makeatother \begin{document} \name\par \name[anrede=Frau,nachname=Musterfrau,vorname=Mia]\par \name \end{document} Mit `xkeyval` lässt sich das ganze etwas verkürzen. `xkeyval` kennt z.B. `\define@cmdkey`, bei dem der Wert in einem Makro gespeichert wird, das notfalls neu definiert wird. \define@cmdkey[<Präfix>]{<Familie>}[<Befehl-Präfix>]{<Name>}{<Code>} Das definierte Makro bekommt den Namen `\<Befehl-Präfix><Name>` oder – wenn `<Befehl-Präfix>` nicht vorgegeben wird – `\cmd<Präfix>@<Familie>@<Name>` . Damit wird aus dem Beispiel: \documentclass{article} \usepackage{xkeyval} \makeatletter \newcommand*\name@anrede{Herr/Frau} \newcommand*\name@vorname{Vorname} \newcommand*\name@nachname{Nachname} \define@cmdkey{name}[name@]{anrede} {} \define@cmdkey{name}[name@]{vorname} {} \define@cmdkey{name}[name@]{nachname}{} \newcommand*\name[1][]{% \begingroup \setkeys{name}{#1}% \name@anrede\ \name@vorname\ \name@nachname \endgroup } \makeatother \begin{document} \name\par \name[anrede=Frau,nachname=Musterfrau,vorname=Mia]\par \name \end{document} Definiert man die Makros vorher nicht selber, so kann man bei beiden Methoden durch Testen, ob das entsprechende Makro existiert, auch auf einfache Weise Fehlermeldungen oder anderes Verhalten etc. erreichen: \documentclass{article} \usepackage{xkeyval} \makeatletter \define@cmdkey{name}[name@]{anrede} {} \define@cmdkey{name}[name@]{vorname} {} \define@cmdkey{name}[name@]{nachname}{} \newcommand*\name[1][]{% \begingroup \setkeys{name}{#1}% \@ifundefined{name@anrede} {Herr/Frau} {\name@anrede} \@ifundefined{name@vorname} {Vorname} {\name@vorname} \@ifundefined{name@nachname} {Nachname} {\name@nachname}% \endgroup } \makeatother \begin{document} \name\par \name[anrede=Frau,nachname=Musterfrau,vorname=Mia]\par \name \end{document} [1]: http://www.ctan.org/pkg/xkeyval [2]: http://ctan.org/pkg/keyval
Klicke auf Einblenden/Ausblenden von Überarbeitungen 2

20 Aug '14, 11:55

cgnieder's gravatar image

cgnieder
22.1k253463

Eine weitere Methode ist das Paket [`xkeyval`][1]. Das Paket ist eine Erweiterung von [`keyval`][2], einem Paket, das zum `required`-Teil einer TeX-Distribution gehört und z.B. von KOMA-Script oder `graphicx` verwendet wird. Der Standardbefehl zur Definition von Keys ist hier \define@key{<Familie>}{<Key>}{<Code>} \define@key{<Familie>}{<Key>}[<Leerwert>]{<Code>} Und wird in dieser Form auch von `keyval` bereitgestellt. `xkeyval` erweitert den Befehl um ein weiteres optionales Argument <Präfix>, auf das ich aber nicht weiter eingehen will: \define@key[<Präfix>]{<Familie>}{<Key>}[<Leerwert>]{<Code>} Setzen kann man sie dann später mit \setkeys{<Familie>}{<Keys>} Das folgende Beispiel bastelt mein Beispiel aus der Antwort mit `pgfkeys` nach, nach und verwendet `keyval`, der Output ist der gleiche. Auch hier werden die Keys in einer Gruppe gesetzt, damit die Werte nur für den aktuellen Gebrauch gesetzt werden. \documentclass{article} \usepackage{xkeyval} \usepackage{keyval} \makeatletter \newcommand*\name@anrede{Herr/Frau} \newcommand*\name@vorname{Vorname} \newcommand*\name@nachname{Nachname} \define@key{name}{anrede} {\renewcommand*\name@anrede{#1}} \define@key{name}{vorname} {\renewcommand*\name@vorname{#1}} \define@key{name}{nachname}{\renewcommand*\name@nachname{#1}} \newcommand*\name[1][]{% \begingroup \setkeys{name}{#1}% \name@anrede\ \name@vorname\ \name@nachname \endgroup } \makeatother \begin{document} \name\par \name[anrede=Frau,nachname=Musterfrau,vorname=Mia]\par \name \end{document} Mit `xkeyval` lässt sich das ganze etwas verkürzen. `xkeyval` kennt z.B. `\define@cmdkey`, bei dem der Wert in einem Makro gespeichert wird, das notfalls neu definiert wird. \define@cmdkey[<Präfix>]{<Familie>}[<Befehl-Präfix>]{<Name>}{<Code>} Das definierte Makro bekommt den Namen `\<Befehl-Präfix><Name>` oder – wenn `<Befehl-Präfix>` nicht vorgegeben wird – `\cmd<Präfix>@<Familie>@<Name>` . Damit wird aus dem Beispiel: \documentclass{article} \usepackage{xkeyval} \makeatletter \newcommand*\name@anrede{Herr/Frau} \newcommand*\name@vorname{Vorname} \newcommand*\name@nachname{Nachname} \define@cmdkey{name}[name@]{anrede} {} \define@cmdkey{name}[name@]{vorname} {} \define@cmdkey{name}[name@]{nachname}{} \newcommand*\name[1][]{% \begingroup \setkeys{name}{#1}% \name@anrede\ \name@vorname\ \name@nachname \endgroup } \makeatother \begin{document} \name\par \name[anrede=Frau,nachname=Musterfrau,vorname=Mia]\par \name \end{document} [1]: http://www.ctan.org/pkg/xkeyvalhttp://www.ctan.org/pkg/xkeyval [2]: http://ctan.org/pkg/keyval
Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

12 Aug '14, 21:30

cgnieder's gravatar image

cgnieder
22.1k253463

Willkommen, erstes Mal hier? Schau mal unter FAQ!

×