![newcommand:将坐标作为单个参数传递](https://linux22.com/image/305778/newcommand%EF%BC%9A%E5%B0%86%E5%9D%90%E6%A0%87%E4%BD%9C%E4%B8%BA%E5%8D%95%E4%B8%AA%E5%8F%82%E6%95%B0%E4%BC%A0%E9%80%92.png)
是否可以传递数组参数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}