当作为字符串从 R 块传递到 knitr 时转义 % 符号

当作为字符串从 R 块传递到 knitr 时转义 % 符号

我无法使以下操作正常工作:

\begin{minipage}
<<percentile, echo=FALSE>>=
your_rank <- percentile  ## calculated earlier
rank_message <- ifelse(is.na(score), '   ', paste0("You are in the top ", your_rank, "% of participants."))
@
\begin{center} 
\fbox{
\parbox{15cm}{\centering
\textbf{\Sexpr{rank_message}} \\
} % End parbox
} % End fbox
\end{center}  
\end{minipage}

我收到错误:

File ended when scanning use of \fbox

然后,如果我把ie放在\前面%

paste0("You are in the top ", your_rank, "\% of participants.")

然后 R 部分给了我一个错误:

Error in eval(parse_only(code), envir = envir) :

我怎样才能解决这个问题?

更新 - 将 R 块放入组中不起作用。这是一个有效示例 - 删除了百分比符号:

\documentclass[a4paper]{article}
\usepackage{fullpage}
\usepackage{pdflscape}  % landscape format
\begin{document}
\begin{landscape}
\begin{minipage}[t][5cm]{0.6\linewidth} 
\begingroup\catcode`\%=12
<<percentile, echo=FALSE>>=
score <- 10
your_rank <- 30
rank_message <- ifelse(is.na(score), '   ', paste0("You are in the top ", your_rank, " of participants"))
@
\endgroup
\begin{center} 
\fbox{
\parbox{15cm}{\centering
\textbf{\Sexpr{rank_message}} \\
} % End parbox
} % End fbox
\end{center}  
\end{minipage}
\end{landscape}
\end{document}

更新:罗斯的评论起了作用。谢谢罗斯。

答案1

引用谢玉海的书《使用 R 和 knitr 的动态文档》(2015 年第 2 版第 1 页):

动态文档背后的基本思想源自文学编程,这是由 Donald Knuth (Knuth, 1984) 构想的一种编程范式。最初的想法主要用于编写软件:将源代码和文档混合在一起;我们可以提取源代码(称为 tangle),也可以执行代码以获取编译结果(称为 weave)。动态文档与计算机程序并没有完全不同:对于动态文档,我们需要运行软件包将我们的想法(通常以源代码的形式实现)编译为数字或图形输出,并将输出插入到我们的文字写作中(如文档)。

这个问题是问,当 R 代码中的一行包含 % 符号时,如何将我的 R 代码的输出编织到我的 LaTeX 文档中?

此代码需要在编辑器 RStudio 中运行,该编辑器提供编译代码的功能。编译的结果是将 R 代码及其输出编织到 LaTeX 文档中。

<<>>=R 代码在和之间分隔@。OP 问题的解决方案是 % 必须转义两次,即 \\%。第一个反斜杠保留第二个反斜杠,后者需要写入编译生成的 TeX 文件中。因此,在编译时,R 字符串:

paste0("You are in the top ", your_rank, "\\% of participants"))

将会把以下字符串写入 TeX 文件:

You are in the top 30\% of participants

pdfLaTeX当 TeX 文件由或编译时XeLaTeX,它可以正确编译。

这是完整的代码:

\documentclass[a4paper]{article}
%\usepackage{fullpage}
\usepackage{pdflscape}  % landscape format
\usepackage[utf8]{inputenc}
\pagestyle{empty}
\begin{document}
\begin{landscape}
\begin{minipage}[t][5cm]{0.6\linewidth} 
%\begingroup\catcode`\%=12
<<percentile, echo=FALSE>>=
  score <- 10
  your_rank <- 30
  rank_message <- ifelse(is.na(score), '   ', paste0("You are in the top ", your_rank, "\\% of participants"))
  @
%    \endgroup
  \begin{center} 
  \fbox{
    \parbox{15cm}{\centering
      \textbf{\Sexpr{rank_message}} \\
    } % End parbox
  } % End fbox
  \end{center}  
  \end{minipage}
  \end{landscape}
  \end{document}

这是输出:

在此处输入图片描述

相关内容