nuevo comando: pasar coordenadas como un solo argumento

nuevo comando: pasar coordenadas como un solo argumento

¿Es posible pasar un argumento de matriz newcommandy luego acceder a esos elementos de matriz individuales?

Por ejemplo, si quisiera multiplicar el tercer elemento de la matriz (primer argumento) por el valor del segundo argumento:

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

(La nota n.º 1. n.º 3 probablemente sea incorrecta; pregunto cómo acceder a este valor).

Y usando el comando en el código del cuerpo:

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

Editar: ¿ejemplo de trabajo mínimo?

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

En realidad no se trata de multiplicar (supongo que no sé cómo multiplicar números newcommand), pero eso no es importante para mí y de cualquier manera quiero poder acceder a los valores de los argumentos. Excepto en el primer argumento, me gustaría poder pasar una matriz y acceder a cada elemento específico de la misma.individualmente(es decir, sin recorrerlo), que no se expresa en absoluto en el MWE.

Respuesta1

Lo siguiente podría serle adecuado:

ingrese la descripción de la imagen aquí

\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>}crea la matriz <array>con elementos contenidos dentro de la lista de valores separados por comas <csv list>. \getelement{<array>}{<num>}actúa como una indexación de matriz, mientras que \calcse puede utilizar para realizar cálculos ennuméricoelementos.

El enfoque le permite almacenar prácticamente cualquier cosa en la matriz, en lugar de solo números (y/o mezclarlos).

Respuesta2

¿Es esto algo parecido a lo que quieres decir? Quizás esto pueda ayudarte a empezar.

\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}

información relacionada