Trennen von Inhalten vor und nach dem ersten Gleichheitszeichen

Trennen von Inhalten vor und nach dem ersten Gleichheitszeichen

Ist die folgende Methode die richtige, um Inhalte vor und nach dem 1. Gleichheitszeichen zu trennen?

\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}

PS: Beide Teile werden tatsächlich in Token-List-Variablen zur weiteren Verarbeitung gespeichert.

Antwort1

Bei diesem Ansatz wird nicht L3 verwendet, sondern der listofitemsParser. Einzelne Teile der letzten Analyse können über \gotten[1], \gotten[2], usw. abgerufen werden. Die Gesamtzahl der Teile ist über zugänglich \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}

Bildbeschreibung hier eingeben

Antwort2

Dies ist eine schnörkellose Methode, ohne das Rad neu zu erfinden:

\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 } }

Was ist, wenn Sie mehr als ein =Token haben?

Sie können das Aufbewahren von Räumen und das =anschließende Wiederherstellen der Token aufteilen:

\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 }

Die Leerzeichen um die Elemente links vom ersten =werden abgeschnitten, ebenso die um den Rest.

verwandte Informationen