过去 2 天我一直在搜索,虽然我在 Stack Overflow 和 Google 上的其他讨论中发现了类似的问题,但没有找到符合我要求的内容。
我有一个我支持的预先存在的应用程序,它是围绕 R 构建的。Sweave Rnw 模板文件用于生成 .tex 文件,这些文件用于生成 .pdf 文件。
在 Rnw 中,存在如下代码:
\begin{tabular}{lll}
& {\bf \textcolor{TitlesColor}{Report name:}} & \Sexpr{print(myReport$report_name)}\\
& {\bf \textcolor{TitlesColor}{Report date:}} & \today \\
& {\bf \textcolor{TitlesColor}{Course name:}} & \Sexpr{print(myReport$courseInfo$shortname)}\\
& {\bf \textcolor{TitlesColor}{Start date:}} & \Sexpr{print(myReport$courseInfo$startdate_readable)}\\
& {\bf \textcolor{TitlesColor}{Instructor:}} & \Sexpr{print(paste(myReport$instructor$lastname, collapse="| "))}\\
\end{tabular}
问题是,myReport$courseInfo$shortname 具有需要为 LaTeX 转义的值,因为它包含诸如 & 之类的字符(这会强制 LaTeX 抛出有关表格列的错误)。我尝试包含 seqinr 库,并在整个数据对象上使用 stresc,但生成的 .tex 文件仍然显示一个不带斜线的 & from shortname。
我还不是完全熟悉 R,但是在使用模板时,我发现甚至不需要对上面的“print()”的调用,因为只需在 \Sexpr 中直接指定变量就会产生打印值,但是当记录在 .tex 中时,我的转义值仍然是未转义的。
我还尝试将 stresc 直接放在 \Sexpr 中(而不是打印),没有区别。
所以看起来 R/Sweave 自己的过程正在剥离斜线,这意味着我可能需要双斜线值,但我对 R 不够熟悉,不知道如何做到这一点。
将动态数据打印到 .tex 文件中的正确方法是什么?
更新:根据@Aaron 的回复,这是我创建的函数:
# Sanitizes variables for displaying within LaTeX via Sexpr
# Adds slashes to LaTeX special characters, which results in single-slash in tex output
sanitizeLatexS <- function(str) {
gsub('([#$%&~_\\^\\\\{}])', '\\\\\\\\\\1', str, perl = TRUE);
}
我更新的模板(在我上面的原始帖子中引用)现在看起来像这样:
\begin{tabular}{lll}
& {\bf \textcolor{TitlesColor}{Report name:}} & \Sexpr{sanitizeLatexS(myReport$report_name)}\\
& {\bf \textcolor{TitlesColor}{Report date:}} & \today \\
& {\bf \textcolor{TitlesColor}{Course name:}} & \Sexpr{sanitizeLatexS(myReport$courseInfo$shortname)}\\
& {\bf \textcolor{TitlesColor}{Start date:}} & \Sexpr{sanitizeLatexS(myReport$courseInfo$startdate_readable)}\\
& {\bf \textcolor{TitlesColor}{Instructor(s):}} & \Sexpr{sanitizeLatexS(paste(myReport$instructorList$lastname, collapse="| "))}\\
\end{tabular}
因此,带有 & 的字符串现在正确显示在生成的 LaTeX 文件中:
一些字符串 \& 一些其他字符串