Установка определенного ключа (и значения) в зависимости от состояния макроса \if

Установка определенного ключа (и значения) в зависимости от состояния макроса \if

Этот вопрос по сути является продолжением двух старых вопросов, которые я опубликовал год назад, но на самом деле является следствием попытки найти решение этого вопроса:

Используйте переключатели в biblatex `printbibliography`

Я хочу использовать команду с настройкой «ключ-значение» с \ifоператором (псевдокод)

\somekeycommand[\ifdisplay somekey=A \else someotherkey=B]

таким образом, что некоторый конкретный ключ устанавливается в соответствии с состоянием переменной \ifdisplay.

К сожалению, ни один из подходов не работает, даже \begingroup\edef\x{\endgroup\noexpand....}\xтрюк - не является успешным.

Обратите внимание, что янехочу использовать

\ifdisplay
\somekeycommand[somekey=A]
\else
\somekeycommand[someotherkey=B]
\fi

Фактически \somekeycommandэто некоторый код из пакета, макрос использует\setkeys

Вот неудавшийся 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}

введите описание изображения здесь

Вот мои старые вопросы:

решение1

Обратите внимание, что это \setkeysне расширяет его второй аргумент. Я не уверен, что вы ищете, но это работает.

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

введите описание изображения здесь

Связанный контент