
¿Es el siguiente método el correcto para separar el contenido antes y después del primer signo igual?
\documentclass{article}
\ExplSyntaxOn
\cs_new:Npn\getbefore:w#1=#2\q_stop{#1}
\cs_new:Npn\getafter:w#1=#2\q_stop{#2}
\NewDocumentCommand\beforeafter{m}{
\getbefore:w#1\q_stop
\par
\getafter:w#1\q_stop
}
\ExplSyntaxOff
\begin{document}
\beforeafter{a=2+3}
\end{document}
PD: de hecho, ambas partes se almacenarán en variables de lista de tokens para su posterior procesamiento.
Respuesta1
Este enfoque no utiliza L3, sino el listofitems
analizador. Se pueden obtener piezas individuales del análisis más reciente mediante \gotten[1]
, \gotten[2]
, etc. Se puede acceder al número total de piezas mediante \listlen\gotten[]
.
\documentclass{article}
\usepackage{listofitems}
\setsepchar{=}
\newcommand\beforeafter[1]{%
\readlist*\gotten{#1}%
\foreachitem\z\in\gotten[]{%
\ifnum\zcnt=1\else\par\fi
$\z$%
}
}
\begin{document}
\beforeafter{a=2+3}
With 3 pieces:
\beforeafter{a = 2+3 = z_1}
\end{document}
Respuesta2
Este es un método sensato sin reinventar la rueda:
\seq_set_split:Nnn \l_tmpa_seq { = } { #1 }
\tl_set:Ne \l_tmpa_tl { \seq_item:Nn \l_tmpa_seq { 1 } }
\tl_set:Ne \l_tmpb_tl { \seq_item:Nn \l_tmpa_seq { 2 } }
¿Qué pasa en el caso de que tengas más de un =
token?
Puedes dividir manteniendo espacios y restaurando las =
fichas después:
\seq_set_split_keep_spaces:Nnn \l_tmpa_seq { = } { #1 }
\seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl
\tl_set:Ne \l_tmpa_tl { \tl_trim_spaces:V \l_tmpa_tl }
\tl_set:Ne \l_tmpb_tl { \seq_use:Nn \l_tmpa_seq { = } }
\tl_set:Ne \l_tmpb_tl { \tl_trim_spaces:V \l_tmpb_tl }
Los espacios alrededor de los elementos a la izquierda del primero =
se recortan y también los que rodean el resto.