vscode-R icon indicating copy to clipboard operation
vscode-R copied to clipboard

Cannot render .rmd missing pandoc

Open timo-berg opened this issue 3 years ago • 18 comments

Describe the bug I'm trying to render a simple .Rmd file in VSCode but it keeps telling me Error: pandoc version 1.12.3 or higher is required and was not found (see the help page ?rmarkdown::pandoc_available).

To Reproduce For testing purposes I tried to render a markdown with only one cell

1+1

with the same result. When I try to render the same Markdown in RStudio it works without problems. Pandoc is installed under /usr/local/bin/pandoc and executing pandoc -v shows the correct version. When I open a radian shell in VSCode and type rmarkdown::pandoc_version() it also shows the correct version. The command that VSCode executes it rmarkdown::render('[path to file]/Chap04.Rmd', encoding = 'UTF-8')

Expected behavior VSCode should render the markdown just as RStudio does.

Environment (please complete the following information):

  • OS: macOS
  • VSCode Version: 1.64.0
  • R Version: 4.1.2
  • vscode-R version: 2.3.6
  • pandoc version: 2.17.1.1

Additional context I tried the various other solutions to this problem such as setting the RSTUDIO_PANDOC variable but without any luck.

timo-berg avatar Feb 05 '22 01:02 timo-berg

The command that VSCode executes it rmarkdown::render('[path to file]/Chap04.Rmd', encoding = 'UTF-8')

What happens if you run the same command from the R console?

eitsupi avatar Feb 05 '22 10:02 eitsupi

One simple solution is to copy the pandoc binary bundled in RStudio to /usr/local/bin.

In short:

  1. Open RStudio IDE
  2. Execute file.copy(rmarkdown::pandoc_exec(), "/usr/local/bin/pandoc", overwrite = TRUE)

shrektan avatar Feb 05 '22 11:02 shrektan

The command that VSCode executes it rmarkdown::render('[path to file]/Chap04.Rmd', encoding = 'UTF-8')

What happens if you run the same command from the R console?

This works! I also found out that if I run a code chunk and then try to execute rmarkdown::pandoc_version(), it doesn't find pandoc (i.e. it outputs "0"). Somehow the code chunk execution opens a different kind of R terminal that doesn't find pandoc? I use radian installed via homebrew. image

timo-berg avatar Feb 07 '22 17:02 timo-berg

Have you read my comment above?

Does coping the pandoc binary work?

I'll explain a little bit:

RStudio IDE will bundle a pandoc binary with itself. So, RStudio can find the pandoc execuable while r or radian can't. Just copy that binary to where r and radian can find will fix your issue, in my opinion.

shrektan avatar Feb 10 '22 15:02 shrektan

Sorry yes, I tried that but it didn't change anything. The binary was also already present in the bin folder.

timo-berg avatar Feb 10 '22 18:02 timo-berg

I'm wondering if this is a .bash_profile vs .bashrc issue ? As in I'm wondering if @timo-berg has defined their pandoc PATH as part of the .bash_profile but that its not going loaded in vscode-r's call to R / rmarkdown?

Doing some googling it looks like rmarkdown looks for the value of RSTUDIO_PANDOC to find pandoc if its not on your PATH. A simple solution in theory then would be to add

RSTUDIO_PANDOC=/path/to/pandoc

in a .Renviron file in the root your project (or in the global Renviron file if you have root access).

(source: https://stackoverflow.com/questions/28432607/pandoc-version-1-12-3-or-higher-is-required-and-was-not-found-r-shiny/29710643#29710643)

gowerc avatar Feb 12 '22 10:02 gowerc

Thanks that solved the issue! If anybody else has this issue: Set Settings > R > Rmarkdown > Knit: Command to Sys.setenv(RSTUDIO_PANDOC="--path to pandoc"); rmarkdown::render I'm still a bit confused because I was able to knit my rmarkdowns without issues before and am not sure what caused it to crash but it is resolved. Thanks to all!

timo-berg avatar Feb 15 '22 17:02 timo-berg

I am not super familiar with R or .Rmd files, but after installing r-essentials and r-rmarkdown via conda, then in VS Code settings editing the R path to point to the conda installation, whenever I try to knit a .Rmd file I get the error Error: pandoc version 1.12.3 or higher is required and was not found (see the help page ?rmarkdown::pandoc_available). Unfortunately, changing the Knit: Command to: Sys.setenv(RSTUDIO_PANDOC="my/path/to/pandoc"); rmarkdown::render where my/path/to/pandoc is the path to pandoc in my conda environment as suggested by @timo-berg did not solve the issue for me. I also tried installing the language server, radian and httpgd as recommended in https://code.visualstudio.com/docs/languages/r, but this also did not solve this problem. I'm running VS Code 1.71.0 with the R Extension installed and R 4.1.3 installed via conda on MacOS 12.5.1. Any suggestions for anything else I could try to get .Rmd files working in VS Code?

marcel-goldschen-ohm avatar Sep 02 '22 19:09 marcel-goldschen-ohm

Just to add to the above, pandoc is found by R:

> rmarkdown::pandoc_available()
[1] TRUE

> rmarkdown::find_pandoc()
$version
[1] ‘2.19.2’

marcel-goldschen-ohm avatar Sep 02 '22 19:09 marcel-goldschen-ohm

Ok, few more pieces of info specific to VS Code:

  • In the default R terminal in VS Code, rmarkdown::find_pandoc() fails to find pandoc. If I exit R, then activate the conda environment in which I have R installed, then boot R again, then pandoc is found as above. Thus, there may be some sort of issue with having R in a conda environment? I have set the R path to that in the conda environment, but do I need to do something else to get VS Code to automatically correctly use this version of R?
  • After setting the R terminal to use the appropriate conda environment, the knit button in VS Code for .Rmd files ONLY works if the setting R > Rmarkdown > Knit: Use Background Process is unselected. Probably whatever background process is spun up is using the default R environment that cannot find pandoc? Any way to figure out which R this is?
  • Even with the R terminal using the correct conda environment and background knitting turned off (which successfully produces an HTML file upon clicking the knit button), the preview button still fails with the same pandoc version error as described before. Seems that preview probably spins up a background process by default instead of using the current R terminal regardless of the Use Background Process setting?

marcel-goldschen-ohm avatar Sep 02 '22 20:09 marcel-goldschen-ohm

Commenting to lend a hand to others who might encounter a similar issue with this in the future.

TLDR

Custom Rmd yaml commands overwrite all other; to get knitting working in VSCode with a custom command and the RStudio version of pandoc modify your command as such:

---
output: github_document
knit: (function(inputFile, encoding) {
        Sys.setenv(RSTUDIO_PANDOC='/Applications/RStudio.app/Contents/MacOS/quarto/bin');
        rmarkdown::render(inputFile,
                        encoding=encoding, 
                        output_file=file.path(dirname(inputFile), "README.md")) })
---

Explanation

I am using VSCode for my R work and wanted to knit a document. First I ran into the issue mentioned here that pandoc cannot be found so I installed pandoc via conda. This worked perfectly and I could now click the knit button in VSCode and knit my document.

I later noticed there were differences in the products from RStudio knits to VSCode knits. For example footnotes were not rendering.

I would write in Rmd:

Some text here and then a footnote^[Some text]

The result in RStudio knit would be:

Some text here and then a footnote[^1]

[^1]: [Some text]

However in VSCode result would be:

Some text here and then a footnote[1]

[1] [Some text]

There were other differences as well this is why I investigated. I noticed my knit commands being executed were:

# studio
/Applications/RStudio.app/Contents/MacOS/quarto/bin/pandoc +RTS -K512m -RTS 03-06-terraform-and-docker.knit.md --to gfm-yaml_metadata_block --from markdown+autolink_bare_uris+tex_math_single_backslash --output ./03-06-terraform-and-docker.md --template /opt/homebrew/lib/R/site-library/rmarkdown/rmarkdown/templates/github_document/resources/default.md '--webtex=https://latex.codecogs.com/png.image?%5Cdpi%7B110%7D&space;%5Cbg_white&space;' 
/Applications/RStudio.app/Contents/MacOS/quarto/bin/pandoc +RTS -K512m -RTS ./03-06-terraform-and-docker.md --to html4 --from gfm --output ./03-06-terraform-and-docker.html --standalone --self-contained --highlight-style pygments --template /opt/homebrew/lib/R/site-library/rmarkdown/rmarkdown/templates/github_document/resources/preview.html --variable 'github-markdown-css:/opt/homebrew/lib/R/site-library/rmarkdown/rmarkdown/templates/github_document/resources/github.css' --metadata pagetitle=PREVIEW '--webtex=https://latex.codecogs.com/png.image?%5Cdpi%7B110%7D&space;%5Cbg_white&space;' 

# vscode
/Users/neurox1/Tools/miniconda3/bin/pandoc +RTS -K512m -RTS 03-06-terraform-and-docker.knit.md --to gfm --from markdown+autolink_bare_uris+tex_math_single_backslash --output ./03-06-terraform-and-docker.md --template /opt/homebrew/lib/R/site-library/rmarkdown/rmarkdown/templates/github_document/resources/default.md '--webtex=https://latex.codecogs.com/png.image?%5Cdpi%7B110%7D&space;%5Cbg_white&space;' 
/Users/neurox1/Tools/miniconda3/bin/pandoc +RTS -K512m -RTS ./03-06-terraform-and-docker.md --to html4 --from gfm --output ./03-06-terraform-and-docker.html --standalone --self-contained --highlight-style pygments --template /opt/homebrew/lib/R/site-library/rmarkdown/rmarkdown/templates/github_document/resources/preview.html --variable 'github-markdown-css:/opt/homebrew/lib/R/site-library/rmarkdown/rmarkdown/templates/github_document/resources/github.css' --metadata pagetitle=PREVIEW '--webtex=https://latex.codecogs.com/png.image?%5Cdpi%7B110%7D&space;%5Cbg_white&space;'

These were indeed using different pandoc versions/executables.

I uninstalled conda pandoc and tried running again; but failure as VSCode knit cannot find pandoc.

Nothing worked, even setting env variables etc and even setting the knit command as stated in this thread in the VSCode settings.

I noticed that the command being executed was actually the custom command I set in my Rmd yaml; which overwrites any other and modified it to this:

---
output: github_document
knit: (function(inputFile, encoding) {
        Sys.setenv(RSTUDIO_PANDOC='/Applications/RStudio.app/Contents/MacOS/quarto/bin');
        rmarkdown::render(inputFile,
                        encoding=encoding, 
                        output_file=file.path(dirname(inputFile), "README.md")) })
---

dereckmezquita avatar Oct 03 '22 17:10 dereckmezquita

Thank you for digging into this @dereckdemezquita! will have to check what's going on with the pandoc path setting -- it should be picked up by node (but obviously something weird is going on)

ElianHugh avatar Oct 04 '22 08:10 ElianHugh

Just adding that the path for my pandoc was in /Applications/RStudio.app/Contents/MacOS/quarto/bin/tools

tiubenedict avatar Oct 13 '22 13:10 tiubenedict

Commenting to lend a hand to others who might encounter a similar issue with this in the future.

TLDR

Custom Rmd yaml commands overwrite all other; to get knitting working in VSCode with a custom command and the RStudio version of pandoc modify your command as such:

---
output: github_document
knit: (function(inputFile, encoding) {
        Sys.setenv(RSTUDIO_PANDOC='/Applications/RStudio.app/Contents/MacOS/quarto/bin');
        rmarkdown::render(inputFile,
                        encoding=encoding, 
                        output_file=file.path(dirname(inputFile), "README.md")) })
---

Explanation

I am using VSCode for my R work and wanted to knit a document. First I ran into the issue mentioned here that pandoc cannot be found so I installed pandoc via conda. This worked perfectly and I could now click the knit button in VSCode and knit my document.

I later noticed there were differences in the products from RStudio knits to VSCode knits. For example footnotes were not rendering.

I would write in Rmd:

Some text here and then a footnote^[Some text]

The result in RStudio knit would be:

Some text here and then a footnote[^1]

[^1]: [Some text]

However in VSCode result would be:

Some text here and then a footnote[1]

[1] [Some text]

There were other differences as well this is why I investigated. I noticed my knit commands being executed were:

# studio
/Applications/RStudio.app/Contents/MacOS/quarto/bin/pandoc +RTS -K512m -RTS 03-06-terraform-and-docker.knit.md --to gfm-yaml_metadata_block --from markdown+autolink_bare_uris+tex_math_single_backslash --output ./03-06-terraform-and-docker.md --template /opt/homebrew/lib/R/site-library/rmarkdown/rmarkdown/templates/github_document/resources/default.md '--webtex=https://latex.codecogs.com/png.image?%5Cdpi%7B110%7D&space;%5Cbg_white&space;' 
/Applications/RStudio.app/Contents/MacOS/quarto/bin/pandoc +RTS -K512m -RTS ./03-06-terraform-and-docker.md --to html4 --from gfm --output ./03-06-terraform-and-docker.html --standalone --self-contained --highlight-style pygments --template /opt/homebrew/lib/R/site-library/rmarkdown/rmarkdown/templates/github_document/resources/preview.html --variable 'github-markdown-css:/opt/homebrew/lib/R/site-library/rmarkdown/rmarkdown/templates/github_document/resources/github.css' --metadata pagetitle=PREVIEW '--webtex=https://latex.codecogs.com/png.image?%5Cdpi%7B110%7D&space;%5Cbg_white&space;' 

# vscode
/Users/neurox1/Tools/miniconda3/bin/pandoc +RTS -K512m -RTS 03-06-terraform-and-docker.knit.md --to gfm --from markdown+autolink_bare_uris+tex_math_single_backslash --output ./03-06-terraform-and-docker.md --template /opt/homebrew/lib/R/site-library/rmarkdown/rmarkdown/templates/github_document/resources/default.md '--webtex=https://latex.codecogs.com/png.image?%5Cdpi%7B110%7D&space;%5Cbg_white&space;' 
/Users/neurox1/Tools/miniconda3/bin/pandoc +RTS -K512m -RTS ./03-06-terraform-and-docker.md --to html4 --from gfm --output ./03-06-terraform-and-docker.html --standalone --self-contained --highlight-style pygments --template /opt/homebrew/lib/R/site-library/rmarkdown/rmarkdown/templates/github_document/resources/preview.html --variable 'github-markdown-css:/opt/homebrew/lib/R/site-library/rmarkdown/rmarkdown/templates/github_document/resources/github.css' --metadata pagetitle=PREVIEW '--webtex=https://latex.codecogs.com/png.image?%5Cdpi%7B110%7D&space;%5Cbg_white&space;'

These were indeed using different pandoc versions/executables.

I uninstalled conda pandoc and tried running again; but failure as VSCode knit cannot find pandoc.

Nothing worked, even setting env variables etc and even setting the knit command as stated in this thread in the VSCode settings.

I noticed that the command being executed was actually the custom command I set in my Rmd yaml; which overwrites any other and modified it to this:

---
output: github_document
knit: (function(inputFile, encoding) {
        Sys.setenv(RSTUDIO_PANDOC='/Applications/RStudio.app/Contents/MacOS/quarto/bin');
        rmarkdown::render(inputFile,
                        encoding=encoding, 
                        output_file=file.path(dirname(inputFile), "README.md")) })
---

Adding this to the R > Rmarkdown > Knit: Command extension settings in VScode worked for me, but it outputs everything in the README.md format.

Is there a way to vary it dynamically to output as PDF or HTML by Rmd output: type?

JoeHelbing avatar Jan 21 '23 20:01 JoeHelbing

@JoeHelbing not sure what you meant but this might help: https://pkgs.rstudio.com/rmarkdown/reference/render.html

The output type gets read by the yaml above the call to rmarkdown::render.

dereckmezquita avatar Jan 21 '23 20:01 dereckmezquita

Unfortunately, none of these have worked for me. I tried:

  1. in rmd yaml section, added knit: (function(inputFile, encoding) { Sys.setenv(RSTUDIO_PANDOC="C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools"); rmarkdown::render(inputFile, encoding=encoding, output_file=file.path(dirname(inputFile), "README.md")) })

  2. In vscode > settings> R> Rmarkdown > knit::Command Sys.setenv(RSTUDIO_PANDOC="C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools"); rmarkdown::render

  3. In terminal (Windows command prompt): set RSTUDIO_PANDOC "C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools"

I restarted vscode session every time I made these changes.

tongyaop avatar Aug 10 '23 19:08 tongyaop

Installing Pandoc using homebrew solved my problem. brew install pandoc

pokwir avatar Aug 17 '23 15:08 pokwir

I am running R using vscode in a conda environment of a remote server.

I notice that the PATH in the vscode interactive R terminal does not include the necessary environment path. I came up with this solution. Here is my settings.json file.

{
    "r.rpath.linux": "/path/to/myenv/bin/R",
    "r.rterm.linux": "/path/to/myenv/bin/R",
    "r.rmarkdown.knit.command": "Sys.setenv(PATH=paste(\"/path/to/myenv/bin\", Sys.getenv(\"PATH\"), sep=\":\")); rmarkdown::render",
}

snail123815 avatar Dec 06 '23 19:12 snail123815