2017-01-30 8 views
1

"test_sample()"という名前の関数をインラインRコードとしてLaTeX + knitrドキュメントに挿入したいと思います。下線付きのインラインコード

単に\Sexpr{'test_sample()'}の結果をMissing $というエラーに含めます。

私は次のように直接関連する質問が見つかりました: Pass underscore as inline code to knitR

をしかし、すでに答えにコードをコピーすることは私のためにそこに動作しません:

In hilight(code, "latex", ...) : 
    the syntax of the source code is invalid; the fallback mode is used 

やLaTeXで:私はRの警告メッセージが表示されますまだMissing $エラーです。

Iは

<<>>= 
test_ = function(x){gsub("([_])", '\\\\\\_', "test_x")} 
@ 
\Sexpr{test_(sample)} 

ことによってそれを採用しようとしたが、同じエラー(S)でこのstilll結果。

knitrで作成されたtexファイルのの手前に\という文字を置いた場合、正しく動作しますが、これを自動的に行う方法はわかりません。

私はこの質問から解決策を、コピー&ペーストするとき、私も同じエラーが出ます:R, Sweave, LaTeX - escape variables to be printed in LaTeX?

<<echo=FALSE>>= 
sanitize <- function(str) { 
    result <- str 
    result <- gsub("&", "\\\\&", result, fixed = TRUE) 
    result <- gsub("_", "\\\\_", result, fixed = TRUE) 
    result 
} 
@ 

<<>>= 
(foo <- "test & _") 
sanitize(foo) 
@ 

When sanitized, it's ``\Sexpr{sanitize(foo)}''. 

私が間違って何をしているのですか?

+0

カッコを中括弧で置き換えてみましたか? \ Sexpr {'test_sample()'}また、アンダースコアの前にエスケープ文字が必要な場合があります。 \ _ – lawyeR

+0

はい、私もそれを試しましたが、結果として 'Missing $'エラーが発生します。もし私が手動で '\'のようなエスケープ文字をknitrによって生成されたtexファイルに置くと、それは動作しますが、自動的に行う方法は分かりません。私はちょうどそれをRコードに置くだけで、これはRの構文エラーにつながり、コードはコンパイルできません – user3825755

+0

"test \\ _ sample()" - 2つのバックスラッシュで試したところ - – lawyeR

答えて

1

これは本当にknitrまたはRとは関係ありません。LaTeXにアンダースコアを挿入することです。これを行う最も簡単な方法は、\verbコマンドに入力することです。 knitr実行後

When sanitized, it's ``\verb!\Sexpr{sanitize(foo)}!''. 

、これは

When sanitized, it's ``\verb!test \\& \\_!''. 

になってますし、それはあなたがあなたの場合\verbラッパーを追加するsanitize()機能を変更することができ enter image description here

つまり、あなたはおそらく何をしたい表示欲しいです。 "After"行を生成するもの。

編集に追加する:

をあなたが本当にコードハイライト表示を維持したい場合は、あなたは\verbがすべてではありませんが、何のいくつかを行うマクロを作成するにはhttps://tex.stackexchange.com/questions/70652/alltt-packages-alltt-makes-a-newlineような何かをする必要があります。これには、 sanitize関数も変更する必要があります。

+0

元の質問に貼り付けたコードは、' hilight(コード、 "latex"、...) : ソースコードの構文が無効です。 '' '\ verb!test \ textbackslash {} \ textbackslash {}&\ textbackslash {} \ textbackslash {} _! '''のように、代わりにLaTeXで使用します。ちょうど明確にするために、knitrで処理した後にtexファイルに出力したいのは '\ hlkwd {test \ _sample}()' – user3825755

+0

です。それは私には起こりません。完全な.Rnwファイルを投稿できますか?これは 'hilight()'関数のバグかもしれません。それはどんなパッケージですか? – user2554330

+0

誤った数のエスケープを使用すると、そのようなエラーを再現できます。 ''\\\\\ _''は合法的な構文ではないのでエラーを返します。バックスラッシュは偶数必要です。 – user2554330

関連する問題