knitr的kframe在LaTex中产生错误,代码块没有阴影颜色

时间:2014-06-27 18:49:38

标签: r latex knitr

我正在使用R的knitr和LaTeX创建一个pdf。技术中心为构建输出错误提供“!未定义的控制序列”。技术中心表示带有\ begin {kframe}和\ end {kframe}的行是有问题的行。

删除kframe环境可解决Build Output中的错误,但即使删除kframe环境,文档也不会为代码块显示shadecolor。

我更新了我的MikTex包和knitr。该文件的序言包括\ usepackage {framed}; \ usepackage {xcolor}似乎没有影响问题。更改knitr背景选项无法解决问题。

这是我的文档在Rnw文件中的序言(knitr添加到此):

\documentclass{article}
\usepackage{Sweave}
\usepackage{amsmath}
\usepackage{hyperref}
\usepackage[margin = 0.5in]{geometry}
\usepackage{amsfonts}
\usepackage{amsthm}
\usepackage{marvosym}
\usepackage{paralist}
\usepackage{framed}
\usepackage{url}
\usepackage{xcolor}
\usepackage{array}

\renewcommand\qedsymbol{\Squarepipe}

\title{title changed for question}
\author{author changed for question}

\newtheorem{theorem}{Theorem}[section]
\newtheorem{lemma}[theorem]{Lemma}
\newtheorem{proposition}[theorem]{Proposition}
\newtheorem{corollary}[theorem]{Corollary}

\newenvironment{definition}[1][Definition]{\begin{trivlist}
    \item[\hskip \labelsep {\bfseries #1}]}{\end{trivlist}}
\newenvironment{conjecture}[1][Conjecture]{\begin{trivlist}
\item[\hskip \labelsep {\bfseries #1}]}{\end{trivlist}}
\begin{document}

谢谢!

1 个答案:

答案 0 :(得分:0)

kframe 环境应该在你的 Latex 序言中定义。例如,它在 help(knit) 中可见的示例中定义

 library(knitr)
 (f = system.file("examples", "knitr-minimal.Rnw", package = "knitr"))
 knit(f)  # compile to tex

查看生成的文档 knitr-minimal.tex 可以看到 kframe 环境的定义:

\usepackage{framed}
\makeatletter
\newenvironment{kframe}{%
 \def\at@end@of@kframe{}%
 \ifinner\ifhmode%
  \def\at@end@of@kframe{\end{minipage}}%
  \begin{minipage}{\columnwidth}%
 \fi\fi%
 \def\FrameCommand##1{\hskip\@totalleftmargin \hskip-\fboxsep
 \colorbox{shadecolor}{##1}\hskip-\fboxsep
     % There is no \\@totalrightmargin, so:
     \hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth}%
 \MakeFramed {\advance\hsize-\width
   \@totalleftmargin\z@ \linewidth\hsize
   \@setminipage}}%
 {\par\unskip\endMakeFramed%
 \at@end@of@kframe}
\makeatother

将此添加到您的乳胶序言中可能会解决问题。当您从 knitr 生成完整的 pdf 文档时,这当然会得到处理。只有当您使用 knitr 生成 Latex 片段时才会出现问题,然后在较大的 Latex 文档中重复使用。