Traducción no oficial al español rioplatense, generada con IA (Claude Sonnet 5.5) bajo la dirección y revisión de Jassiel Ovando. No es una publicación de Typst GmbH ni cuenta con su aval; ante cualquier duda, prevalece la documentación oficial en inglés. ¿Un error de traducción o una sugerencia? Reportalo. Tipografía: Reforma, de PampaType.

gridElemento
Signo de pregunta
Desde: siempreIr al código fuente

Dispone contenido en una grilla.

El elemento grid te permite disponer contenido en una grilla. Podés definir la cantidad de filas y columnas, así como el tamaño de los espacios (gutters) entre ellas. Hay varios modos de dimensionamiento para columnas y filas que se pueden usar para crear diseños complejos.

Si bien los elementos grid y table funcionan de manera muy similar, están pensados para distintos casos de uso y tienen distinta semántica. El elemento grid está pensado para fines de presentación y de diseño, mientras que el elemento table está pensado, en términos generales, para presentar varios datos relacionados. Las reglas set y show sobre uno de estos elementos no afectan al otro. Consultá la sección de accesibilidad para saber cómo se presentan las grillas y las tablas a los usuarios de tecnologías de asistencia (TA), como los lectores de pantalla.

Dimensionar las pistas

El dimensionamiento de una grilla se determina por los tamaños de pista especificados en los argumentos. Hay varios parámetros de dimensionamiento: columns, rows y gutter. Como cada uno de los parámetros de dimensionamiento acepta los mismos valores, los vamos a explicar una sola vez, acá. Cada argumento de dimensionamiento acepta un array de tamaños de pista individuales. Un tamaño de pista es uno de los siguientes:

Para especificar una sola pista, se puede omitir el array y usar un único valor. Para especificar varias pistas auto, ingresá la cantidad de pistas en lugar de un array. Por ejemplo, columns: 3 equivale a columns: (auto, auto, auto).

Ejemplos

El siguiente ejemplo demuestra las distintas opciones de dimensionamiento de pistas. También muestra cómo podés usar grid.cell para que una celda individual abarque dos pistas de la grilla.

// We use `rect` to emphasize the // area of cells. #set rect( inset: 8pt, fill: rgb("e4e5ea"), width: 100%, ) #grid( columns: (60pt, 1fr, 2fr), rows: (auto, 60pt), gutter: 3pt, rect[Fixed width, auto height], rect[1/3 of the remains], rect[2/3 of the remains], rect(height: 100%)[Fixed height], grid.cell( colspan: 2, image("tiger.jpg", width: 100%), ), )

También podés expandir un array de cadenas de texto o de contenido en una grilla para completar sus celdas.

#grid( columns: 5, gutter: 5pt, ..range(25).map(str) )

Dar estilo a la grilla

Los elementos grid y table funcionan de manera similar. Para una explicación práctica, consultá la guía de tablas; para un panorama rápido, seguí leyendo.

El aspecto de la grilla se puede personalizar mediante distintos parámetros. Estos son los más importantes:

Para cubrir distintas necesidades, hay varias maneras de establecerlos.

Si necesitás reemplazar las opciones anteriores en celdas individuales, podés usar el elemento grid.cell. Del mismo modo, podés reemplazar líneas individuales de la grilla con los elementos grid.hline y grid.vline.

Para configurar un estilo general para una grilla, en cambio, podés especificar la opción de cualquiera de las siguientes maneras:

#grid( columns: 5, // By a single value align: center, // By a single but more complicated value inset: (x: 2pt, y: 3pt), // By an array of values (cycling) fill: (rgb("#239dad50"), none), // By a function that returns a value stroke: (x, y) => if calc.rem(x + y, 3) == 0 { 0.5pt }, ..range(5 * 3).map(n => numbering("A", n + 1)) )

Además, podés aplicar reglas de estilo a grid y a grid.cell. Especialmente, los campos x y y de grid.cell se pueden usar en un selector where, lo que permite dar estilo a celdas de columnas o filas específicas, o de posiciones individuales.

Precedencia del estilo de trazo

Como se explicó arriba, hay tres maneras de establecer el trazo de una celda de la grilla: mediante el campo stroke de grid.cell, con grid.hline y grid.vline, o estableciendo el campo stroke de grid. Cuando varias de estas configuraciones están presentes y entran en conflicto, las de hline y vline tienen la precedencia más alta, seguidas de las de cell y, por último, las de grid.

Además, los trazos de un encabezado o pie de grilla repetido tendrán precedencia sobre los trazos de las celdas normales.

Accesibilidad

Las grillas no tienen ninguna semántica especial. Las tecnologías de asistencia (TA) no ofrecen la posibilidad de navegar bidimensionalmente por celdas en las grillas. Si querés presentar datos tabulares, usá en su lugar el elemento table.

Las TA leerán las celdas de la grilla en su orden semántico. Normalmente, es el orden en que se las pasaste a la grilla. Sin embargo, si las posicionaste manualmente con los argumentos x e y de grid.cell, las celdas se leerán fila por fila, de izquierda a derecha (en documentos de izquierda a derecha). Una celda se leerá cuando se llegue por primera vez a su posición.

Parámetros

columns
auto o int o relative o fraction o array
Configurable con set
Signo de pregunta
Por defecto: ()

Los tamaños de las columnas.

Especificá un array de tamaños de pista o proporcioná un entero para crear una grilla con esa cantidad de columnas de tamaño auto. Tené en cuenta que, a diferencia de las filas y los gutters, proporcionar un único tamaño de pista siempre crea una sola columna.

Mirá la sección de tamaño de pistas de arriba para más detalles.

rows
auto o int o relative o fraction o array
Configurable con set
Signo de pregunta
Por defecto: ()

Los tamaños de las filas.

Si hay más celdas de las que entran en las filas definidas, la última fila se repite hasta que no queden más celdas.

Mirá la sección de tamaño de pistas de arriba para más detalles.

gutterPor defecto: ()

Los espacios entre filas y columnas. Es un atajo para establecer column-gutter y row-gutter en el mismo valor.

Si hay más gutters que tamaños definidos, se repite el último gutter.

Mirá la sección de tamaño de pistas de arriba para más detalles.

column-gutter
auto o int o relative o fraction o array
Configurable con set
Signo de pregunta
Por defecto: ()

Los espacios entre columnas.

row-gutter
auto o int o relative o fraction o array
Configurable con set
Signo de pregunta
Por defecto: ()

Los espacios entre filas.

inset
relative o array o dictionary o function
Configurable con set
Signo de pregunta
Por defecto: (:)

Cuánto relleno se agrega al contenido de las celdas.

Para especificar un inset uniforme para todas las celdas, podés usar una única longitud para todos los lados o un diccionario de longitudes para lados individuales. Mirá la documentación de box para más detalles.

Para especificar insets distintos para distintas celdas, podés:

Mirá la sección de estilos de arriba para más detalles.

Además, podés encontrar un ejemplo en el parámetro table.inset.

align
auto o array o function o alignment
Configurable con set
Signo de pregunta
Por defecto: auto

Cómo alinear el contenido de las celdas.

Si se establece en auto, se usa la alineación exterior.

Podés especificar la alineación de cualquiera de las siguientes maneras:

Mirá la sección de estilos de arriba para más detalles.

Además, podés encontrar un ejemplo en el parámetro table.align.

fill
none o color o gradient o tiling o array o function
Configurable con set
Signo de pregunta
Por defecto: none

Cómo rellenar las celdas.

Puede ser:

Sobre todo, los arrays y las funciones son útiles para crear grillas con rayas. Mirá la sección de estilos de arriba para más detalles.

ExpandirVer ejemplo
#grid( fill: (x, y) => if calc.even(x + y) { luma(230) } else { white }, align: center + horizon, columns: 4, inset: 2pt, [X], [O], [X], [O], [O], [X], [O], [X], [X], [O], [X], [O], [O], [X], [O], [X], )

stroke
none o length o color o gradient o stroke o tiling o array o dictionary o function
Configurable con set
Signo de pregunta
Por defecto: (:)

Cómo trazar las celdas.

Las grillas no tienen trazos por defecto, lo que se puede cambiar estableciendo esta opción en el trazo deseado.

Si hace falta ubicar líneas que puedan cruzar el espacio entre celdas producido por la opción gutter, o reemplazar el trazo entre varias celdas específicas, considerá especificar uno o más de grid.hline y grid.vline junto con las celdas de tu grilla.

Para especificar el mismo trazo para todas las celdas, podés usar un único trazo para todos los lados o un diccionario de trazos para lados individuales. Mirá la documentación del rectángulo para más detalles.

Para especificar trazos distintos para distintas celdas, podés:

Mirá la sección de estilos de arriba para más detalles.

ExpandirVer ejemplo: Pasar una función para establecer un trazo según la posición
#set page(width: 420pt) #set text(number-type: "old-style") #show grid.cell.where(y: 0): set text(size: 1.3em) #grid( columns: (1fr, 2fr, 2fr), row-gutter: 1.5em, inset: (left: 0.5em), stroke: (x, y) => if x > 0 { (left: 0.5pt + gray) }, align: horizon, [Winter \ 2007 \ Season], [Aaron Copland \ *The Tender Land* \ January 2007], [Eric Satie \ *Gymnopedie 1, 2* \ February 2007], [], [Jan 12 \ *Middlebury College \ Center for the Arts* \ 20:00], [Feb 2 \ *Johnson State College Dibden Center for the Arts* \ 19:30], [], [Skip a week \ #text(0.8em)[_Prepare your exams!_]], [Feb 9 \ *Castleton State College \ Fine Arts Center* \ 19:30], [], [Jan 26, 27 \ *Lyndon State College Alexander Twilight Theater* \ 20:00], [ Feb 17 --- #smallcaps[Anniversary] \ *Middlebury College \ Center for the Arts* \ 19:00 #text(0.7em)[(for a special guest)] ], )
ExpandirVer ejemplo: Plegar el diccionario de trazos
#set page(height: 13em, width: 26em) #let cv(..jobs) = grid( columns: 2, inset: 5pt, stroke: (x, y) => if x == 0 and y > 0 { (right: ( paint: luma(180), thickness: 1.5pt, dash: "dotted", )) }, grid.header(grid.cell(colspan: 2)[ *Professional Experience* #box(width: 1fr, line(length: 100%, stroke: luma(180))) ]), ..{ let last = none for job in jobs.pos() { ( if job.year != last [*#job.year*], [ *#job.company* - #job.role _(#job.timeframe)_ \ #job.details ] ) last = job.year } } ) #cv( ( year: 2012, company: [Pear Seed & Co.], role: [Lead Engineer], timeframe: [Jul - Dec], details: [ - Raised engineers from 3x to 10x - Did a great job ], ), ( year: 2012, company: [Mega Corp.], role: [VP of Sales], timeframe: [Mar - Jun], details: [- Closed tons of customers], ), ( year: 2013, company: [Tiny Co.], role: [CEO], timeframe: [Jan - Dec], details: [- Delivered 4x more shareholder value], ), ( year: 2014, company: [Glorbocorp Ltd], role: [CTO], timeframe: [Jan - Mar], details: [- Drove containerization forward], ), )

children
content
ObligatorioPosicional
Signo de pregunta
Variádico
Signo de pregunta

El contenido de las celdas de la grilla, más las líneas de grilla adicionales especificadas con los elementos grid.hline y grid.vline.

Las celdas se completan por filas.

Funciones
Signo de pregunta

cellElemento
Signo de pregunta
Desde: 0.11.0Ir al código fuente

Una celda de la grilla. Podés usar esta función en la lista de argumentos de una grilla para reemplazar las propiedades de estilo de la grilla en una celda individual o para posicionarla manualmente dentro de la grilla. También podés usar esta función en reglas show para aplicar ciertos estilos a varias celdas a la vez.

Por ejemplo, podés reemplazar la posición y el trazo de una sola celda:

ExpandirVer ejemplo
#set text(15pt, font: "Noto Sans Symbols 2") #show regex("[♚-♟︎]"): set text(fill: rgb("21212A")) #show regex("[♔-♙]"): set text(fill: rgb("111015")) #grid( fill: (x, y) => rgb( if calc.odd(x + y) { "7F8396" } else { "EFF0F3" } ), columns: (1em,) * 8, rows: 1em, align: center + horizon, [♖], [♘], [♗], [♕], [♔], [♗], [♘], [♖], [♙], [♙], [♙], [♙], [], [♙], [♙], [♙], grid.cell( x: 4, y: 3, stroke: blue.transparentize(60%) )[♙], ..(grid.cell(y: 6)[♟],) * 8, ..([♜], [♞], [♝], [♛], [♚], [♝], [♞], [♜]) .map(grid.cell.with(y: 7)), )

También podés aplicar una regla show sobre grid.cell para dar estilo a todas las celdas a la vez, lo que te permite, por ejemplo, aplicar estilos según la posición de una celda. Consultá los ejemplos del elemento table.cell para aprender más sobre esto.

body
content
ObligatorioPosicional
Signo de pregunta

El cuerpo de la celda.

x
auto o int
Configurable con set
Signo de pregunta
Por defecto: auto

La columna de la celda (con índice desde cero). Este campo se puede usar en reglas show para dar estilo a una celda según su columna.

Podés reemplazar este campo para elegir en qué columna se debe ubicar la celda. Si no se elige una fila (y), la celda se ubicará en la primera fila (empezando por la fila 0) en la que esa columna esté disponible (o en una fila nueva, si no hay ninguna). En cambio, si se eligen tanto x como y, la celda se ubicará exactamente en esa posición. Se produce un error si esa posición no está disponible (por eso, suele ser prudente especificar las celdas con posición personalizada antes que las celdas con posición automática).

ExpandirVer ejemplo
#let circ(c) = circle( fill: c, width: 5mm, ) #grid( columns: 4, rows: 7mm, stroke: .5pt + blue, align: center + horizon, inset: 1mm, grid.cell(x: 2, y: 2, circ(aqua)), circ(yellow), grid.cell(x: 3, circ(green)), circ(black), )

y
auto o int
Configurable con set
Signo de pregunta
Por defecto: auto

La fila de la celda (con índice desde cero). Este campo se puede usar en reglas show para dar estilo a una celda según su fila.

Podés reemplazar este campo para elegir en qué fila se debe ubicar la celda. Si no se elige una columna (x), la celda se ubicará en la primera columna disponible (empezando por la columna 0) de la fila elegida. Si todas las columnas de la fila elegida ya están ocupadas, se produce un error.

ExpandirVer ejemplo
#let tri(c) = polygon.regular( fill: c, size: 5mm, vertices: 3, ) #grid( columns: 2, stroke: blue, inset: 1mm, tri(black), grid.cell(y: 1, tri(teal)), grid.cell(y: 1, tri(red)), grid.cell(y: 2, tri(orange)) )

colspan
int
Configurable con set
Signo de pregunta
Por defecto: 1

La cantidad de columnas que abarca esta celda.

rowspan
int
Configurable con set
Signo de pregunta
Por defecto: 1

La cantidad de filas que abarca esta celda.

inset
auto o relative o dictionary
Configurable con set
Signo de pregunta
Por defecto: auto

El reemplazo de inset de la celda.

align
auto o alignment
Configurable con set
Signo de pregunta
Por defecto: auto

El reemplazo de alineación de la celda.

fill
none o auto o color o gradient o tiling
Configurable con set
Signo de pregunta
Por defecto: auto

El reemplazo de relleno de la celda.

stroke
none o length o color o gradient o stroke o tiling o dictionary
Configurable con set
Signo de pregunta
Por defecto: (:)

El reemplazo de trazo de la celda.

breakable
auto o bool
Configurable con set
Signo de pregunta
Por defecto: auto

Si las filas que abarca esta celda se pueden ubicar en páginas distintas. Cuando es igual a auto, una celda que abarca solo filas de tamaño fijo no se puede cortar, mientras que una celda que abarca al menos una fila de tamaño auto sí se puede cortar.

hlineElemento
Signo de pregunta
Desde: 0.11.0Ir al código fuente

Una línea horizontal en la grilla.

Reemplaza cualquier trazo por celda, incluido el trazo especificado mediante el campo stroke de la grilla. Puede cruzar el espacio entre celdas creado mediante la opción column-gutter de la grilla.

Se puede encontrar un ejemplo de esta función en el elemento table.hline.

y
auto o int
Configurable con set
Signo de pregunta
Por defecto: auto

La fila encima de la cual se ubica la línea horizontal (con índice desde cero). Si el campo position se establece en bottom, la línea se ubica en cambio debajo de la fila con el índice dado (mirá grid.hline.position para más detalles).

Especificar auto hace que la línea se ubique en la fila siguiente a la última celda posicionada automáticamente (es decir, sin coordenadas reemplazadas) anterior a la línea entre los hijos de la grilla. Si no hay ninguna celda así antes de la línea, se ubica en la parte superior de la grilla (fila 0). Tené en cuenta que especificar en esta opción exactamente la cantidad total de filas de la grilla hace que esta línea horizontal reemplace el borde inferior de la grilla, mientras que un valor de 0 reemplaza el borde superior.

start
int
Configurable con set
Signo de pregunta
Por defecto: 0

La columna en la que empieza la línea horizontal (con índice desde cero, inclusivo).

end
none o int
Configurable con set
Signo de pregunta
Por defecto: none

La columna antes de la cual termina la línea horizontal (con índice desde cero, exclusivo). Por lo tanto, la línea horizontal se dibujará hasta la columna end - 1 inclusive, y a lo largo de ella.

Un valor igual a none o a la cantidad de columnas hace que se extienda hasta el final de la grilla.

stroke
none o length o color o gradient o stroke o tiling o dictionary
Configurable con set
Signo de pregunta
Por defecto: stroke()

El trazo de la línea.

Especificar none elimina cualquier línea ubicada previamente a lo largo del rango de esta línea, incluidas las hlines o el trazo por celda que estén debajo.

position
alignment
Configurable con set
Signo de pregunta
Por defecto: top

La posición en la que se ubica la línea, dada su fila (y): top para dibujarla por encima o bottom para dibujarla por debajo.

Esta configuración solo es relevante cuando el gutter de filas está habilitado (y no se debe usar de otro modo; conviene simplemente aumentar en uno el campo y), ya que en ese caso la posición debajo de una fila pasa a ser distinta de la posición encima de la fila siguiente, debido al espacio entre ambas.

vlineElemento
Signo de pregunta
Desde: 0.11.0Ir al código fuente

Una línea vertical en la grilla.

Reemplaza cualquier trazo por celda, incluido el trazo especificado mediante el campo stroke de la grilla. Puede cruzar el espacio entre celdas creado mediante la opción row-gutter de la grilla.

x
auto o int
Configurable con set
Signo de pregunta
Por defecto: auto

La columna antes de la cual se ubica la línea vertical (con índice desde cero). Si el campo position se establece en end, la línea se ubica en cambio después de la columna con el índice dado (mirá grid.vline.position para más detalles).

Especificar auto hace que la línea se ubique en la columna siguiente a la última celda posicionada automáticamente (es decir, sin coordenadas reemplazadas) anterior a la línea entre los hijos de la grilla. Si no hay ninguna celda así antes de la línea, se ubica antes de la primera columna de la grilla (columna 0). Tené en cuenta que especificar en esta opción exactamente la cantidad total de columnas de la grilla hace que esta línea vertical reemplace el borde final de la grilla (derecho en LTR, izquierdo en RTL), mientras que un valor de 0 reemplaza el borde inicial (izquierdo en LTR, derecho en RTL).

start
int
Configurable con set
Signo de pregunta
Por defecto: 0

La fila en la que empieza la línea vertical (con índice desde cero, inclusivo).

end
none o int
Configurable con set
Signo de pregunta
Por defecto: none

La fila encima de la cual termina la línea vertical (con índice desde cero, exclusivo). Por lo tanto, la línea vertical se dibujará hasta la fila end - 1 inclusive, y a lo largo de ella.

Un valor igual a none o a la cantidad de filas hace que se extienda hasta la parte inferior de la grilla.

stroke
none o length o color o gradient o stroke o tiling o dictionary
Configurable con set
Signo de pregunta
Por defecto: stroke()

El trazo de la línea.

Especificar none elimina cualquier línea ubicada previamente a lo largo del rango de esta línea, incluidas las vlines o el trazo por celda que estén debajo.

position
alignment
Configurable con set
Signo de pregunta
Por defecto: start

La posición en la que se ubica la línea, dada su columna (x): start para dibujarla antes o end para dibujarla después.

También se aceptan los valores left y right, pero no se recomiendan, ya que hacen que tu grilla sea inconsistente entre documentos de izquierda a derecha y de derecha a izquierda.

Esta configuración solo es relevante cuando el gutter de columnas está habilitado (y no se debe usar de otro modo; conviene simplemente aumentar en uno el campo x), ya que en ese caso la posición después de una columna pasa a ser distinta de la posición antes de la columna siguiente, debido al espacio entre ambas.

headerElemento
Signo de pregunta
Desde: 0.11.0Ir al código fuente

Un encabezado de grilla repetible.

Si repeat se establece en true, el encabezado se repetirá en todas las páginas. Para ver un ejemplo, consultá el elemento table.header y el parámetro grid.stroke.

grid.header() → content

repeat
bool
Configurable con set
Signo de pregunta
Por defecto: true

Si este encabezado se debe repetir en todas las páginas.

level
int
Configurable con set
Signo de pregunta
Por defecto: 1

El nivel del encabezado. No debe ser cero.

Esto permite repetir varios encabezados a la vez. Los encabezados con distintos niveles pueden repetirse juntos, siempre que tengan niveles ascendentes.

En particular, cuando un encabezado de nivel más bajo empieza a repetirse, todos los encabezados de nivel más alto o igual dejan de repetirse (son “reemplazados” por el nuevo encabezado).

children
content
ObligatorioPosicional
Signo de pregunta
Variádico
Signo de pregunta

Las celdas y líneas dentro del encabezado.

Un pie de grilla repetible.

Igual que el elemento grid.header, el pie puede repetirse en cada página de la grilla.

No se pueden ubicar otras celdas de la grilla después del pie.

grid.footer() → content

Si este pie se debe repetir en todas las páginas.

Las celdas y líneas dentro del pie.