Search code examples
latexr-markdownbeamer

how to call a specific piece of code in .tex from RMarkdown?


I am creating a presentation in RMarkdown and I have the following piece of LaTeX code that generates a graph:

\begin{picturegraph}[>=triangle 45, font=\footnotesize]
\node[fill,rectangle,inner sep=0pt,minimum size=5pt,label={right:{S}}] (S) at (4,2.66) {};
\node[fill,circle,inner sep=0pt,minimum size=5pt,label={below:{X}}] (X) at (0,0) {};
\node[fill,circle,inner sep=0pt,minimum size=5pt,label={below:{Y}}] (Y) at (6,0) {};
\node[fill,circle,inner sep=0pt,minimum size=5pt,label={above:{Z}}] (Z) at (3,2) {};
\draw[->,shorten >= 1pt] (X)--(Y);
\draw[->,shorten >= 1pt] (Z)--(X);
\draw[->,shorten >= 1pt] (Z)--(Y);
\draw[->,shorten >= 1pt] (S)--(Z);
\draw[<->,dashed,shorten >= 1pt] (X) to[bend left=45] (Z);
\draw[<->,dashed,shorten >= 1pt] (X) to[bend left=30] (Y);
\end{picturegraph}

If I put this code in RMarkdown script in the section I want it to be, it does not work.

I thought I could put this code in the .tex file and then call this code back from the RMarkdown script. How can I do this while making sure it goes in that specific section I want?

Here is my RMarkdown script:

---
title: |
    | ##title**

author: |
        | name
        | email
        |
        
date: "`r format(Sys.time(), '%d %B %Y')`"

output:
  beamer_presentation:
    theme: Szeged
    slide_level: 2
    includes:
      in_header: header.tex

linkcolor: false
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```


# Outline

## Outline

1. Item 1
2. Item 2
3. Item 3

# Introduction

## First subsection

This is an example of a graph:

(I want to insert the graph here)


## Second subsection

Text

And my header.tex:

\definecolor{mycolorlightblue}{RGB}{103,153,200}
\definecolor{mycolordarkblue}{RGB}{0,70,127}
% remove 2nd section from header
\makeatletter
\beamer@theme@subsectionfalse
\makeatother
% change colour of lines
\setbeamercolor{separation line}{bg=mycolorlightblue}
% text title
\setbeamercolor{title}{fg=mycolordarkblue}
\setbeamercolor{frametitle}{fg=mycolordarkblue}
% text colour
\setbeamercolor{frametitle}{fg=mycolordarkblue}
% item colour
\setbeamercolor{structure}{fg=mycolordarkblue}
% no header or footer on first page
\thispagestyle{empty}
% remove title slides at beginning of sections
\AtBeginSection{}
% add page counter to the footer
\setbeamertemplate{footline}[frame number]
% logo of my university
\titlegraphic{%
  \begin{picture}(0,0)
    \put(155,0){\makebox(0,0)[rt]{\includegraphics[]{ALL-ICONS.png}}}
  \end{picture}}

Solution

  • Several problems:

    • replace picturegraph with tikzpicture
    • load missing tikz package
    • load missing arrows lib
    ---
    title: |
        | ##title**
    
    author: |
            | name
            | email
            |
            
    date: "`r format(Sys.time(), '%d %B %Y')`"
    
    output:
      beamer_presentation:
        theme: Szeged
        slide_level: 2
        includes:
          in_header: header.tex
        keep_tex: true
    
    linkcolor: false
    ---
    
    ```{r setup, include=FALSE}
    knitr::opts_chunk$set(echo = FALSE)
    ```
    
    
    # Outline
    
    ## Outline
    
    1. Item 1
    2. Item 2
    3. Item 3
    
    # Introduction
    
    ## First subsection
    
    This is an example of a graph:
    
    (I want to insert the graph here)
    
    
    ## Second subsection
    
    Text
    
    \begin{tikzpicture}[>=triangle 45, font=\footnotesize]
    \node[fill,rectangle,inner sep=0pt,minimum size=5pt,label={right:{S}}] (S) at (4,2.66) {};
    \node[fill,circle,inner sep=0pt,minimum size=5pt,label={below:{X}}] (X) at (0,0) {};
    \node[fill,circle,inner sep=0pt,minimum size=5pt,label={below:{Y}}] (Y) at (6,0) {};
    \node[fill,circle,inner sep=0pt,minimum size=5pt,label={above:{Z}}] (Z) at (3,2) {};
    \draw[->,shorten >= 1pt] (X)--(Y);
    \draw[->,shorten >= 1pt] (Z)--(X);
    \draw[->,shorten >= 1pt] (Z)--(Y);
    \draw[->,shorten >= 1pt] (S)--(Z);
    \draw[<->,dashed,shorten >= 1pt] (X) to[bend left=45] (Z);
    \draw[<->,dashed,shorten >= 1pt] (X) to[bend left=30] (Y);
    \end{tikzpicture}
    

    and adding to header.tex:

    \usepackage{tikz}
    \usetikzlibrary{arrows}
    

    enter image description here