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:
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.