Fehlender \endcsname eingefügt (erneut posten mit MWE)

Fehlender \endcsname eingefügt (erneut posten mit MWE)

Ich poste es erneut als MWE und hoffe, dass es minimal genug ist. Tut mir leid, wenn irgendetwas irrelevant ist.

Ich erhalte diesen Fehler beim letzten '}' direkt vor dem Ende:

! 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.

hier ist das Dokument:

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

Ich verwende Overleaf, falls das etwas ändert. Ich bin auch für alle Optimierungen dankbar, die ich am Code vornehmen kann, die nichts mit dem Fehler zu tun haben. Vielen Dank.

BEARBEITEN: Wert auf Arabisch geändert, dadurch wurde der Endcsname-Fehler behoben, aber jetzt habe ich einen allgemeinen Kompilierungsfehler.

Antwort1

Während der Wert des -Zählers die Sequenz questionsist, die das Kontrollwort-Token definiert, um die Token-Sequenz zu liefern . Diese Token-Sequenz wiederum wird nicht zum Zeitpunkt der Definition ausgeführt/erweitert, sondern direkt nach der Verwendung/Erweiterung des Kontrollworts , wodurch der Wert des -Zählers nicht zum Zeitpunkt der Definition, sondern zum Zeitpunkt der Verwendung/Erweiterung des Kontrollworts aktuell ist . Sie möchten wahrscheinlich, dass die Sequenz zum Zeitpunkt der Definition erweitert wird .0\setq{\arabic{questions}}{Number}{\arabic{questions}}\qa:0.Number\arabic{questions}\qa:0.Numberquestion\qa:0.Number
\arabic{questions}\qa:0.Number

Anstelle von \arabic{questions}verwende ich \number\value{questions}, weil Sie bei letzterem nur eine \expandafter-Kette benötigen, um die Erweiterung auszulösen, bis der Wert abgerufen wird, während Sie bei weiterem vier \expandafter-Ketten benötigen:

 \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

Die erste \expandafter-Kette, die \expandafter\@arabic\csname c@questions\endcsnamevon abgerufen werden soll \arabic{questions}.

Die zweite \expandafter-Kette, die \@arabic\c@questionsvon abgerufen werden soll \expandafter\@arabic\csname c@questions\endcsname.

Die dritte \expandafter-Kette, die \number\c@questionsvon erhalten werden soll \@arabic\c@questions.

Die vierte \expandafter-Kette zum Abrufen der Folge von Dezimalziffern, die den Wert des -Registers \countbezeichnen .\c@questions\number\c@questions

Auf meinem System wird das folgende MWE ohne Fehler kompiliert:

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

Bildbeschreibung hier eingeben

Vielleicht interessiert Sie das \name-makro. Ich habe das \name-makro im Thread näher erläutert„Definieren Sie eine Steuersequenz, danach kommt ein Leerzeichen“das am 10. November 2016 bei TeX - LaTeX StackExchange gestartet wurde:

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

Bildbeschreibung hier eingeben

verwandte Informationen