【问题标题】:Formatted scientific names from R to LaTeX (using Sweave or knitr)从 R 到 LaTeX 的格式化科学名称(使用 Sweave 或 knitr)
【发布时间】:2018-12-08 01:55:33
【问题描述】:

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

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

那么控制台的输出是:

[1] "*Cyperus papyrus* L."

例如,我可以使用此命令在 `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")

【问题讨论】:

    标签: r latex knitr taxonomy sweave


    【解决方案1】:

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

    <<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 中如下所示。

    【讨论】:

    • 我为造成的混乱道歉,请参阅上面我编辑的答案。
    • 哇!这真的很有效!尽管如此,它仅适用于knitr,但不适用于Sweave
    猜你喜欢
    • 2018-01-05
    • 1970-01-01
    • 2016-09-03
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 2012-01-16
    相关资源
    最近更新 更多