Nota, uma linguagem de documentos para navegador para artigos acadêmicos e posts de blog
(nota-lang.org)- Vai além das limitações de PDFs e páginas web estáticas, buscando uma linguagem de documentos em que o navegador entenda a estrutura do documento e o leitor possa usá-la diretamente
- Documentos Nota são compilados em programas JavaScript e executados no navegador, permitindo usar variáveis, funções e estruturas de dados na escrita de documentos
- Foi projetada pensando na integração com bibliotecas JavaScript como KaTeX, Vega-Lite e Penrose, além de suporte a requisitos de acessibilidade
- Com o pacote
@nota-lang/nota, é possível instalar o executávelnotae trabalhar com documentos em fluxos de build ou edição interativa - Ainda é uma tecnologia nova e em mudança, então a arquitetura e a API podem mudar, e é preciso considerar bugs, lacunas e imprecisões nas ferramentas e na documentação
Estrutura de documentos que o navegador entende
- Nota é uma linguagem para escrever documentos como artigos acadêmicos e posts de blog
- O objetivo é levar os documentos para um meio próprio do século 21
- Dentro de um documento, há muita estrutura que o leitor precisa acompanhar, como definições de termos e referências
- Por exemplo, a palavra
Notafaz referência a um termo definido no parágrafo anterior - O Nota permite que o autor expresse essa estrutura, e o navegador a compreenda para que o leitor possa aproveitá-la
- Na página de exemplo, é possível clicar ou dar duplo clique na referência
Notapara ver como isso funciona
- Por exemplo, a palavra
- Documentos Nota são compilados em programas JavaScript
- É possível visualizar o documento em qualquer dispositivo com navegador web
- Variáveis, funções e estruturas de dados podem ser usadas para simplificar a redação do documento
- Pode ser integrado com bibliotecas JavaScript como KaTeX, Vega-Lite, Penrose
- Facilita o suporte a requisitos de acessibilidade, como leitores de tela
Instalação e fluxo de edição
- O Nota pode ser usado instalando o executável
notapor meio do pacote@nota-lang/nota- Os requisitos são NodeJS ≥ 16 e npm ≥ 6
- O diretório global de binários do NodeJS precisa estar no
PATHdo shell
- Um único documento Nota pode ser compilado com o seguinte fluxo
npm install --global @nota-lang/notaecho "@Title: Hello world" > index.notanota build index.notaopen dist/index.html
- Arquivos Nota podem ser editados de forma interativa com o comando
nota edit index.nota - A forma de escrever documentos pode ser consultada na Reference
- Para adicionar Nota a um site ou ver a arquitetura, consulte o Integration guide
A lacuna entre PDFs e a web estática
- Os principais meios de documentos digitais se dividem entre PDFs e páginas web
- O PDF foi projetado para refletir documentos físicos, carregando restrições do papel, como paginação, largura fixa e estilo imutável
- Páginas web permitem formatação dinâmica, como redimensionamento para celulares, tradução para outros idiomas e mudança de cores para usuários com daltonismo
- Páginas web também permitem interações dinâmicas, como textos que pedem mais contexto, diagramas que mudam de perspectiva e anotações para depois
- Hoje, esses recursos dinâmicos continuam sendo acessíveis principalmente a desenvolvedores web especializados
- Ferramentas de documentação existentes como LaTeX, Pandoc, Markdown e Scribble, em sua maioria, só conseguem gerar páginas web estáticas
- O Nota busca reduzir essa lacuna com uma linguagem de documentos de baixa barreira de entrada, alto teto de extensibilidade e curva de aprendizado suave
Estado atual e materiais de referência
- O Nota ainda é uma tecnologia nova e em evolução
- A arquitetura e a API continuam mudando
- As ferramentas podem ter bugs e recursos ausentes
- A documentação pode estar incompleta ou incorreta
- No momento, o projeto busca usuários iniciais que queiram participar da construção do Nota como linguagem de documentos do futuro
- Os componentes
@Definitione@Refpermitem que, com uma pequena quantidade de anotações no documento, o runtime do Nota mostre em contexto a definição de uma referência por meio de tooltip- Versões futuras do Nota podem incluir recursos como encontrar todas as referências a uma definição específica
- A filosofia de design pode ser vista em mais detalhes em A New Medium for Communicating Research on Programming Languages
1 comentários
Opiniões no Hacker News
Sou a pessoa que criou o Nota, e estou refinando novamente o design desde o protótipo inicial da página web
Estou construindo uma base mais sólida para questões como como misturar conteúdo e computação (https://arxiv.org/abs/2310.04368) e como a sintaxe torna o trabalho com documentos mais fácil/difícil/impossível (https://github.com/cognitive-engineering-lab/doclang-benchma...)
Ainda acredito na grande filosofia, mas acho que o Nota vai estar bem diferente em cerca de 6 meses. Nesse meio-tempo, vejo o Typst como o avanço mais legal na área de linguagens de documentos e recomendo dar uma olhada: https://typst.app/
A próxima versão do Nota deverá ser escrita 99% em Rust :-)
Se desempenho for realmente um problema, Rust faz mais sentido do que JavaScript, mas não sei se isso será decisivo para a maioria dos casos de uso
Mesmo tendo escrito muitos documentos grandes em LaTeX, nunca gostei dele; era uma monstruosidade para o meio acadêmico, não para negócios. Mesmo no Word, tarefas que eu queria fazer de forma consistente nem sempre eram fáceis; os estilos rapidamente se bagunçam, e a numeração e os marcadores também são propensos a deixar erros se infiltrarem
Quando há várias rodadas de revisões, controle de alterações vira um grande problema, e no fim você acaba dependendo da confiança de que a outra parte não vai sobrescrever o rastreamento. Só um produto que garanta que todas as alterações, do início até a aprovação final, sejam exibidas corretamente já poderia ser um killer app que empresas e advogados adorariam
Se salpicar blockchain nisso, talvez fique mais fácil captar investimento, mas na verdade parece mais um problema básico de criptografia do que de blockchain, e esse nível de complexidade não parece necessário
O mais importante em uma linguagem de documentos é priorizar essas duas coisas. Por exemplo, documentos TeX começam com código preparatório como
\documentclass, vários\usepackage, definições de theorem e configurações de fonte, enquanto documentos R Markdown/Quarto começam diretamente com o significado real do texto, como título, autores e resumoA diferença de ênfase fica bem clara
Isso inclui layouts apertados e cheios de informação, como pôsteres acadêmicos A0; estilos de documentos de normas nacionais como o GOST do espaço pós-soviético; requisitos de estilos bibliográficos que se multiplicam explosivamente conforme cada tradição internacional; fazer parecer com o estilo padrão de uma versão específica do MS Word; posicionar com precisão imagens ou texto sobre figuras para correções rápidas em artigos; e ajustar conscientemente esse tipo de coisa
No mundo TeX, tudo isso é tecnicamente possível, mas na prática exige magia negra tão profunda que nem usuários comuns com diploma querem se meter nisso
Nos últimos meses, tenho me divertido usando isso para explorar ideias de animação em SVG (https://simpatico.io/svg) ou concretizar novas estruturas de dados/algoritmos (https://simpatico.io/stree3)
O servidor inteiro e o processador de Markdown têm cerca de 500 linhas de código Node legível, com pouquíssimas dependências e nenhuma dependência transitiva, e sem necessidade de etapa de compilação. Por padrão, o servidor não permite recursos de terceiros nem cookies de nenhum tipo
Está no GitHub sob licença MIT, e estou organizando enquanto movo de um repositório pessoal para um repositório de organização. Referência: https://simpatico.io/lit
Onde não há necessidade de “dinamicidade essencial”, a ausência dela é, na verdade, um recurso, não um bug
No celular, prefiro muito mais ler páginas web do que PDFs, porque uma página web razoável normalmente consegue se adaptar à tela do aparelho
Precisamos de um formato que codifique informação visual e informação digital juntas. A camada digital não precisa ficar visível por padrão, mas deve ser acessível quando necessário
Claro que esses “recursos” foram considerados bugs e removidos da especificação ISO PDF/A, voltada à preservação de longo prazo: https://en.wikipedia.org/wiki/PDF/A
O ponto é que, às vezes, um documento deve ser apenas um documento. Em artigos científicos, LaTeX é algo que pessoas escrevem para pessoas, e comandos e pacotes customizados permitem criar documentos em texto puro tão legíveis quanto o artigo gerado. Isso também é bom para acessibilidade
Há um território inexplorado interessante em documentos dinâmicos, mas precisamos de bons exemplos de uso com bom gosto
Em resumo, é mais próximo de LaTeX, tem também alguns elementos de Markdown, é escrito em JavaScript, permitindo que muitas pessoas contribuam em uma linguagem que já conhecem, e é bom que tenha licença MIT
Não sei se tenho um uso imediato para isso, mas parece bem legal. Se eu fosse escrever algo que precisasse de recursos no estilo LaTeX, mas o local de submissão não exigisse LaTeX, acho que experimentaria o Nota
Considero Knuth quase uma figura semidivina, mas não é como se ele tivesse descido dos céus, nos entregue o TeX e dito: “nunca tentem nada novo para todo o sempre”
Também faltam muitos mecanismos de prevenção de erros e recursos de conveniência oferecidos por linguagens modernas. Ao usar LaTeX, preciso depender bastante de fragmentos em
\input{}para isolar blocos e evitar que tudo quebre por causa de uma única barra de escape esquecidaContinuo esperando por uma releitura moderna, mas sinto que estamos presos em um ótimo local difícil de escapar por causa de décadas de inércia e pacotes acumulados em torno do TeX
Entre coisas parecidas estão https://pandoc.org/, https://quarto.org/, https://markdoc.dev/, https://mdxjs.com/, https://typst.app/
O problema de novas tentativas nessa área é que elas entram em um espaço já lotado demais. Não importa muito se as soluções existentes não são perfeitas
É parecido com chegar a uma cidade histórica europeia com mil anos de arquitetura acumulada e defender o projeto de um excelente prédio novo. Terrenos vazios são raros, e as pessoas não derrubam estruturas antigas só para testar algo novo. Elas precisam perceber uma vantagem esmagadora
Na arquitetura, o aço e o concreto armado abriram a dimensão vertical e melhoraram muito o aproveitamento do espaço; depois disso, a história mudou
A questão central é se existe alguma dimensão inexplorada capaz de atrair pessoas para mais um formato de documento que promete “melhorar” ASCII, reStructuredText, wikitext, Markdown, TeX/LaTeX, AsciiDoc, HTML etc.
A resposta comum é uma infraestrutura de hipertexto semântico. A visão original ainda não se concretizou. Se assumirmos que os ecossistemas fechados de hoje são um pesadelo passageiro, uma web novamente descentralizada precisará de uma infraestrutura de autoria de documentos moderna, amigável ao usuário e fortalecedora
Ainda assim, podem existir outras dimensões capazes de levar a criação e o compartilhamento de documentos a um novo patamar. A beleza da inovação está em não ficar presa às regras e sabedorias existentes
É necessário um formato de documento eficiente e, para isso, ele deve ser um formato que não tente fazer tudo. Ou seja, tabelas devem separar tipos de documento por arquivo, como nos formatos padrão de planilha, diferentemente do HTML, que tenta fazer tudo por conta própria, incluindo tabelas e gráficos (SVG)
Ao separar cada coisa em arquivos distintos, em vez de o usuário ver tudo em um único navegador, ele pode escolher o programa que quiser para visualizar ou manipular documentos; isso também ajuda na distribuição pela rede e é vantajoso em ambientes com pouco armazenamento ou baixa largura de banda
Então, do meu ponto de vista, não há nada novo a inventar. Basta especializar e refinar o que já foi inventado
Seguindo o link, https://willcrichton.net/nota/ mostra vantagens convincentes no nicho para o qual o Nota foi pensado: tornar artigos acadêmicos de linguagens de programação mais fáceis de entender
Se ele consegue renderizar PDFs de alta qualidade é uma necessidade e uma pergunta óbvia. Para compatibilidade com sistemas existentes, talvez fosse até melhor renderizar para LaTeX
Basicamente, o Nota é markup + código (JavaScript), e essa combinação é o território que o MDX mira. Quando alguém mencionou isso no passado, o criador disse que o Nota é voltado para documentação, enquanto o MDX é voltado para sites: https://news.ycombinator.com/item?id=31349579
Sendo assim, acho que, para o Nota decolar, alguém precisa envolvê-lo em um produto. O resultado parece bom, mas mexer com Node.js para criar documentos é trabalhoso demais, e passa aquela sensação de LaTeX de novo. A maioria vai preferir Notion ou um processador de texto
Além disso, o Nota não é um concorrente direto da família TeX. O Nota cria coisas para serem lidas por navegadores web, enquanto xxxTeX cria coisas para serem lidas por leitores de PDF. Sei que o xxxTeX também pode gerar outros formatos de saída, mas a maioria o usa para gerar PDF
O MDX vem pronto para ser usado com qualquer framework, como React/Vue, mas isso significa que, por padrão, ele não oferece praticamente nenhuma opinião
O Nota parece algo que poderia ser plugado em um gerador de sites estáticos. Claro, para isso seria preciso fazer os dois trabalharem juntos, mas acho que é uma expectativa alcançável para alguém um pouco mais dedicado do que eu
Não entendo por que seria necessária uma linguagem que compila para JavaScript para criar páginas de texto. O AsciiDoc já atende ao mesmo objetivo
Editoras reais, como a O’Reilly, também usam AsciiDoc como formato de entrada para criar livros e sites
Venho usando AsciiDoc nos últimos anos e gosto bastante. Só volto para Markdown em lugares onde AsciiDoc ainda não é suportado. Por exemplo, GitHub e GitLab suportam renderização de AsciiDoc
Infelizmente, o PyPI ainda não suporta, mas é bom ver que mais gente parece estar olhando para isso: https://github.com/pypa/readme_renderer/issues/205
Porém, tenho algumas frustrações com as ferramentas atuais. Dá para ver, e eu agradeço, que um esforço enorme foi colocado no Asciidoctor, mas não há saída HTML5 semântica, a integração com geradores de imagens é difícil, ou pelo menos mais difícil do que deveria ser, e ele é pesado a ponto de ser a única dependência Ruby em toda a minha máquina
Tirando o problema do Ruby, essas questões estão abertas no GitHub, então acho que podem ser resolvidas com mais tempo e recursos
Não sei bem. Emacs org-mode parece melhor e também menos dependente de JavaScript
https://docusaurus.io/ também é muito bom e flexível. Se quiser expandir o Nota de uma forma parecida, recomendo olhar para esses dois
Eu estava justamente pensando na forma mais fácil de criar um blog com conteúdo majoritariamente estático, mas que permita inserir gráficos interativos ou customizações arbitrárias quando eu quiser. Fico imaginando se o Nota seria uma boa opção
Também olhei o Quarto (https://quarto.org/) como outra alternativa, e talvez dê para usar um blog estático simples como Jekyll e depois editar manualmente o HTML gerado quando necessário
Assim dá para usar todo o HTML, customizar o processo de geração, gerenciar as dependências com relativa facilidade, e os formatos relacionados são padronizados
No Astro, você escreve componentes no estilo React, e ele compila para HTML/CSS puro, exceto nos casos em que JavaScript é realmente necessário. Também fiz meu site pessoal e meu blog com Astro: https://sjer.red/, e o código-fonte está em https://github.com/shepherdjerred/shepherdjerred.com
Também há um tutorial para criar um blog com Astro: https://docs.astro.build/en/tutorial/0-introduction/