Releases: yihui/knitr
knitr 1.49
NEW FEATURES
-
In-chunk references of the form
<<label>>
can be disabled via the chunk optionref.chunk = FALSE
now (thanks, @jennybc @gadenbuie, #2360). -
Added support for
fig.alt
for LaTeX output, i.e., using\includegraphics[alt={alt text}]
(thanks, @capnrefsmmat, #2378). -
The environment in which code chunks are evaluated can be changed by passing a custom environment to
knit_global()
now (thanks, @abhsarma, #2358).
BUG FIXES
-
In-chunk references of the form
<<label>>
should not be resolved iflabel
is not found in the document (thanks, @jennybc @gadenbuie, #2360). -
The chunk option
autodep = TRUE
stopped working due to a regression from #2321 (thanks, @heavywatal #2344, @atusy #2377). -
asis_output()
was not passed to theoutput
hook (thanks, @cderv, #2332). -
Avoid partial matching of the
Date/Publication
field when generatingcitation('knitr')
, otherwise R will emit a warning whenoptions(warnPartialMatchDollar = TRUE)
(thanks, @fkohrt, #2361).
MAJOR CHANGES
-
Unbalanced chunk delimiters (fences) in R Markdown documents are strictly prohibited now.
-
For code chunks with
error = TRUE
,purl()
andhook_purl()
will wrap the code intry({...})
(thanks, @bastistician #2338, @jeroen #2368).
MINOR CHANGES
-
If a character value is passed to the chunk option
message
orwarning
, it will be coerced byas.logical()
, e.g., a character string"NA"
will be coerced toNA
(thanks, @cderv, #2375). -
Issue a warning when the chunk option
dependson
receives an invalid value (thanks, @otoomet, #2376). -
Changed the format of the reference card from PDF to HTML so building this package will not require LaTeX. See
vignette('knitr-refcard', package = 'knitr')
. -
Switched the vignette engine from knitr to
litedown::vignette
for some package vignettes.
knitr 1.48
BUG FIXES
-
Fix regression from 1.46 with
collapse = TRUE
option not correctly collapsing source code and output into one when code chunk returns multiple outputs (thanks, @jennybc, @florisvdh, tidyverse/reprex#463). -
hook_purl()
should not write the path of the R script to the output document (thanks, @fenguoerbian, #2348).
knitr 1.47
NEW FEATURES
-
For
kable()
, you can set the global optionknitr.kable.max_rows
to limit the number of rows to show in the table, e.g.,options(knitr.kable.max_rows = 30)
. This is a way to preventkable()
from generating a huge table from a large data object by accident. -
write_bib()
now escapes all non-escaped "&" in the bibliography by default. Previously, it only escaped the title field of the package citation. You can disable the escape with the argumenttweak = FALSE
(thanks, @HedvigS #2335, @atusy #2342).
BUG FIXES
- Fixed a bug that
write_bib()
fails to use the first URL of a package when multiple URLs are provided in DESCRIPTION and separated by\n
(thanks, @bastistician, #2343).
MINOR CHANGES
knitr 1.46
NEW FEATURES
-
Added a new chunk option
tab.cap
to specify the table caption forkable()
(thanks, @ulyngs, #1679). Previously, the caption could only be specified via thecaption
argument ofkable()
. Now you can set it in the chunk header if you want. Please note that this chunk option only works with a singlekable()
in each code chunk, and its value must be of length 1. -
spin()
now recognizes# %%
as a valid code chunk delimiter (thanks, @kylebutts, #2307). -
spin()
also recognizes#|
comments as code chunks now (thanks, @kylebutts, #2320). -
Chunk hooks can have the
...
argument now. Previously, only argumentsbefore
,options
,envir
, andname
are accepted. If a chunk hook function has the...
argument, all the aforementioned four arguments are passed to the hook. This means the hook function no longer has to have the four arguments explicitly in its signature, e.g.,function(before, ...)
is also valid if only thebefore
argument is used inside the hook. See https://yihui.org/knitr/hooks/#chunk-hooks for more information. -
For package vignettes, PNG plots will be optimized by
optipng
andpngquant
if they are installed and can be found from the systemPATH
variable. This can help reduce the package size if vignettes contain PNG plots (thanks, @nanxstats, https://nanx.me/blog/post/rpkgs-pngquant-ragg/).
BUG FIXES
-
spin()
stopped working with input that cannot be parsed as R code due to #1605. Now it works again (thanks, @Hemken, #1773). -
write_bib()
generated empty entries for packages without URLs (thanks, @bastistician, #2304). -
The
family
argument was not passed to thepdf
device (thanks, @sebkopf, rstudio/rmarkdown#2526). -
Trailing spaces escaped by
\
should not be trimmed inkable()
(thanks, @mjsmith037, #2308). -
kable()
fails when the value of thecaption
argument is of length > 1 (thanks, @LeeMendelowitz, #2312). -
include_graphics()
may provide an incorrect plot width to LaTeX when the locale setting forLC_NUMERIC
is notC
because the decimal separator may not be a dot (thanks, @tdhock, rstudio/rmarkdown#2525). -
When TinyTeX and the LaTeX package pdfcrop are installed,
knitr::pdf_crop()
is unable to findpdfcrop
(thanks, @dmkaplan2000, rstudio/tinytex#435).
MAJOR CHANGES
-
Unbalanced chunk delimiters (fences) in R Markdown documents are no longer allowed, as announced two years ago at https://yihui.org/en/2021/10/unbalanced-delimiters/ (#2306). This means the opening delimiter must strictly match the closing delimiter, e.g., if a code chunk starts with four backticks, it must also end with four; or if a chunk header is indented by two spaces, the closing fence must be indented by exactly two spaces. For authors who cannot update their R Markdown documents for any reason at the moment, setting
options(knitr.unbalanced.chunk = TRUE)
(e.g., in.Rprofile
) can temporarily prevent knitr from throwing an error, but it is strongly recommended that you fix the problems as soon as possible, because this workaround will be removed in future. -
Package vignettes are tangled by default during
R CMD check
, per request from CRAN maintainers (d0d1b47). The consequence is thatR CMD check
will check R scripts tangled from vignettes by default, unless you set the environment variable_R_CHECK_VIGNETTES_SKIP_RUN_MAYBE_=true
. Previously, knitr would skip tangling vignettes duringR CMD check
, because R scripts tangled from vignettes are not guaranteed to valid. With the skip undone,R CMD check
may fail in places other than CRAN (because CRAN has set the environment variable).
MINOR CHANGES
-
Fixed broken vignettes, improved CSS for HTML vignettes, and reduced the file sizes.
-
SQL code chunks that run
ALTER
statements are only executed and not tried to fecth a result (thanks, @maxschmi, #2330). -
The function
imgur_upload()
has been moved to (and enhanced in) the xfun package asxfun::upload_imgur()
so it is no longer tied to knitr and can be reused by other pakages. Nowknitr::imgur_upload()
is only a wrapper function ofxfun::upload_imgur()
. You are recommended to use the latter (#2325). -
spin()
dropped support for#-
as the chunk delimiter token. Please use#+
or# %%
or#|
instead. -
Faster processing of cache dependencies in
dep_auto()
(thanks, @knokknok, #2318). -
Removed some S3 methods that are used internally and changed them to normal functions:
print.block -> print_block
,print.inline -> print_inline
,process_group.block/process_group.inline -> process_group
, andprocess_tangle.block/process_tangle.inline -> process_tangle
.
knitr 1.45
NEW FEATURES
- Improved the error message to contain more specific information when YAML chunk options could not be parsed (thanks, @pedropark99, #2294).
BUG FIXES
-
Special characters in the chunk option
fig.alt
are properly escaped now (thanks, @jay-sf, #2290). -
Negative numbers returned from inline R expressions lost their minus signs when formatted in the scientific notation (thanks, @fkohrt, #2288).
-
convert_chunk_header(type = 'yaml')
will now use dash option name for known knitr options, and numeric option are kept with same significant digits, e.gfig.width = 10
is converted tofig-width: 10
. -
Add the necessary
\newline
to the last subfigure (thanks, @slrellison, rstudio/rmarkdown#2518). -
Percent signs (
%
) in LaTeX figure captions and short captions are properly escaped now (thanks, @s-u, #2302).
MAJOR CHANGES
-
The object
opts_current
will be restored after each code chunk has finished executing. Previously, it would not be restored, which means even for inline R expressions,opts_current$get()
will inherit chunk options from a previous code chunk (thanks, @rundel, #1988). Besides,opts_current$get('label')
will return a unique label for inline expressions. One possible application is to construct unique figure paths viafig_path()
(e.g., ropensci/magick#310). -
opts_current$set()
withoutopts_current$lock(FALSE)
will trigger a warning instead of an error for now and it will become an error in future (#2296).
knitr 1.44
NEW FEATURES
-
kable()
can generate Emacs org-mode tables now viakable(..., format = 'org')
(thanks, @xvrdm #1372, @maxecharel #2258). -
Added support for the
qmd
(Quarto) output format tospin()
, e.g.,spin('script.R', format = 'qmd')
(thanks, @cderv, #2284). -
write_bib()
has a new argumentpackageURL
to control whether to use a URL from theDESCRIPTION
file or the one generated byutils::citation()
(thanks, @dmurdoch, #2264). -
Updated the package vignette
vignette('knit_print', 'knitr')
to mention that package authors no longer have to make knitr a hard dependency if they want to define S3 methods forknitr::knit_print
with R >= 3.6.0 (thanks, @cderv, #1929). -
Added a new function
download_image()
to download an image from a URL and include it viainclude_graphics()
. This is mainly for including online images when the output format is not HTML (e.g., LaTeX), because the URL will not work as the image path, and it has to be downloaded beforehand (thanks, @bayeslearner, #2274).
BUG FIXES
-
Make the internal function
add_html_caption()
work with Quarto <= v1.3.353 (thanks, @giabaio, #2261). -
Fixed a bug in
spin(format = 'Rnw')
reported by @Tarious14 at yihui/yihui.org#769 (reply in thread) -
When the chunk option
dev = 'svglite'
, thesvglite
device should be used to record plots (thanks, @Darxor, #2272). -
Figure captions are no longer escaped for reStructuredText output, and the alt text can also be specified via the
fig.alt
chunk option now (thanks, @trevorld, #2023). -
Use the correct type of progress bar when rendering Quarto documents in RStudio, which takes place in RStudio's background jobs pane or build pane (thanks, @hadley, #2271).
-
The
opts_current
object can no longer be modified within code chunks via its$set()
method (thanks, @AshesITR, #1798). -
The argument
col.names
ofkable()
can be used to specify the column name of row names now, e.g.,kable(head(mtcars), col.names = c("car", names(mtcars)))
("car"
will be the column name of row names in the first column) (thanks, @iago-pssjd, #1933).
MAJOR CHANGES
- Dashes (
-
) in the names of all chunk options are normalized to dots (.
) now, e.g.,fig-height
will be converted tofig.height
. This is to make knitr more compatible with Quarto since Quarto always use dashes in chunk option names (#2282).
MINOR CHANGES
-
In-body chunk options (
#|
) are now preserved when extracting code from a document viapurl()
(thanks, @LuisLauM, #2268). -
A warning message will be issued when taking PDF screenshots for HTML widgets with the webshot2 package, because webshot2 doesn't use the correct figure size at the moment (thanks, @icejean, #2276).
-
If the
title
argument ofknit2wp()
is omitted and atitle
field is specified in the YAML metadata of the input document, the YAMLtitle
will be used (thanks, @arencambre, #1924).
knitr 1.43
NEW FEATURES
-
Progress bar includes the chunk location (
chunk-name @ file:line
) whenoptions(knitr.progress.linenums = TRUE)
is set (thanks, @zeehio, #2232). -
The global option
knitr.progress.simple
can be used to decide whether to output the bar in the progress. When set toFALSE
, only the step numbers and chunk labels will be printed, and the progress bar is omitted. This can be more useful for logging purposes since the bar itself is not useful (thanks, @hadley, #2221). By default, the simple progress output is used when the progress is not written to a connection such asstdout
orstderr
(e.g., written to a file instead), or the output connection is not a "terminal". -
HTML Widgets can now support alt text by specifying an attribute
aria-labelledby="<label>"
in their first HTML tag. The text will be obtained from thefig.alt
orfig.cap
chunk option in the usual way (thanks, @dmurdoch, #2243). -
Added a new argument
newline
tokable()
to handle newlines in data when the table output format is Markdown-based (simple
,pipe
,rst
, orjira
). By default, newlines are not processed, which can result in broken tables. To substitute newlines with spaces, usekable(..., newline = ' ')
. To remove newlines, usekable(..., newline = '')
(thanks, @aronatkins, #2255).
BUG FIXES
-
The chunk option
collapse = TRUE
works with HTML widgets now (thanks, @dmurdoch, #2212). -
Option hooks should be run before child documents are processed (thanks, @richarddmorey, #2247).
-
For
.Rnw
documents,is_latex_output()
returnsTRUE
for output formatssweave
(render_sweave()
) andlistings
(render_listings()
) now (thanks, @DavisVaughan, #2231). -
write_bib()
does not fail anymore if an empty string is passed as package name (thanks, @phargarten2, #2240). -
Fix an issue with using
cache = TRUE
onsql
engine chunk not defining aoutput.var
(thanks, @mfherman, @eitsupi, #1842). -
plot_crop()
correctly checks the required tools (pdfcrop
andghostscript
) on Windows when the LaTeX is distribution is TeX Live or TinyTeX (thanks, @remlapmot, #2246). An external installation ofghostscript
is no longer required on Windows, since TeX Live's built-inghostscript
will be used. -
The chunk option
dev.args
was not recognized in certain cases (thanks, @petrbouchal, #2238).
MINOR CHANGES
-
The
css
andjs
engines work for themarkdown
output format now. Previous these engines will not output anything when the output format ismarkdown
. If you still want to disable them formarkdown
output, you may use the chunk optioneval = FALSE
oreval = knitr::is_html_output(excludes = 'markdown')
. -
is_html_output()
recognizes R Markdown v1 documents now (.Rmd
documents compiled via the markdown package). -
For
.Rnw
documents, dots in figure file paths are no longer sanitized to underscores (thanks, @otoomet, #2213). Other special characters are still sanitized, but this feature can be turned off viaoptions(knitr.sanitize.paths = FALSE)
. -
imgur_upload()
now recognizes a global optionknitr.imgur.key
or an environment variableR_KNITR_IMGUR_KEY
for a custom client ID (thanks, @jonthegeek, #2233). -
imgur_upload()
requires fewer package dependencies now. It only requires the curl package; httr is no longer required, and xml2 has become optional.
knitr 1.42
NEW FEATURES
-
Better
.qmd
(Quarto) file support:purl()
will keep the in-chunk YAML syntax for options in the tangled R fileknit()
will produce a.md
file instead of.txt
-
Users can specify a custom progress bar for
knit()
now. The default is still a text progress bar created fromutils::txtProgressBar()
. To specify a custom progress bar, setoptions(knitr.progress.fun = function(total, labels) {})
. This function should take argumentstotal
(the total number of chunks) andlabels
(the vector of chunk labels), create a progress bar, and return a list of two methods:list(update = function(i) {}, done = function() {})
. Theupdate()
method takesi
(index of the current chunk) as the input and updates the progress bar. Thedone()
method closes the progress bar. See https://yihui.org/knitr/options/#global-r-options for documentation and examples. -
The default text progress bar is still written to
stdout()
by default, but can also be written to other connections orstderr()
now. To do so, setoptions(knitr.progress.output = )
to a connection orstderr()
. -
Allow concordances to be embedded in HTML output (thanks, @dmurdoch, #2200).
MAJOR CHANGES
-
knit()
no longer prints out chunk options beneath the text progress bar while knitting a document (thanks, @hadley, #1880). -
Due to a change in the evaluate package, the chunk options
message = FALSE
andwarning = FALSE
will completely suppress the messages/warnings now, instead of sending them to the console. To get back to the old behavior, you can useNA
instead ofFALSE
(thanks, @gadenbuie, yihui/yihui.org#1458). -
The stringr dependency has been removed. All string operations are done with base R now (thanks, @HughParsonage #1549 #1552, @rich-iannone #2174 #2177 #2186 #2187 #2195 #2202 #2205).
MINOR CHANGES
-
Improved the error message when inline R code cannot be parsed (thanks, @hadley #2173, @rich-iannone #2198).
-
If the chunk option
child
is used for a code chunk but the chunk is not empty, you will get a warning indicating that this non-empty code will not be executed when you knit the document. Now this warning can be silenced byoptions(knitr.child.warning = FALSE)
(thanks, @jwijffels, #2191). -
Devices from the package cairoDevice (
Cairo_pdf
,Cairo_png
,Cairo_ps
,Cairo_svg
) are no longer supported since the package has been archived on CRAN for more than a year (thanks, @jessekps, #2204).
BUG FIXES
- The
sql
engine now correctly prints tables withNA
in the first column (thanks, @mariusbommert, #2207).
knitr 1.41
NEW FEATURES
-
Added support for generating Jira tables via
kable(, format = 'jira')
(thanks, @pedropark99 #2180, @mruessler #2024). -
Added a new chunk option
fig.id
. When it isTRUE
, the chunk optionout.extra
will gain anid
attribute for each image from a code chunk in R Markdown (thanks, @jooyoungseo, #2169). By default, the attribute consists of a prefix, the chunk label, and the figure number. See https://yihui.org/knitr/options/ for detailed documentation offig.id
. -
Added an argument
exact
topandoc_to()
andpandoc_from()
to decide whether to use/return the exact Pandoc output/input format name. If not (default), Pandoc extensions will be removed from the format name, e.g.,latex-smart
will be treated aslatex
.
BUG FIXES
-
Plot created outside of
knit()
could sneak intoknit_child()
results (thanks, @niklaswillrich, #2166). -
User-provided background colors for code chunks in
.Rnw
documents may fail (thanks, @nielsrhansen, #2167). -
tabularx
andxltabular
tables should work without captions (thanks, @amarakon, #2188).
knitr 1.40
NEW FEATURES
-
Added a function
convert_chunk_header()
to convert the old in-header chunk options to the new in-body chunk options (#2149 #2151). -
Added a new "graphics device",
dev = "gridSVG"
, which usesgridSVG::grid.export()
to export grid graphics to SVG (thanks, @jooyoungseo, #2152). -
Added a new engine
eviews
, which calls the EviewsR package to execute EViews code (thanks, @sagirumati, #2158). -
Added support for a
php
engine like other engines for interpreted languages. It will callphp -r <code>
, with<code>
being the chunk content (thanks, @ralmond, #2144). -
Per suggestion of @jakubkaczor (#2116) and discussion with @pedropark99 (#2140), the chunk option
fig.sep
can also be used to add LaTeX code before the first sub-figure now. Previously this option can only be used for adding LaTeX code after each sub-figure. -
knitr::kable()
supportstabularx
andxltabular
environments now for LaTeX tables, e.g.,knitr::kable(head(iris), format = 'latex', tabular = 'tabularx')
(thanks, @amarakon, #2138). -
For HTML output formats of R Markdown, SVG plots (e.g., in case of chunk option
dev = 'svg'
ordev = 'gridSVG'
) can be embedded differently now whenoptions(knitr.svg.object = TRUE)
: if the HTML output is self-contained, the raw SVG code will be embedded directly in HTML, otherwise the.svg
file is embedded in the<object>
tag. By default, this feature is not enabled, i.e., the default isoptions(knitr.svg.object = FALSE)
for backward-compatibility, which means the<img>
tag is used for SVG plots just like other plot formats. This new feature will make assistive technology agents, such as screen readers, interact with SVG plots (thanks, @jooyoungseo, #2152).
BUG FIXES
-
Fixed
epub2
output not being considered as HTML format (thanks, @flipacholas, #2145). -
kable(format = 'pipe')
calculates column widths correctly now if any text columns contain Markdown hyperlinks (thanks, @jacobbien, #2148). -
dev.args = list(engine = ...)
was ignored bydev = 'tikz'
when the tikz plot is compiled to PDF (thanks, @fkohrt, #2150).
MINOR CHANGES
-
When the inline R code cannot be correctly parsed, the error message will show the original code in addition to the parsing error, which can make it easier to identify the code error in the source document (thanks, @AlbertLei, #2141).
-
The internal function
knitr:::wrap()
has been removed from this package. If you rely on this function, you will have to use the exported functionknitr::sew()
instead. -
Duplicate chunk label error will now be thrown with code chunks using
code
orfile
chunk options (thanks, @mine-cetinkaya-rundel, #2126). -
Simplified R Markdown's inline code parser (thanks, @atusy, #2143).