尝试回答这个问题如何在 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}
如果您也需要外部,我们需要在某处添加一个布尔值,如果您需要的话就说出来。