> 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/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md).

# Como funciona \expandafter: o TeX usa listas temporárias de tokens

[Parte 1](/latex/overleaf-learn-latex-pt/artigos-aprofundados/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md) [Parte 2](/latex/overleaf-learn-latex-pt/artigos-aprofundados/22-how-does-expandafter-work-the-meaning-of-expansion.md) [Parte 3](/latex/overleaf-learn-latex-pt/artigos-aprofundados/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md) [Parte 4](/latex/overleaf-learn-latex-pt/artigos-aprofundados/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md) [Parte 5](/latex/overleaf-learn-latex-pt/artigos-aprofundados/17-how-does-expandafter-work-a-detailed-macro-case-study.md) [Parte 6](/latex/overleaf-learn-latex-pt/artigos-aprofundados/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.md)

## Expansão e listas internas de tokens

Até agora, explorámos tokens, listas de tokens e os princípios fundamentais por trás do conceito de expansão do TeX. Nesta secção vamos usar o primitivo do TeX `\jobname` para introduzir um aspeto importante do processamento da expansão: o uso que o TeX faz de *listas temporárias de tokens*—que são um *aspeto* aspeto de como `\expandafter` funciona, como veremos mais adiante nesta série de artigos.

`\jobname` é um primitivo expansível do TeX cuja expansão gera uma série de tokens de caracteres que representam o nome do ficheiro de entrada principal `.tex` . Por exemplo, suponhamos que tivéssemos o seguinte texto como parte de um `.tex` ficheiro chamado `mycode.tex`:

```
    O nome do meu ficheiro é \jobname .tex %Nota o espaço após \jobname
```

Isto apresentaria

```
    O nome do meu ficheiro é mycode.tex
```

Quando usamos o `\jobname` comando, os caracteres apresentados resultantes não são lidos do seu ficheiro físico `.tex` ficheiro, então de onde vêm: onde é que o TeX armazena/lê esses tokens? Invisível para o utilizador (ou seja, bem no interior do próprio TeX), o processo de expansão de `\jobname` cria uma lista temporária de tokens construída a partir da série de tokens de caracteres que representam o nome do seu ficheiro. Assim que `\jobname` tiver criado essa lista de tokens, o TeX “desvia o seu olhar” temporariamente da sua fonte de entrada atual (aqui, o nosso `.tex` ficheiro) para ler tokens (tokens de caracteres) dessa lista temporária de tokens. Quando o TeX precisa de outro token de entrada, lerá o token seguinte dessa lista interna e continuará a fazê-lo até chegar ao fim da lista; nesse ponto o TeX retoma a leitura de tokens da sua fonte de entrada anterior, que, aqui, seria o texto lido do nosso `.tex` ficheiro de entrada.

Como mostrado no diagrama seguinte, o TeX retoma a leitura do `.tex` ficheiro de entrada exatamente no local onde parou após processar `\jobname`—depois de ler o caractere de espaço mas antes de ler o caractere “.”. O ponto (.) está, na prática, à espera de ser lido do buffer de entrada do TeX — uma pequena área da memória do TeX concebida para conter uma linha de texto lida do `.tex` ficheiro — o TeX lê e processa o seu `.tex` ficheiro linha a linha; não lê o ficheiro inteiro para a memória.

Ao estudar o gráfico seguinte, leia de baixo para cima para acompanhar o fluxo do processo.

![Como o TeX expande \jobname](/files/e21cc2f68259c5c83648edbc7279fec22de93d71)

Voltando à nossa discussão sobre expansão, podemos observar que a expansão de `\jobname` resultou no `\jobname` comando (token) a ser *removido* da entrada e *substituído* com tokens resultantes da expansão: a lista temporária de tokens gerada para guardar o nome do `.tex` ficheiro.

Comandos expansíveis (como `\jobname`) não são os únicos primitivos do TeX que “secretamente” criam e usam listas de tokens para alcançar o seu efeito. Por exemplo, os comandos `\uppercase` e `\lowercase` ambos criam listas internas de tokens para alterar a capitalização do seu argumento. Assim que o trabalho de alteração de capitalização fica concluído, o TeX passa a ler tokens de caracteres das listas de tokens geradas por esses comandos. As listas de tokens são o único mecanismo de “armazenamento de dados de tokens” do TeX — para além de gravar dados num ficheiro físico em disco.

### Fontes de tokens: o TeX é um mestre malabarista

Quando o TeX processa um documento típico, tem de gerir *muitas* fontes de tokens: entrada proveniente de inúmeros ficheiros físicos em disco e de incontáveis listas internas de tokens criadas durante o processamento. Nesta secção vamos explorar, muito brevemente, como o TeX consegue “malabarizar” essas fontes de entrada.

Suponhamos que queremos uma macro simples que componha o nome do nosso `.tex` ficheiro:

```
    \def\myfile{O nome do meu ficheiro é \jobname .tex}
```

Mais tarde, em algum momento do nosso `.tex` ficheiro chamamos a macro `\myfile`: temporariamente, o TeX passa de criar/ler tokens através do texto no seu ficheiro de texto (`.tex`) `\myfile` definição (lista de tokens) armazenada na sua memória. Quando o TeX executa a `\myfile` macro (processa os seus tokens), ele detetará um token que representa o `\jobname` comando, cuja expansão cria mais uma lista temporária de tokens de que o TeX tem de ler tokens. Mesmo neste cenário simples, o TeX tem de gerir três fontes de entrada:

1. o `.tex` ficheiro de texto que contém a `\myfile` macro;
2. a lista de tokens que guarda a definição de `\myfile` macro;
3. uma lista de tokens criada pelo `\jobname` comando dentro da `\myfile` macro.

À medida que o TeX processa um documento, está constantemente a alternar entre fontes de entrada: ficheiros físicos e listas de tokens, então como é que o TeX acompanha isso? A resposta é que, internamente, os motores TeX mantêm uma chamada [pilha de entrada](https://en.wikipedia.org/wiki/Stack_\(abstract_data_type\)) que funciona como uma espécie de “memória” que permite ao TeX lembrar-se do que estava a fazer (de onde estava a ler) à medida que alterna entre fontes de entrada.

Sem entrar em grandes detalhes, o código interno nos motores TeX usa uma variável global chamada `curinput` (entrada atual), que, entre outras coisas, indica ao TeX se está atualmente a ler de um ficheiro físico ou de uma lista de tokens. `curinput` também aponta o TeX para a localização (na lista de tokens atual ou no seu buffer de texto) de onde deve obter o token seguinte. Se o TeX estiver a ler de uma lista de tokens `curinput` também regista que tipo de lista de tokens está a ser processada — por exemplo, a lista de tokens armazenada como macro ou se esses tokens surgiram de uma fonte diferente.

Quando necessário, a `curinput` variável será alterada para apontar para uma nova fonte de entrada e o estado de “entrada” atual do TeX (fonte e localização) será guardado na pilha de entrada para que o TeX possa mais tarde regressar exatamente a esse local (posição num `.tex` ficheiro ou ao token seguinte numa lista de tokens). Assim que essa nova fonte de entrada se esgota (por exemplo, já não há mais tokens na lista de tokens ou é atingido o fim de um ficheiro), ela é removida da pilha e `curinput` é atualizada para garantir que o TeX volta a obter tokens da fonte anterior.

## Aprofundar mais (leitura opcional)

As secções seguintes fornecem informação de enquadramento adicional para leitores que apreciam os detalhes.

### Listas de tokens reais

O gráfico seguinte foi gerado usando a compilação personalizada do TeX de Knuth do Overleaf, que fornece acesso aos dados internos e às estruturas de dados do TeX. Esta ilustração de uma lista de tokens baseia-se na versão simplificada apresentada acima e inclui dados adicionais, como mostrar os caracteres gerados por `\jobname` têm código de categoria 12, e não o código de categoria habitual 11. Neste diagrama, “nó” é apenas o nome dado a uma unidade de armazenamento de memória usada pelo TeX.

![Dentro de uma lista de tokens do TeX](/files/13719d14696921c9258ed92be8037c7bbb2b30ce)

### Como o TeX lê e processa \jobname

Além disso, para completar, aqui fica uma visão geral dos “processos mentais” do TeX à medida que deteta `\jobname` na nossa entrada `.tex` ficheiro. Neste gráfico vemos como o TeX deteta um carácter de escape (`\` com código de categoria 0), processa a sequência de caracteres `jobname`, gera um token e procura o significado do `\jobname` comando, onde o TeX descobrirá que tem um código de comando > 100, indicando que é um comando expansível.

![Como o TeX procura e processa \jobname](/files/1305b0f0974b6cd2ca2d5c65609f155164334cb1)

[Parte 1](/latex/overleaf-learn-latex-pt/artigos-aprofundados/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md) [Parte 2](/latex/overleaf-learn-latex-pt/artigos-aprofundados/22-how-does-expandafter-work-the-meaning-of-expansion.md) [Parte 3](/latex/overleaf-learn-latex-pt/artigos-aprofundados/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md) [Parte 4](/latex/overleaf-learn-latex-pt/artigos-aprofundados/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md) [Parte 5](/latex/overleaf-learn-latex-pt/artigos-aprofundados/17-how-does-expandafter-work-a-detailed-macro-case-study.md) [Parte 6](/latex/overleaf-learn-latex-pt/artigos-aprofundados/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.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/artigos-aprofundados/21-how-does-expandafter-work-tex-uses-temporary-token-lists.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.
