[R-pkg-devel] R CMD checks URLs formatted for LaTeX instead of using the non-LaTeX URLs, and fails

Sebastian Meyer @eb@meyer @end|ng |rom |@u@de
Sun Jul 3 01:51:05 CEST 2022


Am 02.07.22 um 12:01 schrieb Ralf Herold:
> Hello, in my package documentation I want to include URLs with query string parameters and anchors, within a table. A minimally reproducible example is this content in file "man/mre.Rd":
> 
> \name{mre}
> \title{mre}
> \description{mre}
> \details{
> \tabular{l}{
>    \ifelse{latex}{\href{https://clinicaltrials.gov/ct2/results?cond=Infections\&rslt=With\#tableTop}{latex link}}{\href{https://clinicaltrials.gov/ct2/results?cond=Infections&rslt=With#tableTop}{non-latex link}}
> }}
> 
> The ifelse{}{}{} construct is necessary since ampersands in a table need to be escaped for LaTeX rendering.

This is a red herring. Ampersands do *not* need to be escaped in \href 
URLs. The problem is the hash symbol, which needs to be escaped if \href 
is nested within another markup macro, here \Tabular (from Rd.sty). This 
is a known limitation; Rd2latex will probably do the escaping in the 
future. It's good to see a use case.

I think currently the best solutions for you are to simply omit the 
#tableTop part in the LaTeX version or to not use such URLs inside a 
\tabular.

Hope this helps.
Best regards,

	Sebastian Meyer

> 
> Each of the following commands checks and renders the respective output correctly:
> 
> tools::checkRd("man/mre.Rd")
> tools::Rd2txt("man/mre.Rd")
> tools::Rd2latex("man/mre.Rd")
> tools::Rd2HTML("man/mre.Rd")
> system2("R", c("CMD", "Rd2pdf", "man/mre.Rd"))
> 
> However, rhub::check_for_cran() results in NOTES:
> 
> Found the following (possibly) invalid URLs:
>    URL: https://clinicaltrials.gov/ct2/results?cond=Infections\&rslt=With\#tableTop
>      From: man/mre.Rd
>      Status: 400
>      Message: Bad Request
> 
> Subsequently, CRAN maintainers refused accepting the package.
> 
> However, the underlying cause is that, during such checks, all apparent URLs are extracted from .Rd files, irrespective of any \ifelse{}{}{} constructs. This in turn is due to such checks involving calls to function ".get_urls_from_Rd" without setting its argument "ifdef" to TRUE.
> 
> Here is how to see this behaviour:
> 
> db <- tools::Rd_db(dir = ".")
> 
> # get functions
> source("https://svn.r-project.org/R/trunk/src/library/tools/R/urltools.R")
> source("https://svn.r-project.org/R/trunk/src/library/tools/R/utils.R")
> .Rd_deparse <- tools:::.Rd_deparse
> RdTags <- tools:::RdTags
> 
> # default, leading to invalid url in [1]
> # > .get_urls_from_Rd(db)
> # [1] "https://clinicaltrials.gov/ct2/results?cond=Infections\\&rslt=With\\#tableTop"
> # [2] "https://clinicaltrials.gov/ct2/results?cond=Infections&rslt=With#tableTop"
> 
> # returning relevant valid url
> #> .get_urls_from_Rd(db, ifdef = TRUE)
> # [1] "https://clinicaltrials.gov/ct2/results?cond=Infections&rslt=With#tableTop"
> 
> This can be addressed by either:
> 
> -- changing the signature of ".get_urls_from_Rd" in line 50 in https://svn.r-project.org/R/trunk/src/library/tools/R/urltools.R to read "ifdef = TRUE". Of note, this function has a code block to handle such ifdef constructs which indicates it should be possible to use them in Rd files.
> 
> -- changing the calling function "url_db_from_package_Rd_db" to include "ifdef = TRUE" on line 178 in https://svn.r-project.org/R/trunk/src/library/tools/R/urltools.R
> 
> Please advise how to advance on this issue, thank you very much.
> 
> Greetings
> Ralf
> 
> ______________________________________________
> R-package-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel



More information about the R-package-devel mailing list