分隔第一個等號前後的內容

分隔第一個等號前後的內容

以下方法是否適合分隔第一個等號前後的內容?

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

第一個左側的物品周圍的空間=被修剪,其餘物品周圍的空間也被修剪。

相關內容