如何使用 LuaLaTeX 让 `url` 包遵守 fontspec 字体选项 (stylisticset)

如何使用 LuaLaTeX 让 `url` 包遵守 fontspec 字体选项 (stylisticset)

我在我的文档中使用 inconsolata zi4 字体作为等宽字体,但在 fontspec 中的 stylisticset 选项中使用弯曲的 l 以及直引号。但是,当使用包url并使用进行编译时lualatex,这些选项将被忽略,并且使用的字形是默认字形:

\documentclass[varwidth]{standalone}
\usepackage{fontspec}
\setmonofont[StylisticSet={1,3}]{Inconsolata zi4}

\usepackage{url}

\begin{document}

\texttt{`/usr/local/lib/2015'} % using mono font directly

\path{`/usr/local/lib/2015'} % through the url package

\end{document}

输出

那个path应该看起来像texttt遵循 fontspec 选项的那个。有人知道如何修复这个问题吗?

答案1

我的感觉是,luaotfload当字体在数学模式下使用时,这会让 LuaTeX 忽略风格集的选择。

为了证明我的主张,我

\mathcode``=\numexpr"7000+\mathcode``\relax

并尝试了$\mathtt{`}$,无论在 mono 字体的定义中使用了什么样式设置,都会产生卷曲反引号。请注意,url使用数学模式排​​版 URL。

因此,这似乎是luaotfloadLuaTeX 中的一个错误。

解决方法:在 内排版引号\mbox

\documentclass[border=3,varwidth]{standalone}
\usepackage{fontspec}
\setmonofont[StylisticSet={1,3}]{Inconsolatazi4}

\usepackage{url}

\makeatletter
\g@addto@macro\UrlSpecials{%
  \do\`{\mbox{\UrlFont\char`\`}}%
  \do\'{\mbox{\UrlFont\char`\'}}%
  \do\l{\mbox{\UrlFont\char`\l}}%
}
\makeatother

\begin{document}

\texttt{`/usr/local/lib/2015'} % using mono font directly

\path{`/usr/local/lib/2015'} % through the url package

\setmonofont{Inconsolatazi4}

\texttt{`/usr/local/lib/2015'} % using mono font directly

\path{`/usr/local/lib/2015'} % through the url package

\end{document}

在此处输入图片描述

这也适用于 XeLaTeX,尽管这个引擎不需要 hack,所以更复杂的

\usepackage{ifluatex}
\makeatletter
\ifluatex
  \g@addto@macro\UrlSpecials{%
    \do\`{\mbox{\UrlFont\char`\`}}%
    \do\'{\mbox{\UrlFont\char`\'}}%
    \do\l{\mbox{\UrlFont\char`\l}}%
  }
\fi
\makeatother

其实没有必要。

相关内容