[R] post_processor in rmarkdown not working

Duncan Murdoch murdoch.duncan at gmail.com
Thu Sep 7 20:04:25 CEST 2017


On 07/09/2017 10:11 AM, Thierry Onkelinx wrote:
> Dear Duncan,
> 
> Thanks for chiming in. Could you explain how you set debug() on 
> post_processor()? I've tried adding debug(post_processor) to 
> rsos_article() or adding debug(post_processor) when after post_processor 
> was defined in the debugger. Neither work for me.

Not working for me either right now for some reason or other.  What I 
was doing was manually running debug(post_processor) in the debugger 
after single stepping past its definition.

What does show it is running is that at that same point I can execute

post_processor <- function() stop()

and it stops.

The end of the console log looks like this:


/Applications/RStudio.app/Contents/MacOS/pandoc/pandoc +RTS -K512m -RTS 
skeleton.utf8.md --to latex --from 
markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash 
--output skeleton.tex --template 
/Library/Frameworks/R.framework/Versions/3.3/Resources/library/INBOmd/rmarkdown/templates/rsos_article/resources/template.tex 
--natbib --bibliography sample.bib
Latexmk: This is Latexmk, John Collins, 19 Jan. 2017, version: 4.52c.
Error in output_format$post_processor(yaml_front_matter, utf8_input, 
output_file,  :
   unused arguments (yaml_front_matter, utf8_input, output_file, clean, 
!quiet)
Called from: output_format$post_processor(yaml_front_matter, utf8_input, 
output_file,
     clean, !quiet)

so we see pandoc being run, then Latexmk, then the post_processor call. 
It seems a little odd that Latexmk is being run.  Is that something you 
are doing, or is it pandoc asking for that?  If the latter, can you tell 
pandoc not to do so?



> 
> All supporting files are available within the package. The code below 
> should be reproducible on your machine.
> 
> remove.packages("INBOmd")
> devtools::install_github("inbo/INBOmd at post_processor")
> setwd(system.file("rmarkdown/templates/rsos_article/skeleton", package = 
> "INBOmd"))
> debug(INBOmd::rsos_article)
> rmarkdown::render("skeleton.Rmd")

I'm not sure you would normally have write access in that directory, so 
it may not be typical of what you'd see in a user directory.  I 
certainly see something different when I copy the skeleton.Rmd file (and 
nothing else) to my own temp directory.


> 
> The sign that post_processor() fails when the tex file still contains 
> \EndFirstPage resulting in the compilation error "Undefined control 
> sequence. l.128 \EndFirstPage"

That certainly indicates it isn't doing what you want, but it might be 
running and doing something else.

Duncan Murdoch

> 
> I still get the error with the current version of the code. Running the 
> post_processor manually works.
> 
> eval(parse(
>    text = readLines(
>      
> "https://raw.githubusercontent.com/inbo/INBOmd/post_processor/R/rsos_article.R"
>    )[72:92]
> ))
> post_processor(output_file = "skeleton.tex")
> system("pdflatex skeleton.tex")
> 
> Best regards,
> 
> 
> ir. Thierry Onkelinx
> Instituut voor natuur- en bosonderzoek / Research Institute for Nature 
> and Forest
> team Biometrie & Kwaliteitszorg / team Biometrics & Quality Assurance
> Kliniekstraat 25
> 1070 Anderlecht
> Belgium
> 
> To call in the statistician after the experiment is done may be no more 
> than asking him to perform a post-mortem examination: he may be able to 
> say what the experiment died of. ~ Sir Ronald Aylmer Fisher
> The plural of anecdote is not data. ~ Roger Brinner
> The combination of some data and an aching desire for an answer does not 
> ensure that a reasonable answer can be extracted from a given body of 
> data. ~ John Tukey
> 
> 2017-09-07 12:14 GMT+02:00 Duncan Murdoch <murdoch.duncan at gmail.com 
> <mailto:murdoch.duncan at gmail.com>>:
> 
>     On 06/09/2017 5:41 AM, Thierry Onkelinx wrote:
> 
>         Dear all,
> 
>         I'm trying to write a post_processor() for a custom rmarkdown
>         format. The
>         goal of the post_processor() is to modify the latex file before
>         it is
>         compiled. For some reason the post_processor() is not run. The
>         post_processor() does work when I run it manually on the tex file.
> 
>         Any suggestions on what I'm doing wrong? Below is the relevant
>         snippet of
>         the code. The full code is available at
>         https://github.com/inbo/INBOmd/blob/post_processor/R/rsos_article.R
>         <https://github.com/inbo/INBOmd/blob/post_processor/R/rsos_article.R>
>         https://github.com/inbo/INBOmd/blob/post_processor/inst/rmarkdown/templates/rsos_article/skeleton/skeleton.Rmd
>         <https://github.com/inbo/INBOmd/blob/post_processor/inst/rmarkdown/templates/rsos_article/skeleton/skeleton.Rmd>
>         is an Rmd is a MWE that fails compile because the
>         post_processor() is not
>         run.
> 
> 
>     I installed it and tried running it using
> 
>     debug(INBOmd::rsos_article)
>     rmarkdown::render("skeleton.Rmd")
> 
>     then after post_processor was defined, I set it to debug as well,
>     and could see that the post_processor was being run.
> 
>     I didn't get useful output, because the LaTeXing failed (I don't
>     have the rsos.cls), but perhaps you've already fixed this problem,
>     or perhaps it is intermittent?
> 
>     Duncan Murdoch
> 
>         Best regards,
> 
>         Thierry
> 
>             post_processor <- function(
>               metadata, input_file, output_file, clean, verbose
>             ) {
>               text <- readLines(output_file, warn = FALSE)
> 
>               # set correct text in fmtext environment
>               end_first_page <- grep("\\\\EndFirstPage", text) #nolint
>               if (length(end_first_page) == 1) {
>                 maketitle <- grep("\\\\maketitle", text) #nolint
>                 text <- c(
>                   text[1:(maketitle - 1)],
>                   "\\begin{fmtext}",
>                   text[(maketitle + 1):(end_first_page - 1)],
>                   "\\end{fmtext}",
>                   "\\maketitle",
>                   text[(end_first_page + 1):length(text)]
>                 )
>                 writeLines(enc2utf8(text), output_file, useBytes = TRUE)
>               }
>               output_file
>             }
> 
>             output_format(
>               knitr = knitr_options(
>                 opts_knit = list(
>                   width = 60,
>                   concordance = TRUE
>                 ),
>                 opts_chunk = opts_chunk,
>                 knit_hooks = knit_hooks
>               ),
>               pandoc = pandoc_options(
>                 to = "latex",
>                 latex_engine = "xelatex",
>                 args = args,
>                 keep_tex = keep_tex
>               ),
>               post_processor = post_processor,
>               clean_supporting = !keep_tex
>             )
> 
> 
> 
>         ir. Thierry Onkelinx
>         Instituut voor natuur- en bosonderzoek / Research Institute for
>         Nature and
>         Forest
>         team Biometrie & Kwaliteitszorg / team Biometrics & Quality
>         Assurance
>         Kliniekstraat 25
>         1070 Anderlecht
>         Belgium
> 
>         To call in the statistician after the experiment is done may be
>         no more
>         than asking him to perform a post-mortem examination: he may be
>         able to say
>         what the experiment died of. ~ Sir Ronald Aylmer Fisher
>         The plural of anecdote is not data. ~ Roger Brinner
>         The combination of some data and an aching desire for an answer
>         does not
>         ensure that a reasonable answer can be extracted from a given
>         body of data.
>         ~ John Tukey
> 
>                  [[alternative HTML version deleted]]
> 
>         ______________________________________________
>         R-help at r-project.org <mailto:R-help at r-project.org> mailing list
>         -- To UNSUBSCRIBE and more, see
>         https://stat.ethz.ch/mailman/listinfo/r-help
>         <https://stat.ethz.ch/mailman/listinfo/r-help>
>         PLEASE do read the posting guide
>         http://www.R-project.org/posting-guide.html
>         <http://www.R-project.org/posting-guide.html>
>         and provide commented, minimal, self-contained, reproducible code.
> 
> 
>



More information about the R-help mailing list