![LuaTeX:字形属性表在 vbox 复制时不会被复制](https://linux22.com/image/421433/LuaTeX%EF%BC%9A%E5%AD%97%E5%BD%A2%E5%B1%9E%E6%80%A7%E8%A1%A8%E5%9C%A8%20vbox%20%E5%A4%8D%E5%88%B6%E6%97%B6%E4%B8%8D%E4%BC%9A%E8%A2%AB%E5%A4%8D%E5%88%B6.png)
当我复制 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
:
字形属性已复制?到主垂直列表\box0
:
答案1
tl;dr:它们已经可以访问了,只需尝试在 Lua 代码中实际读取它即可。
根据 LuaTeX 手册中的记录,复制带有属性表的节点时,有两种处理属性的方法:您可以共享属性表,也可以为新副本提供一个新表,该新表使用元表“继承”旧表中的值。(LuaTeX 手册,第 8.11 节)如果加载了 luaotfload(即始终在 LuaLaTeX 中),则选择元表模式。(不要更改此内容!事情将要休息)
因此,原始节点的元表中的所有条目都可用,但是在遍历表的键时不会列出它们(如在节点树中所做的那样)。
关于state
属性:这是一个会发生变化的实现细节,永远不应依赖它。虽然它目前在 LuaLaTeX 中作为属性实现,但确切的存储位置往往会时不时发生变化。(如果您确实想访问它,请使用luaotfload.fontloader.nodes.nuts.getstate
。这些值标识各种功能的字形类型,可以在中找到映射luaotfload.fontloader.fonts.analyzers.states
)