realscripts – fakescripts 可以替代单个缺失的字符吗

realscripts – fakescripts 可以替代单个缺失的字符吗

我有一个带有真实 OT 上标的字体,我可以轻松地将其与realscripts-package 一起使用。但我还需要一个上标小数点,但它不存在,因此realscripts会返回到常规形式。这是预期的行为,但我想自动替换出现的\fakesuperscript{.}任何地方\textsuperscript{.}

我尝试了一个粗暴的破解方法,我将任意 unicode 字符声明为“period.superscript”,并尝试让 Lua 将其添加到字体功能中。这两个部分可以单独工作,但不能组合使用;我怀疑 lua 指令是在 之前处理的\newunicodechar,不是吗?

有没有办法通过以某种方式改变流程的顺序来使我的黑客工作?

或者有没有其他方法可以让\fakesuperscripts 替代缺失的真实上标?对我来说,是否全部替换或是否必须逐个定义它们并不重要。任何一种解决方案都可以。

\documentclass{article}


\usepackage[no-math]{fontspec}
\setmainfont{Linux Libertine O}


\usepackage{realscripts}

\usepackage{newunicodechar}
\newunicodechar{}{\fakesuperscript{.}}

\directlua{
  fonts.handlers.otf.addfeature{
    name = "sups",
    type = "substitution",
    data = {
      period = "",
      ["period.onum"] = "",
      Q = "Ɋ",
      ["Q.onum"] = "Ɋ",
    },
  }
}


\begin{document}

I can use the defined char directly: o\textsuperscript{1}\textsuperscript{5}o

But not, as I hoped, via the superscript-command: o\textsuperscript{1.5}o

The \textsuperscript{Question} whether the Lua part works is obviously answerd by yes.

\end{document}

答案1

\newunicodechar{}{\fakesuperscript{.}}定义一个命令(活动字符)。此命令在完成任何字体相关操作之前进行处理。在 中period = "",不是命令,而是字形。它不会扩展为\fakesuperscript

我认为最简单的方法是替换有问题的符号(这也可以用 lua 来完成,我在这里使用 expl3-regex):

\documentclass{article}

\usepackage[no-math]{fontspec}
\setmainfont{Linux Libertine O}

\usepackage{realscripts}

\ExplSyntaxOn
\NewDocumentCommand\mysuperscript{m}
{
  \tl_set:Nn\l_tmpa_tl{#1}
  \regex_replace_all:nnN {\.}{\c{fakesuperscript}\cB\{\.\cE\}}\l_tmpa_tl
  \regex_replace_all:nnN {\Q}{\c{fakesuperscript}\cB\{\Q\cE\}}\l_tmpa_tl
  \textsuperscript{\l_tmpa_tl}
}

\ExplSyntaxOff
\begin{document}

o\mysuperscript{1.5}
o\mysuperscript{Question}
\end{document}

在此处输入图片描述

相关内容