Produção de Livros

234 páginas em menos de um segundo: o que roda por baixo quando o InDesign sai do caminho

Um livro de 234 páginas compilou em 964 milissegundos. O que roda por baixo não é um programa de layout, é um compilador de texto, e isso muda quem consegue diagramar.

JonathanJonathan
8 min de leitura1.480 palavras
Capa do artigo: 234 páginas em menos de um segundo: o que roda por baixo quando o InDesign sai do caminho (eBuz, Produção de Livros)

Um livro de 234 páginas compilou em 964 milissegundos no servidor que usamos todo dia. Não foi uma demonstração. Foi a medição de um livro real, no meio de uma rodada de revisão.

O que roda por baixo não é um programa de layout. É um compilador de texto. Você escreve o livro em um arquivo, roda um comando e sai um PDF. Se o autor pede um ajuste na página 40, você muda uma linha e roda o comando de novo.

Isso troca a pergunta. Em vez de "quem sabe mexer no InDesign", passa a valer "quem sabe ler um arquivo de texto". E essa segunda pergunta tem muito mais gente capaz de responder.

O que o Typst faz de verdade

O Typst é um compilador de documentos com uma linguagem de marcação própria. O livro é um arquivo de texto com extensão .typ. O comando typst compile transforma esse arquivo em PDF.

A parte que importa para quem faz livro são as regras de estilo. Você escreve uma vez como o texto do corpo deve ficar, como o título de capítulo deve abrir, qual é a margem. A regra vale para o livro inteiro. Mudou o corpo de 10,5 para 11 pontos? Uma linha, e todas as páginas se refazem.

Como o livro é texto, ele também pode ser versionado. Dá para ver exatamente o que mudou entre a versão de ontem e a de hoje. Isso é o contrário de "livro-final-v3-revisado.indd".

O arquivo mínimo de um livro

Este é um miolo inteiro, em 6 x 9 polegadas, com margens espelhadas e título de capítulo que abre sempre em página ímpar:

#set page(width: 6in, height: 9in,
  margin: (inside: 25mm, outside: 20mm, top: 25mm, bottom: 25mm))
#set text(font: "Crimson Pro", size: 10.5pt, lang: "pt")
#set par(justify: true, leading: 0.68em, spacing: 0.9em)

#show heading.where(level: 1): it => {
  pagebreak(weak: true, to: "odd")
  v(30mm)
  text(size: 20pt, weight: "bold", it.body)
  v(8mm)
}

= Primeiro capítulo
O texto do autor entra aqui, como texto comum.

= Segundo capítulo
O estilo do título vale para o livro inteiro.

Três blocos fazem quase todo o trabalho. O set page define o papel e as margens. O set text e o set par definem o corpo. O show heading diz como todo título de nível 1 se comporta. O texto do autor fica fora das regras, escrito como texto comum.

Passo a passo: do arquivo ao PDF

  1. Instale o compilador. A versão que usamos está na matriz de versões. Se a sua for outra, leia a seção "O erro que custa caro" mais abaixo.
  2. Salve o arquivo acima como livro.typ em uma pasta.
  3. Coloque as fontes em uma pasta ao lado, por exemplo fontes/, com os arquivos estáticos da Crimson Pro.
  4. Compile:
typst compile --font-path fontes livro.typ livro.pdf
  1. Confira o tamanho de página:
pdfinfo livro.pdf

A linha Page size deve dizer 432 x 648 pts, que são as 6 x 9 polegadas. Se disser outra coisa, o papel está errado antes de qualquer outra conferência. O motivo de esse número ser tão importante está no artigo sobre o formato 6 x 9 e a armadilha do "16x23".

Repare no que o exemplo produz: o capítulo 2 abre na página 3, e a página 2 sai em branco. É o comportamento correto da quebra para página ímpar, e é também o começo de um problema que custou caro. Ele tem artigo próprio: capítulo em página ímpar sem página em branco.

Do capítulo ao livro inteiro

Um livro de verdade não cabe em um arquivo só. A solução é um arquivo principal com as regras e um arquivo por capítulo, ligados por #include:

// livro.typ (as regras de estilo aparecem acima, no arquivo mínimo)
#include "capitulos/01-abertura.typ"
#include "capitulos/02-metodo.typ"

Cada capítulo é um arquivo com o texto do autor, começando por = Título. Testamos essa estrutura com dois capítulos e o resultado foi um PDF de três páginas em 432 x 648 pontos, o capítulo 2 na página 3. A vantagem é prática: quando o autor pede uma mudança no capítulo 7, só o arquivo do capítulo 7 muda, e o Git mostra a diferença linha a linha. A regra de estilo continua uma só, no arquivo principal.

Dois cuidados. O primeiro é manter o texto do autor sem tocar nele: não deixe regras de estilo reescreverem palavras. O segundo é o caminho das fontes, que deve ser relativo à pasta do livro, e não absoluto, para o projeto abrir igual em outra máquina.

O erro que custa caro

Trocar a versão do compilador sem conferir. Em um teste nosso, compilamos o mesmo livro técnico com duas versões do Typst. As duas deram o mesmo número de páginas, o mesmo tamanho de página, nenhum aviso e a mesma quantidade de caracteres. Mesmo assim, o layout mudou em 71 de 158 páginas, em algumas com cerca de um quinto da página diferente. Quem só olha o total de páginas aprova um arquivo que não é o mesmo.

A conferência que pegou a diferença é simples:

pdftotext referencia.pdf a.txt
pdftotext novo.pdf b.txt
diff a.txt b.txt | wc -l

pdftoppm -r 60 -png referencia.pdf ref
pdftoppm -r 60 -png novo.pdf novo
compare -metric AE -fuzz 8% ref-001.png novo-001.png null:

O compare imprime quantos pixels diferem. Os nomes dos arquivos de imagem dependem do número de páginas do livro, então ajuste o 001 para o que o seu pdftoppm gerou. Por isso fixamos a versão e registramos o resultado na matriz.

Fonte variável. O compilador avisa, no log do nosso serviço, que fontes variáveis não são bem suportadas e que pesos intermediários podem sair imperfeitos. Use arquivos estáticos (Regular, Italic, Bold).

Recuo de parágrafo dentro de bloco. Na versão que usamos, a regra de recuo da primeira linha, colocada dentro de um bloco, não recua. Escreva o recuo explícito no parágrafo. É um registro da nossa documentação interna; confira na sua versão.

O que o Typst não faz por você

Ele não fecha o arquivo para a gráfica. A lista de padrões de PDF que o compilador aceita na versão que usamos tem PDF/A e PDF/UA, e não tem PDF/X, que é o que a gráfica costuma pedir. O fechamento em PDF/X-1a, com cor em CMYK, é outro passo, feito com o Ghostscript. Ele está em CMYK, K puro e PDF/X-1a com Ghostscript.

Também não confere nada. Compilar sem erro não significa livro certo. A conferência é o assunto de conferir o PDF final do livro.

Quando NÃO usar

Este é um critério de decisão, não uma medição. O modelo por regras é rígido de propósito, e isso é uma vantagem quando o livro é texto corrido com títulos, caixas e figuras. Fica menos confortável quando cada página é uma peça desenhada à mão, como um livro de arte, uma revista ou um catálogo em que o designer decide a posição de cada elemento olhando a página. Nesses casos, um programa de layout visual continua sendo a ferramenta certa.

Também não use se a sua gráfica exige arquivo nativo de um programa específico. Pergunte antes: a maioria aceita PDF, mas a exigência de cada uma é dela, e deve ser confirmada com ela. Se você já usa o InDesign e ele resolve, leia como ele entra na nossa esteira.

Alternativa sem o nosso ambiente

Você não precisa de servidor nenhum.

  • Linha de comando, na sua máquina. O caminho que mostramos neste artigo.
  • VS Code com a extensão Tinymist. Editor com visualização do PDF ao lado do texto.
  • Aplicativo web do Typst. Tem plano gratuito, com limite de 200 MB e 100 arquivos por projeto, segundo o site do próprio Typst. Existe plano pago. Não encontramos, na documentação que consultamos, o equivalente ao --input por linha de comando no aplicativo web. Se o seu modelo depende dessa chave, fixe o valor dentro do arquivo.

Nós também temos um serviço que recebe um arquivo e devolve um PDF. Ele é só uma embalagem em torno do mesmo comando. Você pode ignorá-lo.

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

Hoje o Claude escreve e ajusta o arquivo .typ, roda o typst compile e roda as conferências. Sem ele, você faz as mesmas três coisas: edita o arquivo, roda o comando e roda os comandos de conferência deste artigo. Nenhum passo exige conta, chave ou acesso ao nosso servidor.

Onde entra na operação

O mesmo compilador gera o boneco do livro (o esboço diagramado que o autor aprova), o miolo, a capa e a prova de revisão. O pipeline inteiro, do manuscrito ao arquivo da gráfica, está no guia Como produzimos o miolo de um livro profissional sem InDesign. Se o que você procura é alguém para conduzir o livro inteiro, conheça a máquina de livros da eBuz.

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

Perguntas frequentes

O Typst substitui o InDesign em todo livro?

Não. Ele serve bem para livro de texto corrido, com títulos, caixas e figuras, em que as regras de estilo valem para o livro inteiro. Livros em que cada página é desenhada à mão, como revistas e livros de arte, continuam pedindo um programa de layout visual.

Preciso saber programar para usar o Typst?

Não é preciso programar. A linguagem de marcação é parecida com texto comum, e um miolo simples cabe em dez linhas de regras de estilo. O que se aprende é como descrever margem, fonte e título, uma vez só.

O Typst fecha o arquivo em PDF/X para a gráfica?

Na versão que usamos, não. A lista de padrões de PDF que o compilador aceita tem PDF/A e PDF/UA, mas não PDF/X. O fechamento em PDF/X-1a, com cor em CMYK, é feito depois, com o Ghostscript.

Posso usar o aplicativo web do Typst em vez de instalar?

Pode para escrever e compilar, dentro dos limites do plano gratuito. Só não conseguimos confirmar se o aplicativo web aceita a chave de entrada por linha de comando que alguns modelos usam. Se o seu modelo precisar dela, fixe o valor no arquivo.