Saltar al contenido principal

Capítulo 3.12 · Parte II · El oficio

Configuración: recuadros de aviso

Estilos con nombre para los recuadros :::callout: marco, fondo, franja, título, icono y marcador, enunciados numerados, tipografía dentro del recuadro y recuadros partidos entre páginas

Actualizado 2026-10-1628 minEn el capítulo 3 Configuraciónenescadefritptzhjaar

En pocas palabras

Esta página explica los recuadros que separan del texto una nota, un consejo, una advertencia o una lista de objetivos. Das a cada clase de recuadro un nombre y un aspecto: su fondo, su borde, una franja de color, un título y un icono. Un recuadro puede llevar un número, como un teorema o un ejemplo en un libro de texto. Eliges las tipografías de dentro del recuadro. Cuando un recuadro largo sigue en la página siguiente, eliges qué marca el corte.

#Estilos de aviso

La propiedad calloutStyles declara los estilos de caja con nombre que el documento aplica mediante un contenedor :::callout{type="…"} — notas, consejos, advertencias, objetivos de aprendizaje, cualquier contenido separado del texto corrido en una caja tintada o con borde. Por defecto se incluye un estilo neutro, note (fondo gris claro, sin borde, sin franja, sin icono, sin título), de modo que :::callout funciona sin configuración alguna; declarar calloutStyles sustituye esa lista por defecto.

const config: PostextConfig = {
  calloutStyles: [
    { id: 'note', name: 'Nota' },
    {
      id: 'objectives',
      name: 'Objetivos de aprendizaje',
      title: 'Objetivos',
      stripe: { enabled: true, side: 'left' },
      icon: { kind: 'glyph', glyph: '✓' },
      titleStyle: { textTransform: 'uppercase' },
      lists: { bulletChar: '–' },
    },
    {
      id: 'warning',
      title: 'Advertencia',
      backgroundEnabled: false,
      border: { enabled: true, color: { hex: '#AA0000', model: 'hex' }, width: { value: 1, unit: 'pt' } },
      borderRadius: { value: 1, unit: 'mm' },
      titleStyle: { color: { hex: '#AA0000', model: 'hex' } },
    },
  ],
};
:::callout{type="objectives"}
- Describir las partes de la linterna.
- Recortar la mecha al anochecer.
:::
 
:::callout{type="warning" title="No toques la lente"}
El cristal sigue caliente una hora después de apagar la llama.
:::
PropiedadTipoPor defectoDescripción
idstring—Identificador que selecciona :::callout{type="…"}. Una valla con un type desconocido o ausente usa el primer estilo configurado (el sandbox avisa de los tipos desconocidos).
namestringidNombre legible (solo para la interfaz del editor).
titlestring''Texto de título por defecto; vacío significa sin título. El atributo title de la valla lo sobrescribe en cada instancia.
span'column' | 'page' | 'side''column'Extensión horizontal: la columna, el ancho completo del área de contenido o la columna lateral solo para flotantes de una disposición de columna y media (layout.sideColumnRole: 'floats') — la caja sale entonces del flujo y se apila en esa columna junto al texto que interrumpe. Se puede sobrescribir por instancia con el atributo span. En disposiciones multicolumna una caja 'page' se convierte en un bloque a ancho de página: divide la página en bandas de columnas y ocupa su propia columna a todo el ancho (ver la sección del contenedor más abajo). Una caja lateral que no cabe en la columna lateral de su página ocupa la de la página siguiente; si antes termina el capítulo (o el documento), cada caja que sigue esperando se compone en la columna lateral de una página posterior al texto, en el orden de sus vallas, y la composición lo avisa (afterText; hasta postext 1.24 las cajas posteriores a la primera de esas páginas se perdían).
columnsnumber1Cuántas columnas contiguas ocupa una caja flotante (placement 'auto', 'top' o 'bottom', con span: 'column'), como hace placement.columns con una figura: el recuadro de una noticia sobre tres de las cinco columnas de un periódico. Tantas columnas como tiene la página, o más, la convierten en una caja a todo el ancho. Una caja compuesta en el flujo ('here') se queda en su columna. Se puede sobrescribir en cada instancia con el atributo columns. Desde postext 1.18.
placement'here' | 'auto' | 'top' | 'bottom' | 'fixed''here'Dónde va la caja. 'here' la deja en línea en el flujo; 'top' / 'bottom' la hacen flotar como un recurso ('auto' toma la primera banda que quede libre, la cabecera o el pie) — sale del flujo donde aparece y ocupa la primera banda libre en ese punto o después (el pie de la página actual, o la cabecera / el pie de la siguiente página que abre el flujo), y el texto que la sigue rellena la página a su alrededor; 'fixed' la ancla a coordenadas de página mediante fixed, fuera del flujo de columnas. Ver la sección del contenedor para los detalles. Se puede sobrescribir por instancia con el atributo placement.
sideAtColumnEnd'before' | 'after''before'Dónde se coloca un recuadro lateral (span: 'side') cuando el texto que sigue a su valla no continúa en la misma columna: la columna ya no tiene sitio para él, o las reglas de corte lo llevan más allá (un párrafo que las reglas de viudas y huérfanas mueven entero, un encabezado que va con su texto). 'before' lo deja en su valla, en esa página, junto al texto anterior, subiendo desde el pie de la columna si no cabe debajo de la valla: el sitio de una glosa escrita después del pasaje que explica. 'after' lo pone a la altura de la primera línea del texto que sigue a la valla, en la columna lateral de la página donde continúa ese texto: el sitio de un número de línea o de un ladillo escrito antes de su línea. Cuando el texto continúa en la misma columna, los dos valores ponen el recuadro en su valla. Un recuadro al que no sigue nada en su capítulo se queda con el texto anterior en los dos casos, y los recuadros laterales con valla uno tras otro conservan su orden. Hasta postext 1.4 todos los recuadros laterales se comportaban como 'before', que sigue siendo el valor por defecto: un estilo para glosas mantiene sus recuadros en la página del pasaje que explican.
fixedPosición de una caja 'fixed': un ElementAnchor (to: 'container' = el área de contenido de la página, reflejada en las páginas pares; 'page' = la caja de corte; 'bleed' = la caja de sangre; edge: uno de los nueve bordes del contenedor) más un offset opcional (dimensiones x / y).
floatBarrierbooleanfalseConvierte la caja en una barrera de flotantes: toda figura o tabla referenciada antes se coloca antes que ella — en los huecos libres de la página, o en páginas abiertas por delante de la caja —, de modo que ningún flotante escapa más allá de la caja que cierra el capítulo (normalmente un resumen de «puntos clave»). Las aperturas de capítulo, los :::part y el final del documento son siempre barreras.
Una caja span: 'page' en una página a varias columnas corta la banda bajo el texto que la precede; una figura a todo el ancho referenciada antes toma ese corte primero: el texto se nivela, la figura queda justo donde terminó y la caja sigue debajo (o pasa a la página siguiente cuando ya no cabe). Una figura demasiado alta para seguir al texto nivelado abre la página siguiente, con la caja tras ella, y la banda que deja sigue terminando nivelada. Una caja divisible (keepTogether: false) se abre bajo el texto y la figura con los elementos que caben, y el resto continúa en la página siguiente.
width'fill' | 'auto''fill''fill' ocupa todo el ancho disponible; 'auto' se ajusta al título (uso como etiqueta) e ignora los hijos.
backgroundEnabled / backgroundboolean / ColorValuetrue / #f4f4f4Relleno de la caja.
border{ enabled, color, width }false, #cccccc, 0.5ptContorno de la caja, trazado por dentro de su borde, como el de un elemento de caja (véase Elementos de caja).
borderRadiusDimension0Radio de las esquinas del fondo / borde (limitado a la mitad del ancho y del alto de la caja). La franja lo sigue: en una caja redondeada se recorta al marco redondeado, como CSS recorta un border-left a border-radius. La pestaña label conserva las esquinas rectas.
padding{ top, right, bottom, left }0.75em cada unoMargen interior entre el borde de la caja y su contenido. Los valores en em son relativos al tamaño del cuerpo del aviso.
stripe{ enabled, side, width, color }false, 'left', 1.5em, color principalFranja sólida a lo largo de un lado. Una franja 'left' / 'right' estrecha el contenido; una franja 'top' lo desplaza hacia abajo. 'left' y 'right' son lados del flujo del texto (en un libro de derecha a izquierda 'left' es la derecha del pliego); 'start' y 'end' siguen la dirección de la propia caja, de modo que un :::callout{dir=ltr} en un libro árabe pone a su izquierda una franja 'start'. En una caja con borderRadius sus esquinas exteriores se redondean con las del marco (hasta postext 1.4 quedaban rectas y asomaban por fuera del redondeo).
icon{ kind, glyph, resourceId, fontFamily, fontWeight, size, width, color, align, position, cornerSide }'none', fuente de encabezados, 400, 1.5em, color principal, 'top'Un glifo de texto (kind: 'glyph') o un recurso bitmap / SVG (kind: 'resource' + resourceId) junto al contenido. Con franja lateral el icono se centra sobre la franja; si no, reserva su propia columna (size + titleStyle.gap). align: 'center' lo centra verticalmente sobre el contenido. Una imagen de recurso se ajusta dentro del cuadrado conservando su proporción; un icono más alto que el contenido agranda la caja para contenerlo (y, con align: 'center', centra el contenido sobre él). Con width la imagen se ajusta a una caja de width × size (una tira ancha de iconos). position: 'corner' cuelga el icono de una esquina superior como una insignia, medio fuera del borde y sin ocupar sitio en el contenido; un icono ancho (width) se centra en la esquina según el ancho con que se dibuja, y en la esquina izquierda el título empieza pasada su mitad interior (hasta postext 1.4 se colocaba según su alto, de modo que una tira ancha sobresalía de la caja y tapaba el título); cornerSide elige la esquina: 'right' / 'left', o 'outer' / 'inner', que siguen la paridad de la página con márgenes simétricos (exterior = derecha en una página impar, izquierda en una par).
marker{ kind, glyph, resourceId, fontFamily, fontWeight, size, color, align, gap, rule }'none', fuente de títulos, 400, 1.5em, color principal, 'center', 0.5em, filete desactivado (0.5pt, color principal, longitud 0)Un segundo icono dibujado fuera de la caja, en una columna a su izquierda, con un rule (filete vertical) opcional entre él y la caja: la mano de «toca aquí» junto a un distintivo de autoevaluación. El marco pasa a ser [marker][rule][gap][box] y mide lo que el más alto de los tres; align los centra entre sí o los alinea arriba. rule.length es un mínimo: el filete abarca siempre al menos la altura de la caja.
titleStyle{ fontFamily, fontSize, fontWeight, italic, color, textTransform, gap, letterSpacing, indent, lineHeight }fuente de encabezados, tamaño del cuerpo, 700, false, color principal, 'none', 0.5em, 0, 0, 1.2emTipografía del título. gap es el espacio entre el título y el primer hijo (y el hueco de la columna del icono). lineHeight es el interlineado de las líneas del título, y em cuenta el tamaño del propio título; la línea base queda a 0,8 de él dentro de cada línea, como en el texto corrido, así que un título con el interlineado del texto (lineHeight: 12pt sobre una rejilla de 12 pt) deja el recuadro en un número entero de líneas y su título en la rejilla, mientras que el 1,2 em por defecto añade una fracción de línea a cada recuadro. textTransform: 'uppercase' conserva la longitud del texto. letterSpacing aplica un tracking al título (canvas letterSpacing / PDF Tc); indent lo desplaza a la derecha del borde interior de la caja. Una insignia de esquina que cuelga del lado del título (la esquina izquierda) reserva antes su propio sitio — su mitad interior más gap — de modo que el título la libra caiga en la página que caiga; indent solo añade a partir de ahí.
body{ fontFamily, fontSize, lineHeight, color, boldColor, italicColor, fontWeight, boldFontWeight, italic, smallCaps, textAlign, hyphenation, paragraphSpacing, firstLineIndent, tabStops, tabInterval }hereda de bodyText; italic / smallCaps falseTipografía de los párrafos y elementos de lista dentro de la caja. Cada campo hereda del texto de cuerpo cuando no se indica; italicColor fija el color de las cursivas (una cita destacada en cursiva con el color de la caja). fontWeight / boldFontWeight fijan el peso de los tramos normales y en negrita; italic compone la caja en cursiva, con los tramos … en redonda; smallCaps, en versalitas; tabStops y tabInterval sustituyen a los del cuerpo dentro de la caja (ver Tabulaciones). Ver Tipografía dentro de un recuadro para lo demás que toma el texto de la caja.
lists{ bulletChar, color, indent, gap, itemSpacing, bulletFontSize, bulletFontWeight }hereda de unorderedListsTipografía de las listas dentro de la caja (color, indent, gap e itemSpacing se aplican también a las listas ordenadas). bulletFontSize / bulletFontWeight componen la viñeta en la fuente del cuerpo de la caja a ese tamaño y peso (una viñeta gruesa de color).
label{ fontFamily, fontSize, fontWeight, color, background, position, height, paddingX, offset, inset, icon, rule }sin definir (sin pestaña)Una pestaña sobre el borde superior de la caja que imprime el atributo label de la valla —el número de un recuadro numerado («RECUADRO 1-1»)—. Se pega a la esquina position ('top-right' / 'top-left') con un retranqueo inset, sobresale offset por encima del borde (ese espacio forma parte del bloque, además de marginTop, y se conserva también en cabeza de columna), mide height de alto con paddingX a cada lado del texto, y puede llevar un recurso icon a su lado ({ resourceId, width, gap }, hacia el interior) y un filete rule ({ enabled, color, width }) a lo largo del borde superior desde la esquina opuesta hasta ella. Por defecto: fuente de encabezados, tamaño del cuerpo, 700, blanco sobre el color principal, 1.4em de alto, 0.6em de relleno. La pestaña es una forma propia apoyada en el marco, así que conserva las esquinas rectas sea cual sea el borderRadius de la caja.
columnGapDimension1.5emSeparación entre las columnas de un grupo :::columns dentro de la caja (véase la sección del contenedor).
marginTop / marginBottomDimension0.75em / 0.75emEspacio sobre la caja (se funde con el margen del bloque anterior) y espacio mínimo bajo ella (el espacio exacto con snapToGrid: false). Una caja flotante (placement: 'top', 'bottom' o 'auto') deja entre su banda y el texto el hueco de los flotantes, una línea del cuerpo; un marginBottom mayor fija el espacio bajo una caja en una banda superior, y un marginTop mayor el espacio sobre una caja en una banda inferior, redondeados a la rejilla con la banda. Hasta postext 1.4 una caja flotante no hacía caso de sus márgenes.
snapToGridbooleantrueCon true el flujo vuelve a la rejilla base tras la caja, de modo que el espacio bajo ella es marginBottom redondeado hacia arriba a líneas enteras de la rejilla. Con false la caja conserva su marginBottom exacto, que se funde con el margen superior del bloque siguiente — dos cajas consecutivas de ese estilo quedan exactamente a max(marginBottom, marginTop) — y el texto que la sigue puede quedar fuera de la rejilla hasta el siguiente punto de ajuste (un encabezado, el final de una lista), como tras un encabezado con headings.snapToGrid: false. Pensado para documentos hechos de cajas apiladas (fichas, formularios). Se aplica a las cajas del flujo; las cajas a ancho de página en una maquetación de varias columnas, las flotantes, las fijas y las laterales conservan la rejilla, porque las bandas de columnas y las zonas de flotantes se disponen sobre ella. Las palancas de equilibrado de columnas no cambian: una caja que cierra una columna sigue bajando hasta la última línea de la rejilla de esa columna.
keepTogetherbooleantrueCon true la caja se mantiene entera: un aviso que no cabe en el espacio restante pasa entero a la columna o página siguiente. Solo una caja más alta que una columna completa y vacía — una página entera en una caja span: 'page' — no puede mantenerse entera: se parte con las reglas de false que siguen en lugar de desbordar, empezando donde aparece, y una continuación que cabe en una columna pasa entonces entera; una caja flotante (placement: 'top' | 'bottom' | 'auto') así de alta no flota, sino que sigue en el flujo donde aparece. Con false cualquier caja puede partirse entre sus bloques hijos o entre las líneas de un párrafo o de un elemento de lista: el corte más profundo que cabe cierra la columna actual (o, en una caja span: 'page', la página, a ras del pie de las columnas) y el resto continúa al inicio de la siguiente en una caja propia — mismo marco y franja, sin icono, y sin título salvo que repeatTitle lo repita —, partiéndose de nuevo si sigue siendo demasiado alta. El texto de cada fragmento conserva, vacía, la columna que ocupa en la cabeza un icono en línea, así que la caja tiene la misma medida en todas las páginas. Un corte dentro de un elemento de lista deja la viñeta con la cabeza. El marco de cada fragmento comparte el contentIndex / containerId de la valla y registra callout.part / callout.continued. Úsalo en una caja de «puntos clave» larga de cierre junto con headings.balancing.beforeSpan, o en un estilo de nota cuyas cajas nunca deban expulsar una figura de la página. Una caja anidada (un :::callout dentro de otro) es un hijo más de su madre: un corte puede caer antes o después de ella, y dentro solo si su propio estilo permite partirla (keepTogether: false, o más alta que una columna completa), según su propio splitMinLines.
splitMinLinesnumber2Mínimo de líneas de texto que un fragmento de una caja partida (keepTogether: false, o una caja unida más alta que una columna completa) conserva a cada lado del corte. Solo protege el texto: un lado con al menos una figura, tabla, fórmula en bloque o caja anidada es válido tenga las líneas que tenga, de modo que una caja de imágenes puede dejar una sola en una página. Un corte dentro de un párrafo o de un elemento de lista sigue contando todas las líneas de cada lado (una figura o fórmula, como una línea), y además deja al menos layout.boxChildSplitMinLines líneas de ese párrafo o elemento a cada lado (dos por defecto; este mínimo si es menor, así que con 1 basta una). Con los valores por defecto, un elemento de dos o tres líneas nunca se parte y uno de cuatro solo se parte en dos y dos. Con el valor por defecto ninguna caja se parte dejando una línea de texto sola al pie de una columna o al inicio de la siguiente; si ningún corte cumple el mínimo, la caja pasa entera. (Antes de postext 1.5, un corte dentro de un párrafo solo comprobaba las líneas de todo el lado, así que un elemento de dos líneas podía partirse en una y una si otras líneas de la caja completaban el mínimo).
repeatTitlebooleanfalseRepite el título al principio de cada continuación de una caja partida, seguido de continuedSuffix («Puntos clave (cont.)»). La repetición toma el estilo del título. Una caja sin título no repite nada. Ver Marcas de un recuadro partido.
continuedSuffixstring'(cont.)'Texto tras el título repetido, en el idioma del documento (locale o, si no, el de la separación silábica), como el de una tabla partida, y unido al título igual que en ella.
continuesMarkerEnabledbooleanfalsePone continuesMarker bajo la última línea de cada parte de una caja partida que continúa, dentro de la caja.
continuesMarkerstring'Continued' / 'Continúa'Texto de ese indicador (el «(SIGUE)» de un guion), en la fuente y el cuerpo del texto de la caja, según el idioma del documento.
continuesMarkerAlign'left' | 'center' | 'right''right'Posición del indicador en el ancho interior de la caja.
continuesMarkerItalicbooleantrueCompone el indicador en cursiva.
numbering{ label, counter, numberingTemplate, resetOn, counterFormat, placement, bold, italic, suffix }sin definirCuenta las cajas de este estilo como enunciados numerados: teoremas, lemas, definiciones. Ver Enunciados numerados y demostraciones.
endMarkstring''Una marca alineada a la derecha al final de la última línea de la caja, como el '∎' o el '□' con que termina una demostración: en esa línea si cabe tras un espacio y, si no, en una línea propia. Una caja que termina en una fórmula en bloque sin número la pone como etiqueta de la fórmula. Con las matemáticas activas, los cuadrados (∎ □ ■ ▪ ◻ ▫) se dibujan con los glifos de TeX, así que salen aunque la fuente no los tenga (los archivos latin de Fontsource); con las matemáticas desactivadas se componen en la fuente del cuerpo del recuadro.

#El contenedor :::callout

Una línea :::callout{type="<id>"} abre la caja y una línea ::: a solas la cierra. La valla admite cinco atributos — type (el id del estilo), title (sobrescribe el título del estilo), span, placement y columns (sobrescriben los valores del estilo) — y el contenido intermedio se compone dentro de la caja: un título opcional y después los párrafos, listas, citas, fórmulas o recursos incrustados, cada uno con la tipografía body / lists del estilo (los encabezados conservan sus estilos habituales). Los márgenes entre hijos se funden como en el texto corrido; el interior abandona la rejilla base y el flujo vuelve a ella tras la caja garantizando al menos marginBottom por debajo (la rejilla manda; el margen es un mínimo — la misma convención que siguen los recursos). Un estilo con snapToGrid: false conserva en cambio el marginBottom exacto, y el texto tras la caja queda fuera de la rejilla hasta el siguiente encabezado o final de lista. Un encabezado inmediatamente anterior a un aviso se mantiene unido a él.

Límites de esta versión:

  • Un aviso se mantiene entero salvo que su estilo indique keepTogether: false. Cuando no cabe en el espacio restante de la columna pasa entero a la columna o página siguiente — también desde una columna vacía que las bandas de flotantes o un tope de banda han acortado, siempre que una columna completa lo alojara. Una caja más alta que una columna completa se parte en su lugar, como una divisible; solo la que ningún corte puede partir (una figura o tabla más alta que la columna, o un splitMinLines que ningún corte cumple) se coloca de todos modos y desborda; la maquetación registra entonces un aviso calloutOverflow (VDTDocument.warnings), que el sandbox lista. Un grupo :::columns se corta como la caja que lo rodea, entre sus subcolumnas (desde postext 1.25); solo se mantiene entero, y puede desbordar de la misma manera, con layout.flowColumns: false o dentro de una caja anidada. Una caja divisible deja atrás la parte que cabe — hijos enteros, o las líneas de un párrafo hasta splitMinLines a cada lado (basta una figura, tabla o fórmula en bloque en un lado) — y continúa en una caja sin icono en la columna o página siguiente, sin título salvo que el estilo lo repita y, si se quiere, con un indicador bajo la parte que deja (ver Marcas de un recuadro partido).
  • Los flotantes ceden ante una caja indivisible. Cuando el bloque que sigue a la referencia de una figura es un aviso keepTogether, no se toma un hueco que dejaría a la caja sin ninguna columna de la banda actual donde caer (la columna de la referencia o una vacía posterior, que antes del flotante la alojaba): la figura pasa a su siguiente hueco, normalmente la página siguiente, y la caja sigue en el flujo — como la compondría un cajista, en lugar de expulsar la caja de la página y dejar la columna con la figura sola.
  • span: 'page' en una disposición multicolumna convierte la caja en un bloque a ancho de página: se compone al ancho completo del área de contenido y divide la página en bandas de columnas — las columnas de texto que hay encima se cierran en la línea de corte, la caja ocupa su propia columna a todo el ancho y debajo se abre una banda nueva de columnas de texto, de modo que el flujo continúa bajo la caja en todas las columnas. Donde las columnas están niveladas — al inicio de una página, justo debajo de un encabezado de apertura con span: 'page', justo debajo de otro bloque a ancho de página o justo debajo de una banda de flotantes superior — la caja simplemente corta ahí. Si llega a mitad de página, con las columnas desiguales, se compone como lo haría un cajista: el texto que hay encima se corta nivelado en todas las columnas (el motor repite la colocación con las columnas de la banda acortadas al mismo número de líneas de rejilla, de modo que el texto desborda de columna en columna de forma natural y siguen aplicándose todas las reglas de huérfanas, viudas y encabezados unidos a su texto), la caja ocupa el ancho de la página y las columnas continúan debajo. El corte cuesta un par de pasadas de colocación adicionales; cuando la línea de corte no dejaría sitio para la caja más el mínimo de líneas viudas de cuerpo por debajo, o ninguna disposición encaja tras unos pocos intentos, la caja pasa al inicio de la página siguiente. El texto de encima respeta el corte: un párrafo que no puede empezar en las pocas líneas que le quedan a una columna bajo una figura pasa a la columna siguiente (la figura queda sola en su columna), y cuando un bloque aún pasaría del corte, el corte se baja una línea en lugar de quedarse donde termina ese bloque. Una caja partida que abre la banda también se corta ahí, de modo que su resto nunca pasa del corte. Con headings.balancing.beforeSpan (el valor por defecto) la banda que deja se corta nivelada tras ella — como la banda de cierre de un capítulo — y, cuando el estilo permite partirla (keepTogether: false), la parte de la caja que cabe bajo las columnas niveladas cierra la página y el resto abre la siguiente; con beforeSpan: false la página que deja simplemente se equilibra como siempre, sin forzar un salto de página. Un encabezado justo antes de un bloque a ancho de página no viaja con él. En disposiciones de una columna span: 'page' es simplemente en línea.
  • placement: 'fixed' saca la caja del flujo: se compone (width: 'auto' se ajusta al título; 'fill' toma el ancho de la columna de texto bajo el punto de anclaje) y se fija a la página en la que aparece en el flujo, en la posición que describen fixed.anchor / fixed.offset — por defecto la esquina inferior izquierda del área de contenido. Las columnas de texto que cubre ceden esa zona (recortada por abajo, o por arriba cuando la columna aún está vacía), exactamente como una banda de flotantes; cuando la zona ya contiene texto, un flotante o un bloque a ancho de página, la caja pasa a la página siguiente. Una caja fija que cierra el capítulo (el bloque siguiente es una apertura de capítulo, un :::part, una caja barrera de flotantes o el final del documento) nivela primero las columnas que quedan encima (headings.balancing.trailing), de modo que una página de cierre corta termina nivelada con el distintivo debajo. La caja y sus hijos viven en page.floats y se pintan fuera del recorte de columna en todos los backends.
  • placement: 'top' | 'bottom' hace flotar la caja como un recurso: sale del flujo donde aparece y toma la primera banda libre a partir de ese punto — el pie de la página actual ('bottom'), o la cabeza / el pie de la siguiente página que abre el flujo — al ancho de la columna (span: 'column') o al ancho completo del área de contenido (span: 'page'); el texto que la sigue rellena la página que dejó. Su marco y sus hijos van a page.floats, como los de una caja fija. Una caja flotante que encabeza una página nueva se coloca antes que las figuras que esperan esa página, y una figura citada en una página anterior que entonces cabe bajo ella toma el resto de esa página aunque quedaran menos de tres líneas de texto (una página galería: caja más figura, sin texto entre ambas). Una caja span: 'side' nunca flota: se apila junto al texto sea cual sea su placement. Con columns mayor que 1 (en el estilo o como atributo de la valla, desde postext 1.18), una caja span: 'column' ocupa ese número de columnas contiguas: la cabeza de una serie de columnas vacías que empiezan a la misma altura, o el pie de la columna en curso y de las vacías que la siguen, como en :::callout{placement="top" columns="2"}.
  • width: 'auto' se ajusta solo al título; los hijos se ignoran.
  • Un :::callout anidado dentro de otro aviso es una caja propia: se compone con su propio estilo (fondo, borde, radio, relleno, franja, título, icono, marcador, pestaña, tipografía) al ancho interior completo de su caja madre y se apila como un hijo más, con su marginTop / marginBottom colapsando con los vecinos. Su span y su placement (de la valla o del estilo) se ignoran —una caja anidada siempre fluye dentro de su madre—, igual que floatBarrier y snapToGrid. Las cajas se anidan a cualquier profundidad y pueden ir dentro de un grupo :::columns (cada una entera, en una columna). Cuando la caja madre se parte, el corte cae antes o después de una caja anidada, o dentro de ella si su estilo permite partirla; cada fragmento vuelve a dibujar los marcos que atraviesa el corte, y una caja anidada que continúa del fragmento anterior pierde su título y su icono, como una continuación de primer nivel.
  • Un grupo :::columns{count=N} … ::: entre los hijos compone esos hijos en N columnas de igual ancho, separadas por columnGap, dentro de la caja: la secuencia se corta por los límites de bloque o de línea que mejor nivelan las columnas (un párrafo o elemento de lista cortado a medias sigue en la cabeza de la columna siguiente sin su viñeta), cada columna empieza en la parte superior del grupo y el grupo mide lo que la columna más alta; los hijos posteriores recuperan el ancho completo. Una caja que se parte (keepTogether: false, o más alta que una columna) también corta dentro de un grupo, entre sus columnas: un grupo en serpentina llena sus columnas por turno y sigue en el fragmento siguiente, y uno paralelo (breaks) sigue corriente a corriente (desde postext 1.25; ver Formato del documento › :::columns). Un gap en la valla sustituye a columnGap para ese grupo, y rule traza un filete a lo largo de cada medianil. Sirve para un resumen de puntos clave a dos columnas o para las tablas de un recuadro ancho puestas lado a lado.
  • El sexto atributo de la valla, label, se imprime en la pestaña label del estilo (véase arriba): :::callout{type="recuadro" label="RECUADRO 1-1" title="La regla del octeto"}; sin estilo de pestaña el atributo se ignora.

En el VDT la caja es un bloque marco de type: 'callout' cuya decoración (fondo, franja, icono, título) vive en designOverlay, seguido de sus bloques hijos en la misma columna; el marco y cada hijo llevan el containerId de la valla. Una caja anidada es un marco type: 'callout' propio entre los hijos, seguido de sus bloques; conservan el containerId de la valla de primer nivel (la colocación y el equilibrado siguen viendo una sola unidad) y añaden calloutPath, los identificadores de contenedor de las vallas anidadas que los rodean, de la más externa a la más interna (el de un marco anidado es la última entrada). El PDF etiquetado da a cada caja anidada un Div dentro del de su madre. Las imágenes de icono se resuelven como las de los recursos: el registro de imágenes del canvas, la opción resourceImageUrl del HTML y el proveedor resourceBytes del PDF.

const resolved = resolveCalloutStylesConfig(config.calloutStyles, resolvedBodyText, resolvedHeadings, resolvedUnorderedLists, config.locale);
// => cada campo heredado se rellena desde las secciones resueltas; el locale
//    opcional elige el idioma de las cadenas de continuación
 
const minimal  = stripCalloutStylesDefaults(config.calloutStyles);
// => undefined para el `note` por defecto; se eliminan los valores estáticos por defecto

#Enunciados numerados y demostraciones

Un estilo con numbering cuenta sus cajas, como el paquete amsthm de LaTeX cuenta los entornos de teorema (desde postext 1.19). Cada caja imprime su rótulo y su número —«Teorema 2.» al principio de su primer párrafo—, y el title de la valla sigue al número entre paréntesis: :::callout{type="theorem" title="Bradley–Terry"} empieza con «Teorema 2 (Bradley–Terry).». Una caja abierta con un identificador ({#thm:main}) es destino de referencias cruzadas, que imprimen «Teorema 2» (:ref{id="thm:main"}), y \ref{thm:main} o style=number imprimen 2.

PropiedadTipoPor defectoDescripción
labelstring—La palabra que precede al número: 'Teorema', 'Lema', 'Definition'.
counterstring | falseel id del estiloEl contador que hacen avanzar las cajas. Los estilos que nombran un mismo contador lo comparten, como hace \newtheorem{lemma}[theorem]: Teorema 1, Lema 2, Teorema 3. 'equation' cuenta junto con las ecuaciones etiquetadas. false imprime el rótulo sin número (el «Demostración.» de una demostración).
numberingTemplate / resetOn / counterFormatstring / ResourceCounterReset / ResourceCounterFormat'{n}' / 'never' / 'decimal'Como los de un tipo de recurso: '{h1}.{n}' con resetOn: 'h1' numera Teorema 2.1, 2.2… por capítulo, y '{h1}.{h2}.{n}' con 'h2', por sección. Un contador que comparten varios estilos sigue la cuenta impriman lo que impriman sus plantillas. Un token admite un estilo tras dos puntos, como el de un tipo de recurso: '{h1:A}.{n}' imprime Teorema A.1 en un apéndice con letra.
placement'runIn' | 'title''runIn''runIn' abre el primer párrafo de la caja con el rótulo (una caja que empieza con una lista, una fórmula u otra caja recibe un párrafo para él); 'title' hace del rótulo el título de la caja, con su titleStyle: «Teorema 2 (Bradley–Terry)».
bold / italicbooleantrue / falseLa letra del rótulo en línea y de su sufijo, sea cual sea la del cuerpo de la caja: con un cuerpo en cursiva (body.italic), un rótulo en redonda sigue en redonda. El título entre paréntesis se compone en redonda y con el peso normal.
suffixstring'.'Se compone tras el rótulo en línea y su título.

Una demostración es un estilo con un rótulo sin número y una marca final:

calloutStyles: [
  { id: 'theorem', numbering: { label: 'Teorema' }, body: { italic: true } },
  { id: 'lemma', numbering: { label: 'Lema', counter: 'theorem' }, body: { italic: true } },
  { id: 'definition', numbering: { label: 'Definición' } },
  { id: 'proof', backgroundEnabled: false, endMark: '□',
    numbering: { label: 'Demostración', counter: false, bold: false, italic: true } },
]

En un libro compuesto capítulo a capítulo, los contadores siguen desde el capítulo anterior (LayoutContinuation.statementCounters, que rellena continuationAfter), y el esquema del libro da al ancla de cada caja numerada su rótulo (OutlineEntry.numberLabel), de modo que una referencia desde otro capítulo lo imprime.

#Tipografía dentro de un recuadro

Una caja de aviso —un recuadro, como la llaman el panel Estilos de recuadro del sandbox y el formato del documento— compone su contenido con la tipografía body y lists de su estilo; todo lo demás conserva los estilos del documento:

  • Los párrafos toman el body de la caja: fuente, cuerpo, interlineado, color, colores de énfasis, pesos, italic, smallCaps, alineación, separación silábica, sangría y espaciado entre párrafos. Un campo sin definir hereda de bodyText. Un color de énfasis heredado conserva su vínculo con la paleta, así que las negritas, las cursivas y las etiquetas de :ref de una caja cambian con colorPalette igual que fuera de ella. (Hasta postext 1.4 la negrita de una caja se quedaba en #295AA3 fuera cual fuera el color principal).
  • Las listas de viñetas toman el lists de la caja (carácter de viñeta, color, tamaño y peso del glifo, sangría, separación, espaciado entre elementos) sobre unorderedLists, y su texto es el del cuerpo de la caja. Un lists.bulletChar o un lists.color distinto del del documento (unorderedLists) sustituye la viñeta o el color de todos los niveles; uno que lo repite, o que no se define, deja a cada nivel los suyos (unorderedLists.levels), de modo que las rayas de los niveles anidados se conservan en la caja.
  • Las listas ordenadas toman lists.indent, gap e itemSpacing, y lists.color siempre que el estilo lo define, también cuando coincide con el color de viñeta del documento; un estilo que no lo define deja los números en orderedLists.color. (Hasta postext 1.4 el color solo llegaba a los números si era distinto de unorderedLists.color, así que darle justo ese color no tenía efecto). El número —su fuente, su cuerpo y su separador— viene de los orderedLists globales, porque lists solo tiene campos de viñeta: es ahí donde se da estilo a los números de una caja.
  • Los :::paragraphs dentro de una caja usan su estilo de párrafo, también en cajas anidadas. Los campos que el estilo no define heredan del bodyText del documento, no del body de la caja (ni de su cursiva ni de sus versalitas).
  • Los grupos :::columns no tienen estilo propio: todas las columnas comparten la tipografía de cuerpo y de listas de la caja, y columnGap fija la separación entre ellas.
  • Las citas toman la fuente, el cuerpo y los pesos del texto de la caja (en cursiva y en gris, como en el texto corrido) y sus versalitas. Los encabezados conservan sus estilos; las fórmulas en bloque, los ajustes de matemáticas.
  • Las figuras y las tablas conservan los estilos de pie y de tabla del documento, al ancho interior de la caja; sus pesos normal y negrita siguen los pesos del body de la caja.
  • Los chips conservan su estilo de chip; un tamaño en em se mide sobre el cuerpo del texto de la caja.
  • :::space se mide en líneas del texto de la caja (ver :::space para saber dónde se descarta).
  • Una caja anidada toma su propio estilo completo; su span, su placement, su floatBarrier y su snapToGrid se ignoran.

#Marcas de un recuadro partido

Cuando una caja se parte entre columnas o páginas (keepTogether: false, o una caja más alta que una columna), cada parte posterior a la primera empieza sin el título ni el icono y, por defecto, nada avisa al lector de que la caja continúa. Dos opciones añaden las marcas que usan un libro o un guion:

  • repeatTitle: true repite el título al principio de cada continuación, seguido de continuedSuffix — «Puntos clave (cont.)» por defecto. La repetición toma el estilo del título, así que con textTransform: 'uppercase' da el «HAMLET (CONT.)» de un guion. El icono y la pestaña de etiqueta se quedan en la primera parte.
  • continuesMarkerEnabled: true pone continuesMarker — «Continúa» en un documento en español, «Continued» en inglés — bajo la última línea de cada parte que continúa, dentro de la caja, en la fuente y el cuerpo del texto de la caja: en cursiva salvo que continuesMarkerItalic sea false, y alineado a la derecha salvo que continuesMarkerAlign diga 'left' o 'center'. El indicador ocupa sitio en la parte que cierra, y el corte se elige para que quepa.
calloutStyles: [{
  id: 'parlamento',
  keepTogether: false,
  titleStyle: { textTransform: 'uppercase' },
  repeatTitle: true,
  continuedSuffix: '(CONT.)',
  continuesMarkerEnabled: true,
  continuesMarker: '(SIGUE)',
  continuesMarkerAlign: 'center',
  continuesMarkerItalic: false,
}],
:::callout{type="parlamento" title="Hamlet"}
Un parlamento lo bastante largo para pasar del pie de la página…
:::

La parte que cierra la página termina con «(SIGUE)» y la página siguiente empieza con «HAMLET (CONT.)». Las dos son elementos de paginación: en un PDF accesible son artefactos y en el HTML se ocultan a las tecnologías de apoyo, de modo que el título se lee una sola vez. En el VDT son bloques de texto de designOverlay marcados con artifact: true.