使用 unicode COMBINING LOW LINE (U+0332) 作为下划线

使用 unicode COMBINING LOW LINE (U+0332) 作为下划线

使用unicode“组合上面的右箭头”生成矢量命令,我想使用 U+0332 “ ̲ ” 作为 的“图形”别名\underline

我不了解 Lua,所以我不知道如何调整此代码来实现这一点。请注意,这不被视为数学重音(虽然不确定为什么),因此不仅仅是用 替换三个20D7实例0332,我试过,但没有得到预期的结果(条形图的位置太高)。这实际上与\underline内容周围的 具有相同的效果,因此例如以下 MWE 中的两行都会产生相同的输出:

\documentclass{standalone}
\begin{document}
    $\underline{j}$
    $j̲$
\end{document}

我当然也会接受没有 Lua 的解决方案,只是考虑到链接的问题,我认为 Lua 可能是最简单的解决方案。

答案1

基本上,在我对链接问题的回答中,需要对代码进行两处更改,以使其能够处理其他字符下方的重音符号:

  1. 首先,您不仅需要扫描\mathaccent代码点(始终位于字符上方),还需要扫描(用于底部重音符号\mathbotaccentwide的类型)。unicode-math-table.tex
  2. 此外,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}

在此处输入图片描述

相关内容