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
- 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.
- Salve o arquivo acima como
livro.typem uma pasta. - Coloque as fontes em uma pasta ao lado, por exemplo
fontes/, com os arquivos estáticos da Crimson Pro. - Compile:
typst compile --font-path fontes livro.typ livro.pdf
- 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
--inputpor 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.



