I've spent a week writing an R vignette using knitr, with input in R Markdown, and output in HTML. Previously all vignettes that I wrote were in Sweave with a PDF target.
One of the things I miss is Synctex, which gives the ability to jump from the PDF preview back to the corresponding line in the file. As far as I can see, knitr supports this when producing LaTeX output (using the same scheme as Sweave, I think), but not when producing HTML output.
I know that the R Markdown to HTML process goes through pandoc, so I checked the pandoc docs, but couldn't find any mention of Synctex there.
So my questions are:
Are there any HTML browsers that support something like Synctex for forward and reverse search from an editor? (Since RStudio has its own built-in browser, it could be doing this...)
Does pandoc support any Sweave-like scheme for relating output locations in the HTML file to input locations in the .md input?
As of October, 2022 Pandoc doesn't support Synctex directly, but there are some underpinnings of support described here: https://github.com/jgm/pandoc/issues/4565#issuecomment-749294039. In summary:
If the input is Commonmark, use the
sourcepos
extension and a record is kept internally of the source locations. For example, this option on the command line:--from commonmark+sourcepos
.If the output is HTML, the locations will be inserted as
data-pos
attributes on various components, e.g.<div class="section level2" data-pos="Untitled.knit.md@11:1-12:1">
to indicate that the DIV is based on things from col 1 of line 11 to col 1 of line 12 of theUntitled.knit.md
file.If the output is LaTeX, each word in the document will be wrapped in braces, but the source position is not entered in the file. It can be retrieved directly using a separate run of
pandoc
with--to json
replacing--to latex
, e.g.This writes a JSON file describing the structure of the output and containing the
data-pos
attributes. As far as I know, matching this up to the.tex
file (or the resulting.pdf
file) is a somewhat difficult exercise left for the reader.