Separar contenido antes y después del primer signo igual

Separar contenido antes y después del primer signo igual

¿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 listofitemsanalizador. 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}

ingrese la descripción de la imagen aquí

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.

información relacionada