Produção de Livros

Seu modelo de livro pode estar criando 46 páginas em branco

Um modelo que forçava cada capítulo em página ímpar gerou 46 páginas em branco em um livro. A solução nativa, o erro que não converge e a página de anotações.

JonathanJonathan
7 min de leitura1.344 palavras
Capa do artigo: Seu modelo de livro pode estar criando 46 páginas em branco (eBuz, Produção de Livros)

Em um livro nosso, o modelo de diagramação mandava cada título de capítulo começar em página ímpar. A intenção era boa: é a convenção do livro impresso. O resultado foram 46 páginas em branco.

A correção foi trocar a quebra por uma quebra simples. O livro perdeu as 46 páginas. Só que os capítulos voltaram a abrir em página par ou ímpar, ao acaso. Foi trocar um problema por outro.

A casa não aceita página em branco, e também quer capítulo em página ímpar. Este artigo mostra como ter as duas coisas. Mostra também o erro que impede isso quando a solução é feita do jeito errado.

Por que a página em branco aparece

Em livro impresso, a página da direita é a ímpar. É a que o leitor vê ao abrir o livro. Por convenção, o capítulo começa nela. Se o capítulo anterior termina em página ímpar, a página seguinte é par. Para o próximo capítulo cair em ímpar, o compilador precisa inserir uma página de enchimento.

Sem nenhum cuidado, essa página de enchimento sai em branco. Em um livro com muitos capítulos curtos, cerca de metade das aberturas pode gerar uma, pela simples paridade. Foi assim que chegamos a 46.

A solução: quebra nativa e página de anotações

O Typst tem a quebra de página com destino: pagebreak(to: "odd"). Combinada com weak: true, ela só quebra quando é preciso. Para a página de enchimento não sair em branco, mudamos o estilo da página dentro de um bloco, só na hora da quebra. Ali entra um fundo de anotações.

#set page(width: 152.4mm, height: 228.6mm, margin: 20mm)

#let anotacoes = {
  place(top + center, dy: 20mm,
    text(size: 14pt, weight: "bold")[Suas anotações])
  for i in range(14) {
    place(top + left, dx: 20mm, dy: 40mm + i * 9mm,
      line(length: 112mm, stroke: 0.4pt + luma(60%)))
  }
}

#let capitulo(titulo) = {
  {
    set page(background: anotacoes)   // vale só para a página inserida
    pagebreak(weak: true, to: "odd")
  }
  text(size: 20pt, weight: "bold")[#titulo]
}

O set page dentro das chaves vale só para o que for criado ali: a página de enchimento. A página do capítulo, criada depois, volta ao estilo normal. A página que seria vazia vira um caderno de anotações. O leitor ganha uma página útil no lugar do verso em branco.

Testamos com oito capítulos de tamanhos alternados. Resultado: 24 páginas. Os oito capítulos abriram em página ímpar (1, 5, 7, 11, 13, 17, 19 e 23). As quatro páginas de enchimento saíram com "Suas anotações".

O erro que não converge

A solução que parece mais óbvia a quem programa é outra. Perguntar ao documento em que página ele está e, se for par, inserir a página de enchimento. Em Typst, isso se faz com context e here().page():

#let capitulo(titulo) = {
  pagebreak(weak: true)
  context {
    if calc.even(here().page()) {
      page[#align(center + horizon)[Suas anotações]]
    }
  }
  text(size: 20pt, weight: "bold")[#titulo]
}

Funciona com poucos capítulos. Com mais, não. Cada página de enchimento muda a posição de todas as seguintes. O compilador só passa essa informação adiante uma rodada por vez. Depois de cinco tentativas ele desiste e avisa:

warning: layout did not converge within 5 attempts

Testamos com 12 capítulos, que pediam seis páginas de enchimento. O aviso apareceu e o documento saiu errado. Os capítulos 6 e 7 abriram nas páginas 16 e 18, que são pares. O livro saiu com numeração de capítulo e paridade quebradas, sem erro de compilação. O PDF foi gerado normalmente.

É por isso que a regra do nosso construtor é tratar esse aviso como erro e abortar. Quem confere só se o PDF "saiu" aprova um arquivo errado.

Passo a passo

  1. Use a quebra nativa (pagebreak(weak: true, to: "odd")) no estilo de título de capítulo, como no primeiro exemplo.
  2. Defina a página de anotações no bloco que envolve a quebra, para que o estilo não vaze para o capítulo.
  3. Compile e trate o aviso como erro:
typst compile livro.typ livro.pdf 2> aviso.txt
if grep -qi "did not converge" aviso.txt; then echo "REPROVADO"; exit 1; fi
  1. Meça a paridade no PDF. O laço abaixo diz em que página cada capítulo abriu e se ela é ímpar:
total=$(pdfinfo livro.pdf | awk '/^Pages/{print $2}')
for p in $(seq 1 "$total"); do
  pdftotext -f "$p" -l "$p" livro.pdf - | grep -q "^Capítulo [0-9]" \
    && echo "capítulo na página $p $([ $((p%2)) = 1 ] && echo ímpar || echo PAR)"
done

Ajuste o ^Capítulo [0-9] ao padrão dos seus títulos. Qualquer linha que termine em PAR é defeito.

  1. Feche o caderno. O total de páginas de um miolo para gráfica precisa ser múltiplo de 4. Páginas de anotações no fim do livro completam o caderno, no lugar de páginas vazias.

Por que cinco tentativas, e como o nosso construtor se protege

O compilador resolve as posições de página em rodadas. Em cada rodada, ele relê o documento sabendo o resultado da rodada anterior. Quando o conteúdo depende da própria numeração, cada página de enchimento empurra todas as seguintes. A informação sobre isso só avança uma rodada por vez. Com muitos enchimentos, o limite de cinco rodadas acaba antes de a conta fechar.

A defesa que adotamos tem duas partes. A primeira é evitar a causa. Use a quebra nativa, que decide a paridade dentro do compilador, sem consulta circular. A segunda é nunca confiar que "o PDF saiu". O construtor lê a saída do compilador e aborta se aparecer o aviso. Um arquivo diagramado com aviso de convergência é um arquivo que parece certo e não é.

Parte abre em página par

Quando o livro tem Partes (grupos de capítulos), a abertura da Parte usa uma página colorida. A cor sangra pela borda de fora. Nós abrimos a Parte em página par, para a faixa colorida sangrar pela borda externa. O primeiro capítulo vem na ímpar seguinte, sem enchimento. A regra da casa fica: capítulo em página ímpar, Parte em página par.

O erro que custa caro

Escolher a quebra simples para fugir da página em branco e perder a paridade sem perceber. Ou escolher a paridade por context e confiar que o livro "saiu". Nos dois casos o arquivo parece certo. A diferença só aparece na impressão, quando alguém abre o livro e vê um capítulo na página da esquerda.

Quando NÃO usar

Capítulo em página ímpar é convenção do livro impresso, não regra universal. É um critério de decisão: em livro digital (EPUB), que não tem página fixa, a regra não faz sentido. Em livro impresso com capítulos muito curtos, a quebra simples economiza páginas e custo de impressão. O mesmo vale se o editor aceita abertura em qualquer página. A decisão é de projeto e do editor.

Alternativa sem o nosso ambiente

Em programas de layout visual, existe uma opção de começar o capítulo em página ímpar. Confira o nome exato na sua versão. O princípio da conferência não muda. Depois de gerar o PDF, meça em que páginas os capítulos abriram. Não confie só no ajuste.

O que o Claude faz hoje, e como fazer sem ele

Hoje o Claude escreve a regra de título, roda o compilador e aborta se aparecer o aviso de convergência. Sem ele, você usa o trecho de compilação e o laço de medição deste artigo. Os dois rodam em qualquer máquina com o compilador e o poppler instalados.

Onde entra na operação

A regra vive no modelo de diagramação. O gate do miolo para a gráfica confere: capítulo em página ímpar, Parte em página par e nenhuma página sem texto. O desenho inteiro da esteira está em Como produzimos o miolo de um livro profissional sem InDesign. O compilador está em Typst no lugar do InDesign. A conferência completa do arquivo está no checklist de preflight do miolo. A margem que cresce com a sangria está em sangria, corte e zona de segurança.

Baixe, para guardar: checklist de preflight do miolo, com comando e limite por item (PDF).

Versões usadas neste artigo: veja a matriz de versões.

Perguntas frequentes

Por que o capítulo começa em página ímpar?

Porque em livro impresso a página ímpar é a da direita, a que o leitor vê ao abrir o livro. É uma convenção de leitura e de acabamento. Para ela valer sem página em branco, o enchimento entre capítulos precisa ser tratado.

O que fazer com a página que sobra entre dois capítulos?

Na nossa casa, ela vira página de anotações, para que nenhuma página fique em branco. A página é criada pela própria quebra nativa do compilador, com estilo de fundo próprio dentro do bloco da quebra.

O que significa o aviso "layout did not converge"?

Significa que o compilador tentou resolver as posições das páginas cinco vezes e não chegou a um resultado estável. Costuma aparecer quando o documento decide algo com base na própria numeração de página. O PDF sai, mas pode sair errado, então trate o aviso como erro.

Como confiro se todos os capítulos abriram em página ímpar?

Depois de gerar o PDF, extraia o texto de cada página com pdftotext e liste em que páginas aparecem os títulos de capítulo. Qualquer título em página par é defeito. O laço do artigo faz isso em poucas linhas.