以下方法是否适合分隔第一个等号前后的内容?
\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 }
第一个项目左侧周围的空格=
被修剪,其余项目周围的空格也是如此。