如何使用 \sexpr{} 和其中包含“_”的变量(即避免“数学模式”错误)

如何使用 \sexpr{} 和其中包含“_”的变量(即避免“数学模式”错误)

我正在使用 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}  

相关内容