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

351 line
21KB

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