Отформатированные научные названия от R до LaTeX (используя Sweave или knitr) - PullRequest
0 голосов
/ 29 июня 2018

Я реализую функцию print_name в пакете taxlist . Например, я могу отформатировать название для уценки:

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.

Есть ли способ правильно выполнить эту задачу?

Примечание: В настоящий момент эта функция не реализована в версии пакета CRAN, поэтому для воспроизведения примера используйте последнюю версию из GitHub:

devtools::install_github("kamapu/taxlist")

1 Ответ

0 голосов
/ 29 июня 2018

Я думаю, что вы делаете это:

<<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")}

Это выдаст вам то, что вы хотите.

EDIT:

Если вы пытаетесь включить «латекс» в качестве опции стиля для вывода, то он должен выглядеть так, когда выводится за пределы латекса:

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.

enter image description here

...