New function SubfigureGenerator() takes a vector of images and captions and creates a LaTeX subfigure.

master
Taha Ahmed 12 years ago
parent 1a52116071
commit d0044d87ed

@ -0,0 +1,105 @@
##################################################
############# SubfigureGenerator #################
##################################################
SubfigureGenerator <- function(images, captions,
perpage = 6, ncol = 2,
landscape = FALSE) {
## Description:
##
## Usage:
##
## Arguments:
## images: vector with full paths to images
## (png-files or other LaTeX-compatible format)
## to be put in a LaTeX subfigure environment
## captions: vector with subcaptions for each subfigure
## perpage: maximum number of images on one page,
## one A4 page fits six images with subcaptions
## ncol: LaTeX subfigure is setup with ncol columns
## landscape: set to TRUE if pages are set in landscape mode
## Return value:
## A string with LaTeX code
#
# Collect all LaTeX code in a textconnection
# that's dumped to a vector before return
zzstring <- ""
zz <- textConnection("zzstring", "w")
# If landscape is TRUE, set pagewidth to \textheight
# pagewidth <- ifelse(landscape == TRUE, "\\textheight", "\\textwidth")
pagewidth <- "\\textwidth"
# Check that the vector of images is non-empty
if (length(images) > 0) {
# keep track of the number of pages the images are split across
page.counter <- 1
# Calculate width of subfigure based on ncol-value
subfigure.width <- 1 / ncol - 0.02
# begin figure
if (landscape == TRUE) {
cat("\\begin{sidewaysfigure}\\centering\n", file = zz)
} else {
cat("\\begin{figure}[tb]\\centering\n", file = zz)
}
# display images in a X-by-X grid
for (i in 1:length(images)) {
cat(paste("\\begin{subfigure}[b]{", round(subfigure.width, 2),
pagewidth, "}\\centering\n", sep = ""), file = zz)
# this includes the i-th image in a subfigure
cat(paste("\\includegraphics[width=\\linewidth]{",
images[i], "}\n", sep = ""), file = zz)
cat(paste("\\caption{", captions[i],
"}\n", sep = ""), file = zz)
cat(paste("\\label{fig:sfig-", int2padstr(ii = i, pchr = "0", w = 3),
"}\n", sep = ""), file = zz)
cat("\\end{subfigure}", file = zz)
#
if (!(i %% (perpage)) && length(images) != (perpage*page.counter)) {
cat("\\caption{Main figure caption.}\n", file = zz)
cat(paste("\\label{fig:mainfig-",
int2padstr(ii = page.counter, pchr = "0", w = 3),
"}\n", sep = ""), file = zz)
if (landscape == TRUE) {
cat("\\end{sidewaysfigure}\n", file = zz)
} else {
cat("\\end{figure}\n", file = zz)
}
cat("\n", file = zz)
if (landscape == TRUE) {
cat("\\begin{sidewaysfigure}\\centering\n", file = zz)
} else {
cat("\\begin{figure}[tb]\\centering\n", file = zz)
}
# Step-up page.counter
page.counter <- page.counter + 1
} else {
if (i %% ncol) {
# odd number -- add inter-column space
cat("\\,\n", file = zz)
}
if (!(i %% ncol)) {
# even number -- add newline and some vspace
cat("\\\\[6pt]\n", file = zz)
}
}
}
#
# end figure
cat("\\caption{Main caption.}\n", file = zz)
cat(paste("\\label{fig:mainfig-",
int2padstr(ii= page.counter, pchr = "0", w = 3),
"}\n", sep = ""), file = zz)
if (landscape == TRUE) {
cat("\\end{sidewaysfigure}\n", file = zz)
} else {
cat("\\end{figure}\n", file = zz)
}
}
zzstring <- textConnectionValue(zz)
close(zz)
return(zzstring)
}

@ -25,4 +25,4 @@ hms2seconds <- function(hms_vec) {
as.numeric(hms_str[3])
}
return(seconds)
}
}

Loading…
Cancel
Save