Skip to content

Releases: yihui/knitr

CHANGES IN knitr VERSION 1.19

29 Jan 15:17
Compare
Choose a tag to compare

NEW FEATURES

  • spin() now supports code chunks of the form -- ---- label ---- allowing external SQL and Haskell files to be spun (thanks, @ruaridhw, #1492)

MAJOR CHANGES

  • tinytex::latexmk() is used to compile LaTeX plots generated by the chunk option dev = 'tikz' to PDF, which means you have to install the tinytex package if you use this device.

  • Similarly, tinytex::latexmk() is used in knit2pdf() and stitch().

BUG FIXES

  • Fixed rstudio/bookdown#501: the chunk option out.height can also take a percentage value when the output format is LaTeX (similar to out.width), e.g., out.height = '30%' means .3\textheight (thanks, @dataopt, #1482).

  • imgur_upload() starts to fail due to changes in Imgur's API (thanks, @jennybc, #1495).

CHANGES IN knitr VERSION 1.18

28 Dec 14:56
Compare
Choose a tag to compare

NEW FEATURES

  • added a new engine julia based on JuliaCall::eng_juliacall() to support Julia code chunks (thanks, @Non-Contradiction, #1458)

  • added a new chunk option fig.dim to specify fig.width and fig.height using one option, e.g., fig.dim = c(5, 7) is a shorthand of fig.width = 5, fig.height = 7 (thanks, @MichaelChirico, #1449)

  • added two chunk options fig.ncol and fig.sep to make it possible to arrange multiple subfigures in columns (thanks, @eliocamp, #1444)

  • exported function is_latex_output() and is_html_output() (thanks, @zeehio, rstudio/rmarkdown#649)

  • for read_chunk(), the code chunks in the external R script can be written under lines of the form -- ---- label ---- now (# ---- label ---- is still supported); this makes it possible to read an external Haskell script (thanks, @brittAnderson, #1455)

  • added a $append() method to the internal function new_defaults() (thanks, @yonicd, #1417)

  • added another usage of engine_output() for expert users: if you are familiar with the list structure of the evaluate::evaluate() output, you can let your custom engine return a similar list and call engine_output(options, out = YOUR_LIST) (thanks, @kevinushey, #1442)

  • added an evaluate.inline hook to knit_hooks (thanks, @kevinushey, #1443)

MAJOR CHANGES

  • the python engine is based on reticulate::eng_python() now; this means all Python code chunks are evaluated in the same Python session; if you want the old behavior (new session for each Python code chunk), you can set the chunk option python.reticulate = FALSE (thanks, @kevinushey, #1440)

  • the auto_pdf argument of include_graphics() defaults to FALSE now; you can set options(knitr.graphics.auto_pdf = TRUE) to change the default to TRUE (thanks, @mebden, #1456)

BUG FIXES

  • fixed #1446: knitr may fail to parse code chunks in blockquotes in Markdown (thanks, @rgaiacs)

  • fixed #1460: kable() does not generate the table caption when the data only has one column (thanks, @Henrik-P)

  • fixed #1464: subcaptions are not rendered if the chunk option out.extra = NULL and the output format is LaTeX (thanks, @eliocamp)

  • fixed #1462: kable() may mis-order column names of data generated by sparklyr (thanks, @JohnMount)

CHANGES IN knitr VERSION 1.17

10 Aug 05:20
Compare
Choose a tag to compare

MAJOR CHANGES

  • the automatic detection of chunk dependencies (via the chunk option autodep = TRUE) is more conservative by default now; chunk B depends on chunk A if any variables in B are created in A, no matter if these variables are local or global in B; you can use the chunk option cache.globals to manually provide a vector of variable names that should be considered "global" to avoid the dependency when local variables in B are also found in A (thanks, @knokknok, #1403)

  • for engines css and js, the source code will be displayed by default just like R code chunks, and you can hide the source code using the chunk option echo = FALSE (thanks, @skadauke, #1408)

  • for kable(), the digits argument will be applied to columns of the class difftime (thanks, @RoyalTS, #1396)

BUG FIXES

CHANGES IN knitr VERSION 1.16

18 May 18:33
Compare
Choose a tag to compare

NEW FEATURES

  • adds two new options, class.output and class.source to apply additional HTML classes to output and source chunks, which can be useful for R Markdown documents with HTML output formats since you can define custom CSS styles for these classes (thanks, @ijlyttle #1335 and @AmeliaMN #1333)

  • added a go engine (thanks, @hodgesds, #1330)

  • added a sql.show_interpolated chunk option for sql engine. For {sql, sql.show_interpolated=TRUE}, interpolated SQL query will be dispalyed in the renderred document instead (thanks, @saurfang, #1357)

  • the chunk option results=FALSE is an alias of results='hide' now (thanks, @hadley, #1360)

  • added a wrapper function knit2pandoc(), and reStructuredText vignettes will be compiled through Pandoc instead of rst2pdf (thanks, @trevorld, #1386)

  • longest common whitespace prefix in code chunks is now stripped off along with the eventual prefix (see #1391)

MAJOR CHANGES

  • a warning will be emitted when the chunk option fig.show='hold' and the output format is Word (rstudio/bookdown#249); fig.show='hold' will be changed to 'asis' at the same time

  • purl() no longer writes verbatim non-R code chunks to the output R script; these code chunks will be commented out in the output

  • purl() can now also retrieve the code from inline expressions; it is disabled by default for compatibility, and can be enabled via options(knitr.purl.inline = TRUE) (thanks, @kforner, #1345)

  • the chunk option fig.show also applies to plots included via include_graphics(), e.g. fig.show='hold' will put all plots to the end of a chunk (thanks, @statnmap, #1382)

BUG FIXES

  • kable() should not ignore the table caption if provided when the input is a list, the table format is pandoc, and the document output format is not HTML or LaTeX, e.g. Word output (thanks, @ugroempi, rstudio/bookdown#368)

  • opts_chunk$set() supports referencing a sql connection by variable name, e.g. knitr::opts_chunk$set(connection = "db") (thanks, @javierluraschi, #1362)

  • the chunk option dev = 'CairoPS' will lead to double filename extensions .eps.ps (thanks, @qifei9, #1364)

  • the output file of write_bib() is now encoded in UTF-8 (thanks, @arnyeinstein, #1374)

  • the <embed> tag should be used instead of <img> for PDF images in HTML output (thanks, Daijiang Li, http://stackoverflow.com/q/43549930/559676)

CHANGES IN knitr VERSION 1.15.1

23 Nov 07:17
Compare
Choose a tag to compare

NEW FEATURES

  • added a new hook function hook_pngquant() that can call pngquant to optimize PNG images (thanks, @slowkow, #1320)

BUG FIXES

  • not really a knitr bug, but knit_params() should be better at dealing with multibyte characters now due to the bug fix in the yaml package vubiostat/r-yaml#6

CHANGES IN knitr VERSION 1.15

09 Nov 17:51
Compare
Choose a tag to compare

NEW FEATURES

  • NA values can be displayed using different characters (including empty strings) in kable(); you can set the option knitr.kable.NA, e.g. options(knitr.kable.NA = '') to hide NA values (#1283)
  • added a fortran95 engine (thanks, @stefanedwards, #1282)
  • added a block2 engine for R Markdown documents as an alternative to the block engine; it should be faster and supports arbitrary Pandoc's Markdown syntax, but it is essentially a hack; note when the output format is LaTeX/PDF, you have to define \let\BeginKnitrBlock\begin \let\EndKnitrBlock\end in the LaTeX preamble
  • figure captions specified in the chunk option fig.cap are also applied to HTML widgets (thanks, @byzheng, rstudio/bookdown#118)
  • when the chunk option fig.show = 'animate' and ffmpeg.format = 'gif', a GIF animation of the plots in the chunk will be generated for HTML output (https://twitter.com/thomasp85/status/785800003436421120)
  • added a width argument to write_bib() so long lines in bib entries can be wrapped
  • the inline syntax `r#code` is also supported besides `r code`; this can make sure the inline expression is not split when the line is wrapped (thanks, Dave Jarvis)
  • provided a global R option knitr.use.cwd so users can choose to evaluate the R code chunks in the current working directory after setting options(knitr.use.cwd = TRUE); the default is to evaluate code in the directory of the input document, unless the knitr option opts_knit$set(root.dir = ...) has been set
  • if options(knitr.digits.signif = TRUE), numbers from inline expressions will be formatted using getOption('digits') as the number of significant digits, otherwise (the default behavior) getOption('digits') is treated as the number of decimal places (thanks, @numatt, #1053)
  • the chunk option engine.path can also be a list of paths to the engine executables now, e.g., you can set knitr::opts_chunk$set(engine.path = list(python = '/anaconda/bin/python', perl = '/usr/local/bin/perl')), then when a python code chunk is executed, /anaconda/bin/python will be called instead of the system default (rstudio/rmarkdown#812)
  • introduced a mechanism to protect text output in the sense that it will not be touched by Pandoc during the conversion from R Markdown to another format; this is primarily for package developers to extend R Markdown; see ?raw_output for details (which also shows new functions extract_raw_output() and restore_raw_output())

MAJOR CHANGES

  • the minimal version of R required for knitr is 3.1.0 now (#1269)
  • the formatR package is an optional package since the default chunk option tidy = FALSE has been there for a long time; if you use tidy = TRUE, you need to install formatR separately if it is not installed
  • :set +m is no longer automatically added to haskell code chunks (#1274)

MINOR CHANGES

  • the package option opts_knit$get('stop_on_error') has been removed
  • the confusing warning message about knitr::knit2html() when buiding package vignettes using the knitr::rmarkdown engine without pandoc/pandoc-citeproc has been removed (#1286)
  • the default value of the quiet argument of plot_crop() was changed from !opts_knit$get('progress') to TRUE, i.e., by default the messages from cropping images are suppressed

BUG FIXES

  • the chunk option cache.vars did not really behave like what was documented (thanks, @simonKTH, #1280)
  • asis_output() should not be merged with normal character output when results='hold' (thanks, @kevinushey, #1310)

CHANGES IN knitr VERSION 1.14

07 Oct 05:57
Compare
Choose a tag to compare

NEW FEATURES

  • improved caching for Rcpp code chunks: the shared library built from the C++ code will be preserved on disk and reloaded the next time if caching is enabled (chunk option cache = TRUE), so that the exported R functions are still usable in later R code chunks; note this feature requires Rcpp >= 0.12.5.6 (thanks, @jjallaire, #1239)
  • added a helper function all_rcpp_labels(), which is simply all_labels(engine == 'Rcpp') and can be used to extract all chunk lables of Rcpp chunks
  • added a new engine named sql that uses the DBI package to execute SQL queries, and optionally assign the result to a variable in the knitr session; see http://rmarkdown.rstudio.com/authoring_knitr_engines.html for details (#1241)
  • fig.keep now accepts numeric values to index low-level plots to keep (#1265)

BUG FIXES

  • fixed #1211: pandoc('foo.md') generates foo_utf8.html instead of foo.html by default
  • fixed #1236: include = FALSE for code chunks inside blockquotes did not work (should return > instead of a blank line) (thanks, @fmichonneau)
  • fixed #1217: define the command \hlipl for syntax highlighting for Rnw documents (thanks, @conjugateprior)
  • fixed #1215: restoring par() settings might fail when the plot window is partitioned, e.g. par(mfrow = c(1, 2)) (thanks, @jrwishart @jmichaelgilbert)
  • fixed #1250: in the quiet mode, knit() should not emit the message "processing file ..." when processing child documents (thanks, @KZARCA)

MAJOR CHANGES

  • knitr will no longer generate screenshots automatically for HTML widgets if the webshot package or PhantomJS is not installed

MINOR CHANGES

  • if dev = 'cairo_pdf', the cairo_pdf device will be used to record plots (previously the pdf device was used) (#1235)
  • LaTeX short captions now go up to the first ., : or ; character followed by a space or newline (thanks, @knokknok, #1249)

CHANGES IN knitr VERSION 1.13

10 May 05:06
Compare
Choose a tag to compare

NEW FEATURES

  • code chunks that generate metadata may be cached now; it requires htmlwidgets >= v0.6 and htmltools >= 0.3.3 if you cache code chunks that contain HTML widgets or Shiny inputs/outputs (#1158)
  • when the output format is not HTML, HTML widgets used to fail to render; now knitr will try to generate static screenshots for HTML widgets automatically using the webshot package; you can specify alternative screenshots via the chunk option screenshot.alt (which takes a character vector of image paths), and pass more options to webshot::webshot() via the chunk option screenshot.opts, e.g. list(delay = 3, cliprect = 'viewport')
  • added two functions include_url() and include_app() to embed URLs in the output (the latter is for Shiny app URLs); when the output format is HTML, iframe will be used; otherwise screenshots of the URLs will be used
  • screenshotting for HTML widgets and URLs can be forced for all output formats via the chunk option screenshot.force = TRUE; if you set the chunk option screenshot.force = FALSE, knitr will just render these content normally and not take screenshots
  • added a new chunk option fig.link, which can be used to attach hyperlinks on figures, e.g. you can add a link to a screenshot of a Shiny app so that readers can check out the actual live app after clicking on the static screenshot (this chunk option currently only works for Markdown and LaTeX output)
  • syntactical errors in code chunks will be allowed when the chunk option error = TRUE and the package version of evaluate is at least 0.8.4; previously knitr would just stop on parsing errors (r-lib/evaluate#65)
  • PNG/JPEG images included via include_graphics() also respects the chunk option dpi now; if it is numeric and the chunk option out.width is not set, the output width (in inches) of an image will be automatically calculated from the actual width (in pixels) divided by dpi; note this feature requires the packages png and/or jpeg to be installed, and you can disable the feature using dpi = NA (thanks, @hadley, rstudio/bookdown#38)
  • added a new hook function named evaluate in knit_hooks so that users can redefine a evaluator to evaluate the code chunk; the default is evaluate::evaluate(), and your custom evaluator must be compatible with evaluate::evaluate() in terms of the argument names and the data structure of the returned value (a list of values with special classes)
  • added a new function combine_words() to combine multiple words / phrases into a single string, which may be useful in inline R expressions, e.g. combine_words(c('a', 'b', 'c')) returns a, b, and c
  • render_markdown() gained a new argument fence_char to customize the character to be used as the code blocks fence, e.g. it can be a backtick, or a tilde, depending on the Markdown rendering engine (thanks, @tinyheero, #1161)
  • the pandoc() function no longer assumes Markdown input (thanks, @scls19fr, #1170)
  • added a new function knit_meta_add() so that users can manually inject metadata into the current knitr session
  • for the tikz engine, if fig.ext = 'svg', dvisvgm will be called to convert the DVI output of TikZ to SVG; you need to install dvisvgm, and Windows users have to install GhostScript as well (thanks, @dkilfoyle, #1177)
  • new js and css engines which surround their content with <script> and <style> tags respecitvely, and print no output when not in an HTML document
  • for LaTeX tables, kable() supports short captions now via the caption.short argument, e.g. kable(..., caption = 'A long caption', caption.short = 'A short caption') (thanks, @ismayc, #1199)
  • added three global R options knitr.sanitize.errors, knitr.sanitize.warnings, and knitr.sanitize.messages to mask or change the messages, e.g. if options(knitr.sanitize.errors = TRUE) and the chunk option error = TRUE, the actual error message will be replaced by a character string like "An error occurred"; these options can also accept character values so you can customize the messages to be displayed, e.g. options(knitr.sanitize.warnings = 'You had a warning from the code'); see rstudio/shiny#1123 for the motivation of these options

BUG FIXES

  • when the chunk option cache.rebuild = TRUE, the cache database should be rewritten (thanks, Oleg Mayba)
  • include_graphics() did not work in inline R expressions (thanks, @WastlM, #1166)
  • the cex parameter was not correctly restored in the case of opts_knit$set(global.par = TRUE) (http://stackoverflow.com/q/35606445/559676)
  • for Rnw documents, when there are two instances of \documentclass{}, knitr might mistakenly treats the second instance as the the actual command to declare the document class (thanks, #1180, @ekstroem)
  • corrected the environment for evaluating R scripts in stitch_rhtml() and stitch_rmd() (thanks, @hughan, #1207)

MAJOR CHANGES

  • the default value of the package option eval.after is changed from NULL to fig.cap, i.e. the figure caption will always be evaluated after a code chunk is evaluated (thanks, @JoshOBrien, #1165)
  • the function eclipse_theme() has been removed since the website eclipsecolorthemes.org has been down for a long time

CHANGES IN knitr VERSION 1.12.3

23 Jan 03:46
Compare
Choose a tag to compare

BUG FIXES

  • figures without captions may fail to render correctly in R Markdown v2
  • fixed #1149: the sanitize and external chunk options were not passed to tikzDevice::tikz() when the tikz() device was opened to record plots in a chunk, so plots that contain special LaTeX characters would not work (thanks, @o-t)

CHANGES IN knitr VERSION 1.12

07 Jan 15:30
Compare
Choose a tag to compare

NEW FEATURES

  • added a chunk option fig.asp to specify the aspect ratio (i.e. the ratio height/width) of figures: when fig.asp is specified, the height of a figure (the chunk option fig.height) is calculated from fig.width * fig.asp
  • added a new function knit_watch() to knit input files continously when any of them are updated, so you do not have to call a knitting function like knit(), knit2pdf(), or rmarkdown::render() repeatedly as you update an input document
  • kable() supports generating multiple tables from a list of data objects, and the tables will be placed side by side when the output format is HTML or LaTeX
  • the format argument of kable() can be a function that returns a character string of the table format (thanks, @haozhu233, #1132)
  • added a new function include_graphics() to embed existing image files into knitr documents; see ?include_graphics for details
  • added a new object opts_hooks that can be used to set up chunk option hooks to modify chunk options; see ?opts_hooks for details (thanks, @hadley, #1096)
  • added a chunk option ffmpeg.bitrate (default: 1M) to control the quality of WebM videos created from FFmpeg (thanks, @JsonPunyon, #1090)
  • added a chunk option ffmpeg.format (default: webm) to control the video format of FFmpeg; this option specifies the filename extension of the video (#712)
  • plots drawn by tikzDevice are also measured and recorded with that device (thanks, @krlmlr, #1066)
  • for the chunk option out.width, a value of the form xx% will be converted to xx/100\\linewidth when the output format is LaTeX, so we can specify figure widths as percentages for both LaTeX and HTML output
  • for the chunk option background (to define the background color of code chunks in Rnw documents), the value NA means knitr will no longer write \definecolor{shadecolor} to the output of an individual code chunk (you can also enable this behavior by setting it as a global chunk option) (thanks, @friendly, #1122)
  • added a new engine block to wrap the chunk in a LaTeX environment or an HTML div, depending on the output format; the name of the environment or the class of the div can be specified via the chunk option type
  • you can use the svglite device in the svglite package (https://github.com/hadley/svglite) via the chunk option dev = 'svglite'
  • cache = TRUE works better for the stan engine now: the Stan model object will be saved and can be loaded the next time for the cached code chunk (thanks, @dalewsteele, #1064)
  • the chunk option engine.env can be used to set environment variables when running engines like bash; this option is passed to the env argument of system2() (thanks, @mbojan, #1032)

BUG FIXES

  • the asis engine did not preserve line breaks in the code chunk
  • kable() could not display chron objects correctly (thanks, @liesb, #1118)
  • kable(format = 'latex', longtable = TRUE) did not write the table caption in the correct place (should be inside the longtable environment)
  • fixed #1055: the tikz device may fail if there are code chunks before \documentclass{} in Rnw documents (thanks, @ClaudiusL)
  • fixed #1119: when the chunk option engine != 'R', the size option does not work (thanks, @cysouw)

MAJOR CHANGES

  • local chunk options can override options set in opts_template now, e.g. for opts_template$set(quiet = list(echo = FALSE)), and a local chunk option echo = TRUE will override echo = FALSE in opts_template for the current code chunk (thanks, @aaronwolen, #1140)

MINOR CHANGES

  • added an argument force_v1 to knit2html(); when it is TRUE, knit2html() renders the input file as an R Markdown v1 document even if it is for R Markdown v2 (#1130)
  • the trailing space after ![]() (for plots) in Markdown output has been removed (#1049)