Rstudio pdf knit失败,出现“Environment Shaded undefined”错误

时间:2016-12-09 03:35:33

标签: r rstudio r-markdown pdflatex

尝试使用包rticles output: rticles::acm_article中的模板编织PDF时出现以下错误:

! LaTeX Error: Environment Shaded undefined.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.76 \begin{Shaded}

只有在输出文档中包含代码块时才会出现这种情况。

可重复的示例

您需要使用New Document -> From Template -> Association for Computing Machinery开始新的R Markdown文档。这是R Markdown文件:

---
title: Short Paper
author:
  - name: I Am Me
    email: me@email.com
    affiliation: Fictional University
abstract: |
  This is the abstract.
  It consists of two paragraphs.
output: 
  rticles::acm_article:
    keep_tex: true
---


## Simple test

Code chuck follows:

```{r}
plot(rnorm(10))
```

但是,如果我在标题中设置echo=FALSE,则上述示例有效。你不会在输出中得到代码,但对于学术论文,你可能不需要它,如果你这样做,你可以用不同的方式显示它。

注意:

  • R版本3.3.1(2016-06-21)
  • 平台:x86_64-pc-linux-gnu(64位),
  • 运行Ubuntu 16:10
  • 我确保我安装了texlive-latex-base,texlive-latex-recommended和texlive-latex-extra软件包,但仍然没有运气
  • 我也尝试从中间.tex文件生成pdf,如建议的here,但我得到了同样的错误。
  • 我考虑this approach,但它没有用,我仍然有错误(也许我需要调整才能在我的上下文中工作,但不确定如何)

5 个答案:

答案 0 :(得分:10)

所以,这里的问题是rticles模板有时会省略pandoc注入代码突出显示环境的方法,例如: Shaded。要解决这个问题,您必须插入template.tex序言:

$if(highlighting-macros)$
$highlighting-macros$
$endif$

答案 1 :(得分:2)

我找到了一个解决方法。如果我使用chunk选项echo = FALSE隐藏代码,则会生成一个没有问题的PDF。

可重复示例1:

title: Short Paper
author:
  - name: I Am Me
    email: me@email.com
    affiliation: Fictional University
abstract: |
  This is the abstract.

  It consists of two paragraphs.
bibliography: sigproc.bib
output: 
  rticles::acm_article:
    keep_tex: true
---


## Simple test

Code chuck follows:

```{r}
plot(rnorm(10))
```

针对PDF的编织因! LaTeX Error: Environment Shaded undefined.

而失败

示例2:

---
title: Short Paper
author:
  - name: I Am Me
    email: me@email.com
    affiliation: Fictional University
abstract: |
  This is the abstract.

  It consists of two paragraphs.
bibliography: sigproc.bib
output: 
  rticles::acm_article:
    keep_tex: true
---


## Simple test

Code chuck follows:

```{r echo=FALSE}
plot(rnorm(10))
```

针对PDF的作品!

两个示例之间的唯一区别是将echo=FALSE添加到代码块标头中。你不会在输出中获得代码,但对于学术论文,你可能不需要它,如果你这样做,你可以用不同的方式显示它。

答案 2 :(得分:2)

我知道这个帖子已经过时了,但是我会把它放在这里供其他有相同问题的人参考。

原因是在乳胶模板中,Shaded的环境正在尝试重新定义。但是,如果您在pdf中使用R块,则仅存在环境。因此,如果您在pdf中没有任何r块,它会尝试重新定义从未定义的内容 - 导致错误。

解决方案是修改乳胶模板中的\ renewenvironment {Shaded}命令。

https://github.com/yihui/bookdown-chinese/commit/a3e392593b464ba31a7eceb0cd60f7e0bd112798

答案 3 :(得分:2)

我一直在努力解决错误,并提出了another question,经过相当多的实验并搜索了其他相关问题/答案后,我才能够回答。

简而言之,只要您知道template.tex文件的位置,上述无涂层工作提供的解决方案就是完美的。显然,在遇到related question的标题以及如何嵌入(丢失)LATEX之前,我一直在处理错误的文件。

更长的答案可以在my "another question"中找到。供参考的主要步骤如下:

  1. 在R包rticles库中找到template.tex文件。如果您不知道软件包库在哪里,请在RStudio控制台中使用.libPaths()。然后,按您的方式操作到模板模板的资源子文件夹。就我而言: R-3.5.0/library/rticles/rmarkdown/templates/ieee_article/resources

  2. template.tex的序言中添加了以上由无涂层提出的解决方案。前言是\begin{document}行之前的任何内容:

    $if(highlighting-macros)$ $highlighting-macros$ $endif$

  3. 保存template.tex,然后返回R / RStudio并单击“编织”按钮。如果您不使用echo = FALSE禁止打印R代码块,则现在可以很好地显示它们。

答案 4 :(得分:0)

文章模板通常不允许直接添加代码阴影。结果是, 不包括用于控制阴影的必需$highlighting-macros$

如果出于任何原因,您不能(或不想)按照template.tex的建议直接编辑@coatless文件,则可以考虑将代码直接包含在acm_proc_article-sp.cls中文件:

\usepackage{color}
\usepackage{fancyvrb}
\newcommand{\VerbBar}{|}
\newcommand{\VERB}{\Verb[commandchars=\\\{\}]}
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
% Add ',fontsize=\small' for more characters per line
\usepackage{framed}
\definecolor{shadecolor}{RGB}{248,248,248}
\newenvironment{Shaded}{\begin{snugshade}}{\end{snugshade}}
\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.13,0.29,0.53}{\textbf{#1}}}
\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.13,0.29,0.53}{#1}}
\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.00,0.00,0.81}{#1}}
\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.00,0.00,0.81}{#1}}
\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.00,0.00,0.81}{#1}}
\newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.00,0.00,0.00}{#1}}
\newcommand{\CharTok}[1]{\textcolor[rgb]{0.31,0.60,0.02}{#1}}
\newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.00,0.00,0.00}{#1}}
\newcommand{\StringTok}[1]{\textcolor[rgb]{0.31,0.60,0.02}{#1}}
\newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.31,0.60,0.02}{#1}}
\newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.31,0.60,0.02}{#1}}
\newcommand{\ImportTok}[1]{#1}
\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textit{#1}}}
\newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}}
\newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}}
\newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}}
\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{#1}}
\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.00,0.00,0.00}{#1}}
\newcommand{\VariableTok}[1]{\textcolor[rgb]{0.00,0.00,0.00}{#1}}
\newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.13,0.29,0.53}{\textbf{#1}}}
\newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.81,0.36,0.00}{\textbf{#1}}}
\newcommand{\BuiltInTok}[1]{#1}
\newcommand{\ExtensionTok}[1]{#1}
\newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textit{#1}}}
\newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.77,0.63,0.00}{#1}}
\newcommand{\RegionMarkerTok}[1]{#1}
\newcommand{\InformationTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}}
\newcommand{\WarningTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}}
\newcommand{\AlertTok}[1]{\textcolor[rgb]{0.94,0.16,0.16}{#1}}
\newcommand{\ErrorTok}[1]{\textcolor[rgb]{0.64,0.00,0.00}{\textbf{#1}}}
\newcommand{\NormalTok}[1]{#1}

enter image description here

  

您可能还希望看到我对similar question的回答,从而将相同的代码放入与项目相同目录中的header.tex文件中。