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







______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to