字体:使用 XeTeX,为什么 fontspec 和 setmonofont 与 sourcecodepro 在 Unicode 支持方面有所不同?

字体:使用 XeTeX,为什么 fontspec 和 setmonofont 与 sourcecodepro 在 Unicode 支持方面有所不同?

我正在尝试解决在逐字环境中渲染 unicode 字符(包括组合字符)的问题。我使用 xetex 作为编译引擎。(有关更多上下文,请参阅此github 问题)。

我发现默认值lmtt似乎不支持β或者β̂它们是否在逐字块中逐字编码。

我发现 Source Code Pro 支持这些字符,但似乎只能通过某些加载方式才能访问。

特别是,如果我尝试使用

\usepackage{sourcecodepro}

它成功显示了字符,尽管 β 上方的组合脱字符未能正确对齐。

因为我已经使用 fontspec 来访问其他地方支持 unicode 的字体,所以我更愿意直接使用 fontspec 的实用程序。但我发现当我使用时:

\usepackage{fontspec}
\setmonofont{Source Code Pro}

β 不显示(尽管结合抑扬符展示)。

MWE:

源代码专家

\documentclass[11pt]{article}
\usepackage{sourcecodepro}
\begin{document}
\begin{verbatim}
β 
β̂
\end{verbatim}
\end{document}

字体规格 + 设置单字体

\documentclass[11pt]{article}
\usepackage{fontspec}
\setmonofont{Source Code Pro}
\begin{document}
\begin{verbatim}
β 
β̂
\end{verbatim}
\end{document}

对于为什么会发生这种情况,任何见解都将不胜感激。

图片仅供说明之用: 根据加载内容的不同呈现行为

根据要求:列出 testme1.tex 中的文件(左侧)

article.cls 2014/09/29 v1.4h Standard LaTeX document class size11.clo 2014/09/29 v1.4h Standard LaTeX file (size option) fontspec.sty 2016/02/01 v2.5a Font selection for XeLaTeX and LuaLaTeX expl3.sty 2016/05/18 v6512 L3 programming layer (loader) expl3-code.tex 2016/05/18 v6512 L3 programming layer l3xdvipdfmx.def
xparse.sty 2016/05/18 v6512 L3 Experimental document command parser fontspec-xetex.sty 2016/02/01 v2.5a Font selection for XeLaTeX and LuaLaTeX fontenc.sty eu1enc.def 2010/05/27 v0.1h Experimental Unicode font encodings eu1lmr.fd 2009/10/30 v1.6 Font defs for Latin Modern xunicode.sty 2011/09/09 v0.981 provides access to latin accents and many oth er characters in Unicode lower plane eu1lmss.fd 2009/10/30 v1.6 Font defs for Latin Modern graphicx.sty 2014/10/28 v1.0g Enhanced LaTeX Graphics (DPC,SPQR) keyval.sty 2014/10/28 v1.15 key=value parser (DPC) graphics.sty 2016/05/09 v1.0r Standard LaTeX Graphics (DPC,SPQR) trig.sty 2016/01/03 v1.10 sin cos tan (DPC) graphics.cfg 2016/01/02 v1.10 sample graphics configuration xetex.def 2016/04/06 v4.08 LaTeX color/graphics driver for XeTeX (TeX Liv e/RRM/JK) infwarerr.sty 2016/05/16 v1.4 Providing info/warning/error messages (HO) ltxcmds.sty 2016/05/16 v1.23 LaTeX kernel commands for general use (HO) fontspec.cfg t3cmr.fd 2001/12/31 TIPA font definitions
列出 testme2.tex 中的文件(右侧)

article.cls 2014/09/29 v1.4h Standard LaTeX document class size11.clo 2014/09/29 v1.4h Standard LaTeX file (size option) sourcecodepro.sty 2015/10/09 v2.6 Adobe's Source Code Pro typeface ifxetex.sty 2010/09/12 v0.6 Provides ifxetex conditional ifluatex.sty 2016/05/16 v1.4 Provides the ifluatex switch (HO) xkeyval.sty 2014/12/03 v2.7a package option processing (HA) xkeyval.tex 2014/12/03 v2.7a key=value parser (HA) fontspec.sty 2016/02/01 v2.5a Font selection for XeLaTeX and LuaLaTeX expl3.sty 2016/05/18 v6512 L3 programming layer (loader) expl3-code.tex 2016/05/18 v6512 L3 programming layer l3xdvipdfmx.def
xparse.sty 2016/05/18 v6512 L3 Experimental document command parser fontspec-xetex.sty 2016/02/01 v2.5a Font selection for XeLaTeX and LuaLaTeX fontenc.sty eu1enc.def 2010/05/27 v0.1h Experimental Unicode font encodings eu1lmr.fd 2009/10/30 v1.6 Font defs for Latin Modern xunicode.sty 2011/09/09 v0.981 provides access to latin accents and many oth er characters in Unicode lower plane eu1lmss.fd 2009/10/30 v1.6 Font defs for Latin Modern graphicx.sty 2014/10/28 v1.0g Enhanced LaTeX Graphics (DPC,SPQR) graphics.sty 2016/05/09 v1.0r Standard LaTeX Graphics (DPC,SPQR) trig.sty 2016/01/03 v1.10 sin cos tan (DPC) graphics.cfg 2016/01/02 v1.10 sample graphics configuration xetex.def 2016/04/06 v4.08 LaTeX color/graphics driver for XeTeX (TeX Liv e/RRM/JK) infwarerr.sty 2016/05/16 v1.4 Providing info/warning/error messages (HO) ltxcmds.sty 2016/05/16 v1.23 LaTeX kernel commands for general use (HO) fontspec.cfg t3cmr.fd 2001/12/31 TIPA font definitions

答案1

@UlrikeFischer 在评论中帮助找到了解决方案。

如果您单独安装了 Source Code Pro(来自 Adob​​e Type Manager)以及作为 TeX 发行版一部分的 Source Code Pro,就会出现此问题。

如果您使用声明字体\setmonofontSource Code Pro它将找到从 Adob​​e Type Manager 安装的 Source Code Pro,与包含 TeX 的版本相比,它似乎对 Unicode 的支持较差。

如果您想使用 fontspec 明确指定 Source Code Pro 的 TeX 版本,则需要使用以下声明:

\usepackage{fontspec}
\setmonofont{SourceCodePro-Regular.otf}

如果您不包括,.otf它将尝试加载,ttf这可能会产生其他问题。

但是,这不会给您带来与仅使用相同的行为\usepackage{sourcecodepro}

问题是,使用该命令,您只能获得字体的直立版本,这意味着斜体、粗体和粗体斜体将不起作用。

如果您想要复制该字体系列覆盖范围,则需要使用:

\usepackage{fontspec}
\setmonofont[Extension=.otf,UprightFont =*-Regular,ItalicFont =*-RegularIt,
BoldFont=*-Bold,BoldItalicFont=*-BoldIt]{SourceCodePro}

其中星号填写字体的值,扩展名由扩展选项指定。

如果您想要完全复制 sourcecodepro 的行为(默认包含),您需要指定更多选项:

\usepackage{fontspec}
\setmonofont[Ligatures = TeX,Numbers =, Scale = 1,Extension = .otf, 
WordSpace = {1,0,0}, PunctuationSpace = WordSpace, UprightFont =*-
Regular,ItalicFont =*-RegularIt, BoldFont=*-Bold,BoldItalicFont=*-BoldIt] 
{SourceCodePro}

这将完全重现 的行为\usepackage{sourcecodepro}

如果您在使用不同字体时遇到类似问题,请使用文档中的\XeTeXtracingfonts=1和命令,并查看与编译文档相关的文件。\listfiles*.log

一个相关的有用的调试技巧,如果你想要查看文档中任何时候实际使用的字体,你可以使用来自测试当前字体

\makeatletter
\newcommand{\showfont}{encoding: \f@encoding{},
  family: \f@family{},
  series: \f@series{},
  shape: \f@shape{},
  size: \f@size{}
}
\makeatother

然后在您想要查看当前字体的位置输入命令\showfont。它将在该位置显示文档中的字体信息。

注意:这并没有解决组合字符与 β 组合不正确但与 a 组合正确的问题。但那是另一个问题。

相关内容