这是我的代码:
\newcommand{\testtest}[1]{%%
\stepcounter{aebir@prob@cnt}%%
\edef\aebir@tmp{#1}}
\testtest{$\frac{1}{2}$}
\aebir@tmp{}
这会打印出 1/2,这没问题。但如果我尝试写类似
\newcommand{\testtest}[1]{%%
\stepcounter{aebir@prob@cnt}%%
\edef\aebir@tmp{#1}}
\testtest{\textbf{A}}
\aebir@tmp{}
这不会打印粗体字母 A。这根本无法运行。这是我的较长代码的一部分,但我需要先解决这个问题。
问题可能出在那个 {#1} 上。因为
\def\aeiki@tmp{\textbf{A}}
\aeiki@tmp{}
这工作得很好。
谢谢!
抱歉,解释得不好。这是我的完整代码,我需要用它来创建答案。
\documentclass{article}
\begin{document}
\makeatletter
\newcounter{aebir@prob@cnt}
\let\aebir@answer@key\relax
\newcommand\dogrucevapbir[1]{%%
\stepcounter{aebir@prob@cnt}%%
\edef\aebir@tmp{\theaebir@prob@cnt/#1}%%
\ifx\relax\aebir@answer@key
\edef\aebir@answer@key{\aebir@tmp}%%
\else
\edef\aebir@answer@key{\aebir@answer@key,\aebir@tmp}%%
\fi
}
Question 1: Correct answer is A.
\dogrucevapbir{A}
Question 2: Correct answer is B.
\dogrucevapbir{B}
Question 3: Correct answer is C.
\dogrucevapbir{C}
Here is the answer key:
\aebir@answer@key{}
\end{document}
结果:
但是如果我尝试 \dogrucevapbir{\textbf{A}} 或 \dogrucevapbir{\dfrac{1}{2}} 之类的操作,就会出现错误。
答案1
您不能\edef
在任意 latex 输入上使用。您没有给出希望命令执行什么操作的指示,但看起来这里不需要扩展,因此您可以使用\def
。
\documentclass{article}
\begin{document}
\makeatletter
\newcounter{aebir@prob@cnt}
\newcommand{\testtest}[1]{%%
\stepcounter{aebir@prob@cnt}%%
\def\aebir@tmp{#1}}
\testtest{$\frac{1}{2}$}
\aebir@tmp{}
\testtest{\textbf{A}}
\aebir@tmp{}
\end{document}
答案2
我建议使用旧式命令。你可以使用\edef
,但你必须知道你想扩展什么,不想扩展什么。
\newcount\probcnt
\def\answerkey{}
\def\dogrucevapbir#1{%
\global\advance\probcnt by1
\xdef\answerkey{\ifnum\probcnt=1 1\else
\unexpanded\expandafter{\answerkey}, \the\probcnt\fi
/\unexpanded{#1}}%
}
Question 1: Correct answer is A.
\dogrucevapbir{A}
Question 2: Correct answer is B.
\dogrucevapbir{B}
Question 3: Correct answer is C.
\dogrucevapbir{C}
Here is the answer key:
\answerkey
答案3
我建议使用新样式的命令。
\documentclass{article}
\ExplSyntaxOn
\int_new:N \g_ertan_answer_count_int
\clist_new:N \g_ertan_answer_keys_clist
\NewDocumentCommand{\dogrucevapbir}{m}
{
\int_gincr:N \g_ertan_answer_count_int
\clist_gput_right:Nx \g_ertan_answer_keys_clist
{
\int_to_arabic:n { \g_ertan_answer_count_int } / \exp_not:n {#1}
}
}
\NewDocumentCommand{\printanswerkeys}{}
{
\clist_use:Nn \g_ertan_answer_keys_clist { ,~ }
}
\ExplSyntaxOff
\begin{document}
Question 1: Correct answer is A.
\dogrucevapbir{A}
Question 2: Correct answer is B.
\dogrucevapbir{$\frac{1}{2}$}
Question 3: Correct answer is C.
\dogrucevapbir{\textbf{C}}
Here is the answer key:
\printanswerkeys
\end{document}