Gray Calhoun
2011-Nov-25 23:12 UTC
[Rd] Problem with & question about \preformatted in .Rd
Hi, The "\preformatted" environment in Rd files doesn't seem to escape long sequences of backslashes properly when converted to pdf (LaTeX) documentation. I'm running R version 2.14 (from subversion, revision 57751) on Linux (RHEL). Here's an example from the command line: echo "\title{test}\name{test}\section{problems}{\preformatted{print('\\\\\\\\begin\\\\\{block\\\\\}')}}"> temp.RdR CMD Rdconv --type=latex temp.Rd which outputs: \inputencoding{utf8} \HeaderA{test}{test}{test} % \begin{Section}{problems} \begin{alltt}print('\\\\begin\\{block\\}')\end{alltt} \end{Section} and the double backslashes become newlines when this text is embedded in a complete document and converted to pdf. I expected from the documentation to get this: \inputencoding{utf8} \HeaderA{test}{test}{test} % \begin{Section}{problems} \begin{alltt}print('\bsl{}\bsl{}\bsl{}\begin\bsl{}\bsl{}\{block\bsl{}\bsl{}\}')\end{alltt} \end{Section} The problem seems to come from tools:::Rd2latex as this R code indicates: library(tools) tools:::Rd2latex(textConnection("\\title{test}\\name{test} \\section{problems}{ \\preformatted{ print('\\\\\\\\\\\\\\\\begin\\\\\\\\\\{block\\\\\\\\\\}') }}")) (the output is the same as from the command line above) I can get the behavior that I want by removing a few lines from the relevant part of tools:::Rd2latex and I provide a patch below, but I assume that the code that I removed was put there for a good reason so this isn't a good fix. make check-devel didn't find any errors, though. I'm happy to fill out a bug report for this if that's the next appropriate step. A question: why is there special code to handle "\var" inside \preformatted environments? The documentation reads: "\preformatted{text} Indicate text that is a literal example of a piece of a program. Text is displayed using typewriter font if possible. Formatting, e.g. line breaks, is preserved. Due to limitations in LaTeX as of this writing, this macro may not be nested within other markup macros other than \dQuote and \sQuote, as errors or bad formatting may result." which doesn't indicate that \var should be handled any differently than any other macro, but the code makes me think that R is trying to pass the macro through to LaTeX. Thanks! --Gray -- Gray Calhoun Assistant Professor of Economics, Iowa State University http://www.econ.iastate.edu/~gcalhoun patch: Index: src/library/tools/R/Rd2latex.R ==================================================================--- src/library/tools/R/Rd2latex.R (revision 57751) +++ src/library/tools/R/Rd2latex.R (working copy) @@ -163,10 +163,7 @@ BSL = '@BSL@'; BSL2 = '@BSLBSL@'; #x <- fsub("\\dots", "...", x) - ## escape any odd \, e.g. \n - x <- fsub("\\\\", BSL, x) # change even ones x <- fsub("\\", BSL2, x) # odd ones - x <- fsub(BSL, "\\\\", x) # change back x <- psub("(?<!\\\\)\\{", "\\\\{", x) x <- psub("(?<!\\\\)}", "\\\\}", x) x <- fsub(BSL2, "\\bsl{}", x)library(tools)
Gray Calhoun
2011-Nov-27 05:34 UTC
[Rd] Problem with & question about \preformatted in .Rd
I need to correct one minor typo below: On Fri, Nov 25, 2011 at 6:12 PM, Gray Calhoun <gray.calhoun at gmail.com> wrote: (cut a lot)> ?I expected from the documentation to get this: > > \inputencoding{utf8} > \HeaderA{test}{test}{test} > % > \begin{Section}{problems} > \begin{alltt}print('\bsl{}\bsl{}\bsl{}\begin\bsl{}\bsl{}\{block\bsl{}\bsl{}\}')\end{alltt} > \end{Section}The second to last line should read: \begin{alltt}print('\bsl{}\bsl{}\bsl{}\bsl{}begin\bsl{}\bsl{}\{block\bsl{}\bsl{}\}')\end{alltt} Sorry about that. --Gray -- Gray Calhoun Assistant Professor of Economics, Iowa State University http://www.econ.iastate.edu/~gcalhoun