Guarde el token sin soporte en la variable - expl3

Guarde el token sin soporte en la variable - expl3

Quiero usar \token_if_eq_meaning:NNeso compara el significado de solo dos tokens.

Tengo una lista de tokens {\langle\rangle}que se guarda a través de

\tl_set:Nn \my_tokens_list {\langle\rangle}

¿Cómo puedo extraer el primer token sin soporte de \my_tokens_listuna \my_first_tokenvariable y realizar la comparación?

\token_if_eq_meaning:NN \my_first_token \langle

Respuesta1

Puede extraer cualquier elemento que desee (siempre que esté en el rango) y realizar la comparación.

\documentclass{article}

\ExplSyntaxOn

\NewExpandableDocumentCommand{\comparetokenTF}{sO{1}mmmm}
 {
  % #2 = position
  % #3 = token to compare with
  % #4 = token list
  % #5 = true text
  % #6 = false text
  \IfBooleanTF{#1}
   {
    \antshar_comparetoken:nnVnn { #2 } { #3 } #4 { #5 } { #6 }
   }
   {
    \antshar_comparetoken:nnnnn { #2 } { #3 } { #4 } { #5 } { #6 }
   }
 }

\cs_new:Nn \antshar_comparetoken:nnnnn
 {
  \int_compare:nTF { 1 <= #1 <= \tl_count:n { #3 } }
   {
    \__antshar_comparetoken:Nenn #2 { \tl_item:nn { #3 } { #1 } } { #4 } { #5 }
   }
   {
    Exceeded~range
   }
 }
\cs_generate_variant:Nn \antshar_comparetoken:nnnnn { nnV }

\cs_new:Nn \__antshar_comparetoken:Nnnn
 {
  \token_if_eq_meaning:NNTF #1 #2 { #3 } { #4 }
 }
\cs_generate_variant:Nn \__antshar_comparetoken:Nnnn { Ne }
\ExplSyntaxOff

\begin{document}

\comparetokenTF{\langle}{\langle\rangle}{T}{F} should give T

\comparetokenTF{\rangle}{\langle\rangle}{T}{F} should give F

\comparetokenTF[2]{\rangle}{\langle\rangle}{T}{F} should give T

\newcommand{\mytl}{\langle\rangle}

\comparetokenTF*{\langle}{\mytl}{T}{F} should give T

\comparetokenTF*{\rangle}{\mytl}{T}{F} should give F

\comparetokenTF*[2]{\rangle}{\mytl}{T}{F} should give T

\comparetokenTF*[3]{\rangle}{\mytl}{T}{F} (exceeded)

\end{document}

La única complicación es que ela expansión proporciona el resultado entre llaves, pero podemos eliminarlas usando una función auxiliar.

ingrese la descripción de la imagen aquí

Respuesta2

Aparentemente, no puedes guardar un solo token sin refuerzo, pero lo que puedes hacer es modificarlo \token_if_eq_meaning:NNpara que pueda desabrochar el argumento.

\tl_set:Nx \first_token { \tl_head:n {\langle\rangle} }
\exp_last_unbraced:NV \token_if_eq_meaning:NNTF \first_token \langle {Tr}{Fl}

O incluso en una línea

\exp_last_unbraced:Nx \token_if_eq_meaning:NNTF { \tl_head:n {\langle\rangle} } \langle {Tr}{Fl}

información relacionada