在 LuaTeX 中访问特定字符

在 LuaTeX 中访问特定字符

最近,我将我的一份文档从 XeTeX 切换到 LuaTex。但是,有一个功能我暂时还看不出如何转换:访问特定字符。特别是,我需要直立的双引号。然而,在我使用的字体中,标准\dq命令会产生上部 99 个引号。因此,在 XeTeX 中,我重新定义了该命令:

\renewcommand\dq{\XeTeXglyph\XeTeXglyphindex"quotedbl"}
  1. 我一般该怎么做呢,即如何访问字体中的所有字形,无论它们放在哪里(甚至可能没有代码点)?
  2. 还有其他方法可以访问直立双引号吗?

答案1

您应该能够直接在源中输入字体中的任何字符,就像在 XeTeX 中一样。对于双引号,您需要加载字体没有选项[Ligatures=TeX](或者如果您想要大多数 TeX 替换,但不想"替换,您可以专门关闭 TeX 引号替换功能:)

\documentclass{article}
\usepackage{fontspec}
\setmainfont[Ligatures=TeX,RawFeature=-trep]{Linux Libertine O}
\begin{document}
"This is in upright quotes but will preserve e.g. --- replacement"

\addfontfeature{RawFeature=+trep}
"This has replaced quotes"

\addfontfeature{RawFeature=-trep;-tlig}
"This is in upright quotes and doesn't preserve e.g. --- replacement"
\end{document}

原始特性在luaotfload手册中有描述;其余的都是普通的fontspec。默认行为(如果您没有明确加载字体)是打开这两个特性,以模仿标准 TeX 行为。

答案2

假设您正在使用 luaotfload(如果您也使用 fontspec,则也是如此),您可以使用fonts.otf.char()采用字形名称或字形索引的 lua 函数,例如:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{TeX Gyre Pagella}

\def\fontchar#1{\directlua{fonts.otf.char("#1")}}
\def\dq{\fontchar{quotedbl}}

\begin{document}
\dq
\end{document}

相关内容