diff --git a/R/utils.R b/R/utils.R
new file mode 100644
index 0000000..2aa1fa3
--- /dev/null
+++ b/R/utils.R
@@ -0,0 +1,82 @@
+find_file <- function(template, file) {
+  template <- system.file("rmarkdown", "templates", template, file,
+                          package = "posterdown")
+  if (template == "") {
+    stop("Couldn't find template file ", template, "/", file, call. = FALSE)
+  }
+
+  template
+}
+
+find_resource <- function(template, file) {
+  find_file(template, file.path("resources", file))
+}
+
+knitr_fun <- function(name) utils::getFromNamespace(name, 'knitr')
+
+output_asis <- knitr_fun('output_asis')
+
+merge_list <- function(x, y) {
+  fun <- knitr_fun('merge_list')
+  fun(as.list(x), y)
+}
+
+#' Render a pandoc template.
+#'
+#' This is a hacky way to access the pandoc templating engine.
+#'
+#' @param metadata A named list containing metadata to pass to template.
+#' @param template Path to a pandoc template.
+#' @param output Path to save output.
+#' @return (Invisibly) The path of the generate file.
+#' @examples
+#' x <- posterdown:::template_pandoc(
+#'   list(preamble = "%abc", filename = "wickham"),
+#'   posterdown:::find_resource("posterdown_generic", "template.tex"),
+#'   tempfile()
+#' )
+#' if (interactive()) file.show(x)
+#' @noRd
+template_pandoc <- function(metadata, template, output, verbose = FALSE) {
+  tmp <- tempfile(fileext = ".md")
+  on.exit(unlink(tmp))
+
+  cat("---\n", file = tmp)
+  cat(yaml::as.yaml(metadata), file = tmp, append = TRUE)
+  cat("---\n", file = tmp, append = TRUE)
+  cat("\n", file = tmp, append = TRUE)
+
+  rmarkdown::pandoc_convert(tmp, "markdown", output = output,
+                            options = paste0("--template=", template), verbose = verbose)
+
+  invisible(output)
+}
+
+
+# Call rmarkdown::pdf_document and mark the return value as inheriting pdf_document
+inherit_pdf_document <- function(...) {
+  fmt <- rmarkdown::pdf_document(...)
+  fmt$inherits <- "pdf_document"
+  fmt
+}
+
+# Helper function to create a custom format derived from pdf_document
+# that includes a custom LaTeX template and custom CSL definition
+pdf_document_format <- function(..., format, template, csl) {
+
+  # base format
+  fmt <- inherit_pdf_document(..., template = find_resource(format, template))
+
+  # add csl to pandoc_args
+  fmt$pandoc$args <- c(fmt$pandoc$args,
+                       "--csl",
+                       rmarkdown::pandoc_path_arg(find_resource(format, csl)))
+
+
+  # return format
+  fmt
+}
+
+
+
+
