我认识到Sweave和格式化文本存在很多问题。我读了很多问题和答案,但我仍然无法解决我的问题。
我想做的是使用一些文本创建变量,然后使用函数转换此文本(主要是转义下划线)并在\ Sexpr {}环境中使用它。
我创建了一个简短的测试脚本,但我无法让它工作:
sample_id <- 'CF_0123'
sample_id2 <- 'CF\\_0123'
sample_id4 <- 'CF\\\\_0123'
sample_id2b <- gsub('_','\\_',sample_id)
sample_id4b <- gsub('_','\\\\_',sample_id)
sample_id6b <- gsub('_','\\\\\\_',sample_id)
addBackslash <- function(x) {
return(gsub('_','\\\\_',x))
}
Sweave('SILAC.Rnw')
tools::texi2dvi('SILAC.tex', pdf = TRUE)
它仅适用于sample_id4和代码块。但是在代码块中它产生了我不想要的新行和其他标记。
有没有办法在R脚本中定义我的纯文本并以某种方式转换它,所以我的sweave文件使用R脚本中的文本和数据。
我的Sweave文件SILAC.Rnw
\documentclass{article}
\begin{document}
\SweaveOpts{concordance=TRUE}
\Sexpr{sample_id}
\Sexpr{sample_id2}
\Sexpr{sample_id4}
\Sexpr{sample_id2b}
\Sexpr{sample_id4b}
\Sexpr{sample_id6b}
\Sexpr{addBackslash(sample_id)}
\Sexpr{(cat(gsub('_','\\\\_',sample_id)))}
test
test2
<<forward, echo=FALSE>>=
cat(gsub('_','\\\\_',sample_id))
@
test3
\end{document}
生成的.tex文件
\documentclass{article}
\usepackage{Sweave}
\begin{document}
\input{SILAC-concordance}
CF_0123
CF_0123
CF\_0123
CF_0123
CF_0123
CF_0123
CF_0123
\Sexpr{(cat(gsub('_','\\\\_',sample_id)))}
test
test2
\begin{Schunk}
\begin{Soutput}
CF\_0123
\end{Soutput}
\end{Schunk}
test3
\end{document}
答案 0 :(得分:0)
您可以在块本身中包含文本和文本处理R代码,而不需要使用\Sexpr
。
可以通过适当的knitr
块选项comment=NA
,results=asis
和eval=TRUE
require(knitr)
Rnw文件:
另存为(knitr_newline.Rnw)
\documentclass{article}
\begin{document}
test
test2
<<chunk1,message=FALSE,eval=TRUE,results='asis',echo=FALSE,comment=NA>>=
sample_id <- 'CF_0123'
sample_id2 <- 'CF\\_0123'
sample_id4 <- 'CF\\\\_0123'
sample_id2b <- gsub('_','\\_',sample_id)
sample_id4b <- gsub('_','\\\\_',sample_id)
sample_id6b <- gsub('_','\\\\\\_',sample_id)
addBackslash <- function(x) {
return(gsub('_','\\\\_',x))
}
cat(gsub('_','\\\\_',sample_id))
@
test3
\end{document}
生成PDF:
knit2pdf('knitr_newline.Rnw')
<强>输出:强>
这是您正在寻找的输出,请告诉我们......