我在我的文档中使用 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。
因此,这似乎是luaotfload
LuaTeX 中的一个错误。
解决方法:在 内排版引号\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
其实没有必要。