2.7 Bloques personalizados

Puede generar bloques personalizados utilizando el motor de block en knitr , es decir, la opción del chunk engine = 'block', o la sintaxis más compacta ```{block}. Este motor se debe utilizar en combinación con la opción del chunk type, que tiene una cadena de caracteres. Cuando se utiliza el motor de block, genera un <div> para envolver el contenido del chunk si el formato de salida es HTML, y un entorno de LaTeX si la salida es ésta. La opción type especifica la clase del <div> y el nombre del entorno de LaTeX. Por ejemplo, la salida HTML de este chunk

```{block, type='FOO'}
Some text for this block.
```

sería:

<div class="FOO">
Some text for this block.
</div>

y la salida en LaTeX sería:

\begin{FOO}
Some text for this block.
\end{FOO}

Depende del autor del libro establecer cómo definir el estilo del bloque. Puede definir el estilo de <div> en CSS e incluirlo en la salida a través de la opción includes en los metadatos YAML. Del mismo modo, puede definir el entorno de LaTeX a través de \newenvironment e incluir la definición en la salida de LaTeX a través de la opción includes. Por ejemplo, podemos guardar el siguiente estilo en un archivo CSS, digamos, style.css:

div.FOO {
  font-weight: bold;
  color: red;
}

Y los metadatos YAML del documento R Markdown pueden ser:

---
output:
  bookdown::html_book:
    includes:
      in_header: style.css
---

Hemos definido algunos tipos de bloques para que este libro muestre notas, consejos y advertencias, etc. A continuación se presentan algunos ejemplos:

R es software libre y viene con ABSOLUTAMENTE NINGUNA GARANTÍA. Le invitamos a redistribuirlo bajo los términos de la GNU General Public License versiones 2 o 3. Para más información sobre estos asuntos, http://www.gnu.org/licenses/.
R es software libre y viene con ABSOLUTAMENTE NINGUNA GARANTÍA. Le invitamos a redistribuirlo bajo los términos de la GNU General Public License versiones 2 o 3. Para más información sobre estos asuntos, http://www.gnu.org/licenses/.
R es software libre y viene con ABSOLUTAMENTE NINGUNA GARANTÍA. Le invitamos a redistribuirlo bajo los términos de la GNU General Public License versiones 2 o 3. Para más información sobre estos asuntos, http://www.gnu.org/licenses/.
R es software libre y viene con ABSOLUTAMENTE NINGUNA GARANTÍA. Le invitamos a redistribuirlo bajo los términos de la GNU General Public License versiones 2 o 3. Para más información sobre estos asuntos, http://www.gnu.org/licenses/.
R es software libre y viene con ABSOLUTAMENTE NINGUNA GARANTÍA. Le invitamos a redistribuirlo bajo los términos de la GNU General Public License versiones 2 o 3. Para más información sobre estos asuntos, http://www.gnu.org/licenses/.

El motor knitr block fue diseñado para mostrar contenido simple (normalmente un párrafo de texto sin formato). Puede utilizar una sintaxis de formato simple, como hacer que ciertas palabras sean negritas o cursivas, pero la sintaxis más avanzada, como las citas y las referencias cruzadas, no funcionarán. Sin embargo, hay un motor alternativo denominado block2 que soporta la sintaxis arbitraria de Markdown, por ejemplo,

```{block2, type='FOO'}
Some text for this block [@citation-key].

- a list item
- another item

More text.
```

El motor block2 también debería ser más rápido que el motor block si tiene muchos bloques personalizados en el documento, pero su implementación se basó en un hack, por lo que no estamos 100% seguros de si siempre va a funcionar en el futuro. No hemos visto problemas con Pandoc v1.17.2 todavía.

Una advertencia más para el motor block2: si el último elemento del bloque no es un párrafo ordinario, debe dejar una línea en blanco al final, por ejemplo,

```{block2, type='FOO'}
Some text for this block [@citation-key].

- a list item
- another item
- end the list with a blank line

```

El teorema y los entornos de prueba en la sección 2.2.2 se implementan en realidad a través del motor block2.

Para todos los bloques personalizados basados en el motor block o block2, hay una opción de bloqueo echo que puede usar para mostrar (echo = TRUE) u ocultar (echo = FALSE) los bloques.