は、フックを使用してください。
この関数は式を再帰的に参照し、関数が見つかるたびに\index{functionname function (packagename)}
を返します。
create_index_entry_from_expressions <- function(exprs)
{
lapply(
as.list(exprs),
function(li)
{
# Load packages of functions accessed by :: or :::
if(is.call(li) && grepl("^:{2,3}$", deparse(li[[1]])))
{
library(deparse(li[[2]]), character.only = TRUE)
}
if(is.name(li))
{
name_of_obj <- deparse(li)
obj <- mget(
name_of_obj,
mode = "function",
ifnotfound = NA_character_,
inherits = TRUE
)[[1]]
location <- find(name_of_obj)
if(!is.na(name_of_obj) &&
is.function(obj) &&
grepl("^[[:alpha:]]", name_of_obj) &&
grepl("^package:", location))
{
return(
paste0(
"\\index{",
knitr:::escape_latex(name_of_obj),
" function (",
substring(location, 9),
")}"
)
)
}
return(NULL)
}
if(!is.language(li)) return(NULL)
create_index_entry_from_expressions(li)
}
)
}
このフックは、チャンクオプションとしてindexit = TRUE
を持っているすべてのチャンクのために、.tex
ファイルにインデックス・エントリのテキストを追加します。ドキュメントの早い段階で定義してください。
knitr::knit_hooks$set(indexit = function(before, options, envir) {
if (before) {
exprs <- parse(text = options$code)
result <- create_index_entry_from_expressions(exprs)
unlist(result, use.names = FALSE)
}
})