# Can you create concatenate variable names in LaTex? [duplicate]

I would like to create variables to hold strings like f(x)=3x+1 to be inputted into an exam questions.

I can create variables like \funA, \funB, … et cetera. The problem is how do I reference them using A, B, … et cetera.

\documentclass[12pt]{exam}

% conditional statements
\usepackage{xifthen}

\newcommand{\exam}{A}

\newcommand{\funA}{$s(t) = 12t^2 -7t + 16$}
\newcommand{\funB}{$s(t) = 16t^2 +3t + 10$}
\newcommand{\funC}{$s(t) = 12t^2 + t + 10.$}

\begin{document}

\begin{questions}

\question % I would like \fun\exam to return \funA when \exam = a. Sadly it doesn't

The position of an object moving along a straight line is given by \fun\exam. Find the average velocity of the object over the interval $[1,1+h]$ where $h>0$ is a real number.

\question % this works but is a lot to write when accommodating 10 stored functions

\ifthenelse{\equal{\exam}{A}}
{
\newcommand{\function}{$s(t) = 12t^2 -7t + 16.$}
}
{
\ifthenelse{\equal{\exam}{B}}
{
\newcommand{\function}{$s(t) = 16t^2 +3t + 10.$}
}
{
\newcommand{\function}{$s(t) = 12t^2 + t + 10.$}
}
}

The position of an object moving along a straight line is given by \function\ Find the average velocity of the object over the interval $[1,1+h]$ where $h>0$ is a real number.

\end{questions}
\end{document}

• \csname fun\exam\endcsname Dec 4, 2018 at 16:02
• I added an answer to the duplicate question. Dec 4, 2018 at 21:11

TeX allows you to reference control sequence names using a \csname...\endcsname pair. Any command inside this \csname...\endcsname pair will be expanded (i.e.: replaced by its meaning) until only unexpandable tokens are left, then TeX creates a control sequence out of the contents passed to \csname...\endcsname.

For instance, if you have \newcommand{\exam}{A}, then \csname funA\endcsname and \csname fun\exam\endcsname will both expand to \funA. You can create a wrapper command to avoid writing \csname...\endcsname every single time:

\documentclass[12pt]{exam}

\newcommand{\exam}{A}

\newcommand{\fun}[1]{\csname fun#1\endcsname}
% or:
% \newcommand{\fun}{\csname fun\exam\endcsname}, then use just \fun instead of \fun\exam
\newcommand{\funA}{$s(t) = 12t^2 -7t + 16$}
\newcommand{\funB}{$s(t) = 16t^2 +3t + 10$}
\newcommand{\funC}{$s(t) = 12t^2 + t + 10$}

\begin{document}

\begin{questions}

\question

The position of an object moving along a straight line is given by \fun\exam. Find the average velocity of the object over the interval $[1,1+h]$ where $h>0$ is a real number.

\end{questions}
\end{document}

• LaTeX has \@nameuse but unfortunately it has a @ in its name...
– user4686
Dec 4, 2018 at 16:21
• @jfbu And there's expl3's \use:c too, but if you tilt your head to the left it looks too sad ;) Dec 4, 2018 at 16:24
• @jfbu and @PhelypeOleinik: And etoolbox's \csuse, if we're compiling a list :). Dec 4, 2018 at 16:34
• @Circumscribe good point!
– user4686
Dec 4, 2018 at 16:37
• @PhelypeOleinik you can tilt to your right :)
– user4686
Dec 4, 2018 at 16:38