Um livro online, losangos e parênteses demais

Arrumando mais sarna pra me coçar

Gui C de Souza
8 min readOct 7, 2023
Print do site do meu livro, mostrando uma seção “Web (beta)” e um botão “(em breve)”. Por trás do texto, há um mockup de um layout HTML do livro.
esse “em breve” que nunca chega

Há vários anos, eu comecei a escrever algo que eu ainda ouso chamar de “livro didático” de Química: Química com (um pouquinho de) contexto. Na época que eu finalizei o primeiro capítulo (2019, meu Deus do céu), eu até escrevi uma breve apresentação.

Agora, em outubro de 2023, tem pouco mais de 100 páginas diagramadas e publicadas em PDF (que foram publicadas em janeiro de 2022…) — e eu aparentemente cansei do InDesign.

Eu continuo escrevendo, pelo menos um parágrafo por dia. A régua está baixíssima, o ritmo está horrível, mas seguimos tentando.

Na real eu não cansei do InDesign, mas eu percebi que tentar diagramar um projeto não finalizado talvez não tenha sido a melhor ideia (jura?). Hoje eu vejo que os primeiros capítulos merecem uma reescrita (ou talvez várias), figuras adicionais… só que agora o livro parece uma camisa apertada: algumas páginas tão com a diagramação tão bonitinha que se eu mexer no texto o layout explode.

E além disso, é meio ruim ler um PDF no celular (que é o dispositivo mais usado pra acessar a internet no Brasil, eu acho), ainda mais um PDF de um livro com layout assimétrico (margens externas maiores que as internas), como é o meu.

Print do PDF livro, no celular. Há duas páginas, uma abaixo da outra; o zoom pega completamente a coluna de texto da primeira, mas corta o texto da segunda.
uma delícia ter que ficar arrastando pra lá e pra cá entre uma página e a próxima

Some isso ao fato de que “quem em sã consciência pararia o seu dia para ler um livro de química não terminado”. Acabei desanimando um pouco.

Em algum momento da vida, eu esbarrei num livro digital chamado Practical Typography*, e achei interessante a ideia de ser um livro digital, com botões pra avançar e retroceder capítulo, etc.

*Pus o link de um capítulo porque, se linkar a página inicial, ele detecta que você veio do Medium, e te joga numa explicação de que o livro é grátis mas que seria bom você pagar por ele comprando as fontes do autor.

Não é uma ideia nova. Mas eu nunca fui de ver livros digitais, e me deixei levar pelo layout bem feitinho (que se readapta no celular, tem uma tipografia bacana, etc.). E aí veio a ideia de fazer uma versão assim do QCUPDC (eu sei, a abreviação é tosca, mas se você pesquisar no Google ela só retorna o meu livro — depois de você confirmar pro Google que a pesquisa é essa mesmo).

Depois de um tempo, eu consegui adaptar a diagramação pra algo que funciona no celular (ainda não fiz um layout mais amplo pra desktop) e já tenho um visual alfa — até implementei modo escuro!

Print da versão alpha do livro em HTML, com texto cinza claro e fundo cinza escuro.
(será que oferecer modo escuro de um suposto “livro” é sinal de estar online demais)

Mas aí vem a questão dos manuscritos. Eu escrevo o livro em Markdown, que são arquivos de texto puro em que você marca itálico e negrito com underlines/asteriscos (que nem no Whatsapp ou no Discord), títulos com #, etc. Eu comecei escrevendo no Google Docs e exportando um arquivo Word pra importar no InDesign e descobri que é um pesadelo importar Word no InDesign porque ele traz uma pá de estilos de texto automáticos do Word, é um saco. Passei a apreciar texto puro muito mais.

Pra levar os arquivos Markdown pro InDesign eu uso uma conversão envolvendo o Pandoc, que consegue fazer um arquivo .icml que dá pra importar no ID de um jeito mais “limpo”. Mesmo assim, depois de importar, havia um trabalho extra de transformar todas as notas de rodapé em notas laterais, reformatar algumas coisas, e inserir todas as figuras. Para cada capítulo.

(Já usei vários editores de texto pra Markdown: Typora era o mais bacana, mas ficou pago; aí tentei o MarkText, mas ele tinha uns bugs chatos com notas de rodapé; agora tô usando o Obsidian. No celular eu às vezes uso o Markor. Dá pra escrever Markdown no Bloco de Notas, no VS Code, etc. mas esses editores já aplicam a formatação no preview.)

Um pouco inspirado em outro livro bem diagramado que eu achei por aí (Motion Mountain), eu pensei em voltar ao querido LaTeX (onde sei fazer várias coisas bacanas mas não me considero expert), já que o livro vai ter capítulos com várias fórmulas químicas e equações (matemáticas e químicas). Mas ia levar um tempão tentar replicar fielmente o layout do InDesign no LaTeX, e eu fiquei com preguiça — e presumo que não conseguiria replicar 100% porque o próprio LaTeX me impediria de fazer um layout “camisa apertada estourando”.

E aí eu vi que o autor do Practical Typography escreveu uma linguagem de programação personalizada pra fazer o livro dele, partindo de arquivos-fonte especiais: Pollen. Ele fez uma propaganda tão boa que eu acabei ficando curioso.

Interlúdio: você já percebeu o que está acontecendo aqui né. É meu cerebrinho arranjando inúmeras saídas pra fugir da dura e patética realidade que é: termine o texto do livro primeiro, depois se preocupe com o jeito que as pessoas vão ver isso. Este exato texto aqui é mais uma dessas fugas.

Esse sistema Pollen tem um esquema parecido com o LaTeX no sentido de que você marca as coisas com comandos: no LaTeX se usa a barra invertida (ex.: \textbf{Texto em negrito}) e, por algum motivo excêntrico, o criador do Pollen escolheu um losango como caractere especial (ex.: ◊strong{Texto em negrito}). Ele até dá uma justificativa lá que eu até acho aceitável, mas parece muito que é algo feito só pra diferenciar dos outros.

Enfim, o argumento do autor é que Pollen é também uma linguagem de programação. Então, esses comandos podem ser simplesmente elementos HTML (como o strong, que eu citei acima, que vai simplesmente pôr <strong> e </strong> ao redor desse texto quando virar HTML) ou podem ser funções que renderizam algo mais específico e elaborado. Por exemplo, eu posso inventar um comando ◊sec{Título da seção} que gere o seguinte código HTML:

<h2 id="titulo-da-secao">Título da seção</h2>

Dessa forma, a sua escrita poderia ser marcada no próprio arquivo-fonte com elementos mais semânticos: quer escrever o título de um livro, não aperte itálico, use ◊livro{Pare de se odiar}; quer linkar um site e colocar a data que você acessou, coloque ◊link["11 de setembro de 2023"]{https://instagram.com/celsoportiolli}. Depois você escreve um arquivo com a definição desses comandos, que vai dar conta de transformar isso numa série de tags HTML, ou numa série de comandos LaTeX; tudo a partir de um único arquivo-fonte.

Mágico, né?

A questão é que Pollen é escrita em cima de outra linguagem de programação chamada Racket. E Puta. Que. Pariu. é uma diferença imensa pra quem só sabe um pouco de Javascript e de Python.

Eu estou tentando entender as funções básicas tanto do Pollen, quanto do Racket, já consegui fazer um arquivo-fonte decente pra um capítulo, mas faltam várias coisas (especialmente as coisas numeradas e coisas que envolvem referências cruzadas — no InDesign e no LaTeX era tão fácil… no Pollen/Racket eu ainda nem tenho ideia de como implementar).

Por um lado, eu não estou vendo tanto problema porque é saudável pro cérebro tentar aprender algo novo, apesar de tudo (e eu tenho um certo tempo pra gastar com isso). Eu percebi que uma das coisas que eu gostaria de adiar ao máximo é adquirir demência e/ou Alzheimer, então tem que manter o cérebro trabalhando, apesar de alguns dias eu querer que ele fosse lisinho como um peito de frango cru.

Mas é complicado, é um território diferente. A sintaxe do Racket é diferente da do JS ou do Python — tem tantos parênteses, meu Deus. E eu achei a documentação meio intrincada, um pouco difícil de entender.

Por exemplo, se você faz um par de coisas e quer o primeiro e o segundo elemento dela, em JS você escreve meu_par[0] e meu_par[1] (o zero e um você entende que “ah, começa a contar do zero, beleza”). Em Racket, eu fui ver e tem que ser um negócio tipo (car meu_par) e (cdr meu_par) . Por quê “car” e “cdr”???

Documentação do Racket mostrando o que são as funções “car” e “cdr”.
essa documentação ainda tá simples, o problema é quando começa a aparecer um monte daqueles “pair?” “string?” “blebleble?”

Isso sem falar numas loucuras que tem de usar aspa, acento grave, vírgula, vírgula com arroba

Print da Wikipedia: “car” = “Contents of the Address part of Register number” e “cdr” = “Contents of the Decrement part of Register number”.
pelo amor de Deus

Sendo assim, eu tô fazendo o que um bom dev faz: roubando trecho de código dos outros. (calma)

Eu encontrei um outro cara que fez um livro usando Pollen: Why Cryptocurrencies? — tô nem aí pro tema do livro, mas o autor postou os arquivos-fonte no Github e eu tento entender como funcionam as funções Racket dele. Também achei um outro cara que fez alguns projetinhos e umas lives tentando explicar Pollen.

(Enquanto eu catava links pra cá, eu descobri que esse cara das lives fez uma própria versão de programinha-tipo-Pollen mais adaptada pros usos dele. E essa versão usa um bullet (•) em vez do losango. Então tá.)

Verdade seja dita, o criador do Pollen tentou mudar a sintaxe e diminuir o uso de tantos parênteses como o Racket nativo usa, por exemplo. Mas se eu quiser fazer um breguenaite mais elaborado, fatalmente eu vou ter que usar a sintaxe Racket.

Mesmo assim, é pouca gente que usa Pollen, e não se compara aos anos de material “pronto” que a comunidade LaTeX tem, por exemplo. Eu admito, eu até perguntei pro ChatGPT se ele sabe um tanto de Pollen (ele disse que sabe) pra ver se ele me ajuda com algumas coisas.

Trecho de código Racket que vai da linha 53 à 92.
Tudo exceto as três últimas linhas é código que o ChatGPT me ajudou a construir pra criar uma id automática pra fazer links para as seções do livro. Se tem um jeito mais fácil, nativo do Pollen, quando eu descobrir eu vou ficar bem puto.

Tá sendo certamente um dos caminhos que eu poderia tomar pra fazer esse livro em HTML. É o melhor de todos? Claro que não. Eu sei, e você também sabe, o caminho certo: terminar de escrever a caraglia do livro primeiro. Mas enquanto isso não acontece, eu continuo tentando fugir.

(Se você quiser ver a versão alfa do QCUPDC em HTML, ela está aqui. Os links de navegação estão quebrados e as legendas das figuras estão bugadas.)

--

--

Gui C de Souza

Protoprofessor de Química e pseudoeditor de vídeo que arrisca uns motion graphics.