😎 Give your xaringan slides some style
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

355 lines
21KB

  1. #nocov start
  2. template_variables <- tibble::tribble(
  3. ~ variable, ~ default, ~ element, ~ description
  4. , "text_color", "#000", "body", "Text Color"
  5. , "header_color", "#000", "h1, h2, h3", "Header Color"
  6. , "background_color", "#FFF", ".remark-slide-content", "Slide Background Color"
  7. , "link_color", "rgb(249, 38, 114)", "a, a > code", "Link Color"
  8. , "text_bold_color", NULL, "strong", "Bold Text Color"
  9. , "text_slide_number_color", "{inverse_background_color}", ".remark-slide-number", "Slide Number Color"
  10. , "padding", "16px 64px 16px 64px", ".remark-slide-content", "Slide Padding in `top right [bottom left]` format"
  11. , "background_image", NULL, ".remark-slide-content", "Background image applied to each *and every* slide. Set `title_slide_background_image = \"none\"` to remove the background image from the title slide"
  12. , "background_size", NULL, ".remark-slide-content", "Background image size, requires `background_image` to be set. If `background_image` is set, `background_size` will default to `cover` so the backround fills the screen. If both `background_image` and `background_position` are set, will default to 100 percent"
  13. , "background_position", NULL, ".remark-slide-content", "Background image position, requires `background_image` to be set, and it is recommended to adjust `background_size`"
  14. , "code_highlight_color", "rgba(255,255,0,0.5)", ".remark-code-line-highlighted", "Code Line Highlight"
  15. , "code_inline_color", "#000", ".remark-inline-code", "Inline Code Color"
  16. , "code_inline_background_color", NULL, ".remark-inline-code", "Inline Code Background Color"
  17. , "code_inline_font_size", "1rem", ".remark-inline-code", "Inline Code Text Font Size"
  18. , "inverse_background_color", "#272822", ".inverse", "Inverse Background Color"
  19. , "inverse_text_color", "#d6d6d6", ".inverse", "Inverse Text Color"
  20. , "inverse_text_shadow", "{FALSE}", ".inverse", "Enables Shadow on text of inverse slides"
  21. , "inverse_header_color", "#f3f3f3", ".inverse h1, .inverse h2, .inverse h3", "Inverse Header Color"
  22. , "title_slide_text_color", "{inverse_text_color}", ".title-slide", "Title Slide Text Color"
  23. , "title_slide_background_color", "{inverse_background_color}", ".title-slide", "Title Slide Background Color"
  24. , "title_slide_background_image", NULL, ".title-slide", "Title Slide Background Image URL"
  25. , "title_slide_background_size", NULL, ".title-slide", "Title Slide Background Image Size, defaults to \"cover\" if background image is set"
  26. , "title_slide_background_position", NULL, ".title-slide", "Title Slide Background Image Position"
  27. , "footnote_color", NULL, ".footnote", "Footnote text color (if `NA`, then it will be the same color as `text_color`)"
  28. , "footnote_font_size", "0.9rem", ".footnote", "Footnote font size"
  29. , "footnote_position_bottom", "60px", ".footnote", "Footnote location from bottom of screen"
  30. , "left_column_subtle_color", "#777", ".left-column h2, .left-column h3", "Left Column Text (not last)"
  31. , "left_column_selected_color", "#000", ".left-column h2:last-of-type, .left-column h3:last-child", "Left Column Current Selection"
  32. , "blockquote_left_border_color", "lightgray", "blockquote", "Blockquote Left Border Color"
  33. , "table_border_color", "#666", "table: border-top, border-bottom", "Table top/bottom border"
  34. , "table_row_border_color", "#ddd", "table thead th: border-bottom", "Table row inner bottom border"
  35. , "table_row_even_background_color", "#eee", "thead, tfoot, tr:nth-child(even)", "Table Even Row Background Color"
  36. , "base_font_size", "20px", "html", "Base Font Size for All Slide Elements (must be `px`)"
  37. , "text_font_size", "1rem", ".remark-slide-content", "Slide Body Text Font Size"
  38. , "header_h1_font_size", "2.75rem", ".remark-slide-content h1", "h1 Header Text Font Size"
  39. , "header_h2_font_size", "2.25rem", ".remark-slide-content h2", "h2 Header Text Font Size"
  40. , "header_h3_font_size", "1.75rem", ".remark-slide-content h3", "h3 Header Text Font Size"
  41. , "header_background_auto", "{FALSE}", "", "Add background under slide title automatically for h1 header elements. If not enabled, use `class: header_background` to enable"
  42. , "header_background_color", "{header_color}", ".remark-slide-content h1", "Background Color for h1 Header with Background"
  43. , "header_background_text_color", "{background_color}", ".remark-slide-content h1", "Text Color for h1 Header with Background"
  44. , "header_background_padding", NULL, ".remark-slide-content h1", "Padding for h1 Header with Background"
  45. , "header_background_content_padding_top", "7rem", ".remark-slide-content", "Top Padding for Content in Slide with Header with Background"
  46. , "header_background_ignore_classes", "{c('normal', 'inverse', 'title', 'middle', 'bottom')}", ".remark-slide-content", "Slide Classes Where Header with Background will not be Applied"
  47. , "text_slide_number_font_size", "0.9rem", ".remark-slide-number", "Slide Number Text Font Size"
  48. , "text_font_google", "{google_font(\"Noto Sans\", \"400\", \"400i\", \"700\", \"700i\")}", "body", "Use `google_font()` to specify body font"
  49. , "text_font_family", NULL, "body", "Body Text Font Family (xaringan default is `'Droid Serif'`)"
  50. , "text_font_weight", "normal", "body", "Body Text Font Weight"
  51. , "text_font_url", NULL, "@import url()", "Body Text Font URL(s)"
  52. , "text_font_family_fallback", "'Palatino Linotype', 'Book Antiqua', Palatino, 'Microsoft YaHei', 'Songti SC'", "body", "Body Text Font Fallbacks"
  53. , "text_font_base", "serif", "body", "Body Text Base Font (Total Failure Fallback)"
  54. , "header_font_google", "{google_font(\"Cabin\", \"600\", \"600i\")}", "body", "Use `google_font()` to specify header font"
  55. , "header_font_family", NULL, "h1, h2, h3", "Header Font Family (xaringan default is `'Yanone Kaffeesatz'`)"
  56. , "header_font_weight", "normal", "h1, h2, h3", "Header Font Weight"
  57. , "header_font_url", NULL, "@import url", "Header Font URL"
  58. , "code_font_google", "{google_font(\"Source Code Pro\", \"400\", \"700\")}", "body", "Use `google_font()` to specify code font"
  59. , "code_font_family", NULL, ".remark-code, .remark-inline-code", "Code Font Family"
  60. , "code_font_size", "0.9rem", ".remark-inline", "Code Text Font Size"
  61. , "code_font_url", NULL, "@import url", "Code Font URL"
  62. , "code_font_family_fallback", "'Lucida Console', Monaco", ".remark-code, .remark-inline-code", "Code Font Fallback"
  63. )
  64. set_default <- function(tv, ...) {
  65. vars <- c(...)
  66. for (var in names(vars)) {
  67. tv[tv$variable == var, 'default'] <- vars[var]
  68. }
  69. tv
  70. }
  71. template_mono_light <- tibble::tribble(
  72. ~ variable, ~ default, ~ element, ~ description
  73. , "base_color", "#23395b", "multiple", "Monotone base color, works best with a strong color"
  74. , "white_color", "{lighten_color(base_color, 0.9)}", "multiple", "Brightest color used, default is a very light version of `base_color`"
  75. , "black_color", "{darken_color(base_color, 0.3)}", "multiple", "Darkest color used, default is a very dark, version of `base_color`"
  76. )
  77. template_mono_light <- do.call('rbind', list(template_mono_light, template_variables))
  78. template_mono_light <- set_default(
  79. template_mono_light,
  80. text_color = "{black_color}",
  81. header_color = "{base_color}",
  82. background_color = "{white_color}",
  83. link_color = "{base_color}",
  84. text_bold_color = "{base_color}",
  85. text_slide_number_color = "{base_color}",
  86. code_inline_color = "{base_color}",
  87. inverse_background_color = "{base_color}",
  88. inverse_text_color = "{white_color}",
  89. inverse_header_color = "{white_color}",
  90. left_column_subtle_color = "{apply_alpha(base_color, 0.6)}",
  91. left_column_selected_color = "{base_color}",
  92. blockquote_left_border_color = "{apply_alpha(base_color, 0.5)}",
  93. table_row_even_background_color = "{lighten_color(base_color, 0.8)}")
  94. template_mono_dark <- tibble::tribble(
  95. ~ variable, ~ default, ~ element, ~ description
  96. , "base_color", "#cbf7ed", "multiple", "Monotone Base Color, works best with a light color."
  97. , "white_color", "{lighten_color(base_color, 0.8)}", "multiple", "Brightest color used, default is a very light version of `base_color`"
  98. , "black_color", "{darken_color(base_color, 0.85)}", "multiple", "Darkest color used, default is a very dark, version of `base_color`"
  99. )
  100. template_mono_dark <- do.call('rbind', list(template_mono_dark, template_variables))
  101. template_mono_dark <- set_default(
  102. template_mono_dark,
  103. text_color = "{white_color}",
  104. header_color = "{base_color}",
  105. background_color = "{black_color}",
  106. link_color = "{base_color}",
  107. text_bold_color = "{base_color}",
  108. text_slide_number_color = "{base_color}",
  109. code_inline_color = "{base_color}",
  110. inverse_background_color = "{base_color}",
  111. inverse_text_color = "{black_color}",
  112. inverse_header_color = "{black_color}",
  113. left_column_subtle_color = "{apply_alpha(base_color, 0.6)}",
  114. left_column_selected_color = "{base_color}",
  115. blockquote_left_border_color = "{apply_alpha(base_color, 0.5)}",
  116. table_row_even_background_color = "{darken_color(base_color, 0.7)}")
  117. template_mono_accent <- tibble::tribble(
  118. ~ variable, ~ default, ~ element, ~ description
  119. , "base_color", "#43418A", "multiple", "Monotone Base Color, works best with a strong color"
  120. , "white_color", "#FFFFFF", "multiple", "Brightest color used"
  121. , "black_color", "#272822", "multiple", "Darkest color used"
  122. )
  123. template_mono_accent <- do.call('rbind', list(template_mono_accent, template_variables))
  124. template_mono_accent <- set_default(
  125. template_mono_accent,
  126. text_color = "{black_color}",
  127. header_color = "{base_color}",
  128. background_color = "{white_color}",
  129. link_color = "{base_color}",
  130. text_bold_color = "{base_color}",
  131. text_slide_number_color = "{base_color}",
  132. code_inline_color = "{base_color}",
  133. inverse_background_color = "{base_color}",
  134. inverse_text_color = "{white_color}",
  135. inverse_header_color = "{white_color}",
  136. left_column_subtle_color = "{apply_alpha(base_color, 0.6)}",
  137. left_column_selected_color = "{base_color}",
  138. blockquote_left_border_color = "{apply_alpha(base_color, 0.5)}",
  139. table_row_even_background_color = "{lighten_color(base_color, 0.7)}")
  140. template_mono_accent_inverse <- tibble::tribble(
  141. ~ variable, ~ default, ~ element, ~ description
  142. , "base_color", "#3C989E", "multiple", "Monotone Base Color, works best with a light color"
  143. , "white_color", "#FFFFFF", "multiple", "Brightest color used, default is a very light version of `base_color`"
  144. , "black_color", "{darken_color(base_color, 0.9)}", "multiple", "Darkest color used, default is a very dark, version of `base_color`"
  145. )
  146. template_mono_accent_inverse <- do.call('rbind', list(template_mono_accent_inverse, template_variables))
  147. template_mono_accent_inverse <- set_default(
  148. template_mono_accent_inverse,
  149. text_color = "{white_color}",
  150. header_color = "{base_color}",
  151. background_color = "{black_color}",
  152. link_color = "{base_color}",
  153. text_bold_color = "{base_color}",
  154. text_slide_number_color = "{base_color}",
  155. code_inline_color = "{base_color}",
  156. inverse_background_color = "{base_color}",
  157. inverse_text_color = "{black_color}",
  158. inverse_header_color = "{black_color}",
  159. left_column_subtle_color = "{apply_alpha(base_color, 0.6)}",
  160. left_column_selected_color = "{base_color}",
  161. blockquote_left_border_color = "{apply_alpha(base_color, 0.5)}",
  162. table_row_even_background_color = "{darken_color(base_color, 0.7)}")
  163. template_duo_light <- tibble::tribble(
  164. ~ variable, ~ default, ~ element, ~ description
  165. , "primary_color", "#1F4257", "multiple", "Duotone Secondary Color"
  166. , "secondary_color", "#F97B64", "multiple", "Duotone Primary Color"
  167. , "white_color", "{lighten_color(primary_color, 0.99)}", "multiple", "Brightest color used, default is a very light version of `primary_color`"
  168. , "black_color", "{darken_color(secondary_color, 0.9)}", "multiple", "Darkest color used, default is a very dark version of `secondary_color`"
  169. )
  170. template_duo_light <- do.call('rbind', list(template_duo_light, template_variables))
  171. template_duo_light <- set_default(
  172. template_duo_light,
  173. text_color = "{black_color}",
  174. header_color = "{primary_color}",
  175. background_color = "{white_color}",
  176. link_color = "{secondary_color}",
  177. text_bold_color = "{secondary_color}",
  178. text_slide_number_color = "{primary_color}",
  179. code_inline_color = "{secondary_color}",
  180. inverse_background_color = "{primary_color}",
  181. inverse_text_color = "{secondary_color}",
  182. inverse_header_color = "{secondary_color}",
  183. left_column_subtle_color = "{apply_alpha(secondary_color, 0.6)}",
  184. left_column_selected_color = "{secondary_color}",
  185. blockquote_left_border_color = "{apply_alpha(secondary_color, 0.5)}",
  186. table_row_even_background_color = "{lighten_color(secondary_color, 0.7)}")
  187. template_duo <- tibble::tribble(
  188. ~ variable, ~ default, ~ element, ~ description
  189. , "primary_color", "#1F4257", "multiple", "Duotone Primary Color"
  190. , "secondary_color", "#F97B64", "multiple", "Duotone Secondary Color"
  191. )
  192. template_duo <- do.call('rbind', list(template_duo, template_variables))
  193. template_duo <- set_default(
  194. template_duo,
  195. text_color = "{choose_dark_or_light(primary_color, darken_color(primary_color, 0.9), lighten_color(secondary_color, 0.99))}",
  196. header_color = "{secondary_color}",
  197. background_color = "{primary_color}",
  198. link_color = "{secondary_color}",
  199. text_bold_color = "{secondary_color}",
  200. text_slide_number_color = "{text_color}",
  201. code_inline_color = "{secondary_color}",
  202. inverse_background_color = "{secondary_color}",
  203. inverse_text_color = "{primary_color}",
  204. inverse_header_color = "{primary_color}",
  205. title_slide_text_color = "{secondary_color}",
  206. title_slide_background_color = "{primary_color}",
  207. left_column_subtle_color = "{apply_alpha(secondary_color, 0.6)}",
  208. left_column_selected_color = "{secondary_color}",
  209. blockquote_left_border_color = "{apply_alpha(secondary_color, 0.5)}",
  210. table_row_even_background_color = "{lighten_color(primary_color, 0.3)}")
  211. template_duo_accent <- tibble::tribble(
  212. ~ variable, ~ default, ~ element, ~ description
  213. , "primary_color", "#006747", "multiple", "Duotone Primary Color"
  214. , "secondary_color", "#CFC493", "multiple", "Duotone Secondary Color"
  215. , "white_color", "#FFFFFF", "multiple", "Brightest color used"
  216. , "black_color", "#000000", "multiple", "Darkest color used"
  217. )
  218. template_duo_accent <- do.call('rbind', list(template_duo_accent, template_variables))
  219. template_duo_accent <- set_default(
  220. template_duo_accent,
  221. text_color = "{black_color}",
  222. header_color = "{primary_color}",
  223. background_color = "{white_color}",
  224. link_color = "{choose_dark_or_light(secondary_color, primary_color, secondary_color)}",
  225. text_bold_color = "{choose_dark_or_light(secondary_color, primary_color, secondary_color)}",
  226. text_slide_number_color = "{primary_color}",
  227. code_inline_color = "{choose_dark_or_light(secondary_color, primary_color, secondary_color)}",
  228. inverse_background_color = "{secondary_color}",
  229. inverse_text_color = "{choose_dark_or_light(secondary_color, black_color, white_color)}",
  230. inverse_header_color = "{choose_dark_or_light(secondary_color, black_color, white_color)}",
  231. title_slide_background_color = "{primary_color}",
  232. title_slide_text_color = "{choose_dark_or_light(primary_color, black_color, white_color)}",
  233. left_column_subtle_color = "{apply_alpha(primary_color, 0.6)}",
  234. left_column_selected_color = "{primary_color}",
  235. blockquote_left_border_color = "{apply_alpha(secondary_color, 0.5)}",
  236. table_row_even_background_color = "{lighten_color(secondary_color, 0.3)}")
  237. template_duo_accent_inverse <- set_default(
  238. template_duo_accent,
  239. text_color = "{white_color}",
  240. header_color = "{primary_color}",
  241. background_color = "{black_color}",
  242. link_color = "{choose_dark_or_light(secondary_color, secondary_color, primary_color)}",
  243. text_bold_color = "{choose_dark_or_light(secondary_color, secondary_color, primary_color)}",
  244. text_slide_number_color = "{primary_color}",
  245. code_inline_color = "{choose_dark_or_light(secondary_color, secondary_color, primary_color)}",
  246. inverse_background_color = "{secondary_color}",
  247. inverse_text_color = "{choose_dark_or_light(secondary_color, black_color, white_color)}",
  248. inverse_header_color = "{choose_dark_or_light(secondary_color, black_color, white_color)}",
  249. title_slide_background_color = "{primary_color}",
  250. title_slide_text_color = "{choose_dark_or_light(primary_color, black_color, white_color)}",
  251. left_column_subtle_color = "{apply_alpha(primary_color, 0.6)}",
  252. left_column_selected_color = "{primary_color}",
  253. blockquote_left_border_color = "{apply_alpha(secondary_color, 0.5)}",
  254. table_row_even_background_color = "{darken_color(choose_dark_or_light(primary_color, secondary_color, primary_color), 0.3)}")
  255. solarized <- list(
  256. "base03" = "#002b36",
  257. "base02" = "#073642",
  258. "base01" = "#586e75",
  259. "base00" = "#657b83",
  260. "base0" = "#839496",
  261. "base1" = "#93a1a1",
  262. "base2" = "#eee8d5",
  263. "base3" = "#fdf6e3",
  264. "yellow" = "#b58900",
  265. "orange" = "#cb4b16",
  266. "red" = "#dc322f",
  267. "magenta" = "#d33682",
  268. "violet" = "#6c71c4",
  269. "blue" = "#268bd2",
  270. "cyan" = "#2aa198",
  271. "green" = "#859900")
  272. template_solarized_light <- set_default(
  273. template_variables,
  274. text_color = solarized$base00,
  275. header_color = solarized$red,
  276. background_color = solarized$base3,
  277. link_color = solarized$yellow,
  278. text_bold_color = solarized$magenta,
  279. text_slide_number_color = solarized$base1,
  280. code_highlight_color = "#268bd240", #xaringanthemer:::apply_alpha(solarized$blue, 0.25)
  281. code_inline_color = solarized$violet,
  282. inverse_background_color = solarized$base03,
  283. inverse_text_color = solarized$base3,
  284. inverse_header_color = "{inverse_text_color}",
  285. title_slide_text_color = "{inverse_text_color}",
  286. title_slide_background_color = "{inverse_background_color}",
  287. left_column_subtle_color = solarized$base1,
  288. left_column_selected_color = solarized$base01,
  289. blockquote_left_border_color = solarized$orange,
  290. table_border_color = solarized$base0,
  291. table_row_border_color = solarized$base0,
  292. table_row_even_background_color = solarized$base2
  293. )
  294. template_solarized_dark <- set_default(
  295. template_variables,
  296. text_color = solarized$base0,
  297. header_color = solarized$red,
  298. background_color = solarized$base03,
  299. link_color = solarized$yellow,
  300. text_bold_color = solarized$magenta,
  301. text_slide_number_color = solarized$base01,
  302. code_highlight_color = "#268bd240", #xaringanthemer:::apply_alpha(solarized$blue, 0.25)
  303. code_inline_color = solarized$violet,
  304. inverse_background_color = solarized$base3,
  305. inverse_text_color = solarized$base03,
  306. inverse_header_color = "{inverse_text_color}",
  307. title_slide_text_color = "{inverse_text_color}",
  308. title_slide_background_color = "{inverse_background_color}",
  309. left_column_subtle_color = solarized$base01,
  310. left_column_selected_color = solarized$base1,
  311. blockquote_left_border_color = solarized$orange,
  312. table_border_color = solarized$base00,
  313. table_row_border_color = solarized$base00,
  314. table_row_even_background_color = solarized$base02
  315. )
  316. # Theme Generating Helpers ----------------------------------------------
  317. plural_element <- function(css_name) {
  318. is_mult <- grepl(",|and|or", css_name)
  319. is_class <- grepl("^\\.", css_name)
  320. ifelse(is_class,
  321. ifelse(is_mult, "classes", "class"),
  322. ifelse(is_mult, "elements", "element")
  323. )
  324. }
  325. element_description <- function(element) {
  326. out <- rep("", length(element))
  327. multiple <- grepl("multiple", element)
  328. out[multiple] <- "Modifies multiple CSS classes or elements."
  329. ifelse(
  330. multiple | is.na(element) | element == "",
  331. out,
  332. glue::glue("Modifies the `{element}` {plural_element(element)}.")
  333. )
  334. }
  335. #nocov end