#' Generate and add the current grattex preamble to a pandoc-converted .tex file
#'
#' @param tex_file The path to the .tex file
#' @param removeReport.tex Remove the unnecessary Report.tex file? (default is TRUE)
#' @param isSegmented Is this part of a segmented report (i.e. a single chapter of a larger report?)
#'
#' @importFrom readr read_lines write_lines
#'
#' @export
#'
create_preamble <- function(tex_file,
removeReport.tex = TRUE,
isSegmented) {
# Read tex file
out_tex_lines <- readr::read_lines(tex_file)
# Drop preamble and system chapters (Overview, Contents, Figures, Tables, Recommendations)
message(paste0("Bulding a more ~Grattan-style~ .tex file"))
## Is there a preamble/system chapters?
if (max(grepl("\\\\chapter\\{(Overview|Contents|Figures|Tables|Recommendations)", out_tex_lines)) > 0) {
end.system.chapter.line <- max(grep("\\\\chapter\\{(Overview|Contents|Figures|Tables|Recommendations)", out_tex_lines)) + 1
} else {
end.system.chapter.line <- max(grep("\\\\begin\\{document\\}", out_tex_lines)) + 1
}
# Find non-system chapter lines
if (max(grepl("\\\\chapter\\{[[:alpha:]]+", out_tex_lines))==1) {
# Remove \texorpdfstring{X }{ from chapter lines
out_tex_lines[end.system.chapter.line:length(out_tex_lines)]
# grepl("\\\\chapter\\{\\\\texorpdfstring\\{[A-Za-z0-9\\s]*\\}\\{", a)
# gsub("\\\\chapter\\{\\\\texorpdfstring\\{[[:print:]]*\\}\\{", "", a)
#
out_tex_lines <- gsub("\\\\chapter\\{\\\\texorpdfstring\\{[[:print:]]*\\}\\{",
"\\\\chapter\\{",
out_tex_lines[end.system.chapter.line:length(out_tex_lines)])
chapter_lines <- grep("\\\\chapter\\{[[:alpha:]\\]+",
out_tex_lines[end.system.chapter.line:length(out_tex_lines)])
first_chapter_line <- min(chapter_lines-1) # minus 1 to allow for hypertarget
out_tex_lines <- out_tex_lines[first_chapter_line+end.system.chapter.line:length(out_tex_lines)]
}
# Drop references
if (max(grepl("\\\\chapter\\{(References|Bibliography|Citations)", out_tex_lines))>0) {
references <- cummax(grepl("\\\\chapter\\{(References|Bibliography|Citations)", out_tex_lines))
out_tex_lines <- out_tex_lines[!(references)]
}
# Read current Report.tex for preamble
getpreamble <- read_lines("Report.tex")
if (removeReport.tex) file.remove("Report.tex")
# The first line can carry over some cruft: remove closing double brace if found
if (nchar(out_tex_lines[1]) - nchar(gsub("\\}", "", out_tex_lines[1])) != nchar(out_tex_lines[1]) - nchar(gsub("\\{", "", out_tex_lines[1]))) {
out_tex_lines[1] <- gsub("\\}\\}", "\\}", out_tex_lines[1])
}
# Construct report framework based on segmentation status
if (!isSegmented) {
# Add preamble etc if NOT segmented
out_tex_lines <- c( getpreamble[(which(getpreamble == "\\documentclass[embargoed]{grattan}")):(which(getpreamble == "\\begin{document}"))],
"",
"\\contentspage",
"\\listoffigures",
"\\listoftables",
"",
"",
out_tex_lines,
"",
"\\printbibliography",
"",
"\\end{document}"
)
}
# Write
readr::write_lines(out_tex_lines, tex_file)
return(out_tex_lines)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.