【问题标题】:knitr: code in chunks gets wrapped unexpectedlyknitr:块中的代码被意外包装
【发布时间】:2016-05-20 03:40:03
【问题描述】:

在使用 knit2pdf() 和 LaTeX 的投影仪演示中,我有时 发现块中的代码被包装了,即使我已经设置了 tidy=FALSE 全球。比如这个块:

\item Fit this using \func{glm}:
<<berk-logit2, size='footnotesize'>>=
berkeley <- as.data.frame(UCBAdmissions)
berk.logit2 <- glm(Admit == "Admitted" ~ Dept + Gender,
                   data = berkeley, weights = Freq, family = "binomial")
@

如下所示:

请注意,所有三行都被换行,就像在段落模式中一样。代码块中的缩进行使用空格,而不是制表符。

当我查看生成的 .tex 文件时,没有什么奇怪的,那就是给 alltt 的行看起来不错。

\item Fit this using \func{glm}:
\begin{knitrout}\footnotesize
\definecolor{shadecolor}{rgb}{1, 0.961, 0.933}\color{fgcolor}\begin{kframe}
\begin{alltt}
\hlstd{berkeley} \hlkwb{<-} \hlkwd{as.data.frame}\hlstd{(UCBAdmissions)}
    \hlstd{berk.logit2} \hlkwb{<-} \hlkwd{glm}\hlstd{(Admit} \hlopt{==} \hlstr{"Admitted"} \hlopt{~} \hlstd{Dept} \hlopt{+} \hlstd{Gender,}
                       \hlkwc{data} \hlstd{= berkeley,} \hlkwc{weights} \hlstd{= Freq,} \hlkwc{family} \hlstd{=} \hlstr{"binomial"}\hlstd{)}
\end{alltt}
\end{kframe}
\end{knitrout}

大多数其他块产生格式正确的输出。例如,

<<mice-tab, size='footnotesize' >>=
data(Mice, package="vcdExtra")
mice.tab <- xtabs(Freq ~ litter + treatment + deaths, data=Mice)
ftable(litter + treatment ~ deaths, data=mice.tab)
@

给出:

这可能是什么原因造成的?我的设置很复杂,所以我没有 MWE,但如果我知道要寻找什么会很有帮助。

【问题讨论】:

    标签: r formatting latex knitr beamer


    【解决方案1】:

    您可能在幻灯片上使用fragile 框架选项,其中环绕按预期工作。

    设置\begin{frame}[fragile] 会产生您为mice-tab 块显示的正确结果:

    \documentclass{beamer}
    \begin{document}
    
    <<echo = FALSE>>=
    library(knitr)
    opts_chunk$set(size = "footnotesize",
                  eval = FALSE,
                  tidy = FALSE)
    @
    
    \begin{frame}[fragile]
    With fragile:
    <<berk-logit2-fragile>>=
      berkeley <- as.data.frame(UCBAdmissions)
      berk.logit2 <- glm(Admit == "Admitted" ~ Dept + Gender,
                         data = berkeley, weights = Freq,
                         family = "binomial")
    @
    
    <<mice-tab-fragile>>=
    data(Mice, package="vcdExtra")
    mice.tab <- xtabs(Freq ~ litter + treatment + deaths, data=Mice)
    ftable(litter + treatment ~ deaths, data=mice.tab)
    @
    \end{frame}
    
    \begin{frame}
    Not fragile:
    <<berk-logit2>>=
      berkeley <- as.data.frame(UCBAdmissions)
      berk.logit2 <- glm(Admit == "Admitted" ~ Dept + Gender,
                         data = berkeley, weights = Freq,
                         family = "binomial")
    @
    
    <<mice-tab>>=
    data(Mice, package="vcdExtra")
    mice.tab <- xtabs(Freq ~ litter + treatment + deaths, data=Mice)
    ftable(litter + treatment ~ deaths, data=mice.tab)
    @
    \end{frame}
    \end{document}
    

    【讨论】:

    • 就是这样!我习惯于使用带有代码的框架,但没有 [fragile] 会产生错误,我错过了这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2012-03-22
    相关资源
    最近更新 更多