
以下方法是否適合分隔第一個等號前後的內容?
\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 }
第一個左側的物品周圍的空間=
被修剪,其餘物品周圍的空間也被修剪。