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.

counterDesde: siempreIr al código fuente

Cuenta a través de páginas, elementos y más.

Con la función counter, podés acceder a los contadores de páginas, títulos, figuras y más, y modificarlos. Además, podés definir contadores personalizados para otras cosas que quieras contar.

Como los contadores cambian a lo largo del documento, su valor actual es contextual. Se recomienda leer el capítulo sobre contexto antes de continuar acá.

Acceder a un contador

Para acceder al valor sin procesar de un contador, podemos usar la función get. Esta función devuelve un array: los contadores pueden tener varios niveles (en el caso de los títulos, para secciones, subsecciones, etcétera) y cada elemento del array corresponde a un nivel.

#set heading(numbering: "1.") = Introduction Raw value of heading counter is #context counter(heading).get()

Mostrar un contador

A menudo queremos mostrar el valor de un contador de una manera más legible para las personas. Para eso, podemos llamar a la función display sobre el contador. Esta función obtiene el valor actual del contador y lo formatea con una numeración proporcionada o inferida automáticamente.

#set heading(numbering: "1.") = Introduction Some text here. = Background The current value is: #context { counter(heading).display() } Or in roman numerals: #context { counter(heading).display("I") }

Modificar un contador

Para modificar un contador, podés usar los métodos step y update:

El contador de títulos avanza antes de que se muestre el título, así que Analysis recibe el número siete aunque el contador esté en seis después de la segunda actualización.

#set heading(numbering: "1.") = Introduction #counter(heading).step() = Background #counter(heading).update(3) #counter(heading).update(n => n * 2) = Analysis Let's skip 7.1. #counter(heading).step(level: 2) == Analysis Still at #context { counter(heading).display() }

Contadores de elementos

Arriba hay varios ejemplos del uso del contador de heading. Los títulos son solo un tipo de elemento que se puede contar. En general, los contadores pueden contar cualquier tipo de elemento localizable.

Además, un contador también puede contar solo los elementos que coinciden con un selector específico. Por ejemplo, counter(figure.where(kind: image)) cuenta las figuras que contienen imágenes, pero ignora otros tipos de figuras.

Contador de páginas

El contador de páginas es especial. Avanza automáticamente en cada salto de página. Pero, como los demás contadores, también podés hacerlo avanzar manualmente. Por ejemplo, podrías tener números de página romanos para tu prefacio, luego pasar a números de página arábigos para tu contenido principal y reiniciar el contador de páginas en uno.

#set page(numbering: "(i)") = Preface The preface is numbered with roman numerals. #set page(numbering: "1 / 1") #counter(page).update(1) = Main text Here, the counter is reset to one. We also display both the current page and total number of pages in Arabic numbers.

Contadores personalizados

Para definir tu propio contador, llamá a la función counter con una cadena de texto como clave. Esta clave identifica el contador de forma global.

#let mine = counter("mycounter") #context mine.display() \ #mine.step() #context mine.display() \ #mine.update(c => c * 3) #context mine.display()

Cómo avanzar

Cuando definís y usás un contador personalizado, en general, primero tenés que avanzar el contador y después mostrarlo. De esta manera, el comportamiento de avance de un contador puede depender del elemento para el que se avanza. Si estuvieras escribiendo un contador para, digamos, teoremas, la definición de tu teorema incluiría primero el avance del contador y solo después mostraría el contador y el contenido del teorema.

#let c = counter("theorem") #let theorem(it) = block[ #c.step() *Theorem #context c.display():* #it ] #theorem[$1 = 1$] #theorem[$2 < 3$]

La lógica detrás de esto se explica mejor con el ejemplo del contador de títulos: una actualización del contador de títulos depende del nivel del título. Al avanzar justo antes del título, podemos pasar correctamente de 1 a 1.1 al encontrar un título de nivel 2. Si avanzáramos después del título, no sabríamos a qué valor avanzar.

Como los contadores siempre deben avanzar antes de los elementos que cuentan, siempre empiezan en cero. De esta manera, están en uno en la primera visualización (que ocurre después del primer avance).

Viaje en el tiempo

¡Los contadores pueden viajar en el tiempo! Podés averiguar el valor final del contador antes de que se alcance e incluso determinar cuál era el valor en cualquier ubicación particular del documento.

#let mine = counter("mycounter") = Values #context [ Value here: #mine.get() \ At intro: #mine.at(<intro>) \ Final value: #mine.final() ] #mine.update(n => n + 3) = Introduction <intro> #lorem(10) #mine.step() #mine.step()

Otros tipos de estado

El tipo counter está estrechamente relacionado con el tipo state. Leé su documentación para más detalles sobre la gestión de estado en Typst y por qué no usa simplemente variables normales para los contadores.

Constructor
Signo de pregunta
Ir al código fuente

Crea un contador nuevo identificado por una clave.

key
str o label o selector o location o function
ObligatorioPosicional
Signo de pregunta

La clave que identifica este contador de forma global.

Funciones
Signo de pregunta

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

Obtiene el valor del contador en la ubicación actual. Siempre devuelve un array de enteros, incluso si el contador tiene un solo número.

Esto equivale a counter.at(here()).

self.get() → intarray

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

Muestra el valor del contador.

Podés proporcionar tanto una numeración personalizada como una ubicación personalizada. Ambas son auto por defecto, lo que selecciona valores por defecto razonables (la numeración del elemento contado y la ubicación actual, respectivamente).

Devuelve la salida formateada.

numbering
auto o str o function
Posicional
Signo de pregunta
Por defecto: auto

Una función o patrón de numeración que especifica cómo mostrar el contador. Si se da una función, esa función recibe cada número del contador como un argumento separado. Si la cantidad de números varía, por ejemplo para el argumento heading, podés usar un sumidero de argumentos.

Si se omite o se establece en auto, muestra el contador con el estilo de numeración del elemento contado o con el patrón "1.1" si no existe tal estilo.

atPor defecto: auto

El lugar en el que se debe mostrar el contador.

Si se usa un selector, debe coincidir exactamente con un elemento del documento. Los tipos de selectores más útiles para esto son las etiquetas y las ubicaciones.

Si se omite o se establece en auto, muestra el contador en la ubicación actual. Esto equivale a usar here().

La numeración se ejecutará con un contexto en el que here() se resuelve en la ubicación indicada, de modo que las numeraciones que involucran otros contadores se resuelvan correctamente.

bothPor defecto: false

Si está activado, muestra juntos el conteo actual y el final del nivel superior. Ambos se pueden estilizar con un único patrón de numeración. La propiedad de numeración de páginas lo usa para mostrar el número actual y el total de páginas cuando se da un patrón como "1 / 1".

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

Obtiene el valor del contador en la ubicación dada. Siempre devuelve un array de enteros, incluso si el contador tiene un solo número.

El selector debe coincidir exactamente con un elemento del documento. Los tipos de selectores más útiles para esto son las etiquetas y las ubicaciones.

selector
label o selector o location o function
ObligatorioPosicional
Signo de pregunta

El lugar en el que se debe obtener el valor del contador.

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

Obtiene el valor del contador al final del documento. Siempre devuelve un array de enteros, incluso si el contador tiene un solo número.

self.final() → intarray

stepDesde: siempreIr al código fuente

Aumenta en uno el valor del contador.

La actualización tendrá efecto en la posición donde se inserte en el documento el contenido devuelto. ¡Si no ponés la salida en el documento, no pasa nada! Este sería el caso, por ejemplo, si escribís let _ = counter(page).step(). Las actualizaciones de contadores siempre se aplican en el orden del diseño y, en ese caso, Typst no sabría cuándo avanzar el contador.

self.step(level: int) → content

levelPor defecto: 1

La profundidad a la que avanza el contador. Por defecto es 1.

updateDesde: siempreIr al código fuente

Actualiza el valor del contador.

Igual que con step, la actualización solo ocurre si ponés el contenido resultante en el documento.

self.update(intarrayfunction) → content

update
int o array o function
ObligatorioPosicional
Signo de pregunta

Si se da un entero o un array de enteros, establece el contador en ese valor. Si se da una función, esa función recibe el valor anterior del contador (con cada número como un argumento separado) y tiene que devolver el valor nuevo (entero o array).