使用 Expl3 提取宏中存储的字符串的第一个字符

使用 Expl3 提取宏中存储的字符串的第一个字符

我想提取存储在宏中的一组 n 个字符,如下所示:

\def\foo{bar}
\extract{\foo}{1}

打印:b使用 expl3。

我有以下代码:

\DeclareExpandableDocumentCommand{\extract}{mm}{%
  \tl_item:nn { #1 } { #2 }%
}

它适用于文字字符串:\extract{foo}{2}打印fo,但在使用宏时不起作用。更具体地说,存储在 pgfkeys 中的字符串。

最终结果应该是完全扩展的,而不是最有可能给出所需特征的东西(参见:xstring包装)。

完整 MWE:

\documentclass{article}

\usepackage{xparse}
\usepackage{tikz}

\ExplSyntaxOn
\DeclareExpandableDocumentCommand{\extract}{mm}{%
  Extracted: \tl_item:nn { #1 } { #2 }%
}
\ExplSyntaxOff

\begin{document}

\extract{foo}{2}     % output: fo as expected

\def\foo{bar}

\extract{\foo}{2}    % output: nothing

\pgfkeys{/foo/.is family,
     /foo/.unknown/.style = %
     {\pgfkeyscurrentpath/\pgfkeyscurrentname/%
     .initial = #1}}
\pgfkeys{/foo/bar = some text here}

\pgfkeysvalueof{/foo/bar}

\extract{\pgfkeysvalueof{/foo/bar}}{2} % output: /foo/bar

\end{document}

答案1

\ExplSyntaxOn

\cs_generate_variant:Nn \tl_item:nn { f }

\DeclareExpandableDocumentCommand \extract { m m }
 {
  Extracted: ~ \tl_item:fn { #1 } { #2 }
 }

\ExplSyntaxOff

相关内容