在 pgfkeys 中将命令作为选项传递

在 pgfkeys 中将命令作为选项传递

我想传递一个命令作为选项,以便该命令应用于参数,例如

\PrintSomething{opt = \makebox[5cm]{\textbf{\sffamily #1}}}{Hello}

它应该在框中显示单词 Hello,sffamily,粗体。

我不知道该怎么做,所以这里是 M(non-W)E

\documentclass{article}

\usepackage{xparse}
\usepackage{pgfkeys}

\begin{document}

\pgfkeys{
    /Section/.is family,
    /Section,
    %
    default/.style = {
        opt         =   {},
    },
    opt = \Format
}

\NewCommandCommand{\PrintSomething}{ m m }{%
    \pgfkeys{/Section, default, #1}
    \Format{#2}
}

\PrintSomething{opt = \makebox[5cm]{\textbf{\sffamily #1}}}{Hello}

\end{document}

答案1

您可以使用由您的密钥定义的辅助宏opt。请注意,在第一次\pgfkeys调用中,您需要将#那些不应表示该.code或的实际参数的参数加倍.style

另外,我还删除了您的 中的几个虚假空格\PrintSomething,并将第一个参数设为可选参数,默认为空。

\documentclass{article}

\usepackage{xparse}
\usepackage{pgfkeys}

\pgfkeys{
  /Section/.is family,
  /Section,
  %
  default/.style = {
    % will define \PrintSomethingAUX to just directly output its argument
    opt = ##1,
  },
  opt/.code = {\long\def\PrintSomethingAUX##1{#1}},
}

\NewDocumentCommand{\PrintSomething}{ O{} m }{%
  \pgfqkeys{/Section}{default,#1}%
  \PrintSomethingAUX{#2}%
}

\begin{document}

\PrintSomething[opt = \makebox[5cm]{\textbf{\sffamily #1}}]{Hello}

\end{document}

相关内容