누락된 \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를 사용하고 있습니다. 오류와 관련되지 않은 코드에 대한 최적화도 높이 평가됩니다. 감사합니다.

편집: 값을 아랍어로 변경하여 endcsname 오류가 제거되었지만 이제 일반 컴파일 오류가 발생합니다.

답변1

-counter 의 값이 시퀀스 questions인 반면 , token-sequence를 전달하기 위해 control-word-token을 정의하는 결과가 나옵니다 . 해당 토큰 시퀀스는 정의 시점이 아닌 제어 단어를 사용/확장한 직후에 수행/확장되어 정의 시점이 아닌 시점에 카운터 전류 값을 생성합니다. 제어 단어를 사용/확장합니다 . 를 정의할 때 시퀀스를 확장하고 싶을 수도 있습니다 .0\setq{\arabic{questions}}{Number}{\arabic{questions}}\qa:0.Number\arabic{questions}\qa:0.Numberquestion\qa:0.Number
\arabic{questions}\qa:0.Number

대신 에 후자를 사용하는 경우 값을 얻을 때까지 확장을 트리거하기 위해 단 하나의 -chain만 필요하고 그 이상을 사용하려면 4개의 -chain이 필요하기 때문에 \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}

여기에 이미지 설명을 입력하세요

-macro 에 관심이 있을 수도 있습니다 \name. \name스레드의 -macro 에 대해 자세히 설명했습니다."공간이 중요한 이후에 제어 순서를 정의하십시오"2016년 11월 10일 TeX - LaTeX StackExchange에서 시작되었습니다.

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

여기에 이미지 설명을 입력하세요

관련 정보