我在R中有字体和PDF输出问题。在这台Windows机器上没有 Helvetica ,设备使用的字体似乎是 Arial 你可以在下面看到。
简单的问题是,使用了Arial(我希望它是这样),但是使用 Helvetica 来编辑PDF文件。如何让R将正确的名称写入PDF文件。 pdf(...,family="Arial")
将不起作用,因为此系列未知(grDevices版本2.15.1)。
或者我可以在PDF中替换此字体,创建一个包含我想要的字体的文件吗?
R-PDF-输出
本文的比较:Arial vs. Helvetica
答案 0 :(得分:2)
您需要设置一个新的字体系列,以便与pdf()
一起使用。这要求您为要使用的字体提供Adobe Font Metric文件(*.afm
文件)。您可以将.tty
个文件转换为.afm
个文件,或者在互联网上查找Arial的.afm
个文件(如果您还没有)。
Arial <- Type1Font(family = "Arial",
metrics = c("ArialMT.afm",
"arial-BoldMT.afm",
"Arial-ItalicMT.afm",
"Arial-BoldItalicMT.afm"))
其中字符向量metrics
包含相关.afm
文件的路径,应按以下顺序指定文件:
您使用pdfFonts()
函数为这些新字体添加映射
pdfFonts(Arial = Arial)
其中Arial
是Type1Font()
之前生成的对象。
最后一步是使用family
中的pdf()
参数,该参数引用pdfFonts()
定义的现有系列之一:
pdf("testArial.pdf", family = "Arial")
plot(1:10, 1:10)
dev.off()
我没有尝试过这个,因为我的系统上没有Arial,也没有太多的.afm
文件,但是我从几个来源拼凑了这些文件:
取决于系统设置方式的另一种选择是基于Cairo的PDF设备,因为它将使用系统的功能根据其名称识别和加载字体。有关详细信息,请参阅?cairo_pdf
,然后查看?X11
的开罗字体部分。
答案 1 :(得分:1)
默认情况下,R不嵌入字体。它只是指定使用Helvetica。你可能最好嵌入字体。有两种方法可以执行此操作,使用cairo_pdf
设备或extrafont
包与常用pdf
设备。 cairo_pdf
更加简单,但输出与pdf
的细微差别有所不同。
答案 2 :(得分:1)
正如其中一条评论中所述,基本14字体不需要嵌入,Helvetica就是这些字体之一.PDF消费者应该为这些字体提供替代品,Arial(或Arial MT)是通常用来代替Helvetica。
我不熟悉R,但你似乎能够embed fonts afterward
编辑:This question's answer解释了如何使用ghostscript嵌入字体,只需确保将GS地图Helvetica(或Arial)映射到您想要的字体版本。感谢Gavin Simpson 让我搜索那个:)
答案 3 :(得分:1)
自R-3.1.0以来,这更直截了当。现在,要获得Arial字体,只需设置family="ArialMT"
:
pdf("Arial.pdf", height=0.3, width=1.45, family="ArialMT")
grid::grid.text("CGJQRSafrst1237")
dev.off()
2014年4月引用R-3.1.0 release notes:
pdf()和postscript()有一个新系列“ArialMT” 设备。这只会在查看器上正确呈现 可以访问Monotype TrueType字体(有时是 期刊要求)。
为了确保pdf在任何地方都能正确呈现,您还需要在文档中嵌入所需的Arial字体。这是一个简单的方法:
library(extrafont)
loadfonts() ## Really only needed the first time you use extrafont
## Modify this to point to the corresponding Ghostscript executable on your own machine
Sys.setenv(R_GSCMD = "C:/Program Files/gs/gs9.07/bin/gswin64c.exe")
embed_fonts("Arial.pdf")