This is a simple wrapper function around as_utf8 and writeLines, letting users write their template strings to file without having to worry about file encodings. For more details on why UTF-8 encoding is necessary, check out Yihui Xie's post on the subject.

  sep = "", = TRUE,
  strip.carriage.returns = TRUE



The template string to be written out


The path to write the template to, passed to writeLines. Also accepts stdout (and likely other similar functions) with a warning.


Separator to use between lines written, passed to writeLines. Defaults to no separator, as templates are generally already spaced appropriately.

A logical value indicating whether or not the filename parameter is expected to be a string (that is, a character vector). Setting the value to FALSE disables the warning when a non-character argument is passed, but this is unsupported functionality.


A logical value indicating whether or not to strip carriage feed characters, should any exist. This preserves line spacing when writing out files originally written on Windows; otherwise writeLines appears to not recognize lines as ending with a newline and inserts one, resulting in 2x the number of line breaks as anticipated.


Returns the input template invisibly.


Note that this function is effectively the inverse of import_pattern -- export_template(import_pattern("out.txt"), "out.txt") should always result in an unchanged file, and exceptions to this rule would be considered bugs.


pattern_file <- tempfile("out", tempdir(), ".Rmd") export_template("my sample pattern", pattern_file)