[R] post_processor in rmarkdown not working
Duncan Murdoch
murdoch.duncan at gmail.com
Fri Sep 8 13:55:38 CEST 2017
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.
>
>
>
>
>
>
More information about the R-help
mailing list