Skip to content

Add Bootstrap 4 support#1706

Merged
yihui merged 88 commits intorstudio:masterfrom
cpsievert:carson/feature/bs4
Jan 20, 2021
Merged

Add Bootstrap 4 support#1706
yihui merged 88 commits intorstudio:masterfrom
cpsievert:carson/feature/bs4

Conversation

@cpsievert
Copy link
Contributor

@cpsievert cpsievert commented Nov 22, 2019

This PR has been merged. If you want to test this feature, please install the dev version of rmarkdown:

remotes::install_github('rstudio/rmarkdown')

This PR allows the theme parameter of html_document() (and html_document_base()) to understand bslib::bs_theme() objects, meaning that you can opt-in to Bootstrap 4 this way (Closes #1260):

html_document:
  theme: !expr bslib::bs_theme(version = 4)

Moreover, if theme is a list of values, those values are now implicitly supplied to bs_theme(), meaning this an equivalent way to opt-into Bootstrap 4.

html_document:
  theme: 
    version: 4

Note that, with bs_theme(), you can use any Bootswatch 4 (or 3) theme:

html_document:
  theme: 
    version: 4
    bootswatch: minty

Or, implement your own custom theme (this one inspired by Material's dark mode suggestions).

html_document:
  theme: 
      bg: "#121212"
      fg: "#E4E4E4"
      primary: "#EA80FC"
      secondary: "#00DAC6"
      base_font: !expr bslib::font_google("Open Sans")
      heading_font: !expr bslib::font_google("Proza Libre")
      code_font: !expr bslib::font_google("Fira Code")
      code-color: "#00DAC6"

This PR also adds integration with bslib::bs_themer() allowing runtime: shiny documents to be interactively themed.

---
runtime: shiny
output:
  html_document:
    theme: 
      version: 4
---

```{r}
bslib::bs_themer()
```

Lastly, if you want to supply custom Sass rules that utilize the underlying theme's Sass, you can now supply .scss/.sass files to the css parameter and those Sass files will be compiled with the theme. For example, say you want to define a new class that extends a group of BS4 utility classes to add padding and border around tabsets:

.with-border {
  @extend .p-3; @extend .border; @extend .border-top-0; @extend .rounded-bottom;
}
---
output:
  html_document:
    theme: 
      version: 4
    css: with-border.scss
---

# Tabs! {.tabset}

## Summary {.with-border}

Here is a summary table.

```{r}
summary(cars)
```

## Plot {.with-border}

Here is a plot:

```{r echo=FALSE}
plot(pressure)
```

Screen Shot 2021-01-18 at 3 54 33 PM

Co-Authored-By: Joe Cheng <joe@rstudio.com>
cpsievert and others added 2 commits January 19, 2021 08:52
Co-authored-by: Christophe Dervieux <christophe.dervieux@gmail.com>
@cpsievert
Copy link
Contributor Author

cpsievert commented Jan 19, 2021

Thanks for the great feedback @cderv, 7982cb6 should address the Suggestion issue. It also centralizes theme value checking and adds some new additional error messages if the theme value is something we don't support.

As for html_dependency_bootstrap()'s type safety -- I agree that ideally we should always return a list of dependencies, but I'm pretty concerned about the implications for existing code -- there are about 10-15 packages on CRAN that would need to be updated and probably lots of non-CRAN projects that would break. @yihui, do you feel this is a breaking change worth taking on?

Copy link
Collaborator

@cderv cderv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is what I thought about the breaking change. This is the type of things we would like to change (fix) but we can't really as it comes with a cost. 😞

Last thing I feel is missing is that this PR won't help improve code coverage 😅
Some of the helper could benefit some simple test. rmarkdown is not the package with the more unit test but I hope to improve that soon. So no need to rush, I can do it later. I believe you have tested this PR with a lot of examples throughout the year of work on this one.

Thanks for the work on this, this is a great feature !

@cpsievert
Copy link
Contributor Author

Thanks! Keep in mind that I'll be giving our QA team a handful of examples to do manual testing with, and I'll likely also be adding some automated tests to https://github.com/rstudio/shinycoreci-apps

@cderv
Copy link
Collaborator

cderv commented Jan 19, 2021

Oh nice! I was not aware of (forgot 🙄 ) that! That is great !

Copy link
Contributor

@yihui yihui left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! It looks good to me overall! I just hope bslib could get on CRAN soon.

do you feel this is a breaking change worth taking on?

No, let's just keep the current behavior of html_dependency_bootstrap(). We could export bootstrap_dependencies() if any other package authors want to use a function that always returns a list of dependencies. If we are going to export it, I'd probably rename it to something like html_dependency_bstheme() for consistency with other html_dependency_*() functions.

@cpsievert
Copy link
Contributor Author

I just hope bslib could get on CRAN soon.

Don't we all 😅.

We could export bootstrap_dependencies() if any other package authors want to use a function that always returns a list of dependencies.

It seems a better (near-term) option would be to label html_dependency_bootstrap() as superseded and point to bslib::bs_theme_dependencies(), but it seems fine to do nothing for now until the sass/bslib stack matures more. In the longer term, we could also consider completely replacing html_dependency_bootstrap() with bslib::bs_theme_dependencies() (and remove the Bootstrap asset files from rmarkdown)

@cpsievert
Copy link
Contributor Author

Also, are y'all totally against bumping to 2.7.0 to signify this fairly significant feature (I've been using 2.7.0 to signal messages in {thematic} and {bslib})?

cpsievert and others added 2 commits January 19, 2021 15:47
@yihui
Copy link
Contributor

yihui commented Jan 20, 2021

In the longer term, we could also consider completely replacing html_dependency_bootstrap() with bslib::bs_theme_dependencies() (and remove the Bootstrap asset files from rmarkdown)

That sounds good to me.

Also, are y'all totally against bumping to 2.7.0 to signify this fairly significant feature

The next CRAN release will be v2.7. We bump z in x.y.z when we introduce changes in the dev version, and bump y (or x for really significant changes) when making CRAN releases.

@cpsievert
Copy link
Contributor Author

Ah, ok, I changed the version to 2.6.6, feel free to merge (I can't)

@yihui yihui merged commit 64072eb into rstudio:master Jan 20, 2021
@cpsievert cpsievert mentioned this pull request Jan 20, 2021
jonathan-g added a commit to jonathan-g/rmarkdown that referenced this pull request Jan 25, 2021
Merge branch 'master' of https://github.com/rstudio/rmarkdown

* 'master' of https://github.com/rstudio/rmarkdown: (111 commits)
  get rid of names, otherwise the returned vector will have names like this:
  Only run testrmd if pandoc is available
  Warn that cropping is disabled if pdfcrop or ghostscript are not found. (rstudio#2017)
  Add shiny to remotes (rstudio#2014)
  file.path.ci is too loose with file matching (rstudio#2012)
  improve error messages for the new theme argument behavior
  Add Bootstrap 4 support (rstudio#1706)
  amend rstudio#1965: do not force `options(htmltools.preserve.raw = TRUE)` when this option has been set, otherwise it is impossible for other packages to turn this option off, e.g., yihui/xaringan#293
  htmltools 0.5.1 is on CRAN now
  remove download stats
  use on.exit to remove file (rstudio#2001)
  use only the TinyTeX-1 version in CI (rstudio#1998)
  Cache should work on Windows with recent version of R (rstudio#1997)
  exclude renv folder from render_site() copied resources (rstudio#1996)
  Update CI to last Pandoc 2.11.3.1 (rstudio#1992)
  Revert "return div not nil for non-qualifying latex div"
  Add missing NEWS item for v2.6 release
  return div not nil for non-qualifying latex div
  Add `output_format_filter` function to `default_site_generator()`. (rstudio#1989)
  Improvements to latex-div (rstudio#1984)
  ...

# Conflicts:
#	NEWS.md
#	R/render.R
#	man/render.Rd
jonathan-g added a commit to jonathan-g/rmarkdown that referenced this pull request Jan 25, 2021
* master: (111 commits)
  get rid of names, otherwise the returned vector will have names like this:
  Only run testrmd if pandoc is available
  Warn that cropping is disabled if pdfcrop or ghostscript are not found. (rstudio#2017)
  Add shiny to remotes (rstudio#2014)
  file.path.ci is too loose with file matching (rstudio#2012)
  improve error messages for the new theme argument behavior
  Add Bootstrap 4 support (rstudio#1706)
  amend rstudio#1965: do not force `options(htmltools.preserve.raw = TRUE)` when this option has been set, otherwise it is impossible for other packages to turn this option off, e.g., yihui/xaringan#293
  htmltools 0.5.1 is on CRAN now
  remove download stats
  use on.exit to remove file (rstudio#2001)
  use only the TinyTeX-1 version in CI (rstudio#1998)
  Cache should work on Windows with recent version of R (rstudio#1997)
  exclude renv folder from render_site() copied resources (rstudio#1996)
  Update CI to last Pandoc 2.11.3.1 (rstudio#1992)
  Revert "return div not nil for non-qualifying latex div"
  Add missing NEWS item for v2.6 release
  return div not nil for non-qualifying latex div
  Add `output_format_filter` function to `default_site_generator()`. (rstudio#1989)
  Improvements to latex-div (rstudio#1984)
  ...
cpsievert added a commit to cpsievert/rmarkdown that referenced this pull request Feb 18, 2021
…l shiny::bootstrapLib() inside html_document_base()'s preprocessor (instead of at run()-time)

The former time-point is too early -- it doesn't allow other output formats like flex_dashboard to modify the theme before passing it to html_document_base()
cpsievert added a commit to cpsievert/rmarkdown that referenced this pull request Feb 18, 2021
…l shiny::bootstrapLib() inside html_document_base()'s preprocessor (instead of at run()-time)

The former time-point is too early -- it doesn't allow other output formats like flex_dashboard to modify the theme before passing it to html_document_base()
cpsievert added a commit to cpsievert/rmarkdown that referenced this pull request Feb 19, 2021
…l shiny::bootstrapLib() inside html_document_base()'s preprocessor (instead of at run()-time)

The former time-point is too early -- it doesn't allow other output formats like flex_dashboard to modify the theme before passing it to html_document_base()
cderv pushed a commit that referenced this pull request Mar 15, 2021
This was a regression introduced by #1706 for bslib support where classes were mixed-up.
Comment on lines -504 to +442
<div class="row-fluid">
<div class="row">
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@cpsievert was this change necessary for bslib and bootstrap 4 supports ?

Asking because it changes some layout for some custom format based on html_document().
For example: Bioconductor/BiocStyle#86 (see both doc examples paragraph width)

it is a small difference but I am wondering if this could impact other custom formats. So asking for your knowledge on this row vs row-fluid.

Thanks.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

.row-fluid is a Bootstrap 2 class that changed to .row in Bootstrap 3 https://getbootstrap.com/docs/3.4/migration/

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. I understand now.
This means that about the paragraph width change, this is because html_document was using an old class and no bootstrap CSS was used. Switching to BS3 row-fluid class makes this CSS rule to apply

.row {
    margin-right: -15px;
    margin-left: -15px;
}

this lead to a change in style for all html_document output.

A side effect of this PR. Glad I know about that now. I may document that in NEWS maybe.

@cpsievert cpsievert deleted the carson/feature/bs4 branch March 17, 2021 14:33
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Jun 12, 2021
rmarkdown 2.8
================================================================================

- Fix a issue with Pandoc 2.5 and `latex-div.lua` - documents can now
  be rendered as expected without error (thanks, @DAVIDWALES, #2121).

- Fix an issue with styling and code folding button behavior when
  default is `code-folding: show`. The Button can now be correctly
  style according to state as `aria-expanded` attributes is correctly
  updated. Also, new classes has been added on the button to allow
  styling during transition: `btn-collapsing` and `btn-expanding` are
  respectively applied during transition Show to Hide and Hide to
  Show. (This follow [Bootstrap behavior for the collapsible
  block](https://getbootstrap.com/docs/3.4/javascript/#collapse))
  (thanks, @steveharoz, #2085).

- Fix an issue with `citation_package` having no effect when using
  `.md` file as input to `render()` with latex and PDF output formats
  (thanks, @andrewheiss, #2113).

- A new internal option `rmarkdown.knit.ext` has been added to control
  the extension of the intermediary knit output during a rendering. It
  defaults to `md` to produce `*.knit.md`. Only useful for very
  advanced usage (#2098).

- `render()` won't produce any `*.utf8.md` intermediary file
  anymore. This was a leftover from previous versions of
  **rmarkdown**. Since **knitr** 1.24 and **rmarkdown** 2.0, only
  UTF-8 input files are allowed. (#2098).

- Fix an `Invalid cross-device link` error when `tempdir()` is used
  for `intermediates_dir` in `render()` (thanks, @gorgitko, #2096).

- Fix a regression in HTML default template with floating toc
  incorrectly placed on small size window (thanks, @grimbough, #2071)

- Provided a `runtime: shiny` fix for output formats that pass a
  modified `bslib::bs_theme()` object to `html_document_base()`'s
  `theme` (thanks, @cpsievert, #2049).

- Rendering using `runtime: shiny_prerendered` or `runtime: shinyrmd`
  will now produce valid HTML by not inserting anymore the full
  document as body in the resulting shiny apps (thanks, @dakep,
  #1912). Header content usually containing html dependencies will be
  inserted in the HTML document at the end of the head before
  `</head>`, unless the rendered HTML contains `<!-- HEAD_CONTENT -->`
  special comment (see `htmltools::renderDocument()`). A new Pandoc
  variable is set in for shiny prerendered document to allow
  conditional insertion of such content in the the HTML template using
  `$if(shiny-prerendered)$`. This has been done in all HTML template
  in this package. Users of custom template should make this change to
  provide support for this runtime. See **rmarkdown** default template
  (`default.html`) for an example (#2064).

- Added `tectonic` as a supported LaTeX engine for generating PDF
  output (thanks, @dpryan79, #2078). You can specify to use this by
  adding `engine: "tectonic"` to your output format in YAML, such as
  `pdf_document`.

- When no `output_format` is provided in any way but an `output_file`
  is provided in `render()`, the default format will be determined
  based on the extension: `"pdf_document"` for `.pdf`, or
  `"word_document"` for `.docx`. Otherwise, it will be
  `"html_document"` as previous version (thanks, @pearsonca, #1569).

- Added a new global option `rmarkdown.render.message`. When set
  `FALSE`, `render()` will not output the message starting by `Output
  created: ` allowing RStudio IDE to open a preview of the
  document. This is useful for package developers that would need to
  emit there own output message for there custom format. See
  `?render_site` for more info on this special message (#2092).

- Internal changes regarding Lua filters. They have now an explicit
  Pandoc version minimal requirement: A filter will be skipped with a
  warning printed by the Lua filter if this requirement is not
  met. For now, all filters work for Pandoc 2.1 and above (thanks,
  @atusy, #2088). There is also now a new mechanism to have a share
  Lua filter script loadable by other Lua files: `render()` will set
  the `RMARKDOWN_LUA_SHARED` env var to the path of Lua filter
  `shared.lua` so that other filters can access functions defined in
  it using `dofile(os.getenv 'RMARKDOWN_LUA_SHARED')`. This is for
  internal usage only to avoid duplication (thanks, @tarleb, #2103).

- `html_document_base` gains a `css` argument, to which
  `html_document`'s `css` argument is now passed. This also fix an
  issue when `.sass` or `.scss` files are used with this `css`
  argument when `self_contained: FALSE`. Moreover, **sass** caching
  mechanism can now be used when passing `.sass` or `.scss` files to
  the `css` argument (thanks, @cpsievert, #2095).

- The `fig_crop` option of PDF document formats (such as
  `pdf_document` and `beamer_presentation`) supports the value
  `"auto"` now, which means `fig_crop = TRUE` when figure cropping
  tools `pdfcrop` and `ghostscript` are available.

- The default value of the `fig_crop` option of PDF output formats has
  been changed from `TRUE` to `"auto"` (#2077).

- `rmarkdown::tufte_handout` has been deprecated and will be removed
  in the future from this package. It has been moved to the **tufte**
  package since **rmarkdown** 0.9.5 (released on 2016-02-22). Please
  use `tufte::tufte_handout` instead.


rmarkdown 2.7
================================================================================

- `html_document` (and `html_document_base`)'s `theme` parameter now
  understands `bslib::bs_theme()` objects/arguments, meaning that one
  may opt-into Bootstrap 4 and more easily create custom themes. For
  examples, see <rstudio/rmarkdown#1706>, and
  for context, see <https://rstudio.github.io/bslib/> (thanks,
  @cpsievert, #1706).

- Files with `.scss`/`.sass` extension (i.e., Sass files) provided to
  `html_document`'s `css` parameter are now compiled to CSS using the
  `{sass}` package. Also, if `theme` is a `{bslib}` object, these Sass
  files may utilize Sass code inside the `theme` (thanks, @cpsievert,
  #1706).

- Fix an issue with line numbering in code chunks when `.numberlines`
  with Pandoc's highlighting (thanks, @aosavi, #1876).

- Fix an issue with shiny runtime and `global.R` (thanks,
  @liaojiahui-r, rstudio/flexdashboard#298).

- Accept `latex="{options}"`, `latex=1`, or `latex=true` for Latex
  Divs.

- Add `output_format_filter` function to
  `default_site_generator()`. Enables custom site generators to
  customize or even entirely replace the output format right before
  rendering of each page.

- Automatically exclude **renv** directory for `render_site()`
  (thanks, @jmbuhr, #1996)

- Do not force `options(htmltools.preserve.raw = TRUE)` when this
  option has been set, otherwise it is impossible for other packages
  to turn this option off, e.g., yihui/xaringan#293.

- `knitr_options_pdf()` will now throw a warning when `fig_crop =
  TRUE` but is disabled because required tools `pdfcrop` and/or
  `ghostscript` are missing (thanks, @netique, #2016).

- Eliminated the unnecessary padding in code blocks in the
  `html_document` output with Bootstrap 4 themes (thanks, @atusy,
  #2019).

- `github_document()` will produce a working TOC even if some headers
  start with number (#2039).

- Fix an issue with `knit_print.data.frame`. The `...` arguments are
  no more passed to `print()` to avoid passing `knit_print()`
  arguments `options` and `encoding` to custom `print()` methods
  (#2047).

rmarkdown 2.6
================================================================================

- Encoding is correctly handled now in `html_vignette` when checking
  for identical title and vignette index entry (thanks, @py-b, #1978).

- `clean_site()` now default to `preview = TRUE` and will no more
  remove files without notice. This change will affect the "Clean All"
  button in the "Build" pane for website project. `clean_site(preview
  = FALSE)` must be run to effectively remove files (#1973).

- The intermediate `.tex` file is now correctly deleted if `keep_tex =
  FALSE` when the R Markdown document is not rendered from the working
  directory (thanks, @vqv, #1308).

- Fix a bug causing certain resources files to be deleted as
  intermediate files when `intermediates_dir` is the same as the input
  (thanks, @bellma-lilly, #1248).

- Fix issues with `anchor_sections = TRUE` and **learnr** (thanks,
  @gadenbuie, #1938).

- Enable use of `server.R` and `global.R` alongside `runtime:
  shinyrmd` documents.

- `pkg_file_lua()` now works with `devtools::load_all()` and
  **testthat** when used in other packages.

- Fix `pandoc_convert(citeproc = TRUE)` not supressing the `--natbib`
  or `--biblatex` options (thanks, @atusy, #1932).

- `pandoc-citeproc` is now activated if a `bibliography` field is
  defined in another YAML block instead of the first YAML block
  (thanks, @bwiernik, #1364).

- Specify that `htmltools::htmlPreserve()` should use the pandoc raw
  attribute rather than preservation tokens when pandoc >= v2.0. Note
  that this option will have the intended effect only for versions of
  htmltools >= 0.5.0.9003.

- `anchor_sections` in `html_documents()` now defaults to `FALSE`. It
  was introduced in previous version with a default to `TRUE`, but it
  is reverted now after hearing feedbacks from the community (thank
  you!). The `#` is still used as the character for the anchor but you
  can easily change that using CSS rules. Examples have been added to
  the help page `?html_document`.

- Using Pandoc's default for `--email-obfuscation` now. Previously, it
  was set to `none` explicitly, which is the default for Pandoc
  1.17.2+ anyway. Only users with a Pandoc version before 1.17.2 may
  see a change in the content of the html source file produced if the
  document contains email addresses. This change allows to pass the
  Pandoc's command line flag if you want to set it to another value
  (thanks,@seankross, #1969).

  ````yaml
  output:
    html_document:
      pandoc_args: ["--email-obfuscation", "javascript"]
  ````

  See [Pandoc's
  manual](https://pandoc.org/MANUAL.html#option--email-obfuscation)
  for the meaning of this option.

- Fix Fontawesome 5 icons in navbar by correctly handling new prefix
  as `fa` has been deprecated in favor of `fas` or `fab` (#1967)


rmarkdown 2.5
================================================================================

- Tables without header rows (wich can be possible in Pandoc's [simple
  table](https://pandoc.org/MANUAL.html#extension-simple_tables)) are
  now formatted correctly when using `html_document()` format (thanks,
  @fkohrt, #1893).

- `html_document()` gains the `anchor_sections` argument, which is
  `TRUE` by default, so that readers can get links to section headers
  easily---when you mouse over a section header, you will see a hash
  symbol `#` at the end of the header, which contains the anchor link
  to this header. You can click on this link and get the URL in the
  addres bar of your web browser, or right-click on it and copy the
  URL from the context menu. The hash symbol is defined by the CSS
  rule `a.anchor-section::before {content: '#';}`. You can customize
  it by overriding this rule (e.g., via the `css` argument of
  `html_document`) and use any other symbols or icons, e.g., `content:
  "\02AD8;"` (thanks, @atusy, #1884).

- `pkg_file_lua()` should have thrown an error if the expected Lua
  file does not exist.

- Provide `files_dir` and `intermediates_dir` as attributes on return
  from `render()` when `run_pandoc = FALSE`.

- Supports new Pandoc 2.11 `--citeproc` flags usage instead of
  `pandoc-citeproc` external filter. `pandoc_convert()` and
  `pandoc_citeproc_convert()` will now use the correct flags according
  to the Pandoc version used. The logic is exported in
  `pandoc_citeproc_args()`. See [Pandoc release
  note](https://github.com/jgm/pandoc/releases/tag/2.11) for more
  information about the new `citeproc` processing (#1916).

- Fixed the code highlighting when code block is hidden. Previous
  version introduced a regression where non default code highlighting
  was still shown when `code_folding` is activated and code block is
  hidden (thanks, @matthewcarlucci, #1921).

- The minimal required version for the **xfun** package (v0.15) has
  been specified for R Markdown Notebooks to work properly (thanks,
  @jmcphers, #1923).

- Fixed a bug in `convert_ipynb()` when the language is not specified
  in the `.ipynb` file (thanks, @acca3003, #1925).

- Introduce `runtime: shinyrmd` as a more user friendly alias for
  `runtime: shiny_prerendered`.


rmarkdown 2.4
================================================================================

- Lua filters handling has been improved internally with some
    - user-facing changes (#1899): New exported function
    - `pandoc_lua_filter_args()` to return the Pandoc command-line
    - argument to add a Lua filter.  New argument `lua_filters` in
    - `pandoc_options()` to pass the Lua filter paths to use with a
    - format. This allow output format authors to add filters for a
    - custom format using the `pandoc` argument of `output_format()`
    - and to get filters from a format using `fmt$pandoc$lua_filters`.
    - The Lua filters of an output format are now passed to Pandoc in
    - `render()`. By default, they are passed to Pandoc before any
    - other format-defined or user-defined Pandoc arguments (usually
    - via the `pandoc_args` option of an output format). This ensures
    - that filters of an output format are executed first. To change
    - the default, you need to deal with it in a custom format (i.e.,
    - modify the elements in `fmt$pandoc$lua_filters`, such as
    - reordering them).  New exported function `pkg_file_lua()` to get
    - the full system path of a Lua filter included in a package
    - source within the `inst/rmarkdown/lua` folder (thanks, @atusy,
    - #1903).

- Fixed the path separators for the `css` parameter in YAML
  frontmatter for HTML output files under Windows. Previously, forward
  slashes in `css` paths were converted to backslashes (thanks,
  @jonathan-g, #1862).

- Since **rmarkdown** 1.16, Pandoc's fenced `Div`'s are converted to
  LaTeX environments when the output format is LaTeX, e.g., `:::
  {.center data-latex=""}` is converted to `\begin{center}`. The
  attribute `data-latex` of the `Div` was mandatory, even if it is
  empty. In **rmarkdown** 2.2, we silently drop this requirement,
  which means `::: {.center}` is converted to `\begin{center}`. This
  turns out to be a bad idea, because users have no control over which
  Div's to be converted to LaTeX environments. Previously, they could
  opt-in by the `data-latex` attribute, but with **rmarkdown** 2.3,
  all Div's are converted to LaTeX environments
  unconditionally. What's more, this change led to bugs like
  https://stackoverflow.com/q/62340425/559676 and
  rstudio/bookdown#883. Therefore the
  `data-latex` attribute became mandatory again in this version. If
  the LaTeX environment does not need arguments, you may use
  `data-latex=""`.

- The two Lua fitlers `pagebreak.lua` and `latex-div.lua` (introduced
  in **rmarkdown** 1.16) are also applied to the output format
  `beamer_presentation` now (thanks, @XiangyunHuang, #1815).

- When customizing formats with the `output_format` function,
  `pre_knit`, `opts_hooks`, and `knit_hooks` can now refer to
  `rmarkdown::metadata`. Previously, `rmarkdown::metadata` returned
  `list()` in these functions (thanks, @atusy, #1855).

- `rmarkdown::find_external_resources()` now discovers external
  template files. This in turn fixes the rendering issue of
  `html_document` with the `shiny` runtime and `intermediate_dir` set
  (thanks, @atusy, @cderv, #1865).

- Added the `number_sections` argument to following formats:
  `github_document`, `ioslides_presentation`, `md_document`,
  `odt_document`, `powerpoint_presentation`, `rtf_document`,
  `slidy_presentation`, `word_document`. These are powered by a Lua
  filter and requires Pandoc > 2.0. It will silently have no effect
  has before with previous pandoc version (thanks @atusy 1893).
  Pandoc >= 2.10.1 adds `--number-sections` for docx format, and thus
  `word_document` prefers the native feature to the Lua filter
  (thanks, @jooyoungseo, #1869).

- For the output format `pdf_document`, the option `fig_crop` will not
  be enabled unless both the programs `pdfcrop` and `ghostscript` are
  found (thanks, @dalupus, yihui/knitr#954).

- Fixed a bug that a chunk with a class `fold-hide` hides the rest of
  the chunks even the output format setting
  `html_document(code_folding = "show")` (thanks, @atusy, #1906).

- Updated documentation for `render()` to make it clearer how options
  are set for the `output_format` parameter (thanks, @jonathan-g,
  #1907 and rstudio/bookdown#930).

- Ported some CSS styles (e.g., underlines, small caps, and
  multi-column layouts) from the latest Pandoc's HTML template into
  **rmarkdown**s HTML templates (thanks, @atusy, #1878, #1908).
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Sep 14, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Improvement/enhancement: Update html_document themes to support the most recent ones in bootswatch Update to Bootstrap v4?

6 participants