我正在尝试解决在逐字环境中渲染 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
列出 testme2.tex 中的文件(右侧)
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
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(来自 Adobe Type Manager)以及作为 TeX 发行版一部分的 Source Code Pro,就会出现此问题。
如果您使用声明字体\setmonofont
,Source Code Pro
它将找到从 Adobe 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 组合正确的问题。但那是另一个问题。