系统范围的默认字体,从 CM 还是 LM 更改?

系统范围的默认字体,从 CM 还是 LM 更改?

我的 TeX 系统是 Windows 10 上的 MikTeX 2.9 Portable,但我相信这个问题对于任何 TeX 安装都具有普遍适用性。

考虑这个通用文档:

\documentclass[12pt]{article}
\begin{document}
Yada yada yada.
\end{document}

我没有指定字体。我的 TeX 系统默认选择 Computer Modern 字体系列。我相信在其他情况下(更复杂的文档,没有字体指定)它会选择 Latin Modern 字体系列。

现在,我知道了如何在文档中指定默认字体。但我想知道,当我根本没有提供字体选择时,TeX 在哪里选择 CM(或 LM)作为默认字体系列?

我之所以问这个问题,是因为我不从事数学工作,因此不需要如今 opentype 字体中普遍提供的字符以外的字符。我希望确保文档中出现的任何字体都是我拥有的授权商业字体之一,或者是 SIL 授权字体。因此,我希望将默认字体系列从 CM 或 LM 指向我已安装的(Adobe/Google)Source 字体之类的字体。

再次强调,这是当文档未指定任何字体时的情况。我不想在文档中添加字体规范,我想更改 TeX 系统默认值。我已经搜索了不少,但只发现了如何在文档中指定字体。

我意识到 GUST 和 Latex 项目许可证非常好,但我想将字体嵌入限制为商业或 SIL 许可字体。

答案1

由于您似乎正在使用fontspec,因此解决方案要简单得多。

创建适当的结构

/usr/local/texlive/texmf-local/tex/latex/fontspec

并将分发文件的以下修改复制到那里fontspec.cfg

%%% FONTSPEC.CFG %%%
%
% This configuration file sets up TeX Ligatures by default for all fonts loaded
% with `\setmainfont` and `\setsansfont`.
%
% In addition, `\setmonofont` has default features to enforce "monospace"
% settings with regard to space stretchability and shrinkability.
%
% Make a copy of this file in your own home TEXMF directory to set up your own
% defaults.


\defaultfontfeatures
 [\rmfamily,\sffamily]
 {Ligatures=TeX}

\defaultfontfeatures
 [\ttfamily]
 {WordSpace={1,0,0},
  PunctuationSpace=WordSpace}

%%% Modifications start here

\AtBeginDocument{
  \setmainfont{SourceSerifPro}[
    Extension=.otf,
    UprightFont=*-Regular,
    ItalicFont=*-Regular, % no italic
    BoldFont=*-Bold,
    BoldItalicFont=*-Bold, % no bold italic
  ]
  \setsansfont{SourceSansPro}[
    Extension=.otf,
    UprightFont=*-Regular,
    ItalicFont=*-RegularIt,
    BoldFont=*-Bold,
    BoldItalicFont=*-BoldIt,
  ]
  \setmonofont{SourceCodePro}[
    Extension=.otf,
    UprightFont=*-Regular,
    ItalicFont=*-RegularIt,
    BoldFont=*-Bold,
    BoldItalicFont=*-BoldIt,
  ]
}

运行mktexlsr;现在修改后的fontspec.cfg文件将优先于分发的文件。尝试以下测试文件:

\documentclass{article}
\usepackage{fontspec}

\begin{document}
Main:
Normal \textit{Italic} \textbf{Bold \textit{BoldItalic}}

{\sffamily Sans:
Normal \textit{Italic} \textbf{Bold \textit{BoldItalic}}
}

{\ttfamily Mono:
Normal \textit{Italic} \textbf{Bold \textit{BoldItalic}}
}
\end{document}

输出将是

在此处输入图片描述

以下只是为了确认的输出pdffonts test.pdf

name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
CUDPZP+SourceSerifPro-Regular-Identity-H CID Type 0C       Identity-H       yes yes yes      5  0
YCFVOZ+SourceSerifPro-Bold-Identity-H CID Type 0C       Identity-H       yes yes yes      7  0
OKVEPQ+SourceSansPro-Regular-Identity-H CID Type 0C       Identity-H       yes yes yes      9  0
OLDNKC+SourceSansPro-It-Identity-H   CID Type 0C       Identity-H       yes yes yes     11  0
KKFWEH+SourceSansPro-Bold-Identity-H CID Type 0C       Identity-H       yes yes yes     13  0
VXEFYK+SourceSansPro-BoldIt-Identity-H CID Type 0C       Identity-H       yes yes yes     15  0
IVVCWG+SourceCodePro-Regular-Identity-H CID Type 0C       Identity-H       yes yes yes     17  0
OSDIQN+SourceCodePro-It-Identity-H   CID Type 0C       Identity-H       yes yes yes     19  0
NTAJGT+SourceCodePro-Bold-Identity-H CID Type 0C       Identity-H       yes yes yes     21  0
LSJKOA+SourceCodePro-BoldIt-Identity-H CID Type 0C       Identity-H       yes yes yes     23  0

答案2

事实证明(针对我的情况)有一个非常简单的解决方法:

我可以使用 Source (Serif、Sans、Mono) Pro 字体,因为它们有正确的许可证。所以我安装了它们。我获得了 OpenType 和 Type1 字体,但由于我只使用 LuaLaTeX(其他字体也必须如此),因此只对 OpenType 字体感兴趣。

我将这些字体复制到 fonts/opentype/public/lm 中,lm 字体就驻留在此位置。然后,我删除 lm 字体文件,并复制最近的源字体,但文件名已更改。因此,我用 SourceSerifPro.otf 替换了真正的 lmroman5-regular.otf、lmroman6-regular-.otf(等等),只是我将文件名更改为 lmroman5-regular.otf、lmroman6-regular.otf(等等)。

现在,当 fontspec 查找 lm opentype 字体时,它会在正确的文件夹中看到正确的文件名,并使用这些字体。它不知道它实际上使用的是源字体。PDF 中显示的是源字体(以其自身名称命名)。

我无法在我的本地(自定义)目录中完成这项工作。我不得不在主树中完成这项工作。如果 lm 字体包有更新,这可能会成为一个问题。因此,我制作了一个破解字体文件的 zip 副本,并将其保存在其他地方以备将来使用。

对于那些不使用 LuaLaTeX/fontspec 和 OpenType 字体的人来说,这将会更加费力。

请注意,我没有更改任何字体的内部名称。只更改了文件名。没关系。

实际使用 lm 字体的其他人不应该这样做。

这些都是胡说八道,因为我的商业印刷服务对实际字体文件中缺少 SIL 许可证感到不满意。

相关内容