Volver a publicar como MWE, con suerte, esto será lo suficientemente mínimo. Lo siento si hay algo irrelevante.
Recibo este error en el '}' final justo antes del final:
! 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.
aquí está el documento:
\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}
Estoy usando el dorso si eso cambia algo. También se agradece cualquier optimización que pueda hacer en el código que no esté relacionada con el error. Gracias.
EDITAR: Se cambió el valor a árabe, se eliminó el error endcsname, pero ahora tengo un error de compilación general.
Respuesta1
Si bien el valor de questions
-counter es 0
la secuencia \setq{\arabic{questions}}{Number}{\arabic{questions}}
, se define el token de palabra de control \qa:0.Number
para entregar la secuencia de token \arabic{questions}
. Esa secuencia de tokens, a su vez, se llevará a cabo/expandirá no en el momento de la definición, sino en el momento justo después de usar/expandir la palabra de control \qa:0.Number
, produciendo el valor de la question
corriente del contador no en el momento de la definición, sino en el momento. de usar/expandir la palabra de control \qa:0.Number
.
Probablemente desee \arabic{questions}
ampliar la secuencia al momento de definirla \qa:0.Number
.
En lugar de \arabic{questions}
lo uso \number\value{questions}
porque con este último solo necesitas una \expandafter
cadena para activar la expansión hasta obtener el valor, mientras que con el más necesitas cuatro \expandafter
cadenas:
\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
La primera \expandafter
cadena \expandafter\@arabic\csname c@questions\endcsname
de la que se puede obtener \arabic{questions}
.
La segunda \expandafter
cadena para \@arabic\c@questions
obtener \expandafter\@arabic\csname c@questions\endcsname
.
La tercera \expandafter
cadena para \number\c@questions
obtener \@arabic\c@questions
.
La cuarta \expandafter
cadena para obtener la secuencia de dígitos decimales que denota el valor del \count
registro \c@questions
de \number\c@questions
.
En mi sistema el siguiente MWE se compila sin errores:
\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}
Quizás te interese la \name
-macro. He elaborado sobre la \name
-macro en el hilo."Defina una secuencia de control después de eso un espacio importa"que se inició en TeX - LaTeX StackExchange el 10 de noviembre de 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}