有时我会fontawesome5
在全大写的文本块中使用图标。当我这样做时,我会用microtype
's\textls{}
或\lsstyle
(取决于宏)将该文本分隔开,以提高可读性。这会破坏图标,因为它们不会显示在最终输出中。下面给出了一个最小工作(损坏)示例。
如您所见,图标不受粗体或斜体转换的影响。大小调整命令(\small
等\large
)也没有影响 — 我没有将它们包含在 MWE 中以使其保持较小。
这个问题没有如果我使用该fontawesome
包,则会存在该包,它会加载 fontawesome 4.x 图标集。
我fontawesome5
得到以下错误:
...standalone.cls:18: Missing number, treated as zero. [\textls{Hello \faGlobe}]
我得到以下警告当使用和进行编译fontawesome
时fontawesome5
:
...standalone.cls: Package microtype Warning: Unknown slot number of character(microtype) `\`A'(microtype) in font encoding `TU' in inheritance list(microtype)
知道发生了什么事或者我哪里做错了吗?
平均能量损失
%!TEX program = lualatex
\documentclass[varwidth]{standalone}
\usepackage{fontawesome5}
\usepackage{microtype}
\begin{document}
Hello \faGlobe
\textbf{Hello \faGlobe}
{\bfseries Hello \faGlobe}
\textit{Hello \faGlobe}
{\itshape Hello \faGlobe}
\textls{Hello \faGlobe}
{\lsstyle Hello \faGlobe}
\end{document}
输出
答案1
microtype
必须使用与传统字体不同的技术来对 OpenType 字体进行字母间距调整。因此,它必须知道每种字体是否为传统字体,但此检测目前假设所有 OpenType 字体都是通过 fontspec 加载的。现在fontawesome5
不使用 fontspec,即使在 LuaTeX 中使用 OpenType 字体时也是如此,因此此检测会失败,并且尝试添加传统字母间距会破坏字体。
这必须在 microtype 中修复,但暂时你可以替换检测代码作为解决方法:
%!TEX program = lualatex
\documentclass[varwidth]{standalone}
\usepackage{fontawesome5}
\usepackage{iftex}
\usepackage{microtype}
% Fixup microtype's OpenType font detection
\makeatletter
\ifxetex
\def\MT@if@fontspec@font{%
\ifnum\XeTeXfonttype\font=0
\expandafter\@secondoftwo
\else
\expandafter\@firstoftwo
\fi
}
\fi
\ifluatex
\def\MT@if@fontspec@font{%
\directlua{tex.sprint(token.create(function()
local f = font.getfont(font.current())
if not f then return false end
if f.encodingbytes then return f.encodingbytes == 2 end
return f.format and f.format:sub(5) == 'type'
end and '@firstoftwo' or '@secondoftwo'))
}%
}
\fi
\makeatother
\begin{document}
Hello \faGlobe
\textbf{Hello \faGlobe}
{\bfseries Hello \faGlobe}
\textit{Hello \faGlobe}
{\itshape Hello \faGlobe}
\textls{Hello \faGlobe}
{\lsstyle Hello \faGlobe}
\end{document}