从 R 到 LaTeX 的格式化科学名称(使用 Sweave 或 knitr)

Formatted scientific names from R to LaTeX (using Sweave or knitr)

我正在包 taxlist 中实现一个函数 print_name。 例如,我可以为 markdown 格式化名称:

library(taxlist)
data(Easplist)
print_name(Easplist, 206, style="markdown")

此时控制台输出为:

[1] "*Cyperus papyrus* L."

例如,我可以使用此命令在 markdown 文档的内容中提及一个物种 `r I(print_name(Easplist, 206, style="markdown"))`,其中学名显示为斜体,作者姓名不显示。

我想实现一个选项(即 style="latex")检索为 LaTeX 格式化的字符串,可以通过 \Sexpr{print_name(Easplist, 206, style="latex")} 之类的东西插入(这个例子只是一个假设的例子)。 输出应该是 \textit{Cyperus papyrus} L. 但我所有的尝试都失败了,因为反斜杠是 R 字符串中的一个 scape。

有没有办法正确完成这个任务?

注意: 该功能目前未在 CRAN 版本的软件包中实现,因此要重现示例,请使用 GitHub 的最新版本:

devtools::install_github("kamapu/taxlist")

我想象你正在做的是这样的:

<<example, echo=FALSE>>=
library(taxlist)
data(Easplist)
\Sexpr{print_name(Easplist, 206, style="markdown")}
@

只需将 \Sexpr{} 移动到块外。

<<example, echo=FALSE>>=
library(taxlist)
data(Easplist)
@

\Sexpr{print_name(Easplist, 206, style="markdown")}

那会输出你想要的。

编辑:

如果您尝试将 "latex" 作为输出的样式选项,那么当它在 latex 之外输出时应该如下所示:

library(taxlist)
data(Easplist)
print_name(Easplist, 206, style="latex")
[1] "\textit{Cyperus papyrus} L."

将“\”转义转义。我没有将它合并到你的函数中,但这里有一个例子:

<<>>=
example_text <- "Cyperus papyrus L."
example_text <- strsplit(example_text, split = " ")
test1 <- paste0("\textit{", example_text[[1]][1], " ", example_text[[1]][2], "}", 
            " ", example_text[[1]][3])
@

\Sexpr{test1} is a paper reed. 

输出在呈现的 pdf 中看起来像这样。