😎 Give your xaringan slides some style
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

79 行
2.7KB

  1. # Make sure font names are wrapped in quotes if they have spaces
  2. f_args <- names(formals(sys.function()))
  3. for (var in f_args[grepl("font_family$", f_args)]) {
  4. eval(parse(text = paste0(
  5. var, "<-quote_elements_w_spaces(", var, ")"
  6. )))
  7. }
  8. # Use font_..._google args to overwrite font args
  9. for (var in f_args[grepl("font_google$", f_args)]) {
  10. gf <- eval(parse(text = var))
  11. if (is.null(gf)) next
  12. if (!inherits(gf, "google_font")) stop(
  13. "`", var, "` must be set using `google_font()`."
  14. )
  15. group <- stringr::str_split(var, "_")[[1]][1]
  16. if (group == "text") {
  17. text_font_family <- gf$family
  18. text_font_weight <- gf$weights %||% "normal"
  19. text_font_weight <- substr(text_font_weight, 1, regexpr(",", text_font_weight)[1]-1)
  20. text_font_url <- gf$url
  21. } else {
  22. for (thing in c("family", "url")) {
  23. eval(parse(text = paste0(
  24. group, "_font_", thing, " <- gf$", thing
  25. )))
  26. }
  27. }
  28. }
  29. extra_font_imports <- if (is.null(extra_fonts)) "" else list2fonts(extra_fonts)
  30. # convert NA arguments to NULL
  31. for (var in f_args) {
  32. val <- eval(parse(text = var))
  33. if (is.null(val)) next
  34. val <- val[!is.na(val)]
  35. is_na <- length(val) == 0
  36. if (is_na) assign(var, NULL)
  37. }
  38. # prepare variables for template
  39. body_font_family <- paste(c(text_font_family, text_font_family_fallback, text_font_base), collapse = ', ')
  40. backround_size_fallback <- if (is.null(background_position)) "cover" else "100%"
  41. background_size <- background_image %??% (background_size %||% background_size_fallback)
  42. title_slide_background_size <- title_slide_background_size %||% (
  43. title_slide_background_image %??% "cover"
  44. )
  45. table_row_even_background_color <- table_row_even_background_color %||% background_color
  46. xaringanthemer_version <- utils::packageVersion("xaringanthemer")
  47. # prepare header background object
  48. header_background <- if (header_background_enable) {
  49. needs_leading_dot <- !grepl("^\\.", header_background_ignore_classes)
  50. header_background_ignore_classes[needs_leading_dot] <- paste0(
  51. ".", header_background_ignore_classes[needs_leading_dot]
  52. )
  53. header_background_ignore_classes <- purrr::map(
  54. header_background_ignore_classes,
  55. ~ list(class = .)
  56. )
  57. list(
  58. background_color = header_background_color,
  59. text_color = header_background_text_color,
  60. padding = header_background_padding,
  61. content_padding_top = header_background_content_padding_top,
  62. ignore = header_background_ignore_classes
  63. )
  64. }
  65. tf <- system.file("resources", "template.css", package = "xaringanthemer")
  66. template <- readLines(tf, warn = FALSE)
  67. template <- paste(template, collapse = "\n")
  68. x <- whisker::whisker.render(template)
  69. writeLines(x, con = outfile)
  70. if (!is.null(extra_css)) write_extra_css(extra_css, outfile)
  71. outfile