# Missing \endcsname inserted (repost with MWE)

Reposting as a MWE, hopefully this is minimal enough. Sorry if there's anything irrelevant.

I'm getting this error on the final '}' just before the end:

! Missing \endcsname inserted.
\c@questions
l.26 }

The control sequence marked <to be read again> should
not appear between \csname and \endcsname.


here's the document:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{totcount}
\usepackage{pgffor}

\begin{document}
\makeatletter
\newcommand\setq[3]{%
\global\@namedef{qa:#1.#2}{#3}%
}
\makeatother
\newtotcounter{questions}
\newcommand\newq[4]{%
\setq{\value{questions}}{Number}{\value{questions}}
\setq{\value{questions}}{Date}{#1}
\setq{\value{questions}}{Time}{#2}
\setq{\value{questions}}{Question}{#3}
\stepcounter{questions}
}

\newq{268}%
{10:25}%
{Can you create a latex project with multiple documents?}%
{Yes, at least you can in Overleaf. You click on the menu in the top-left, and change main document to the tex file you want to compile.%
}

\end{document}


I'm using overleaf if that changes anything. Any optimisations I can make to the code not-related to the error is also appreciated. Thank you.

EDIT: Changed value to arabic, that's removed the endcsname error, but now I have a general compilation error.

The LaTeX macro \value is used to access the value of a counter as a TeX number, in order to do e.g. something like

\newcounter{counterA}
\setcounter{counterA}{15}
\newcounter{counterB}
\setcounter{counterB}{\value{counterA}}
\arabic{counterB} % prints 15


If you want to just print the value of a counter you should use \theCOUNTER or \arabic{COUNTER} (or \alph, or \roman, or ...).

What is happening here? Basically you are trying to construct a macro

\csname qa:\value{questions}.Number\endcsname


but \value{questions} expands to \c@questions and this is not allowed within \csname...\endcsname. The help message which you quoted in your MWE says this quite clearly

! Missing \endcsname inserted.
\c@questions
l.26 }

The control sequence marked <to be read again> should
not appear between \csname and \endcsname.


The fact that the error message points at the last line containing only } is due to the fact that TeX has been collecting arguments up to that point before the expansion of \newq begins.

Long story short: use \arabic instead of \value. But note that your first definition in \setq might not be doing what you want: you are defining the macro involving Number as \arabic{question}, and this will not contain the present value of the counter. Your first \setq in the definition of \newq should be replaced by something like

\expandafter\xdef\csname qa:\arabic{questions}.Number\endcsname{\arabic{questions}}


(And maybe you should step the counter first...)

While the value of the questions-counter is 0 the sequence \setq{\arabic{questions}}{Number}{\arabic{questions}} yields defining the control-word-token \qa:0.Number to deliver the token-sequence \arabic{questions}. That token-sequence in turn will be carried out/expanded not at the time of defining but at the time right after using/expanding the control-word \qa:0.Number, yielding the value of the question-counter current not at the time of defining but at the time of using/expanding the control-word \qa:0.Number.
You probably wish to have the sequence \arabic{questions} expanded at the time of defining \qa:0.Number.

Instead of \arabic{questions} I use \number\value{questions} because with the latter you need only one \expandafter-chain for triggering expansion until obtaining the value while with the further you need four \expandafter-chains:

 \arabic=macro:
#1->\expandafter \@arabic \csname c@#1\endcsname .
l.16 \show\arabic

? i
insert> \show\@arabic
> \@arabic=macro:
#1->\number #1.
<insert>   \makeatletter\show\@arabic

l.16 \show\arabic


The first \expandafter-chain to obtain \expandafter\@arabic\csname c@questions\endcsname from \arabic{questions}.

The second \expandafter-chain to obtain \@arabic\c@questions from \expandafter\@arabic\csname c@questions\endcsname.

The third \expandafter-chain to obtain \number\c@questions from \@arabic\c@questions.

The fourth \expandafter-chain to obtain the sequence of decimal digits denoting the value of the \count-register \c@questions from \number\c@questions.

On my system the following MWE compiles without errors:

\documentclass{article}
% \usepackage[utf8]{inputenc}
\usepackage{totcount}
% \usepackage{pgffor}

\newcommand\PassFirstToSecond[2]{#2{#1}}
\newcommand\setq[3]{%
\global\csname @namedef\endcsname{qa:#1.#2}{#3}%
}
\newtotcounter{questions}
\newcommand\newq[4]{%
\expandafter\PassFirstToSecond\expandafter{\number\value{questions}}{\setq{\arabic{questions}}{Number}}%
\setq{\arabic{questions}}{Date}{#1}%
\setq{\arabic{questions}}{Time}{#2}%
\setq{\arabic{questions}}{Question}{#3}%
\stepcounter{questions}%
}

\newq{268}%
{10:25}%
{Can you create a latex project with multiple documents?}%
{Yes, at least you can in Overleaf. You click on the menu in the top-left, and change main document to the tex file you want to compile.%
}

\begin{document}

\par\noindent
\csname qa:0.Number\endcsname\\
\csname qa:0.Date\endcsname\\
\csname qa:0.Time\endcsname\\
\csname qa:0.Question\endcsname\\

\end{document}


You might be interested in the \name-macro. I elaborated on the \name-macro in the thread "Define a control sequence after that a space matters" which was started at TeX - LaTeX StackExchange in November 10, 2016 :

\documentclass{article}
% \usepackage[utf8]{inputenc}
\usepackage{totcount}
% \usepackage{pgffor}

\makeatletter
\newcommand\MyMacroNamePrefix@Exchange[2]{#2#1}%
\@ifdefinable\name{%
\long\def\name#1#{\romannumeral0\MyMacroNamePrefix@innername{#1}}%
}%
\newcommand\MyMacroNamePrefix@innername[2]{%
\expandafter\MyMacroNamePrefix@Exchange\expandafter{\csname#2\endcsname}{ #1}%
}%
\makeatother

\newtotcounter{questions}
\newcommand\newq[4]{%
\name\name{@ifdefinable}{qa:\arabic{questions}.Number}{%
\name\edef{qa:\arabic{questions}.Number}{\arabic{questions}}%
}%
\name\newcommand*{qa:\arabic{questions}.Date}{#1}%
\name\newcommand*{qa:\arabic{questions}.Time}{#2}%
\name\newcommand*{qa:\arabic{questions}.Question}{#3}%
\stepcounter{questions}%
}%

\newq{268}%
{10:25}%
{Can you create a latex project with multiple documents?}%
{Yes, at least you can in Overleaf. You click on the menu in the top-left, and change main document to the tex file you want to compile.%
}

\begin{document}

\par\noindent
\name{qa:0.Number}\\
\name{qa:0.Date}\\
\name{qa:0.Time}\\
\name{qa:0.Question}\\