hrbrthemes icon indicating copy to clipboard operation
hrbrthemes copied to clipboard

Warning in RMarkdown

Open bhaskarvk opened this issue 7 years ago • 36 comments

 In grid.Call(L_textBounds, as.graphicsAnnot(x$label),  ... :
  font family 'Arial Narrow' not found in PostScript font database

Same as hrbrmstr/hrbrmisc#3, but this time with correct family name of Arial Narrow instead of ArialNarrow.

bhaskarvk avatar Feb 15 '17 17:02 bhaskarvk

Could be related to yihui/knitr#729

bhaskarvk avatar Feb 15 '17 18:02 bhaskarvk

---
title: "hrbrthemes testbed"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

```{r message=FALSE}
library(hrbrthemes)
library(tidyverse)
```

### Arial Narrow

```{r}
ggplot(mtcars, aes(wt, mpg)) +
  geom_point() +
  labs(title="Arial Narrow", subtitle="This is a subtitle") +
  theme_ipsum()
```

### Roboto Condensed

```{r}
ggplot(mtcars, aes(wt, mpg)) +
  geom_point() +
  labs(title="Roboto Condensed", subtitle="This is a subtitle") +
  theme_ipsum_rc()
```

Generated no errors, messages or warnings on macOS Sierra & R 3.3.2

image

hrbrmstr avatar Feb 15 '17 18:02 hrbrmstr

OK with html_output I don't get the warning too. But If I change the output to flexdashboard::flex_dashboard, then I do get the warnings.

bhaskarvk avatar Feb 15 '17 19:02 bhaskarvk

ah. lemme poke at that

hrbrmstr avatar Feb 15 '17 19:02 hrbrmstr

It works if I use the work around mentioned in https://github.com/yihui/knitr/issues/729#issuecomment-40336104. So not an hrbrmstr issue then. I'll let you poke at it a bit but feel free to close it.

bhaskarvk avatar Feb 15 '17 19:02 bhaskarvk

---
title: "hrbrthemes flexdashboard"
output: 
  flexdashboard::flex_dashboard:
    orientation: columns
    vertical_layout: fill
---

```{r setup, include=FALSE}
library(flexdashboard)
library(hrbrthemes)
library(tidyverse)
```

Column {data-width=650}
-----------------------------------------------------------------------

### Roboto Condensed

```{r}
ggplot(mtcars, aes(wt, mpg)) +
  geom_point() +
  labs(title="Roboto Condensed", subtitle="This is a subtitle") +
  theme_ipsum_rc()
```

Column {data-width=350}
-----------------------------------------------------------------------

### Arial Narrow

```{r}
ggplot(mtcars, aes(wt, mpg)) +
  geom_point() +
  labs(title="Arial Narrow", subtitle="This is a subtitle") +
  theme_ipsum()
```

### More Roboto Condensed

```{r}
ggplot(mtcars, aes(wt, mpg)) +
  geom_point() +
  labs(title="Roboto Condensed", subtitle="This is a subtitle") +
  theme_ipsum_rc()
```

image

hrbrmstr avatar Feb 15 '17 19:02 hrbrmstr

Just used straight flexdasboard base layout. No hacks.

hrbrmstr avatar Feb 15 '17 19:02 hrbrmstr

It works, but check your 'R Markdown' tab, For me it shows


Output created: t2.html
There were 50 or more warnings (use warnings() to see the first 50)

bhaskarvk avatar Feb 15 '17 19:02 bhaskarvk

oh. aye! same here. one sec. i have a theory

hrbrmstr avatar Feb 15 '17 19:02 hrbrmstr

add extrafont::loadfonts() after library(tidyverse) so the PDF NULL graphics device can see the fonts.

image

No warnings now.

hrbrmstr avatar Feb 15 '17 19:02 hrbrmstr

gosh i hate fonts in Linux, BSD and R and Python

hrbrmstr avatar Feb 15 '17 19:02 hrbrmstr

Nope that didn't do it. But adding the following does get rid of the warning.

knitr::opts_chunk$set(dev = 'svg')
options(device = function(file, width, height) {
  svg(tempfile(), width = width, height = height)
})

Ditto for png.

bhaskarvk avatar Feb 15 '17 19:02 bhaskarvk

huh. wondering why it worked here? (no warnings here after i did that extrafont dance)

hrbrmstr avatar Feb 15 '17 19:02 hrbrmstr

what abt library(svglite); knitr::opts_chunk$set(dev = 'svglite') and no knitr hack but include the extrafont thing?

hrbrmstr avatar Feb 15 '17 19:02 hrbrmstr

Nope! What's more svglite doesn't render the font correctly (w/ or w/o knitr hack).

Imgur

bhaskarvk avatar Feb 15 '17 19:02 bhaskarvk

I'm fine relying on the knitr hack FWIW. But you'll probably need to document the workaround.

bhaskarvk avatar Feb 15 '17 19:02 bhaskarvk

Wow. The inconsistencies between operating systems and even same OS but different devices is kind of disconcerting (my svglite versions work fine as do the other "hacks"). Def do need to doc this tho. Mebbe a GSOC to "fix font stuff in R" is in order (prbly a multi-GSOC effort).

hrbrmstr avatar Feb 15 '17 20:02 hrbrmstr

What's the fix for this if I want the output to be pdf_output?

RoyalTS avatar Mar 01 '17 18:03 RoyalTS

Can you be more specific? You won't be generating PDF in Rmd (generally) so you mean using the fonts with PDF output in general?

On Wed, Mar 1, 2017 at 1:26 PM, Tobias Schmidt [email protected] wrote:

What's the fix for this if I want the output to be pdf_output?

— You are receiving this because you modified the open/close state. Reply to this email directly, view it on GitHub https://github.com/hrbrmstr/hrbrthemes/issues/2#issuecomment-283425744, or mute the thread https://github.com/notifications/unsubscribe-auth/AAfHtlcs29eYE6iI79Tu3lHw5KFWydy6ks5rhbhDgaJpZM4MCC07 .

hrbrmstr avatar Mar 01 '17 18:03 hrbrmstr

Oh, sorry, I meant setting output: pdf_document instead of output: html_document in the Rmd document, which I do all the time.

RoyalTS avatar Mar 01 '17 18:03 RoyalTS

Ah, roger that. you need to extrafont::loadfonts(quiet=TRUE) right near the top of the Rmd (it can be in an include=FALSE chunk) and the fonts shld make their way into the PDF(s)

On Wed, Mar 1, 2017 at 1:39 PM, Tobias Schmidt [email protected] wrote:

Oh, sorry, I meant setting output: pdf_document instead of output: html_document in the Rmd document, which I do all the time.

— You are receiving this because you modified the open/close state. Reply to this email directly, view it on GitHub https://github.com/hrbrmstr/hrbrthemes/issues/2#issuecomment-283429378, or mute the thread https://github.com/notifications/unsubscribe-auth/AAfHtvL670mKhsv0caloK5figB2ZQ2sUks5rhbtfgaJpZM4MCC07 .

hrbrmstr avatar Mar 01 '17 18:03 hrbrmstr

Hmm, the following minimal reproducible example does not work for me:

---
title: "test"
output: pdf_document
---

```{r setup, include=FALSE}
library(dplyr)
library(ggplot2)
library(hrbrthemes)
extrafont::loadfonts(quiet=TRUE)
```

```{r}
iris %>%
  ggplot(aes(Sepal.Length, Sepal.Width)) + geom_point() + theme_ipsum()
```

It throws

Error in grid.Call.graphics(L_text, as.graphicsAnnot(x$label), x$x, x$y,  : 
  invalid font type
Calls: <Anonymous> ... drawDetails -> drawDetails.text -> grid.Call.graphics
In addition: There were 50 or more warnings (use warnings() to see the first 50)
Execution halted

RoyalTS avatar Mar 03 '17 00:03 RoyalTS

> sessionInfo()
R version 3.3.2 (2016-10-31)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: macOS Sierra 10.12.3

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] hrbrthemes_0.1.0 ggplot2_2.2.1    dplyr_0.5.0     

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.9.1    Rttf2pt1_1.3.4   knitr_1.15.1     magrittr_1.5     munsell_0.4.3    colorspace_1.3-2
 [7] R6_2.2.0         stringr_1.2.0    plyr_1.8.4       tools_3.3.2      hunspell_2.3     grid_3.3.2      
[13] gtable_0.2.0     DBI_0.5-14       extrafontdb_1.0  htmltools_0.3.5  yaml_2.1.13      lazyeval_0.2.0  
[19] assertthat_0.1   digest_0.6.12    rprojroot_1.2    tibble_1.2       purrr_0.2.2      evaluate_0.10   
[25] rmarkdown_1.3    labeling_0.3     stringi_1.1.2    scales_0.4.1     backports_1.0.5  extrafont_0.17  

RoyalTS avatar Mar 03 '17 00:03 RoyalTS

I'm on the same OS. I just ran the code. Do you have Arial Narrow actually installed?

On Thu, Mar 2, 2017 at 7:28 PM, Tobias Schmidt [email protected] wrote:

sessionInfo() R version 3.3.2 (2016-10-31) Platform: x86_64-apple-darwin13.4.0 (64-bit) Running under: macOS Sierra 10.12.3

locale: [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages: [1] stats graphics grDevices utils datasets methods base

other attached packages: [1] hrbrthemes_0.1.0 ggplot2_2.2.1 dplyr_0.5.0

loaded via a namespace (and not attached): [1] Rcpp_0.12.9.1 Rttf2pt1_1.3.4 knitr_1.15.1 magrittr_1.5 munsell_0.4.3 colorspace_1.3-2 [7] R6_2.2.0 stringr_1.2.0 plyr_1.8.4 tools_3.3.2 hunspell_2.3 grid_3.3.2 [13] gtable_0.2.0 DBI_0.5-14 extrafontdb_1.0 htmltools_0.3.5 yaml_2.1.13 lazyeval_0.2.0 [19] assertthat_0.1 digest_0.6.12 rprojroot_1.2 tibble_1.2 purrr_0.2.2 evaluate_0.10 [25] rmarkdown_1.3 labeling_0.3 stringi_1.1.2 scales_0.4.1 backports_1.0.5 extrafont_0.17

— You are receiving this because you modified the open/close state. Reply to this email directly, view it on GitHub https://github.com/hrbrmstr/hrbrthemes/issues/2#issuecomment-283827312, or mute the thread https://github.com/notifications/unsubscribe-auth/AAfHthPdzlGDbymhIxAuidmO9Oa_zJVzks5rh16egaJpZM4MCC07 .

hrbrmstr avatar Mar 03 '17 02:03 hrbrmstr

Installed as in "it shows up in Font Book"? Yes.

Are you compiling using pdfLaTeX or XeLaTeX?

RoyalTS avatar Mar 03 '17 08:03 RoyalTS

pdflatex.

On Fri, Mar 3, 2017 at 3:01 AM, Tobias Schmidt [email protected] wrote:

Installed as in "it shows up in Font Book"? Yes.

Are you compiling using pdfLaTeX or XeLaTeX?

— You are receiving this because you modified the open/close state. Reply to this email directly, view it on GitHub https://github.com/hrbrmstr/hrbrthemes/issues/2#issuecomment-283890500, or mute the thread https://github.com/notifications/unsubscribe-auth/AAfHth1QQHNfJ7L21IuUWrYtLDjNN8Pzks5rh8i9gaJpZM4MCC07 .

hrbrmstr avatar Mar 03 '17 11:03 hrbrmstr

@RoyalTS For the warning part, I had to

options(device = function(file, width, height) {
  png(tempfile(), width = width, height = height)
})

As described in https://github.com/yihui/knitr/issues/729#issuecomment-40336104

I tried with a bunch of formats like png/svg/jpg etc. and did not get any warnings.

bhaskarvk avatar Mar 03 '17 13:03 bhaskarvk

Ah, there might be an uncontrolled difference here: What device are you outputting to?

I can get my test document to work if I set knitr::opts_chunk$set(dev = 'png'), but not if I set knitr::opts_chunk$set(dev = 'pdf') and @bhaskarvk's solution seems to be one that's geared towards png, right?

RoyalTS avatar Mar 03 '17 17:03 RoyalTS

Wait a second: I need not only Arial Narrow to be installed, I also need that to be the PostScript and not the TrueType version of the font?

RoyalTS avatar Mar 03 '17 17:03 RoyalTS

Ah, fonts and R/Python.

You need TTF versions of the fonts for them to work across devices consistently in R.

Said fonts need to be installed at the system-level.

You also need to ensure you've added the fonts to R using the procedures described in extrafont.

This pkg tries to take care of the loading bit on startup now (recent dev update).

The hack @bhaskarvk mentioned is due to knitr using a null PDF device behind the scenes, a process that tosses warnings since the context it executes in doesn't have the fonts loaded.

^^^ is one big reason ggplot2 doesn't do anything fancy with fonts in the pkg or examples since anything outside the basic fonts isn't going to work without some pain.

hrbrmstr avatar Mar 03 '17 19:03 hrbrmstr