Microtype 的 `\textls{}' 和 '\lsstyle' 似乎破坏了 Fontawesome5 的图标

Microtype 的 `\textls{}' 和 '\lsstyle' 似乎破坏了 Fontawesome5 的图标

有时我会fontawesome5在全大写的文本块中使用图标。当我这样做时,我会用microtype's\textls{}\lsstyle(取决于宏)将该文本分隔开,以提高可读性。这会破坏图标,因为它们不会显示在最终输出中。下面给出了一个最小工作(损坏)示例。

如您所见,图标不受粗体或斜体转换的影响。大小调整命令(\small\large)也没有影响 — 我没有将它们包含在 MWE 中以使其保持较小。

这个问题没有如果我使用该fontawesome包,则会存在该包,它会加载 fontawesome 4.x 图标集。

fontawesome5得到以下错误

...standalone.cls:18: Missing number, treated as zero. [\textls{Hello \faGlobe}]

我得到以下警告当使用和进行编译fontawesomefontawesome5

...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}

输出

mwe 输出

答案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}

在此处输入图片描述

相关内容