Skip to content
Back to formatted view

Raw Message

Message-ID: <52488ee5-8291-6812-e1f3-1f8abd933060@gmail.com>
Date: 2017-09-08T11:55:38Z
From: Duncan Murdoch
Subject: post_processor in rmarkdown not working
In-Reply-To: <CAJuCY5zbYb9w5AwYUf51vvydc=y6Njm8e_H_B0vtzPe3Nt3oqA@mail.gmail.com>

On 08/09/2017 3:56 AM, Thierry Onkelinx wrote:
> That is strange. Another function in the same package 
> (INBOmd::inbo_rapport) uses the same trick. 

I think the issue there is that the LaTeX code is valid before the 
post-processor is run, it just re-orders things.  So rmarkdown::render 
runs Pandoc, then LaTeX (via Latexmk), then the post-processor, then 
LaTeX again.

This suggests a solution to the rsos_article problem:  somehow make sure 
that the LaTeX is valid from the start, e.g. by defining dummy versions 
of the missing macros.

Duncan Murdoch


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 at gmail.com 
> <mailto:murdoch.duncan at 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 <http://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
>             <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>
>             <mailto: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/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>
>                     
>              ?<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>
>             <mailto: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>
>              ? ? ? ? ?<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>
>              ? ? ? ? ?<http://www.R-project.org/posting-guide.html
>             <http://www.R-project.org/posting-guide.html>>
>              ? ? ? ? ?and provide commented, minimal, self-contained,
>             reproducible code.
> 
> 
> 
> 
> 
>