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

628 lines
19KB

  1. template_variables <- tibble::tribble(
  2. ~variable,
  3. ~default,
  4. ~element,
  5. ~description,
  6. "text_color",
  7. "#000",
  8. "body",
  9. "Text Color",
  10. "header_color",
  11. "#000",
  12. "h1, h2, h3",
  13. "Header Color",
  14. "background_color",
  15. "#FFF",
  16. ".remark-slide-content",
  17. "Slide Background Color",
  18. "link_color",
  19. "rgb(249, 38, 114)",
  20. "a, a > code",
  21. "Link Color",
  22. "text_bold_color",
  23. NULL,
  24. "strong",
  25. "Bold Text Color",
  26. "text_slide_number_color",
  27. "{inverse_background_color}",
  28. ".remark-slide-number",
  29. "Slide Number Color",
  30. "padding",
  31. "1rem 4rem 1rem 4rem",
  32. ".remark-slide-content",
  33. "Slide Padding in `top right [bottom left]` format",
  34. "background_image",
  35. NULL,
  36. ".remark-slide-content",
  37. "Background image applied to each *and every* slide. Set `title_slide_background_image = \"none\"` to remove the background image from the title slide",
  38. "background_size",
  39. NULL,
  40. ".remark-slide-content",
  41. "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",
  42. "background_position",
  43. NULL,
  44. ".remark-slide-content",
  45. "Background image position, requires `background_image` to be set, and it is recommended to adjust `background_size`",
  46. "code_highlight_color",
  47. "rgba(255,255,0,0.5)",
  48. ".remark-code-line-highlighted",
  49. "Code Line Highlight",
  50. "code_inline_color",
  51. "#000",
  52. ".remark-inline-code",
  53. "Inline Code Color",
  54. "code_inline_background_color",
  55. NULL,
  56. ".remark-inline-code",
  57. "Inline Code Background Color",
  58. "code_inline_font_size",
  59. "1em",
  60. ".remark-inline-code",
  61. "Inline Code Text Font Size",
  62. "inverse_background_color",
  63. "#272822",
  64. ".inverse",
  65. "Inverse Background Color",
  66. "inverse_text_color",
  67. "#d6d6d6",
  68. ".inverse",
  69. "Inverse Text Color",
  70. "inverse_text_shadow",
  71. "{FALSE}",
  72. ".inverse",
  73. "Enables Shadow on text of inverse slides",
  74. "inverse_header_color",
  75. "#f3f3f3",
  76. ".inverse h1, .inverse h2, .inverse h3",
  77. "Inverse Header Color",
  78. "title_slide_text_color",
  79. "{inverse_text_color}",
  80. ".title-slide",
  81. "Title Slide Text Color",
  82. "title_slide_background_color",
  83. "{inverse_background_color}",
  84. ".title-slide",
  85. "Title Slide Background Color",
  86. "title_slide_background_image",
  87. NULL,
  88. ".title-slide",
  89. "Title Slide Background Image URL",
  90. "title_slide_background_size",
  91. NULL,
  92. ".title-slide",
  93. "Title Slide Background Image Size, defaults to \"cover\" if background image is set",
  94. "title_slide_background_position",
  95. NULL,
  96. ".title-slide",
  97. "Title Slide Background Image Position",
  98. "footnote_color",
  99. NULL,
  100. ".footnote",
  101. "Footnote text color (if `NA`, then it will be the same color as `text_color`)",
  102. "footnote_font_size",
  103. "0.9em",
  104. ".footnote",
  105. "Footnote font size",
  106. "footnote_position_bottom",
  107. "3em",
  108. ".footnote",
  109. "Footnote location from bottom of screen",
  110. "left_column_subtle_color",
  111. "#777",
  112. ".left-column h2, .left-column h3",
  113. "Left Column Text (not last)",
  114. "left_column_selected_color",
  115. "#000",
  116. ".left-column h2:last-of-type, .left-column h3:last-child",
  117. "Left Column Current Selection",
  118. "blockquote_left_border_color",
  119. "lightgray",
  120. "blockquote",
  121. "Blockquote Left Border Color",
  122. "table_border_color",
  123. "#666",
  124. "table: border-top, border-bottom",
  125. "Table top/bottom border",
  126. "table_row_border_color",
  127. "#ddd",
  128. "table thead th: border-bottom",
  129. "Table row inner bottom border",
  130. "table_row_even_background_color",
  131. "#eee",
  132. "thead, tfoot, tr:nth-child(even)",
  133. "Table Even Row Background Color",
  134. "text_font_size",
  135. "20px",
  136. ".remark-slide-content",
  137. "Slide Body Text Font Size",
  138. "header_h1_font_size",
  139. "55px",
  140. ".remark-slide-content h1",
  141. "h1 Header Text Font Size",
  142. "header_h2_font_size",
  143. "45px",
  144. ".remark-slide-content h2",
  145. "h2 Header Text Font Size",
  146. "header_h3_font_size",
  147. "35px",
  148. ".remark-slide-content h3",
  149. "h3 Header Text Font Size",
  150. "header_background_auto",
  151. "{FALSE}",
  152. "",
  153. "Add background under slide title automatically for h1 header elements. If not enabled, use `class: header_background` to enable",
  154. "header_background_color",
  155. "{header_color}",
  156. ".remark-slide-content h1",
  157. "Background Color for h1 Header with Background",
  158. "header_background_text_color",
  159. "{background_color}",
  160. ".remark-slide-content h1",
  161. "Text Color for h1 Header with Background",
  162. "header_background_padding",
  163. "2rem 4rem 1.5rem 4rem",
  164. ".remark-slide-content h1",
  165. "Padding for h1 Header with Background",
  166. "header_background_content_padding_top",
  167. "7rem",
  168. ".remark-slide-content",
  169. "Top Padding for Content in Slide with Header with Background",
  170. "header_background_ignore_classes",
  171. "{c('normal', 'inverse', 'title', 'middle', 'bottom')}",
  172. ".remark-slide-content",
  173. "Slide Classes Where Header with Background will not be Applied",
  174. "text_slide_number_font_size",
  175. "0.9em",
  176. ".remark-slide-number",
  177. "Slide Number Text Font Size",
  178. "text_font_google",
  179. NULL,
  180. "body",
  181. "Use `google_font()` to specify body font",
  182. "text_font_family",
  183. "'Droid Serif'",
  184. "body",
  185. "Body Text Font Family",
  186. "text_font_weight",
  187. "normal",
  188. "body",
  189. "Body Text Font Weight",
  190. "text_font_url",
  191. "https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic",
  192. "@import url()",
  193. "Body Text Font URL(s)",
  194. "text_font_family_fallback",
  195. "'Palatino Linotype', 'Book Antiqua', Palatino, 'Microsoft YaHei', 'Songti SC'",
  196. "body",
  197. "Body Text Font Fallbacks",
  198. "text_font_base",
  199. "serif",
  200. "body",
  201. "Body Text Base Font (Total Failure Fallback)",
  202. "header_font_google",
  203. NULL,
  204. "body",
  205. "Use `google_font()` to specify header font",
  206. "header_font_family",
  207. "'Yanone Kaffeesatz'",
  208. "h1, h2, h3",
  209. "Header Font Family",
  210. "header_font_weight",
  211. "normal",
  212. "h1, h2, h3",
  213. "Header Font Weight",
  214. "header_font_url",
  215. "https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz",
  216. "@import url",
  217. "Header Font URL",
  218. "code_font_google",
  219. NULL,
  220. "body",
  221. "Use `google_font()` to specify code font",
  222. "code_font_family",
  223. "'Source Code Pro'",
  224. ".remark-code, .remark-inline-code",
  225. "Code Font Family",
  226. "code_font_size",
  227. "0.9em",
  228. ".remark-inline",
  229. "Code Text Font Size",
  230. "code_font_url",
  231. "https://fonts.googleapis.com/css?family=Source+Code+Pro:400,700",
  232. "@import url",
  233. "Code Font URL",
  234. "code_font_family_fallback",
  235. "'Lucida Console', Monaco",
  236. ".remark-code, .remark-inline-code",
  237. "Code Font Fallback"
  238. )
  239. set_default <- function(tv, ...) {
  240. vars <- c(...)
  241. for (var in names(vars)) {
  242. tv[tv$variable == var, "default"] <- vars[var]
  243. }
  244. tv
  245. }
  246. template_mono_light <- tibble::tribble(
  247. ~variable,
  248. ~default,
  249. ~element,
  250. ~description,
  251. "base_color",
  252. "#23395b",
  253. "multiple",
  254. "Monotone base color, works best with a strong color",
  255. "white_color",
  256. "{lighten_color(base_color, 0.9)}",
  257. "multiple",
  258. "Brightest color used, default is a very light version of `base_color`",
  259. "black_color",
  260. "{darken_color(base_color, 0.3)}",
  261. "multiple",
  262. "Darkest color used, default is a very dark, version of `base_color`"
  263. )
  264. template_mono_light <- do.call("rbind", list(template_mono_light, template_variables))
  265. template_mono_light <- set_default(
  266. template_mono_light,
  267. text_color = "{black_color}",
  268. header_color = "{base_color}",
  269. background_color = "{white_color}",
  270. link_color = "{base_color}",
  271. text_bold_color = "{base_color}",
  272. text_slide_number_color = "{base_color}",
  273. code_inline_color = "{base_color}",
  274. inverse_background_color = "{base_color}",
  275. inverse_text_color = "{white_color}",
  276. inverse_header_color = "{white_color}",
  277. left_column_subtle_color = "{apply_alpha(base_color, 0.6)}",
  278. left_column_selected_color = "{base_color}",
  279. blockquote_left_border_color = "{apply_alpha(base_color, 0.5)}",
  280. table_row_even_background_color = "{lighten_color(base_color, 0.8)}"
  281. )
  282. template_mono_dark <- tibble::tribble(
  283. ~variable,
  284. ~default,
  285. ~element,
  286. ~description,
  287. "base_color",
  288. "#cbf7ed",
  289. "multiple",
  290. "Monotone Base Color, works best with a light color.",
  291. "white_color",
  292. "{lighten_color(base_color, 0.8)}",
  293. "multiple",
  294. "Brightest color used, default is a very light version of `base_color`",
  295. "black_color",
  296. "{darken_color(base_color, 0.85)}",
  297. "multiple",
  298. "Darkest color used, default is a very dark, version of `base_color`"
  299. )
  300. template_mono_dark <- do.call("rbind", list(template_mono_dark, template_variables))
  301. template_mono_dark <- set_default(
  302. template_mono_dark,
  303. text_color = "{white_color}",
  304. header_color = "{base_color}",
  305. background_color = "{black_color}",
  306. link_color = "{base_color}",
  307. text_bold_color = "{base_color}",
  308. text_slide_number_color = "{base_color}",
  309. code_inline_color = "{base_color}",
  310. inverse_background_color = "{base_color}",
  311. inverse_text_color = "{black_color}",
  312. inverse_header_color = "{black_color}",
  313. left_column_subtle_color = "{apply_alpha(base_color, 0.6)}",
  314. left_column_selected_color = "{base_color}",
  315. blockquote_left_border_color = "{apply_alpha(base_color, 0.5)}",
  316. table_row_even_background_color = "{darken_color(base_color, 0.7)}"
  317. )
  318. template_mono_accent <- tibble::tribble(
  319. ~variable,
  320. ~default,
  321. ~element,
  322. ~description,
  323. "base_color",
  324. "#43418A",
  325. "multiple",
  326. "Monotone Base Color, works best with a strong color",
  327. "white_color",
  328. "#FFFFFF",
  329. "multiple",
  330. "Brightest color used",
  331. "black_color",
  332. "#272822",
  333. "multiple",
  334. "Darkest color used"
  335. )
  336. template_mono_accent <- do.call("rbind", list(template_mono_accent, template_variables))
  337. template_mono_accent <- set_default(
  338. template_mono_accent,
  339. text_color = "{black_color}",
  340. header_color = "{base_color}",
  341. background_color = "{white_color}",
  342. link_color = "{base_color}",
  343. text_bold_color = "{base_color}",
  344. text_slide_number_color = "{base_color}",
  345. code_inline_color = "{base_color}",
  346. inverse_background_color = "{base_color}",
  347. inverse_text_color = "{white_color}",
  348. inverse_header_color = "{white_color}",
  349. left_column_subtle_color = "{apply_alpha(base_color, 0.6)}",
  350. left_column_selected_color = "{base_color}",
  351. blockquote_left_border_color = "{apply_alpha(base_color, 0.5)}",
  352. table_row_even_background_color = "{lighten_color(base_color, 0.7)}"
  353. )
  354. template_mono_accent_inverse <- tibble::tribble(
  355. ~variable,
  356. ~default,
  357. ~element,
  358. ~description,
  359. "base_color",
  360. "#3C989E",
  361. "multiple",
  362. "Monotone Base Color, works best with a light color",
  363. "white_color",
  364. "#FFFFFF",
  365. "multiple",
  366. "Brightest color used, default is a very light version of `base_color`",
  367. "black_color",
  368. "{darken_color(base_color, 0.9)}",
  369. "multiple",
  370. "Darkest color used, default is a very dark, version of `base_color`"
  371. )
  372. template_mono_accent_inverse <- do.call("rbind", list(template_mono_accent_inverse, template_variables))
  373. template_mono_accent_inverse <- set_default(
  374. template_mono_accent_inverse,
  375. text_color = "{white_color}",
  376. header_color = "{base_color}",
  377. background_color = "{black_color}",
  378. link_color = "{base_color}",
  379. text_bold_color = "{base_color}",
  380. text_slide_number_color = "{base_color}",
  381. code_inline_color = "{base_color}",
  382. inverse_background_color = "{base_color}",
  383. inverse_text_color = "{black_color}",
  384. inverse_header_color = "{black_color}",
  385. left_column_subtle_color = "{apply_alpha(base_color, 0.6)}",
  386. left_column_selected_color = "{base_color}",
  387. blockquote_left_border_color = "{apply_alpha(base_color, 0.5)}",
  388. table_row_even_background_color = "{darken_color(base_color, 0.7)}"
  389. )
  390. template_duo_light <- tibble::tribble(
  391. ~variable,
  392. ~default,
  393. ~element,
  394. ~description,
  395. "primary_color",
  396. "#1F4257",
  397. "multiple",
  398. "Duotone Secondary Color",
  399. "secondary_color",
  400. "#F97B64",
  401. "multiple",
  402. "Duotone Primary Color",
  403. "white_color",
  404. "{lighten_color(primary_color, 0.99)}",
  405. "multiple",
  406. "Brightest color used, default is a very light version of `primary_color`",
  407. "black_color",
  408. "{darken_color(secondary_color, 0.9)}",
  409. "multiple",
  410. "Darkest color used, default is a very dark version of `secondary_color`"
  411. )
  412. template_duo_light <- do.call("rbind", list(template_duo_light, template_variables))
  413. template_duo_light <- set_default(
  414. template_duo_light,
  415. text_color = "{black_color}",
  416. header_color = "{primary_color}",
  417. background_color = "{white_color}",
  418. link_color = "{secondary_color}",
  419. text_bold_color = "{secondary_color}",
  420. text_slide_number_color = "{primary_color}",
  421. code_inline_color = "{secondary_color}",
  422. inverse_background_color = "{primary_color}",
  423. inverse_text_color = "{secondary_color}",
  424. inverse_header_color = "{secondary_color}",
  425. left_column_subtle_color = "{apply_alpha(secondary_color, 0.6)}",
  426. left_column_selected_color = "{secondary_color}",
  427. blockquote_left_border_color = "{apply_alpha(secondary_color, 0.5)}",
  428. table_row_even_background_color = "{lighten_color(secondary_color, 0.7)}"
  429. )
  430. template_duo <- tibble::tribble(
  431. ~variable,
  432. ~default,
  433. ~element,
  434. ~description,
  435. "primary_color",
  436. "#1F4257",
  437. "multiple",
  438. "Duotone Primary Color",
  439. "secondary_color",
  440. "#F97B64",
  441. "multiple",
  442. "Duotone Secondary Color"
  443. )
  444. template_duo <- do.call("rbind", list(template_duo, template_variables))
  445. template_duo <- set_default(
  446. template_duo,
  447. text_color = "{choose_dark_or_light(primary_color, darken_color(primary_color, 0.9), lighten_color(secondary_color, 0.99))}",
  448. header_color = "{secondary_color}",
  449. background_color = "{primary_color}",
  450. link_color = "{secondary_color}",
  451. text_bold_color = "{secondary_color}",
  452. text_slide_number_color = "{text_color}",
  453. code_inline_color = "{secondary_color}",
  454. inverse_background_color = "{secondary_color}",
  455. inverse_text_color = "{primary_color}",
  456. inverse_header_color = "{primary_color}",
  457. title_slide_text_color = "{secondary_color}",
  458. title_slide_background_color = "{primary_color}",
  459. left_column_subtle_color = "{apply_alpha(secondary_color, 0.6)}",
  460. left_column_selected_color = "{secondary_color}",
  461. blockquote_left_border_color = "{apply_alpha(secondary_color, 0.5)}",
  462. table_row_even_background_color = "{lighten_color(primary_color, 0.3)}"
  463. )
  464. template_duo_accent <- tibble::tribble(
  465. ~variable,
  466. ~default,
  467. ~element,
  468. ~description,
  469. "primary_color",
  470. "#006747",
  471. "multiple",
  472. "Duotone Primary Color",
  473. "secondary_color",
  474. "#CFC493",
  475. "multiple",
  476. "Duotone Secondary Color",
  477. "white_color",
  478. "#FFFFFF",
  479. "multiple",
  480. "Brightest color used",
  481. "black_color",
  482. "#000000",
  483. "multiple",
  484. "Darkest color used"
  485. )
  486. template_duo_accent <- do.call("rbind", list(template_duo_accent, template_variables))
  487. template_duo_accent <- set_default(
  488. template_duo_accent,
  489. text_color = "{black_color}",
  490. header_color = "{primary_color}",
  491. background_color = "{white_color}",
  492. link_color = "{choose_dark_or_light(secondary_color, primary_color, secondary_color)}",
  493. text_bold_color = "{choose_dark_or_light(secondary_color, primary_color, secondary_color)}",
  494. text_slide_number_color = "{primary_color}",
  495. code_inline_color = "{choose_dark_or_light(secondary_color, primary_color, secondary_color)}",
  496. inverse_background_color = "{secondary_color}",
  497. inverse_text_color = "{choose_dark_or_light(secondary_color, black_color, white_color)}",
  498. inverse_header_color = "{choose_dark_or_light(secondary_color, black_color, white_color)}",
  499. title_slide_background_color = "{primary_color}",
  500. title_slide_text_color = "{choose_dark_or_light(primary_color, black_color, white_color)}",
  501. left_column_subtle_color = "{apply_alpha(primary_color, 0.6)}",
  502. left_column_selected_color = "{primary_color}",
  503. blockquote_left_border_color = "{apply_alpha(secondary_color, 0.5)}",
  504. table_row_even_background_color = "{lighten_color(secondary_color, 0.3)}"
  505. )
  506. template_duo_accent_inverse <- set_default(
  507. template_duo_accent,
  508. text_color = "{white_color}",
  509. header_color = "{primary_color}",
  510. background_color = "{black_color}",
  511. link_color = "{choose_dark_or_light(secondary_color, secondary_color, primary_color)}",
  512. text_bold_color = "{choose_dark_or_light(secondary_color, secondary_color, primary_color)}",
  513. text_slide_number_color = "{primary_color}",
  514. code_inline_color = "{choose_dark_or_light(secondary_color, secondary_color, primary_color)}",
  515. inverse_background_color = "{secondary_color}",
  516. inverse_text_color = "{choose_dark_or_light(secondary_color, black_color, white_color)}",
  517. inverse_header_color = "{choose_dark_or_light(secondary_color, black_color, white_color)}",
  518. title_slide_background_color = "{primary_color}",
  519. title_slide_text_color = "{choose_dark_or_light(primary_color, black_color, white_color)}",
  520. left_column_subtle_color = "{apply_alpha(primary_color, 0.6)}",
  521. left_column_selected_color = "{primary_color}",
  522. blockquote_left_border_color = "{apply_alpha(secondary_color, 0.5)}",
  523. table_row_even_background_color = "{darken_color(choose_dark_or_light(primary_color, secondary_color, primary_color), 0.3)}"
  524. )
  525. solarized <- list(
  526. "base03" = "#002b36",
  527. "base02" = "#073642",
  528. "base01" = "#586e75",
  529. "base00" = "#657b83",
  530. "base0" = "#839496",
  531. "base1" = "#93a1a1",
  532. "base2" = "#eee8d5",
  533. "base3" = "#fdf6e3",
  534. "yellow" = "#b58900",
  535. "orange" = "#cb4b16",
  536. "red" = "#dc322f",
  537. "magenta" = "#d33682",
  538. "violet" = "#6c71c4",
  539. "blue" = "#268bd2",
  540. "cyan" = "#2aa198",
  541. "green" = "#859900"
  542. )
  543. template_solarized_light <- set_default(
  544. template_variables,
  545. text_color = solarized$base00,
  546. header_color = solarized$red,
  547. background_color = solarized$base3,
  548. link_color = solarized$yellow,
  549. text_bold_color = solarized$magenta,
  550. text_slide_number_color = solarized$base1,
  551. code_highlight_color = "#268bd240",
  552. # xaringanthemer:::apply_alpha(solarized$blue, 0.25)
  553. code_inline_color = solarized$violet,
  554. inverse_background_color = solarized$base03,
  555. inverse_text_color = solarized$base3,
  556. inverse_header_color = "{inverse_text_color}",
  557. title_slide_text_color = "{inverse_text_color}",
  558. title_slide_background_color = "{inverse_background_color}",
  559. left_column_subtle_color = solarized$base1,
  560. left_column_selected_color = solarized$base01,
  561. blockquote_left_border_color = solarized$orange,
  562. table_border_color = solarized$base0,
  563. table_row_border_color = solarized$base0,
  564. table_row_even_background_color = solarized$base2
  565. )
  566. template_solarized_dark <- set_default(
  567. template_variables,
  568. text_color = solarized$base0,
  569. header_color = solarized$red,
  570. background_color = solarized$base03,
  571. link_color = solarized$yellow,
  572. text_bold_color = solarized$magenta,
  573. text_slide_number_color = solarized$base01,
  574. code_highlight_color = "#268bd240",
  575. # xaringanthemer:::apply_alpha(solarized$blue, 0.25)
  576. code_inline_color = solarized$violet,
  577. inverse_background_color = solarized$base3,
  578. inverse_text_color = solarized$base03,
  579. inverse_header_color = "{inverse_text_color}",
  580. title_slide_text_color = "{inverse_text_color}",
  581. title_slide_background_color = "{inverse_background_color}",
  582. left_column_subtle_color = solarized$base01,
  583. left_column_selected_color = solarized$base1,
  584. blockquote_left_border_color = solarized$orange,
  585. table_border_color = solarized$base00,
  586. table_row_border_color = solarized$base00,
  587. table_row_even_background_color = solarized$base02
  588. )
  589. # Theme Generating Helpers ----------------------------------------------
  590. plural_element <- function(css_name) {
  591. is_mult <- grepl(",|and|or", css_name)
  592. is_class <- grepl("^\\.", css_name)
  593. ifelse(
  594. is_class,
  595. ifelse(is_mult, "classes", "class"),
  596. ifelse(is_mult, "elements", "element")
  597. )
  598. }
  599. element_description <- function(element) {
  600. out <- rep("", length(element))
  601. multiple <- grepl("multiple", element)
  602. out[multiple] <- "Modifies multiple CSS classes or elements."
  603. ifelse(
  604. multiple | is.na(element) | element == "",
  605. out,
  606. glue::glue("Modifies the `{element}` {plural_element(element)}.")
  607. )
  608. }