\^m 存在于 LuxiMono Type1 中,但不存在于 LuxiMono OpenType 中

\^m 存在于 LuxiMono Type1 中,但不存在于 LuxiMono OpenType 中

正如以下 MCE 所指出的,\^m存在于 LuxiMono Type1 字体中,但不存在于其 OpenType 对应部分中(结果lualatex比更奇怪xelatex)。

\documentclass{article}
\usepackage{iftex}
\ifpdftex
\usepackage[T1]{fontenc}
\usepackage[scaled=0.85]{luximono}
\else
\usepackage{fontspec}
\setmonofont[Scale=0.85]{Luxi Mono}
\fi
%
\pagestyle{empty}
%
\begin{document}
\ttfamily\^m
\end{document}

是否可以使用 OpenType LuxiMono 获取此字符?

答案1

如果您所指的 Luxi Mono 字体是 X11 系统提供的字体,您可以调整它们的编码,以使用不同的方式来排版重音。

\documentclass{article}
\usepackage{fontspec}

\makeatletter
\DeclareUnicodeEncoding{luxi}{
  \input{tuenc.def}
  \DeclareTextCommand{\^}{\UnicodeEncodingName}[1]{\accent"02C6\relax#1}
  \DeclareUnicodeComposite{\^}              {}{"005E}
  \DeclareUnicodeComposite{\^}             {A}{"00C2}
  \DeclareUnicodeComposite{\^}             {E}{"00CA}
  \DeclareUnicodeComposite{\^}             {I}{"00CE}
  \DeclareUnicodeComposite{\^}             {O}{"00D4}
  \DeclareUnicodeComposite{\^}             {U}{"00DB}
  \DeclareUnicodeComposite{\^}             {a}{"00E2}
  \DeclareUnicodeComposite{\^}             {e}{"00EA}
  \DeclareUnicodeComposite{\^}             \i {"00EE}
  \DeclareUnicodeComposite{\^}             {i}{"00EE}
  \DeclareUnicodeComposite{\^}             {o}{"00F4}
  \DeclareUnicodeComposite{\^}             {u}{"00FB}
  \DeclareUnicodeComposite{\^}             {C}{"0108}
  \DeclareUnicodeComposite{\^}             {c}{"0109}
  \DeclareUnicodeComposite{\^}             {G}{"011C}
  \DeclareUnicodeComposite{\^}             {g}{"011D}
  \DeclareUnicodeComposite{\^}             {H}{"0124}
  \DeclareUnicodeComposite{\^}             {h}{"0125}
  \DeclareUnicodeComposite{\^}             {J}{"0134}
  \DeclareUnicodeComposite{\^}             \j {"0135}
  \DeclareUnicodeComposite{\^}             {j}{"0135}
  \DeclareUnicodeComposite{\^}             {S}{"015C}
  \DeclareUnicodeComposite{\^}             {s}{"015D}
  \DeclareUnicodeComposite{\^}             {W}{"0174}
  \DeclareUnicodeComposite{\^}             {w}{"0175}
  \DeclareUnicodeComposite{\^}             {Y}{"0176}
  \DeclareUnicodeComposite{\^}             {y}{"0177}
}
\makeatother

\setmonofont{luxim}[
  Path=/opt/X11/share/fonts/TTF/,% <--- adjust to your setting
  Extension=.ttf,
  NFSSEncoding=luxi,
  UprightFont=*r,
  BoldFont=*b,
  ItalicFont=*ri,
  BoldItalicFont=*bi,
  Scale=0.8,
]

\pagestyle{empty}

\begin{document}

\^a \ttfamily\^m\^a\^j

\end{document}

在此处输入图片描述

我没有检查所有预复合字形是否确实存在。


需要具备一些字体编码经验。我们声明一个新的(手册中有详细信息fontspec),称为luxi。我们通过加载基于 TU 的编码tuenc.def,但对其进行了修改。

第一个更改是重新定义\^为产生\accent"02C6(字体中似乎存在的间距抑扬符)。但是,我们不想将原语\accent用于已经存在的预组合字符,例如。因此,我们覆盖了在输入时产生重音字符â的用法,例如。\^\^a

当 TeX 找到\^x\^{x}(其中x是任意字符)时,它会检查是否存在一个特殊的宏,该宏将由

\DeclareUnicodeComposite{\^}{x}{<slot>}

如果存在,则排版指定位置中的字符;否则 TeX 将选择\accent"02C6\relax x

答案2

如果你下载免费的 Luxi Mono ttf 字体,对我来说

luximr.ttf
luximri.ttf
luximbi.ttf
luximb.ttf

并将它们复制到 Windows 字体文件夹(我在 Windows 上工作)

它们加载没有任何错误,使用

\setmonofont{Luxi Mono}[Scale=MatchLowercase]

相关内容