我想传递一个命令作为选项,以便该命令应用于参数,例如
\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}