答案1
我想知道,如果 Helvetica 没有嵌入,PDF 阅读器可能会用 Arial 替换 Helvetica,这是否可能是将我的文档转换为 Arial 的一种解决方法。
如果未嵌入字体,则行为取决于 PDF 查看器、用户设置、操作系统、可用字体以及系统和用户字体配置。
也就是说,如果字体未嵌入,则一切都将不复存在:您无法知道会发生什么。例如,查看者可能首先查看字体是否可用(例如,已安装 Helvetica),然后阅读字体替换列表以查看其中是否有关于 Helvetica 的具体说明,然后尝试找出哪种字体可能是合理的后备字体。或者它可能会向系统的字体配置工具询问 Helvetica。然后,这些工具可能会查看 Helvetica 是否符合其替换规则,或者尝试寻找替代方案。
使用的字体可能是也可能不是 Helvetica。如果不是,那么如果你幸运的话,它至少可能是类似于 Helvetica 的 sans(希望但不一定具有相同的度量)。它可能会或可能不会正确识别连字。如果不能,它可能只是留下间隙或使用空框。(它可能不会使用例如 2 个“f”——至少,我从未见过这种相对令人满意的“ff”替换。)
因此,更好的想法是:
- 如果可以的话,开始
uarial
工作吧,如果这就是你想要的; - 如果不能,请嵌入另一种字体,即使它不是您的首选。
uarial
该uarial
软件包应该可以正常工作:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Uncomment the map line if you are in either of the following 2 situations:
% uarial is installed, but the font map files for the system have not been correctly updated
% uarial is not installed at all, but you have put all the files from the package in your working directory (*.sty, *.fd, *.map, *.pfb, *.tfm, *.vf)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\pdfmapfile{+ua1.map}
\usepackage{uarial,kantlipsum}
\begin{document}
\sffamily
\kant[1-3]
\end{document}
以上是字体A030,用get-non-free-fonts脚本安装(getnonfreefonts-sys
variety)。
为了真正获得名为 Arial 的字体,我可以使用 LuaLaTeX 或 XeLaTeX 编译以下内容,前提是我的系统安装了具有此名称的字体(例如/usr/share/fonts
):
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{fontspec}
\usepackage{kantlipsum}
\setmainfont{Arial}
\begin{document}
\kant[1-3]
\end{document}
我猜,当您说您使用的是 Helvetica 时,您实际上是在使用 NimbusSanL。这是您在上面的代码中使用 代替 时得到的helvet
结果uarial
。
另一个选择是 TeX Gyre Heroes,该软件包支持它tgheros
:
需要说明的是,这里有一个实际上名为 HelveticaNeue 的字体:
嵌入
是否嵌入字体取决于一系列因素:
- TeX 分布和版本;
- 字体种类;
- 编译引擎;
- 系统范围的配置,以及可能的特定于用户的配置;
- 更多的....
对于当前 (2015) 从上游安装的 TeX Live,嵌入配置在 中updmap.cfg
。系统范围的默认值在 中$(kpsewhich -var TEXMFDIST)/web2c/updmap.cfg
。文件顶部的说明解释了如何覆盖系统范围的设置和/或(在某些情况下)基于每个用户。
例如,
LW35 URWkb
确定我加载时 TeX Live 使用哪种字体helvet
。在本例中(因为我没有在任何地方覆盖它),它使用根据 Karl Berry 字体名称方案命名的 URW 版本。
dvipsDownloadBase35 true
告诉dvips
嵌入 35 种标准 PS 字体。
pdftexDownloadBase14 true
告诉pdftex
嵌入 14 种基本 PDF 字体,同时
dvipdfmDownloadBase14 true
告诉dvipdfm(x)
做同样的事情。最后
kanjiEmbed noEmbed
告诉dvipdfmx
不要嵌入汉字字体。
除此之外,各个.map
文件中的行决定了最终出现在系统范围.map
文件中的行,并且这些行也会影响嵌入,例如在某些情况下嵌入子集而不是整个字体。
updmap.cfg
在我的系统上,我可以在 中的相应文件中覆盖上面的设置TEXMFLOCAL
。我想我也可以使用 中的类似文件覆盖它们。但是,在最近的 TeX Live 版本中,和 的工作TEXMFHOME
方式已多次更改。因此,对 TL 2015 适用的内容可能对 TL 2013 或 TL 2011 等也适用,也可能不适用。updmap
updmap-sys
这一切最终还取决于设置,这些设置texmf.cnf
决定了识别哪些TEXMF
树、以何种顺序搜索以及如何搜索。同样,这取决于 TeX 的发行版、版本和打包,以及系统管理员是否更改了默认配置。
例如,如果您使用 Red Hat 的软件包,则默认配置将会有所不同,而且显然,您的系统管理员可能做出了进一步的更改。
编辑
这是我的机器上 4 种字体的比较(右侧是字体名称)。
答案2
以下是直接解决这个问题的关键点的总结:
由于连字符,更改 Latex 生成的文本的字体通常无法成功。
很难刻意避免在 PDF 中嵌入字体,因为这不是直接由 Latex 控制的。