背景
我们正在使用 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 的键/值解析包的头痛(和疯狂)。