最初の等号の前後のコンテンツを分離する

最初の等号の前後のコンテンツを分離する

次の方法は、最初の等号の前後のコンテンツを分離するのに適切な方法でしょうか?

\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: 両方の部分は実際にはさらなる処理のためにトークン リスト変数に格納されます。

答え1

このアプローチでは、L3 ではなくlistofitemsパーサーが使用されます。最新の解析の個々の部分は\gotten[1]、、\gotten[2]などを介して取得できます。部分の合計数は、を介してアクセスできます\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}

ここに画像の説明を入力してください

答え2

これは車輪の再発明を伴わない、無駄のない方法です。

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

トークンが複数ある場合はどうなりますか=?

スペースの保持とその後のトークンの復元を分割できます=

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

最初の項目の左側にある項目の周囲のスペース=が切り取られ、残りの項目の周囲のスペースも同様に切り取られます。

関連情報