[R] post_processor in rmarkdown not working

Thierry Onkelinx thierry.onkelinx at inbo.be
Fri Sep 8 09:56:39 CEST 2017


That is strange. Another function in the same package
(INBOmd::inbo_rapport) uses the same trick. I actually started by copying
the post_processor() from that function. INBOmd::inbo_rapport() works both
with and without BibTex. Working examples are source/inbo_rapport and
source/inbo_rapport_basic from https://github.com/inbo/inbomd_examples.
Note that you need some extra work after installing INBOmd to
inbo_rapport() to run. See the README at https://github.com/inbo/INBOmd

I've created an issue https://github.com/rstudio/rmarkdown/issues/1138

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 21:18 GMT+02:00 Duncan Murdoch <murdoch.duncan op gmail.com>:

> 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 op 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 op gmail.com
>>> <mailto:murdoch.duncan op 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 op r-project.org <mailto:R-help op 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.
>>>
>>>
>>>
>>>
>>
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list