与使用unicode“组合上面的右箭头”生成矢量命令,我想使用 U+0332 “ ̲ ” 作为 的“图形”别名\underline
。
我不了解 Lua,所以我不知道如何调整此代码来实现这一点。请注意,这不被视为数学重音(虽然不确定为什么),因此不仅仅是用 替换三个20D7
实例0332
,我试过,但没有得到预期的结果(条形图的位置太高)。这实际上与\underline
内容周围的 具有相同的效果,因此例如以下 MWE 中的两行都会产生相同的输出:
\documentclass{standalone}
\begin{document}
$\underline{j}$
$j̲$
\end{document}
我当然也会接受没有 Lua 的解决方案,只是考虑到链接的问题,我认为 Lua 可能是最简单的解决方案。
答案1
基本上,在我对链接问题的回答中,需要对代码进行两处更改,以使其能够处理其他字符下方的重音符号:
- 首先,您不仅需要扫描
\mathaccent
代码点(始终位于字符上方),还需要扫描(用于底部重音符号\mathbotaccentwide
的类型)。unicode-math-table.tex
- 此外,Lua 代码必须更改为保存重音参数,
bot_accent
而不是accent
告诉 LuaTeX 将它们放在底部。
这可以通过(基于上一个问题的代码)来完成
\documentclass{article}
\usepackage{unicode-math}
\protected\def\afteracc{\directlua{
local nest = tex.nest[tex.nest.ptr]
local last = nest.tail
if not (last and 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
local is_bottom = token.scan_keyword'bot' and 'bot_accent' or 'accent'
acc[is_bottom] = node.new(23)
acc[is_bottom].fam, acc[is_bottom].char = 0, token.scan_int()
nest.head = node.insert_after(node.remove(nest.head, last), nil, acc)
nest.tail = acc
node.flush_node(last)
}}
\AtBeginDocument{
\begingroup
\def\UnicodeMathSymbol#1#2#3#4{%
\ifx#3\mathaccent
\def\mytmpmacro{\afteracc#1 }%
\global\letcharcode#1=\mytmpmacro
\global\mathcode#1="8000
\else\ifx#3\mathbotaccentwide
\def\mytmpmacro{\afteracc bot#1 }%
\global\letcharcode#1=\mytmpmacro
\global\mathcode#1="8000
\fi\fi
}
\input{unicode-math-table}
\endgroup
}
\begin{document}
$x̃ŷz̄x⃗y̲z$
\end{document}
这里的下划线与 创建的下划线不同,\underline
但它将是由\mathunderbar
(unicode-math
的 U+0332 名称) 创建的下划线。
如果你不想要 U+0332 版本的字体,而是想要 TeX 画一条线\underline
,那么你可以将数学类设置为under
(10) (对应于下划线):
\documentclass{article}
\usepackage{unicode-math}
\protected\def\afterunder{\directlua{
local last = tex.nest.top.tail
if not (last and last.id == 18) then
tex.error'I can only put underlines under simple noads.'
elseif last.sub or last.sup then
tex.error'If you want underlines on a superscript or subscript, please use braces.'
else
last.subtype = 10
end
}}
\AtBeginDocument{
\letcharcode"0332=\afterunder
\mathcode"0332="8000
}
\begin{document}
$\underline{y}+y̲$
\end{document}