`\def\foo{{a,b}}` 是什么对象?

`\def\foo{{a,b}}` 是什么对象?

在我的生活中的某一天,我使用来自互联网随机部分的一些技巧创建了一个 tikz 对象,并且发现了以下内容:

\def\foo{{a,b}}

我没有任何例子,但我很确定这是方法。它像矢量一样工作,但我找不到该结构的任何信息。我​​在工作中使用xparse包创建了一个宏,我真的很想在这些定义中使用它,但一些严重的错误阻碍了它。

那是什么物体?我只要搜索一下就可以了。另外,如果有人可以的话,有没有办法定义类似下面的内容?

\def\foo{{a,b}}
\usepackage{xparse}
\NewDocumentCommand{\mezzocommand}{m O{0}}{
    ${#1} + \foo[#2]$
}

那么\mezzocommand{x}[1]得到 $x+b$ 吗?抱歉没有例子,但我就是想知道如何去搜索它。

答案1

\def\foo{{a,b}}与 tikz 无关,并且不创建对象,它是一个原始的 tex 宏定义,并定义\foo为扩展到 5 个标记的宏{ a , b }

目前还不清楚你想实施什么规则

\mezzocommand{x}[1]生产$x+b$

我猜你想让 1 从列表中取出第 2 项(从 0 开始计数)a,b

在此处输入图片描述

\documentclass{article}

% use an expl3 clist below\def\foo{{a,b}}

% only needed in old latex \usepackage{xparse}

\ExplSyntaxOn
\clist_const:Nn\l_list{a,b}

\NewDocumentCommand{\mezzocommand}{m O{0}}{
    $#1 + \clist_item:Nn\l_list{#2+1}$
}
\ExplSyntaxOff

\begin{document}

\mezzocommand{x}[1]

\end{document}

答案2

当然,您可以使用pgfmath(包括在内tikz)。另一方面,您真正想要的是什么并不十分清楚。

\documentclass{article}
\usepackage{pgfmath}

\NewDocumentCommand{\mezzocommand}{m O{0}}{%
    ${#1} + \pgfmathparse{\foo[#2]}\pgfmathresult$%
}

\def\foo{{"a","b"}}

\begin{document}

\mezzocommand{x}

\mezzocommand{x}[1]

\end{document}

在此处输入图片描述

或者:

\documentclass{article}

\ExplSyntaxOn

\NewDocumentCommand{\definepseudoarray}{mm}
 {
  \clist_new:c { l__mezzo_ \cs_to_str:N #1 _clist }
  \clist_set:cn { l__mezzo_ \cs_to_str:N #1 _clist } { #2 }
  \NewDocumentCommand{#1}{O{0}}
   {
    \clist_item:cn { l__mezzo_ \cs_to_str:N #1 _clist } { ##1 + 1 }
   }
 }

\ExplSyntaxOff

\NewDocumentCommand{\mezzocommand}{m O{0}}{%
    $#1 + \foo[#2]$%
}

\definepseudoarray\foo{a,b}

\begin{document}

\mezzocommand{x}

\mezzocommand{x}[1]

\end{document}

\foo如果对命令使用强制参数而不是可选参数,则可以使命令可扩展。

\documentclass{article}

\ExplSyntaxOn

\NewDocumentCommand{\definepseudoarray}{mm}
 {
  \clist_new:c { l__mezzo_ \cs_to_str:N #1 _clist }
  \clist_set:cn { l__mezzo_ \cs_to_str:N #1 _clist } { #2 }
  \NewExpandableDocumentCommand{#1}{m}
   {
    \clist_item:cn { l__mezzo_ \cs_to_str:N #1 _clist } { ##1 + 1 }
   }
 }

\ExplSyntaxOff

\NewDocumentCommand{\mezzocommand}{m O{0}}{%
    $#1 + \foo{#2}$%
}

\definepseudoarray\foo{a,b}

\begin{document}

\mezzocommand{x}

\mezzocommand{x}[1]

\end{document}

相关内容