将markdown斜体和粗体转换为乳胶

时间:2013-03-21 03:47:47

标签: windows r latex markdown

我希望能够将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

2 个答案:

答案 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)