我正在使用 R 中的 knitr 在 LaTex 中编写文档。在某段代码下面,我想引用我在 R 中使用的变量。
<<chunk>>
var <- "ENSEMBL_MART_ENSEMBL"
@
In this chunk, we use the following parameters:
\begin{itemize}
\item first blah blah
\item parameter: \Sexpr{var}
\end{itemize}
当我尝试编译时,我不断收到错误:
"Missing $ inserted"
"LaTex Error: Command \item invalid in math mode"
"LaTeX Error: Something's wrong--perhaps a missing \item."
我认为事实上我有一些“变量名中含有“:我以前也遇到过这个问题(虽然不是在使用 \Sexpr{} 时)。我做了一些测试,确实,如果变量中没有“",我没有收到错误。
由于各种原因,我无法重命名变量:必须这样命名才能使代码正常工作。所以我的问题是:如何让 LaTex 理解它,而不认为我进入了数学模式?
谢谢
答案1
逐字打印是一种方法,但是如果您不想要电传打字机字体,而是想要默认字体,该怎么办?
在 LaTeX 中,“ _
” 是一个活动字符,如%
或$
,因此,除了逐字模式外,您应该使用\_
来查看打印的低线字符(UTF8 中的 U+005F)。
要将字符串从 R 传递到 LaTeX,您还必须转义任何反斜杠字符,因此 R 应该在纯 LaTeX 中生成\\_
。_
您可以用这种方式编写 R 字符串,或者使用清理函数。示例:
\documentclass{article}
\begin{document}
<<chunk>>=
var <- "ENSEMBL_MART_ENSEMBL"
var
svar <- xtable::sanitize(var,type="latex")
svar
@
\begin{itemize}
\item parameter: \verb|\Sexpr{var}|
\item parameter: \Sexpr{svar}
\end{itemize}
\end{document}
但是另外,您也可以使用没有活动 LaTeX 字符的变量名(可能ENSEMBL.MART.ENSEMBL
是 EsemblMartEnsembl 或...):)
答案2
好的,我已经解决了:如果你使用 \verb,它可以起作用:
<<chunk>>
var <- "ENSEMBL_MART_ENSEMBL"
@
In this chunk, we use the following parameters:
\begin{itemize}
\item first blah blah
\item parameter: \verb!\Sexpr{var}!
\end{itemize}