
Quiero usar \token_if_eq_meaning:NN
eso 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_list
una \my_first_token
variable 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 e
la expansión proporciona el resultado entre llaves, pero podemos eliminarlas usando una función auxiliar.
Respuesta2
Aparentemente, no puedes guardar un solo token sin refuerzo, pero lo que puedes hacer es modificarlo \token_if_eq_meaning:NN
para 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}