#' Adds a figure caption number
#'
#' The function relies on \code{options("fig_caption_no")}
#' in order to keep track of the last number. If
#' you want to force the caption function to skip
#' captions while still using it in the knitr fig.cap option
#' then simply set \code{options(fig_caption_no = FALSE)}
#'
#' @param str The string that is to be prepended with string
#' @param roman Whether or not to use roman numbers instead
#' of Arabic. Can also be set through \code{options(fig_caption_no_roman = TRUE)}
#' @param sprintf_str An \code{\link[base:sprintf]{sprintf}} formatted
#' string where the first argument is reserved for the string
#' generated by the counter and the second one is for the caption
#' text. Can also be set through \code{options(fig_caption_no_sprintf = TRUE)}
#'
#' @export
#' @examples
#' \dontrun{
#' ```{r, fig.cap = pigCapNo("My nice plot")}
#' plot(1:10 + rnorm(10), 1:10)
#' ```
#' }
#' org_opts <- options(fig_caption_no = 2,
#' fig_caption_no_sprintf = "Figure %s: %s")
#' figCapNo("A plot with caption number = 3")
#'
#' org_opts <- options(fig_caption_no = TRUE)
#' figCapNo("A plot with caption number = 1")
#'
#' # Use default setting
#' options(fig_caption_no_sprintf = NULL)
#' figCapNo("A plot with caption number = 2")
#'
#' # Return the original settings
#' options(org_opts)
#' @family figure caption functions
#' @importFrom utils as.roman
figCapNo <- function(str,
roman = getOption("fig_caption_no_roman", default = FALSE),
sprintf_str = getOption("fig_caption_no_sprintf", default = "Fig. %s: %s")) {
last_no <- getOption("fig_caption_no")
if (is.logical(last_no)) {
if (last_no == FALSE)
return(str)
last_no <- 0
}else if (is.null(last_no)) {
last_no <- 0
}
current_no <- last_no + 1
options(fig_caption_no = current_no)
if (roman)
current_no <- as.character(as.roman(current_no))
return(sprintf(sprintf_str,
current_no,
str))
}
#' Gets the last figure caption number
#'
#' The function relies on \code{options("fig_caption_no")}
#' in order to keep track of the last number.
#'
#' @inheritParams figCapNo
#' @export
#' @examples
#' org_opts <- options(fig_caption_no = 1)
#' figCapNoLast()
#' options(org_opts)
#' @importFrom utils as.roman
#' @family figure caption functions
figCapNoLast <- function(roman = getOption("fig_caption_no_roman", FALSE)) {
last_no <- getOption("fig_caption_no")
if (is.logical(last_no) ||
is.null(last_no)) {
stop("You cannot call the get last figure number",
" when there has been no prior figure registered.",
" In other words, you need to call the fiCapNo()",
" on a figure before you call this function.",
" If you want the next number then call figCapNoNext()",
" instead of this function.")
}
if (roman)
last_no <- as.character(as.roman(last_no))
return(last_no)
}
#' Gets the next figure caption number
#'
#' The function relies on \code{options("fig_caption_no")}
#' in order to keep track of the last number.
#'
#' @inheritParams figCapNo
#' @export
#' @examples
#' org_opts <- options(fig_caption_no = 1)
#' figCapNoNext()
#' options(org_opts)
#' @importFrom utils as.roman
#' @family figure caption functions
figCapNoNext <- function(roman = getOption("fig_caption_no_roman", default = FALSE)) {
last_no <- getOption("fig_caption_no")
if (is.logical(last_no)) {
if (last_no == FALSE)
stop("You cannot call the get last figure number",
" when you have explicitly set the fig_cap_no",
" option to FALSE.")
last_no <- 0
}else if (is.null(last_no)) {
last_no <- 0
}
next_no <- last_no + 1
if (roman)
next_no <- as.character(as.roman(next_no))
return(next_no)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.