Typst, uma alternativa fácil de aprender para substituir o LaTeX
(github.com/typst)- O Typst é um sistema de composição tipográfica baseado em markup que busca a mesma potência do LaTeX, mas sendo mais fácil de aprender e usar, e este repositório inclui o compilador e a CLI necessários para compilar documentos localmente
- Oferece markup embutido para tarefas básicas de formatação, funções flexíveis, scripting integrado, composição de fórmulas, gerenciamento de bibliografia e mensagens de erro amigáveis
- Busca tempos de compilação rápidos por meio de compilação incremental, e o
typst watchobserva mudanças no código-fonte para recompilar mais rápido do que começar do zero a cada vez - A CLI pode ser instalada por binários de release, gerenciadores de pacotes,
cargo, Nix e Docker, cria PDFs comtypst compile file.type também permite definir caminhos de fontes personalizados - Os princípios de design são obter simplicidade com consistência, poder com composição e desempenho com incrementalidade, visando velocidades que permitam pré-visualização instantânea
O que o Typst oferece
- O Typst é um sistema de composição tipográfica baseado em markup projetado para ser tão poderoso quanto o LaTeX, mas mais fácil de aprender e usar
- Os principais recursos são os seguintes
- Markup embutido para tarefas de formatação frequentes
- Funções flexíveis para outras tarefas
- Sistema de scripting fortemente integrado
- Composição de fórmulas, gerenciamento de bibliografia etc.
- Tempos de compilação rápidos com base em compilação incremental
- Mensagens de erro amigáveis quando algo dá errado
- Este repositório contém o compilador e a CLI do Typst necessários para compilar documentos Typst localmente
- Se quiser uma experiência de escrita melhor, você pode usar o editor online colaborativo gratuito
Sintaxe e modelo de escrita
- O Typst usa set rules como
#setpara definir propriedades de elementos, como tamanho da página ou numeração de títulos- Se a altura de
pagefor definida comoauto, ela será ajustada ao conteúdo - Se precisar de um controle mais completo, você pode redefinir totalmente a aparência dos elementos com show rules
- Se a altura de
- Os títulos são escritos com a sintaxe
= Heading- Um único
=cria um título de nível superior,==cria um subtítulo - A lista completa de markup leve pode ser consultada na documentação de syntax
- Um único
- As fórmulas são delimitadas por cifrões
- Se você adicionar espaços extras ao redor do conteúdo da fórmula, ela pode ser colocada em um bloco separado
- Identificadores com várias letras são interpretados como definições e funções do Typst, a menos que sejam colocados entre aspas
- Itens como
flooresqrtnão exigem barra invertida phi.altaplica o modificadoraltaphipara selecionar uma variante específica do símbolo
- O scripting permite inserir código no documento escrevendo expressões após o hash (
#)- O exemplo calcula o n-ésimo número de Fibonacci com duas variáveis e uma função recursiva
- A função
tablerecebe células por linha - O operador de expansão
..é usado para passar itens de array como argumentos individuais
Instalação e uso da CLI
- A CLI do Typst pode ser instalada de várias formas
- O código-fonte e os binários pré-compilados da release mais recente podem ser baixados na página de releases
- Você pode colocar o binário em um diretório incluído no
PATHe depois atualizá-lo comtypst update - Versões de gerenciadores de pacotes podem ficar atrasadas em relação à release mais recente
- Exemplos de instalação com gerenciadores de pacotes
- Linux: Typst on Repology, Typst's Snap
- macOS:
brew install typst - Windows:
winget install --id Typst.Typst
- Se você tiver a toolchain Rust, pode instalar com
cargo- Release mais recente:
cargo install --locked typst-cli - Versão de desenvolvimento:
cargo install --git https://github.com/typst/typst --locked typst-cli
- Release mais recente:
- Nix e Docker também são suportados
- Nix:
nix-shell -p typst - Typst flake:
nix run github:typst/typst-flake -- --version - Docker:
docker run ghcr.io/typst/typst:latest --help
- Nix:
- O comando básico de compilação é o seguinte
typst compile file.typ: criafile.pdfno diretório de trabalhotypst compile path/to/source.typ path/to/output.pdf: cria o PDF no caminho especificado
- O monitoramento de alterações é executado com
typst watch file.typ- Como o Typst usa compilação incremental, ele é mais rápido do que recompilar tudo do zero a cada vez
- Também há comandos relacionados a fontes
typst compile --font-path path/to/fonts file.typ: define diretórios adicionais de busca de fontestypst fonts --font-path path/to/fonts: exibe a lista de fontes encontradas no sistema e no diretório especificadoTYPST_FONT_PATHS=path/to/fonts typst fonts: forma de variável de ambiente na sintaxe do Linux
- Outros subcomandos e opções podem ser consultados com
typst help, e a ajuda de um comando específico comtypst help watch
Ambiente de edição e comunidade
- Se você quiser uma experiência integrada, como IDE, autocompletar e pré-visualização instantânea, pode usar o app web do Typst
- O servidor de linguagem criado pela comunidade, Tinymist, está integrado a várias extensões de editores
- Os principais espaços da comunidade são o Forum e o servidor no Discord
- O Forum é adequado para fazer perguntas, ajudar outros usuários e compartilhar resultados feitos com Typst
- O Discord é mais adequado para perguntas rápidas, discussões sobre contribuições e bate-papo
- O Typst Universe é o espaço onde a comunidade compartilha templates e pacotes
- Pacotes criados por você podem ser enviados ao repositório de pacotes
Contribuição e build
- Se você encontrar um bug, pode abrir uma issue, e se quiser implementar novos recursos ou corrigir bugs, basta seguir o guia de contribuição
- Para fazer o build manualmente, instale a versão estável mais recente do Rust e execute os seguintes comandos
git clone https://github.com/typst/typstcd typstcargo build --release
- O binário otimizado é salvo em
target/release/ - Compartilhar pacotes com a comunidade também é uma forma de contribuir
Pronúncia e grafia do nome
- A pronúncia em IPA de Typst é
/taɪpst/ "Ty"é pronunciado como oTyde Typesetting, e"pst"como opstde Hipster- Ao escrever Typst, ele deve ser tratado como nome próprio, com
Tmaiúsculo
Princípios de design
- O Typst foi projetado em torno de três objetivos: Power, simplicity, performance
- O objetivo é ter um sistema comparável em potência ao LaTeX, fácil de aprender e usar, e rápido o bastante para viabilizar pré-visualização instantânea
-
Simplicidade com consistência
- Se você souber como fazer uma coisa no Typst, deve conseguir transferir esse conhecimento para outras tarefas
- Se houver várias maneiras de fazer a mesma coisa, elas devem existir em níveis diferentes de abstração
= Introductione#heading[Introduction]são um exemplo permitido disso, já que a primeira é açúcar sintático da segunda
-
Poder com composição
- Em vez de colocar opções de configuração em tudo, o design adota um pequeno número de componentes que podem ser combinados de várias formas
- O TeX também é um sistema de baixo nível combinável, mas as pessoas usam LaTeX em vez dele
- A visão é que, no LaTeX, em muitos casos você acaba dependendo de pacotes como
\\usepackage{knob}
-
Desempenho com incrementalidade
- Todos os recursos da linguagem Typst precisam ser compatíveis com compilação incremental
- O
comemocuida, em segundo plano, de grande parte do trabalho relacionado à compilação incremental
Patrocínio e apoio
- Como principais apoios ao trabalho open source do Typst, são listados os seguintes itens
- Posit: financiamento de um engenheiro de compiladores em tempo integral
- NLnet: apoio ao trabalho no Typst por meio de várias bolsas do fundo NGI Zero Core
- Trabalho em exportação para HTML
- Trabalho em acessibilidade em PDF
- Science & Startups: financiamento do desenvolvimento do Typst de janeiro a junho de 2023 por meio da Berlin Startup Scholarship
- Zerodha: patrocínio pontual
- Essa lista inclui apenas contribuições para o trabalho open source que ultrapassaram ou devem ultrapassar €10K
2 comentários
Lê-se LaTeX como "latex"? Eu diria "leitec".
Opiniões no Hacker News
O Typst é muito bom, e nossa organização também está bastante satisfeita com ele.
Precisamos gerar mais de 1,5 milhão de PDFs todas as noites, então testamos várias soluções, como Puppeteer para conversão HTML→PDF, pdflatex, lualatex etc.; o Typst foi várias ordens de grandeza mais rápido e também consumiu menos recursos.
A experiência de desenvolvimento para criar templates de PDF em LaTeX não era boa, mas os templates do Typst foram bastante intuitivos.
Escrevi mais detalhes no blog sobre essa stack de geração de PDFs em larga escala: https://zerodha.tech/blog/1-5-million-pdfs-in-25-minutes
Estou criando um produto de relatórios em PDF em massa baseado em Puppeteer e, usando jobs noturnos, cache e processamento paralelo, o desempenho é razoável.
https://www.cx-reports.com
Muito tempo atrás, quando precisei lidar com um problema parecido, ele foi uma boa solução.
A escala não era desse nível, mas ainda assim servia bem.
Escrevi muitos trabalhos no Typst, e a escrita acadêmica ficou mais concisa, envolvente e, ouso dizer, divertida.
Graças ao caráter funcional da sintaxe do Typst, não preciso lidar com comportamentos imprevisíveis que hoje aparecem no Microsoft Word e, às vezes, no Google Docs.
Usando uma IDE local como o VSCode, dá para ter praticamente todos os recursos que eu quero.
Em comparação com LaTeX, a diagramação do documento como um todo é muito mais intuitiva, mas, ao escrever longas derivações de equações ao longo de várias páginas, sinto que o LaTeX é mais fácil de digitar.
A sintaxe do LaTeX é mais próxima de Markdown do que de uma linguagem de programação funcional, então é preciso pensar menos de antemão ao diagramar fórmulas com muitas funções, sobrescritos e subscritos.
Por enquanto, acho que eu não escreveria um artigo em Typst.
Ao sair da instituição, quase certamente será preciso converter, e o arXiv também exige o código-fonte em LaTeX.
Hoje, as ferramentas em torno do LaTeX são bastante boas, e há muitas IDEs que ajudam.
Pessoalmente, uso o Org-Mode do Emacs, que compila para LaTeX.
https://github.com/mitex-rs/mitex
Há várias discussões anteriores e materiais relacionados: https://hn.algolia.com/?q=typst
1 ano atrás, 146 comentários: https://news.ycombinator.com/item?id=35250210
8 meses atrás, 34 comentários: https://news.ycombinator.com/item?id=38354422
2 anos atrás, 53 comentários: https://news.ycombinator.com/item?id=34423590
2 anos atrás, 30 comentários: https://news.ycombinator.com/item?id=32209794
É surpreendente que a saída HTML não tenha sido uma funcionalidade central desde o início e ainda esteja em andamento.
O fato de o LaTeX ter uma relação estranha com a web parece ser algo que um novo projeto concorrente, começando do zero, tentaria resolver direito desde o começo.
[0] https://github.com/typst/typst/issues/721
Ambos enfrentam o mesmo problema: web e papel funcionam de maneiras completamente diferentes e têm conceitos que não podem ser traduzidos entre si.
Por isso, é preciso definir uma forma de o resultado da diagramação se encaixar naturalmente em outro ambiente.
Se o Typst tivesse mirado HTML desde o início, o desenvolvimento teria sido muito mais fácil, mas nesse caso ele não teria passado de um gerador de sites excessivamente complexo.
O fato de ter mirado PDF primeiro, a meu ver, mostra uma intenção real de competir com o LaTeX.
Se, ao iniciar um novo sistema de marcação, não havia um plano para criar documentos acessíveis, considero isso uma decisão muito ruim.
Não vou usar o Typst até que ele seja capaz de criar documentos acessíveis.
Não gosto de PDF.
Estou esperando que o LaTeX desapareça e o Typst tome seu lugar.
A experiência de uso é completamente diferente, e os resultados são muito impressionantes.
Até agora, eu gerava arquivos TeX com templates Jinja2, mas o Typst consegue receber JSON pela linha de comando, é fácil de usar e é poderoso o bastante para eliminar completamente a etapa em Python.
Sem falar que o tempo de compilação fica na casa dos milissegundos.
No início, por estar acostumado com o jeito de fazer no LaTeX, tentei gerar templates do Typst usando templates Go.
Mas foi ótimo descobrir que o Typst consegue usar JSON diretamente com facilidade no seu próprio motor de scripting.
Em 1999, enquanto trabalhava como estagiário, fiquei encarregado de escrever um documento de padronização para o grupo de trabalho de padrões de telefonia VoIP da TIA
O órgão de padronização tinha um template do Word que todo mundo usava, mas, como estudante de engenharia, eu já usava LaTeX havia algum tempo e gostava dele, então pensei: “No fim a saída vai ser PDF de qualquer forma, e a formatação provavelmente vai ficar melhor; por que não usar LaTeX?”
De fato, a saída do LaTeX ficou melhor, e meu chefe gostou do resultado sem jamais saber que eu não tinha usado Word
A reação dos membros do grupo de trabalho também foi boa, com um clima tipo “esse garoto é mesmo talentoso”
Para uma startup, causar uma boa impressão nas grandes empresas que participavam do grupo de trabalho era muito importante para o futuro da empresa, talvez até para sua sobrevivência
Então, um dia, meu chefe disse: “Você pode me mandar aquele documento do Word para eu enviar a um figurão de uma grande empresa que talvez nos compre? Ele quer usá-lo como novo template de documento”, e senti aquela sensação de afundar, como quando, aos quatro anos, fiz xixi dentro do armário com um amigo só para testar e minha mãe nos pegou
No fim, contratei um amigo para passar o fim de semana inteiro refazendo tudo penosamente no Word, e meu chefe recebeu o documento
A empresa foi adquirida 18 meses depois por US$ 100 milhões
De qualquer forma, LaTeX ainda parece 1000 vezes melhor que Word
Isso parece um concorrente de serviços como Overleaf ou CodiMD
É mais uma sintaxe, mas parece que o pandoc dá suporte
Ultimamente, como tenho programado em R, tenho usado cada vez mais o Quarto, que gera saídas bem boas, especialmente HTML
Mas essas ferramentas ainda não resolvem dois problemas importantes no uso acadêmico: oferecer um bom diff para revisores e permitir compartilhar e comentar facilmente com colaboradores não técnicos
Por isso, ao menos na escrita científica da minha área, acho que vai ser difícil substituir o Word por muitos anos ainda
[1] https://github.com/overleaf/overleaf
[2] https://github.com/hackmdio/codimd
[3] https://pandoc.org/typst-property-output.html
[4] https://quarto.org/
Ao usar GT, a saída PDF do Typst pareceu um pouco mais áspera que o PDF em LaTeX
Espero que isso seja corrigido
Comparado ao LaTeX, o que mais me incomoda no Typst é que ele não lida bem com recursos básicos de tipografia sofisticada
Por exemplo, no modo matemático, ainda falta no tratamento de tipos de espaçamento (mathop, mathbin, mathrel etc.) ou tamanhos de delimitadores (big, bigg etc.)
O espaçamento entre símbolos e operadores no modo matemático pode ser alterado em https://typst.app/docs/reference/math/class/, e o tamanho dos delimitadores pode ser alterado ou tratado automaticamente em https://typst.app/docs/reference/math/lr#functions-lr
Mas parece que o LaTeX também é assim
Parece realmente bom, e pretendo experimentar
Só que continuo pensando nisso
Probabilidade que eu estimaria de que, daqui a 15 anos, LaTeX ainda será gratuito e mantido: 99,9999%
Probabilidade que eu estimaria de que, daqui a 15 anos, alguma outra ferramenta nova ainda será gratuita e mantida: 5%
O bash e algumas outras coisas são assim também
Mesmo havendo muitas alternativas melhores, os pontos de dor não são grandes o suficiente para que sejam substituídos
Gosto do Typst
Ele é especialmente bom ao lidar com entradas geradas por programação, e a flag
--inputpode receber JSONDentro do arquivo, dá para carregar JSON facilmente com a função dedicada
json.decode()Como é muito fácil produzir resultados estáveis, também migrei meu projeto de LaTeX para Typst
[0] https://typst.app/docs/reference/foundations/sys/
[1] https://resgen.app