%20abh%C3%A4ngig%20vom%20Status%20des%20%5Cif-Makros.png)
Diese Frage ist im Grunde eine Fortsetzung von zwei älteren Fragen, die ich vor einem Jahr gestellt habe, ist aber eigentlich eine Folge des Versuchs, eine Lösung für diese Frage zu finden:
Verwenden Sie Umschalter in biblatex `printbibliography`
\if
Ich möchte einen Befehl mit einem Schlüssel-Wert-Setup mit einer Anweisung (Pseudocode) verwenden.
\somekeycommand[\ifdisplay somekey=A \else someotherkey=B]
so dass je nach Zustand der Variablen ein bestimmter Schlüssel gesetzt wird \ifdisplay
.
Leider funktioniert keiner der verschiedenen Ansätze, auch der \begingroup\edef\x{\endgroup\noexpand....}\x
-Trick ist nicht von Erfolg gekrönt.
Bitte beachten Sie, dass ichnichtMöchte benutzen
\ifdisplay
\somekeycommand[somekey=A]
\else
\somekeycommand[someotherkey=B]
\fi
Das eigentliche \somekeycommand
ist Code aus einem Paket, das Makro verwendet\setkeys
Hier ist das versagende MWE
\documentclass{article}
\usepackage{etoolbox}
\usepackage{xparse}
\usepackage{xkeyval}
\makeatletter
\define@key{myfam}{somekey}{%
\def\somekeyvalue{#1}%
}
\define@key{myfam}{someotherkey}{%
\def\somekeyothervalue{#1}%
}
\makeatother
\NewDocumentCommand{\somekeycommand}{+O{}}{%
\begingroup
\setkeys{myfam}{#1}%
\ifdef{\somekeyvalue}{%
Key was \somekeyvalue%
}{%
}%
\endgroup
}%
\newif\ifdisplay
\displayfalse
\begin{document}
\somekeycommand[somekey=A]
\edef\x{%
\expandafter\noexpand\csname ifdisplay\endcsname%
somekey=A%
\noexpand\else%
someotherkey=B%
\noexpand\fi%
}%
\somekeycommand[\x] % fails
\somekeycommand\expandafter[\x] % fails --> expands to [ \expanded value ]
\somekeycommand[\expandafter\begingroup\edef\x{%
\ifdisplay
somekey=A%
\else%
someotherkey=B%
\fi%
}\x] %% -> fails, prints someotherkey=B,
\expandafter\somekeycommand[\begingroup\edef\x{%
\noexpand\ifdisplay
somekey=A%
\noexpand\else%
someotherkey=B%
\noexpand\fi%
}\x] %% -> fails, prints someotherkey=B,
\end{document}
Hier sind meine älteren Fragen:
Antwort1
Beachten Sie, dass \setkeys
das zweite Argument dadurch nicht erweitert wird. Ich bin nicht sicher, was Sie wollen, aber das funktioniert.
\documentclass{article}
\usepackage{etoolbox}
\usepackage{xparse}
\usepackage{xkeyval}
\makeatletter
\define@key{myfam}{somekey}{%
\def\somekeyvalue{#1}%
}
\define@key{myfam}{someotherkey}{%
\def\somekeyothervalue{#1}%
}
\makeatother
\NewDocumentCommand{\somekeycommand}{+O{}}{%
\begingroup
\setkeys{myfam}{#1}%
\ifdef{\somekeyvalue}
{Key was \somekeyvalue}
{\ifdef{\somekeyothervalue}{Other key was \somekeyothervalue}{}}%
\endgroup
}%
\newif\ifdisplay
\displayfalse
\begin{document}
\begingroup\edef\x{\endgroup\noexpand
\somekeycommand\expandafter[\ifdisplay somekey=A\else someotherkey=B\fi]%
}\x
\displaytrue
\begingroup\edef\x{\endgroup\noexpand
\somekeycommand\expandafter[\ifdisplay somekey=A\else someotherkey=B\fi]%
}\x
\end{document}