Capítulo 4 · Parte II · O ofício
Configuração: página e diagramação
O tamanho da página, as margens e a grade de linhas de base, as colunas e seus medianizes, e os cabeços e rodapés
Em poucas palavras
Esta página reúne os ajustes da folha. Você escolhe o tamanho da página, as margens, o lado da encadernação e a grade em que as linhas de texto se apoiam. Define quantas colunas a página tem e quanto espaço fica entre elas. Também decide o que é impresso no alto e no pé de cada página, como o número da página ou o título do capítulo. É uma das nove páginas da referência de configuração.
#Página
A propriedade page controla as dimensões físicas e a aparência da página.
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
sizePreset | PageSizePreset | '17x24' | Tamanho de página predefinido. Use 'custom' para definir largura e altura explícitas. |
width | Dimension | 17 cm | Largura da página. Vem de sizePreset quando omitida; um valor explícito sempre prevalece (use sizePreset: 'custom' para tamanhos totalmente personalizados). |
height | Dimension | 24 cm | Altura da página. Vem de sizePreset quando omitida; um valor explícito sempre prevalece. |
margins | PageMargins | 2 cm em todos os lados | Espaço entre a borda da página e a área de conteúdo. Cada lado (superior, inferior, esquerdo, direito) é definido de forma independente. Com mirror: true as margens passam a ser de páginas espelhadas: left é a margem interna (do lado da lombada) e right a externa; as páginas ímpares (a página 1 é ímpar) as mantêm como foram escritas e as pares as trocam, de modo que a área de conteúdo (e com ela as colunas, as faixas de flutuantes, os contêineres de cabeçalho e rodapé e as faixas de abertura) muda de lado na página dupla. Padrão false. Veja abaixo. |
backgroundColor | ColorValue | transparent | Cor de fundo da página. |
dpi | number | 300 | Os pixels por polegada com que a diagramação trabalha: como as unidades físicas (cm, mm, in, pt) viram os seus pixels. Um bitmap sem resolução própria ocupa um pixel da diagramação por pixel da imagem e, assim, é impresso com esse número de ppi: mantenha 300 para impressão, ou dê uma resolução às imagens (Resource.bitmap.resolution, layout.bitmapResolution; veja Formato do documento › Tamanho do bitmap). O preflight verifica a resolução efetiva de cada imagem. |
cutLines | CutLinesConfig | desativado | Mostra marcas de corte nos cantos da página para o refile na gráfica. Quando ativado, o canvas cresce para incluir a área de sangria e as marcas de corte. Veja abaixo. |
baselineGrid | BaselineGridConfig | desativado | Desenha a grade de linhas de base sobre as páginas, para conferir o ritmo vertical. A diagramação se ajusta à grade quer ela seja desenhada, quer não. Veja abaixo. |
binding | 'auto' | 'left' | 'right' | 'auto' | A borda em que o livro é encadernado. 'auto' equivale a 'right' quando layout.writingMode é 'vertical-rl', quando o documento corre da direita para a esquerda (direction) ou quando a sua seção comics é lida da direita para a esquerda (um mangá, uma edição em japonês ou em chinês tradicional), e a 'left' nos demais casos. Um livro encadernado à direita abre numa página da esquerda e espelha as margens no sentido contrário. Vale para o livro inteiro: o layout próprio de um estilo de título nunca o altera. Veja Encadernação. |
#Margens espelhadas
Livros são lidos em páginas duplas, e a margem interna costuma ser diferente da externa. margins.mirror transforma as quatro margens em margens de páginas espelhadas:
{
"page": {
"margins": {
"top": { "value": 2, "unit": "cm" },
"bottom": { "value": 2.5, "unit": "cm" },
"left": { "value": 2.2, "unit": "cm" },
"right": { "value": 1.4, "unit": "cm" },
"mirror": true
}
}
}Com essa configuração, toda página ímpar tem uma margem de 2,2 cm à esquerda (a lombada) e de 1,4 cm à direita (o corte frontal); toda página par tem 1,4 cm à esquerda (o corte frontal) e 2,2 cm à direita (a lombada). Cada página diagramada traz sua própria contentArea no VDTPage, então tudo o que deriva dela (colunas, faixas de flutuantes na largura total, contêineres de cabeçalho e rodapé e faixas de abertura span: 'page') segue automaticamente a geometria espelhada. Os quadros de página e de sangria usados pelos elementos de design ancorados em 'page' / 'bleed' não são afetados: eles descrevem a folha física, não as margens.
#Encadernação
“Documentos em chinês compostos na vertical são encadernados do lado direito, e os compostos na horizontal, do lado esquerdo” (clreq §7.1.1.1). page.binding: 'right' diagrama um livro para a borda direita:
- A página 1 continua ímpar e continua sendo o recto, então
breakBefore.parity,:::pagebreak{parity}, os elementos de design comparitye toda contagem de páginas mantêm o sentido. O que muda é o lado em que fica o recto: a página da esquerda da página dupla. Um capítulo que abre num novo recto abre numa página da esquerda (clreq §7.1.3.3). - Com
margins.mirror,leftcontinua sendo a margem interna, mas são as páginas ímpares que trocam: a página 1 tem a margem interna à direita, a página 2 à esquerda. Uma coluna lateraloneAndHalfem'outer'/'inner', um flutuante girado que encosta na lombada, as margens das páginas de parte e os ícones de canto dos boxes em'outer'/'inner'seguem a mesma regra. - O documento informa isso (
VDTDocument.binding: 'right'), então um host nunca precisa ler a configuração: o Sandbox mostra suas páginas duplas como[3 | 2], com a página 1 sozinha à esquerda da lombada, e o visualizador HTML dele avança as páginas da direita para a esquerda, abrindo na ponta direita, com a seta da esquerda indo para a página seguinte.renderToHtmlno modo múltiplo dispõe a fileira da direita para a esquerda. - O PDF traz
/ViewerPreferences << /Direction /R2L >>e/PageLayout /TwoPageRight(a página 1 sozinha, depois em pares), marcado ou não. O Acrobat e o Foxit seguem essas indicações; o leitor embutido do Chrome ignora as duas.
Fólios e cabeços não mudam de lugar sozinhos: um modelo que imprime o número da página no canto externo precisa ter seus elementos de páginas ímpares e pares ajustados para a borda direita (os elementos aceitam parity).
Um livro escrito da direita para a esquerda (árabe, persa, hebraico…) também é encadernado à direita: 'auto' dá a borda direita quando a direction do documento resulta em 'rtl'. Um livro assim também espelha todo o fluxo, de modo que sua primeira coluna é a da direita, e os recuos, os marcadores de lista, os flutuantes e as notas ficam à direita; os espaços de cabeçalho e rodapé continuam físicos. Veja Composição árabe.
Uma HQ lida da direita para a esquerda também é encadernada à direita: 'auto' dá a borda direita quando a configuração tem uma seção comics cujo sentido de leitura resulta em 'rtl'. É o caso de um mangá (comics.artDirection: 'rtl') e de uma edição em japonês ou em chinês tradicional de uma HQ ocidental. Quem decide é a seção, para o livro inteiro, e não os blocos :::page de um capítulo. Veja Quadrinhos.
#Predefinições de tamanho de página
| Predefinição | Largura | Altura | Uso comum |
|---|---|---|---|
'11x17' | 11 cm | 17 cm | Livros de bolso |
'12x19' | 12 cm | 19 cm | Brochura padrão |
'17x24' | 17 cm | 24 cm | Livros técnicos, didáticos |
'21x28' | 21 cm | 28 cm | Revistas, relatórios (perto do A4) |
'broadsheet' | 375 mm | 597 mm | Jornais em formato standard (broadsheet) |
'berliner' | 315 mm | 470 mm | Jornais em formato berliner |
'tabloid' | 280 mm | 430 mm | Jornais em formato tabloide |
'compact' | 297 mm | 420 mm | Jornais em formato compacto (um standard dobrado ao meio) |
Os quatro formatos de jornal são novos no postext 1.18 e ficaram fora do desenho: uma página standard tem quase quatro vezes a área de uma de 21 × 28. Costumam ser compostos com o layout 'multiple'; seis colunas são comuns num standard, e cinco num tabloide.
#Grade de linhas de base
A grade de linhas de base é o ritmo do texto corrido: linhas separadas por uma entrelinha do corpo, contadas a partir do topo da área de conteúdo. A diagramação a usa quer ela seja desenhada, quer não: títulos, fins de lista, boxes, figuras e fórmulas destacadas devolvem o texto à grade (a menos que o próprio snapToGrid deles esteja desligado), e assim as linhas de colunas vizinhas continuam alinhadas. enabled só desenha as linhas, no canvas, no PDF e nas visualizações do Sandbox, para conferir esse ritmo; ligá-lo ou desligá-lo não move nada. As linhas cobrem apenas o texto real da página (da primeira linha de texto à última), então faixas de flutuantes, páginas em branco de paridade e o espaço vazio no fim não mostram grade.
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
enabled | boolean | false | Se as linhas da grade são desenhadas (canvas e PDF). Afeta só o desenho: a diagramação é a mesma nos dois casos. |
color | ColorValue | #cccccc | Cor das linhas da grade. |
lineWidth | Dimension | 0.5 pt | Espessura das linhas da grade. |
page: {
baselineGrid: { enabled: true, color: { hex: '#e0e0e0', model: 'hex' } }
}#Marcas de corte
Quando ativadas, o canvas cresce para incluir uma área de sangria, e o motor desenha marcas de corte em cada canto para a produção gráfica. O PDF dá a cada página uma TrimBox e uma BleedBox; um arquivo PDF/X as tem mesmo sem marcas de corte. No Sandbox, elas são definidas em Exportação › Preparação para impressão.
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
enabled | boolean | false | Se o canvas cresce com a sangria e desenha as marcas de corte. |
bleed | Dimension | 3 mm | Área extra em volta da página, usada como sangria de impressão. |
markLength | Dimension | 5 mm | Comprimento de cada marca de corte. |
markOffset | Dimension | 3 mm | Distância entre a borda de refile e o início de cada marca de corte. Uma marca nunca começa dentro da sangria: quando bleed é maior, a marca começa na borda da sangria. |
markWidth | Dimension | 0.25 pt | Espessura das marcas de corte. |
color | ColorValue | #000000 | Cor das marcas de corte no canvas (a visualização na tela). O PDF sempre as pinta em cor de registro (veja abaixo). |
A folha cresce bleed + markOffset + markLength em cada lado, e a página refilada fica no meio dela. Cada canto do refile recebe duas marcas de comprimento markLength, cada uma alinhada com uma das bordas que se encontram ali. Uma marca começa markOffset fora do refile, ou na borda da sangria quando bleed é o maior dos dois, para que nenhuma marca fique sobre arte que entra na sangria. Com os padrões (3 mm de sangria, 3 mm de afastamento), as marcas vão de 3 a 8 mm fora do refile, e uma faixa em branco de 3 mm de largura contorna a folha por fora delas. cropMarkSegments(page, doc.config.page, doc.trimOffset) devolve as oito marcas de uma página em pixels da página, as mesmas que os renderizadores canvas e PDF desenham. O terceiro argumento é a posição do refile dentro da folha, o valor a partir do qual o TrimBox do PDF é escrito; se omitido, é calculado a partir de cutLines da mesma forma.
Nada além das marcas é impresso fora da sangria. Tudo o que a página pinta, incluindo os elementos de design ancorados em 'page' ou 'bleed', é recortado na caixa de sangria no canvas, no PDF e na saída HTML, como faz uma exportação de DTP: uma faixa ou uma imagem colocada de propósito além da sangria é cortada na borda da sangria, onde o refile a perderia de qualquer forma. Até o postext 1.4, um elemento assim passava por cima das marcas até a borda da folha.
No PDF (postext-pdf), a MediaBox de cada página é a folha inteira. A página também traz uma TrimBox, a página refilada, e uma BleedBox, o refile mais a sangria, que as ferramentas de imposição e de preflight leem. As marcas são pintadas em cor de registro, a separação /All, e por isso saem em todas as chapas. Isso vale qualquer que seja o espaço de cor em que o PDF é escrito (RGB, escala de cinza ou CMYK): um preto comum chegaria à gráfica como preto composto ou apenas na chapa do preto. color só se aplica ao canvas.
#Numeração
O bloco page.pageNumbering controla como os rótulos de página são formatados e onde o contador começa. Ele define apenas o padrão do documento inteiro; para reiniciar a numeração no meio do documento (por exemplo, elementos pré-textuais em algarismos romanos passando a capítulos em decimais a partir de 1), use a diretiva :::numbering (veja Formato do documento → Diretivas).
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
format | 'decimal' | 'lower-roman' | 'upper-roman' | 'lower-alpha' | 'upper-alpha', ou um estilo do Leste Asiático | 'decimal' | Estilo numérico usado nos rótulos de página. Os estilos do Leste Asiático ('trad-chinese-informal' numera as páginas 一, 二, 三) estão listados em Grafias dos formatos de numeração. |
startAt | number | 1 | Valor numérico atribuído à primeira página, qualquer que seja o formato. format: 'lower-roman', startAt: 1 gera i, ii, iii, …; format: 'decimal', startAt: 17 gera 17, 18, 19, …. |
O rótulo calculado fica guardado em cada VDTPage como pageLabel e é o valor em que o marcador {pageNumber} de cabeçalho e rodapé se resolve. Os PDFs emitem uma árvore numérica /PageLabels, para que o indicador de página e a navegação “Ir para a página” do Preview e do Acrobat correspondam exatamente aos rótulos impressos. Um estilo para o qual o PDF não tem código (numerais chineses, algarismos circulados e de largura total) é escrito página por página, e assim o leitor também mostra 一, 二, 三.
Grafias dos formatos de numeração
Três ajustes escolhem um formato de numeração, e cada um ganhou a sua própria grafia: os rótulos de página (page.pageNumbering.format e :::numbering{format=…}) dizem lower-roman, as listas numeradas (orderedLists.numberFormat) dizem arabic para decimal, e os tipos de recurso (counterFormat) dizem roman-lower. Todos aceitam todas as grafias abaixo, então um formato copiado de um ajuste funciona nos outros. Os nomes não diferenciam maiúsculas de minúsculas; as formas de um caractere, sim (i e I são diferentes).
| Formato | Imprime | Grafias aceitas |
|---|---|---|
| Decimal | 1, 2, 3 | decimal, arabic, 1 |
| Romano minúsculo | i, ii, iii | lower-roman, roman-lower, i |
| Romano maiúsculo | I, II, III | upper-roman, roman-upper, I |
| Letras minúsculas | a, b, c | lower-alpha, alpha-lower, lower-latin, a |
| Letras maiúsculas | A, B, C | upper-alpha, alpha-upper, upper-latin, A |
| Numerais chineses, simplificado | 一, 十二, 一百零一 | simp-chinese-informal, 一 num documento em chinês simplificado |
| Numerais chineses, tradicional | 一, 十二, 一萬 | trad-chinese-informal, cjk-ideographic, 一 num documento em chinês tradicional |
| Numerais financeiros chineses, simplificado | 壹, 壹拾贰, 壹佰贰拾 | simp-chinese-formal, 壹 num documento em chinês simplificado |
| Numerais financeiros chineses, tradicional | 壹, 壹拾貳, 壹佰貳拾 | trad-chinese-formal, 壹 num documento em chinês tradicional |
| Algarismos chineses | 一二〇, 二〇二六 | cjk-decimal, 〇 |
| Troncos celestes | 甲, 乙, 丙 … 癸 | cjk-heavenly-stem, 甲 |
| Ramos terrestres | 子, 丑, 寅 … 亥 | cjk-earthly-branch, 子 |
| Numerais japoneses | 一, 十二, 百一, 一万一 | japanese-informal, 一 num documento em japonês |
| Numerais japoneses formais | 壱, 壱拾弐, 壱百 | japanese-formal, 壱 |
| Hiragana, ordem gojūon | あ, い, う … ん, ああ | hiragana, あ |
| Katakana, ordem gojūon | ア, イ, ウ … ン, アア | katakana, ア |
| Hiragana, ordem iroha | い, ろ, は … す, いい | hiragana-iroha, い |
| Katakana, ordem iroha | イ, ロ, ハ … ス, イイ | katakana-iroha, イ |
| Circulados | ①, ②, ③ … ㊿ | circled-decimal, ① |
| Algarismos de largura total | 1, 2, 3 | fullwidth-decimal, 1 |
| Algarismos arábico-índicos | ١, ٢, ٣ … ١٠ | arabic-indic, ١ |
| Algarismos persas | ۱, ۲, ۳ … ۱۰ | persian, urdu, ۱ |
| Letras árabes, ordem abjad | أ, ب, ج, د, هـ … غ, أأ | abjad, أبجد |
| Letras árabes, ordem alfabética | أ, ب, ت, ث … ي, أأ | hijai, arabic-alpha, arabic-alphabetic, أبتث |
| Numerais abjad | ا, ب … يا (11), غتمو (1.446) | arabic-abjad |
| Numerais abjad, valores magrebinos | ص (60), ض (90), ش (1.000) | arabic-abjad-maghrebi, maghrebi-abjad |
Os estilos do Leste Asiático mantêm seus nomes de CSS Counter Styles nos três ajustes. Os numerais chineses informais escrevem 十 de 10 a 19 sem um 一 à frente (十二, mas 一百一十), um único 零 para uma sequência de zeros dentro do número (一百零一, 一千零五十), e 万 ou 萬 para dez mil, 亿 ou 億 para cem milhões (一万零一十). Só cjk-decimal usa 〇, algarismo por algarismo, como se escrevem os anos (二〇二六, GB/T 15835—2011). Os troncos param em 10, os ramos em 12 e os algarismos circulados em 50; além disso, o número sai em algarismos. 一 e 壹 seguem a escrita do locale do documento: tradicional para zh-Hant, zh-TW ou zh-HK, simplificada nos outros casos. Algumas edições antigas escrevem 101 como 一百一, sem 零; o Postext não imprime essa forma.
Os estilos japoneses (desde o postext 1.16) também seguem as CSS Counter Styles. japanese-informal escreve 十 sem um 一 à frente e sem 零 para uma casa vazia (百一, 千十), e japanese-formal os 大字 壱 弐 参 拾 百 阡, com 壱 mantido antes de cada unidade (壱拾, 壱百). O CSS para os dois em 9.999; o Postext continua em grupos de quatro algarismos com 万 億 兆 (no formal, 萬 億 兆), e cada grupo mantém seu 一 antes de uma unidade: 一万一 é 10.001, 一億一万 é 100.010.000. Num documento em japonês (ja, ja-JP…), 一 significa japanese-informal, então 第{1:一}章 imprime 第百一章 ali e 第一百零一章 num documento em chinês; 壹 continua sendo os numerais formais chineses. As séries de kana são as listas do CSS: 48 kana na ordem gojūon (incluindo ゐ e ゑ) e 47 na ordem do poema iroha; depois do último, continuam com dois kana (ああ, いい), e não têm zero, então um item numerado 0 imprime 0. Os algarismos kanji posicionais (二〇二六), a forma dos anos e dos fólios, são cjk-decimal.
Os estilos árabes mantêm o nome do CSS quando o CSS tem um (arabic-indic, persian; urdu e maghrebi-abjad, das Ready-made Counter Styles do W3C, são lidos como persian e arabic-abjad-maghrebi). arabic mantém o sentido antigo, os algarismos europeus. arabic-abjad escreve os numerais abjad aditivos do árabe clássico e da foliação de manuscritos, do valor mais alto para o mais baixo: 11 é يا, 1.446 é غتمو, e a contagem dos milhares vem antes de غ (2.000 بغ, 1.002 غب); acima de 999.999, o número sai em algarismos. A nota do W3C usa esse nome para uma série de 28 letras em que 11 é ك; o Postext chama essa série de abjad, a numeração por letras dos itens de lista na ordem abjad (أ، ب، ج، د، هـ), e de hijai a ordem alfabética (أ، ب، ت، ث). As duas escrevem a primeira letra com sua hamza (أ), e um heh que ficaria isolado como هـ, com um tatweel, para que nenhuma seja lida como os algarismos ١ e ٥; depois de 28, elas dobram, como faz lower-alpha (أأ, أب). Os valores magrebinos seguem o mnemônico صعفض قرست ثخذ ظغش (ص 60, ض 90); a lista do W3C troca ص e ض. Um único أ não distingue as duas séries de letras, então seus tokens são as quatro primeiras letras de cada uma: {1:أبجد}, {1:أبتث}. Os algarismos do próprio documento são definidos com numerals.
As outras grafias servem para configurações que ninguém verifica por tipo: predefinições em JSON e JavaScript puro. Os tipos do TypeScript continuam nomeando só a grafia própria de cada ajuste (a que o Sandbox escreve e resolveAllConfig devolve, incluindo os nomes do Leste Asiático), então um PostextConfig tipado fica nela, e outra grafia exige um cast.
// JavaScript ou uma predefinição JSON (em TypeScript, a grafia própria de cada ajuste)
orderedLists: { numberFormat: 'decimal' }, // igual a 'arabic'
page: { pageNumbering: { format: 'roman-lower' } }, // igual a 'lower-roman'
resourceTypes: [{ id: 'plate', counterFormat: 'upper-roman', … }], // igual a 'roman-upper'resolveAllConfig converte os formatos de lista e de página para a grafia do próprio ajuste ('decimal' vira 'arabic' em orderedLists, 'roman-lower' vira 'lower-roman' em page.pageNumbering), e stripConfigDefaults descarta uma grafia do valor padrão. Os painéis do Sandbox mostram cada um dos três ajustes na sua própria grafia, qualquer que seja a usada na configuração. Qualquer outro valor (roman, 01, um erro de digitação) numera em decimal em vez de imprimir undefined, e é informado como um aviso de configuração. Os modelos de numeração de títulos aceitam os mesmos nomes depois dos dois-pontos ({1:roman-upper} é {1:I}), ao lado do seu próprio {1:01} com zeros à esquerda.
#Diagramação
A propriedade layout controla como as colunas se dispõem dentro da área de conteúdo.
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
layoutType | 'single' | 'double' | 'oneAndHalf' | 'multiple' | 'double' | Disposição das colunas. Veja abaixo os detalhes de cada tipo. |
columnCount | number | 3 | Em quantas colunas iguais um layout 'multiple' divide o corpo: um número inteiro de 3 a 8. Um valor fora desse intervalo, ou que não seja inteiro, é limitado e informado (veja Tipos de layout). O layout 'multiple' próprio de um estilo de título usa o número do documento, a menos que defina o seu. Desde o postext 1.18. |
gutterWidth | Dimension | 0.75 cm | Espaço horizontal entre as colunas. Só se aplica a layouts de várias colunas. |
sideColumnPercent | number | 33 | Largura da coluna lateral como porcentagem da área de conteúdo. Qualquer valor que deixe alguma largura para as duas colunas é usado como foi escrito; um que não deixe é limitado, e o build informa isso (veja Tipos de layout). Só se aplica ao layout 'oneAndHalf'. |
sideColumnRole | 'text' | 'floats' | 'text' | O que a coluna lateral recebe: texto corrido (que flui para ela depois da coluna principal), ou apenas os recursos e boxes colocados com span: 'side', uma coluna de margem só para flutuantes. Apenas 'oneAndHalf'. Com 'text', um parágrafo que passa de uma coluna para a outra é quebrado de novo para a largura da coluna em que continua; até o postext 1.4, ele mantinha as linhas da coluna em que tinha começado, e uma linha composta para a coluna principal ultrapassava a lateral, que a cortava. |
sideColumnSide | 'right' | 'left' | 'outer' | 'inner' | 'right' | Borda da área de conteúdo em que fica a coluna lateral. 'outer' / 'inner' seguem a paridade da página quando as margens são espelhadas (a borda externa de um recto é a direita; a de um verso, a esquerda). Apenas 'oneAndHalf'. |
columnRule | ColumnRuleConfig | desativado | Fio opcional desenhado entre as colunas. Veja abaixo. |
fitFiguresToPage | boolean | false | Reduz uma figura (bitmap ou SVG) cuja imagem, legenda e nota ficariam mais altas que a área de conteúdo até que caibam nela (uma imagem com zona segura, Resource.safeArea, primeiro é recortada dentro dela na largura total, e só é reduzida se ainda não couber), e compõe menor uma figura inline um pouco alta demais para o espaço que resta na coluna (até a metade da largura, com a legenda mantendo a medida da coluna), para que ela fique junto do seu texto. Uma imagem reduzida se posiciona no seu espaço conforme placement.align. O visualizador HTML liga essa opção, já que suas páginas têm só a altura da tela; as páginas impressas são dimensionadas para as suas figuras. |
bitmapResolution | 'document' | 'file' | number | 'document' | Como um bitmap sem bitmap.resolution próprio ganha o seu tamanho natural de impressão. 'document' lê os seus pixels a page.dpi; um número é o ppi de todos esses bitmaps (300: uma imagem de 2400 px tem 203,2 mm de largura, qualquer que seja o dpi da página); 'file' usa a resolução que o arquivo informa (bitmap.fileResolution), em que 72 e 96 contam como não informados, e, sem ela, page.dpi. A coluna continua limitando a imagem, e uma imagem menor nunca é ampliada. Veja Formato do documento › Tamanho do bitmap. Desde o postext 1.24. |
floatShrink | FloatShrinkConfig | mode: 'never' | O padrão do documento para o placement.shrink (mode: 'never', 'page' ou 'slot') e o placement.minScale (minScale, 0.7 quando não definido) de uma imagem flutuante: reduzi-la, mantendo as proporções, ao espaço da sua posição em vez de levá-la adiante (veja Formato do documento › Posicionamento). O posicionamento do recurso e depois o defaultPlacement do seu tipo têm precedência. fitFiguresToPage limita toda figura à área de conteúdo; floatShrink olha a faixa que o flutuante ocuparia de fato: sob uma abertura, ao lado de outros flutuantes ou sobre notas de rodapé. Desde o postext 1.24. |
wrap | TextWrapConfig | minTextWidth: 12em, minLinesBeside: 2, defaultWidth: 0.45 | Texto composto ao lado de uma imagem ou caixa mais estreita que a coluna (placement.wrap, o wrap de uma caixa): gap, o espaço entre o elemento e o texto (uma linha do corpo quando não definido); minTextWidth, a medida mais estreita que o texto ao lado pode ter, um comprimento ou uma parte da coluna (mais estreita: o elemento ocupa a faixa inteira, com um aviso textWrap); minLinesBeside, o mínimo de linhas que vale a pena compor ao lado; defaultWidth, a parte da coluna que um elemento contornado ocupa quando não define width. Veja Formato do documento › Contorno de texto. Desde o postext 1.24. |
floatsAtCitingPage | boolean | false | O padrão de placement.citingPage: um flutuante 'top' ou 'auto' pode ocupar o topo da página (um flutuante na largura da página) ou da coluna (um flutuante de coluna) onde cai a linha que o cita pela primeira vez, em vez do primeiro espaço livre depois dessa linha; o texto acima da referência desce para baixo dele (veja Formato do documento › Posicionamento). O posicionamento do recurso e depois o defaultPlacement do seu tipo o substituem. Desde o postext 1.25. |
maxTopFraction | number | 0.7 | A maior fração da altura da coluna, de 0 a 1, que um flutuante no topo da página ou da coluna que o cita pode ocupar, junto com os flutuantes que já estão ali, para que a página guarde espaço para o seu texto (o \topfraction do LaTeX). Um flutuante que ocuparia mais vai para o seu espaço habitual. Desde o postext 1.25. |
hugClosingFloats | boolean | true | Na página que fecha um capítulo (e o documento), as figuras e tabelas na largura da página compostas abaixo da última faixa de texto sobem até ficar a um vão de flutuante dela, empilhadas na sua ordem: nada vem depois delas ali. false as deixa onde o posicionamento as colocou, de modo que um flutuante position: 'bottom' termina no pé da página também na página de fechamento, como em todas as outras (numa ficha técnica cujo contorno termina na mesma altura em todas as páginas, por exemplo). Páginas com coluna lateral nunca os movem. |
inlineResourceGap | 'around' | 'above' | 'around' | Onde um recurso inline (placement.position: 'here', incorporado com ::resource) mantém o vão de flutuante, uma linha. 'around' o mantém acima e abaixo do recurso, e o texto seguinte volta à grade de linhas de base abaixo desse vão; um título, uma lista, um boxe ou outro recurso inline logo depois compartilha o vão de baixo com o seu próprio espaço acima, valendo o maior dos dois. 'above' o mantém só acima: o texto depois do recurso recomeça na linha seguinte da grade, por mais perto que ela esteja (de nada a uma linha), como até o postext 1.4. As configurações guardadas por versões anteriores cujos capítulos incorporam um recurso são lidas com 'above', para que suas páginas não se movam (veja Pacotes escritos pelo postext 1.4 ou anterior). Uma configuração escrita em código para a 1.4 mantém o espaçamento antigo definindo ela mesma 'above', ou com pinLegacyInlineGap de postext/bundle. |
inlineResourceGapInBoxes | boolean | true | Se um recurso inline dentro de um boxe (:::callout) mantém o vão definido por inlineResourceGap, uma linha do próprio texto do boxe: acima do recurso, e também abaixo com 'around', valendo o maior entre ele e o espaço próprio do bloco seguinte. No topo ou no pé do boxe, ou de um fragmento de um boxe dividido, o espaçamento interno já separa o recurso e nenhum vão é acrescentado. false coloca o recurso logo abaixo do texto anterior e o texto seguinte logo abaixo do recurso, como até o postext 1.4. As configurações guardadas por versões anteriores cujos capítulos incorporam um recurso dentro de um boxe são lidas com false (veja Pacotes escritos pelo postext 1.4 ou anterior); em código, pinLegacyBoxResourceGap de postext/bundle faz o mesmo. |
boxChildSplitMinLines | number | 2 | Mínimo de linhas de um parágrafo ou item de lista que um corte dentro dele deixa de cada lado quando um boxe se divide (splitMinLines, em Estilos de boxe, continua contando todas as linhas do boxe de cada lado do corte). Um número inteiro, no mínimo 1. Com o padrão, um corte nunca deixa uma linha solta de um parágrafo ou item no pé de uma coluna ou no alto da seguinte; um estilo de boxe cujo splitMinLines seja menor define o limite no lugar dele. 1 permite que um corte deixe uma linha do parágrafo ou item de um lado, como até o postext 1.4. As configurações guardadas por versões anteriores cujos capítulos têm um :::callout são lidas com 1 (veja Pacotes escritos pelo postext 1.4 ou anterior); em código, pinLegacyBoxChildCut de postext/bundle faz o mesmo. |
flowColumns | boolean | true | Um delimitador :::columns fora de um boxe compõe os seus blocos em subcolunas da coluna de texto (ou ao longo da página com span="page"), e um grupo, num boxe ou no texto, é cortado entre as suas subcolunas quando não cabe, continuando na coluna ou página seguinte (veja Formato do documento › :::columns). false ignora o delimitador fora de um boxe e nunca corta dentro de um grupo, como até o postext 1.24; as configurações guardadas por versões anteriores cujos capítulos têm um delimitador :::columns são lidas com false; em código, pinLegacyFlowColumns de postext/bundle faz o mesmo. Uma seção com estilo mantém o valor do documento. Desde o postext 1.25. |
floatsUnderOpener | boolean | true | Sob uma abertura de largura de página (um nível ou um estilo de título com span: 'page') composta sobre duas ou mais colunas de texto, o topo da coluna da própria abertura, logo abaixo da sua faixa, é um espaço para um flutuante 'top' ou 'auto', na altura dos topos das outras colunas: um boxe flutuante colocado logo depois da abertura, ou um recurso incorporado ali, fica sob a abertura na primeira coluna (e em várias a partir dela com columns), e o texto da coluna começa abaixo dele. Um flutuante citado no texto continua indo depois da linha que o cita. false não oferece esse espaço, e o flutuante cai a partir da segunda coluna, como até o postext 1.24; as configurações guardadas por versões anteriores que definem um título de largura de página são lidas com false; em código, pinLegacyOpenerHeadFloats de postext/bundle faz o mesmo. Uma seção com estilo mantém o valor do documento. Desde o postext 1.25. |
writingMode | 'horizontal-tb' | 'vertical-rl' | 'horizontal-tb' | Como correm as linhas. 'vertical-rl' compõe texto chinês e japonês na vertical: caracteres de cima para baixo, cada linha à esquerda da anterior. O layout de um estilo de título o herda, a menos que defina o seu, então um apêndice horizontal pode vir depois de um livro vertical. Veja Escrita vertical. |
#Escrita vertical
Com writingMode: 'vertical-rl', uma página é diagramada como uma página horizontal girada um quarto de volta no sentido horário. O fluxo é composto num quadro tão largo quanto a folha é alta; as linhas dele são as colunas do texto vertical, lidas a partir da direita, e tudo o que o motor faz com linhas (quebra, justificação, flutuantes, notas de rodapé, regras de manter junto) funciona nesse quadro. Assim, na folha:
- Uma coluna do layout é um andar (栏):
layoutType: 'double'dá dois andares empilhados de cima para baixo, preenchidos a partir do canto superior direito;gutterWidthé o vão entre eles, e o fio entre colunas, um fio horizontal entre eles. Os andares não são equilibrados no fim de um capítulo (clreq §7.1.3.4): o equilíbrio de colunas fica desligado num documento vertical, a menos queheadings.balancing.enabledesteja definido. - O que o fluxo chama de “topo” é a borda direita da folha, onde a leitura começa: um flutuante no topo fica à direita da página, um no pé à esquerda, uma abertura na largura da página é uma faixa descendo pela borda direita, e as notas de rodapé caem na ponta esquerda de cada andar. Um elemento de design ancorado no topo da página (o design de um título, um boxe fixo) é ancorado na borda direita.
sideColumnSide'left'é o andar de cima,'right'o de baixo;'outer'e'inner'são lidos como'right'e'left'. - As margens do fluxo são as margens da folha giradas: a margem direita é o topo do fluxo, e a margem superior, a sua esquerda.
page.marginsmantêm seus nomes na folha. - Cabeços, fólios, marcas de corte e o fundo da página ficam na folha, compostos na horizontal, como o clreq descreve para livros verticais.
- Figuras e tabelas ficam em pé. Uma figura ocupa a altura do seu andar até onde a legenda permite, no máximo com a largura da página; a largura que ela toma é o espaço que usa no fluxo. A legenda é composta na horizontal abaixo dela, assim como as células de uma tabela: as duas são medidas como texto horizontal. Uma tabela é composta em pé atravessando a página, com as linhas cortadas no andar quando é mais alta que ele.
placement.aligncoloca uma figura no topo ('left'), no meio ou no pé do seu andar. Umplacement.rotatenão é aplicado onde a figura é citada pela primeira vez em texto vertical: o build informa um aviso de conteúdorotateIgnoredVertical. Uma seção horizontal do livro (um estilo de título cujolayoutdefine'horizontal-tb') gira suas figuras como pedido. - A imagem de um design (a ilustração de uma abertura, a de uma página de parte) também fica em pé. A caixa dela no fluxo é dimensionada com a largura e a altura da imagem trocadas, então
size.widthé quanto a imagem desce pela coluna, e sua largura na folha decorre das proporções. - Caracteres: Han, kana e formas de largura total ficam em pé, um em cada; palavras latinas e números são girados de lado, com suas larguras horizontais; a pontuação usa a forma vertical da fonte. Os sinais de pausa e de ponto nunca são girados: uma fonte da China continental coloca 、。,. no canto superior direito da célula e !?:; na metade direita dela, e uma fonte de Taiwan ou de Hong Kong os centraliza (
cjk.region). Os parênteses e colchetes usam suas formas verticais, e “ ” ‘ ’ em texto continental são lidos como 『』「」. Travessões, reticências e o til ondulado usam a forma vertical da fonte quando ela existe (a Noto CJK associa a de — avertjunto comfwid: um fio descendo pelo meio da célula); caso contrário, são girados com a tinta centrada no eixo da coluna. Um 破折号 (——) em texto chinês é um único fio descendo pela coluna: suas formas verticais deixariam um branco nas duas pontas de cada célula, então cada travessão é girado com a linha e esticado como no texto horizontal (veja Larguras da pontuação). Um número de no máximo dois algarismos fica em pé numa única célula, a menos que esteja numa frase latina, cujas palavras ele acompanha (veja Números no texto vertical). O ponto mediano (·) ocupa meia célula em texto continental e uma célula inteira em texto de Taiwan e de Hong Kong. Os sinais que o Unicode define em pé (× © ± § ℃ ① e similares) ficam numa célula própria, também dentro de um número:3×4é 3 e 4 de lado, com × em pé entre eles. Um apóstrofo ou um ponto mediano entre duas letras de uma palavra latina (don’t,l·l) fica na palavra, de lado. Um parágrafo latino num fluxo vertical segue as mesmas regras. Fórmulas inline, chips e amostras de cor são girados de lado com a linha. - Cada caractere é medido como é pintado: uma célula avança a sua célula linha abaixo, um trecho de lado a sua largura horizontal. O texto que fica na horizontal na folha (cabeços, fólios, legendas, células de tabela) é medido na horizontal.
- As larguras da pontuação, a pontuação pendurada e o espaço entre Han e latino valem ao longo da linha vertical como valem na horizontal. O branco antes de um glifo fica acima dele, e o branco depois, abaixo: um 、 Kaiming ocupa meia célula,
」「se comprimem em uma célula e meia, um parêntese de abertura aparado no início de uma linha começa meia célula mais acima, um 。 pendurado fica abaixo do pé da sua linha, e o espaço Han–latino é um quarto de em da coluna acima e abaixo de uma palavra de lado.:;?!mantêm uma célula inteira no texto vertical em todas as regiões. - A grade de caracteres conta caracteres ao longo da linha e linhas através da página:
charsPerLinedefine o comprimento de um andar,linesPerPagequantas linhas cabem numa página, elayoutType: 'double'dá dois andares de caracteres inteiros com uma medianiz de ems inteiros entre eles.
Para hosts que leem a diagramação: uma página vertical traz VDTPage.flow. A contentArea, as colunas, os blocos, as linhas, os flutuantes, as áreas de notas de rodapé, a faixa de abertura e as sobreposições de design de bloco dela estão em coordenadas do fluxo; width, height, header e footer estão na folha. flowToPage, pageToFlow, flowRectToPage e pageRectToFlow convertem entre os dois, e verticalOrientation(char, region) diz como um caractere fica. flow.centralBaselines dá, por família tipográfica, o eixo em que a diagramação centralizou os caracteres em pé: o centro da tinta de 中, cujo traço longo ocupa a altura da caixa do em (0,38 em acima da linha de base na Noto Serif e na Noto Sans, SC e TC igualmente), e que toda fonte chinesa, japonesa e coreana tem. Cada linha é centralizada nesse eixo: a linha de base de uma linha vertical fica meia entrelinha mais a linha de base central da família abaixo do topo da caixa da linha (a de uma linha horizontal fica a 0,8 da entrelinha para baixo), de modo que uma coluna de caracteres fica no meio do seu passo, e um fio desenhado entre duas colunas a um passo inteiro cai a meio caminho entre elas. Um texto de design vertical é composto do mesmo modo, nas suas próprias linhas. O canvas pinta ele mesmo uma página vertical; para pintar a pontuação com as formas verticais da própria fonte, um host no navegador carrega, uma vez por família, uma fonte gêmea com elas ativadas: loadVerticalAlternates(family, faces), em que faces são as fontes da família (URLs ou bytes) e seus descritores. A gêmea só é mantida quando o navegador aplica o recurso ao texto do canvas (Chrome 140 e posteriores): ele desenha 「(《 com a gêmea e com uma cópia das mesmas fontes carregada sem o recurso, no peso e no estilo das fontes dadas, e mantém a gêmea quando a tinta das duas difere. Uma chamada posterior para outras fontes de uma família cuja gêmea está em uso (o negrito depois do regular) as acrescenta a ela. O Sandbox faz isso para toda família de um documento vertical. Sem uma gêmea, os parênteses são girados em torno da caixa do em, e os sinais de pausa e de ponto continentais são movidos dentro da célula para onde as formas verticais da fonte os colocam: 、。,. para o canto superior direito (a até 0,07 em das formas verticais da Noto Serif SC), !?:; meio em para a direita e um pouco para cima (a até 0,02 em). O PDF e o HTML compõem a mesma página: veja Texto vertical no PDF e a tabela em Como a saída HTML difere do canvas e do PDF. Conferido célula por célula com o HarfBuzz (layout vertical com vert) na Noto Serif TC e SC, todo caractere de 「賈雨村」云云,宜乎?故曰!;:、。“引”‘單’…… fica a até 0,02 em dele no canvas e no PDF, e a até 0,05 em no HTML (o Chrome centraliza um glifo girado no meio entre o ascendente e o descendente da fonte, que na Noto fica 0,05 em acima do centro da caixa do em). flow.dashAdvances dá, por família, o avanço horizontal em ems de cada travessão que a página estica para preencher a célula (— – ― ⸺ ⸻ -), para um renderizador sem métricas de fonte próprias: o HTML estica o travessão com ele, como o canvas e o PDF fazem a partir das suas. Cabeços e fólios também podem ser compostos na vertical: veja Elementos de texto vertical.
#Fio entre colunas
Desenha uma linha vertical fina na medianiz para separar visualmente as colunas.
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
enabled | boolean | false | Se o fio entre colunas é desenhado. |
color | ColorValue | #cccccc | Cor do fio. |
lineWidth | Dimension | 0.5 pt | Espessura do fio. |
Abaixo de um título na largura da página (span: 'page'), o fio começa onde começa o texto das colunas, sob a faixa do título, seja a faixa pintada pela abertura padrão, seja por um design próprio. Até o postext 1.4, ele corria desde o topo do bloco de texto, atravessando a faixa.
Um estilo de título pode definir um fio próprio no seu layout (veja Estilos de título), e as páginas da sua seção desenham esse fio. Um campo que o estilo deixa sem definir assume o valor do documento, então uma seção que só muda as colunas mantém o fio do documento. Até o postext 1.4, o fio de um estilo nunca era desenhado: toda página desenhava o do documento.
#Tipos de layout
-
'single': uma coluna que ocupa toda a largura do conteúdo. Funciona melhor em páginas estreitas ou em textos densos, de parágrafos longos. -
'double': duas colunas de mesma largura. É o layout editorial clássico, que mantém a medida da linha na faixa ideal de 40 a 50 caracteres para uma leitura confortável. -
'oneAndHalf': um layout assimétrico, com uma coluna principal e uma coluna lateral mais estreita. A coluna lateral (controlada porsideColumnPercent) é ideal para notas de margem, figuras pequenas ou conteúdo de apoio. Valores entre 25 % e 40 % funcionam bem, e um canal estreito para números de linha ou marcas marginais fica em torno de 10 % a 15 %. A coluna lateral ocupasideColumnPercent% da largura do conteúdo, e a coluna principal fica com o que sobra depois da medianiz; assim, com 50 % a coluna lateral é uma medianiz mais larga que a principal. Qualquer valor é diagramado como foi escrito enquanto as duas colunas mantiverem pelo menos 1 % da largura do conteúdo; um valor que deixaria uma delas mais estreita (0 ou menos, ou um valor tão grande que a coluna principal some atrás da medianiz) é limitado ao valor mais próximo que preserve as duas, e um valor que não é número assume o padrão, 33. Nesse caso, osconfigWarningsdo documento trazem{ kind: 'sideColumnPercentClamped', path: 'layout.sideColumnPercent', value, used }(o caminho dolayoutpróprio de um estilo de título nomeia o estilo, como emheadingStyles[2].layout.sideColumnPercent, e é medido nas margens desse estilo), que o Sandbox lista no painel Verificações;collectConfigWarnings(config)devolve a mesma lista sem diagramar nada. Um layout que não seja'oneAndHalf'nunca lê o valor e nunca o reporta. ComsideColumnRole: 'floats', o texto corrido nunca entra na coluna lateral: ela vira um canal para as figuras, tabelas e boxes posicionados comspan: 'side'. Uma figura ou tabela lateral se empilha a partir do topo do canal na página que a cita primeiro (a figura marginal de um livro didático fica no alto da página mesmo quando o texto a cita mais abaixo); a que não cabe no restante do canal espera o canal da página seguinte. Um boxe lateral se empilha ao lado do texto que interrompe e, quando o restante do canal não o comporta ali, sobe até a posição mais baixa em que ainda cabe (com o pé no pé do canal) ou espera a página seguinte. Quando o texto depois do fechamento do boxe continua na página seguinte (a coluna está cheia, ou as regras de quebra levam esse texto adiante), o boxe fica no seu fechamento, ao lado do texto anterior; um estilo comsideAtColumnEnd: 'after'o alinha, em vez disso, com a primeira linha do texto depois do fechamento, no canal da página seguinte, como pedem os números de linha e os títulos marginais escritos antes da linha a que se referem. Um elemento do design de um título que fica no canal (um numeral de capítulo ancorado na margem externa) também é mantido fora da pilha (veja Altura reservada). Flutuantes e boxes comspan: 'page'continuam atravessando as duas colunas, e um flutuante de coluna complacement.captionSidepõe a legenda no canal, alinhada com a figura. Combinado com margens espelhadas esideColumnSide: 'outer', o canal fica na borda externa de todas as páginas: a coluna marginal de um livro didático. -
'multiple': de três a oito colunas iguais, tantas quantas indicarcolumnCount(padrão 3): a grade dos jornais e de muitas revistas (desde o postext 1.18). Cada coluna tem(content width − (n − 1) × gutterWidth) / nde largura. O texto passa de uma coluna para a seguinte como em um layout de duas colunas; o fio de coluna é desenhado em todas as medianizes, o balanceamento de colunas nivela todas as colunas na página que fecha um capítulo e antes de um boxe da largura da página, as notas de rodapé funcionam em todas as colunas, e figuras, boxes e títulos da largura da página atravessam a página inteira. Uma figura ou um boxe flutuante pode ocupar só algumas colunas:placement.columns(veja Tipos de recurso) e ocolumnsde um estilo de boxe. UmcolumnCountfora de 3 a 8, ou que não seja inteiro, é arredondado e limitado à contagem válida mais próxima (um valor que não é número assume 3), e osconfigWarningsdo documento trazem{ kind: 'columnCountClamped', path: 'layout.columnCount', value, used }(o caminho dolayoutpróprio de um estilo de título nomeia o estilo, como emheadingStyles[1].layout.columnCount). Um layout de outro tipo nunca lê o valor. Um estilo de título cujolayouté'multiple'usa ocolumnCountdo documento, a menos que defina o seu, de modo que um jornal composto em cinco colunas pode rodar as páginas de opinião em quatro.
#Cabeços e rodapés
As propriedades header e footer controlam os espaços de cabeçalho e de rodapé de cada página. Cabeços e rodapés são desenhados dentro das margens já existentes da página: não reservam espaço adicional nem reduzem a área de conteúdo.
Quadro do contêiner. Um elemento ancorado em 'container' é posicionado na faixa de margem entre o corpo e a borda de refile, com a largura da área de conteúdo. O contêiner do cabeçalho vai do refile superior até o topo do corpo; o do rodapé, da base do corpo até o refile inferior. Assim, as âncoras top-* do cabeçalho e bottom-* do rodapé são medidas a partir da borda de refile, enquanto as âncoras bottom-* do cabeçalho e top-* do rodapé são medidas a partir da borda do corpo. O contêiner nunca inclui a sangria nem a faixa das marcas de corte, então um cabeçalho ou rodapé fica na mesma posição na página refilada com page.cutLines ativado ou desativado. Ancore em 'page' (a caixa de refile) ou em 'bleed' para ir além da largura da área de conteúdo ou chegar à sangria.
Os espaços usam o modelo unificado de espaço de design: todo elemento tem um placement com uma anchor (no contêiner ou em outro elemento, por #id), um offset opcional e um size opcional. Os campos planos antigos align, marginFromBody, marginFromEdge e width: 'full' continuam aceitos na entrada e são migrados automaticamente para o novo formato; a descrição equivalente no novo formato está documentada abaixo.
Cada espaço contém uma lista de elementos de texto, fio e caixa. A ordem do array é a ordem de pintura (o primeiro elemento é pintado primeiro, o último fica por cima). Isso vale independentemente das âncoras: um elemento pode se ancorar em outro listado depois dele (anchor.to: '#ttl'), de modo que uma caixa de fundo pode vir primeiro e ainda assim ser posicionada em relação ao texto que fica sobre ela.
Padrões embutidos. Quando header ou footer é undefined, o postext aplica um padrão embutido razoável em vez de um espaço vazio:
- Cabeçalho padrão:
{title}alinhado à direita nas páginas ímpares,{chapterTitle}alinhado à esquerda nas páginas pares e um fio de largura total, tudo na cor principal da paleta, Open Sans 8 pt/600,marginFromBody16pt(texto) /13pt(fio). - Rodapé padrão:
{pageNumber}centralizado em todas as páginas, na cor principal da paleta, Open Sans 8 pt/600,marginFromBody16pt.
Para dispensar os padrões embutidos, defina header: { elements: [] } (ou footer: { elements: [] }). Um array elements vazio e explícito é preservado como “nenhum elemento”; só undefined aciona os padrões.
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
elements | HeaderFooterElement[] | padrões embutidos quando undefined; [] desativa | Lista ordenada de elementos de texto e de fio. |
#Elementos de texto
Os elementos de texto desenham uma string de modelo com substituição de marcadores. Os marcadores usam a sintaxe {name}; {{ e }} produzem chaves literais.
Os padrões da tabela abaixo são os de um elemento de texto que você mesmo adiciona. O cabeçalho e o rodapé embutidos descritos em Padrões embutidos, acima, são elementos prontos com valores próprios (Open Sans 8 pt/600 na cor principal da paleta), não os padrões do elemento.
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
kind | 'text' | — | Discriminador. |
id | string | — | Id estável, único dentro do espaço. Outros elementos se ancoram nele com anchor.to: '#id'. O Sandbox atribui um ao criar o elemento. |
content | string | '' | String de modelo. Aceita os marcadores listados abaixo, além de : um atributo escrito na linha do H1 do capítulo atual (# Title ). Um atributo ausente vira uma string vazia, sem aviso. Uma quebra de linha (ou os dois caracteres \n, escritos no modelo ou no valor de um atributo) sempre começa uma nova linha, qualquer que seja o overflow. O texto que um marcador copia do documento (um título, um campo do frontmatter) é impresso como está escrito: ali, só uma quebra de linha real, como a quebra de um título, começa uma nova linha. |
align | 'left' | 'center' | 'right' | 'justify' | 'start' | 'end' | 'center' | Alinhamento horizontal das linhas dentro da caixa do elemento. 'justify' estica os espaços entre palavras de todas as linhas quebradas, exceto a última de cada parágrafo, para que a linha preencha a caixa; as linhas ao lado de uma capitular preenchem o espaço ao lado dela. Com hyphenate, uma palavra que não cabe no restante de uma linha justificada também é cortada em uma sílaba para preenchê-la. A última linha de um parágrafo, uma linha sem espaço para esticar e um texto que não quebra ficam alinhados à esquerda. O texto justificado é diagramado parágrafo a parágrafo, então várias linhas em branco entre parágrafos contam como uma. O canvas e o PDF colocam cada palavra onde o layout a pôs; o HTML alarga os espaços com word-spacing. 'start' e 'end' seguem a direction do texto: a direita e a esquerda de um texto da direita para a esquerda. 'left' e 'right' são os lados da própria caixa; em um design diagramado no fluxo de uma página da direita para a esquerda (uma faixa de abertura, o design de um título) o fluxo é espelhado, então eles são o início e o fim, como no texto corrido. |
direction | 'ltr' | 'rtl' | 'auto' | a do documento | Direção base do texto: para onde vão seus caracteres neutros, a ordem dos trechos em uma linha e o que significam os lados 'start' e 'end'. 'auto' lê a primeira letra forte do texto resolvido e, sem ela, usa a direction do documento. Trechos em árabe e hebraico são lidos da direita para a esquerda, qualquer que seja a base. Um texto que contém uma letra árabe nunca recebe espaçamento entre letras (letterSpacing é ignorado para o texto inteiro) e suas palavras nunca são cortadas ao quebrar ou truncar a linha; uma palavra mais larga que a caixa transborda e é reportada como unbreakableWordOverflow. |
parity | 'all' | 'odd' | 'even' | 'all' | Em quais páginas o elemento aparece (paridade do número da página: a página 1 é ímpar). |
pages | 'all' | 'body' | 'opener' | 'part' | 'blank' | 'all' | Em quais funções de página o elemento aparece, combinado com parity. Depois do posicionamento, cada página é classificada como 'blank' (página de preenchimento por paridade ou separador, ou sem conteúdo), 'part' (uma página divisória de parte), 'opener' (seu primeiro bloco é um título cujo nível ocupa a página ou força uma quebra de página antes dele: a primeira página de um capítulo) ou 'body' (todas as outras). pages: 'body' esconde um cabeço nas aberturas de capítulo; pages: 'opener' mostra um fólio só nelas. |
fontFamily | string | 'EB Garamond' | Família tipográfica. |
fontSize | Dimension | 8 pt | Tamanho da fonte. |
fontWeight | number | 400 | Peso da fonte (100–900). |
italic | boolean | false | Se o texto é desenhado em itálico. |
color | ColorValue | #000000 | Cor do texto. |
overflow | 'wrap' | 'ellipsis-start' | 'ellipsis-middle' | 'ellipsis-end' | 'clip' | 'wrap' em designs de título e de parte; senão, 'ellipsis-end' | Como o motor trata o texto que excede a largura disponível do elemento. 'wrap' quebra o texto em várias linhas; as variantes com reticências mantêm cada linha em uma só linha e a truncam com … no início, no meio ou no fim; 'clip' corta rente à caixa delimitadora do elemento, sem inserir nenhum caractere. As quebras de linha do conteúdo valem em todos os modos: os modos de reticências e de corte truncam ou cortam cada linha separadamente. Um elemento que omite overflow segue o padrão do seu espaço: num design de título (advancedDesign.slot) ou numa página de parte (parts.design, parts.versoDesign) quebra linha; num cabeçalho, num fólio ou numa linha de parte do sumário (toc.parts.design, uma linha de altura fixa) termina em …. Defina 'wrap' num cabeçalho que possa ocupar várias linhas (um endereço), ou reticências num antetítulo que deva ficar numa linha dentro de uma abertura. Uma linha cortada com reticências, ou recortada com tinta além da caixa, é avisada pelo aviso de conteúdo designTextTruncated, uma vez por elemento e página (um cabeçalho ou um fólio, uma vez por elemento e capítulo). Uma configuração salva antes do postext 1.24 (configVersion 9 ou anterior) é lida com 'ellipsis-end' em cada texto de título ou de parte que não o define, para que as páginas não se movam. Um texto com dropCap quebra linhas independentemente deste valor; com 'clip', suas linhas ainda são cortadas na borda de uma caixa de altura fixa. 'ellipsis-end' e 'ellipsis-start' cortam em um limite de palavra (The history of…, não The history of th…), e nenhum espaço ou pontuação de ligação (vírgula, dois-pontos, travessão, barra, parêntese de abertura) encosta nas reticências. Uma palavra só é cortada onde for preciso quando o limite de palavra, descartada essa pontuação, manteria menos da metade do que cabe: uma única palavra longa, ou um URL (http://exampl…, não http…). Um espaço não separável ou um hífen não separável (U+2011, como em MS‑DOS) não é limite de palavra; 'ellipsis-middle' corta em qualquer ponto, mas descarta os espaços ao lado das reticências. Até o postext 1.4, todos os modos cortavam no último caractere que cabia, espaços incluídos. |
verticalAlign | 'top' | 'middle' | 'bottom' | 'middle' | Onde o texto fica dentro de uma caixa mais alta que suas linhas: uma placement.size.height fixa, ou uma caixa esticada por um vizinho ancorado. Quando as linhas são mais altas que a caixa (um numeral grande em uma caixa de altura fixa, uma lineHeight apertada), elas transbordam pelo lado que o alinhamento deixa livre, como faz o alinhamento flex do CSS: 'bottom' mantém o pé da caixa da última linha no pé da caixa e transborda por cima, 'middle' transborda por igual nas duas pontas, 'top' pelo pé. Até o postext 1.4, essas linhas sempre pendiam do topo, qualquer que fosse o alinhamento. Uma dropCap acompanha suas linhas (até o postext 1.4 ela ficava no topo de uma caixa em que 'middle' ou 'bottom' as tinha deslocado para baixo). |
lineHeight | number | Dimension | 1.2 | Entrelinha das linhas do elemento. Um número é um múltiplo de fontSize. Uma Dimension também é aceita, do mesmo jeito em que se escrevem todas as outras entrelinhas da configuração: em / rem é o mesmo múltiplo, e um comprimento absoluto (pt, mm, px…) é a distância entre linhas de base: define uma entrelinha de 15,5 pt, qualquer que seja o tamanho. Qualquer outra coisa (zero, um número negativo, uma dimensão malformada) assume o padrão. Até o postext 1.4, uma Dimension aqui tornava impossível medir a altura do design: uma abertura não reservava espaço nenhum, nem mesmo a sua minHeight, e o corpo passava por baixo do título. |
letterSpacing | Dimension | 0 | Tracking: espaço extra avançado depois de cada caractere, espaços incluídos, exatamente como faz o letter-spacing do CSS. As larguras medidas crescem com ele, então uma caixa de largura automática continua justa. O tracking depois do último caractere de uma linha fica fora do alinhamento e da caixa de largura automática, de modo que um título com tracking centralizado fica centralizado nas suas letras, um alinhado à direita termina na borda e a última letra de uma linha justificada chega à borda (até o postext 1.4 eles ficavam meia unidade de tracking, ou uma inteira, à esquerda, e um elemento ancorado à direita de outro com tracking ficava uma unidade de tracking mais longe). Um valor negativo aperta as letras (um título de display a 36 pt costuma levar { value: -0.3, unit: 'pt' }) e as larguras diminuem do mesmo modo; canvas, HTML e PDF o pintam igual (até o postext 1.4 um valor negativo era aplicado como 0, sem aviso). |
textTransform | 'none' | 'uppercase' | 'none' | Transformação de caixa aplicada ao texto resolvido, marcadores incluídos: o título de uma parte em maiúsculas no sumário. |
box | ElementBoxStyle | — | Fundo e borda opcionais desenhados atrás do texto: backgroundColor, borderColor, borderWidth, borderRadius e um padding por lado que amplia a caixa além do texto (veja Elementos de caixa para os campos). |
dropCap | { lines, fontFamily, fontWeight, fontSize, color, gap } | — | Capitular: a primeira letra composta em tamanho grande ao lado das primeiras lines linhas (padrão 2), com família, peso e cor próprios, a gap de distância do texto. A letra assenta na linha de base da última linha que ocupa, e fontSize tem como padrão o tamanho que alinha o topo dela com as maiúsculas da primeira linha: o tamanho do texto mais lines − 1 entrelinhas, considerando as maiúsculas como 0,72 do tamanho da letra (uma família cujas maiúsculas sejam bem mais altas ou mais baixas que isso pede um fontSize próprio). Um texto com capitular quebra linhas qualquer que seja o seu overflow; com 'clip', suas linhas ainda são cortadas na borda de uma caixa de altura fixa. Uma color vinculada à paleta acompanha as paletas de parte e de seção, como o resto do design. No design de um título, a letra não reserva espaço abaixo do texto: a parte da caixa da sua linha que fica abaixo da linha de base não empurra o corpo para baixo. Uma letra que desce abaixo da linha de base (um Q ou um J em muitas famílias) pode então invadir o espaço sob o design: dê ao título uma marginBottom para isso. Até o postext 1.4, o tamanho padrão deixava a letra tão alta quanto todas as caixas de linha que ela ocupa, de modo que o topo dela ficava acima da primeira linha; um overflow diferente de 'wrap' descartava a letra sem aviso; uma paleta de seção ou de parte deixava a cor dela como estava; e uma letra tão profunda quanto o texto ao lado podia empurrar o corpo uma linha da grade para baixo. Configurações salvas antes mantêm o tamanho do 1.4, escrito como fontSize (veja Pacotes escritos pelo postext 1.4 ou anterior). Uma capitular no texto corrido é definida pelos estilos de parágrafo e de título (veja Capitulares), com as alturas das maiúsculas medidas nas fontes. |
paragraphIndent | Dimension | 0 | Recuo de primeira linha de todos os parágrafos depois do primeiro. Uma quebra de linha no conteúdo (ou os dois caracteres \n, para texto que vem do valor de um atributo) separa parágrafos; quebras de linha consecutivas contam como uma. |
hyphenate | boolean | false | Quando é true e o texto quebra linhas (overflow: 'wrap', ou uma dropCap, que sempre quebra), as palavras longas que ainda transbordariam depois de uma quebra de linha normal são divididas nos limites de sílaba (usando o idioma de hifenização ativo do documento), com um hífen condicional na quebra. Em um texto justificado (align: 'justify'), uma palavra que não cabe no restante de uma linha também é cortada na última divisão silábica que cabe, para preencher a linha. |
inlineMarks | boolean | false | Lê o texto resolvido (valores dos marcadores incluídos) como Markdown inline: bold, italic, ^superscript^, ~subscript~. Desativado, os sinais são impressos como foram escritos. No design de um título, então mantém os trechos de negrito, itálico, sobrescrito e subscrito do próprio título (Pneumocystis, CO~2~), com os demais caracteres escapados para serem impressos como foram escritos (desde o postext 1.19). Veja Marcas inline e contornos. |
stroke | { width, color?, hollow? } | — | Contorno desenhado em volta das letras: width (uma Dimension, centrada nas bordas dos glifos), color (padrão: a cor do texto; uma capitular usa a própria cor) e hollow (true pinta só o contorno). Veja Marcas inline e contornos. |
writingMode | 'horizontal-tb' | 'vertical-rl' | 'horizontal-tb' | 'vertical-rl' compõe o texto de cima para baixo, com as linhas da direita para a esquerda e os caracteres em pé: um cabeço descendo pela margem externa, um título vertical ao lado de um capítulo horizontal. Veja Elementos de texto verticais. |
reserve | boolean | true | Só em designs de título: se o elemento conta para a altura que o título reserva no fluxo do texto. false para decoração que pode ficar sob o texto (um selo no pé da página, uma moldura, uma faixa lateral). Veja Altura reservada. Os designs de cabeçalho, de rodapé e de parte o ignoram. |
marginFromBody | Dimension | 6 pt | Distância absoluta entre a borda do elemento voltada para o corpo e a borda do corpo. Independe dos outros elementos. Migrado para placement.offset.y. |
marginFromEdge | Dimension | 0 pt | Recuo horizontal a partir da borda de conteúdo alinhada. Só se aplica quando align é 'left' ou 'right'. Migrado para placement.offset.x. |
placement | ElementPlacement | derivado de align + marginFromBody + marginFromEdge | Posicionamento avançado (veja abaixo). Quando definido, tem precedência sobre os campos planos antigos. |
Marcadores disponíveis:
{pageNumber}: número da página atual, a partir de 1.{totalPages}: total de páginas do documento. Em um livro diagramado capítulo a capítulo (o Sandbox,buildBundle), cada capítulo é um documento, então este é o total do próprio capítulo.{bookTotalPages}: total de páginas do livro inteiro: todos os capítulos, páginas em branco incluídas. Para um documento diagramado sozinho, é igual a{totalPages}. Veja Contagem de páginas do livro abaixo.{title},{subtitle},{author},{publishDate}: valores lidos decontent.metadata. Metadados desconhecidos ou vazios viram uma string vazia (e geram um aviso no Sandbox).{chapterTitle}: texto do H1 mais recente na página atual ou antes dela. Um H1 cujo estilo de título definerunningChapter: false(uma prancha, um mapa) é ignorado.{chapterTitleAtTop},{chapterNumberAtTop}: título e número do capítulo vigente no topo da página, que diferem de{chapterTitle}e{chapterNumber}em uma página onde um novo capítulo começa abaixo de outro texto. Veja Capítulo no topo da página abaixo.{partTitle},{partNumber}: título e número da parte atual (a página:::partmais recente na página atual ou antes dela; as páginas em branco de paridade logo antes de uma página de parte já pertencem a ela). Vazios antes da primeira parte.{firstMark.<key>},{lastMark.<key>}: a primeira e a última palavra-guia da página: um título de um nível (h1–h6) ou uma entrada de um estilo de parágrafo. Veja Palavras-guia abaixo.
Contagem de páginas do livro
{bookTotalPages} imprime o número de páginas do livro inteiro, o total que o leitor vê em “página 12 de 348”. Conta páginas físicas, em branco incluídas, como {totalPages}, mas somando todos os capítulos:
- Um documento diagramado sozinho (
buildDocumentsemcontinuation) é o livro inteiro:{bookTotalPages}é igual a{totalPages}. buildBundlediagrama o livro, soma as páginas de todos os capítulos e diagrama mais uma vez com esse total, de modo que todos os capítulos imprimem o mesmo número. A contagem nunca move uma quebra de página, então uma rodada a mais resolve; uma configuração que não imprime{bookTotalPages}não paga nada por isso.- O Sandbox passa o total a cada capítulo assim que as páginas de todos os capítulos são conhecidas. Até lá, um capítulo imprime as páginas até o seu próprio fim. A exportação do livro inteiro na aba PDF conta as páginas que diagrama: quando um capítulo imprimiu outro total, porque suas páginas ainda não eram conhecidas, ela diagrama o livro mais uma vez com o total a que os capítulos chegaram.
- Um host que diagrama os capítulos por conta própria passa o total como
continuation.bookPageCount(também no primeiro capítulo). Sem isso,{bookTotalPages}conta as páginas até o fim do documento (continuation.pageIndexOffsetmais as suas próprias páginas), o que só está certo no último capítulo.
footer: {
elements: [{
kind: 'text', id: 'folio', content: '{pageNumber} / {bookTotalPages}',
fontSize: { value: 8, unit: 'pt' },
placement: { anchor: { to: 'container', edge: 'top' }, size: { width: 'auto', height: 'auto' } },
}],
}configUsesPlaceholder(config, 'bookTotalPages') diz a um host se vale a pena calcular a contagem.
Palavras-guia: primeira e última marca
Um dicionário imprime no cabeço a primeira e a última entrada de cada página (“Aback – Anchor”); uma obra de referência imprime a primeira e a última seção. {firstMark.<key>} e {lastMark.<key>} as imprimem. A chave indica o que marca uma página:
h1ah6: um título desse nível. A marca é o texto dele, sem o número.- Um id de estilo de parágrafo (
entry): um parágrafo de um contêiner:::paragraphs{style="entry"}. A marca é o trecho em negrito que abre o parágrafo, a palavra-entrada, sem a pontuação final:**Aback.** Said of…marcaAback. Um parágrafo que não começa com texto em negrito não define marca.
{firstMark.<key>} é a primeira marca que começa na página e {lastMark.<key>}, a última. Uma página em que nenhuma marca começa (uma entrada longa que continua) imprime nos dois a marca vigente, a última antes dela. As páginas anteriores à primeira marca não imprimem nada; em um livro diagramado capítulo a capítulo, isso vale para a primeira marca do capítulo, já que as marcas não passam de um capítulo para o seguinte. Um título ou parágrafo dividido entre páginas marca só a página em que começa. A chave é escrita depois do ponto com letras, dígitos, _ e -, começando por uma letra ou _; uma chave desconhecida não imprime nada.
:::paragraphs{style="entry"}
**Aback.** Said of the sails when pressed back against the mast.
**Abaft.** Towards the stern, or behind a given point.
:::header: {
elements: [{
kind: 'text', id: 'guide', content: '{firstMark.entry} – {lastMark.entry}',
fontSize: { value: 8, unit: 'pt' },
placement: { anchor: { to: 'container', edge: 'bottom' }, size: { width: 'auto', height: 'auto' } },
}],
}As palavras-guia são cabeços: são resolvidas nos espaços de cabeçalho e de rodapé (incluídos o header e o footer de um estilo de título) e não imprimem nada em designs de título, de parte e de sumário; nos designs de título e de parte, o painel Verificações as aponta como marcadores desconhecidos. Para mostrar a primeira entrada nas páginas pares e a última nas ímpares, use dois elementos, com parity: 'even' e parity: 'odd'. Um H1 cujo estilo de título define runningChapter: false não define marca h1.
Capítulo no topo da página
{chapterTitle} e {chapterNumber} nomeiam o último capítulo iniciado na página ou antes dela. Em um livro cujos capítulos correm seguidos, sem quebra de página entre eles, uma página que fecha um capítulo e começa o seguinte perto do pé leva o título do novo capítulo sobre um texto que ainda pertence ao anterior. {chapterTitleAtTop} e {chapterNumberAtTop} nomeiam, em vez disso, o capítulo vigente no topo da página, como fazem os romances com capítulos seguidos e muitas obras de referência:
- uma página cujo primeiro bloco é o H1 de um capítulo nomeia esse capítulo;
- qualquer outra página nomeia o capítulo que continua nela, mesmo quando um novo capítulo começa mais abaixo;
- uma página em branco adicionada por paridade acompanha a página seguinte, e o separador dos modos
always-*, a página anterior (veja Pertencimento das páginas em branco); quando a página depois de uma página em branco de paridade começa com o fim de um capítulo, e não com o H1 dele, a página em branco também fica com esse capítulo; - um H1 com
runningChapter: falseé ignorado.
header: {
elements: [{
kind: 'text', id: 'chapter', content: '{chapterTitleAtTop}', parity: 'odd', pages: 'body',
fontSize: { value: 8, unit: 'pt' },
placement: { anchor: { to: 'container', edge: 'bottom-right' }, size: { width: 'auto', height: 'auto' } },
}],
}Como as palavras-guia, os dois são cabeços: são resolvidos nos espaços de cabeçalho e de rodapé e não imprimem nada em designs de título, de parte e de sumário. {attr.<key>} sempre lê o último capítulo iniciado.
Alinhamento implícito pela borda
Quando o placement.anchor.to de um elemento de texto se refere a outro elemento por #id, a borda da âncora implica um alinhamento de texto padrão para as linhas quebradas:
right-ofealign-leftimplicamalign: 'left'no texto: as linhas quebradas correm para a direita a partir da âncora.left-ofealign-rightimplicamalign: 'right': as linhas quebradas se apoiam no lado mais próximo do alvo da âncora.
O editor de títulos do Sandbox aplica esses alinhamentos implícitos automaticamente quando você muda a borda ou o alvo da âncora. Eles mantêm um texto quebrado em várias linhas visualmente ancorado no elemento a que se refere (assim, por exemplo, o “P” de um “Postext” quebrado fica alinhado na vertical sob o “I” de “Introduction”).
Marcas inline e contornos
Por padrão, um elemento de texto compõe o texto em uma só fonte: **, ^ e os demais sinais de Markdown são impressos como foram escritos. Com inlineMarks: true, o texto resolvido é lido como Markdown inline, com as mesmas marcas que o texto corrido aceita (veja Formato do documento → Formatação inline):
**bold**aplica peso 700 (ou ofontWeightdo próprio elemento, quando for mais pesado);*italic*inverte a inclinação do elemento, de modo que a ênfase dentro de um elemento em itálico sai em redondo;***both***faz as duas coisas. As formas com sublinhado (__bold__,_italic_) também funcionam.^superscript^e~subscript~são compostos a 58 % do tamanho, o sobrescrito elevado em um terço dele e o subscrito rebaixado em 0,15 dele; um subscrito e um sobrescrito que se tocam (T~0~^2^) são empilhados, como no corpo.- Uma barra invertida compõe o próprio sinal (
\*,\_,\^,\~). Um link mantém o texto; as crases de código são descartadas.
As marcas são lidas depois que os marcadores são preenchidos, então um valor pode trazê-las: a linha de autores em um atributo de título recebe os números de afiliação como sobrescritos. Quebra de linha, justificação, os modos de reticências, dropCap e paragraphIndent funcionam com texto marcado; todos os trechos mantêm a cor do elemento.
{ "kind": "text", "id": "authors", "content": "{attr.authors}", "inlineMarks": true, "overflow": "wrap",
"fontSize": { "value": 11, "unit": "pt" },
"placement": { "anchor": { "to": "#title", "edge": "below" }, "offset": { "y": { "value": 6, "unit": "pt" } } } }# Snow cover and river flow {authors="Ana Ruiz^1^, Luis Gil^2^ and Marta Sanz^1,3^"}stroke desenha um contorno em volta das letras: width é a espessura do traço, centrado nas bordas dos glifos (metade fica dentro das letras, metade fora; a largura medida do texto não muda), color tem como padrão a cor do texto, e hollow: true deixa as letras sem preenchimento, para que só o contorno apareça: um número de display vazado, um título que se destaca sobre uma fotografia. O contorno é pintado sobre o preenchimento, do mesmo jeito no canvas, no HTML (-webkit-text-stroke) e no PDF (modo de renderização de texto 2, ou 1 quando vazado).
{ "kind": "text", "id": "year", "content": "1863", "fontFamily": "Bitter", "fontSize": { "value": 120, "unit": "pt" }, "fontWeight": 700,
"color": { "hex": "#1d3557", "model": "hex" },
"stroke": { "width": { "value": 1.5, "unit": "pt" }, "hollow": true },
"placement": { "anchor": { "to": "page", "edge": "bottom-right" }, "offset": { "x": { "value": -15, "unit": "mm" }, "y": { "value": -20, "unit": "mm" } } } }No PDF, os trechos em negrito e itálico incorporam as fontes correspondentes da família do elemento, então o provedor de fontes precisa fornecê-las.
Valores padrão do texto e armadilhas da ancoragem
Um elemento de texto que você mesmo escreve parte destes valores, alguns deles surpreendentes:
overflowdepende do espaço. Num design de título ou numa página de parte, um título longo quebra em mais linhas; num cabeçalho, num fólio ou numa linha de parte do sumário, um texto largo demais para o espaço é cortado em uma linha com…. Definaoverflow: 'wrap'num cabeçalho que possa ficar longo (um endereço, uma linha de autoria) e confira os avisosdesignTextTruncateddos textos cortados. Uma quebra de linha no conteúdo (uma quebra real, ou\nno modelo ou no valor de um atributo) começa uma nova linha em todos os modos; os modos de reticências cortam cada linha separadamente.aligné'center'everticalAligné'middle'. Um elemento de largura automática se ajusta à sua linha mais longa, então as linhas ficam centralizadas umas em relação às outras; definaalign: 'left'para um bloco alinhado à esquerda (um elemento de largura automática ancorado em outro elemento alinha as linhas sozinho pelo lado da âncora, veja acima).- A fonte é EB Garamond 8 pt, preta,
lineHeight1.2, qualquer que seja a do texto corrido. Ao contrário das outras entrelinhas da configuração, alineHeightde um texto de design costuma ser um múltiplo simples (1.2); umaDimensiontambém funciona (veja acima).
Um elemento sem placement.size.width (ou com 'auto') se dimensiona pelo seu texto, mas só dentro do espaço entre o ponto de âncora e a borda do contêiner para a qual ele cresce; para uma âncora top ou bottom, o dobro da distância até a borda mais próxima. O offset dele conta. Um deslocamento para longe dessa borda não custa nada: um cabeço ancorado em top-left com x negativo (pendurado na margem esquerda) não perde espaço, porque cresce para a direita. Um deslocamento em direção a essa borda reduz o espaço na mesma medida (o dobro, para uma âncora top ou bottom), e um que empurra a âncora além da borda não deixa espaço nenhum: uma âncora top-right cujo x fica abaixo de menos a largura do contêiner, ou uma âncora top deslocada para o lado em mais da metade dessa largura. Sem espaço, um modo de reticências não imprime nada e 'wrap' empilha um caractere por linha. Três saídas:
- dar ao elemento uma
size.widthfixa: larguras fixas nunca são limitadas; - ancorá-lo em
'page'ou'bleed', o que faz da página (ou da sangria) o quadro do seu espaço; - ancorá-lo na borda oposta do contêiner.
O contêiner de um cabeçalho vai do refile superior até o corpo, e o de um rodapé, do corpo até o refile inferior: no cabeçalho, as âncoras top-* são medidas a partir da borda de refile e as bottom-* a partir do corpo, e o contrário no rodapé (veja Quadro do contêiner, acima). Um cabeçalho ou rodapé nunca desloca o texto corrido e é pintado por cima dele, então um elemento empurrado para a área do corpo cobre o texto. Já uma faixa de abertura é pintada por baixo do texto corrido; quanto espaço ela ocupa no fluxo está descrito em Altura reservada.
#Elementos de texto verticais
Um elemento de texto com writingMode: 'vertical-rl' é composto na vertical em um espaço cujo texto é horizontal: os cabeços e fólios de qualquer livro, que ficam na folha, e todos os designs de uma página horizontal. Ele é diagramado como um texto horizontal em um quadro próprio girado um quarto de volta no sentido horário e depois girado de volta para a página:
- A caixa dele fica onde o posicionamento a coloca. A altura é o comprimento de uma linha:
size.heighta define (ou'auto', o comprimento do texto;'fill', até a borda do contêiner),size.widthdefine quantas linhas cabem na largura, esize.maxWidthlimita o comprimento de uma linha. alignposiciona as linhas ao longo da caixa ('left'em cima),verticalAlignno sentido transversal ('top'à direita, onde fica a primeira linha), e o padding de uma caixa fica no lado para o qual foi escrito.- Os caracteres são medidos e pintados como em uma página vertical: os Han em pé, um em cada, a pontuação na sua forma vertical, as palavras latinas deitadas, os números curtos em uma célula (
cjk.uprightDigits). O canvas, o PDF e o HTML o colocam no mesmo retângulo. - Com
inlineMarks: true, as marcas de orientação destacam um trecho como no corpo:第:tcy[3.0]回compõe 3.0 em uma célula,:upright[GDP]põe as letras em pé, uma sob a outra,:sideways[…]gira um trecho; uma linha nunca quebra dentro de um deles. Um elemento horizontal os ignora. - Um elemento vertical não leva capitular.
- No fluxo de uma página vertical (uma abertura, uma página de parte, o título de um boxe) o texto já corre para baixo, e
writingModenão muda nada ali.
Os livros chineses verticais põem cabeços e fólios em um de três lugares (clreq §7.2; JLREQ §2.6 para o japonês):
| Convenção | Onde | Como configurar |
|---|---|---|
| Cabeçalho e rodapé horizontais | Acima e abaixo da mancha, como nos livros horizontais; o mais comum. | O cabeçalho e o rodapé como estão. |
| Margem externa (estilo 中缝, 邊峰 em Taiwan) | Descendo pela margem externa: o título do capítulo ou do livro a partir de uns quatro caracteres abaixo do topo da mancha, o fólio terminando uns cinco acima do pé dela, em numerais chineses, a cerca de 80 % do tamanho do corpo. | Dois elementos verticais ancorados em 'outer', abaixo. |
| Canto externo do pé | O fólio no pé da página, no canto externo (as regras de Taiwan para livros 中式). | Um elemento horizontal no rodapé em 'bottom-left' com parity: 'odd' e outro em 'bottom-right' com parity: 'even', em um livro com encadernação à direita (o contrário em um com encadernação à esquerda). |
Os cabeços na margem externa, como o Sandbox os adiciona (Cabeçalho › Cabeços na margem externa (vertical)), aqui para um corpo de 10 pt (o Sandbox os compõe a 80 % do tamanho do corpo):
{
"page": { "pageNumbering": { "format": "trad-chinese-informal" } },
"header": { "elements": [
{ "kind": "text", "id": "head", "content": "{chapterTitle}", "writingMode": "vertical-rl",
"fontSize": { "value": 8, "unit": "pt" }, "overflow": "clip", "align": "left",
"placement": { "anchor": { "to": "outer", "edge": "top" }, "offset": { "y": { "value": 4, "unit": "em" } } } },
{ "kind": "text", "id": "folio", "content": "{pageNumber}", "writingMode": "vertical-rl",
"fontSize": { "value": 8, "unit": "pt" }, "overflow": "clip", "align": "left",
"placement": { "anchor": { "to": "outer", "edge": "bottom" }, "offset": { "y": { "value": -5, "unit": "em" } } } }
] }
}anchor.to: 'outer' (veja Posicionamento de elementos) é a margem externa de cada página, então os dois elementos descem pela borda esquerda de uma página ímpar e pela borda direita de uma página par em um livro com encadernação à direita (page.binding). {pageNumber} é impresso no formato de numeração de páginas: trad-chinese-informal dá 一百零三 na página 103, cjk-decimal dá 一〇三. As regras de cada espaço continuam valendo: pages: 'body' mantém o cabeço fora das aberturas de capítulo. Um pequeno ornamento entre o cabeço e o fólio (um rabo de peixe ︻, um fio) é um elemento comum ancorado no mesmo quadro.
Na VDT, um bloco vertical traz vertical (VDTDesignTextBlock.vertical: a região, os dígitos em pé e o eixo central de cada família); as linhas dele ficam no quadro girado do próprio bloco, xOffset para baixo a partir do topo da caixa, baselineY para a esquerda a partir da borda direita. Um trecho de uma linha marcada traz tcy ou orientation, como um segmento do corpo.
#Elementos de fio
Os elementos de fio desenham uma linha: horizontal, atravessando o espaço, ou vertical, descendo por ele.
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
kind | 'rule' | — | Discriminador. |
id | string | — | Id estável, único dentro do espaço, para referências anchor.to: '#id'. |
direction | 'horizontal' | 'vertical' | 'horizontal' | Um fio horizontal se estende por placement.size.width ('fill' = até a borda do contêiner) e tem thickness de altura. Um fio vertical desce por placement.size.height ('fill' ou não definido = até a borda do contêiner) e tem thickness de largura: um divisor entre um cabeço e um fólio. |
color | ColorValue | #000000 | Cor do traço. |
thickness | Dimension | 0.5 pt | Espessura da linha. Um fio que a omite é desenhado com o padrão (até o postext 1.4 não pintava nada). |
width | Dimension | 'full' | 'full' | 'full' ocupa a área de conteúdo; uma Dimension limita a linha a um comprimento fixo, posicionado por align. |
align | 'left' | 'center' | 'right' | 'center' | Alinhamento quando width não é 'full'. |
marginFromBody | Dimension | 6 pt | Distância absoluta entre a borda do fio voltada para o corpo e a borda do corpo. Independe dos outros elementos. |
marginFromEdge | Dimension | 0 pt | Recuo horizontal a partir da borda de conteúdo alinhada. Só se aplica quando width é uma Dimension fixa e align é 'left' ou 'right'. |
parity | 'all' | 'odd' | 'even' | 'all' | Em quais páginas o fio aparece. |
pages | 'all' | 'body' | 'opener' | 'part' | 'blank' | 'all' | Funções de página em que o fio aparece (veja o campo pages dos elementos de texto). |
reserve | boolean | true | Só em designs de título: se o fio conta para a altura que o título reserva no fluxo do texto (veja Altura reservada). |
placement | ElementPlacement | derivado de align + marginFromBody + marginFromEdge | Posicionamento avançado (veja Posicionamento de elementos). size.width / size.height definem o comprimento do fio; width: 'fill' é o antigo 'full'. |
#Elementos de caixa
Os elementos de caixa pintam um retângulo de cantos arredondados dentro do espaço, úteis como fundo atrás do texto em aberturas de capítulo, barras laterais ou rodapés. Os elementos de caixa são posicionados exclusivamente pelo campo placement; não têm a forma abreviada plana antiga. Preenchimento, traço e raio dos cantos ficam no objeto aninhado style (ElementBoxStyle), como no exemplo JSON em “Posicionamento de elementos”.
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
kind | 'box' | — | Discriminador. |
id | string | — | Id estável, único dentro do espaço. Os elementos irmãos se ancoram nele com anchor.to: '#id'. O Sandbox atribui um ao criar o elemento. |
style.backgroundColor | ColorValue | transparent | Cor de preenchimento. Defina como transparent para uma caixa só com contorno. |
style.borderColor | ColorValue | transparent | Cor do traço. |
style.borderWidth | Dimension | 0 pt | Espessura do traço. Os traços são pintados no lado de dentro do retângulo delimitador da caixa, para que as dimensões externas não mudem: a borda externa do traço acompanha a borda da caixa, e uma caixa arredondada mantém o raio externo. Um traço tão largo quanto a caixa a preenche. Canvas, HTML e PDF o desenham igual (até o postext 1.4, o canvas e o PDF centravam o traço na borda, com metade dele fora da caixa). |
style.borderRadius | Dimension | 0 pt | Raio dos cantos. Limitado à metade do lado menor no momento da renderização. |
placement | ElementPlacement | — | Obrigatório. Veja “Posicionamento de elementos” abaixo. |
parity | 'all' | 'odd' | 'even' | 'all' | Em quais páginas a caixa aparece. |
pages | 'all' | 'body' | 'opener' | 'part' | 'blank' | 'all' | Funções de página em que a caixa aparece (veja o campo pages dos elementos de texto). |
reserve | boolean | true | Só em designs de título: se a caixa conta para a altura que o título reserva no fluxo do texto (veja Altura reservada). |
#Elementos de imagem
Um elemento image desenha um recurso bitmap ou SVG do documento: o logotipo da editora em uma folha de rosto, uma marca em um cabeço. Ele é dimensionado pelo seu placement.size: com um de width / height em 'auto' (o padrão), o outro lado acompanha a proporção da imagem; com os dois definidos, a imagem é ajustada dentro da caixa e centralizada. Um recurso ausente, ou que não seja imagem, não desenha nada.
{
kind: 'image', id: 'logo', resourceId: 'logo-publisher',
placement: { anchor: { to: 'page', edge: 'top-left' }, offset: { x: { value: 64, unit: 'mm' }, y: { value: 233, unit: 'mm' } }, size: { width: { value: 83, unit: 'mm' }, height: 'auto' } },
}resourceId aceita os mesmos marcadores que o content de um elemento de texto, de modo que um único design pode desenhar uma imagem diferente para cada título. Com resourceId: '{attr.vignette}' em um estilo de título, # Chapter I {style="opener" vignette="log"} desenha o recurso log e # Chapter II {style="opener" vignette="wig"} desenha wig: os capítulos compartilham o estilo em vez de terem um clone por imagem. Um cabeçalho ou rodapé lê os atributos do capítulo da página, como faz {attr.<key>} em um cabeço, e outros marcadores também funcionam ('map-{chapterNumber}'). Um id que resulta vazio, como o de um título sem o atributo, não desenha nada. Desde o postext 1.8.
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
id | string | — | Identificador estável; outros elementos podem se ancorar nele como #id. |
resourceId | string | — | Id de um Resource bitmap ou SVG do documento. Pode conter marcadores, entre eles {attr.<key>}, preenchidos por título, parte ou página. |
decorative | boolean | false | A imagem é só decoração (um ornamento, uma faixa): não passa texto alternativo para a saída, mesmo quando o recurso tem um (veja abaixo). |
placement | ElementPlacement | — | Âncora, deslocamento e tamanho (veja Posicionamento de elementos). Um lado 'fill' vai até a borda do contêiner. |
parity, pages | como acima | 'all' | Em quais páginas a imagem aparece. |
reserve | boolean | true | Só em designs de título: se a imagem conta para a altura que o título reserva no fluxo do texto (veja Altura reservada). |
O renderizador de PDF incorpora o recurso como uma figura (um SVG com matriz de impressão usa a matriz); o visualizador HTML o resolve por meio de resourceImageUrl.
Uma imagem desenhada por um design é conteúdo quando o recurso dela a descreve: o altText do recurso ou, na falta dele, a legenda como texto simples (um chip lido pelo rótulo, um :ref pelo seu text, quando tem um) vai para a VDT (VDTDesignImageBlock.altText), vira o alt do <img> no HTML e uma Figure com /Alt em um PDF etiquetado, lida logo depois do texto do seu design (a prancha de um capítulo depois do título do capítulo). Uma imagem cujo recurso não tem nenhum dos dois, e uma marcada como decorative, é decoração: alt="" com role="presentation", e um artefato no PDF. A imagem de um cabeço ou de um rodapé se repete em todas as páginas, então é elemento fixo da página, diga o recurso o que disser: sem altText na VDT, alt="" com role="presentation" no HTML, um artefato da página no PDF.
#Posicionamento de elementos
ElementPlacement é o modelo unificado de posicionamento usado por todos os tipos de elemento (texto, fio, caixa) dentro de qualquer espaço de design: cabeçalho da página, rodapé da página ou o espaço de design avançado de um nível de título. Três informações descrevem um posicionamento:
interface ElementPlacement {
/** What this element anchors to and which edge of that target. */
anchor: {
to: 'container' | 'page' | 'bleed' | 'outer' | `#${string}`; // container = the slot; page = trim box; bleed = trim box + bleed; outer = the outer margin (header, footer); #id = another element
edge: AnchorEdge;
};
/** Distance from the anchor point. */
offset?: { x?: Dimension; y?: Dimension };
/** Optional fixed width / height. Width also accepts 'fill' (span the slot).
* `maxWidth` caps an 'auto' width (text): the element still shrink-wraps its
* content, so elements anchored to it stay attached, but a long text wraps or
* ellipsizes there — a running head can reserve room for the label hanging
* off it instead of squeezing that label out. */
size?: { width?: Dimension | 'fill' | 'auto'; height?: Dimension | 'fill' | 'auto'; maxWidth?: Dimension };
}AnchorEdge aceita:
- Bordas do contêiner (quando
anchor.toé'container','page'ou'bleed'):top,top-left,top-right,bottom,bottom-left,bottom-right,left,right. - Bordas relativas a um elemento (quando
anchor.to === '#someId'):right-of,left-of,below,above,align-top,align-bottom,align-left,align-right.
Cada borda relativa a um elemento põe um canto do elemento sobre um canto do elemento em que ele se ancora, e offset o desloca a partir dali:
right-of: o canto superior esquerdo sobre o canto superior direito do alvo (ao lado dele, topos alinhados);left-of: o canto superior direito sobre o canto superior esquerdo do alvo;below: o canto superior esquerdo sobre o canto inferior esquerdo do alvo (embaixo dele, bordas esquerdas alinhadas);above: o canto inferior esquerdo sobre o canto superior esquerdo do alvo;align-topealign-left: o canto superior esquerdo sobre o canto superior esquerdo do alvo. Os dois nomes dão o mesmo posicionamento: tanto a borda superior quanto a esquerda ficam alinhadas;align-bottom: o canto inferior esquerdo sobre o canto inferior esquerdo do alvo;align-right: o canto superior direito sobre o canto superior direito do alvo.
Uma borda relativa a um elemento usada com 'container', 'page' ou 'bleed', e uma borda de contêiner usada com '#id', são lidas como o canto superior esquerdo.
anchor.to: 'page' ancora o elemento na caixa de refile (a página física depois do corte) e 'bleed', na caixa de refile ampliada por cutLines.bleed em todos os lados (idêntica à caixa de refile enquanto as marcas de corte estão desativadas). Os dois quadros também passam a ser a referência para size: 'fill' e para a limitação automática de largura, de modo que uma faixa colorida pode ir de borda a borda, independentemente das margens da página:
{ "kind": "box", "id": "band", "placement": { "anchor": { "to": "bleed", "edge": "top-left" }, "size": { "width": "fill", "height": { "value": 6, "unit": "cm" } } }, "style": { "backgroundColor": { "hex": "#1d3557", "model": "hex" } } }Com as marcas de corte ativadas, tudo o que um elemento pinta além da caixa de sangria é cortado (veja Marcas de corte).
anchor.to: 'outer' (espaços de cabeçalho e de rodapé) ancora o elemento na margem externa da página: da borda da mancha até a borda de refile, no lado oposto à lombada, e do topo da mancha até o pé. Ela fica à direita de uma página ímpar e à esquerda de uma página par em um livro com encadernação à esquerda, e o contrário em um com encadernação à direita (page.binding), de modo que um único elemento serve às duas páginas de uma página dupla: um cabeço descendo pela margem externa (veja Elementos de texto verticais). Em qualquer outro espaço, é lida como 'container'. O offset de um elemento de texto pode ser escrito em em, ems do seu próprio fontSize: quatro caracteres abaixo do topo da mancha é { "y": { "value": 4, "unit": "em" } }.
Dentro do espaço de design avançado de um título, os elementos ancorados na página e na sangria não aumentam a altura reservada para o título, a menos que se estendam abaixo da borda superior do título (uma faixa no alto da página fica atrás da abertura; uma faixa que desce abaixo do título empurra o texto corrido para baixo). Use advancedDesign.minHeight para reservar uma altura fixa de abertura em qualquer caso, e reserve: false em um elemento que não deve empurrar o texto de jeito nenhum. As regras completas estão em Altura reservada.
Cada elemento tem um id estável (atribuído automaticamente pelo Sandbox; você também pode defini-lo à mão). Os elementos ancorados em outros elementos formam um pequeno grafo de dependências que o motor resolve antes de medir, então um elemento pode se encadear em outro sem coordenadas manuais.
O formato antigo align + marginFromBody + marginFromEdge é interpretado na entrada e reescrito como um posicionamento no momento em que a configuração é resolvida, então as configurações existentes continuam funcionando sem mudanças.