\Sexpr 如果包含 LaTeX 命令,则无法解析和评估
\Sexpr cannot be parsed and evaluated if it includes LaTeX-commands
我正在使用 RStudio 和 knitr
创建 pdf。使用 \Sexpr()
我想包含内联代码,它接受一个向量并在其周围放置 \textbf{}
以使其变为粗体,但它不起作用。我在这里找到了一个解决方案:,但它需要事先创建一个额外的对象,我想做所有内联的事情,但后来我收到一个错误:
INCOMPLETE_STRING 1: asis_output(paste0("\textbf{", test,"
在\Sexpr()
中添加LaTeX命令似乎无法解析和评估,但我不知道为什么。
这里有一个简短的例子来说明我的问题:
% !Rnw weave = knitr
\documentclass{scrartcl}
\begin{document}
<<>>=
test <- c("testA", "testB", "testC")
boldtest <- paste0("\textbf{", test,"}", collapse = " and ")
@
\Sexpr{asis_output(boldtest)}\
%\Sexpr{asis_output(paste0("\textbf{", test,"}", collapse = " and "))}\ % not working
\end{document}
问题是 \Sexpr
被 knitr
解析为在第一次出现 }
时结束。我认为没有任何方法可以避免这种情况,因此您需要一种解决方法,例如将右大括号放入变量中。例如,
% !Rnw weave = knitr
\documentclass{scrartcl}
\begin{document}
<<>>=
test <- c("testA", "testB", "testC")
closebrace <- "}"
@
\Sexpr{asis_output(paste0("\textbf{", test, closebrace, collapse = " and "))}\
\end{document}
我觉得这种很丑,所以我建议定义一个新的 R 函数来处理乳胶,例如
% !Rnw weave = knitr
\documentclass{scrartcl}
\begin{document}
<<>>=
test <- c("testA", "testB", "testC")
textbf <- function(text)
paste0("\textbf{", text, "}")
@
\Sexpr{asis_output(paste0(textbf(test), collapse = " and "))}\
\end{document}
如果加粗不是您要插入的唯一 LaTeX,您可能需要一个更通用的函数,为其他操作单独定义:
LaTeXMacro <- function(text, macro)
paste0("\", macro, "{", text, "}")
textbf <- function(text)
LaTeXMacro(text, "textbf")
textit <- function(text)
LaTeXMacro(text, "textit")
我正在使用 RStudio 和 knitr
创建 pdf。使用 \Sexpr()
我想包含内联代码,它接受一个向量并在其周围放置 \textbf{}
以使其变为粗体,但它不起作用。我在这里找到了一个解决方案:
INCOMPLETE_STRING 1: asis_output(paste0("\textbf{", test,"
在\Sexpr()
中添加LaTeX命令似乎无法解析和评估,但我不知道为什么。
这里有一个简短的例子来说明我的问题:
% !Rnw weave = knitr
\documentclass{scrartcl}
\begin{document}
<<>>=
test <- c("testA", "testB", "testC")
boldtest <- paste0("\textbf{", test,"}", collapse = " and ")
@
\Sexpr{asis_output(boldtest)}\
%\Sexpr{asis_output(paste0("\textbf{", test,"}", collapse = " and "))}\ % not working
\end{document}
问题是 \Sexpr
被 knitr
解析为在第一次出现 }
时结束。我认为没有任何方法可以避免这种情况,因此您需要一种解决方法,例如将右大括号放入变量中。例如,
% !Rnw weave = knitr
\documentclass{scrartcl}
\begin{document}
<<>>=
test <- c("testA", "testB", "testC")
closebrace <- "}"
@
\Sexpr{asis_output(paste0("\textbf{", test, closebrace, collapse = " and "))}\
\end{document}
我觉得这种很丑,所以我建议定义一个新的 R 函数来处理乳胶,例如
% !Rnw weave = knitr
\documentclass{scrartcl}
\begin{document}
<<>>=
test <- c("testA", "testB", "testC")
textbf <- function(text)
paste0("\textbf{", text, "}")
@
\Sexpr{asis_output(paste0(textbf(test), collapse = " and "))}\
\end{document}
如果加粗不是您要插入的唯一 LaTeX,您可能需要一个更通用的函数,为其他操作单独定义:
LaTeXMacro <- function(text, macro)
paste0("\", macro, "{", text, "}")
textbf <- function(text)
LaTeXMacro(text, "textbf")
textit <- function(text)
LaTeXMacro(text, "textit")