修复收集所有箱子时的错误

修复收集所有箱子时的错误

我厌倦了代码回答安排加载的图像includegraphics但出现一些我无法修复的错误。以下代码

module(...,package.seeall)

local function get_boxes(parent)
  local boxes = {}
  for n in node.traverse(parent.head) do
    if n.width or n.height or n.depth then
      table.insert(boxes, {
        w = n.width,
        h = n.height + n.depth, 
        box = node.copy(n),
      })
    end
  end
  return boxes
end

产生此错误:

generativelayout.lua:9: attempt to perform arithmetic on a nil value (field 'height')
stack traceback:
        ./generativelayout.lua:9: in upvalue 'get_boxes'
        ./generativelayout.lua:100: in function 'generativelayout.process'
        [\directlua]:1: in main chunk.
\endgenlayout ->\egroup \directlua {gen.process()}

有没有办法来解决这个问题?

该代码不适用于建议的fbox节点(在链接的示例中),也不适用于由生成的节点includegraphics。由哪种节点类型生成的节点includegraphics以及它们具有宽度和高度吗?

答案1

由于您优化了二维对象的放置,因此您只对真正延伸到二维的对象感兴趣,因此需要水平(width)和垂直(heightdepth)维度。仅在一个方向上延伸的对象(例如空白)不相关。因此,您可以让您的测试更具体:

代替

if n.width or n.height or n.depth then

if n.width and n.height and n.depth then

仅查看包含所有三个字段的节点,例如 hlists、vlists 和规则(在 LuaTeX 中,图像在内部被视为规则)。

相关内容