Unable to make sense out of “Rstudio pdf knit fails with 'Environment Shaded undefined' error” [duplicate]

大兔子大兔子 提交于 2019-12-10 21:28:37

问题


I am creating a report using the rticles package and I get the following error when knitting an rticle IEEE paper which includes code-chunks:

output file: rticles_IEEE.knit.md ! LaTeX Error: Environment Shaded undefined.

I tried to understand how to fix the issue and played around with this question/answer. But I fail to see where to put the fix into the files created by knitting (e.g. mydoc.tex, IEEE_trans.cls).

Here is my minimal example:

---
title: Cool IEEE ArticleS
author:
  - name: Ray

abstract: |
   The abstract of my first IEEE paper with rmarkdown
output: rticles::ieee_article
---
Introduction
=============
This is the introduction. And here comes a cool code chunk.
```{r}
x <- seq(-3,3,0.1)
y <- x^3
plot(x,y)
```

Notes:

  • It was commented that this is a potential duplicate of another question. The problem with the answers given in that thread is that it does not explain where to make the changes.
  • I fail to understand the pointer to Yihui's fix. The aforementioned files, but also the knitted .tex does not come with labels of the form \makeatother or \makeatletter.

回答1:


The overall issue was that displaying a code chunk in the rticles IEEE paper throws an error pointing at the undefined Shaded environment.

The solution given in the older post works, if you add the following to the underlying LaTeX template.tex. My problem was that I tried to edit the tex or cls template in the working directory. The Eureka-moment came when I stumbled over the following (related) stackoverflow question.

For the rticles package, the template.tex is not located in your directory you work on the article R Markdown file. Instead, they are stored within the package library folder (i.e. the folder that .libPaths() uses). The file can be found in rmarkdown/templates/ and search for the rticles folder you are using (in my case: ieee_article). In the resources sub-folder you will find the target template.tex. Make a copy of it, for recovery purposes.

Open the template.tex and insert the following anywhere before the LATEX command line \begin{document} (note: aka the preamble of that template.tex file). For example, I inserted it just before the \begin{document} line:

% code to insert to fix environment Shaded undefined issue with
% showing code chunks in rticle IEEE template.
$if(highlighting-macros)$
$highlighting-macros$
$endif$

\begin{document}

Save the change and go back to R/RStudio and your IEEE paper R Markdown file and hit the knit button. R code chunks will now be displayed (if you want to).

I have not tested it thoroughly, but this recipe should work for all rticle templates missing an environment definition for showing r-code chunks (i.e. environment{Shaded})




回答2:


Rather than duplicating the template, you can put the required code for allowing the highlighting in a separate header.tex file. This is essentially what replaces $highlighting-macros$ when you include this in the template:

header.tex

\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}

Make a copy of this file in your directory and then refer to this header in the YAML:

---
title: Short Paper
output: 
  rticles::ieee_article:
    includes:
      in_header: header.tex
---

# Introduction

This is the introduction. And here comes a cool code chunk.
```{r}
x <- seq(-3,3,0.1)
y <- x^3
plot(x,y)
```

This approach should work for any template which includes the $header-includes$ tag in thetemplate.tex`



来源:https://stackoverflow.com/questions/51594999/unable-to-make-sense-out-of-rstudio-pdf-knit-fails-with-environment-shaded-und

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!