> 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/mais-topicos/20-how-tex-macros-actually-work-part-2.md).

# Como é que as macros TeX funcionam realmente: Parte 2

[Parte 1](/latex/overleaf-learn-latex-pt/mais-topicos/19-how-tex-macros-actually-work-part-1.md) [Parte 2](/latex/overleaf-learn-latex-pt/mais-topicos/20-how-tex-macros-actually-work-part-2.md) [Parte 3](/latex/overleaf-learn-latex-pt/mais-topicos/21-how-tex-macros-actually-work-part-3.md) [Parte 4](/latex/overleaf-learn-latex-pt/mais-topicos/22-how-tex-macros-actually-work-part-4.md) [Parte 5](/latex/overleaf-learn-latex-pt/mais-topicos/23-how-tex-macros-actually-work-part-5.md) [Parte 6](/latex/overleaf-learn-latex-pt/mais-topicos/24-how-tex-macros-actually-work-part-6.md)

## Introdução: Uma história em imagens

Como observado na Parte 1, o TeX tem de “ler” cada caractere dentro do seu `.tex` arquivo e esse processo de leitura é mais corretamente chamado de *varredura*. Tradicionalmente, o processamento de entrada do TeX (varredura) é comparado ao TeX ter “olhos” com os quais observar a entrada, por isso adotaremos essa analogia testada pelo tempo nos gráficos abaixo.

### Gráfico 1: Os olhos estão prontos

Assumimos que o TeX obteve alguma entrada de um `.tex` arquivo e está prestes a processar a nossa sequência de caracteres `Hello World \jobname` contida dentro de um parágrafo de texto. Ele verificará cada caractere por sua vez e examinará o seu código de categoria.

![Os olhos do TeX prontos para varrer uma linha de texto](/files/0c6b59e93bf248f02156632590b79a34b38552fa)

### Gráfico 2: Processamento dos códigos de categoria

No próximo gráfico vemos, em linhas gerais (com mais detalhes abaixo), como o TeX reage a vários códigos de categoria diferentes. Note que existem 16 códigos de categoria no total, mas, por simplicidade, estamos a representar o uso de apenas três: 11, 10 e 0. Outros códigos de caractere tornam-se importantes durante os processos de composição do TeX, como a construção de tabelas, a composição de matemática e o reconhecimento de parâmetros de macros.

![TeX a reagir a vários códigos de categoria diferentes](/files/067b0e2ebc6eccdf5f426825d2a49e8b07b83027)

#### Notas para o Gráfico 2

Aqui, estamos a considerar o TeX enquanto lê (varre) caracteres que fazem parte de um parágrafo de texto. O TeX inspeciona cada caractere, verifica o seu código de categoria e toma a ação apropriada com base no código de categoria e no “modo” do TeX (um estado baseado no que ele está atualmente a fazer).

* **(olhos verdes)** O TeX verá que cada um desses caracteres tem o código de categoria 11 (“letra”) e encaminhará esses caracteres para composição tipográfica como parte do parágrafo que está a construir. No entanto, o TeX não encaminha (usa) apenas o código do caractere mas, em vez disso, usa o par de números (código de caractere, código de categoria) para calcular um valor inteiro composto chamado um *token de caractere* (veja abaixo). Assim que esse token de caractere é produzido, ele entra nos processos/algoritmos internos de composição tipográfica do TeX.
* **(olhos azuis)** O TeX vê um caractere de espaço (ASCII 32) com código de categoria 10 (“espaçador”) — note que, como discutido, é perfeitamente possível que o código de categoria de um espaço (ASCII 32), ou de qualquer caractere, tenha sido alterado para outro valor — antes de ser lido pelo TeX.

A forma como o TeX processa de facto os caracteres com código de categoria 10 (“espaçadores”) varia dependendo de quando/onde o TeX o vê — o “modo” atual do TeX. Por exemplo, há momentos em que o TeX simplesmente os ignora. Aqui, o TeX saberá que detetou um caractere com código de categoria 10 (que por acaso é um espaço, ASCII 32) enquanto processa texto de parágrafo, pelo que acabará por o converter na chamada cola entre palavras: uma espécie de espaço flexível que pode esticar ou encolher.

* **(olhos vermelhos)** Aqui, o TeX observou um caractere que tem um código de categoria muito importante: 0 (caractere de escape).

Um caractere de escape —*qualquer* caractere com código de categoria 0 — diz ao TeX para entrar num modo especial de leitura e varrer cuidadosamente (ler) os caracteres subsequentes porque eles identificam o nome de um *comando*, e não texto a ser composto. Na literatura do TeX, verá o termo “command” também a ser referido como *sequência de controlo*. *imediatamente depois dele*; isto acontece porque o TeX reconhece dois tipos de comando:

* comandos com vários caracteres chamados *palavras de controlo*: o caractere que vem imediatamente após o caractere de escape tem código de categoria 11. Todos os caracteres subsequentes que têm código de categoria 11 são considerados como fazendo parte do nome de um comando. O TeX deixará de procurar caracteres que façam parte de um nome de comando quando detetar qualquer caractere que *não* não tenha código de categoria 11—como um caractere de espaço com código de categoria 10.
* comandos de um só caractere chamados *símbolos de controle*: o caractere que vem imediatamente após o caractere de escape *não* não tem código de categoria 11.

Pode pensar num caractere de escape como algo que faz o TeX “sair” do seu comportamento habitual de varredura e adotar uma abordagem diferente para os próximos poucos caracteres — isso é indicado pela caixa vermelha pontilhada a mostrar que o TeX irá **Começar a varrer em busca de um comando**.

### Gráfico 3: Processamento do código de categoria 11 (“letras”)

Na Parte 1 desta série, observámos que cada caractere que o TeX lê da sua entrada é descrito por dois inteiros:

* código de caractere: um inteiro que define a representação numérica de um caractere;
* código de categoria: um valor de 0 a 15 que o TeX atribui a cada caractere que possa aparecer na sua entrada.

O TeX usa estas duas informações na etapa seguinte do seu processamento: a criação de tokens de caractere.

O Gráfico 3 amplia o Gráfico 2 para mostrar o que o TeX faz com estes caracteres de entrada com código de categoria 11 (letra): ele cria *tokens de caractere*—valores inteiros que o TeX calcula usando uma combinação do código de categoria e do código de caractere desse caractere.

**Nota**: Neste exemplo, estamos apenas a discutir caracteres com código de categoria 11, mas deve estar ciente de que o TeX também cria valores de token para caracteres de entrada que têm outros códigos de categoria—exceto o código de categoria 0, que nunca é transformado num token: o caractere de escape funciona simplesmente como um “interruptor” para desencadear um processamento especial.

![TeX a processar caracteres com código de categoria 11](/files/ab4ce576934eb4eb07139129ffc7f571f2a35081)

O Gráfico 5, abaixo, mostrará o que o TeX faz quando vê um caractere com código de categoria 0 (um caractere de escape).

#### Notas para o Gráfico 3: Processamento do código de categoria 11 (“letra”)

Aqui, vamos concentrar-nos na **green** atividade: o que acontece quando o TeX vê caracteres que têm código de categoria 11 (“letra”). Depois de o TeX ter lido um caractere e determinado o seu código de categoria (aqui é 11), o próximo passo do TeX é *combinar* este par de números num único inteiro chamado token de caractere: estes tokens (inteiros) são encaminhados para a etapa seguinte dos algoritmos/processamento interno de composição do TeX. Como referido, o TeX também criará tokens de caractere para caracteres com outros códigos de categoria (ou seja, não 11); aqui estamos apenas a usar o código de categoria 11 como exemplo.

Cada token de caractere (um inteiro) associa permanentemente um caractere de entrada ao código de categoria atribuído a esse caractere **no momento em que foi analisado (lido) pelo TeX**: esse facto é de importância crucial para compreender o comportamento das macros do TeX/LaTeX. Claro, durante o processamento posterior, o TeX às vezes precisará de dividir um token de caractere para determinar qual par (código de caractere, código de categoria) foi usado para construir esse token. No entanto, assim que um caractere é lido pelo processo de entrada (varredura) do TeX, o valor do token de caractere calculado pelo TeX faz com que esse caractere fique *permanentemente* associado ao código de categoria atribuído a ele *no momento em que foi lido*.

**Cálculo de tokens de caractere**

Os motores TeX usam uma fórmula simples para calcular um token de caractere, $$T$$, a partir de um caractere com código de categoria $$C$$ e código de caractere $$A$$:

$$T = \text{constant} \times C + A$$

Motores de 8 bits, como o pdfTeX, usam:

$$T = 256\times C + A$$

Motores compatíveis com Unicode, como o XeTeX ou o LuaTeX, têm de usar uma fórmula diferente porque, em Unicode, os códigos de caractere podem ser muito maiores do que o máximo de 255 no mundo mais antigo da codificação ASCII de 8 bits. O XeTeX, por exemplo, usa:

$$T= 2^{21}\times C + A \hskip5mm \text{(where } A \text{ is a Unicode character code value)}$$

Mais uma vez, vale a pena notar que os caracteres com código de categoria 0 não são convertidos em tokens de caractere: o código de categoria 0 tem um lugar muito especial na filtragem de entrada do TeX e é usado apenas como um “interruptor” para desencadear o TeX num modo especial de varrer os próximos poucos caracteres. O Gráfico 5 trata disso.

### Gráfico 4: Processamento do código de categoria 10 (“espaçador”)

O tratamento que o TeX dá aos caracteres com código de categoria 10 (“espaçador”) depende do que o TeX está a processar naquele momento quando deteta um caractere de código de categoria 10 dentro da entrada. No nosso exemplo, o TeX está a executar o processamento rotineiro de um parágrafo e o caractere de espaço, com código de categoria 10, será convertido em cola entre palavras.

![O TeX a processar caracteres com código de categoria 10](/files/f378c6c83b7e1e973b05caa0e0c18ea684c4942d)

O tratamento que o TeX dá aos espaços pode parecer bastante idiossincrático, mas uma boa visão geral pode ser encontrada nos capítulos 1 e 2 de [TeX by Topic](http://www.eijkhout.net/texbytopic/texbytopic.html) de Victor Eijkhout — pode [descarregar uma cópia PDF gratuita](https://bitbucket.org/VictorEijkhout/tex-by-topic) no seu site.

Por exemplo, quando o TeX vê um caractere com código de categoria 10, há momentos em que o TeX irá:

* saltar (ignorar) todos eles—por exemplo, quando o TeX está em modo vertical;
* converter vários espaçadores num único espaçador—salvando espaços extra, como quando processa um parágrafo;
* absorvê-los—por exemplo, absorvendo um único espaço após um nome de comando;

Note também que há momentos em que o TeX também irá *gerar* espaços—convertendo os caracteres de fim de linha num espaço. O comportamento/tratamento dos caracteres de espaço (qualquer caractere com código de categoria 10) é uma das “idiossincrasias” do TeX: leva tempo/prática para se familiarizar (sentir-se confortável) com este aspeto do TeX.

### Gráfico 5a: Processamento do código de categoria 0 (um “caractere de escape”)

Neste gráfico, o TeX processou todos os caracteres até ao `\` caractere, que tem um código de categoria 0: o “caractere de escape” — usaremos uma sequência adicional de gráficos para mostrar que o TeX processa um caractere de escape e identifica o nome de um comando.

![O TeX a processar caracteres com código de categoria 0](/files/74ece070606ef536e354829aaa36d4df38d520ba)

### Gráfico 5b: A procurar um nome de comando

Neste gráfico, olhamos para a secção da caixa vermelha pontilhada (**Começar a varrer em busca de um comando**) para ver o que o TeX faz depois de ver um caractere de escape.

![O TeX a procurar um nome de comando](/files/be7de36a1f974f0b2e97eccc33f301942ed35b20)

**Notas para o Gráfico 5b**

* Uma vez reconhecido, o caractere de escape cumpriu a sua função: atuou como um interruptor e não participa em qualquer processamento posterior — especificamente, ele é **contém** convertido num token de caractere.
* Por conveniência, vamos repetir alguns detalhes mencionados anteriormente. Depois de ver um caractere de escape, o TeX verifica o código de categoria do caractere que se segue *imediatamente depois dele*; isto acontece porque o TeX reconhece dois tipos de comando:
* * comandos com vários caracteres chamados *palavras de controlo*: o caractere que vem imediatamente após o caractere de escape tem código de categoria 11. Todos os caracteres subsequentes que têm código de categoria 11 são considerados como formando o nome de um comando (*palavra de controlo*). O TeX deixará de procurar caracteres que façam parte de um nome de comando quando detetar qualquer caractere que *não* não tenha código de categoria 11—como um caractere de espaço com código de categoria 10.
  * comandos de um só caractere chamados *símbolos de controle*: o caractere que vem imediatamente após o caractere de escape *não* não tem código de categoria 11.
* No nosso exemplo, o primeiro caractere após o `\` é um `j` (código de categoria 11) indica ao TeX para procurar um comando que é (potencialmente) uma sequência multi-letra de caracteres com código de categoria 11.
* O TeX continua a verificar se existem mais caracteres com código de categoria 11. Assim que deteta um caractere com qualquer outro código de categoria, como um espaço com código de categoria 10, o TeX sabe que chegou ao fim do nome do comando. Só para enfatizar o ponto: aqui foi um caractere de espaço (código de categoria 10) que “terminou” o nome do comando, mas poderia ter sido qualquer caractere que **não** não tem código de categoria 11.

## Parte 3

Na Parte 3, continuamos a partir do Gráfico 5b para concluir esta parte da história — como o TeX identifica um comando — e passamos ao que ele faz a seguir. Também analisamos com mais profundidade alguns aspetos internos do processamento do TeX — partes das quais podem ser ignoradas na primeira leitura, a menos que goste mesmo dos detalhes.

[Parte 1](/latex/overleaf-learn-latex-pt/mais-topicos/19-how-tex-macros-actually-work-part-1.md) [Parte 2](/latex/overleaf-learn-latex-pt/mais-topicos/20-how-tex-macros-actually-work-part-2.md) [Parte 3](/latex/overleaf-learn-latex-pt/mais-topicos/21-how-tex-macros-actually-work-part-3.md) [Parte 4](/latex/overleaf-learn-latex-pt/mais-topicos/22-how-tex-macros-actually-work-part-4.md) [Parte 5](/latex/overleaf-learn-latex-pt/mais-topicos/23-how-tex-macros-actually-work-part-5.md) [Parte 6](/latex/overleaf-learn-latex-pt/mais-topicos/24-how-tex-macros-actually-work-part-6.md)


---

# 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/mais-topicos/20-how-tex-macros-actually-work-part-2.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.
