4

私は R でドキュメントに取り組んでおり、knitr から pdflatex を使用しており、toLatexfrom memisc の拡張バージョンを使用しています。

ただし、カット間隔のあるテーブルを作成している場合、角かっこはサニタイズされず、[.

Knitr チャンク コードを入れてみsanitize=TRUEましたが、これは tikz でしか機能しません。

以前は、gsub を使用して R オブジェクト自体の文字列を置き換えていましたが、これはかなり洗練されていません。私が見逃しているmemiscまたはknitrのニュアンス、またはラテックスの特殊文字を簡単に処理できる別の関数/方法の方向に誰かが私を向けることができることを願っています.

library("memisc")
library("Hmisc")
example<-data.frame(cbind(x=1:100,y=1:100))
example$x<-cut2(example$x,m=20)
toLatex(example)

アップデート

SO を検索すると、 apply 関数を使用して latexTranslate を適用することに関する投稿が見つかりましたが、これには文字が必要なため、要素から文字へのクラス分けを解除する必要があります。

関数を識別する別のSO 投稿を見つけましたknitr:::escape_latexが、チャンクは翻訳する代わりにマークアップとして出力するか (results='asis' を使用)、コード ブロック内に R スタイル テーブルを生成します (results='markup' を使用)。親ドキュメントでフック関数として構成しようとしましたが、すべてのドキュメント コンテンツをマークアップとして出力する効果がありました。これは私にとってまったく新しい分野なので、おそらく間違って実装したのでしょう。

<<setup,include=FALSE>>=
hook_inline = knit_hooks$get('inline')
knit_hooks$set(inline = function(x) {
  if (is.character(x)) x = knitr:::escape_latex(x)
  hook_inline(x)
})
@
...
<<tab-example,echo=FALSE,cache=TRUE,results='asis',sanitize=TRUE,inline=TRUE>>=
library("Hmisc")
library("memisc")
    example<-data.frame(cbind(x=1:100,y=1:100))
    example$x<-cut2(example$x,m=20)
    toLatex(example)
@

@yihuiによると、これは間違った方法です

更新 2

パーセンテージなどをエスケープする gsub ラッパーを作成しましたが、 [ 記号は引き続きラテックスを数学モードにプッシュし、エラーを発生させます。

4

1 に答える 1

2

tex SE の人々の厚意により、改行 (\\) の直後の [ は、数学モードへのエントリと見なされます。{}の直前に出力に追加することで、この動作を防ぐのは非常に簡単[です。私の関数は次のようになります。

escapedLatex<-function (df = NULL) 
{
    require("memisc")
    gsub(gsub(x = toLatex(df, show.xvar = TRUE), pattern = "%", 
        replacement = "\\%", fixed = TRUE), pattern = "[", replacement = "{}[", 
        fixed = TRUE)
}

代替のよりエレガントなソリューションがあれば非常に嬉しく思います。数日間開いたままにします。

于 2013-07-21T18:17:11.863 に答える