Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Warning in RMarkdown #2

Open
bhaskarvk opened this issue Feb 15, 2017 · 36 comments
Open

Warning in RMarkdown #2

bhaskarvk opened this issue Feb 15, 2017 · 36 comments
Assignees

Comments

@bhaskarvk
Copy link

 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
Copy link
Author

Could be related to yihui/knitr#729

@hrbrmstr
Copy link
Owner

hrbrmstr commented Feb 15, 2017

---
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

@bhaskarvk
Copy link
Author

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.

@hrbrmstr
Copy link
Owner

ah. lemme poke at that

@bhaskarvk
Copy link
Author

It works if I use the work around mentioned in yihui/knitr#729 (comment).
So not an hrbrmstr issue then.
I'll let you poke at it a bit but feel free to close it.

@hrbrmstr
Copy link
Owner

---
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
Copy link
Owner

Just used straight flexdasboard base layout. No hacks.

@bhaskarvk
Copy link
Author

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)

@hrbrmstr
Copy link
Owner

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

@hrbrmstr
Copy link
Owner

hrbrmstr commented Feb 15, 2017

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

image

No warnings now.

@hrbrmstr
Copy link
Owner

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

@bhaskarvk
Copy link
Author

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.

@hrbrmstr
Copy link
Owner

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

@hrbrmstr
Copy link
Owner

hrbrmstr commented Feb 15, 2017

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

@bhaskarvk
Copy link
Author

bhaskarvk commented Feb 15, 2017

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

Imgur

@bhaskarvk
Copy link
Author

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

@hrbrmstr
Copy link
Owner

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 hrbrmstr self-assigned this Feb 15, 2017
@RoyalTS
Copy link

RoyalTS commented Mar 1, 2017

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

@hrbrmstr
Copy link
Owner

hrbrmstr commented Mar 1, 2017 via email

@RoyalTS
Copy link

RoyalTS commented Mar 1, 2017

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

@hrbrmstr
Copy link
Owner

hrbrmstr commented Mar 1, 2017 via email

@RoyalTS
Copy link

RoyalTS commented Mar 3, 2017

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
Copy link

RoyalTS commented Mar 3, 2017

> 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  

@hrbrmstr
Copy link
Owner

hrbrmstr commented Mar 3, 2017 via email

@RoyalTS
Copy link

RoyalTS commented Mar 3, 2017

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

Are you compiling using pdfLaTeX or XeLaTeX?

@hrbrmstr
Copy link
Owner

hrbrmstr commented Mar 3, 2017 via email

@bhaskarvk
Copy link
Author

@RoyalTS For the warning part, I had to

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

As described in yihui/knitr#729 (comment)

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

@RoyalTS
Copy link

RoyalTS commented Mar 3, 2017

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
Copy link

RoyalTS commented Mar 3, 2017

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?

@hrbrmstr
Copy link
Owner

hrbrmstr commented Mar 3, 2017

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.

@RoyalTS
Copy link

RoyalTS commented Mar 15, 2017

The extrafont setup, in particular running font_import() did the trick. Thanks a bunch!

@tjmahr
Copy link

tjmahr commented Apr 12, 2017

I had the same error using these themes with LaTeX via RMarkdown on Windows. Doing a one-time font_import() like this comment suggests fixed it.

Other Windows people with pdf woes, try extrafont::font_import() first.

@hrbrmstr hrbrmstr reopened this Apr 12, 2017
@hrbrmstr
Copy link
Owner

I now remember that this is one reason import_roboto_condensed() exists in-package.

@yonicd
Copy link

yonicd commented May 23, 2018

i am getting this issue on the macOS with

---
output: 
  github_document:
    dev: svg

always_allow_html: yes
---

@IndrajeetPatil
Copy link

I am getting the same error on a Windows machine.

Here is my yaml config for .Rmd file.

---
  output: github_document
---

{r, echo = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  dpi = 300,
  out.width = "100%",
  comment = "#>",
  fig.path = "man/figures/README-"
)

And here is session info:

devtools::session_info()
#> Session info -------------------------------------------------------------
#>  setting  value                       
#>  version  R version 3.5.1 (2018-07-02)
#>  system   x86_64, mingw32             
#>  ui       RTerm                       
#>  language (EN)                        
#>  collate  English_United States.1252  
#>  tz       America/New_York            
#>  date     2018-08-29
#> Packages -----------------------------------------------------------------
#>  package   * version date       source        
#>  backports   1.1.2   2017-12-13 CRAN (R 3.5.0)
#>  base      * 3.5.1   2018-07-02 local         
#>  compiler    3.5.1   2018-07-02 local         
#>  datasets  * 3.5.1   2018-07-02 local         
#>  devtools    1.13.6  2018-06-27 CRAN (R 3.5.1)
#>  digest      0.6.16  2018-08-22 CRAN (R 3.5.1)
#>  evaluate    0.11    2018-07-17 CRAN (R 3.5.1)
#>  graphics  * 3.5.1   2018-07-02 local         
#>  grDevices * 3.5.1   2018-07-02 local         
#>  htmltools   0.3.6   2017-04-28 CRAN (R 3.5.0)
#>  knitr       1.20.12 2018-08-13 local         
#>  magrittr    1.5     2014-11-22 CRAN (R 3.5.0)
#>  memoise     1.1.0   2017-04-21 CRAN (R 3.5.0)
#>  methods   * 3.5.1   2018-07-02 local         
#>  Rcpp        0.12.18 2018-07-23 CRAN (R 3.5.1)
#>  rmarkdown   1.10    2018-06-11 CRAN (R 3.5.0)
#>  rprojroot   1.3-2   2018-01-03 CRAN (R 3.5.0)
#>  stats     * 3.5.1   2018-07-02 local         
#>  stringi     1.2.4   2018-07-20 CRAN (R 3.5.1)
#>  stringr     1.3.1   2018-05-10 CRAN (R 3.5.0)
#>  tools       3.5.1   2018-07-02 local         
#>  utils     * 3.5.1   2018-07-02 local         
#>  withr       2.1.2   2018-03-15 CRAN (R 3.5.0)
#>  xfun        0.3     2018-07-06 CRAN (R 3.5.1)
#>  yaml        2.2.0   2018-07-25 CRAN (R 3.5.1)

Created on 2018-08-29 by the reprex package (v0.2.0.9000).

@ajaquith
Copy link

Hey Bob, just wanted to let you know that the addition of the extrafont::loadfonts(quiet=TRUE) to .Rmd code chunks solved a problem I was having. Praise be to the search gods. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants