The mindr package provides two functions for generating mind maps or generating other things from mind maps.
mm() function converts a character vector (input)
into a desired format (output).mmm() function converts a file (input) into a
desired format (output).The input can be markdown, Freemind mindmap, R script, or directory. The output can be HTML widget, Freemind mindmap, markdown, R script, directory, Mermaid mindmap.
## Source document ####
input <- system.file('examples/mindr-mm.mm', package = 'mindr')
## file.show(input) # Open the input file with the default program, if any
input_txt <- readLines(input, encoding = 'UTF-8')
## Convert markdown outline, R script, and HTML widget ####
mm_output <- mm(input_txt, output_type = c('markdown', 'R', 'widget'))
mm_output
## Save the output texts as files ####
### markdown outline ####
output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".md")
writeLines(mm_output$markdown, output, useBytes = TRUE)
# file.show(output) # Open the output file with the default program
message('Input: ', input, '\nOutput: ', output)
# file.remove(output) # remove the output file
### R script ####
output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".R")
writeLines(mm_output$r, output, useBytes = TRUE)
# file.show(output) # Open the output file with the default program
message('Input: ', input, '\nOutput: ', output)
# file.remove(output) # remove the output file
### Widget ####
# output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".html")
# htmlwidgets::saveWidget(mm_output$widget, file = output)
# file.show(output) # Open the output file with the default program, if any
# message('Input: ', input, '\nOutput: ', output)
# file.remove(output) # remove the output file
## Generate directory according to the source document ####
temp_dir <- file.path(tempdir(), 'mindr')
mm_output <- mm(input_txt, output_type = 'dir', root = 'mindr',
dir_to = temp_dir)
# system2('open', temp_dir) # Open the generatecd directory
# unlink(temp_dir, recursive = TRUE) # remove the generated directory## Source document ####
input <- system.file('examples/mindr-r.R', package = 'mindr')
## file.show(input) # Open the input file with the default program, if any
input_txt <- readLines(input, encoding = 'UTF-8')
## Convert to mind map text, markdown text, and HTML widget ####
mm_output <- mm(input_txt, output_type = c('mindmap', 'markdown', 'widget'))
mm_output
## Save the output texts as files ####
### mind map ####
output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".mm")
writeLines(mm_output$mindmap, output, useBytes = TRUE)
# file.show(output) # Open the output file with the default program, if any
message('Input: ', input, '\nOutput: ', output)
# file.remove(output) # remove the output file
### R markdown ####
output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".Rmd")
writeLines(mm_output$markdown, output, useBytes = TRUE)
# file.show(output) # Open the output file with the default program, if any
message('Input: ', input, '\nOutput: ', output)
# file.remove(output) # remove the output file
### Widget ####
# output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".html")
# htmlwidgets::saveWidget(mm_output$widget, file = output)
# file.show(output) # Open the output file with the default program, if any
# message('Input: ', input, '\nOutput: ', output)
# file.remove(output) # remove the output file
## Generate directory according to the source document ####
temp_dir <- file.path(tempdir(), 'mindr')
mm_output <- mm(input_txt, output_type = 'dir', root = 'mindr',
dir_to = temp_dir)
# system2('open', temp_dir) # Open the generated directory
# unlink(temp_dir, recursive = TRUE) # remove the generated directory## Source directory ####
input <- system.file(package = 'mindr')
## Convert to mind map text, markdown outline, R script, and HTML widget ####
mm_output <- mm(input, output_type = c('mindmap', 'markdown', 'R', 'widget'))
mm_output
## Save the output texts as files ####
### mind map ####
output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".mm")
writeLines(mm_output$mindmap, output, useBytes = TRUE)
# file.show(output) # Open the output file with the default program, if any
message('Input: ', input, '\nOutput: ', output)
# file.remove(output) # remove the output file
### markdown outline ####
output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".md")
writeLines(mm_output$markdown, output, useBytes = TRUE)
# file.show(output) # Open the output file with the default program, if any
message('Input: ', input, '\nOutput: ', output)
# file.remove(output) # remove the output file
### R script ####
output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".R")
writeLines(mm_output$r, output, useBytes = TRUE)
# file.show(output) # Open the output file with the default program, if any
message('Input: ', input, '\nOutput: ', output)
# file.remove(output) # remove the output file
### Widget ####
# output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".html")
# htmlwidgets::saveWidget(mm_output$widget, file = output)
# file.show(output) # Open the output file with the default program, if any
# message('Input: ', input, '\nOutput: ', output)
# file.remove(output) # remove the output file
## Clone the source directory ####
temp_dir <- file.path(tempdir(), 'mindr')
mm_output <- mm(input, output_type = 'dir',
dir_to = temp_dir)
# system2('open', temp_dir) # Open the generated directory
# unlink(temp_dir, recursive = TRUE) # remove the generated directoryWith the help of pandoc, you can display the outline of any documents that pandoc can convert to Markdown.
# HTML: here we use the R-FQA webpage
myurl <- 'https://cran.r-project.org/doc/FAQ/R-FAQ.html'
input <- tempfile(pattern = "file", tmpdir = tempdir())
markdown_temp <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".md")
download.file(myurl, destfile = input, method = 'curl')
rmarkdown::pandoc_convert(input, from = 'html', to = "markdown", output = markdown_temp)
input_txt <- readLines(markdown_temp, encoding = 'UTF-8')
mindr::mm(input_txt)
# MS Word: here we use a .docx document shipped by the 'officer' package
input <- system.file('doc_examples/example.docx', package = 'officer')
markdown_temp <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".md")
rmarkdown::pandoc_convert(input, to = "markdown", output = markdown_temp)
input_txt <- readLines(markdown_temp, encoding = 'UTF-8')
mindr::mm(input_txt, md_list = TRUE)
# pdf: here we use the pdf files in the R installation
input <- file.path(R.home(), 'doc/manual/R-intro.pdf')
mmm(input)
input <- file.path(R.home(), 'doc/manual/R-data.pdf')
mmm(input, root = 'R-data', md_maxlevel = 2)
# MS Word: here we use a .docx document shipped by the 'officer' package
input <- system.file('doc_examples/example.docx', package = 'officer')
mmm(input)
# HTML: here we use the R-FQA webpage
input <- file.path(R.home(), 'doc/html/rw-FAQ.html')
mmm(input)Mermaid mind map is the best choice for using mindr in reproducible research.
Using it in a Quarto document:
Use the chunk option results='asis', and write R code in
a chunk like:
mdheadings <- c(
'# Heading 1',
'## Heading 1.1',
'## Heading 1.2',
'## Heading 1.3',
'# Heading 2',
'## Heading 2.1',
'## Heading 2.2',
'## Heading 2.3'
)
mmd <- mindr::mm(from = mdheadings,
input_type = 'markdown', output_type = 'mermaid',
mmd_shape = c('round', 'cloud'),
root = 'Demo')
cat(mmd$mermaid, sep = '\n')myurl <- 'https://yihui.org/litedown/index.html'
temphtml <- tempfile(pattern = "file", tmpdir = tempdir())
tempmd <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".md")
download.file(myurl, destfile = temphtml, method = 'curl')
rmarkdown::pandoc_convert(temphtml, from = 'html', to = "markdown", output = tempmd)
input_txt <- readLines(tempmd, encoding = 'UTF-8')
file.remove(temphtml, tempmd)
headings <- mindr::outline(input_txt[-c(1:(grep('^# Preface', input_txt) - 1))], md_maxlevel = 2, md_braces = TRUE, md_bookdown = TRUE)
headings <- gsub('^([#]+) .*\\}([^\\}]+) \\{.*\\}$', '\\1\\2', headings)
headings[(grep('# Appendix', headings) + 1) : length(headings)] <- paste0('#', headings[(grep('# Appendix', headings) + 1) : length(headings)])
mmd <- mindr::mm(from = headings, input_type = 'markdown', output_type = 'mermaid', root = 'litedown')
cat(mmd$mermaid, sep = '\n')pdffile <- 'my-demo.pdf'
mmd <- mindr::mmm(input_file = pdffile, output_type = 'mermaid')
cat(mmd$mermaid, sep = '\n')
mmd <- mindr::mmm(input_file = pdffile, output_type = 'mermaid', md_maxlevel = 2)
cat(mmd$mermaid, sep = '\n')
mmd <- mindr::mmm(input_file = pdffile, output_type = 'mermaid', md_maxlevel = 1, mmd_shape = 'bang')
cat(mmd$mermaid, sep = '\n')