Перепост как 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}