2017-01-30 38 views
1

我想在LaTeX + knitr文檔中將名爲「test_sample()」的函數作爲內聯R代碼插入。在knitr中帶下劃線的內聯代碼

只包括\Sexpr{'test_sample()'}導致Missing $錯誤。

我發現下面直接相關的問題: Pass underscore as inline code to knitR

但已經拷貝在回答有沒有爲我工作的代碼:我得到的R警告消息:

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

,以及爲LaTeX仍然是一個Missing $錯誤。

我試圖通過在相同的誤差(或多個)

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

但這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()」 - 兩個反斜槓 - 和它的工作 – lawyeR

回答

1

這與knitr或R沒有任何關係,只是在LaTeX中插入下劃線。最簡單的方法是將其放入\verb命令中,例如

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

knitr運行後,這個被變成

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

,並顯示您可能想要的東西,即 enter image description here

你可以改變sanitize()功能,如果您添加\verb包裝想。任何產生「後」行的東西。

編輯補充:

如果你真的想保持代碼高亮,你需要做的是這樣https://tex.stackexchange.com/questions/70652/alltt-packages-alltt-makes-a-newline創建一個宏,做一些什麼呢\verb,但不是全部。這也將需要更改您的清潔功能。

+0

我在原始問題中粘貼的代碼導致R警告'在hilight(代碼,「latex」,...) : 源代碼的語法無效;而是在LaTeX中使用後備模式 ',而不是所需的輸出,但使用''\ verb!test \ textbackslash {} \ textbackslash {}和\ textbackslash {} \ textbackslash {} _!'''。爲了清楚起見,在使用knitr處理tex文件後,我想要的輸出是'\ hlkwd {test \ _sample}()' – user3825755

+0

這很奇怪;它不會發生在我身上。你能發佈一個完整的.Rnw文件嗎?這可能是'hilight()'函數中的一個錯誤;那是什麼包? – user2554330

+0

如果我使用了錯誤的轉義數,例如,我可以重現這樣的錯誤。 ''\\\\ _ _''給出錯誤,因爲它不是合法的語法。你需要偶數個反斜槓。 – user2554330