On 23/05/2023 6:53 a.m., Martin Maechler wrote:
Duncan Murdoch
     on Mon, 22 May 2023 15:38:10 -0400 writes:

     > On 22/05/2023 3:07 p.m., Ivan Krylov wrote:
     >> I fed your vignette to R CMD Sweave, and here's the
     >> relevant fragment from the resulting *.tex file:
     >>
     >>> This returned a {\tt "findFn"} object identifying 405
     >>> help pages.  When this was run while preparing this
     >>> manuscript, the sixth row was {\tt pspline_checker} in
     >>> the \pkg{JOPS} package, which has a {\tt Score} of
     >>> 47. (On another day, the results could be different,
     >>> because CRAN changes over time.)  This was the sixth row
     >>> in this table, because it is in the \pkg{JOPS} package,
     >>> which had a total of 54 help pages matching the search
     >>> term, but this was the only one whose name matched the
     >>> {\tt pattern} passed to {\tt grepFn}.
     >>
     >> This corresponds to the following part of the vignette:
     >>
     >>> This returned a {\tt "findFn"} object identifying
     >>> \Sexpr{nrow(g)} help pages.  When this was run while
     >>> preparing this manuscript, the sixth row was {\tt
     >>> \Sexpr{gFunc6}} in the \pkg{\Sexpr{gPac6}} package,
     >>> which has a {\tt Score} of \Sexpr{gScore6}.
     >>
     >> So, you need to escape the underscores in
     >> gFunc6. Probably not gPac6 because underscores are not
     >> allowed in package names.
     >>

     > Nice find.  Just in case Spencer has trouble with escaping
     > the escapes, I think he should change

     >    "{\tt \Sexpr{gFunc6}}"

     > to

     >    "{\tt \Sexpr{sub("_", "\\\\_", gFunc6)}}

     > Even better would be to write a little function
     > "sanitizeForLatex" that did this and any other necessary
     > changes, and call that.

Yes, indeed (2 x).

If I grep the base R package sources, I find three occurrences
of something like the above:

grep --color -nH --null -e 'sub *(.*\\\\_' */R/*.R

  tools/R/Rd2latex.R:295:        x <- fsub("\\_", "_", x)
  tools/R/Rd2latex.R:303:        x <- fsub("\\_", ".Rul.", x)
  tools/R/Rd.R:681:    txt <- gsub("\\_", "_", txt, fixed=TRUE)

all of which do the transformation in the other direction
(because *.Rd in those cases already *is* LaTeX-alike, and needs
  to convert for non-LaTeX use).

Note that the last one gives a hint to be more general --- gsub()
also working a.g. for 'parse_me_not' ---
*and* possibly faster (fixed=TRUE)  leading to

      "{\tt \Sexpr{gsub("_", "\\\\_", gFunc6, fixed=TRUE)}}

Martin

Yes, a good idea to use gsub and fixed = TRUE.

There are some changes in the other direction as well in that file (Rd format is very complicated). I think the characters it handles are \, &, $, %, _, #, {, }, ^, ~, occurring near line 145. Only _ is allowed in a "syntactic" name, but others might turn up when trying to display other code.

Duncan

______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel

Reply via email to