我想将 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}
我在逗号周围添加了括号,因此间距是正确的。