newcommand:将坐标作为单个参数传递

newcommand:将坐标作为单个参数传递

是否可以传递数组参数newcommand然后访问那些单独的数组元素?

例如,如果我想将数组的第三个元素(第一个参数)乘以第二个参数的值:

\newcommand{\hello}[2]{(#1.#3)*#2}

(注意#1.#3 可能不正确,我问的是怎样访问这个值。)

并在主体代码中使用命令:

I want \hello{1,2,5}{2} gumdrops.

编辑:最小工作示例?

\documentclass{standalone}
\newcommand{\hello}[2]{(#1)*(#2)}
\begin{document}
I want \hello{1}{2} gumdrops.
\end{document}

它实际上不是乘法(我想我不知道如何在 中乘以数字newcommand),但这对我来说并不重要,无论如何我都希望能够访问参数的值。除了第一个参数,我希望能够传递一个数组并访问它的每个特定元素单独地(即不循环),这在 MWE 中完全没有表达。

答案1

以下内容可能适合您:

在此处输入图片描述

\documentclass{article}
\usepackage{etoolbox,xparse}

\ExplSyntaxOn
  \cs_new_eq:NN \CALC \fp_eval:n
\ExplSyntaxOff

\newcounter{argcnt}
\makeatletter
\newcommand{\newarray}[2]{% \newarray{<array>}{<csv list>}
  \setcounter{argcnt}{0}% Restart argument count
  \renewcommand{\do}[1]{% With each element do...
    \stepcounter{argcnt}% Next arg
    \expandafter\gdef\csname #1@\theargcnt\endcsname{##1}% Store arg in \<array>@<num>
  }%
  \docsvlist{#2}% Store array
  \expandafter\xdef\csname #1@0\endcsname{\theargcnt}% Store array element count
}
\newcommand{\getelement}[2]{% \getelement{<array>}{<num>}
  \@ifundefined{#1@0}% <array> not defined
    {\@latex@error{Array #1 undefined}\@ehc}{}
  \expandafter\ifnum\csname #1@0\endcsname<#2 % <num> out of range
    \@latex@error{Array #1 only has \csname #1@0\endcsname\space elements}\@ehc
  \fi
  \csname #1@#2\endcsname% Print element
}
\newcommand{\calc}[1]{\expandafter\CALC\expandafter{#1}}% calculations
\makeatother

\begin{document}
\newarray{arrayA}{a,b,c}%
\newarray{arrayB}{1,2,3}%

\getelement{arrayA}{1}

$2 \times \getelement{arrayB}{2} + \getelement{arrayB}{3} = \calc{2*\getelement{arrayB}{2}+\getelement{arrayB}{3}}$
\end{document}

\newarray{<array>}{<csv list>}<array>创建包含逗号分隔值列表元素的数组<csv list>\getelement{<array>}{<num>}作用类似于数组索引,而\calc可用于执行计算数字元素。

该方法允许您在数组中存储几乎任何内容,而不仅仅是数字(和/或混合它们)。

答案2

这和你的意思一样吗?也许这可以帮你入门。

\documentclass{article}

\newcommand{\twothings}[2]{%
    \gdef\thingone{#1}
    \gdef\thingtwo{#2}
}

\newcommand{\pickone}[1]{%
    \ifnum#1 = 1
        \thingone
    \else
        \ifnum#1 = 2
            \thingtwo
        \else
            \relax
        \fi
    \fi%
}

\begin{document}

\twothings{First}{Second}

The second thing is \pickone{2}.

\end{document}

相关内容