合并 mathpazo 和 sourcesanspro 时,衬线字体的小写字母会丢失

合并 mathpazo 和 sourcesanspro 时,衬线字体的小写字母会丢失

我使用mathpazo字体包来编写文档。我对一些文本使用了小写字母。

当我添加sourcesanspro字体包时,小写字母不再起作用正常衬线字型。

这是我的 MWE:

\documentclass[11pt]{book}

\usepackage{lipsum} % nopar
\usepackage[a4paper,showframe]{geometry}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{mathpazo}
% COMMENT THIS LINE, COMPILE AGAIN AND SEE THE CHANGES :
\usepackage[light]{sourcesanspro}

\usepackage[spanish,es-lcroman]{babel}
\usepackage[pdftex,hyperfootnotes=false,
             pdfpagelabels]{hyperref}
\pdfcompresslevel=9
\pdfadjustspacing=1 

\begin{document}

\lipsum[1-2]
\textsc{\lipsum[3-4]}

\end{document} 

当我评论sourcesanspro并编译文档时,会显示小写字母。当包含时sourcesanspro,小写字母会消失。为什么?你们中有人已经处理过类似的事情吗?

我的目的是将文档中的大部分文本都使用mathpazo(serif),但用 替换默认的无衬线字体sourcesanspro。我不知道我是否做错了什么,或者是否有更好的方法来做到这一点。


编辑:我添加了更多信息。

当不使用时进行编译,sourcesanspro我收到 0 个错误和 0 个警告消息。

使用 进行编译时sourcesanspro,我收到 4 条警告消息,如下所示:

LaTeX Font Warning: Font shape `T1/ppl/l/n' undefined
(Font)              using `T1/ppl/m/n' instead on input line 19.

LaTeX Font Warning: Font shape `T1/ppl/l/sc' undefined
(Font)              using `T1/ppl/l/n' instead on input line 22.

LaTeX Font Warning: Font shape `T1/ppl/l/sl' undefined
(Font)              using `T1/ppl/l/n' instead on input line 24.  

LaTeX Font Warning: Some font shapes were not available, defaults substituted.

因此,我认为问题在于light我调用时使用的选项sourcesanspro也会以某种方式影响衬线字体。

实际上,如果light删除该选项,一切都会顺利,当然,除了默认的无衬线字体不会是 Source Sans Pro Light。


如果没有发现更好的解决方案,可能的解决方案:

对我有用的一个解决方法是:

  • light包含时删除该选项sourcesanspro

  • 添加此需要该(无衬线)字体的版本:

    \usefont{T1}{SourceSansPro-LF}{l}{n}
    

SourceSansPro-LF我通过阅读了解(或发现)了和类似的事情。我认为作者应该提供sourcesanspro-type1.sty更多的文档。sourcesanspro

我没有回答这个问题(我的意思是,未答复) 因为我想知道是否有一种方法可以避免\usefont{T1}{SourceSansPro-LF}{l}{n}每次想要使用 提供的浅色无衬线字体时都需要打字sourcesanspro

答案1

问题在于,该选项全局改变了 的含义,而不是默认的light含义,因此,当 LaTeX 想要用罗马(Palatino)字体排版时,它必须执行一些替换。\mddefaultlm

替代机制首先尝试修改形状,因此规范

ppl/l/sc

(Palatino Light Small Caps)变成了请求

ppl/l/n

(Palatino Light Roman),它也不存在,因此执行默认替换(替换lm),结果为 Palatino Roman。您可以通过定义新的替换规则来解决问题:

\usepackage[sc]{mathpazo}
\normalfont % necessary to make LaTeX aware of our choice of the base font

\DeclareFontShape{T1}{pplx}{l}{n} {<-> ssub * pplx/m/n}{}
\DeclareFontShape{T1}{pplx}{l}{sc}{<-> ssub * pplx/m/sc}{}
\DeclareFontShape{T1}{pplx}{l}{it}{<-> ssub * pplx/m/it}{}
\DeclareFontShape{T1}{pplx}{l}{sl}{<-> ssub * pplx/m/it}{}

\usepackage[light]{sourcesanspro}

理论上,这一声明可以推迟至\AtBeginDocument,但一揽子计划sourcesansprofontaxes让事情变得复杂。

请注意,我使用了sc选项,mathpazo以便真实的使用小写字体代替假字体;这解释了使用pplx而不是ppl作为姓氏的用法。

相关内容