> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/overleaf-learn-latex-pt/artigos-aprofundados/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.md).

# Uma nova série de artigos: tokens TeX e conceitos relacionados — mas porquê (e como)?

Este artigo introdutório tem como objetivo explicar porque foi escrita esta série, o que espero alcançar e fornecer informações de enquadramento sobre as técnicas usadas para explorar os tokens TeX através da observação do funcionamento interno de um motor TeX. Esta página do artigo foi também concebida para conter as ligações para todos os artigos da série e será atualizada para disponibilizar essas ligações à medida que cada novo artigo for publicado.

### Ligações para os artigos

Cada artigo conterá um conjunto de ligações para outros artigos desta série.

* [O que é um “token TeX”?](/latex/overleaf-learn-latex-pt/artigos-aprofundados/53-what-is-a-tex-token.md)
* [O que é uma “lista de tokens TeX”?](/latex/overleaf-learn-latex-pt/artigos-aprofundados/54-what-is-a-tex-token-list.md)

## Contexto desta série de artigos

A motivação para escrever esta série de artigos surgiu da leitura de material sobre TeX que explicava muitas das atividades do TeX através do conceito de “tokens”, juntamente com o “processo de tokenização” do TeX, as “listas de tokens” e conceitos relacionados como “expansão de macros” e “comandos expansíveis”. Sempre que encontrava explicações relacionadas com TeX formuladas em termos de “tokens TeX”, a mesma pergunta continuava a surgir-me: O que é, exatamente, *é* um token TeX? Precisava de descobrir.

O âmbito e o conteúdo do primeiro artigo, [O que é um “token TeX”?](/latex/overleaf-learn-latex-pt/artigos-aprofundados/53-what-is-a-tex-token.md), são, pela sua própria natureza, bastante “próximos do hardware”, como dirão os programadores, e não há dúvida de que os “tokens TeX” poderiam ser classificados como um tema bastante arcano sobre o qual escrever: então, porque se dar ao trabalho? Em última análise, adota-se uma perspetiva — ou talvez um salto de fé — de que outras pessoas também poderão ter andado a matutar sobre o mesmo tema e de que há espaço para um ou dois artigos que preencham algumas lacunas. O meu objetivo é fornecer algumas explicações de contexto úteis que possam complementar outros materiais que talvez esteja a ler e, espero, ajudar a compreender melhor alguns conceitos-chave que surgem à medida que aprende sobre TeX e explora macros e programação.

Claramente, dentro dos limites de artigos de blogue, só podemos ver a superfície — simplesmente não é prático tentar explicar todos os tópicos relevantes ou mergulhar nas águas mais obscuras. Necessariamente, omitirei muitos detalhes e caminharei na fina linha entre a simplificação excessiva e levar as analogias até ao ponto de rutura.

“Escreva artigos que gostaria de ter lido” é uma orientação útil e uma que tentei aplicar com afinco ao escrever esta série.

## Depois de colocar a pergunta, o que fazer agora?

O desafio imediato era claro: como descobrir os tokens TeX, porque tais detalhes (dos tokens, da tokenização, etc.) estão enterrados no profundo código do software dos motores TeX — na verdade, não se espera que se preocupe com isso, a menos, claro, que tenha realmente interesse nesses detalhes.

Uma forma de explorar estas questões é tentar ler o código-fonte original do TeX em [`tex.web`](https://www.ctan.org/tex-archive/systems/knuth/dist/tex)—executando [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) para extrair a documentação do TeX — ou comprando um exemplar do livro [Computers & Typesetting, Volume B: TeX: The Program](https://www.amazon.co.uk/Computers-Typesetting-TEX-Program-v/dp/0201134373). Comprei um exemplar do livro impresso! É certamente extremamente útil ter o código-fonte do TeX publicado em forma de livro e há, naturalmente, muitas explicações úteis ao longo de toda a obra. No entanto, o TeX de Knuth é escrito em Pascal e, naturalmente, o código-fonte em Pascal está documentado usando a metodologia de programação literária de Knuth — apresentando o código em pequenos blocos, fáceis de consumir. É fácil apreciar como a abordagem de Knuth à documentação ajuda realmente quando se trata de um software tão complexo como o TeX, mas a leitura do livro implica bastante cruzamento de referências e saltos entre páginas.

Embora útil, o livro por si só não foi suficiente (para mim) para obter uma melhor compreensão do que acontece quando o TeX cria “tokens” — o tema que me interessava particularmente. Há apenas uma forma de descobrir verdadeiramente: compilar o programa TeX, executá-lo num pequeno ficheiro TeX e observar literalmente o código a ser executado à medida que o TeX analisa e lê a entrada. Os pormenores de compilar o TeX a partir do código-fonte são um tanto arcânicos — converter Pascal em C — mas há uma breve descrição na secção seguinte juntamente com uma ligação para uma publicação pessoal no blogue que entra em mais detalhes.

Ao contrário do XeTeX e do LuaTeX — que podem processar texto em formato UTF-8 e suportar codificação Unicode — o TeX de Knuth é um motor de 8 bits, o que significa que assume que os caracteres de entrada estão no intervalo de 0 a 255. Embora esta seja uma distinção importante, ela não *materialmente* afeta a nossa discussão sobre tokens TeX, porque abordamos tópicos e princípios comuns a todos os motores TeX: eles estão mesmo no cerne do software.

## Como pode estudar os tokens TeX?

Desembaraçar o percurso do texto de entrada até aos tokens TeX tem sido, para mim, uma verdadeira viagem — devo confessar que vários graus de confusão foram companheiros semipermanentes ao longo do caminho: o TeX é um software tão complexo.

Durante alguns anos (desde cerca de 2009) tenho compilado rotineiramente a versão mais recente do LuaTeX a partir do seu código-fonte — um processo bastante simples graças à forma absolutamente excelente como o código-fonte do LuaTeX é distribuído. Com base nessa experiência, interessou-me compreender melhor como compilar o TeX original de Knuth a partir do seu código-fonte — uma *muito* proposta diferente, porque o TeX é escrito usando a metodologia de programação literária de Knuth. Essa compilação pessoal do TeX, no Windows mas usando compiladores e conjuntos de ferramentas de código aberto, foi realizada fora da distribuição TeX Live e é um projeto independente. Também exigiu construir a cadeia de ferramentas necessária para converter `tex.web` num programa em C que pudesse depois ser compilado e executado num depurador para ver o que o TeX realmente faz enquanto processa os caracteres de entrada.

O TeX original de Knuth foi usado em vez de pdfTeX, XeTeX ou LuaTeX porque eu precisava de uma versão do TeX o mais próxima possível do código-fonte impresso no livro TeX: The Program. Esse livro foi publicado pela primeira vez em 1986 e, embora o TeX tenha sofrido algumas atualizações desde então, a versão mais recente do TeX (3.14159265, lançada em janeiro de 2014) está certamente suficientemente próxima do código-fonte contido no livro.

Refletindo a metodologia de programação literária de Knuth, o código-fonte do TeX é distribuído num formato de texto chamado WEB: uma mistura de documentação TeX e código-fonte em Pascal. A ideia básica é usar duas utilitárias chamadas TANGLE e WEAVE, que processam ficheiros WEB para extrair a documentação TeX ou o código-fonte em Pascal:

* [TANGLE](http://tug.org/texinfohtml/web2c.html#tangle-invocation) extrai o código-fonte em Pascal de um ficheiro WEB
* [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) extrai a documentação TeX do ficheiro WEB

No entanto, antes de extrair o código-fonte em Pascal, tem de pré-processar o `tex.web` ficheiro para aplicar uma série de alterações que permitem a conversão do código Pascal do TeX em código C, usando um processo chamado Web2C. Esta etapa de pré-processamento é referida como *aplicar ficheiros de alterações*.

O ficheiro de código-fonte original de Knuth (tex.web) não deve ser alterado diretamente de forma alguma; em vez disso, aplica-se modificações usando os chamados ficheiros de alterações (extensão `.ch`) que contêm as alterações que pretende aplicar ao ficheiro principal `.web` —como por exemplo `tex.web`. Os ficheiros de alterações são fundidos com o código-fonte original de Knuth — usando um programa utilitário adicional chamado TIE — para criar um ficheiro chamado, por exemplo, `mytex.web` que processa com TANGLE para extrair o código Pascal para `mytex.pas`. Depois de ter um ficheiro-fonte em Pascal adequado, pode aplicar as etapas finais do processo Web2C para o converter num ficheiro de código-fonte C que pode compilar num programa TeX executável. Se quiser ler sobre o processo de conversão Web2C, um tanto complexo, há mais detalhes no [site pessoal do blogue deste autor](http://www.readytext.co.uk/?p=2529).

O resultado final é um programa TeX que pode ser executado usando o excelente e gratuito [Eclipse IDE para C/C++](http://www.eclipse.org/home/index.php) para avançar passo a passo pelo código-fonte do TeX (em C) e ver o que acontece enquanto percorre a sua entrada. Definitivamente não é o passatempo mais divertido, porque o código em C é gerado automaticamente por máquina e, em alguns pontos, extremamente difícil de seguir (o código-fonte do TeX faz um uso muito generoso de GOTOs e variáveis globais). O livro TeX: The Program continua a ser inestimável para ajudar a navegar no código-fonte em C, apesar de o livro conter o código-fonte do TeX em código Pascal magnificamente composto.

Para concluir a discussão, aqui está uma captura de ecrã de exemplo que mostra o TeX a ser executado através do Eclipse IDE, com a execução interrompida na função `getnext()`—que está no centro dos processos de geração de tokens do TeX.

![Captura de ecrã que mostra o TeX a ser executado através do Eclipse IDE](/files/0e4fbe3549e3fbbd0d0c4ccfd6ec4c8e664b51f7)

Percorrendo o código-fonte em C do TeX com o Eclipse IDE de código aberto para C/C++.

## Conclusões e um Agradecimento

Escrever o primeiro artigo e reunir ideias para futuras publicações no blogue da série tem certamente consumido bastante tempo. Estou extremamente grato a John Hammersley e Mary Anne Baynes, da Overleaf, pelo apoio a esta ideia de série e por me permitirem dedicar o tempo necessário para investigação adicional de enquadramento. Espero que esta série de artigos identifique e aborde com sucesso tópicos de preocupação comum e se revele valiosa para quem os ler.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/overleaf-learn-latex-pt/artigos-aprofundados/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
