LuaTeX:字形属性表在 vbox 复制时不会被复制

LuaTeX:字形属性表在 vbox 复制时不会被复制

当我复制 vbox 时,其字形的属性表不会被复制。有没有什么办法可以让它工作?属性表对于 Node 渲染器来说可能听起来没什么意思,[*] 但当glyph_info使用 HarfBuzz 渲染器进行渲染时,它(就其属性而言)就很有价值了。

[*]作为奖励,请让我知道什么state=num时候财产意味着什么Renderer=Node

测试代码和截图如下(请阅读代码中的注释以了解如何运行它):

% >> lualatex glyphprops.tex
\documentclass{article}
\usepackage{fontspec}
\setmainfont[Renderer=HarfBuzz,Script=Latin]{Linux Libertine O}
% ctan version of package nodetree gives lua error on HarfBuzz, use Node instead if you don't have latest github version
%\setmainfont[Renderer=Node,Script=Latin]{Linux Libertine O}

\usepackage[callback={}]{nodetree}

\begin{document}

    \NodetreeRegisterCallback{vpack_filter}

    \setbox0=\vbox{{\hsize=2in\relax Hello world\endgraf}}

    % NOTE: Comment following for second run
    \box0

    % NOTE: Uncomment following for second run
    %\copy0

    \newpage\null

    \NodetreeUnregisterCallback{vpack_filter}

\end{document}

字形属性不会被复制\copy0

vbox 复制产生空属性

字形属性已复制?到主垂直列表\box0

原始 vbox 中可用的 vbox 属性

答案1

tl;dr:它们已经可以访问了,只需尝试在 Lua 代码中实际读取它即可。

根据 LuaTeX 手册中的记录,复制带有属性表的节点时,有两种处理属性的方法:您可以共享属性表,也可以为新副本提供一个新表,该新表使用元表“继承”旧表中的值。(LuaTeX 手册,第 8.11 节)如果加载了 luaotfload(即始终在 LuaLaTeX 中),则选择元表模式。(不要更改此内容!事情将要休息)

因此,原始节点的元表中的所有条目都可用,但是在遍历表的键时不会列出它们(如在节点树中所做的那样)。

关于state属性:这是一个会发生变化的实现细节,永远不应依赖它。虽然它目前在 LuaLaTeX 中作为属性实现,但确切的存储位置往往会时不时发生变化。(如果您确实想访问它,请使用luaotfload.fontloader.nodes.nuts.getstate。这些值标识各种功能的字形类型,可以在中找到映射luaotfload.fontloader.fonts.analyzers.states

相关内容