[R] post_processor in rmarkdown not working

Duncan Murdoch murdoch.duncan at gmail.com
Thu Sep 7 21:18:15 CEST 2017


On 07/09/2017 2:04 PM, Duncan Murdoch wrote:
> 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?
> 

I've done some debugging in rmarkdown::render.  Apparently if you need 
Bibtex (as your example does), it runs Latexmk before the post-processor.

I don't know if there's a way around this...

Duncan Murdoch

> 
> 
>>
>> 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