Я искал последние 2 дня, и пока я нашел похожие вопросы о переполнении стека и других обсуждениях в 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 показывает нераскрытый и от имени.
Я еще не совсем знаком с R, но, играя с шаблоном, я обнаружил, что призывы к "print()" выше даже не нужны, так как просто указывать переменные непосредственно в результатах \Sexpr в печатных значениях, но все же мои экранированные значения не сохраняются при записи в .tex.
Я также попытался поместить stresc непосредственно в \Sexpr (вместо печати) без каких-либо различий.
Таким образом, кажется, что собственный процесс R/Sweave лишает косые черты, что означает, что мне, вероятно, нужны двойные сокращения, но я недостаточно знаком с R, чтобы знать, как это сделать.
Каков правильный способ печати динамических данных в файл .tex?
UPDATE: Основываясь на ответе @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 как:
Некоторая строка \& некоторая другая строка