l3regex 和 csvsimple

l3regex 和 csvsimple

我想将 l3regex 替换与 csv 列表一起使用。

\documentclass[utf8,fleqn]{scrartcl}
\usepackage{l3regex}
\usepackage{csvsimple}


\begin{filecontents*}{\jobname.csv}
a*9-2*b-13.1*a
\end{filecontents*}


\begin{document}

 \ExplSyntaxOn
 \newcommand{\ersetz}[1]{
 \tl_set:Nn \l_my_tl {#1}
\regex_replace_all:nnN { ([a-z])\*(\d+) } { \1 \c{cdot} \2 } \l_my_tl
\regex_replace_all:nnN { (\d+)\*([a-z]) } { \1  \2 } \l_my_tl
\regex_replace_all:nnN { \. } {\,} \l_my_tl
$\l_my_tl$
 }
\ExplSyntaxOff

 \csvreader[no head, late after line=\\]{\jobname.csv}{}{
\ersetz{\csvcoli}%\bkey{$\sage{latex(\csvcoli)}$}
 }


\ersetz{  a*9-2*b-13.1*a}



\end{document}

下面的命令有效,但在 csv 环境中无效。

老问题

答案1

您必须扩展\csvcoli:使用\tl_set:Nx

\begin{filecontents*}{\jobname.csv}
a*9-2*b-13.1*a
\end{filecontents*}

\documentclass{article}
\usepackage{xparse,csvsimple}

\ExplSyntaxOn

\NewDocumentCommand{\ersetz}{m}
 {
  \tl_set:Nx \l_tmpa_tl {#1}
  \regex_replace_all:nnN { ([a-z])\*(\d+) } { \1 \c{cdot} \2 } \l_tmpa_tl
  \regex_replace_all:nnN { (\d+)\*([a-z]) } { \1  \2 } \l_tmpa_tl
  \regex_replace_all:nnN { \. } {\cB\{\,\cE\}} \l_tmpa_tl
  $\l_tmpa_tl$
 }
\ExplSyntaxOff

\begin{document}

\csvreader[no head, late after line=\\]{\jobname.csv}{}{%
  \ersetz{\csvcoli}%
}

\ersetz{ a*9-2*b-13.1*a}

\end{document}

我在逗号周围添加了括号,因此间距是正确的。

在此处输入图片描述

相关内容