
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 listofitems
Parser. 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}
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.