Festlegen eines bestimmten Schlüssels (und Werts) abhängig vom Status des \if-Makros

Festlegen eines bestimmten Schlüssels (und Werts) abhängig vom Status des \if-Makros

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`

\ifIch 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 \somekeycommandist 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}

Bildbeschreibung hier eingeben

Hier sind meine älteren Fragen:

Antwort1

Beachten Sie, dass \setkeysdas 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}

Bildbeschreibung hier eingeben

verwandte Informationen