3 pontos por GN⁺ 2024-07-21 | 2 comentários | Compartilhar no WhatsApp
  • 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 watch observa 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 com typst compile file.typ e 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 #set para definir propriedades de elementos, como tamanho da página ou numeração de títulos
    • Se a altura de page for definida como auto, 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
  • 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
  • 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 floor e sqrt não exigem barra invertida
    • phi.alt aplica o modificador alt a phi para 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 table recebe 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 PATH e depois atualizá-lo com typst update
    • Versões de gerenciadores de pacotes podem ficar atrasadas em relação à release mais recente
  • Exemplos de instalação com gerenciadores de pacotes
  • 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
  • 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
  • O comando básico de compilação é o seguinte
    • typst compile file.typ: cria file.pdf no diretório de trabalho
    • typst 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 fontes
    • typst fonts --font-path path/to/fonts: exibe a lista de fontes encontradas no sistema e no diretório especificado
    • TYPST_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 com typst 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
  • 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 o Ty de Typesetting, e "pst" como o pst de Hipster
  • Ao escrever Typst, ele deve ser tratado como nome próprio, com T maiú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
    • = Introduction e #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 comemo cuida, 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
  • Essa lista inclui apenas contribuições para o trabalho open source que ultrapassaram ou devem ultrapassar €10K

2 comentários

 
sebul 2025-02-28

Lê-se LaTeX como "latex"? Eu diria "leitec".

 
GN⁺ 2024-07-21
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

    • Nunca ouvi falar de um caso em que documentos PDF fossem gerados nessa velocidade.
      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
    • Fico curioso para saber se vocês também testaram o ReportLab.
      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.
    • Fico curioso para saber se a organização devolveu alguma contribuição ao projeto, ou ao menos o apoiou financeiramente.
    • Fico curioso para saber qual é o caso de uso para gerar tantos PDFs assim.
  • 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.

    • Como alguém que já fez escrita acadêmica, gostaria que os periódicos dessem suporte ao Typst, ou que plugins ou pontes para LaTeX/Word se estabelecessem.
      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.
    • Para referência, o Typst já tem suporte parcial a LaTeX por meio do pacote mitex.
      https://github.com/mitex-rs/mitex
    • Para quem quase não precisa de fórmulas, fico curioso para saber qual é a vantagem em relação a usar Markdown.
  • 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

    • O Typst é uma ferramenta que pretende competir com o LaTeX.
      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.
    • A saída HTML do LaTeX ficou bastante boa hoje em dia, mas isso é resultado de esforços heroicos de muita gente em um sistema que originalmente não foi pensado para dar esse suporte.
      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.
    • Esse é um dos grandes problemas.
      Não gosto de PDF.
    • Ouvi dizer que o pandoc funciona razoavelmente bem para esse uso.
    • Imagino que você saiba que o TeX surgiu vários anos antes da web.
  • 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.

    • O scripting é muito bom.
      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/

    • Uso bastante o Quarto
      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.)

  • 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%

    • É a maldição de um sistema que surgiu cedo e é bom o bastante
      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 --input pode receber JSON
    Dentro 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