4

マークダウンのイタリック体と太字をその場でラテックスバージョンに変換できるようにしたい(つまり、テキスト文字列にテキスト文字列を返す)。簡単だと思いました。間違い!(それはまだかもしれません)。一番下で試した敷居のビジネスとエラーを参照してください。

私が持っているもの(マークダウンのようにエスケープされている開始アスタリスクに注意してください):

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'

私はアナンダ・マトが助けてくれたこのおもちゃを持っています。レポートからアクセスできますwheresPandoc <- reports:::wheresPandoc

私が試したベンのコメントごとに編集:

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
4

2 に答える 2

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}}!"
于 2013-03-21T04:30:56.597 に答える
3

私はWindowsで作業していることに注意してください?system

これは、リダイレクト、パイプ、DOS 内部コマンドなどを使用できないことを意味します。

そしてからのメモ?system2

ノート

system2 は、R 2.12.0 で導入された system よりも移植性と柔軟性に優れたインターフェイスです。これにより、Windows でシェルを呼び出さなくても出力のリダイレクトが可能になり、コマンドを実行するための環境変数を設定するポータブルな方法が可能になり、stdout と stderr のリダイレクトをより細かく制御できます。逆に、システム (および Windows のシェル) では、任意のコマンド ラインを呼び出すことができます。使用するsystem2

system2('pandoc', '-t latex', input = '**em**', stdout = TRUE)
于 2013-03-21T04:35:10.630 に答える