2.12 Definir funciones Javascript

La sintaxis de Markdown de remark.js puede ser bastante extensible al permitir definir macros personalizadas (funciones de JavaScript) que se pueden aplicar al texto de Markdown usando la sintaxis ![:macroName arg1, arg2, ...] o ![:macroName arg1, arg2](this). Por ejemplo, puede definir una macro llamada scale para establecer el ancho de una imagen:

remark.macros.scale = function(w) {
  var url = this;
  return '<img src="' + url + '" style="width: ' + w + '" />';
};

Luego, la sentencia en Markdown

![:scale 50%](image.jpg)

Será traducida en

<img src="image.jpg" style="width: 50%" />

Es decir, puede usar una sintaxis de pseudo-Markdown más limpia para generar HTML.

Para insertar macros en diapositivas xaringan, puede guardar sus macros en un archivo (por ejemplo, macros.js) y usar la opción beforeInit bajo la opción nature, por ejemplo,

output:
  xaringan::moon_reader:
    nature:
      beforeInit: "macros.js"

La opción beforeInit se puede utilizar para insertar código JavaScript arbitrario antes de que remark.js inicialice las diapositivas. Insertar macros es solo una de sus posibles aplicaciones. Por ejemplo, cuando inserta tweets de Twitter en diapositivas, generalmente necesita cargar widgets.js, que se puede cargar a través de la opción beforeInit.

--- 
title: "Twitter Test for xaringan"
output: 
  xaringan::moon_reader:
    nature: 
      beforeInit: "https://platform.twitter.com/widgets.js"
--- 

<blockquote class="twitter-tweet" data-lang="de"><p lang="en" dir="ltr">You&#39;re doing it right if you get frustrated: if you&#39;re not frustrated, you&#39;re (probably) not stretching yourself mentally</p>&mdash; Hadley Wickham (@hadleywickham) <a href="https://twitter.com/hadleywickham/status/565516733516349441?ref_src=twsrc%5Etfw">11. Februar 2015</a></blockquote>