pgfkeys 因初始空白行而失败?

pgfkeys 因初始空白行而失败?

我正在尝试根据示例代码学习 pgfkeys如何创建带有键值的命令?。一切似乎都按预期工作,只是代码对第一个参数之前的空行敏感。有没有办法摆脱这个问题,以便下面的 MWE 中漂亮和丑陋都可以工作?(我本来以为这个问题已经得到解答了,但搜索似乎没有找到它……)

\documentclass[10pt]{article}

\usepackage{pgfkeys}

\pgfkeys{ /mycmd/.is family, /mycmd,
          default/.style = {cmdOpt = {}},
          cmdOpt/.estore in = \mycmdOpt}

\newcommand\mycmd[1][]{%
  \pgfkeys{/mycmd, default, #1}%
  Hello \mycmdOpt World.
}

\begin{document}

  \mycmd[cmdOpt = beautiful];

  \mycmd[
    cmdOpt = ugly];
\end{document}

编辑:

请注意,据我所知有两种解决方法:

\mycmd[%
   cmdOpt = ugly];

\mycmd[,
   cmdOpt = ugly];

我希望有某种东西不需要上述任何一个……

答案1

根据评论https://tex.stackexchange.com/users/3235/percusse,我尝试了以下方法,效果很好。请注意与我的原始代码相比的细微变化——逗号和 #1 之间没有空格。“,#1”而不是“, #1”。这样就行了。

\documentclass[10pt]{article}

\usepackage{pgfkeys}

\pgfkeys{ /mycmd/.is family, /mycmd,
          default/.style = {cmdOpt = {}},
          cmdOpt/.estore in = \mycmdOpt}

\newcommand\mycmd[1][]{%
  \pgfkeys{/mycmd, default,#1}%
  Hello \mycmdOpt World.
}

\begin{document}

  \mycmd[cmdOpt = beautiful];

  \mycmd[
    cmdOpt = ugly];
\end{document}

答案2

如果您想要纯粹的键处理并且不将它们与 TikZ 一起使用,您可以考虑中的 keyval 函数expl3:此代码会自动删除所有键名称开始和结尾的空格:

\documentclass[10pt]{article}

\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand \mycmd { O { } }
  {
    \keys_set:nn { mycmd } { default , #1 }
    Hello~\mycmdOpt\space World.
  }
\keys_define:nn { mycmd }
  {
    default .meta:n   = { cmdOpt = { } } ,
    cmdOpt  .tl_set:N = \mycmdOpt % You could use .tl_set_x:N ...
  }
\ExplSyntaxOff

\begin{document}

  \mycmd[cmdOpt = beautiful];

  \mycmd[
    cmdOpt = ugly];
\end{document}

相关内容