欠落している \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

questions-counterの値が0シーケンスである間\setq{\arabic{questions}}{Number}{\arabic{questions}}、制御ワード トークンを定義して\qa:0.Numberトークン シーケンスを配信します\arabic{questions}。そのトークン シーケンスは、定義時ではなく制御ワードの使用/展開直後に実行/展開され、定義時ではなく制御ワードの使用/展開時の -counter\qa:0.Numberの値を生成します。おそらく、定義時に シーケンスを展開することをお勧めします。question\qa:0.Number
\arabic{questions}\qa:0.Number

の代わりに\arabic{questions}を使用します\number\value{questions}。後者の場合、\expandafter値を取得するまで展開をトリガーするために必要なのは 1 つの -chain だけですが、さらにの場合は 4 つの\expandafter-chain が必要になるためです。

 \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取得する最初の-chain 。\expandafter\@arabic\csname c@questions\endcsname\arabic{questions}

から\expandafter取得する2 番目の-chain 。\@arabic\c@questions\expandafter\@arabic\csname c@questions\endcsname

から\expandafter取得する3 番目の-chain 。\number\c@questions\@arabic\c@questions

4 番目の-chain は、 -register\expandafterの値を表す 10 進数のシーケンスをから取得します。\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スレッドで-マクロについて詳しく説明しました「スペースが重要になる制御シーケンスを定義します」これは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}

ここに画像の説明を入力してください

関連情報