Expl3 正则表达式和缺少的分号?

Expl3 正则表达式和缺少的分号?

尝试回答这个问题如何在 Latex 中创建自定义解析器,我遇到了以下问题。宏的结果似乎不符合我的预期:

(1:1)--(-1:2)--(2,2)

或者存在与扩展相关的问题......

\documentclass{article}
\usepackage{tikz,expl3,xparse}

\ExplSyntaxOn

\NewDocumentCommand{\makelinesegment}{ m } {
    \tl_set:Nn \l_bob_func_tl { #1 }
    \regex_replace_all:nnN { ([0-9])- } { \1)--( } \l_bob_func_tl
    \regex_replace_all:nnN { : } { , } \l_bob_func_tl
    (\l_bob_func_tl)
}

\ExplSyntaxOff

\begin{document}

\makelinesegment{1:1--1:2-2:2}

% If uncommented 
% Package tikz Error: Giving up on this path. Did you forget a semicolon?.
%\tikz\draw \makelinesegment{1:1--1:2-2:2} ;

\end{document}

答案1

如果你只打算在 TikZ 内部使用它:

\documentclass{article}

\usepackage{tikz,xparse}

\ExplSyntaxOn

\tl_new:N \l_bob_func_tl

\NewDocumentCommand \makelinesegment { m }
 {
  \pgfextra
  \tl_set:Nn \l_bob_func_tl { #1 }
  \regex_replace_all:nnN { ([0-9])- } { \1)--( } \l_bob_func_tl
  \regex_replace_all:nnN { : } { , } \l_bob_func_tl
  \exp_last_unbraced:NNV % this is not necessary, but I find it cleaner, correct me if I'm wrong
  \endpgfextra
  (\l_bob_func_tl)
 }

\ExplSyntaxOff

\begin{document}

% \makelinesegment{1:1--1:2-2:2} % do not use outside `\tikz` or `{tikzpicture}`

\tikz\draw\makelinesegment{1:1--1:2-2:2};

\end{document}

如果您也需要外部,我们需要在某处添加一个布尔值,如果您需要的话就说出来。

相关内容