【问题标题】:Conditionally print text or show graph in beamer presentation在投影仪演示中有条件地打印文本或显示图形
【发布时间】:2023-03-30 15:03:02
【问题描述】:

我在实现 (beamer) 演示文稿时遇到了一些困难。一切正常,直到我包含一个检查特定条件并相应返回输出(图形 - 打印文本)的函数。没有该功能,它可以正常工作。那么如何绘制或打印输出呢?

\documentclass[10pt]{beamer}
\usepackage[T1]{fontenc}
\begin{document}

\begin{frame}{test}

<<echo=FALSE, fig.height = 4>>=

  dates <- seq(as.Date("2015-02-13"), as.Date("2015-02-22"), by = "days")
  b <- c(1,1,1,1,2,2,3,3,3,0)
  c <- c(20,30,26,20,30,40,5,10,4,0)
  d <- c(11,2233,12,2,22,13,23,23,100,0)
  df <- data.frame(dates,b,c,d)

  plot(df)

  test <- function(df) {
    if(sum(tail(df[2:ncol(df)], 1)) > 0) { # check only last date

      return(plot(df))

    } else {

      print("Have a nice day!")

    }

  }
 test(df)

@

\end{frame}

\end{document}

【问题讨论】:

  • 你为什么有fig.show='hold'
  • 我觉得是剧情安排的原因。但它对当前案例的结果没有任何影响

标签: r knitr sweave beamer


【解决方案1】:

knitr 将输出包装在verbatim 中,从问题中的 Rnw 产生的 TEX 可以看出:

\begin{frame}{test}

\begin{knitrout}
\definecolor{shadecolor}{rgb}{0.969, 0.969, 0.969}\color{fgcolor}\begin{kframe}
\begin{verbatim}
## [1] "Have a nice day!"
\end{verbatim}
\end{kframe}
\includegraphics[width=10cm,height=8cm]{figure/unnamed-chunk-2-1} 

\end{knitrout}

\end{frame}

但是:

直接使用 Sweave 或 knitr 和投影仪;唯一需要注意的是必须将fragile 选项添加到包含逐字代码的帧中。 [Source]

因此,框架需要fragile option

\begin{frame}[fragile]{test}

使用fragile 确保not to indent \end{frame}。 (这发生在我复制问题中的代码后......)

【讨论】:

  • 谢谢。很有帮助!
猜你喜欢
  • 2011-03-02
  • 1970-01-01
  • 2023-03-27
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
  • 2016-10-14
相关资源
最近更新 更多