.Rmarkdown to .markdown: Use {{< figure >}} shortcode instead of <img> HTML - r

I've been looking into using blogdown for my existing Hugo blog and I think I've narrowed it down to one shortcoming. I'm using the .Rmarkdown file extension because I want to use the Blackfriday markdown processor to take advantage of Hugo features.
Among those is a customization I've added to my theme, which takes any image embedded with the built-in shortcode uses PhotoSwipe to make them appear in a lightbox on click. I've made it so that anything using the {{< figure >}} shortcode does this.
Is it possible either via blogdown or knitr (assuming knitr is part of the process of rendering the Rmarkdown) to customize the output of plots so they are wrapped in the shortcode rather than HTML tags? I think it might even be possible to do this with Go/Blackfriday if I could at least get the plots to be formatted in Markdown ![](/path/to/img.jpg), if that would somehow be easier.

There are two ways: either redefine the plot hook of knitr (requires more knowledge about knitr), or use the following trick:
```{r cars-plot, fig.show='hide'}
plot(cars)
```
{{< figure src="`r knitr::fig_chunk('cars-plot', 'png')`" >}}
In the above example, the plot was generated but hidden in the chunk output (fig.show='hide'; if you want hide the whole code chunk, use include=FALSE). Then its path is retrieved via the function knitr::fig_chunk() and inserted in the figure shortcode.

Related

remove header space from 2nd page of markdown pdf after creating custom header on page one

I am trying to add a custom header to a pdf via markdown. This page has been very helpfull. My working solution is below.
\addtolength{\headheight}{1cm}
\fancypagestyle{plain}{}
\rhead{\center\includegraphics[height=3cm]{path}}
\renewcommand{\headrulewidth}{0pt}
While this provides the desired solution on the title page with the correctly sized logo and space between the header and the text, there is extra blank space on the following pages. How can I remove (or control) the header spacing on pages > 1?
In your current working solution, you are using some LaTeX commands to build a custom header. If you want a custom header to exist only on the title page, then you could use the LaTeX commands that control the title page. Specifically, \begin{titlepage} \end{titlepage} and nest your header within. For more information on title pages, see this overleaf post.
For directly solving issues with spacing on all pages, you can use the geometry package in LaTeX. Here are some resources describing how it works: rmarkdown - set margins, overleaf geometry package. This will allow you more direct control over the spacing on every page.

Figures or plots with accompanying thumbnails, like in RStudio

When I create plots within a single chunk of an R-Studio markdown file, they appear in a nice array with clickable thumbnails:
However, when I publish as an HTML file, these figures are simply displayed vertically, one after the other. Is there any way to achieve the way that it originally looks in RStudio?
Unfortunately there's no way to output what RStudio shows you, but you can do this and a lot of other HTML formatting yourself using the knitrBootstrap package.
Check out the end of this example for a clickable-thumbnail example.

bookdown with specific latex template

I very much believe that Rmarkdown and bookdown are the future of content publishing, however some publishers use specific LaTeX templates, and in order to submit the manuscript they need it in that precise template.
For example, see this Springer manuscript template:
http://resource-cms.springer.com/springer-cms/rest/v1/content/20566/data/v3/monographs
Is it possible to make bookdown use this template in order to produce a PDF file?
EDIT: in this book (https://bookdown.org/yihui/bookdown/) on section 4.2 Theming I read it is indeed possible, but I might end up designing a "custom Pandoc LaTeX template".
I guess the question is now about how to design this Pandoc template, and section 4.3 provides some details about it.
You don't really have to use a custom Pandoc LaTeX template (of course you can if you want). Tweaking a few options and you will be done. I just put an example in the bookdown-demo repository. See this commit for what I changed, and see here for a PDF example.
You almost surely still have to tweak other things, one of which might be the index page. I also made an example for that.

In RStudio, making slide deck with RMarkdown, how can I easily change the theme?

I'm writing an .rmd file in RStudio, and using the Knit button to create a slide deck. I have two options, it appears, ioslides and slidy. I don't really like the default look-and-feel of either. (I think ioslides uses screen real estate inefficiently, and slidy feels like a graphic designer wasn't involved.)
I did a web search for alternative templates/styles/themes, and came upon pages like this gallery, but the tools there seem to be for use outside RStudio, as completely independent projects. In other words, they're not just themes for what I've got, but entirely other solutions that would change my workflow.
Is there a simple way to tell RStudio to use a different template/theme with either ioslides or slidy? For example, can I download a CSS file from somewhere, and point RStudio to it with the css: option in the yaml header of my .rmd file? If so, is there a gallery of such CSS templates?
Here's what I ended up doing. It's not as smooth as I'd like it to be, but it's decent. I'm glad to entertain better answers.
Download any of the style files linked to from this knitrBootstrap code into the same folder as your R Markdown file.
Edit it so that the URL at the start of the file begins with http: so that knitr knows not to look on your filesystem for the additional resources (fonts), but on the Web.
Edit it further to remove any pipes (|) in that URL, because knitr can't handle them (as far as I can tell). (Remove everything after the pipe, too.)
Edit it further to change everything of the form url('../fonts/***.eot'); to now instead be of the form url('https://netdna.boostrapcdn.com/bootswatch/3.0.0/fonts/***.eot');.
Link to it from your R Markdown file with the css: attribute in the YAML header.
Have you tried using the built in Bootswatch themes? They're fairly limited, but in doing so you can quickly customise many elements.
e.g
title: "Test"
author: "John"
date: "5 June 2017"
output:
slidy_presentation:
fig_width: 12.5
font_adjustment: -1
theme: readable
Other themes may be found here Bootswatch.
edit: removed a typo

How to change the position of the table of contents in rmarkdown?

With RStudio and knitr I see that I can add a TOC with the following code in my .rmd file.
----------------
output:
html_document:
toc: yes
-----------------
However, this places the TOC at the very beginning of the HTML document. Is there a way to move the TOC lower on the page? Say after an introductory paragraph?
I tried to use __TOC__ and __FORCETOC__ but it did not change the TOC position.
The position of the TOC is fixed in the R Markdown default HTML template. If you want to change its position in the document, you'll need to modify the template:
Make a copy of the R Markdown HTML template to use as a starting point. You can find it by running this R command: system.file("rmd/h/default.html", package="rmarkdown")
Move the $toc section to where you want the table of contents to appear.
Save the modified template in the same folder as the document you're rendering as e.g. lowertitle.html
Add template: lowertitle.html to the html_document settings.
From the standpoint of the template, all of the document's content is an atomic unit, so it might be necessary to put any content you want to appear before the TOC in the template itself.
You can use JQuery to relocate the TOC to an arbitrary position in the file. Simply insert a heading where you want the TOC to go, and use the ID generated by rendering the R Markdown file. For example:
<script>
// Move TOC to the Table of Contents heading (with id "table-of-contents")
$(function() {
$( "#TOC" ).insertAfter( $( "#table-of-contents" ) );
});
</script>
A heading called "Table of Contents" somewhere in the R Markdown file will receive id "table-of-contents". The TOC has id "TOC". The Jquery bit above selects that TOC, and inserts it after the "Table of contents" heading, wherever in the document it's located.
I tried the proposed answers and although they seem simple enough I could not achieve either. I found an easier solution proposed by #gadenbuie in GitHub:
https://gist.github.com/gadenbuie/c83e078bf8c81b035e32c3fc0cf04ee8
You just need to copy and paste the function to render your TOC in your Rmarkdown file and then recall it in a chunk where you want your TOC to appear. Therefore, you can recall your TOC wherever you want it in the Rmarkdown file.
If you need further explanation, you can check out #gadenbuie's blog:
https://www.garrickadenbuie.com/blog/add-a-generated-table-of-contents-anywhere-in-rmarkdown/
You could add something in a header which will come after title and before toc, e.g. a yaml header like:
And then add whatever paragraph or figures to the file header.md that you want.
As an example, I set this YAML up in the README of brshallo/piececor so that I could have my 'lifecycle' badge show-up prior to my table of contents.

Resources