我希望能够将markdown斜体和粗体转换为乳胶版本(即,给文本字符串返回文本字符串)。我觉得很容易。错误! (它仍然可能是)。看到我在底部试过的窗台商务和错误。
我拥有的(请注意在降价时已转义的起始星号):
x <- "\\*note: I *like* chocolate **milk** too ***much***!"
我想要的是什么:
"*note: I \\emph{like} chocolate \\textbf{milk} too \\textbf{\\emph{much}}!"
我不依赖于正则表达式,但更喜欢基础解决方案(虽然不是必需的)。
愚蠢的生意:
helper <- function(ins, outs, x) {
gsub(paste0(ins[1], ".+?", ins[2]), paste0(outs[1], ".+?", outs[2]), x)
}
helper(rep("***", 2), c("\\textbf{\\emph{", "}}"), x)
Error in gsub(paste0(ins[1], ".+?", ins[2]), paste0(outs[1], ".+?", outs[2]), :
invalid regular expression '***.+?***', reason 'Invalid use of repetition operators'
我有this toy Ananda Mahto帮助我制作它是否有用。您可以通过wheresPandoc <- reports:::wheresPandoc
编辑 Per Ben的评论我尝试过:
action <- paste0(" echo ", x, " | ", wheresPandoc(), " -t latex ")
system(action)
*note: I *like* chocolate **milk** too ***much***! | C:\PROGRA~2\Pandoc\bin\pandoc.exe -t latex
EDIT2 根据Dason的评论,我试过了:
out <- paste("echo", shQuote(x), "|", wheresPandoc(), " -t latex"); system(out)
system(out, intern = T)
> system(out, intern = T)
\*note: I *like* chocolate **milk** too ***much***! | C:\PROGRA~2\Pandoc\bin\pandoc.exe -t latex
答案 0 :(得分:4)
Windows上缺少管道使得这很棘手,但您可以使用input
来解决这个问题,以提供stdin
:
> x = system("pandoc -t latex", intern=TRUE, input="\\*note: I *like* chocolate **milk** too ***much***!")
> x
[1] "*note: I \\emph{like} chocolate \\textbf{milk} too \\textbf{\\emph{much}}!"
答案 1 :(得分:3)
注意到我正在使用Windows ?system
这意味着无法使用重定向,管道,DOS内部命令......
以及来自?system2
的说明
注意
system2是一个比系统更便携,更灵活的界面, 在R 2.12.0中介绍。它允许重定向输出 需要在Windows上调用shell,这是一种可移植的设置方式 用于执行命令的环境变量,以及更精细的控制 通过重定向stdout和stderr。相反,系统(和 Windows上的shell)允许调用任意命令行。 使用
system2
system2('pandoc', '-t latex', input = '**em**', stdout = TRUE)