正如以下 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]