В Fri, 11 Apr 2025 16:00:16 +
"Killick, Rebecca" пишет:
> All of the \link uses within my package are anchored except for the
> \linkS4class{cpt} call so I think this is what it is referring to.
> I've checked the writing R extensions "Cross-references" section and
> it just says to use \linkS4class{} but does so in reference to
> a class within the current package - which is what has been working
> up until now.
>
> The class is within the changepoint package so, I tried the obvious
> inference, \linkS4class[changepoint]{cpt} but this creates the
> following warning on check:
> "prepare_Rd: ./man/envcpt.Rd:63: unexpected TEXT '[changepoint]',
> expecting '{' checkRd: (7)
> envcpt.Rd:63: Tag LIST is invalid in a \code block"
\linkS4class is a "primitive" Rd markup operation, included in the
grammar and implemented directly by the individual Rd converters.
Currently, the grammar says that \linkS4class{} takes no optional
arguments. The workaround used by ?stats::xtabs is:
>> \code{\link[Matrix:sparseMatrix-class]{sparseMatrix}}
(With \linkS4class{sparseMatrix} helpfully left commented out on the
same line.)
In your case, that would be \link[changepoint:cpt-class]{cpt}.
For the future packages depending on future R versions, the grammar and
one of the converters can be changed:
---8<---
Index: src/library/tools/R/Rd2HTML.R
===
--- src/library/tools/R/Rd2HTML.R (revision 88138)
+++ src/library/tools/R/Rd2HTML.R (working copy)
@@ -35,6 +35,8 @@
option <- attr(arg, "Rd_option")
topic <- dest <- paste(unlist(arg), collapse = "")
+if (tag == "\\linkS4class") dest <- paste0(dest, "-class")
+
targetfile <- NULL
pkg <- NULL
if (!is.null(option)) {
@@ -55,7 +57,6 @@
} else if (!isTEXT)
stopRd(arg, Rdfile, "Bad \\link topic -- must be text")
-if (tag == "\\linkS4class") dest <- paste0(dest, "-class")
list(topic = topic, dest = dest, pkg = pkg, targetfile = targetfile)
}
Index: src/library/tools/src/gramRd.y
===
--- src/library/tools/src/gramRd.y (revision 88138)
+++ src/library/tools/src/gramRd.y (working copy)
@@ -1168,7 +1168,6 @@
{ "\\emph",LATEXMACRO },
{ "\\file",LATEXMACRO },
-{ "\\linkS4class", LATEXMACRO },
{ "\\pkg",LATEXMACRO },
{ "\\sQuote", LATEXMACRO },
@@ -1209,6 +1208,7 @@
one LaTeX-like argument */
{ "\\link",OPTMACRO },
+{ "\\linkS4class", OPTMACRO },
/* These markup macros require an R-like text argument */
---8<---
With the patch applied, the output for \linkS4class[changepoint]{cpt}
and \link[changepoint:cpt-class]{cpt} will be the same:
library(tools)
r"{ \linkS4class[changepoint]{cpt} \link[changepoint:cpt-class]{cpt} }" |>
textConnection() |> parse_Rd(fragment = TRUE) |>
Rd2HTML(no_links = FALSE, fragment = TRUE)'
# cpt
# cpt
Rd2ex skips \linkS4class as before; Rd2txt prints the name on the link;
Rd2latex doesn't support the cross-package anchor; and Rd2HTML needs to
process the ...-class destination first, before the if (option) { ... }
branch sets targetfile based on it.
--
Best regards,
Ivan
__
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel