Open timo-berg opened 2 years ago
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?
One simple solution is to copy the pandoc binary bundled in RStudio to /usr/local/bin.
In short:
file.copy(rmarkdown::pandoc_exec(), "/usr/local/bin/pandoc", overwrite = TRUE)
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.
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.
Sorry yes, I tried that but it didn't change anything. The binary was also already present in the bin folder.
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).
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!
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?
Just to add to the above, pandoc is found by R:
> rmarkdown::pandoc_available()
[1] TRUE
> rmarkdown::find_pandoc()
$version
[1] ‘2.19.2’
Ok, few more pieces of info specific to 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?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?Use Background Process
setting?Commenting to lend a hand to others who might encounter a similar issue with this in the future.
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")) })
---
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")) })
---
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)
Just adding that the path for my pandoc was in /Applications/RStudio.app/Contents/MacOS/quarto/bin/tools
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 inVSCode
with a custom command and theRStudio
version ofpandoc
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 myR
work and wanted toknit
a document. First I ran into the issue mentioned here thatpandoc
cannot be found so I installedpandoc
viaconda
. This worked perfectly and I could now click theknit
button inVSCode
andknit
my document.I later noticed there were differences in the products from
RStudio
knits
toVSCode
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 asVSCode
knit
cannot findpandoc
.Nothing worked, even setting
env
variables etc and even setting the knit command as stated in this thread in theVSCode
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 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
.
Unfortunately, none of these have worked for me. I tried:
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")) })
In vscode > settings> R> Rmarkdown > knit::Command
Sys.setenv(RSTUDIO_PANDOC="C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools"); rmarkdown::render
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.
Installing Pandoc using homebrew solved my problem. brew install pandoc
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",
}
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
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 executingpandoc -v
shows the correct version. When I open a radian shell in VSCode and typermarkdown::pandoc_version()
it also shows the correct version. The command that VSCode executes itrmarkdown::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):
Additional context I tried the various other solutions to this problem such as setting the
RSTUDIO_PANDOC
variable but without any luck.