es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo agregar elementos arbitrarios al Índice en Bookdown?

Estoy creando un libro mediante bookdown.
Sé que es posible omitir los encabezados del índice añadiendo los atributos {.unlisted .unnumbered}, como se muestra en la sección 4.18 del R Markdown Cookbook.
Sin embargo, ¿cómo puedo añadir contenido arbitrario al índice?
Si sólo necesitara añadir esto para la salida en PDF, podría usar (por ejemplo) el comando LaTeX \addcontentsline, pero necesito que aparezca también en la barra lateral de contenido HTML.

Por ejemplo, si configura un nuevo proyecto bookdown predeterminado desde RStudio, incluye el archivo 01-intro.Rmd.
Las primeras líneas son


<h1>Introducción {#intro}</h1> Puede etiquetar los títulos de capítulos y secciones usando <code>{#etiqueta}</code> después de ellos, por ejemplo, podemos hacer referencia al Capítulo \@ref(intro). Si no los etiqueta manualmente, habrá etiquetas automáticas de todos modos, por ejemplo, Capítulo \@ref(métodos). Las figuras y las tablas con subtítulos se colocarán en los entornos <code>figure</code> y <code>table</code>, respectivamente.

<p>Necesito poder crear <code>div</code>s arbitrarios que se añadan al índice, de la siguiente manera:</p>

<p>“`markdown

Introducción {#intro}

Puede etiquetar los títulos de capítulos y secciones usando {#etiqueta} después de ellos, por ejemplo, podemos hacer referencia al Capítulo \@ref(intro). Si no los etiqueta manualmente, habrá etiquetas automáticas de todos modos, por ejemplo, Capítulo \@ref(métodos).

::: {#encabezado-arbitrario <algún otro atributo?>}
Las figuras y las tablas con subtítulos se colocarán en los entornos figure y table, respectivamente.
:::
“`

Lo que añadiría la frase “Las figuras y las tablas con subtítulos se colocarán en los entornos figure y table, respectivamente.” tanto en el índice LaTeX como en la barra lateral del contenido de salida HTML.
El contexto de este problema es que necesito colocar un encabezado dentro de otro div personalizado que formatea el contenido en un cuadro de color para destacarlo.
De lo contrario, por supuesto, podría añadir otro encabezado mediante ## antes de la frase anterior.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para agregar contenido arbitrario a la Tabla de Contenidos en bookdown, puedes usar la opción toc en el encabezado YAML de tu documento. Aquí tienes un ejemplo:

    ---
    title: "Mi Libro"
    output:
      bookdown::html_document2:
        toc:
          before: |
            <div class="my-header">Mi Encabezado Personalizado</div>
          after: |
            <hr>
    ---
    

    En este ejemplo, estamos agregando un div HTML personalizado con la clase my-header al principio de la Tabla de Contenidos con la opción before, y una regla horizontal (<hr>) al final de la Tabla de Contenidos con la opción after.

    Puedes personalizar el contenido y estilo del div personalizado usando CSS en el encabezado de tu documento o en un archivo CSS externo. Por ejemplo:

    ---
    title: "Mi Libro"
    output:
      bookdown::html_document2:
        toc:
          before: |
            <div class="my-header" style="background-color: #f1c40f; color: white; font-size: 1.2em; padding: 10px;">Figuras y Tablas</div>
          after: |
            <hr>
    ---
    

    Esto agregaría un encabezado amarillo con texto en blanco y un tamaño de fuente más grande al principio de la Tabla de Contenidos. Puedes ajustar las propiedades de CSS según sea necesario para lograr el aspecto deseado.

    Ten en cuenta que la opción toc es específica del formato de salida que estás usando (html_document2 en este ejemplo), por lo que es posible que necesites modificarlo para otros formatos. Puedes encontrar más información sobre la personalización de la Tabla de Contenidos en la documentación de bookdown: https://bookdown.org/yihui/bookdown/customize-css.html#customizing-the-table-of-contents-toc.

Comments are closed.