【问题标题】:replace $ with \$; knitr chunk options: echo=TRUE, results='markup;$=\\$'将 $ 替换为 \$; knitr 块选项:echo=TRUE, results='markup;$=\\$'
【发布时间】:2014-02-27 06:33:15
【问题描述】:

我正在尝试使用 knitr 在 Latex 文档中打印 R 代码。

我有以下简单的代码:

  \begin{frame}{Plot Code}
  <<plotcode,eval=FALSE,echo=TRUE,results='markup;$=\\$'>>=

... 来自随机抽取数据的简单 lm ...

  yhat.fit <- yhat$fit[,"fit"]

...更简单的代码...

 \end{frame}

这将运行,但是没有替换 $ 符号。相反,我得到数学模式 幻灯片中的 fit[,"fit"] (以及 pdflatex 编译中的“缺少 $ 插入”错误。

我宁愿没有数学模式;相反,我希望看到 $ 符号,因为它是 R 代码不可或缺的一部分。

作为我的解决方法,我在生成的.tex 文件中将$ 替换为\$,但我希望有人能解决我看似简单的问题。我想我没有在选项中正确指定标记和字符结构,但是我尝试了很多变体但没有成功。

【问题讨论】:

    标签: r knitr pdflatex


    【解决方案1】:

    我不明白results='markup;$=\\$' 的真正含义。 results option 不采用这样的值;目前,它只接受markupasishidehold

    我也看不出$ 在投影仪中是如何成为问题的。您可能忘记了fragile 选项。一个最小的例子:

    \documentclass{beamer}
    \begin{document}
    \title{A Minimal Demo of knitr}
    \author{Yihui Xie}
    
    \maketitle
    
    % very important to use option [fragile] for frames containing code output!
    
    \begin{frame}[fragile]
    
    You can test if \textbf{knitr} works with this minimal demo. OK, let's
    get started with some boring random numbers:
    
    <<boring-chunk>>=
    fit = lm(dist ~ speed, data = cars)
    fit$coefficients
    print(sessionInfo(), locale = FALSE)
    @
    
    \end{frame}
    
    \end{document}
    

    输出:

    【讨论】:

    • 我想我明白了:如果你使用results = 'asis',例如要显示一个漂亮的表格,那么该特定块(R 代码等)的其余输出中的任何尾随 $ 符号都会导致 LaTeX 阻塞。建议是添加一个可选的后处理过滤器,以便在 LaTeX 处理之前使用自定义规则对输出进行清理。我认为这不是一个好的语法,也许一个新参数 sanitise = list("$") 会很有用。
    • @baptiste 我明白了,但 OP 似乎没有使用 results = 'asis'。值'markup;$=\\$' 将被视为'markup',所以我不知道美元符号如何从逐字环境中逃脱。
    • 在 frame 命令中使用 [fragile] 可以解决问题,但我不确定如何试用 sanitise=list($)。我想这可以追溯到 xtable 环境中可能使用的东西?
    • 我不明白您为什么需要像 sanitise=list($) 这样的选项。正如我所说,输出是在逐字环境中,那为什么还要转义特殊字符呢?
    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    相关资源
    最近更新 更多