我正在研究一种图形布局算法,用于 Ti 中的 graphdrawing 库钾Z,我想做的部分工作是使用边标签的长度来计算边长。如果标签过长(就用例而言可能如此),我想在 Lua 算法中为边添加“文本宽度 = xx”(其中 xx 是大小)选项。这将允许我计算调整大小的标签的边界框并将其用于边路由和节点定位。
目前,我可以访问如下添加的边缘标签:q1 ->[edge label={foolabel}] q2
在范围内
\tikz{
\graph[foo layout]{
q1,q2;
q1 ->[edge label = {foo label}] q2;
};
}
edge label
通过使用相关弧的函数访问选项options()
。为了做到这一点,我必须首先edge label
在 Lua 算法中定义一个键,如下所示:
declare {
key = "edge label",
type = "string",
summary = [["
The label of an arc.
"]],
examples = [["
q1 ->[edge label = {foo label}] q2
"]]
}
这正是图中边标签默认使用的键(当不使用 Tiquotes
时钾Z库)也就是说,如果不在lua文件中声明key,标签也会被正确应用,但无法通过函数从lua算法中访问options()
。
一旦我有了这个标签的文本,我就可以估计它在 11pt 的典型应用中会有多长,并决定是否要换行。标签中的文本可以通过添加text width = xx
到边缘的选项来换行,例如:q1 ->[edge label = {foobarboofar}, text width = 3em] q2
。
我想text width
自己在 Lua 算法中添加此选项。我尝试将其添加到generated_options
弧的字段中,如下所示(a
是相关弧):
a.generated_options = {{key="text width",value="3em"}}
但这不会对图形输出产生影响。我怀疑generated_options
显示层没有将 渲染为正常选项。在手册和代码 (SimpleHuffman.lua) 中的示例中,只有当使用 声明其键在 .tex 文件范围generated_options
内时, 才会起作用。由于我添加的选项已存在于键中,因此我希望它能够正常工作。但事实并非如此,使用我的布局将其重新添加到每个 .tex 文件中会使我的算法失去意义。\tikz
\pgfkeys{...}
此外,如果我接受无法向图表添加选项(这肯定是 的要点generated_options
?),我需要访问text width
用户现在设置的选项才能计算标签边界框。如果我尝试以与访问标签本身相同的方式执行此操作,通过在 lua 算法中声明键,它允许我读取文本宽度,但会阻止将选项应用于图表。这不会发生在 上edge label
。我觉得这非常令人困惑。
平均能量损失
\documentclass[11pt,a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{graphs}
\usetikzlibrary{graphdrawing}
\usegdlibrary{layered}
\begin{document}
\tikz{
\graph[layered layout] {
q1, q2;
q1 ->[edge label = {long label which should be wrapped by algorithm}] q2;
};
}
\end{document}
总结
如何在我的 lua 布局算法中将现有选项(例如text width
或color
)添加到图形/顶点或最好是边,以便在绘制图形时应用它们?
感谢您的任何帮助。