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}