TiKz 对间隔字符串参数的每次迭代都有一个额外的 }

TiKz 对间隔字符串参数的每次迭代都有一个额外的 }

这是宏功能的一个示例,其功能如下:遍历间隔的字符串并打印每个部分的首字母。

\newcommand\text{\StrSubstitute{a b c}{ }{,}}
\foreach \i in \text{
     \StrLeft{\i}{1} ,
}

但显然,\StrLeft当迭代结束时,我无法使用或任何其他方法,而我已经对 StrSubstitute 执行了这些操作。这是为什么?错误消息:

! Paragraph ended before \reserved@a was complete.<to be read again>\par }
! Paragraph ended before \reserved@a was complete.<to be read again>\par }
! Missing control sequence inserted.<inserted text>\inaccessible }

但下面的方法确实有效:

\newcommand\text{\StrSubstitute{a b c}{ }{,}}
\foreach \i in \text{
    \i
}

\newcommand\text{a,b,c}
\foreach \i in \text{
     \StrLeft{\i}{1} ,
}

答案1

首先,选择\text作为命令名并不好,因为amsmath使用它。然而,这不是重点。

最大的问题\text不是列表a,b,c,而是生成该列表的一组指令。

你比较幸运

\StrSubstitute{a b c}{ }{,}[\mytext]
\foreach\i in \mytext{%
  \StrLeft{\i}{1}, %
}

现在\mytext包含替换的结果。

完整示例,尽管不清楚用例是什么:

\documentclass{article}
\usepackage{tikz,xstring}

\begin{document}

\StrSubstitute{a b c}{ }{,}[\mytext]

\foreach\i in \mytext{%
  \StrLeft{\i}{1}, %
}

\end{document}

相关内容