使用 unicode “组合上面的右箭头”在 Plain LuaTeX 中生成矢量命令

使用 unicode “组合上面的右箭头”在 Plain LuaTeX 中生成矢量命令

正如 Marcel Krüger 在他的回答中所表明的那样

使用unicode“组合上面的右箭头”生成矢量命令

可以使用“组合上面的右箭头”作为命令\vec。这极大地提高了源代码的可读性。我有一些包含大量向量的文档。

我复制了答案并尝试了一下。没问题。但我想在 Plain LuaTeX 中使用此解决方案,但尽管我没有修改代码,但字母根本没有重音。这里有什么问题?

梅威瑟:

% Plain LuaTeX
\input luaotfload.sty

\font\fourteenmath="latinmodern-math.otf:mode=base;script=math" at 14.4 pt
\textfont1=\fourteenmath

\Umathcode`x="7"1`x
\Umathcode`y="7"1`y
\protected\def\vec{\Umathaccent fixed"0"1"20D7 }

$$ \vec xy $$% Works.

\mathcode"20D7="8000
\def\aftervec{\directlua{
    local nest = tex.nest[tex.nest.ptr]
    local last = nest.tail
    if not last or not last.id == 18 then
    error'I can only put accents on simple noads.'
    end
    if last.sub or last.sup then
    error'If you want accents on a superscript or subscript, please use braces.'
    end
    local acc = node.new(21, 1)
    acc.nucleus = last.nucleus
    last.nucleus = nil
    acc.accent = node.new(23)
    acc.accent.fam, acc.accent.char = 0, 0x20D7
    print(last, nest.head)
    nest.head = node.insert_after(node.remove(nest.head, last), nil, acc)
    nest.tail = acc
    node.flush_node(last)
    }}
\letcharcode"20D7=\aftervec

$$ x⃗y $$ % x does not get accented.

\bye

答案1

Lua 代码必须知道重音符应该来自哪种字体。使用 unicode-math 包时,这并不那么重要,因为所有数学系列基本上都相同,但在本例中,字体latinmodermath-regular.otf“仅”加载在系列中1。重要的一行是

acc.accent.fam, acc.accent.char = 0, 0x20D7

这将fam数学系列 设置为0char字体插槽 设置为0x20D7。您加载了系列 1 中的字体,因此您需要

acc.accent.fam, acc.accent.char = 1, 0x20D7

而是。然后你得到

在此处输入图片描述

相关内容