[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