将选项传递给宏

将选项传递给宏

背景

我们正在使用 LuaTeX 为 TikZ 开发一个自动图形绘制框架。pgf 层上的 TeX 接口已基本完成,下一步将是 TikZ 层。TikZ 的创建者 Till Tantau 给了我们很多帮助,但他的时间很少。

大部分工作已经完成,但还缺少一些细节。算法可以工作,将节点传递给 lua 并稍后将它们发送回去,边缘也是如此。当我继续处理 pgf 层时,我在将参数传递给宏时遇到了问题。

问题

一些图形绘制算法需要选项,例如树的根节点或节点应以哪种样式排列。保存选项后\node[options]没有问题,但如何自己实现这样的选项处理?我已经阅读了 TikZ 手册的特定 pgfkeys 部分并在 Google 上进行了大量搜索,但尚未找到我需要的内容。

这个想法是这样的(它非常简单地展示了我想要的东西!)

我们在TeX层面上有一些接口函数来选择算法等等。

\def\pgfgdsetalgorithm...{..call some lua functions here..}

有些算法,比如树绘制算法,需要显式的根节点。调用现在可能是这样的

\pgfgdsetalgorithm[rootnode=nodexy]{treedrawing}

读过这些例子后,我现在知道用户使用这些选项非常舒服,但实现起来却很难。

有人有一个简单的例子或者一个好的教程以便我可以继续吗?

提前致谢!

答案1

为了进一步阐述威尔的回答,最初的出发点应该是这样的

\pgfqkeys{setalgorithm}{%
  rootnode .code = \pgfkeys{/node = #1}
}
\def\pgfgdsetalgorithm{%
  \pgfutil@ifnextchar[%]
    {\pgfgdsetalgorithm@}
    {\pgfgdsetalgorithm@[]}%
}
\def\pgfgdsetalgorithm@[#1]#2{%
  \pgfqkeys{setalgorithm}{#1}%
  % Stuff with #2
}

这里,我使用了pgf的版本,\@ifnextchar以与格式无关的方式设置了可选参数。我不太清楚您到底需要用密钥做什么,所以目前我只是假设您会将密钥转换rootnode为名为 的普通pgf密钥node:我预计这还不止于此!

答案2

我不清楚你到底遇到了什么问题,但你可能会发现 Joseph Wright 关于 LaTeX 中的键值处理的文章很有帮助:

http://www.tug.org/TUGboat/tb30-1/tb94wright-keyval.pdf

部分pgfkeys已接近尾声。

(插播:这篇文章发表于 12 个月前,现已可以免费获取,但 TUG 会员可以获取此类文章的纸质版或立即获取电子版;我强烈建议支持他们!)

答案3

如果我是你,我只会将选项传递给 lua 并将文本解析为表格。lualibs 包(字符串模块)具有解析选项和键/值的功能,我会尝试这样做并省去各种基于 tex 的键/值解析包的头痛(和疯狂)。

相关内容