Qual é o quinto valor possível de \ protect?
A seção "11.4 Comandos robustos e \ proteger" de source2e.pdf (Arquivo d: ltdefns.dtx Data: 2020/02/27 Versão v1.5g) diz que \protectpode ter um dos cinco "valores" possíveis, mas lista apenas quatro deles:
\relax\string\noexpand\@unexpandable@protect→\noexpand\protect\noexpand
Qual é o quinto valor / não listado?
Por que não está listado?
Respostas
Tenho source2e.pdf Data: 20/02/2004 Versão 1.3g em meu arquivo.
Diz:
O método que o LaTeX usa para tornar robustos comandos frágeis é precedê-los
\protect. Isso pode ter um dos cinco valores possíveis:
\relax, para composição normal. Então\protect\foovai executar\foo.\string, para escrever na tela. Então\protect\foovai escrever\foo.\noexpand, para gravar em um arquivo. Então,\protect\foovai escrever\fooseguido por um espaço.\@unexpandable@protect, para escrever um argumento móvel em um arquivo. Então,\protect\foovai escrever\protect\fooseguido por um espaço. Este valor também está dentro usado\edefs,\markse outros comandos que avaliam seus argumentos totalmente.\@unexpandable@noexpand, para realizar uma gravação adiada dentro de um\edef. Então\protect\foo, escreverá\fooseguido por um espaço. Se você quer\protect\fooser escrito, você deve usar\@unexpandable@protect. (Removido como nunca usado).Esses comandos são usados para configuração
\protectinterna\edefs.
192\def\@unexpandable@protect{\noexpand\protect\noexpand}
193%\def\@unexpandable@noexpand{\noexpand\noexpand\noexpand}
Atualização A documentação foi corrigida para o próximo lançamento para dizer quatro , demorou apenas 26 anos após a alteração do código para colocar a documentação em linha.
Logo abaixo da linha citada você vê
% \changes{1.1c}{1994/05/18}
% {(ASAJ) Renamed the commands, and removed
% one which is no longer needed.}
o que explica por que a lista é curta, agora estou tentando lembrar o que era. Eu tenho uma suspeita que era, \noexpand\noexpand\noexpandmas eu preciso verificar ...
Sim, o LaTeX2.09 source ( latex.tex) usa \noexpand\noexpand\noexpandem, por exemplo
\def\label#1{\@bsphack\if@filesw {\let\thepage\relax
\def\protect{\noexpand\noexpand\noexpand}%