
Depois de ler alguns capítulos do texbook, sei que o tex come linhas de entrada da linha de comando ou de arquivos e depois os converte em tokens. Quando esses tokens entram em seu trato gastrointestinal, tex se prepara para digeri-los, convertendo-os em caixas, colas e outras coisas, e então constrói algumas listas.
Com relação às macros, em qual estágio o tex salva sua definição de macro, em qual estágio o tex faz a expansão da macro para substituição do tex?
Responder1
Isso é fácil! O TeX sempre faz expansão macro, exceto quando isso não acontece.
Na página 215, segundo parágrafo duplo perigoso, lemos
A expansão é suprimida nos seguintes momentos:
- Quando os tokens estão sendo excluídos durante a recuperação de erros (consulte o Capítulo 6).
- Quando os tokens estão sendo ignorados porque o texto condicional está sendo ignorado.
- Quando o TeX está lendo os argumentos de uma macro.
- Quando o TeX está lendo uma sequência de controle a ser definida por
\let
,,\futurelet
\def
,\gdef
,\edef
, ,\xdef
,\chardef
,\mathchardef
,\countdef
,\dimendef
,\skipdef
,\muskipdef
,\toksdef
,\read
e\font
.- Quando o TeX está lendo tokens de argumento para
\expandafter
,\noexpand
,\string
,\meaning
,\let
,\futurelet
,\ifx
,\show
,\afterassignment
,\aftergroup
.- Quando o TeX está absorvendo o texto do parâmetro de a
\def
,\gdef
,\edef
, ou\xdef
.- Quando o TeX está absorvendo o texto de substituição de um
\def
ou\gdef
ou\read
; ou o texto de uma variável de token como\everypar
ou\toks0
; ou a lista de tokens para\uppercase
ou\lowercase
ou\write
. (A lista de tokens\write
será expandida posteriormente, quando for realmente enviada para um arquivo.)- Quando o TeX está lendo o preâmbulo de um alinhamento, exceto depois de um token para o comando primitivo
\span
ou ao ler o after\tabskip
.- Logo após um token como
$
3 iniciar o modo matemático, para ver se outro token da categoria 3 se segue.- Logo após um token
`
12 que inicia uma constante alfabética.
Não é irracional, não é? Ao fazer definições, queremos que nada seja expandido (exceto \edef
e \xdef
) e o quarto, quinto, sexto e sétimo itens tratam disso. Da mesma forma, se quisermos armazenar uma lista de tokens em um registro ou em um arquivo \write
.
Da mesma forma, o token após \expandafter
, \noexpand
ou \afterassignment
não \aftergroup
deve ser expandido por razões óbvias; isso acontecerá mais tarde, quando o TeX o examinar novamente no momento apropriado.
O último marcador tem uma razão técnica: se você quiser se referir a uma constante alfabética que corresponde a um caractere com \catcode
0, 5, 9, 13, 14 ou 15, ela pode ser “escapada” com uma barra invertida na frente dela, mas na verdade, isso não forma uma sequência de controle. Então você pode fazer `\^^M
se quiser se referir à constante 13 ou do \chardef\%=`\%
.
O segundo item pode ser complementado por uma observação importante: apesar do TeX não fazer nenhuma expansão ao pular o texto condicional, elefazexamine os tokens para combinar as condicionais com seus \else
ou \fi
. Qualquer token que seja \let
uma condicional primitiva, \else
ou \fi
conte sob esse aspecto.
Responder2
No textoTeX em poucas palavrasos comandos e seus parâmetros são escritos na cor azul, mas se um parâmetro não estiver expandido, ele será escrito na cor vermelha. Os parâmetros escritos aqui em azul são lidos após a expansão. Veja este texto da página 9 onde começa o resumo das construções primitivas do TeX.