#' Custom Word document template
#'
#' @description Export an Rmarkdown file to a Word document using a custom template.
#' @details All of the default arguments are the same as those from the original
#' `rmarkdown::word_document()`. The `_te` version uses a personally
#' customized Word document. The `_rstudio` version is the document
#' that is generated by knitting the default `rmarkdown` Word document template.
#' @inheritParams rmarkdown::word_document
#' @param reference_docx path. Refers to custom word document template.
#' @rdname word_document
#' @export
#' @seealso <https://github.com/rstudio/rmarkdown/blob/master/R/word_document.R>.
word_document_te <-
function(toc = FALSE,
toc_depth = 3,
fig_width = 5,
fig_height = 4,
fig_caption = TRUE,
df_print = "default",
smart = TRUE,
highlight = "default",
# reference_docx = "default",
reference_docx = system.file("templates", "te", "template-te.docx", package = "teproj"),
keep_md = FALSE,
md_extensions = NULL,
pandoc_args = NULL) {
rmarkdown::word_document(
toc = FALSE,
toc_depth = toc_depth,
fig_width = fig_width,
fig_height = fig_height,
fig_caption = fig_caption,
df_print = df_print,
smart = smart,
highlight = highlight,
reference_docx = reference_docx,
keep_md = keep_md,
md_extensions = md_extensions,
pandoc_args = pandoc_args
)
}
#' @param ... dots. Arguments passed to `word_dcoument_te()`.
#' @rdname word_document
#' @export
word_document_rstudio <-
function(...,
reference_docx = system.file("templates", "rstudio", "template-default.docx", package = "teproj")) {
word_document_te(..., reference_docx = reference_docx)
}
#' Custom template file
#'
#' @description Add a {template} file to the project.
#' @details Calls `usethis::use_template()`. Really only would need to use
#' `system.file()`, `file.copy()`, etc. if there are no variables to be filled in the template file.
#' (See the `data` argument of `usethis::use_template()`.
#' Nonetheless, `usethis::use_template()`'s additional functionality (e.g.
#' prompting the user about overwriting files) is useful.
#' @param template character. Name of template file. Default value is provided.
#' @param save_as character. Location/name of file to save. Default is provided.
#' @param package character. Name of package. Default is name of this package.
#' @param ... dots. Arguments passed to `usethis::use_template()`.
#' @rdname use_template
#' @seealso <https://github.com/r-lib/usethis/blob/master/R/template.R>.
.use_template <-
function(template, save_as = template, package = "teproj", ...) {
if (!requireNamespace("usethis", quietly = TRUE)) {
stop("Must have `{usethis}` package installed.", call. = FALSE)
}
# if (!requireNamespace("whisker", quietly = TRUE)) {
# stop("Must have `{whisker}` package installed.", call. = FALSE)
# }
dir <- dirname(save_as)
create_dir(dir)
# # NOTE: Not working...???
# usethis::use_template(template = template, package = package)
# So recreating the functionality of the
# `usethis::use_template()` and the `whisker::render.plot()` functions
# (the latter of which is called by the former).
# First line in `usethis::use_template()`.
# # NOTE: Not working...???
# template_contents <-
# usethis:::render_template(
# template = ".Rprofile",
# package = "teproj"
# )
# First line in `usethis::render_template()`.
# (called in `usethis::use_template()`).
# template_path <-
# usethis:::find_template(
# template = ".Rprofile",
# package = "teproj"
# )
# Or just do this...
template_path <-
base::system.file(
"templates",
template,
package = package
)
# Second line in `usethis::render_template()` (broken down into parts).
template_contents_raw <-
readLines(template_path, encoding = "UTF-8")
# # NOTE: Not working...???
# template_contents <- whisker::whisker.render(template_content_raw)
# So doing this instead...
# Main action in `whisker::whisker.render()`.
# .parseTemplate <- utils::getFromNamespace("whisker", "parseTemplate")
# tmpl <- .parseTemplate(template_contents_raw)
# tmpl_parse <- tmpl(list())
# Actually, if no data to pass to `tampl()`, then just skip this.
tmpl_parse <- template_contents_raw
# Back to `usethis::render_template()`.
template_contents <- strsplit(tmpl_parse, "\n")[[1]]
# Back to `usethis::use_template()`.
# Use `getFromNamespace()` to avoid R CMD CHECK note about non-exported function.
.write_over <- utils::getFromNamespace("write_over", "usethis")
new <- .write_over(save_as, template_contents)
# Skipping some of the other lines in `usethis::use_template()`.
invisible(new)
}
#' @rdname use_template
#' @export
use_r_profile <-
function(template = ".Rprofile",
save_as = template,
...) {
.use_template(template = template, save_as = save_as)
}
#' @rdname use_template
#' @export
use_task_schedule <-
function(template = "schedule-task.R",
save_as = file.path("R", template),
...) {
.use_template(template = template, save_as = save_as)
}
#' @rdname use_template
#' @export
use_r_buildignore <-
function(template = ".Rbuildignore",
save_as = template,
...) {
.use_template(template = template, save_as = save_as)
}
#' @rdname use_template
#' @export
use_gitignore <-
function(template = ".gitignore",
save_as = template,
...) {
.use_template(template = template, save_as = save_as)
}
#' @rdname use_template
#' @export
use_config_yml <-
function(template = "config.yml",
save_as = template,
...) {
.use_template(template = template, save_as = save_as)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.