---
title: 'Using \color{Red} `posterdown` \color{White} to generate reproducible conference posters via RMarkdown > Knitr > Markdown > Pandoc > Latex > PDF workflow as well as long titles...'
author: "Brent Thorne"
bibliography: MyLibrary
output: posterdown::posterdown_memoir
---

```{r, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, results = 'asis',fig.height = 3.5, fig.width = 4.5, out.width = "100%", warning = FALSE, fig.align = 'center', message = FALSE, dev='cairo_pdf')
```

# Introduction

Welcome to `posterdown` ! This is my attempt to provide a semi-smooth workflow for those who wish to take their `RMarkdown` skills to the conference world. Many creature comforts frim `RMarkdown` are available in this package such as `Markdown` section notation, figure captioning, and even citations like this one [@holden_identifying_2012] The rest of this example poster will show how you can insert typical conference poster features into your own document. 

# Study Site

Here is a map made to show the study site using `ggplot2`, `ggspatial`, and `sf`. Lorem ipsum dolor sit amet, [@middleton_geological_nodate] consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Phasellus vestibulum lorem sed risus ultricies tristique nulla. Mauris vitae ultricies leo integer malesuada nunc vel risus commodo. Suspendisse potenti nullam ac tortor vitae. Enim nunc faucibus a pellentesque sit amet porttitor eget.  \vspace{15mm}

```{r, fig.width=4.5, out.width="80%", fig.cap='This is a map of Canada, projected using the NAD 83 UTM Zone 7 Datum.', cache=TRUE}
library(ggplot2)
library(ggspatial)
library(ggthemes)
library(sf)

canada <- read_sf("data/Canada.geojson")


ggplot() +
  ggspatial::layer_spatial(canada, fill = "grey") +
  coord_sf() +
  theme_solarized() +
  NULL

```


# Objectives

\large

1. Easy to use reproducible poster design. 
2. Integration with `RMarkdown`.
3. Easy transition from `posterndown` to `thesisdown` or `rticles`

\small

# Methods

This package uses the same workflow approach as the `RMarkdown` you know and love. Basically it goes from RMarkdown > Knitr > Markdown > Pandoc > Latex > PDF

# Results

```{r}
library(kableExtra)
library(ggplot2)

data("iris")

kable(iris[1:4,],align = "c", caption = "Hopefully this works without much of a headache!", booktabs = T) %>% 
  kable_styling(latex_options = "striped")

```

```{r, out.width='80%', fig.width=4.5, fig.align='center', echo=TRUE, fig.height=5, fig.cap='Another figure showing how base R plots might look on this poster!'}

# Here is some code for people
# to look at and be in awe of!!!!
library(ggplot2)
library(ggthemes)

ggplot(data=iris,
       aes(x = Sepal.Width,
           y = Sepal.Length,
           colour = Species)) +
  geom_point() +
  theme_stata() +
  NULL

```

```{r, out.width='75%', fig.width=4, fig.height=3, fig.cap='A typical plot using ggplot.'}

library(ggplot2)
library(ggthemes)

ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width, colour = Species)) +
  geom_point() +
  theme_fivethirtyeight() +
  labs(x = "Sepal Length", y = "Sepeal Width") +
  NULL

```

# Next Steps

Pellentesque habitant morbi tristique senectus et netus. Magnis dis parturient montes nascetur ridiculus mus mauris vitae ultricies. Nibh nisl condimentum id venenatis. Lorem ipsum dolor sit amet consectetur adipiscing elit duis. Eget aliquet nibh praesent tristique magna sit amet purus. Orci phasellus egestas tellus rutrum. Mauris cursus mattis molestie a. Amet cursus sit amet dictum sit. Tellus id interdum velit laoreet. Tortor at risus viverra adipiscing. Ullamcorper malesuada proin libero nunc. Elit ullamcorper dignissim cras tincidunt lobortis feugiat vivamus. Eget dolor morbi non arcu risus quis. Pulvinar pellentesque habitant morbi tristique senectus.

\small
