Отсутствует вставленное \endcsname (перепост с MWE)

Отсутствует вставленное \endcsname (перепост с MWE)

Перепост как MWE, надеюсь, этого будет достаточно. Извините, если что-то не по теме.

Я получаю эту ошибку на последнем символе '}' прямо перед концом:

! Missing \endcsname inserted.
<to be read again> 
                   \c@questions 
l.26 }
      
The control sequence marked <to be read again> should
not appear between \csname and \endcsname.

вот документ:

\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}
    \setq{\value{questions}}{Answer}{#4}
    \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}

Я использую overleaf, если это что-то меняет. Любые оптимизации, которые я могу сделать в коде, не связанные с ошибкой, также приветствуются. Спасибо.

EDIT: Изменил значение на арабское, это устранило ошибку endcsname, но теперь у меня общая ошибка компиляции.

решение1

В то время как значение -counter questionsявляется 0последовательностью \setq{\arabic{questions}}{Number}{\arabic{questions}}yields, определяющей control-word-token \qa:0.Numberдля доставки token-sequence \arabic{questions}. Эта token-sequence в свою очередь будет выполнена/расширена не во время определения, а сразу после использования/расширения control-word \qa:0.Number, давая значение question-counter current не во время определения, а во время использования/расширения control-word \qa:0.Number.
Вероятно, вы захотите, чтобы последовательность \arabic{questions}была расширена во время определения \qa:0.Number.

Вместо этого \arabic{questions}я использую \number\value{questions}, потому что в последнем случае вам нужна только одна \expandafter-цепочка для запуска расширения до получения значения, тогда как в дальнейшем вам нужны четыре \expandafter-цепочки:

 \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

Первая \expandafter-цепочка, которую нужно получить \expandafter\@arabic\csname c@questions\endcsnameиз \arabic{questions}.

Вторая \expandafter-цепочка, которую нужно получить \@arabic\c@questionsиз \expandafter\@arabic\csname c@questions\endcsname.

Третья \expandafterцепочка, которую нужно получить \number\c@questionsиз \@arabic\c@questions.

Четвертая \expandafterцепочка для получения последовательности десятичных цифр, обозначающих значение \countрегистра \c@questionsиз \number\c@questions.

В моей системе следующий MWE компилируется без ошибок:

\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}%
    \setq{\arabic{questions}}{Answer}{#4}%
    \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\\
\csname qa:0.Answer\endcsname

\end{document}

введите описание изображения здесь

Вас может заинтересовать -макрос \name. Я подробно описал \name-макрос в теме«Определите последовательность управления, после которой пробел имеет значение»который был начат в TeX - LaTeX StackExchange 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}%
    \name\newcommand*{qa:\arabic{questions}.Answer}{#4}%
    \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}\\
\name{qa:0.Answer}

\end{document}

введите описание изображения здесь

Связанный контент