4

This question already has an answer here:

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}

marked as duplicate by Werner, Stefan Pinnow, Troy, Mensch, dexteritas Dec 4 '18 at 20:15

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

  • \csname fun\exam\endcsname – Phelype Oleinik Dec 4 '18 at 16:02
  • I added an answer to the duplicate question. – egreg Dec 4 '18 at 21:11
4

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 '18 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 ;) – Phelype Oleinik Dec 4 '18 at 16:24
  • @jfbu and @PhelypeOleinik: And etoolbox's \csuse, if we're compiling a list :). – Circumscribe Dec 4 '18 at 16:34
  • @Circumscribe good point! – user4686 Dec 4 '18 at 16:37
  • @PhelypeOleinik you can tilt to your right :) – user4686 Dec 4 '18 at 16:38

Not the answer you're looking for? Browse other questions tagged or ask your own question.