Sintaxis de Markdown
Las diapositivas se escriben dentro de un único archivo markdown (por defecto ./slides.md
).
Puedes utilizar las características de Markdown como lo harías normalmente, con soporte adicional de HTML en línea y componentes de Vue. También se admite el estilo utilizando Windi CSS. Utiliza ---
separado con una nueva línea para dividir tus diapositivas.
# Slidev
¡Hola, mundo!
---
# Página 2
Usa directamente bloques de código para el resaltado
//```ts
console.log('¡Hola, mundo!')
//```
---
# Página 3
Puedes utilizar directamente Windi CSS y los componentes de Vue para estilizar y enriquecer tus diapositivas.
<div class="p-3">
<Tweet id="20" />
</div>
Front Matter y plantillas
Puedes especificar plantillas y otros metadatos para cada diapositiva convirtiendo los separadores en bloques de Front Matter. Cada bloque de entrada comienza con un guión triple y termina con otro. Los textos entre ellos son objetos de datos en formato YAML. Por ejemplo:
---
layout: cover
---
# Slidev
Esta es la página de portada
---
layout: centrado
background: './images/background-1.png'
class: 'text-white'
---
# Página 2
Esta es una página con la plantilla `centrado` y una imagen de fondo.
---
# Página 3
Esta es la página por defecto sin ningún metadato adicional.
Revisa la página de personalización para más detalles.
Bloques de código
Una gran razón por la que estoy construyendo Slidev es la necesidad de hacer que mi código se vea bien en las diapositivas. Así que, tal y como esperabas, puedes utilizar el bloque de código de estilo Markdown para resaltar tu código.
//```ts
console.log('Hello, World!')
//```
Damos soporte a Prism y Shiki como resaltadores de sintaxis. Revisa la sección de resaltadores para más detalles.
Resaltado de línea
Para resaltar líneas específicas, simplemente añade los números de línea dentro del paréntesis {}
. Los números de línea empiezan a contar desde 1.
//```ts {2,3}
function sumar(
a: Ref<number> | number,
b: Ref<number> | number
) {
return computed(() => unref(a) + unref(b))
}
//```
Para cambiar el resaltado en varios pasos, puede utilizar |
para separarlos. Por ejemplo
//```ts {2-3|5|all}
function sumar(
a: Ref<number> | number,
b: Ref<number> | number
) {
return computed(() => unref(a) + unref(b))
}
//```
Esto resaltará primero a: Ref<number> | number
y b: Ref<number> | number
, y después return computed(() => unref(a) + unref(b))
tras un clic, y finalmente, todo el bloque. Aprende más en la guía de animaciones de clics.
Para omitir el resaltado de cualquier línea, puedes establecer el número de línea en 0
. Por ejemplo:
//```ts {0}
function suma(
a: Ref<number> | number,
b: Ref<number> | number
) {
return computed(() => unref(a) + unref(b))
}
//```
Si el código no cabe en una diapositiva, puedes añadir la opción `maxHeight que establecerá una altura fija y permitirá el desplazamiento:
//```ts {2|3|7|12} {maxHeight:'100px'}
function suma(
a: Ref<number> | number,
b: Ref<number> | number
) {
return computed(() => unref(a) + unref(b))
}
/// ...tantas líneas como desees
const c = suma(1, 2)
//```
Editor de Monaco
Cuando quieras hacer alguna modificación en la presentación, simplemente añade {monaco}
después del identificador del lenguaje - ¡se convierte todo el bloque en un editor de Monaco con todas las funciones!
//```ts {monaco}
console.log('HolaMundo')
//```
Lea más sobre configurar Monaco.
Estilos incrustados
Puedes usar la etiqueta <style>
en tu Markdown directamente para sobreescribir los estilos de la diapositiva actual.
# Esto es rojo
<style>
h1 {
color: red
}
</style>
---
# La siguiente diapositiva no se ve afectada
La etiqueta <style>
en Markdown tiene siempre alcance local. Como resultado destacado, un selector con el combinador hijo (.a > .b
) es inutilizable como tal; consulta el enlace anterior. Para tener anulaciones de estilo globales, consulta la sección de personalización.
Gracias a Windi CSS, puedes usar CSS anidado y directivas (por @apply
)
# Slidev
> Hello `world`
<style>
blockquote {
code {
@apply text-teal-500 dark:text-teal-400;
}
}
</style>
Recursos estáticos
Al igual que harías en markdown, puedes utilizar imágenes que apunten a una url remota o local.
Para los recursos remotos, vite-plugin-remote-assets
los almacenará en caché tras la primera ejecución para que puedan tener una carga instantánea incluso para las imágenes más pesadas.
![Imagen remota](https://sli.dev/favicon.png)
Para recursos locales, muévelos a la carpeta public
y referéncialos con una barrita (/
).
![Imagen local](/pic.png)
Si deseas aplicar tamaños o estilos personalizados, puedes convertirlos a la etiqueta <img>
:
<img src="/pic.png" class="m-40 h-40 rounded shadow" />
Notas
También puedes tomar notas para cada diapositiva. Se mostrarán en el Modo Presentador para que puedas consultarlas durante las presentaciones.
En Markdown, el último bloque de comentarios de cada diapositiva será tratado como una nota.
---
layout: cover
---
# Página 1
Esta es la página de la portada.
<!-- Esto es una nota -->
---
# Página 2
<!-- Esto NO es una nota porque precede al contenido de la diapositiva -->
La segunda página
<!--
Esta es otra nota
-->
Iconos
Slidev te permite tener acceso a casi todos los conjuntos de iconos populares de código abierto directamente en tu markdown. Potenciado por unplugin-icons
e Iconify.
El nombrado sigue la convención de Iconify: {collection-name}-{icon-name}
. Por ejemplo:
<mdi-account-circle />
- de Material Design Icons<carbon-badge />
- de Carbon<uim-rocket />
- de Unicons Monochrome<twemoji-cat-with-tears-of-joy />
- de Twemoji<logos-vue />
- de SVG Logos- Y mucho más...
Puedes navegar y buscar todos los iconos con Icônes.
Estilizando iconos
Puedes estilizar los iconos tal y como estilizarías un elemento HTML. Por ejemplo:
<uim-rocket />
<uim-rocket class="text-3xl text-red-400 mx-2" />
<uim-rocket class="text-3xl text-orange-400 animate-ping" />
Slots
Disponible desde v0.18
Algunas plantillas pueden proporcionar múltiples puntos de contribución utilizando los <slots>
nombrados de Vue.
Por ejemplo, en una estructura de dos columnas, puede tener dos columnas a la izquierda (slot default
) y a la derecha (slot right
) una al lado de la otra.
---
layout: two-cols
---
<template v-slot:default>
# Izquierda
Esto muestra a la izquierda
</template>
<template v-slot:right>
# Derecha
Esto se muestra a la derecha
</template>
Izquierda
Esto se muestra a la izquierda
Derecha
Esto se muestra a la derecha
También proporcionamos una sintaxis abreviada (::nombre::
) para el nombre del slot. El siguiente ejemplo funciona exactamente igual que el anterior.
---
layout: two-cols
---
# Izquierda
Esto muestra a la izquierda
::right::
# Derecha
Esto se muestra a la derecha
También puede especificar explícitamente el slot por defecto y proporcionar un orden personalizado
---
layout: two-cols
---
::right::
# Derecha
Esto se muestra a la derecha
::default::
# Izquierda
Esto muestra a la izquierda
Configuraciones
Todas las configuraciones necesarias se pueden definir en el archivo Markdown. Por ejemplo:
---
theme: seriph
layout: portada
background: 'https://source.unsplash.com/1600x900/?nature,water'
---
# Slidev
Esta es la página de la portada
Lee más sobre la configuración de Front Matter.
LaTeX
Slidev viene con soporte integrado de LaTex, gracias a KaTeX.
En líneas
Rodea tu LaTeX con un solo $
a cada lado para la representación en línea.
$\sqrt{3x-1}+(1+x)^2$
Bloque
Utiliza dos ($$
) para la representación de bloques. Este modo utiliza símbolos más grandes y centra el resultado.
$$
\begin{array}{c}
\nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} &
= \frac{4\pi}{c}\vec{\mathbf{j}} \nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\
\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\
\nabla \cdot \vec{\mathbf{B}} & = 0
\end{array}
$$
Aprende más: Demo | KaTeX | markdown-it-katex
Diagramas
También puedes crear diagramas / gráficos a partir de descripciones textuales en tu Markdown, gracias a Mermaid.
Los bloques de código marcados como mermaid
se convertirán en diagramas, por ejemplo:
//```mermaid
sequenceDiagram
Alice->John: Hello John, how are you?
Note over Alice,John: A typical interaction
//```
Además, puedes pasarle un objeto de opciones para especificar la escala y el tema. La sintaxis del objeto es un literal de objeto de JavaScript, tendrás que añadir comillas ('
) para las cadenas y utilizar comas (,
) entre las claves.
//```mermaid {theme: 'neutral', scale: 0.8}
graph TD
B[Text] --> C{Decision}
C -->|One| D[Result 1]
C -->|Two| E[Result 2]
//```
Entradas múltiples
Disponible desde v0.15
Puedes dividir tu slides.md
en varios archivos y organizarlos como quieras.
slides.md
:
# Página 1
Esta es una página normal
---
src: ./subpagina2.md
---
<!-- esta página se cargará desde './subpagina2.md' -->
El contenido en línea será ignorado
subpagina2.md
:
# Página 2
Esta página es de otro archivo
Fusión de Front Matter
Puedes proporcionar Front Matters tanto de tu entrada principal como de páginas externas de markdown. Si hay las mismas claves en ellas, las de la entrada principal tienen mayor prioridad. Por ejemplo:
slides.md
:
---
src: ./cover.md
background: https://sli.dev/bar.png
class: text-center
---
cover.md
:
---
layout: cover
background: https://sli.dev/foo.png
---
# Portada
Página de portada
Acabarán siendo equivalentes a la página siguiente:
---
layout: cover
background: https://sli.dev/bar.png
class: text-center
---
# Portada
Página de portada
Reutilización de páginas
Con el soporte de entradas múltiples, la reutilización de páginas puede ser sencilla. Por ejemplo:
---
src: ./cover.md
---
---
src: ./intro.md
---
---
src: ./content.md
---
---
# reutilización
src: ./content.md
---